indexMapping.vue 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. <template>
  2. <el-button type="primary" size="small" @click="addIndex">新增指标</el-button>
  3. <el-table :data="configData" border stripe style="width: 100%;margin-top:10px;" size="small">
  4. <el-table-column label="显示名称">
  5. <template #default="scope">
  6. {{ scope.row.viewName }}
  7. </template>
  8. </el-table-column>
  9. <el-table-column label="指标映射">
  10. <template #default="scope">
  11. <el-select v-model="scope.row.metricsName" size="small" style="width: 100%" @change="changeMetrics(scope.row)">
  12. <el-option v-for="item in mappingData" :key="item.id" :label="item.metricsName" :value="item.metricsName"/>
  13. </el-select>
  14. </template>
  15. </el-table-column>
  16. <el-table-column label="操作" width="80" align="center">
  17. <template #default="{row}">
  18. <el-popconfirm title="确认要删除该条信息吗?" @confirm="handleDelete(row)" width="200">
  19. <template #reference>
  20. <el-button type="danger" link>删除</el-button>
  21. </template>
  22. </el-popconfirm>
  23. </template>
  24. </el-table-column>
  25. </el-table>
  26. <el-dialog v-model="visible" title="新增指标" width="400" append-to-body>
  27. <el-form ref="objRef" :model="form" :rules="rules" label-width="100px" label-suffix=":" size="small">
  28. <el-form-item label="显示名称" prop="viewName">
  29. <el-input v-model="form.viewName" placeholder="请输入显示名称"/>
  30. </el-form-item>
  31. <el-form-item label="指标映射" prop="metricsName">
  32. <el-select v-model="form.metricsName" style="width: 100%">
  33. <el-option v-for="item in mappingData" :key="item.id" :label="item.metricsName" :value="item.metricsName"/>
  34. </el-select>
  35. </el-form-item>
  36. </el-form>
  37. <div class="btn-row">
  38. <el-button type="primary" @click="handleSubmit" size="small">确定</el-button>
  39. <el-button @click="visible=false" size="small">取消</el-button>
  40. </div>
  41. </el-dialog>
  42. </template>
  43. <script setup lang="ts">
  44. import {listConfig} from "@/api/risk/r5"
  45. import {delConfig, updateConfig,addConfig} from "@/api/risk/config"
  46. const {proxy} = getCurrentInstance()
  47. const props = defineProps(['configData'])
  48. const mappingData = ref([])
  49. const visible = ref(false)
  50. const defaultForm = {
  51. viewName: '',
  52. metricsId: '',
  53. metricsName: ''
  54. }
  55. const rules = {
  56. viewName: [
  57. {required: true, message: '请输入显示名称', trigger: 'blur'}
  58. ],
  59. metricsName: [
  60. {required: true, message: '请选择指标映射', trigger: 'change'}
  61. ]
  62. }
  63. const form = ref({
  64. ...defaultForm
  65. })
  66. onMounted(async () => {
  67. const res = await listConfig({configType: "host", pageNum: 1, pageSize: 20})
  68. mappingData.value = res.rows
  69. })
  70. function addIndex() {
  71. visible.value = true
  72. form.value = {...defaultForm}
  73. proxy.resetForm("objRef");
  74. }
  75. async function changeMetrics(row) {
  76. const data = {...row}
  77. data.metricsId = mappingData.value.find(item => item.metricsName === row.metricsName).metricsId
  78. const res = await updateConfig(data)
  79. handleSuccess(res)
  80. }
  81. async function handleDelete(row) {
  82. const res = await delConfig(row.hcId)
  83. handleSuccess(res)
  84. }
  85. function handleSuccess(res) {
  86. proxy.$message.success(res.msg)
  87. proxy.$emit('refresh')
  88. }
  89. function handleSubmit() {
  90. proxy.$refs.objRef.validate(async valid => {
  91. if (valid) {
  92. const data = {...form.value}
  93. data.metricsId = mappingData.value.find(item => item.metricsName === form.value.metricsName).metricsId
  94. const res = await addConfig(data)
  95. handleSuccess(res)
  96. }
  97. })
  98. }
  99. </script>
  100. <style lang="scss" scoped>
  101. .btn-row{
  102. display: flex;
  103. justify-content: center;
  104. margin-top:30px;
  105. }
  106. </style>