123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- <script setup lang="ts">
- import { reactive, computed, ref, onMounted } from "vue";
- import { ElMessage } from "element-plus";
- import { addQuota } from "@/api/indexDefine";
- import {
- getSelectDictListtApi,
- select,
- getFromSelectDictListtApi,
- selectFrom
- } from "@/api/select";
- // import dayjs from "dayjs";
- const emit = defineEmits(["closeDialog"]);
- const visible = ref(false);
- const ruleFormRef = ref(null);
- const form = reactive({
- name: "",
- categoryName: "",
- define: "",
- caliber: "",
- source: "",
- statue: null
- });
- onMounted(() => {
- getSelectDictListtApi();
- getFromSelectDictListtApi();
- });
- const msgName = ref("");
- const addQuotaApi = async () => {
- ruleFormRef.value.validate(async (valid: boolean) => {
- if (valid) {
- const { code, msg } = await addQuota(form);
- if (code === 200) {
- ElMessage({
- message: "添加成功",
- type: "success"
- });
- emit("closeDialog");
- }
- if (code === 10027) {
- msgName.value = msg;
- // rules.name[0].message = msg; // 将 msg 设置为 name 字段的错误信息
- // ruleFormRef.value.validateField("name"); // 触发验证以显示错误消息
- }
- }
- });
- };
- const rules = reactive({
- name: [{ required: true, message: "请填写指标名称", trigger: "blur" }],
- define: [{ required: true, message: "请填写指标分类", trigger: "blur" }],
- categoryName: [
- { required: true, message: "请填写指标定义", trigger: "blur" }
- ],
- caliber: [{ required: true, message: "请填写指标口径", trigger: "blur" }],
- source: [{ required: true, message: "来源", trigger: "blur" }],
- statue: [{ required: true, message: "请填写选择状态", trigger: "blur" }]
- });
- const close = () => {
- visible.value = false;
- emit("closeDialog");
- };
- const save = () => {
- addQuotaApi();
- };
- const open = () => {
- // 打开弹框
- Object.assign(form, {
- name: "",
- categoryName: "",
- define: "",
- caliber: "",
- source: "",
- statue: null
- });
- msgName.value = "";
- visible.value = true;
- };
- defineExpose({
- open
- });
- </script>
- <template>
- <el-dialog v-model="visible" title="新建指标" width="480">
- <div class="m-auto w-full">
- <el-form
- ref="ruleFormRef"
- :model="form"
- label-position="right"
- label-width="auto"
- :rules="rules"
- style="max-width: 600px"
- >
- <el-form-item label="指标名称" prop="name">
- <el-input
- v-model="form.name"
- autocomplete="off"
- placeholder="请输入"
- />
- <el-text v-if="msgName" class="absolute top-6 msgName" type="warning">
- 指标名称已存在,请更换一个名称
- </el-text>
- </el-form-item>
- <el-form-item label="指标分类">
- <el-select
- v-model="form.categoryName"
- filterable
- placeholder="请选择"
- >
- <el-option
- v-for="(item, index) in select"
- :key="index"
- :label="item.dictValue"
- :value="item.dictValue"
- />
- </el-select>
- </el-form-item>
- <el-form-item label="指标定义" prop="define">
- <el-input
- v-model="form.define"
- type="textarea"
- autocomplete="off"
- placeholder="请输入"
- />
- </el-form-item>
- <el-form-item label="指标口径" prop="caliber">
- <el-input
- v-model="form.caliber"
- type="textarea"
- autocomplete="off"
- placeholder="请输入"
- />
- </el-form-item>
- <el-form-item label="来源">
- <el-select v-model="form.source" placeholder="请选择">
- <el-option
- v-for="(item, index) in selectFrom"
- :key="index"
- :label="item.dictValue"
- :value="item.dictValue"
- />
- </el-select>
- </el-form-item>
- <el-form-item label="状态" prop="statue">
- <el-select v-model="form.statue" placeholder="请选择">
- <el-option label="草稿" value="0" />
- <el-option label="发布" value="1" />
- <el-option label="下架" value="2" />
- </el-select>
- </el-form-item>
- </el-form>
- </div>
- <template #footer>
- <div class="dialog-footer">
- <el-button @click="close">取消</el-button>
- <el-button type="primary" @click="save">保存</el-button>
- </div>
- </template>
- </el-dialog>
- </template>
- <style lang="scss" scope>
- .msgName {
- font-size: 10px;
- }
- </style>
|