监控模版调试修改
This commit is contained in:
		@@ -180,15 +180,15 @@ export function resNameList() {
 | 
			
		||||
// 查询列表
 | 
			
		||||
export function listMonitorTemp(query) {
 | 
			
		||||
  return request({
 | 
			
		||||
    url: '/system/management/list',
 | 
			
		||||
    url: '/rocketmq/template/list',
 | 
			
		||||
    method: 'post',
 | 
			
		||||
    data: query
 | 
			
		||||
  })
 | 
			
		||||
}
 | 
			
		||||
// 查询资源注册详细
 | 
			
		||||
// 查询详细
 | 
			
		||||
export function getMonitorTemp(Id) {
 | 
			
		||||
  return request({
 | 
			
		||||
    url: '/system/management/' + Id,
 | 
			
		||||
    url: '/rocketmq/template/' + Id,
 | 
			
		||||
    method: 'get'
 | 
			
		||||
  })
 | 
			
		||||
}
 | 
			
		||||
@@ -201,19 +201,19 @@ export function getMonitorTempList(query) {
 | 
			
		||||
  })
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 新增资源注册
 | 
			
		||||
// 新增
 | 
			
		||||
export function addMonitorTemp(data) {
 | 
			
		||||
  return request({
 | 
			
		||||
    url: '/system/management',
 | 
			
		||||
    url: '/rocketmq/template',
 | 
			
		||||
    method: 'post',
 | 
			
		||||
    data: data
 | 
			
		||||
  })
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 修改资源注册
 | 
			
		||||
// 修改
 | 
			
		||||
export function updateMonitorTemp(data) {
 | 
			
		||||
  return request({
 | 
			
		||||
    url: '/system/management',
 | 
			
		||||
    url: '/rocketmq/template',
 | 
			
		||||
    method: 'put',
 | 
			
		||||
    data: data
 | 
			
		||||
  })
 | 
			
		||||
@@ -221,7 +221,7 @@ export function updateMonitorTemp(data) {
 | 
			
		||||
// 删除
 | 
			
		||||
export function delMonitorTemp(Ids) {
 | 
			
		||||
  return request({
 | 
			
		||||
    url: '/system/management/' + Ids,
 | 
			
		||||
    url: '/rocketmq/template/' + Ids,
 | 
			
		||||
    method: 'delete'
 | 
			
		||||
  })
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -166,7 +166,7 @@
 | 
			
		||||
    </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script setup>
 | 
			
		||||
<script>
 | 
			
		||||
  export default {
 | 
			
		||||
    name: 'Form',
 | 
			
		||||
    props: {
 | 
			
		||||
 
 | 
			
		||||
@@ -10,7 +10,8 @@
 | 
			
		||||
            <right-toolbar v-if="!(config && config.colTopHiddenIcon)" :showSearch.sync="showSearch" @queryTable="renderList" @columnsChange="columnsChange" :columns="columns"></right-toolbar>
 | 
			
		||||
        </el-row>
 | 
			
		||||
        <!-- 表格数据 -->
 | 
			
		||||
        <el-table v-loading="loading" :data="tableList" ref="selChangeList" :key="tableKey" highlight-selection-row @selection-change="handleSelectionChange">
 | 
			
		||||
        <el-table v-loading="loading" :data="tableList" :ref="config && config.tableKey ? `tableRef_${config.tableKey}` : `selChangeList`" :key="tableKey" highlight-selection-row @selection-change="handleSelectionChange">
 | 
			
		||||
<!--          :selectable="() => config && config.selectable ? false : true"  -->
 | 
			
		||||
            <el-table-column v-if="!(config && config.colHiddenCheck)" fixed="left" type="selection" width="55" :selectable="() => config && config.selectable ? false : true" align="center" />
 | 
			
		||||
            <!--      展开列内容        -->
 | 
			
		||||
            <el-table-column v-if="config && config.expand" type="expand">
 | 
			
		||||
@@ -112,7 +113,8 @@
 | 
			
		||||
          ids: [],
 | 
			
		||||
          selectList: [],
 | 
			
		||||
          isProcessing: false,  // 防止事件循环的标志位
 | 
			
		||||
          checkColumns: []
 | 
			
		||||
          checkColumns: [],
 | 
			
		||||
          typeParent: false
 | 
			
		||||
        }
 | 
			
		||||
      },
 | 
			
		||||
      // 监听showSearch的变化,并且把变化后的值传给父组件
 | 
			
		||||
@@ -158,6 +160,8 @@
 | 
			
		||||
 | 
			
		||||
        /** 多选框选中数据 */
 | 
			
		||||
        handleSelectionChange(selection) {
 | 
			
		||||
          if (this.typeParent) return
 | 
			
		||||
          console.log('selection=====',selection);
 | 
			
		||||
          if (this.config && this.config['tableKey']) {
 | 
			
		||||
            this.selectList = [];
 | 
			
		||||
            this.ids = [];
 | 
			
		||||
@@ -202,6 +206,84 @@
 | 
			
		||||
            data: [...this.selectList] // 选中的数据
 | 
			
		||||
          };
 | 
			
		||||
        },
 | 
			
		||||
        // 提供给父组件调用的方法:全选所有行
 | 
			
		||||
        selectAllRows() {
 | 
			
		||||
          this.typeParent = true;
 | 
			
		||||
          const table = this.$refs[`tableRef_${this.config.tableKey}`];
 | 
			
		||||
          if (!table) return;
 | 
			
		||||
          // 清空现有选中状态
 | 
			
		||||
          this.selectList = [];
 | 
			
		||||
          this.ids = [];
 | 
			
		||||
          // 遍历所有行,执行选中
 | 
			
		||||
          this.tableList.forEach(row => {
 | 
			
		||||
            // 跳过不可选的行(根据selectable配置)
 | 
			
		||||
            // const isSelectable = !(this.config && this.config.selectable);
 | 
			
		||||
            // if (isSelectable) {
 | 
			
		||||
            table.toggleRowSelection(row, true); // 选中行
 | 
			
		||||
            this.selectList.push(row); // 同步到选中列表
 | 
			
		||||
            this.ids.push(row.id); // 同步到选中ID列表
 | 
			
		||||
            // }
 | 
			
		||||
          });
 | 
			
		||||
        },
 | 
			
		||||
        // selectAllRows() {
 | 
			
		||||
        //   const table = this.$refs[`tableRef_${this.config.tableKey}`];
 | 
			
		||||
        //   if (!table) return;
 | 
			
		||||
        //
 | 
			
		||||
        //   // 1. 筛选出所有可选的行(根据selectable配置)
 | 
			
		||||
        //   const selectableRows = this.tableList.filter(row => {
 | 
			
		||||
        //     // 如果有自定义选中规则,使用规则判断
 | 
			
		||||
        //     if (this.config?.selectable && typeof this.config.selectable === 'function') {
 | 
			
		||||
        //       return this.config.selectable(row);
 | 
			
		||||
        //     }
 | 
			
		||||
        //     // 默认全部可选
 | 
			
		||||
        //     return true;
 | 
			
		||||
        //   });
 | 
			
		||||
        //
 | 
			
		||||
        //   // 2. 清空现有选中状态
 | 
			
		||||
        //   table.clearSelection(); // 使用表格内置方法清空,保证状态同步
 | 
			
		||||
        //   this.selectList = [];
 | 
			
		||||
        //   this.ids = [];
 | 
			
		||||
        //
 | 
			
		||||
        //   // 3. 选中所有可选行
 | 
			
		||||
        //   selectableRows.forEach(row => {
 | 
			
		||||
        //     table.toggleRowSelection(row, true);
 | 
			
		||||
        //     this.selectList.push(row);
 | 
			
		||||
        //     this.ids.push(row.id);
 | 
			
		||||
        //   });
 | 
			
		||||
        //
 | 
			
		||||
        //   // 4. 同步表格内部的全选状态(关键修复)
 | 
			
		||||
        //   this.$nextTick(() => {
 | 
			
		||||
        //     // 当所有可选行都被选中时,更新表格的全选状态
 | 
			
		||||
        //     if (selectableRows.length > 0 && this.selectList.length === selectableRows.length) {
 | 
			
		||||
        //       // 获取表头的全选复选框DOM
 | 
			
		||||
        //       const headerCheckbox = table.$el.querySelector('.el-table__header-wrapper .el-checkbox__input');
 | 
			
		||||
        //       if (headerCheckbox) {
 | 
			
		||||
        //         // 触发表格内部的状态更新(模拟用户点击全选框的行为)
 | 
			
		||||
        //         headerCheckbox.click();
 | 
			
		||||
        //         // 强制更新表格视图
 | 
			
		||||
        //         table.$forceUpdate();
 | 
			
		||||
        //       }
 | 
			
		||||
        //     }
 | 
			
		||||
        //   });
 | 
			
		||||
        // },
 | 
			
		||||
        // 提供给父组件调用的方法:默认选中值
 | 
			
		||||
        defaultSelectRows(rows){
 | 
			
		||||
          this.typeParent = true;
 | 
			
		||||
          const tableInstance = this.$refs[`tableRef_${this.config.tableKey}`];
 | 
			
		||||
          this.selectList = [];
 | 
			
		||||
          this.ids = [];
 | 
			
		||||
          if (tableInstance) {
 | 
			
		||||
            if (rows) {
 | 
			
		||||
              rows.forEach(row => {
 | 
			
		||||
                tableInstance.toggleRowSelection(row, true);
 | 
			
		||||
                this.selectList.push(row);
 | 
			
		||||
                this.ids.push(row.id);
 | 
			
		||||
              });
 | 
			
		||||
            } else {
 | 
			
		||||
              tableInstance.clearSelection();
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        renderList() {
 | 
			
		||||
          this.$emit("fnRenderList");
 | 
			
		||||
        },
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
<template>
 | 
			
		||||
    <div class="app-container">
 | 
			
		||||
        <Form ref="formRes" :formList="formList" :ruleFormData="ruleForm" @fnClick="callback"></Form>
 | 
			
		||||
        <Form ref="formRef" :formList="formList" :ruleFormData="ruleForm" @fnClick="callback"></Form>
 | 
			
		||||
    </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
@@ -88,7 +88,8 @@
 | 
			
		||||
            case 'cancle':
 | 
			
		||||
              this.$router.push("/resource/group");
 | 
			
		||||
              break;
 | 
			
		||||
            case 'includedDevicesId':
 | 
			
		||||
            // case 'includedDevicesId':
 | 
			
		||||
            //   console.log('dataVal==',dataVal);
 | 
			
		||||
            //   if (formVal && formVal === 'right') {
 | 
			
		||||
            //     exitsResourceById({resourceIds: dataVal.join(',')}).then(res => {
 | 
			
		||||
            //       console.log('res=',res.msg);
 | 
			
		||||
@@ -96,12 +97,14 @@
 | 
			
		||||
            //         let content = '<p style="font-size: 1rem;font-weight: 600;">资源从其他分组移动到此组</p>' +
 | 
			
		||||
            //           '<p style="height: 0px;margin:10px 0 50px;">资源移动到此组后,将在原来到组中消失,相关的监控策略也会消失</p>';
 | 
			
		||||
            //         this.$modal.confirm(content).then(() => {
 | 
			
		||||
              //
 | 
			
		||||
              //       }).catch(() => {});
 | 
			
		||||
            //           console.log('vvv===',this.$refs.formRef.$refs.ruleForm.model.includedDevicesId);
 | 
			
		||||
            //         }).catch(() => {
 | 
			
		||||
            //           console.log('cccccc====');
 | 
			
		||||
            //         });
 | 
			
		||||
            //       }
 | 
			
		||||
            //     });
 | 
			
		||||
            //   }
 | 
			
		||||
              break;
 | 
			
		||||
            //   break;
 | 
			
		||||
            default:
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
@@ -17,18 +17,18 @@
 | 
			
		||||
          <el-tabs type="border-card" v-model="activeTypeName" @tab-click="handleClick">
 | 
			
		||||
            <!--    2-1    -->
 | 
			
		||||
            <el-tab-pane label="Linux系统" name="linux">
 | 
			
		||||
              <el-tabs v-model="linuxActiveName" @tab-click="handleClick">
 | 
			
		||||
              <el-tabs v-model="linuxActiveName">
 | 
			
		||||
                <!--    2-1-1    -->
 | 
			
		||||
                <el-tab-pane label="监控项" name="monitorItem">
 | 
			
		||||
                  <el-collapse v-model="activeNames">
 | 
			
		||||
                    <el-collapse-item v-for="(item,index) of linuxSystem.monitorItem['dataList']" :title="item.title" :name="index">
 | 
			
		||||
                      <template slot="title">
 | 
			
		||||
                        {{item.title}}
 | 
			
		||||
                        <el-checkbox :indeterminate="item.isIndeterminate" v-model="item.checkAll" :disabled="item.disabled" class="ml20" @change="(checked) => handleCheckAllChange(checked,item)">全选</el-checkbox>
 | 
			
		||||
                        <el-checkbox :indeterminate="item.isIndeterminate" v-model="item.checkAll" class="ml20" @change="(checked) => handleCheckAllChange(checked,item)">全选</el-checkbox>
 | 
			
		||||
                      </template>
 | 
			
		||||
                      <el-checkbox-group v-model="checkParams[item.modelName]" @change="(checkValList) => handleCheckedCitiesChange(checkValList, item)" style="padding: 0 20px;">
 | 
			
		||||
                        <el-checkbox v-for="city of item.checkList" :label="city.id" :key="city.id" :disabled="item.disabled" class="w45 mt10 mb10">
 | 
			
		||||
                          <span style="width: 200px" class="disInlineBlock">{{city.metricKey}}</span>
 | 
			
		||||
                        <el-checkbox v-for="city of item.checkList" :label="city.metricKey" :key="city.metricKey" :disabled="item.disabled" class="w45 mt10 mb10">
 | 
			
		||||
                          <span style="width: 200px" class="disInlineBlock">{{city.id}}-{{city.metricKey}}</span>
 | 
			
		||||
                          <span>{{city.metricName}}</span>
 | 
			
		||||
                        </el-checkbox>
 | 
			
		||||
                      </el-checkbox-group>
 | 
			
		||||
@@ -39,10 +39,14 @@
 | 
			
		||||
                <el-tab-pane label="自动发现项" name="autodiscoverItem">
 | 
			
		||||
                  <el-collapse v-model="activeNames">
 | 
			
		||||
                    <el-collapse-item v-for="(item,index) of linuxSystem.autodiscoverItem['dataList']" :title="item.title" :name="index">
 | 
			
		||||
                      <template slot="title">
 | 
			
		||||
                        {{item.title}}
 | 
			
		||||
                        <el-checkbox :indeterminate="item.isIndeterminate" v-model="item.checkAll" class="ml20" @change="(checked) => handleCheckAllChange(checked,item)">全选</el-checkbox>
 | 
			
		||||
                      </template>
 | 
			
		||||
                      <div style="display: flex;justify-content: center;">
 | 
			
		||||
                        <el-checkbox-group v-model="checkParams[item.modelName]" style="padding: 0 20px;">
 | 
			
		||||
                          <el-checkbox v-for="city of item.checkList" :disabled="item.disabled" :label="city.id" :key="city.id" class="mt10 mb10 disBlock">
 | 
			
		||||
                            <span style="width: 200px" class="disInlineBlock">{{city.metricKey}}</span>
 | 
			
		||||
                          <el-checkbox v-for="city of item.checkList" :disabled="item.disabled" :label="city.metricKey" :key="city.metricKey" class="mt10 mb10 disBlock">
 | 
			
		||||
                            <span style="width: 200px" class="disInlineBlock">{{city.id}}-{{city.metricKey}}</span>
 | 
			
		||||
                            <span>{{city.metricName}}</span>
 | 
			
		||||
                          </el-checkbox>
 | 
			
		||||
                        </el-checkbox-group>
 | 
			
		||||
@@ -61,7 +65,7 @@
 | 
			
		||||
                  <i class="el-icon-question"></i>
 | 
			
		||||
                </el-tooltip>
 | 
			
		||||
              </span>
 | 
			
		||||
              <el-tabs v-model="hwActiveName" @tab-click="handleClick">
 | 
			
		||||
              <el-tabs v-model="hwActiveName">
 | 
			
		||||
                <!--    2-2-1    -->
 | 
			
		||||
                <el-tab-pane label="监控项" name="monitorItem">
 | 
			
		||||
                  <template v-for="(item,index) of monitorTable['nodeOne']">
 | 
			
		||||
@@ -96,13 +100,15 @@
 | 
			
		||||
<script setup>
 | 
			
		||||
  import Form from '@/components/form/index.vue';
 | 
			
		||||
  import TableList from "@/components/table/index.vue"
 | 
			
		||||
  import {getMonitorTempList} from "@/api/disRevenue/resource"
 | 
			
		||||
  import {getMonitorTempList, addMonitorTemp, updateMonitorTemp, getMonitorTemp} from "@/api/disRevenue/resource"
 | 
			
		||||
  import MonitorTempView from './view'
 | 
			
		||||
  export default {
 | 
			
		||||
    name: 'MonitorTempDetails',
 | 
			
		||||
    components: {Form, TableList, MonitorTempView},
 | 
			
		||||
    data() {
 | 
			
		||||
      return {
 | 
			
		||||
        paramsData: {},
 | 
			
		||||
        tempContent: {},
 | 
			
		||||
        active: 0,
 | 
			
		||||
        activeNames: [0, 1,2,3],
 | 
			
		||||
        activeTypeName: 'linux',  // 两个系统
 | 
			
		||||
@@ -114,11 +120,7 @@
 | 
			
		||||
        allSelectedData: {},
 | 
			
		||||
        synthesisList: {},
 | 
			
		||||
        // 第一节点
 | 
			
		||||
        ruleFormData: {
 | 
			
		||||
          id: null,
 | 
			
		||||
          switchName: '',
 | 
			
		||||
          serverPort: ''
 | 
			
		||||
        },
 | 
			
		||||
        ruleFormData: {},
 | 
			
		||||
        config: {
 | 
			
		||||
          buttonGroup: []
 | 
			
		||||
        },
 | 
			
		||||
@@ -126,8 +128,8 @@
 | 
			
		||||
          config: {title: ''},
 | 
			
		||||
          controls: {
 | 
			
		||||
            id: {label: 'ID',hidden: true},
 | 
			
		||||
            switchName: {label: '模版名称', span: 12, type: 'input', style: 'display: block;margin: 0 auto;', rules: [{required: true, message: '请输入模版名称', trigger: 'blur'}]},
 | 
			
		||||
            serverPort: {label: '描述', span: 12, type: 'textarea'}
 | 
			
		||||
            templateName: {label: '模版名称', span: 12, type: 'input', style: 'display: block;margin: 0 auto;', rules: [{required: true, message: '请输入模版名称', trigger: 'blur'}]},
 | 
			
		||||
            description: {label: '描述', span: 12, type: 'textarea'}
 | 
			
		||||
          }
 | 
			
		||||
        }],
 | 
			
		||||
        // 第二节点 1栏
 | 
			
		||||
@@ -152,16 +154,16 @@
 | 
			
		||||
          autodiscoverItem: {
 | 
			
		||||
            firstTitle: 'Linux系统', title: '自动发现项',
 | 
			
		||||
            dataList:[{
 | 
			
		||||
              title: '发现挂载文件系统', modelName: 'point', checkAll: false, isIndeterminate: false, disabled: true,
 | 
			
		||||
              title: '发现挂载文件系统', modelName: 'vfs', checkAll: true, isIndeterminate: false, disabled: true,
 | 
			
		||||
              checkList: []
 | 
			
		||||
              }, {
 | 
			
		||||
                title: '发现网络接口', modelName: 'net', checkAll: false, isIndeterminate: false, disabled: true,
 | 
			
		||||
                title: '发现网络接口', modelName: 'net', checkAll: true, isIndeterminate: false, disabled: true,
 | 
			
		||||
                checkList: []
 | 
			
		||||
              }, {
 | 
			
		||||
                  title: '发现硬盘设备', modelName: 'disk', checkAll: false, isIndeterminate: false, disabled: true,
 | 
			
		||||
                  title: '发现硬盘设备', modelName: 'disk', checkAll: true, isIndeterminate: false, disabled: true,
 | 
			
		||||
                  checkList: []
 | 
			
		||||
              }, {
 | 
			
		||||
                  title: '发现docker', modelName: 'docker', checkAll: false, isIndeterminate: false, disabled: true,
 | 
			
		||||
                  title: '发现docker', modelName: 'docker', checkAll: true, isIndeterminate: false, disabled: true,
 | 
			
		||||
                  checkList: []
 | 
			
		||||
              }
 | 
			
		||||
            ]
 | 
			
		||||
@@ -169,7 +171,7 @@
 | 
			
		||||
        },
 | 
			
		||||
        // 第二节点 2栏 列显隐信息
 | 
			
		||||
        switchColumns: {
 | 
			
		||||
          id: { label: `ID`, visible: false },
 | 
			
		||||
          id: { label: `ID`, visible: true },
 | 
			
		||||
          metricKey: { label: `监控标识`, visible: true},
 | 
			
		||||
          metricName: { label: `监控名称`, visible: true},
 | 
			
		||||
          oid: { label: `监控OID`, visible: true },
 | 
			
		||||
@@ -202,17 +204,22 @@
 | 
			
		||||
            //     {id: 4, ident: 'sysContact', name: '系统联系信息', monitor: '1.3.6.1.2.1.1.1', filter: '', explain: '', relevance: {id: [2]}},
 | 
			
		||||
            //     {id: 5, ident: 'sysName', name: '系统名称', monitor: '1.3.6.1.2.1.1.1', filter: '', explain: ''},
 | 
			
		||||
            //   ],
 | 
			
		||||
            //   config: {tableKey: 'web2', colTopHiddenIcon: true, selectable: true}
 | 
			
		||||
            //   config: {tableKey: 'web3', colTopHiddenIcon: true, selectable: true}
 | 
			
		||||
            // },
 | 
			
		||||
            {
 | 
			
		||||
              firstTitle: '华为交换机', secondTitle: '自动发现项',title: '风扇发现', classType: 'checkHidden',
 | 
			
		||||
              tableList: [],
 | 
			
		||||
              config: {tableKey: 'web2', colTopHiddenIcon: true, selectable: true}
 | 
			
		||||
              config: {tableKey: 'web3', colTopHiddenIcon: true, selectable: true}
 | 
			
		||||
            },
 | 
			
		||||
        ]},
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    created() {
 | 
			
		||||
      this.paramsData = this.$route && this.$route.query;
 | 
			
		||||
      console.log('paramsData===',this.paramsData);
 | 
			
		||||
      if (this.paramsData && this.paramsData.id) {
 | 
			
		||||
        this.getFormDataList(this.paramsData.id);
 | 
			
		||||
      }
 | 
			
		||||
      Object.keys(this.linuxSystem).forEach(res => {
 | 
			
		||||
        this.linuxSystem[res]['dataList'].forEach(item => {
 | 
			
		||||
          this.checkAllParams[item.modelName] = {
 | 
			
		||||
@@ -225,32 +232,110 @@
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
    methods: {
 | 
			
		||||
      // 获取详情
 | 
			
		||||
      getFormDataList(id) {
 | 
			
		||||
        this.tempContent = {};
 | 
			
		||||
        getMonitorTemp(id).then(val => {
 | 
			
		||||
          console.log('val====',val);
 | 
			
		||||
          if (val && val.data) {
 | 
			
		||||
            this.activeTypeName = val.data.template.resourcyType;
 | 
			
		||||
            this.ruleFormData = val.data.template;
 | 
			
		||||
            this.tempContent[val.data.template.resourcyType] = val.data[val.data.template.resourcyType];
 | 
			
		||||
          }
 | 
			
		||||
        }).catch(() => {
 | 
			
		||||
          // this.$modal.msgError("操作失败")
 | 
			
		||||
        });
 | 
			
		||||
      },
 | 
			
		||||
      fnGetMonitorTempList(params) {
 | 
			
		||||
        let towType = this.hwActiveName;
 | 
			
		||||
        towType = this.linuxActiveName;
 | 
			
		||||
        getMonitorTempList(params).then(res => {
 | 
			
		||||
          // console.log('data====',res);
 | 
			
		||||
          // console.log('data====',res,'params==',params);
 | 
			
		||||
          if (this.activeTypeName === 'linux') {
 | 
			
		||||
            if (this.linuxActiveName === 'monitorItem'){
 | 
			
		||||
              this.linuxSystem[this.linuxActiveName].dataList[0].checkList = res.data && res.data.cpu;
 | 
			
		||||
              this.linuxSystem[this.linuxActiveName].dataList[1].checkList = res.data && res.data.other;
 | 
			
		||||
            if (params.itemType === 'monitorItem'){
 | 
			
		||||
              this.linuxSystem[params.itemType].dataList[0].checkList = res.data && res.data.cpu;
 | 
			
		||||
              this.linuxSystem[params.itemType].dataList[1].checkList = res.data && res.data.other;
 | 
			
		||||
              if (this.tempContent && this.tempContent['linux']) {
 | 
			
		||||
                // cpu
 | 
			
		||||
                if (this.tempContent['linux'] && this.tempContent['linux'].cpu && this.tempContent['linux'].cpu.length > 0) {
 | 
			
		||||
                  this.linuxSystem[params.itemType].dataList[0].checkAll = true;
 | 
			
		||||
                  // 全选操作
 | 
			
		||||
              this.handleCheckAllChange(true, this.linuxSystem[this.linuxActiveName].dataList[0]);
 | 
			
		||||
                  this.handleCheckAllChange(true, this.linuxSystem[params.itemType].dataList[0]);
 | 
			
		||||
                } else {
 | 
			
		||||
              this.checkParams.point = res.data.point.map(item => item.id);
 | 
			
		||||
              this.checkParams.net = res.data.net.map(item => item.id);
 | 
			
		||||
              this.checkParams.disk = res.data.disk.map(item => item.id);
 | 
			
		||||
              this.checkParams.docker = res.data.docker.map(item => item.id);
 | 
			
		||||
              this.linuxSystem[this.linuxActiveName].dataList[0].checkList = res.data && res.data.point;
 | 
			
		||||
              this.linuxSystem[this.linuxActiveName].dataList[1].checkList = res.data && res.data.net;
 | 
			
		||||
              this.linuxSystem[this.linuxActiveName].dataList[2].checkList = res.data && res.data.disk;
 | 
			
		||||
              this.linuxSystem[this.linuxActiveName].dataList[3].checkList = res.data && res.data.docker;
 | 
			
		||||
                  this.linuxSystem[params.itemType].dataList[0].checkAll = false;
 | 
			
		||||
                  // let newLinuxOne = {...this.linuxSystem[params.itemType].dataList[0]};
 | 
			
		||||
                  // newLinuxOne['checkList'] = this.tempContent['linux'] && this.tempContent['linux'].cpu;
 | 
			
		||||
                  // let checkData = this.tempContent && this.tempContent['linux'] ? newLinuxOne : this.linuxSystem[params.itemType].dataList[0];
 | 
			
		||||
                  // // 全选操作 this.tempContent['linux'].cpu
 | 
			
		||||
                  // this.handleCheckAllChange(true, checkData);
 | 
			
		||||
                }
 | 
			
		||||
                // other
 | 
			
		||||
                if (res.data && res.data.other && res.data.other.length === this.tempContent['linux'] && this.tempContent['linux'].other && this.tempContent['linux'].other.length) {
 | 
			
		||||
                  this.linuxSystem[params.itemType].dataList[1].checkAll = true;
 | 
			
		||||
                  // 全选操作
 | 
			
		||||
                  this.handleCheckAllChange(true, this.linuxSystem[params.itemType].dataList[1]);
 | 
			
		||||
                } else {
 | 
			
		||||
                  this.linuxSystem[params.itemType].dataList[1].checkAll = false;
 | 
			
		||||
                  let newLinuxOne = {...this.linuxSystem[params.itemType].dataList[1]};
 | 
			
		||||
                  newLinuxOne['checkList'] = [];
 | 
			
		||||
                  this.tempContent['linux'].other.some(item => {
 | 
			
		||||
                    this.linuxSystem[params.itemType].dataList[1].checkList.some(val => {
 | 
			
		||||
                      if (item.metricKey === val.metricKey){
 | 
			
		||||
                        newLinuxOne['checkList'].push(val);
 | 
			
		||||
                        return true;
 | 
			
		||||
                      }
 | 
			
		||||
                    });
 | 
			
		||||
                  });
 | 
			
		||||
                  // 全选操作
 | 
			
		||||
                  this.handleCheckAllChange(true, newLinuxOne, true);
 | 
			
		||||
                }
 | 
			
		||||
              } else {
 | 
			
		||||
                this.handleCheckAllChange(true, this.linuxSystem[params.itemType].dataList[0]);
 | 
			
		||||
              }
 | 
			
		||||
            } else {
 | 
			
		||||
              this.linuxSystem[params.itemType].dataList[0].checkList = res.data && res.data.vfs;
 | 
			
		||||
              this.linuxSystem[params.itemType].dataList[1].checkList = res.data && res.data.net;
 | 
			
		||||
              this.linuxSystem[params.itemType].dataList[2].checkList = res.data && res.data.disk;
 | 
			
		||||
              this.linuxSystem[params.itemType].dataList[3].checkList = res.data && res.data.docker;
 | 
			
		||||
              if (this.paramsData && this.paramsData.id) {
 | 
			
		||||
                // vfs
 | 
			
		||||
                if (this.tempContent['linux'] && this.tempContent['linux'].vfs && this.tempContent['linux'].vfs.length > 0) {
 | 
			
		||||
                  this.linuxSystem[params.itemType].dataList[0].checkAll = true;
 | 
			
		||||
                  this.handleCheckAllChange(true, this.linuxSystem[params.itemType].dataList[0]);
 | 
			
		||||
                } else {
 | 
			
		||||
                  this.linuxSystem[params.itemType].dataList[0].checkAll = false;
 | 
			
		||||
                }
 | 
			
		||||
                // net
 | 
			
		||||
                if (this.tempContent['linux'] && this.tempContent['linux'].net && this.tempContent['linux'].net.length > 0) {
 | 
			
		||||
                  this.linuxSystem[params.itemType].dataList[1].checkAll = true;
 | 
			
		||||
                  this.handleCheckAllChange(true, this.linuxSystem[params.itemType].dataList[1]);
 | 
			
		||||
                } else {
 | 
			
		||||
                  this.linuxSystem[params.itemType].dataList[1].checkAll = false;
 | 
			
		||||
                }
 | 
			
		||||
                // disk
 | 
			
		||||
                if (this.tempContent['linux'] && this.tempContent['linux'].disk && this.tempContent['linux'].disk.length > 0) {
 | 
			
		||||
                  this.linuxSystem[params.itemType].dataList[2].checkAll = true;
 | 
			
		||||
                  this.handleCheckAllChange(true, this.linuxSystem[params.itemType].dataList[2]);
 | 
			
		||||
                } else {
 | 
			
		||||
                  this.linuxSystem[params.itemType].dataList[2].checkAll = false;
 | 
			
		||||
                }
 | 
			
		||||
                // docker
 | 
			
		||||
                if (this.tempContent['linux'] && this.tempContent['linux'].docker && this.tempContent['linux'].docker.length > 0) {
 | 
			
		||||
                  this.linuxSystem[params.itemType].dataList[3].checkAll = true;
 | 
			
		||||
                  this.handleCheckAllChange(true, this.linuxSystem[params.itemType].dataList[3]);
 | 
			
		||||
                } else {
 | 
			
		||||
                  this.linuxSystem[params.itemType].dataList[3].checkAll = false;
 | 
			
		||||
                }
 | 
			
		||||
              } else {
 | 
			
		||||
                this.handleCheckAllChange(true, this.linuxSystem[params.itemType].dataList[0]);
 | 
			
		||||
                this.handleCheckAllChange(true, this.linuxSystem[params.itemType].dataList[1]);
 | 
			
		||||
                this.handleCheckAllChange(true, this.linuxSystem[params.itemType].dataList[2]);
 | 
			
		||||
                this.handleCheckAllChange(true, this.linuxSystem[params.itemType].dataList[3]);
 | 
			
		||||
              }
 | 
			
		||||
            }
 | 
			
		||||
          } else {
 | 
			
		||||
            if (params.itemType === 'monitorItem') {
 | 
			
		||||
              let defaultNum = 0;
 | 
			
		||||
              let relevance = {id: []};
 | 
			
		||||
              res.data.system.forEach((item,index) => {
 | 
			
		||||
              res.data.switchOther.forEach((item,index) => {
 | 
			
		||||
                if (item && item.filterValue === '9') {
 | 
			
		||||
                  defaultNum = index;
 | 
			
		||||
                }
 | 
			
		||||
@@ -258,12 +343,31 @@
 | 
			
		||||
                  relevance['id'].push(item.id);
 | 
			
		||||
                }
 | 
			
		||||
              });
 | 
			
		||||
              res.data.system[defaultNum]['relevance'] = relevance;
 | 
			
		||||
              this.monitorTable.nodeOne[0].tableList = res.data.system;
 | 
			
		||||
              res.data.switchOther[defaultNum]['relevance'] = relevance;
 | 
			
		||||
              this.monitorTable.nodeOne[0].tableList = res.data.switchOther;
 | 
			
		||||
              if (this.paramsData && this.paramsData.id) {
 | 
			
		||||
                let tabDefSel = [];
 | 
			
		||||
                this.tempContent['switch'].switchOther.some(item => {
 | 
			
		||||
                  res.data.switchOther.some(val => {
 | 
			
		||||
                    if (item.metricKey === val.metricKey) {
 | 
			
		||||
                      tabDefSel.push(val);
 | 
			
		||||
                      return;
 | 
			
		||||
                    }
 | 
			
		||||
                  });
 | 
			
		||||
                });
 | 
			
		||||
                setTimeout(() => {
 | 
			
		||||
                  this.$refs[`tableRef_web`][0].defaultSelectRows(tabDefSel);
 | 
			
		||||
                },500);
 | 
			
		||||
              }
 | 
			
		||||
            } else {
 | 
			
		||||
              this.monitorTable.nodeTow[0].tableList = res.data.netport;
 | 
			
		||||
              this.monitorTable.nodeTow[1].tableList = res.data.lightmodule;
 | 
			
		||||
              this.monitorTable.nodeTow[2].tableList = res.data.fan;
 | 
			
		||||
              this.monitorTable.nodeTow[0].tableList = res.data.switchNet;
 | 
			
		||||
              this.monitorTable.nodeTow[1].tableList = res.data.switchModule;
 | 
			
		||||
              this.monitorTable.nodeTow[2].tableList = res.data.switchFan;
 | 
			
		||||
              setTimeout(() => {
 | 
			
		||||
                this.$refs[`tableRef_web1`][0].selectAllRows();
 | 
			
		||||
                this.$refs[`tableRef_web2`][0].selectAllRows();
 | 
			
		||||
                this.$refs[`tableRef_web3`][0].selectAllRows();
 | 
			
		||||
              },500);
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        });
 | 
			
		||||
@@ -275,23 +379,20 @@
 | 
			
		||||
        } else {
 | 
			
		||||
          if (this.active === 0 && !await this.fnFormValid()) {
 | 
			
		||||
            return;
 | 
			
		||||
          } else if (this.active === 1) {
 | 
			
		||||
            this.selectAllChange();
 | 
			
		||||
          } else {
 | 
			
		||||
            this.handleClick();
 | 
			
		||||
          }
 | 
			
		||||
          if (this.active === 1) {
 | 
			
		||||
            this.selectAllChange();
 | 
			
		||||
          }
 | 
			
		||||
          this.active++;
 | 
			
		||||
        }
 | 
			
		||||
      },
 | 
			
		||||
      handleClick() {
 | 
			
		||||
        let params = {};
 | 
			
		||||
        if (this.activeTypeName === 'linux') {
 | 
			
		||||
          params = {resourceType: this.activeTypeName, itemType: this.linuxActiveName};
 | 
			
		||||
        } else {
 | 
			
		||||
          params = {resourceType: this.activeTypeName, itemType: this.hwActiveName};
 | 
			
		||||
        }
 | 
			
		||||
        let itemTypeList = ['monitorItem', 'autodiscoverItem'];
 | 
			
		||||
        itemTypeList.forEach(item => {
 | 
			
		||||
          let params = {resourceType: this.activeTypeName, itemType: item};
 | 
			
		||||
          this.fnGetMonitorTempList(params);
 | 
			
		||||
        });
 | 
			
		||||
      },
 | 
			
		||||
      // form验证
 | 
			
		||||
      fnFormValid() {
 | 
			
		||||
@@ -331,14 +432,20 @@
 | 
			
		||||
      },
 | 
			
		||||
      // 最后一步展示
 | 
			
		||||
      lastStepView() {
 | 
			
		||||
        this.synthesisList = Object.assign({}, this.checkAllParams, this.allSelectedData);
 | 
			
		||||
        if (this.activeTypeName === 'linux') {
 | 
			
		||||
          this.synthesisList = Object.assign({}, this.checkAllParams);
 | 
			
		||||
        } else {
 | 
			
		||||
          this.synthesisList = Object.assign({}, this.allSelectedData);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
      },
 | 
			
		||||
      // 全选按钮
 | 
			
		||||
      handleCheckAllChange(checked, itemAll) {
 | 
			
		||||
        let arrList = itemAll.checkList.map(item => {return item.id});
 | 
			
		||||
      handleCheckAllChange(checked, itemAll, isIndetBool) {
 | 
			
		||||
        // console.log('itemAll===',itemAll.checkList);
 | 
			
		||||
        let arrList = itemAll && itemAll.checkList && itemAll.checkList.map(item => {return item.metricKey});
 | 
			
		||||
        this.checkParams[itemAll.modelName] = checked ? arrList : [];
 | 
			
		||||
        this.checkAllParams[itemAll.modelName].data = checked ? itemAll.checkList : [];
 | 
			
		||||
        itemAll.isIndeterminate = false;
 | 
			
		||||
        itemAll.isIndeterminate = isIndetBool ? true : false;
 | 
			
		||||
      },
 | 
			
		||||
      // 单个选择按钮
 | 
			
		||||
      handleCheckedCitiesChange(checkValList, iteListAll) {
 | 
			
		||||
@@ -346,11 +453,31 @@
 | 
			
		||||
        iteListAll.isIndeterminate = checkValList.length > 0 && checkValList.length < iteListAll['checkList'].length;
 | 
			
		||||
        // this.checkParams[iteListAll.modelName] = checkValList;
 | 
			
		||||
        this.checkAllParams[iteListAll.modelName].data = iteListAll['checkList'].filter(item =>
 | 
			
		||||
          checkValList.includes(item.id)
 | 
			
		||||
          checkValList.includes(item.metricKey)
 | 
			
		||||
        );
 | 
			
		||||
      },
 | 
			
		||||
      // 提交
 | 
			
		||||
      submit() {
 | 
			
		||||
        let params = Object.assign({}, {monitorIds: '', resourceType: this.activeTypeName}, this.ruleFormData);
 | 
			
		||||
        let idList = [];
 | 
			
		||||
        Object.keys(this.synthesisList).forEach(item => {
 | 
			
		||||
          idList = idList.concat(this.synthesisList[item].data.map(val => val.id));
 | 
			
		||||
        });
 | 
			
		||||
        params['monitorIds'] = idList;
 | 
			
		||||
        console.log('params===',params);
 | 
			
		||||
        this.$modal.loading();
 | 
			
		||||
        let fnType = addMonitorTemp;
 | 
			
		||||
        if (this.paramsData && this.paramsData.id) {
 | 
			
		||||
          fnType = updateMonitorTemp;
 | 
			
		||||
        }
 | 
			
		||||
        fnType(params).then(response => {
 | 
			
		||||
          this.$modal.msgSuccess(response.msg);
 | 
			
		||||
          this.$router.push("/resource/monitorTemp");
 | 
			
		||||
          this.$modal.closeLoading();
 | 
			
		||||
        }).catch(() => {
 | 
			
		||||
          this.$modal.closeLoading();
 | 
			
		||||
          this.$modal.msgError("操作失败")
 | 
			
		||||
        });
 | 
			
		||||
        console.log('ruleFormData==',this.ruleFormData);
 | 
			
		||||
        console.log('synthesisList==',this.synthesisList);
 | 
			
		||||
      },
 | 
			
		||||
@@ -379,7 +506,14 @@
 | 
			
		||||
    padding-left: 20px;
 | 
			
		||||
    font-size: 1rem;
 | 
			
		||||
  }
 | 
			
		||||
  ::v-deep .checkHidden .el-table .el-table__fixed .el-table__header-wrapper .el-table__header .el-table-column--selection .el-checkbox__input {
 | 
			
		||||
    display: none!important;
 | 
			
		||||
    /* 视觉禁用效果 */
 | 
			
		||||
  .el-table__body-wrapper .el-checkbox__input .is-checked .el-checkbox__inner {
 | 
			
		||||
     background-color: #e4e7ed;
 | 
			
		||||
     border-color: #e4e7ed;
 | 
			
		||||
  }
 | 
			
		||||
  .el-table__body-wrapper .el-checkbox__input .el-checkbox__inner {
 | 
			
		||||
    background-color: #f5f5f5;
 | 
			
		||||
    border-color: #dcdfe6;
 | 
			
		||||
    cursor: not-allowed;
 | 
			
		||||
  }
 | 
			
		||||
</style>
 | 
			
		||||
 
 | 
			
		||||
@@ -2,9 +2,9 @@
 | 
			
		||||
  <div class="app-container pageTopForm">
 | 
			
		||||
    <el-form :model="queryParams" ref="queryRef" v-show="showSearch" size="small" label-width="130px">
 | 
			
		||||
      <el-col :span="6">
 | 
			
		||||
        <el-form-item label="模版名称" prop="switchName">
 | 
			
		||||
        <el-form-item label="模版名称" prop="templateName">
 | 
			
		||||
          <el-input
 | 
			
		||||
            v-model="queryParams.switchName"
 | 
			
		||||
            v-model="queryParams.templateName"
 | 
			
		||||
            placeholder="请输入模版名称"
 | 
			
		||||
            clearable
 | 
			
		||||
            @keyup.enter="handleQuery"/>
 | 
			
		||||
@@ -45,11 +45,11 @@
 | 
			
		||||
        // 列显隐信息
 | 
			
		||||
        columns: {
 | 
			
		||||
          id: { label: `ID`,width: '50'},
 | 
			
		||||
          switchName: { label: `模版名称`,minWidth: '150', visible: true },
 | 
			
		||||
          switchSn: { label: `描述`,visible: false, minWidth: '200'},
 | 
			
		||||
          interfaceName: { label: `监控项`, minWidth: '100', visible: true },
 | 
			
		||||
          connectedDeviceType: { label: `自动发现项`, minWidth: '100', visible: true },
 | 
			
		||||
          serverName: { label: `包含资源`, minWidth: '200'},
 | 
			
		||||
          templateName: { label: `模版名称`,minWidth: '150', visible: true },
 | 
			
		||||
          description: { label: `描述`,visible: false, minWidth: '200'},
 | 
			
		||||
          monitorItems: { label: `监控项`, minWidth: '100', visible: true },
 | 
			
		||||
          discoveryRules: { label: `自动发现项`, minWidth: '100', visible: true },
 | 
			
		||||
          resourceGroupName: { label: `包含资源`, minWidth: '200'},
 | 
			
		||||
          createTime: { label: `创建时间`, minWidth: '160'},
 | 
			
		||||
          updateTime:{ label: `修改时间`, minWidth: '160'}
 | 
			
		||||
        },
 | 
			
		||||
@@ -75,14 +75,19 @@
 | 
			
		||||
    created() {
 | 
			
		||||
      this.getList();
 | 
			
		||||
    },
 | 
			
		||||
    activated() {
 | 
			
		||||
      this.$nextTick(() => {
 | 
			
		||||
        this.getList();
 | 
			
		||||
      });
 | 
			
		||||
    },
 | 
			
		||||
    methods: {
 | 
			
		||||
      /** 查询列表 */
 | 
			
		||||
      getList() {
 | 
			
		||||
        this.loading = true;
 | 
			
		||||
        this.$modal.loading();
 | 
			
		||||
        listMonitorTemp(this.queryParams).then(response => {
 | 
			
		||||
          this.tableList = response.rows;
 | 
			
		||||
          this.queryParams.total = response.total;
 | 
			
		||||
          this.loading = false;
 | 
			
		||||
          this.$modal.closeLoading();
 | 
			
		||||
        })
 | 
			
		||||
      },
 | 
			
		||||
      // 处理子组件传递的新值
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,10 @@
 | 
			
		||||
        <div v-if="item && item.lastTitle && item.tableKey" class="form-header h4" style="background: #d4e3fc;padding: 15px 10px;border-radius: 5px">
 | 
			
		||||
            {{item.lastTitle}}
 | 
			
		||||
        </div>
 | 
			
		||||
        <div v-else class="form-header h4" style="padding: 15px 10px;">{{item.firstTitle}}-{{item.secondTitle}}</div>
 | 
			
		||||
        <div v-else class="form-header h4" style="padding: 15px 10px;">
 | 
			
		||||
 | 
			
		||||
          {{item.firstTitle}}-{{item && item.lastTitle ? item.lastTitle : item.secondTitle}}
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="mt10 mb10">
 | 
			
		||||
          <div v-if="item && item.tableKey">
 | 
			
		||||
            <template v-if="item.lastTitle">
 | 
			
		||||
@@ -18,10 +21,10 @@
 | 
			
		||||
              <TableList :config="config" :columns="columns" :queryParams="{total: 0}" :tableList="item.data"  @fnClick="callback"></TableList>
 | 
			
		||||
            </template>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div v-else class="plr-20">
 | 
			
		||||
            <div v-for="(val,valIndex) of item.data" class="disInlineBlock w45">
 | 
			
		||||
              <span style="width: 200px" class="disInlineBlock">{{val.name}}</span>
 | 
			
		||||
              <span>{{val.towName}}</span>
 | 
			
		||||
          <div v-else class="w80 plr-20 m0Auto">
 | 
			
		||||
            <div v-for="(val,valIndex) of item.data" class="disInlineBlock w100 mb10">
 | 
			
		||||
              <span style="width: 45%;color: #b3b3b3;" class="disInlineBlock">{{val.metricName}}</span>
 | 
			
		||||
              <span>{{val.metricKey}}</span>
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
@@ -49,24 +52,23 @@
 | 
			
		||||
    data() {
 | 
			
		||||
      return {
 | 
			
		||||
        formList: [{
 | 
			
		||||
          config: {title: '基本信息'},
 | 
			
		||||
          config: {title: '基本信息',readonly: true},
 | 
			
		||||
          controls: {
 | 
			
		||||
            id: {label: 'ID',hidden: true},
 | 
			
		||||
            switchName: {label: '模版名称', span: 12, type: 'input', disabled: true, rules: [{required: true, message: '请输入模版名称', trigger: 'blur'}]},
 | 
			
		||||
            resourceName: {label: '包含资源', span: 12, type: 'input', disabled: true},
 | 
			
		||||
            serverPort: {label: '描述', span: 12, type: 'textarea', disabled: true,}
 | 
			
		||||
            templateName: {label: '模版名称', span: 24, type: 'input', required: true},
 | 
			
		||||
            description: {label: '描述', span: 24, type: 'textarea'}
 | 
			
		||||
          }
 | 
			
		||||
        }],
 | 
			
		||||
        paramsData: {},
 | 
			
		||||
        columns: {
 | 
			
		||||
          id: { label: `ID`, visible: false },
 | 
			
		||||
          ident: { label: `监控标识`, visible: true},
 | 
			
		||||
          name: { label: `监控名称`, visible: true},
 | 
			
		||||
          monitor: { label: `监控OID`, visible: true },
 | 
			
		||||
          filter: { label: `过滤值`},
 | 
			
		||||
          explain: { label: `监控说明`, visible: true}
 | 
			
		||||
          metricKey: { label: `监控标识`, visible: true},
 | 
			
		||||
          metricName: { label: `监控名称`, visible: true},
 | 
			
		||||
          oid: { label: `监控OID`, visible: true },
 | 
			
		||||
          filterValue: { label: `过滤值`, visible: true},
 | 
			
		||||
          monitorDescription: { label: `自动监控说明`, visible: true}
 | 
			
		||||
        },
 | 
			
		||||
        config: {colHiddenCheck: true}
 | 
			
		||||
        config: {colHiddenCheck: true, colTopHiddenIcon: true}
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    created() {
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										231
									
								
								src/views/disRevenue/resource/serverScript/dynamicForm.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										231
									
								
								src/views/disRevenue/resource/serverScript/dynamicForm.vue
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,231 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div>
 | 
			
		||||
    <el-form :model="form" label-width="120px" class="dynamic-form">
 | 
			
		||||
      <!-- 动态源文件部分 -->
 | 
			
		||||
      <div v-for="(source, index) in form.sources" :key="index" class="source-item">
 | 
			
		||||
        <!-- 源文件地址格式 -->
 | 
			
		||||
        <el-form-item :label="`源文件${index + 1}地址格式`" :prop="`sources.${index}.format`" :rules="[{ required: true, message: '请选择地址格式', trigger: 'change' }]">
 | 
			
		||||
          <el-radio-group v-model="source.format">
 | 
			
		||||
            <el-radio label="platform">平台文件地址</el-radio>
 | 
			
		||||
            <el-radio label="external">外网HTTP(S)</el-radio>
 | 
			
		||||
          </el-radio-group>
 | 
			
		||||
          <div class="tip">注意:当文件大小超过100M时,请选择【外网HTTP(S)】地址格式</div>
 | 
			
		||||
          <div class="error-tip" v-if="source.sizeError">您选择的文件已经超过100M,请更改文件地址格式选择</div>
 | 
			
		||||
        </el-form-item>
 | 
			
		||||
 | 
			
		||||
        <!-- 源文件地址 -->
 | 
			
		||||
        <el-form-item :label="`源文件${index + 1}地址`" :prop="`sources.${index}.address`" :rules="[{ required: true, message: '请选择文件地址', trigger: 'change' }]">
 | 
			
		||||
          <el-select v-model="source.address" placeholder="请选择或输入地址" filterable clearable>
 | 
			
		||||
            <el-option label="系统默认文件1" value="system-default-1"></el-option>
 | 
			
		||||
            <el-option label="系统默认文件2" value="system-default-2"></el-option>
 | 
			
		||||
            <el-option label="用户上传文件1" value="user-upload-1"></el-option>
 | 
			
		||||
            <el-option label="用户上传文件2" value="user-upload-2"></el-option>
 | 
			
		||||
          </el-select>
 | 
			
		||||
        </el-form-item>
 | 
			
		||||
 | 
			
		||||
        <!-- 删除按钮 - 至少保留一个源文件 -->
 | 
			
		||||
        <el-button type="danger" icon="el-icon-delete" @click="removeSource(index)" v-if="form.sources.length > 1" class="delete-btn">删除源文件{{ index + 1 }}</el-button>
 | 
			
		||||
      </div>
 | 
			
		||||
 | 
			
		||||
      <!-- 添加源文件按钮 -->
 | 
			
		||||
      <el-form-item>
 | 
			
		||||
        <el-button type="primary" icon="el-icon-plus" @click="addSource" class="add-btn">添加源文件</el-button>
 | 
			
		||||
      </el-form-item>
 | 
			
		||||
 | 
			
		||||
      <!-- 目标目录 -->
 | 
			
		||||
      <el-form-item label="目标目录" prop="targetDir" :rules="[{ required: true, message: '请输入目标目录', trigger: 'blur' }]">
 | 
			
		||||
        <el-input v-model="form.targetDir" placeholder="请输入目标目录路径" clearable></el-input>
 | 
			
		||||
      </el-form-item>
 | 
			
		||||
 | 
			
		||||
      <!-- 命令内容部分 -->
 | 
			
		||||
      <el-form-item label="命令内容">
 | 
			
		||||
        <div v-for="(cmd, index) in form.commands" :key="index" class="command-item">
 | 
			
		||||
<!--          <el-input v-model="cmd" placeholder="请输入命令" clearable></el-input>-->
 | 
			
		||||
          <el-button type="primary" icon="el-icon-plus" @click="addCommand" v-if="index === form.commands.length - 1" class="command-btn">添加</el-button>
 | 
			
		||||
          <el-button type="danger" icon="el-icon-delete" @click="removeCommand(index)" v-if="form.commands.length > 1" class="command-btn">删除</el-button>
 | 
			
		||||
        </div>
 | 
			
		||||
      </el-form-item>
 | 
			
		||||
 | 
			
		||||
      <!-- 执行方式 -->
 | 
			
		||||
      <el-form-item label="执行方式" prop="executionMode" :rules="[{ required: true, message: '请选择执行方式', trigger: 'change' }]">
 | 
			
		||||
        <el-select v-model="form.executionMode" placeholder="请选择执行方式" clearable>
 | 
			
		||||
          <el-option label="立即执行" value="immediate"></el-option>
 | 
			
		||||
          <el-option label="定时执行" value="scheduled"></el-option>
 | 
			
		||||
          <el-option label="手动触发" value="manual"></el-option>
 | 
			
		||||
        </el-select>
 | 
			
		||||
      </el-form-item>
 | 
			
		||||
 | 
			
		||||
      <!-- 定时时间 -->
 | 
			
		||||
      <el-form-item label="定时时间" v-if="form.executionMode === 'scheduled'" prop="scheduleTime" :rules="[{ required: true, message: '请选择定时时间', trigger: 'change' }]">
 | 
			
		||||
        <el-date-picker v-model="form.scheduleTime" type="datetime" placeholder="选择日期时间" style="width: 100%;"></el-date-picker>
 | 
			
		||||
      </el-form-item>
 | 
			
		||||
 | 
			
		||||
      <!-- 提交按钮 -->
 | 
			
		||||
      <el-form-item>
 | 
			
		||||
        <el-button type="primary" @click="submitForm">提交</el-button>
 | 
			
		||||
        <el-button @click="resetForm">重置</el-button>
 | 
			
		||||
      </el-form-item>
 | 
			
		||||
    </el-form>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
    export default {
 | 
			
		||||
      name: 'DynamicForm',
 | 
			
		||||
      data() {
 | 
			
		||||
        return {
 | 
			
		||||
          form: {
 | 
			
		||||
            // 源文件数组,初始包含两个源文件
 | 
			
		||||
            sources: [
 | 
			
		||||
              {
 | 
			
		||||
                format: '',       // 地址格式:platform/external
 | 
			
		||||
                address: '',      // 文件地址
 | 
			
		||||
                sizeError: false  // 文件大小错误标记
 | 
			
		||||
              },
 | 
			
		||||
              {
 | 
			
		||||
                format: '',
 | 
			
		||||
                address: '',
 | 
			
		||||
                sizeError: false
 | 
			
		||||
              }
 | 
			
		||||
            ],
 | 
			
		||||
            targetDir: '',          // 目标目录
 | 
			
		||||
            commands: [''],         // 命令内容数组
 | 
			
		||||
            executionMode: '',      // 执行方式
 | 
			
		||||
            scheduleTime: ''        // 定时时间
 | 
			
		||||
          }
 | 
			
		||||
        };
 | 
			
		||||
      },
 | 
			
		||||
      methods: {
 | 
			
		||||
        // 添加源文件
 | 
			
		||||
        addSource() {
 | 
			
		||||
          this.form.sources.push({
 | 
			
		||||
            format: '',
 | 
			
		||||
            address: '',
 | 
			
		||||
            sizeError: false
 | 
			
		||||
          });
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        // 删除源文件
 | 
			
		||||
        removeSource(index) {
 | 
			
		||||
          this.form.sources.splice(index, 1);
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        // 添加命令
 | 
			
		||||
        addCommand() {
 | 
			
		||||
          this.form.commands.push('');
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        // 删除命令
 | 
			
		||||
        removeCommand(index) {
 | 
			
		||||
          this.form.commands.splice(index, 1);
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        // 提交表单
 | 
			
		||||
        submitForm() {
 | 
			
		||||
          this.$refs.form.validate((valid) => {
 | 
			
		||||
            if (valid) {
 | 
			
		||||
              // 在这里可以添加自定义验证逻辑,例如检查大文件是否使用了正确的地址格式
 | 
			
		||||
              const hasError = this.form.sources.some(source => {
 | 
			
		||||
                // 假设这里有判断文件大小的逻辑
 | 
			
		||||
                const fileSize = this.getFileSize(source.address); // 假设的方法
 | 
			
		||||
                source.sizeError = fileSize > 100 && source.format === 'platform';
 | 
			
		||||
                return source.sizeError;
 | 
			
		||||
              });
 | 
			
		||||
 | 
			
		||||
              if (!hasError) {
 | 
			
		||||
                this.$message.success('表单提交成功');
 | 
			
		||||
                console.log('表单数据:', this.form);
 | 
			
		||||
              } else {
 | 
			
		||||
                this.$message.error('存在文件大小与地址格式不匹配的问题,请检查');
 | 
			
		||||
              }
 | 
			
		||||
            } else {
 | 
			
		||||
              this.$message.error('表单验证失败,请检查必填项');
 | 
			
		||||
              return false;
 | 
			
		||||
            }
 | 
			
		||||
          });
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        // 重置表单
 | 
			
		||||
        resetForm() {
 | 
			
		||||
          this.$refs.form.resetFields();
 | 
			
		||||
          // 重置数组类型的字段
 | 
			
		||||
          this.form.sources = [
 | 
			
		||||
            { format: '', address: '', sizeError: false },
 | 
			
		||||
            { format: '', address: '', sizeError: false }
 | 
			
		||||
          ];
 | 
			
		||||
          this.form.commands = [''];
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        // 模拟获取文件大小的方法
 | 
			
		||||
        getFileSize(address) {
 | 
			
		||||
          // 实际应用中这里应该是真实的文件大小获取逻辑
 | 
			
		||||
          const sizeMap = {
 | 
			
		||||
            'system-default-1': 50,    // 50M
 | 
			
		||||
            'system-default-2': 150,   // 150M
 | 
			
		||||
            'user-upload-1': 80,       // 80M
 | 
			
		||||
            'user-upload-2': 200       // 200M
 | 
			
		||||
          };
 | 
			
		||||
          return sizeMap[address] || 0;
 | 
			
		||||
        }
 | 
			
		||||
      },
 | 
			
		||||
    }
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style scoped>
 | 
			
		||||
  .dynamic-form {
 | 
			
		||||
    max-width: 800px;
 | 
			
		||||
    margin: 20px auto;
 | 
			
		||||
    padding: 20px;
 | 
			
		||||
    background-color: #fff;
 | 
			
		||||
    border-radius: 4px;
 | 
			
		||||
    box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .tip {
 | 
			
		||||
    color: #faad14;
 | 
			
		||||
    font-size: 12px;
 | 
			
		||||
    margin-top: 5px;
 | 
			
		||||
    line-height: 1.5;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .error-tip {
 | 
			
		||||
    color: #f5222d;
 | 
			
		||||
    font-size: 12px;
 | 
			
		||||
    margin-top: 5px;
 | 
			
		||||
    line-height: 1.5;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .source-item {
 | 
			
		||||
    padding-bottom: 15px;
 | 
			
		||||
    margin-bottom: 15px;
 | 
			
		||||
    border-bottom: 1px dashed #e8e8e8;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .source-item:last-child {
 | 
			
		||||
    border-bottom: none;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .delete-btn {
 | 
			
		||||
    margin-left: 120px;
 | 
			
		||||
    margin-top: -10px;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .add-btn {
 | 
			
		||||
    margin-left: 120px;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .command-item {
 | 
			
		||||
    display: flex;
 | 
			
		||||
    align-items: center;
 | 
			
		||||
    margin-bottom: 10px;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .command-item .el-input {
 | 
			
		||||
    flex: 1;
 | 
			
		||||
    margin-right: 10px;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .command-btn {
 | 
			
		||||
    white-space: nowrap;
 | 
			
		||||
  }
 | 
			
		||||
</style>
 | 
			
		||||
		Reference in New Issue
	
	Block a user