addModel.vue 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. <template>
  2. <div>
  3. <el-form ref="objRef" :model="form" :rules="rules" label-width="120px" label-suffix=":">
  4. <el-form-item label="指标" prop="metricsId">
  5. <el-select v-model="form.metricsId" filterable placeholder="请输入..." style="width: 240px"
  6. @change="changeMetricsId">
  7. <el-option v-for="item in metricsData" :key="item.metricsId" :label="item.metricsName"
  8. :value="item.metricsId"/>
  9. </el-select>
  10. </el-form-item>
  11. <el-form-item label="分析类型">
  12. 异类分析
  13. </el-form-item>
  14. <el-form-item label="定时分析" prop="timeSwitch" required>
  15. <el-select v-model="form.timeSwitch" placeholder="请选择是否定时分析">
  16. <el-option
  17. v-for="dict in sys_yes_no"
  18. :key="dict.value"
  19. :label="dict.label"
  20. :value="dict.value"
  21. />
  22. </el-select>
  23. </el-form-item>
  24. <el-form-item label="指标对象" prop="objType" required>
  25. <el-select v-model="form.objType" filterable placeholder="请选择..." style="width: 240px"
  26. :disabled="!form.metricsId" @change="changeObjType">
  27. <el-option v-for="item in [{key:'1',label:'全部'},{key:'2',label:'自定义'}]" :key="item.key"
  28. :label="item.label" :value="item.key"/>
  29. </el-select>
  30. <div class="tree-row" v-if="form.objType === '2'">
  31. <el-tree style="max-width: 600px" :props="props" :data="modelTreeData" show-checkbox ref="treeRef"
  32. node-key="objId"
  33. @check-change="handleCheckChange"/>
  34. </div>
  35. </el-form-item>
  36. </el-form>
  37. <div class="btn-row">
  38. <el-button type="primary" @click="submitForm">提交</el-button>
  39. <el-button @click="emit('cancel')">取消</el-button>
  40. </div>
  41. </div>
  42. </template>
  43. <script setup lang="ts">
  44. import {onMounted, reactive} from "vue";
  45. import {listModelMs, listModelObj} from "@/api/risk/r2";
  46. import {addModel, updateModel} from "@/api/risk/model"
  47. const objRef = ref(null)
  48. const {proxy} = getCurrentInstance()
  49. const {
  50. analy_result,
  51. risk_up,
  52. sys_yes_no,
  53. risk_type
  54. } = proxy.useDict('risk_type', 'analy_result', 'risk_up', 'sys_yes_no');
  55. const emit = defineEmits(["cancel", "success"])
  56. const treeRef = ref(null)
  57. const riskIds = ref(null)
  58. const treeIndex = ref([])
  59. const data = reactive({
  60. form: {
  61. metricsName: "",
  62. riskType: "3",
  63. timeSwitch: "Y",
  64. metricsId: null,
  65. objType: "1",
  66. objIds: []
  67. },
  68. rules: {
  69. metricsId: {required: true, message: "请选择指标"}
  70. }
  71. })
  72. const metricsData = ref([])
  73. const modelTreeData = ref([])
  74. const {form, rules} = toRefs(data)
  75. const props = {
  76. label: 'objName',
  77. }
  78. function handleCheckChange(data, checked) {
  79. form.value.objIds = checked ? [...form.value.objIds, data.objId] : form.value.objIds.filter(item => item !== data.objId)
  80. }
  81. function changeMetricsId(id) {
  82. form.value.metricsName = metricsData.value.find(item => item.metricsId === id).metricsName
  83. changeObjType(form.value.objType)
  84. }
  85. async function changeObjType(val) {
  86. if (val === "2") {
  87. form.value.objIds = []
  88. const res = await listModelObj(form.value.metricsId)
  89. modelTreeData.value = res.data
  90. } else {
  91. form.value.objIds = []
  92. }
  93. }
  94. onMounted(async () => {
  95. const res = await listModelMs()
  96. metricsData.value = res.data
  97. })
  98. async function submitForm() {
  99. objRef.value.validate(async valid => {
  100. if (valid) {
  101. const res = riskIds.value ? await updateModel({...form.value, riskId: riskIds.value}) : await addModel(form.value)
  102. proxy.$message.success(res.msg)
  103. emit('success')
  104. }
  105. })
  106. }
  107. async function editInfo(row) {
  108. treeIndex.value = []
  109. const {metricsName, riskType, timeSwitch, metricsId, objType, riskId} = row
  110. form.value = {metricsName, riskType, timeSwitch, metricsId, objType, objIds:[]}
  111. riskIds.value = riskId
  112. await changeObjType(objType)
  113. treeRef.value!.setCheckedNodes(row.riskObjList)
  114. }
  115. defineExpose({editInfo})
  116. </script>
  117. <style scoped lang="scss">
  118. .tree-row {
  119. width: 100%;
  120. border: 1px solid #f1f1f1;
  121. padding: 5px;
  122. margin-top: 10px;
  123. }
  124. .btn-row {
  125. display: flex;
  126. justify-content: center;
  127. margin: 20px -20px 0 -20px;
  128. padding-top: 20px;
  129. border-top: 1px solid #f1f1f1;
  130. }
  131. </style>