editFun.vue 5.2 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="120px">
  5. <el-form-item label="功能定义标识" prop="key">
  6. <el-input v-model="ruleForm.key" placeholder="请输入功能定义标识" />
  7. </el-form-item>
  8. <el-form-item label="功能定义名称" prop="name">
  9. <el-input v-model="ruleForm.name" placeholder="请输入功能定义名称" />
  10. </el-form-item>
  11. <el-form-item label="数据类型" prop="valueType">
  12. <el-select v-model="ruleForm.valueType" placeholder="请选择数据类型">
  13. <el-option-group v-for="group in typeData" :key="group" :label="group">
  14. <el-option v-for="item in group.options" :key="item.value" :label="item.label" :value="item.value" />
  15. </el-option-group>
  16. </el-select>
  17. </el-form-item>
  18. <el-form-item label="是否只读" prop="accessMode">
  19. <el-radio-group v-model="ruleForm.accessMode">
  20. <el-radio label="1">只读</el-radio>
  21. <el-radio label="0">读写</el-radio>
  22. </el-radio-group>
  23. </el-form-item>
  24. <el-form-item label="功能定义描述 " prop="desc">
  25. <el-input v-model="ruleForm.desc" type="textarea" placeholder="请输入功能定义描述"></el-input>
  26. </el-form-item>
  27. </el-form>
  28. <template #footer>
  29. <span class="dialog-footer">
  30. <el-button @click="onCancel" size="default">取 消</el-button>
  31. <el-button type="primary" @click="onSubmit" size="default">{{ ruleForm.id !== 0 ? '修 改' : '添 加' }}</el-button>
  32. </span>
  33. </template>
  34. </el-dialog>
  35. </div>
  36. </template>
  37. <script lang="ts">
  38. import { reactive, toRefs, defineComponent, ref, unref } from 'vue';
  39. import api from '/@/api/device';
  40. import { ElMessage } from "element-plus";
  41. interface RuleFormState {
  42. id: number;
  43. name: string;
  44. dictType: string;
  45. status: number;
  46. desc: string;
  47. }
  48. interface DicState {
  49. isShowDialog: boolean;
  50. ruleForm: RuleFormState;
  51. typeData: RuleFormState[];
  52. rules: {}
  53. }
  54. export default defineComponent({
  55. name: 'deviceEditPro',
  56. setup(prop, { emit }) {
  57. const formRef = ref<HTMLElement | null>(null);
  58. const state = reactive<DicState>({
  59. isShowDialog: false,
  60. typeData: [], //
  61. ruleForm: {
  62. id: 0,
  63. name: '',
  64. key: '',
  65. transportProtocol: '',
  66. accessMode: '1',
  67. status: 1,
  68. desc: ''
  69. },
  70. rules: {
  71. name: [
  72. { required: true, message: "功能定义名称不能为空", trigger: "blur" }
  73. ],
  74. key: [
  75. { required: true, message: "功能定义标识不能为空", trigger: "blur" }
  76. ],
  77. accessMode: [{ required: true, message: '功能定义分类不能为空', trigger: 'blur' }],
  78. deptId: [{ required: true, message: '所属组织不能为空', trigger: 'blur' }],
  79. deviceType: [{ required: true, message: '设备类型不能为空', trigger: 'blur' }],
  80. }
  81. });
  82. // 打开弹窗
  83. const openDialog = (row: RuleFormState | null) => {
  84. resetForm();
  85. api.product.getDataType({ status: -1 }).then((res: any) => {
  86. state.typeData = res.dataType || [];
  87. });
  88. if (row) {
  89. state.ruleForm = row;
  90. }
  91. state.isShowDialog = true;
  92. };
  93. const resetForm = () => {
  94. state.ruleForm = {
  95. id: 0,
  96. name: '',
  97. dictType: '',
  98. status: 1,
  99. desc: ''
  100. }
  101. };
  102. // 关闭弹窗
  103. const closeDialog = () => {
  104. state.isShowDialog = false;
  105. };
  106. // 取消
  107. const onCancel = () => {
  108. closeDialog();
  109. };
  110. // 新增
  111. const onSubmit = () => {
  112. const formWrap = unref(formRef) as any;
  113. if (!formWrap) return;
  114. formWrap.validate((valid: boolean) => {
  115. if (valid) {
  116. if (state.ruleForm.id !== 0) {
  117. //修改
  118. api.product.edit(state.ruleForm).then(() => {
  119. ElMessage.success('功能定义类型修改成功');
  120. closeDialog(); // 关闭弹窗
  121. emit('typeList')
  122. })
  123. } else {
  124. //添加
  125. api.product.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. formRef,
  140. ...toRefs(state),
  141. };
  142. },
  143. });
  144. </script>
  145. <style scoped>
  146. .avatar-uploader .avatar {
  147. width: 178px;
  148. height: 178px;
  149. display: block;
  150. }
  151. </style>
  152. <style>
  153. .avatar-uploader .el-upload {
  154. border: 1px dashed var(--el-border-color);
  155. border-radius: 6px;
  156. cursor: pointer;
  157. position: relative;
  158. overflow: hidden;
  159. transition: var(--el-transition-duration-fast);
  160. }
  161. .avatar-uploader .el-upload:hover {
  162. border-color: var(--el-color-primary);
  163. }
  164. .el-icon.avatar-uploader-icon {
  165. font-size: 28px;
  166. color: #8c939d;
  167. width: 178px;
  168. height: 178px;
  169. text-align: center;
  170. }
  171. </style>