edit.vue 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  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="110px">
  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="interval">
  12. <el-input v-model="ruleForm.interval" placeholder="请输入更新时间" class="w-35" />
  13. <el-select v-model="ruleForm.intervalUnit" placeholder="请选择单位">
  14. <el-option v-for="item in unitData" :key="item.value" :label="item.label" :value="item.value" />
  15. </el-select>
  16. </el-form-item>
  17. <el-form-item label="描述" prop="desc">
  18. <el-input v-model="ruleForm.desc" type="textarea" placeholder="请输入内容"></el-input>
  19. </el-form-item>
  20. </el-form>
  21. <template #footer>
  22. <span class="dialog-footer">
  23. <el-button @click="onCancel" size="default">取 消</el-button>
  24. <el-button type="primary" @click="onSubmit" size="default">{{ ruleForm.id !== 0 ? '修 改' : '添 加' }}</el-button>
  25. </span>
  26. </template>
  27. </el-dialog>
  28. </div>
  29. </template>
  30. <script lang="ts">
  31. import { reactive, toRefs, defineComponent, ref, unref } from 'vue';
  32. import api from '/@/api/datahub';
  33. import { ElMessage } from 'element-plus';
  34. interface RuleFormState {
  35. id?: number;
  36. name: string;
  37. interval: string;
  38. key: string;
  39. desc: string;
  40. }
  41. interface DicState {
  42. isShowDialog: boolean;
  43. ruleForm: RuleFormState;
  44. rules: {};
  45. }
  46. export default defineComponent({
  47. name: 'Edit',
  48. setup(prop, { emit }) {
  49. const formRef = ref<HTMLElement | null>(null);
  50. const state = reactive<DicState>({
  51. isShowDialog: false,
  52. unitData: [
  53. {
  54. label: '秒',
  55. value: 'second',
  56. },
  57. {
  58. label: '分',
  59. value: 'minute',
  60. },
  61. {
  62. label: '时',
  63. value: 'hour',
  64. },
  65. {
  66. label: '天',
  67. value: 'day',
  68. },
  69. ],
  70. ruleForm: {
  71. id: 0,
  72. name: '',
  73. key: '',
  74. desc: '',
  75. },
  76. rules: {
  77. key: [{ required: true, message: '模型标识不能为空', trigger: 'blur' }],
  78. name: [{ required: true, message: '模型名称不能为空', trigger: 'blur' }],
  79. interval: [{ required: true, message: '请输入更新时间', trigger: 'blur' }],
  80. },
  81. });
  82. // 打开弹窗
  83. const openDialog = (row: RuleFormState | null) => {
  84. resetForm();
  85. if (row) {
  86. state.ruleForm = row;
  87. }
  88. state.isShowDialog = true;
  89. };
  90. const resetForm = () => {
  91. state.ruleForm = {
  92. id: 0,
  93. name: '',
  94. key: '',
  95. desc: '',
  96. };
  97. };
  98. // 关闭弹窗
  99. const closeDialog = () => {
  100. state.isShowDialog = false;
  101. };
  102. // 取消
  103. const onCancel = () => {
  104. closeDialog();
  105. };
  106. // 新增
  107. const onSubmit = () => {
  108. const formWrap = unref(formRef) as any;
  109. if (!formWrap) return;
  110. formWrap.validate((valid: boolean) => {
  111. if (valid) {
  112. if (state.ruleForm.id !== 0) {
  113. //修改
  114. api.template.edit(state.ruleForm).then(() => {
  115. ElMessage.success('模型类型修改成功');
  116. closeDialog(); // 关闭弹窗
  117. emit('typeList');
  118. });
  119. } else {
  120. //添加
  121. api.template.add(state.ruleForm).then(() => {
  122. ElMessage.success('模型类型添加成功');
  123. closeDialog(); // 关闭弹窗
  124. emit('typeList');
  125. });
  126. }
  127. }
  128. });
  129. };
  130. return {
  131. openDialog,
  132. closeDialog,
  133. onCancel,
  134. onSubmit,
  135. formRef,
  136. ...toRefs(state),
  137. };
  138. },
  139. });
  140. </script>