edit.vue 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  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="请输入模型名称" :disabled="ruleForm.id"/>
  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="定时请求">
  18. <el-input v-model="ruleForm.cronExpression" placeholder="请输入cron表达式" />
  19. <ul style="list-style: none;">
  20. <li><el-icon><ele-WarningFilled /></el-icon> */5 * * * * ? : 每隔5秒执行一次</li>
  21. <li><el-icon><ele-WarningFilled /></el-icon> 20 */1 * * * ? : 每隔1分钟执行一次</li>
  22. <li><el-icon><ele-WarningFilled /></el-icon> 30 0 23 * * ? : 每天23点执行一次</li>
  23. <li><el-icon><ele-WarningFilled /></el-icon> 0 0 1 * * ? : 每天凌晨1点执行一次</li>
  24. <li><el-icon><ele-WarningFilled /></el-icon> 0 0 1 1 * ? : 每月1号凌晨1点执行一次</li>
  25. </ul>
  26. </el-form-item>
  27. <el-form-item label="描述" prop="desc">
  28. <el-input v-model="ruleForm.desc" type="textarea" placeholder="请输入内容"></el-input>
  29. </el-form-item>
  30. <el-form-item label="选择字典" prop="busiTypes">
  31. <el-select v-model="ruleForm.busiTypes" placeholder="请选择字典" class="w100" >
  32. <el-option v-for="item in zidianData" :key="item.key" :label="item.value" :value="item.key" />
  33. </el-select>
  34. </el-form-item>
  35. <el-form-item label="选择城市" prop="busiId">
  36. <el-cascader :options="cityData" :props="{ checkStrictly: true,emitPath: false, value: 'id', label: 'name' }" placeholder="请选择分类" clearable class="w100" v-model="ruleForm.busiId">
  37. <template #default="{ node, data }">
  38. <span>{{ data.name }}</span>
  39. <span v-if="!node.isLeaf"> ({{ data.children.length }}) </span>
  40. </template>
  41. </el-cascader>
  42. </el-form-item>
  43. </el-form>
  44. <template #footer>
  45. <span class="dialog-footer">
  46. <el-button @click="onCancel" size="default">取 消</el-button>
  47. <el-button type="primary" @click="onSubmit" size="default">{{ ruleForm.id !== 0 ? '修 改' : '添 加' }}</el-button>
  48. </span>
  49. </template>
  50. </el-dialog>
  51. </div>
  52. </template>
  53. <script lang="ts">
  54. import { reactive, toRefs, defineComponent, ref, unref } from 'vue';
  55. import api from '/@/api/datahub';
  56. import { ElMessage } from 'element-plus';
  57. interface RuleFormState {
  58. id?: number;
  59. name: string;
  60. interval: string;
  61. key: string;
  62. desc: string;
  63. }
  64. interface DicState {
  65. isShowDialog: boolean;
  66. ruleForm: RuleFormState;
  67. rules: {};
  68. }
  69. export default defineComponent({
  70. name: 'Edit',
  71. setup(prop, { emit }) {
  72. const formRef = ref<HTMLElement | null>(null);
  73. const state = reactive<DicState>({
  74. isShowDialog: false,
  75. zidianData:[],
  76. cityData:[],
  77. unitData: [
  78. {
  79. label: '秒',
  80. value: 'second',
  81. },
  82. {
  83. label: '分',
  84. value: 'minute',
  85. },
  86. {
  87. label: '时',
  88. value: 'hour',
  89. },
  90. {
  91. label: '天',
  92. value: 'day',
  93. },
  94. ],
  95. ruleForm: {
  96. id: 0,
  97. name: '',
  98. key: '',
  99. desc: '',
  100. },
  101. rules: {
  102. key: [{ required: true, message: '模型标识不能为空', trigger: 'blur' }],
  103. name: [{ required: true, message: '模型名称不能为空', trigger: 'blur' }],
  104. interval: [{ required: true, message: '请输入更新时间', trigger: 'blur' }],
  105. },
  106. });
  107. // 打开弹窗
  108. const openDialog = (row: RuleFormState | null) => {
  109. resetForm();
  110. api.template.getDictData({DictType:'busi_types'}).then((res: any) => {
  111. state.zidianData = res.values;
  112. });
  113. api.template.cityTree({status:1}).then((res: any) => {
  114. state.cityData = res;
  115. });
  116. if (row) {
  117. state.ruleForm = row;
  118. }
  119. state.isShowDialog = true;
  120. };
  121. const resetForm = () => {
  122. state.ruleForm = {
  123. id: 0,
  124. name: '',
  125. key: '',
  126. desc: '',
  127. };
  128. };
  129. // 关闭弹窗
  130. const closeDialog = () => {
  131. state.isShowDialog = false;
  132. };
  133. // 取消
  134. const onCancel = () => {
  135. closeDialog();
  136. };
  137. // 新增
  138. const onSubmit = () => {
  139. const formWrap = unref(formRef) as any;
  140. if (!formWrap) return;
  141. formWrap.validate((valid: boolean) => {
  142. if (valid) {
  143. if (state.ruleForm.id !== 0) {
  144. //修改
  145. api.template.edit(state.ruleForm).then(() => {
  146. ElMessage.success('模型类型修改成功');
  147. closeDialog(); // 关闭弹窗
  148. emit('typeList');
  149. });
  150. } else {
  151. //添加
  152. api.template.add(state.ruleForm).then(() => {
  153. ElMessage.success('模型类型添加成功');
  154. closeDialog(); // 关闭弹窗
  155. emit('typeList');
  156. });
  157. }
  158. }
  159. });
  160. };
  161. return {
  162. openDialog,
  163. closeDialog,
  164. onCancel,
  165. onSubmit,
  166. formRef,
  167. ...toRefs(state),
  168. };
  169. },
  170. });
  171. </script>