Browse Source

feat: 修复BUG

zhangwenya 11 months ago
parent
commit
c6fe59a22c

+ 8 - 0
src/api/obj/metrics.js

@@ -49,3 +49,11 @@ export function metricsHistory(objMetricsId){
         method: 'get'
     })
 }
+
+export function putMetrics(data){
+    return request({
+        url: '/obj/metrics',
+        method: 'put',
+        data: data
+    })
+}

+ 15 - 0
src/api/obj/obj.js

@@ -76,3 +76,18 @@ export function addMetrics(objId,query) {
         params:query
     })
 }
+
+export function scheduleObj(objId) {
+    return request({
+        url: '/obj/obj/schedule/' + objId,
+        method: 'get'
+    })
+}
+
+export function validateObj(query){
+    return request({
+        url: '/obj/obj/validate',
+        method: 'GET',
+        params: query
+    })
+}

+ 4 - 6
src/views/ms/def/index.vue

@@ -60,7 +60,7 @@
         </template>
       </el-table-column>
       <el-table-column label="指标编码" align="left" prop="metricsCode" width="160"/>
-      <el-table-column label="指标获取公式" align="left" prop="metricsExp"  width="300"/>
+      <el-table-column label="指标获取公式" align="left" prop="metricsExp"  width="330"/>
       <el-table-column label="更新时间" align="center" prop="updateTime" width="180">
         <template #default="scope">
           <span>{{ parseTime(scope.row.updateTime, '{y}-{m}-{d} {h}:{mi}:{s}') }}</span>
@@ -102,8 +102,9 @@
         <el-form-item label="指标名称" prop="metricsName">
           <el-input v-model="form.metricsName" placeholder="请输入指标名称"/>
         </el-form-item>
-        <el-form-item label="指标编码" prop="metricsCode">
-          <el-input v-model="form.metricsCode" placeholder="请输入指标编码"/>
+        <el-form-item label="指标编码" v-if="form.metricsCode">
+<!--          <el-input v-model="form.metricsCode" placeholder="请输入指标编码"/>-->
+          {{form.metricsCode}}
         </el-form-item>
         <el-form-item label="指标分类" prop="metricsTypes">
           <el-checkbox-group v-model="form.metricsTypes">
@@ -174,9 +175,6 @@ const data = reactive({
     metricsName: [
       {required: true, message: "指标名称不能为空", trigger: "blur"}
     ],
-    metricsCode: [
-      {required: true, message: "指标编码不能为空", trigger: "blur"}
-    ],
     metricsExp: [
       {required: true, message: "指标公式不能为空", trigger: "blur"}
     ],

+ 21 - 6
src/views/ms/mstpl/component/indicatorManger.vue

@@ -45,8 +45,8 @@
         </el-table-column>
         <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="180">
           <template #default="scope">
-            <el-button link type="primary" icon="Edit" @click="handleEdit(scope.row)"
-                       v-if="editRow.indexOf(scope.row.metricsId) === -1">修改
+            <el-button link type="primary" icon="Edit" @click="handleEdit(scope.row)" v-if="editRow.indexOf(scope.row.metricsId) === -1">
+              修改
             </el-button>
             <el-button link type="primary" icon="Check" @click="handleUpdate(scope.row)" v-else>保存</el-button>
             <el-popconfirm title="确定要删除吗?删除后无法恢复!" @confirm="handleDelete(scope.row)" width="260">
@@ -54,10 +54,16 @@
                 <el-button link type="primary" icon="Delete">删除</el-button>
               </template>
             </el-popconfirm>
-
           </template>
         </el-table-column>
       </el-table>
+      <pagination
+          v-show="total>0"
+          :total="total"
+          v-model:page="queryParams.pageNum"
+          v-model:limit="queryParams.pageSize"
+          @pagination="getSelectDetails()"
+      />
     </el-col>
   </el-row>
 
@@ -96,18 +102,27 @@ const {proxy, emit} = getCurrentInstance();
 const listData = ref([]);
 const loading = ref(false);
 const editRow = ref([]);
-const rowTplId = ref(null)
+const rowTplId = ref(null);
 const open = ref(false);
-const addListData = ref([])
+const addListData = ref([]);
 const ids = ref([]);
+const total = ref(0);
+
+const queryParams = reactive({
+    pageNum: 1,
+    pageSize: 10,
+    tplId: 0
+});
 
 // 选择指标
 const getSelectDetails = (tplId: number) => {
   loading.value = true;
   editRow.value = [];
   rowTplId.value = tplId;
-  listDetail({tplId}).then((response) => {
+  tplId && (queryParams.tplId = tplId)
+  listDetail(queryParams).then((response) => {
     listData.value = response.rows
+    total.value = response.total;
   });
   loading.value = false;
 }

+ 87 - 0
src/views/obj/obj/component/metricsConfig.vue

@@ -0,0 +1,87 @@
+<template>
+  <el-form ref="mcRef" :model="form" :rules="rules" label-width="120px" label-suffix=":">
+    <el-form-item label="指标名称">
+      {{form?.metricsName || '-'}}
+    </el-form-item>
+    <el-form-item label="指标类型">
+      {{form?.metricsType || '-'}}
+    </el-form-item>
+    <el-form-item label="指标编码">
+      {{form?.metricsCode || '-'}}
+    </el-form-item>
+    <el-form-item label="数据接口配置">
+      <el-input type="textarea" placeholder="请输入数据接口配置" v-model="form.dataExp" show-word-limit maxlength="300" :autosize="{ minRows: 4, maxRows: 6 }"/>
+    </el-form-item>
+    <el-form-item label="">
+      <el-button type="primary" @click="onTest">测试</el-button>
+      <span v-if="!validateError && currentValue" style="color:#1ab394;margin-left:10px;">
+        数据获取正常,当前值:{{currentValue}}
+      </span>
+      <span v-if="validateError" style="color:#ee4433;margin-left:10px;">
+        数据获取失败,请检查数据接口配置
+      </span>
+    </el-form-item>
+  </el-form>
+  <div class="row-btn">
+    <el-button type="primary" @click="onSubmit" :disabled="!validate">提交</el-button>
+    <el-button @click="emit('cancel')">取消</el-button>
+  </div>
+</template>
+<script setup lang="ts">
+import {getCurrentInstance, watchEffect} from "vue";
+import {putMetrics} from "@/api/obj/metrics"
+import {validateObj} from "@/api/obj/obj"
+const {emit,proxy} = getCurrentInstance();
+const mcRef = ref(null);
+const validate = ref(false)
+const currentValue = ref(0)
+const validateError= ref(false)
+const data = reactive({
+  form:{},
+  rules:{
+    dataExp :[{required:true,message:"数据配置不能为空",trigger:"blur"}]
+  }
+})
+const {form,rules} = toRefs(data)
+const props = defineProps(['metrics'])
+watchEffect(()=>{
+  validate.value = false
+  currentValue.value = 0
+  validateError.value = false
+  form.value = {
+    metricsName:props.metrics.metricsDef.metricsName,
+    metricsType:props.metrics.metricsDef.metricsType,
+    metricsCode:props.metrics.metricsDef.metricsCode,
+    objMetricsId:props.metrics.objMetricsId,
+    dataExp:props.metrics.dataExp
+  }
+})
+
+const onTest=()=>{
+  const {dataExp} = form.value
+  validateObj({exp:dataExp}).then(res=>{
+    proxy.$modal.msgSuccess(res.msg);
+    currentValue.value = res.data
+    validate.value = true
+  }).catch(()=>{
+    validateError.value = true
+  })
+}
+
+const onSubmit=()=>{
+  const {objMetricsId,dataExp} = form.value
+  putMetrics({objMetricsId,dataExp}).then(res=>{
+    proxy.$modal.msgSuccess(res.msg);
+    emit("success")
+  })
+}
+</script>
+<style scoped lang="scss">
+.row-btn{
+  border-top:1px solid #F1F1F1;
+  margin-top:10px;
+  padding-top:20px;
+  display: flex;
+  justify-content: center;
+}
+</style>

+ 1 - 1
src/views/obj/obj/component/metricsList.vue

@@ -32,7 +32,7 @@
         <span v-else>{{scope.row.alarmHigh}}</span>
       </template>
     </el-table-column>
-    <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="180">
+    <el-table-column label="操作" align="left" class-name="small-padding fixed-width" width="180">
       <template #default="scope">
         <slot name="operation" :row="scope.row" />
       </template>

+ 4 - 3
src/views/obj/obj/component/runMetricsInfo.vue

@@ -23,10 +23,11 @@
     </el-table-column>
     <el-table-column label="指标名称" align="left" prop="metricsName" />
     <el-table-column label="指标编码" align="left" prop="metricsCode" />
-    <el-table-column label="告警规则" align="left" prop="alarmRule" />
-    <el-table-column label="创建时间" align="left" prop="createTime" width="180">
+    <el-table-column label="指标当前值" align="left" prop="dvalue" />
+<!--    <el-table-column label="告警规则" align="left" prop="alarmRule" />-->
+    <el-table-column label="更新时间" align="left" prop="updateTime" width="180">
       <template #default="scope">
-        <span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d} {h}:{mi}:{s}') }}</span>
+        <span>{{ parseTime(scope.row.updateTime, '{y}-{m}-{d} {h}:{mi}:{s}') }}</span>
       </template>
     </el-table-column>
     <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="100">

+ 10 - 0
src/views/obj/obj/component/step1.vue

@@ -95,6 +95,16 @@ const editForm = () => {
   getObj(props.rowId).then(res => {
     const {objId, objType, appId, objName, objAddr, objPort} = res.data
     form.value = {objId, objType, appId, objName, objAddr, objPort}
+    if(objType == 1){
+      listApp({ pageNum: 1,pageSize: 5,appId}).then(res=>{
+        options.value = res.rows.map(item => {
+          return {
+            value: item.appId,
+            label: item.appName
+          }
+        })
+      })
+    }
   });
 }
 

+ 41 - 6
src/views/obj/obj/component/step3.vue

@@ -1,13 +1,25 @@
 <template>
-  <el-button type="primary" @click="handleSelect">选择指标</el-button>
-  <metrics-list :listData="listData" :edit="true">
+  <el-row :gutter="20">
+    <el-col :span="12">
+      <el-button type="primary" @click="handleSelect">选择指标</el-button>
+    </el-col>
+    <el-col :span="12" style="text-align: right"> 接口配置已完成: {{ scheduleData.complete }}/{{ scheduleData.total }} </el-col>
+  </el-row>
+  <metrics-list :listData="listData" :edit="false">
     <template #operation="scope">
-      <el-button link type="primary" icon="Edit" @click="handleUpdateMetrics(scope.row)">保存</el-button>
+      <el-button link
+                 :type="!scope.row.dataExp ? 'primary' : 'success'"
+                 :icon="!scope.row.dataExp ? 'Edit' : 'CircleCheck'"
+                 @click="handleConfigMetrics(scope.row)">
+        {{!scope.row.dataExp?'未配置' : '已配置'}}
+      </el-button>
+<!--      <el-button link type="primary" icon="Edit" @click="handleUpdateMetrics(scope.row)">保存</el-button>-->
       <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)">删除</el-button>
     </template>
   </metrics-list>
-  <el-dialog title="选择指标" v-model="openDialog" :width="1000" append-to-body style="top:20vh">
-    <metrics-list :listData="addMetricsList" :edit="false">
+  <el-dialog title="选择指标" v-model="openDialog" :width="1000" append-to-body style="top:15vh">
+    <metrics-config :metrics="metricsRow" v-if="metricsType==='config'" @cancel="openDialog=false" @success="initData"/>
+    <metrics-list :listData="addMetricsList" :edit="false" v-else>
       <template #operation="scope">
         <el-button link type="primary" icon="Delete" @click="handleAddMetrics(scope.row)">添加</el-button>
       </template>
@@ -15,8 +27,10 @@
   </el-dialog>
 </template>
 <script setup lang="ts">
+import {scheduleObj} from "@/api/obj/obj"
 import {onMounted, ref} from "vue";
 import metricsList from "./metricsList.vue"
+import metricsConfig from  "./metricsConfig.vue"
 const {proxy,emit} = getCurrentInstance()
 const props = defineProps(['rowId'])
 import {selectMetrics,addMetrics} from "@/api/obj/obj"
@@ -24,10 +38,30 @@ import {listMetrics,delMetrics,updateMetrics} from '@/api/obj/metrics'
 const listData=ref([])
 const openDialog=ref(false)
 const addMetricsList=ref([])
+const metricsRow=ref({})
+const metricsType=ref("list")
+const scheduleData=ref({})
 onMounted(()=>{
-  queryList()
+  initData()
 })
 
+const initData=()=>{
+  openDialog.value = false
+  queryList()
+  getScheduleTotal()
+}
+
+const getScheduleTotal=()=>{
+  scheduleObj(props.rowId).then(res=>{
+    scheduleData.value = res.data
+  })
+}
+
+const handleConfigMetrics=(row)=>{
+  metricsType.value = "config"
+  metricsRow.value = {...row}
+  openDialog.value = true
+}
 
 const queryList=()=>{
   listMetrics({objId:props.rowId,tplId:-1}).then(res=>{
@@ -43,6 +77,7 @@ const handleAddMetrics = row =>{
 }
 
 const handleSelect=()=>{
+  metricsType.value = "list"
   openDialog.value = true
   selectMetrics(props.rowId).then(res=>{
     addMetricsList.value = res.rows.map(p=>{