Project-edit.vue 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. <template>
  2. <el-dialog title="编辑违禁词" v-model="state.dialogVisible" width="769px" draggable @close="close">
  3. <el-form :model="state.ruleForm" ref="ruleFormRef" label-width="110px">
  4. <el-row :gutter="10">
  5. <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
  6. <el-form-item label="质检项名称" prop="name" :rules="[{ required: true, message: '请输入质检项名称', trigger: 'blur' }]">
  7. <el-input v-model="state.ruleForm.name" placeholder="请输入质检项名称" clearable></el-input>
  8. </el-form-item>
  9. </el-col>
  10. <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
  11. <el-form-item label="质检项分组" prop="groupingName" :rules="[{ required: true, message: '请选择质检项分组', trigger: 'change' }]">
  12. <el-select v-model="state.ruleForm.groupingName" placeholder="请选择质检项分组" class="w100">
  13. <el-option v-for="item in props.qualityItemGrouping" :value="item.dicDataValue" :key="item.dicDataValue" :label="item.dicDataName" />
  14. </el-select>
  15. </el-form-item>
  16. </el-col>
  17. <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
  18. <el-form-item label="质检项分值" prop="grade" :rules="[{ required: true, message: '请输入质检项分值', trigger: 'blur' }]">
  19. <el-input-number
  20. v-model="state.ruleForm.grade"
  21. :precision="0"
  22. :min="1"
  23. :max="100"
  24. placeholder="请输入质检项分值"
  25. />
  26. <span class="ml10">分</span>
  27. </el-form-item>
  28. </el-col>
  29. <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
  30. <el-form-item label="是否智能质检" prop="isIntelligent" :rules="[{ required: false, message: '请选择是否智能质检', trigger: 'change' }]">
  31. <el-switch
  32. v-model="state.ruleForm.isIntelligent"
  33. inline-prompt
  34. active-text="是"
  35. inactive-text="否"
  36. :active-value="1"
  37. :inactive-value="0"
  38. />
  39. </el-form-item>
  40. </el-col>
  41. <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
  42. <el-form-item label="是否启用" prop="isEnable" :rules="[{ required: false, message: '请选择是否启用性', trigger: 'change' }]">
  43. <el-switch
  44. v-model="state.ruleForm.isEnable"
  45. inline-prompt
  46. active-text="是"
  47. inactive-text="否"
  48. :active-value="1"
  49. :inactive-value="0"
  50. />
  51. </el-form-item>
  52. </el-col>
  53. <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
  54. <el-form-item label="质检项描述" prop="describe" :rules="[{ required: false, message: '请输入质检项描述', trigger: 'blur' }]">
  55. <el-input v-model="state.ruleForm.describe" placeholder="请输入质检项描述" type="textarea"></el-input>
  56. </el-form-item>
  57. </el-col>
  58. </el-row>
  59. </el-form>
  60. <template #footer>
  61. <span class="dialog-footer">
  62. <el-button @click="closeDialog" class="default-button">取 消</el-button>
  63. <el-button type="primary" @click="onSubmit(ruleFormRef)" v-waves="'light'" :loading="state.loading">确 定 </el-button>
  64. </span>
  65. </template>
  66. </el-dialog>
  67. </template>
  68. <script setup lang="ts" name="qualityProjectEdit">
  69. import {reactive, ref} from 'vue';
  70. import {ElInput, ElMessage, FormInstance} from 'element-plus';
  71. import {projectDetail,projectUpdate} from '/@/api/quality/project'
  72. // 定义子组件向父组件传值/事件
  73. const emit = defineEmits(['updateList']);
  74. const props = defineProps({
  75. qualityItemGrouping: {
  76. type: Array,
  77. default: () => [],
  78. }
  79. })
  80. // 定义变量内容
  81. const ruleFormRef = ref<FormInstance>();
  82. const state = reactive<any>({
  83. dialogVisible: false, // 弹窗显示隐藏
  84. ruleForm: {
  85. name: '', // 质检项名称
  86. groupingName: '', // 质检项分组
  87. grade: 1, // 质检项分值
  88. isIntelligent: 0, // 是否智能质检
  89. isEnable: 1, // 是否启用
  90. describe: '', // 质检项描述
  91. },
  92. loading: false, // 确定按钮loading
  93. });
  94. // 打开弹窗
  95. const openDialog = async (row: any) => {
  96. try {
  97. const res = await projectDetail(row.id);
  98. state.ruleForm = res.result ?? {};
  99. state.dialogVisible = true;
  100. }catch (e) {
  101. console.log(e);
  102. }
  103. };
  104. // 关闭弹窗
  105. const closeDialog = () => {
  106. state.dialogVisible = false;
  107. };
  108. const close = ()=>{
  109. ruleFormRef.value?.clearValidate();
  110. ruleFormRef.value?.resetFields();
  111. }
  112. // 保存
  113. const onSubmit = (formEl: FormInstance | undefined) => {
  114. if (!formEl) return;
  115. formEl.validate((valid: boolean) => {
  116. if (!valid) return;
  117. state.loading = true;
  118. const request = {
  119. ...state.ruleForm
  120. }
  121. projectUpdate(request)
  122. .then(() => {
  123. emit('updateList');
  124. closeDialog(); // 关闭弹窗
  125. ElMessage.success('操作成功');
  126. state.loading = false;
  127. })
  128. .catch(() => {
  129. emit('updateList');
  130. state.loading = false;
  131. });
  132. });
  133. };
  134. // 暴露变量
  135. defineExpose({
  136. openDialog,
  137. closeDialog,
  138. });
  139. </script>