editPro.vue 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. <template>
  2. <div class="system-edit-dic-container">
  3. <el-dialog :title="(ruleForm.id !== 0 ? '修改' : '添加')" v-model="isShowDialog" width="769px">
  4. <el-form :model="ruleForm" ref="formRef" :rules="rules" size="default" label-width="90px">
  5. <el-form-item label="IP地址" prop="ip">
  6. <el-input type="textarea" v-model="ruleForm.ip" placeholder="请输入IP地址" />
  7. <div style="color: #a4a4a4;line-height: 20px;">
  8. <div>支持添加IP:如果添加多个IP请用“,”隔开</div>
  9. <div v-if="ruleForm.id == 0">支持添加IP段,如192.168.0.0/24</div>
  10. <div>支持添加IP范围,格式如:192.168.1.xx-192.168.1.xx</div>
  11. </div>
  12. </el-form-item>
  13. <el-form-item label="状态" prop="status">
  14. <el-radio-group v-model="ruleForm.status">
  15. <el-radio label="1">正常</el-radio>
  16. <el-radio label="0">已禁用</el-radio>
  17. </el-radio-group>
  18. </el-form-item>
  19. <el-form-item label="备注 " prop="remark">
  20. <el-input v-model="ruleForm.remark" type="textarea" placeholder="请输入备注"></el-input>
  21. </el-form-item>
  22. </el-form>
  23. <template #footer>
  24. <span class="dialog-footer">
  25. <el-button @click="onCancel" size="default">取 消</el-button>
  26. <el-button type="primary" @click="onSubmit" size="default">{{ ruleForm.id !== 0 ? '修 改' : '添 加' }}</el-button>
  27. </span>
  28. </template>
  29. </el-dialog>
  30. </div>
  31. </template>
  32. <script lang="ts">
  33. import { reactive, toRefs, defineComponent, ref, unref, getCurrentInstance } from 'vue';
  34. import api from '/@/api/system';
  35. import { ElMessage } from "element-plus";
  36. import getOrigin from '/@/utils/origin'
  37. interface RuleFormState {
  38. id: number;
  39. status: string;
  40. remark: string;
  41. }
  42. interface DicState {
  43. isShowDialog: boolean;
  44. ruleForm: RuleFormState;
  45. cateData: RuleFormState[];
  46. deptData: RuleFormState[];
  47. messageData: RuleFormState[];
  48. tranData: RuleFormState[];
  49. rules: {}
  50. }
  51. export default defineComponent({
  52. name: 'deviceEditPro',
  53. setup(prop, { emit }) {
  54. const formRef = ref<HTMLElement | null>(null);
  55. const baseURL: string | undefined | boolean = getOrigin(import.meta.env.VITE_API_URL)
  56. const { proxy } = getCurrentInstance() as any;
  57. const { network_server_type, network_protocols } = proxy.useDict('network_server_type', 'network_protocols');
  58. const state = reactive<DicState>({
  59. isShowDialog: false,
  60. cateData: [], // 分类数据
  61. deptData: [], //
  62. messageData: [], //
  63. tranData: [], //
  64. imageUrl: "", //
  65. singleImg: baseURL + "/product/icon/upload",
  66. ruleForm: {
  67. id: 0,
  68. status: '1',
  69. remark: ''
  70. },
  71. rules: {
  72. ip: [
  73. { required: true, message: "IP地址不能为空", trigger: "blur" }
  74. ],
  75. status: [
  76. { required: true, message: "备注不能为空", trigger: "change" }
  77. ],
  78. remark: [
  79. { required: true, message: "备注不能为空", trigger: "blur" }
  80. ]
  81. }
  82. });
  83. // 打开弹窗
  84. const openDialog = (row: RuleFormState | null) => {
  85. resetForm();
  86. if (row) {
  87. state.ruleForm = row;
  88. }
  89. state.isShowDialog = true;
  90. };
  91. const resetForm = () => {
  92. state.ruleForm = {
  93. id: 0,
  94. // name: '',
  95. // dictType: '',
  96. // deviceType: '设备',
  97. status: '1',
  98. remark: ''
  99. }
  100. };
  101. // 关闭弹窗
  102. const closeDialog = () => {
  103. state.isShowDialog = false;
  104. };
  105. // 取消
  106. const onCancel = () => {
  107. closeDialog();
  108. };
  109. // 新增
  110. const onSubmit = () => {
  111. const formWrap = unref(formRef) as any;
  112. if (!formWrap) return;
  113. formWrap.validate((valid: boolean) => {
  114. if (valid) {
  115. if (state.ruleForm.id !== 0) {
  116. //修改
  117. api.blackList.edit(state.ruleForm).then(() => {
  118. ElMessage.success('黑名单修改成功');
  119. closeDialog(); // 关闭弹窗
  120. emit('typeList')
  121. })
  122. } else {
  123. //添加
  124. delete state.ruleForm.id;
  125. api.blackList.add(state.ruleForm).then(() => {
  126. ElMessage.success('黑名单添加成功');
  127. closeDialog(); // 关闭弹窗
  128. emit('typeList')
  129. })
  130. }
  131. }
  132. });
  133. };
  134. return {
  135. openDialog,
  136. closeDialog,
  137. onCancel,
  138. onSubmit,
  139. network_server_type,
  140. network_protocols,
  141. formRef,
  142. ...toRefs(state),
  143. };
  144. },
  145. });
  146. </script>
  147. <style scoped>
  148. .avatar-uploader .avatar {
  149. width: 178px;
  150. height: 178px;
  151. display: block;
  152. }
  153. </style>
  154. <style>
  155. .avatar-uploader .el-upload {
  156. border: 1px dashed var(--el-border-color);
  157. border-radius: 6px;
  158. cursor: pointer;
  159. position: relative;
  160. overflow: hidden;
  161. transition: var(--el-transition-duration-fast);
  162. }
  163. .avatar-uploader .el-upload:hover {
  164. border-color: var(--el-color-primary);
  165. }
  166. .el-icon.avatar-uploader-icon {
  167. font-size: 28px;
  168. color: #8c939d;
  169. width: 178px;
  170. height: 178px;
  171. text-align: center;
  172. }
  173. </style>