dialog.vue 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. <script setup lang="ts">
  2. import { reactive, computed, ref, onMounted } from "vue";
  3. import { ElMessage } from "element-plus";
  4. import { addQuota } from "@/api/indexDefine";
  5. import {
  6. getSelectDictListtApi,
  7. select,
  8. getFromSelectDictListtApi,
  9. selectFrom
  10. } from "@/api/select";
  11. // import dayjs from "dayjs";
  12. const emit = defineEmits(["closeDialog"]);
  13. const visible = ref(false);
  14. const ruleFormRef = ref(null);
  15. const form = reactive({
  16. name: "",
  17. categoryName: "",
  18. define: "",
  19. caliber: "",
  20. source: "",
  21. statue: null
  22. });
  23. onMounted(() => {
  24. getSelectDictListtApi();
  25. getFromSelectDictListtApi();
  26. });
  27. const msgName = ref("");
  28. const addQuotaApi = async () => {
  29. ruleFormRef.value.validate(async (valid: boolean) => {
  30. if (valid) {
  31. const { code, msg } = await addQuota(form);
  32. if (code === 200) {
  33. ElMessage({
  34. message: "添加成功",
  35. type: "success"
  36. });
  37. emit("closeDialog");
  38. }
  39. if (code === 10027) {
  40. msgName.value = msg;
  41. // rules.name[0].message = msg; // 将 msg 设置为 name 字段的错误信息
  42. // ruleFormRef.value.validateField("name"); // 触发验证以显示错误消息
  43. }
  44. }
  45. });
  46. };
  47. const rules = reactive({
  48. name: [{ required: true, message: "请填写指标名称", trigger: "blur" }],
  49. define: [{ required: true, message: "请填写指标分类", trigger: "blur" }],
  50. categoryName: [
  51. { required: true, message: "请填写指标定义", trigger: "blur" }
  52. ],
  53. caliber: [{ required: true, message: "请填写指标口径", trigger: "blur" }],
  54. source: [{ required: true, message: "来源", trigger: "blur" }],
  55. statue: [{ required: true, message: "请填写选择状态", trigger: "blur" }]
  56. });
  57. const close = () => {
  58. visible.value = false;
  59. emit("closeDialog");
  60. };
  61. const save = () => {
  62. addQuotaApi();
  63. };
  64. const open = () => {
  65. // 打开弹框
  66. Object.assign(form, {
  67. name: "",
  68. categoryName: "",
  69. define: "",
  70. caliber: "",
  71. source: "",
  72. statue: null
  73. });
  74. msgName.value = "";
  75. visible.value = true;
  76. };
  77. defineExpose({
  78. open
  79. });
  80. </script>
  81. <template>
  82. <el-dialog v-model="visible" title="新建指标" width="480">
  83. <div class="m-auto w-full">
  84. <el-form
  85. ref="ruleFormRef"
  86. :model="form"
  87. label-position="right"
  88. label-width="auto"
  89. :rules="rules"
  90. style="max-width: 600px"
  91. >
  92. <el-form-item label="指标名称" prop="name">
  93. <el-input
  94. v-model="form.name"
  95. autocomplete="off"
  96. placeholder="请输入"
  97. />
  98. <el-text v-if="msgName" class="absolute top-6 msgName" type="warning">
  99. 指标名称已存在,请更换一个名称
  100. </el-text>
  101. </el-form-item>
  102. <el-form-item label="指标分类">
  103. <el-select
  104. v-model="form.categoryName"
  105. filterable
  106. placeholder="请选择"
  107. >
  108. <el-option
  109. v-for="(item, index) in select"
  110. :key="index"
  111. :label="item.dictValue"
  112. :value="item.dictValue"
  113. />
  114. </el-select>
  115. </el-form-item>
  116. <el-form-item label="指标定义" prop="define">
  117. <el-input
  118. v-model="form.define"
  119. type="textarea"
  120. autocomplete="off"
  121. placeholder="请输入"
  122. />
  123. </el-form-item>
  124. <el-form-item label="指标口径" prop="caliber">
  125. <el-input
  126. v-model="form.caliber"
  127. type="textarea"
  128. autocomplete="off"
  129. placeholder="请输入"
  130. />
  131. </el-form-item>
  132. <el-form-item label="来源">
  133. <el-select v-model="form.source" placeholder="请选择">
  134. <el-option
  135. v-for="(item, index) in selectFrom"
  136. :key="index"
  137. :label="item.dictValue"
  138. :value="item.dictValue"
  139. />
  140. </el-select>
  141. </el-form-item>
  142. <el-form-item label="状态" prop="statue">
  143. <el-select v-model="form.statue" placeholder="请选择">
  144. <el-option label="草稿" value="0" />
  145. <el-option label="发布" value="1" />
  146. <el-option label="下架" value="2" />
  147. </el-select>
  148. </el-form-item>
  149. </el-form>
  150. </div>
  151. <template #footer>
  152. <div class="dialog-footer">
  153. <el-button @click="close">取消</el-button>
  154. <el-button type="primary" @click="save">保存</el-button>
  155. </div>
  156. </template>
  157. </el-dialog>
  158. </template>
  159. <style lang="scss" scope>
  160. .msgName {
  161. font-size: 10px;
  162. }
  163. </style>