fuliqi
2024-04-10 780dce7699d562267db954ec8ccaa50ee410276b
考核规则
2个文件已修改
356 ■■■■■ 已修改文件
src/views/system/calculate/rule/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/rule/city/index.vue 354 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/calculate/rule/index.vue
@@ -32,7 +32,7 @@
      :tree-props="{children: 'children', hasChildren: 'hasChildren'}"
    >
      <el-table-column label="规则名称" prop="name" />
      <el-table-column label="单位id" align="center" prop="unitId" >
      <el-table-column label="单位" align="center" prop="unitId" >
        <template slot-scope="scope">
          <div v-if="scope.row.unitId == 2">成都x运维</div>
        </template>
src/views/system/rule/city/index.vue
@@ -1,138 +1,81 @@
<template>
  <div class="app-container">
    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
      <el-form-item label="规则名称" prop="ruleName">
        <el-input
          v-model="queryParams.ruleName"
          placeholder="请输入规则名称"
          clearable
          @clear="handleQuery"
          @keyup.enter.native="handleQuery"
        />
      </el-form-item>
      <el-form-item label="考核模板" prop="templateId">
        <el-select v-model="queryParams.templateId" placeholder="考核模板" clearable>
          <el-option
            v-for="item in templateList"
            :key="item.id"
            :label="item.templateName"
            :value="item.id">
          </el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="规则类型" prop="ruleCategory">
        <el-select v-model="queryParams.ruleCategory" placeholder="规则类型" clearable>
          <el-option
            v-for="dict in dict.type.platform_rule_category"
            :key="dict.value"
            :label="dict.label"
            :value="dict.value"
          />
        </el-select>
      </el-form-item>
      <el-form-item>
        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
      </el-form-item>
    </el-form>
    <el-row :gutter="10" class="mb8">
      <el-col :span="1.5">
        <el-button
          type="success"
          plain
          icon="el-icon-edit"
          size="mini"
          :disabled="single"
          @click="handleUpdate"
        >修改</el-button>
      </el-col>
      <el-col :span="1.5">
        <el-button
          type="danger"
          plain
          icon="el-icon-delete"
          size="mini"
          :disabled="multiple"
          @click="handleDelete"
        >删除</el-button>
      </el-col>
<!--      <el-col :span="1.5">-->
<!--        <el-button-->
<!--          type="warning"-->
<!--          plain-->
<!--          icon="el-icon-download"-->
<!--          size="mini"-->
<!--          @click="handleExport"-->
<!--          v-hasPermi="['system:checkRule:export']"-->
<!--        >导出</el-button>-->
<!--      </el-col>-->
      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
    </el-row>
    <el-table v-loading="loading" :data="checkRuleList" @selection-change="handleSelectionChange">
      <el-table-column type="selection" width="55" align="center" />
      <el-table-column label="规则名称" align="center" prop="ruleName" />
      <el-table-column label="考核类型" align="center" prop="examineCategory">
        <template slot-scope="scope">
          <dict-tag :options="dict.type.platform_examine_category" :value="scope.row.examineCategory"/>
        </template>
      </el-table-column>
      <el-table-column label="规则类型" align="center" prop="ruleCategory">
        <template slot-scope="scope">
          <dict-tag :options="dict.type.platform_rule_category" :value="scope.row.ruleCategory"/>
        </template>
      </el-table-column>
      <el-table-column label="考核模板" align="center" prop="templateName" />
      <el-table-column label="审核状态" align="center" prop="auditState">
        <template slot-scope="scope">
          <dict-tag :options="dict.type.platform_audit_state" :value="scope.row.auditState"/>
        </template>
      </el-table-column>
      <el-table-column label="审核说明" align="center" prop="auditDescription"/>
      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
          <template slot-scope="scope">
            <el-button
              size="mini"
              type="text"
              icon="el-icon-s-check"
              @click="handleAudit(scope.row)"
              v-hasPermi="['check:rule:audit']"
            >审核</el-button>
            <el-button
              size="mini"
              type="text"
              icon="el-icon-edit"
              @click="handleUpdate(scope.row)"
            >修改</el-button>
            <el-button
              size="mini"
              type="text"
              icon="el-icon-delete"
              @click="handleDelete(scope.row)"
            >删除</el-button>
          </template>
        </el-table-column>
       </el-table>
          <pagination
            v-show="total>0"
            :total="total"
            :page.sync="queryParams.pageNum"
            :limit.sync="queryParams.pageSize"
            @pagination="getList"
          />
  <div>
    <div class="container">
      <el-row type="flex" justify="start">
        <el-col :span="24">
          <h3 style="color: rgb(104,104,103);padding-top: 20px;padding-bottom: 20px;">视频考核规则</h3>
        </el-col>
      </el-row>
      <el-row type="flex" justify="start" v-for="(items, index) in groupData(videoData)">
        <el-col :span="4" v-for="item in items" :key="item.id">
            <el-card :style="{ borderBottomColor: getStatusColor(item.auditStatus) }"style="width:150px;height: 150px;text-align: center;border-bottom-width: 3px;">
              <i style="font-size: 40px;padding: 15px;" :class="item.icon"></i>
              <div style="font-size:12px; text-align: center; height: 25px;">{{ item.name }} </div>
              <div class="bottom clearfix">
                <el-button type="text" class="button" @click="handleAudit(item)">审核</el-button>
                <el-button type="text" class="button" @click="handleUpdate(item)">修改</el-button>
              </div>
            </el-card>
          <br/>
        </el-col>
      </el-row>
    </div>
    <div class="container">
      <el-row type="flex" justify="center">
        <el-col :span="24">
          <h3 style="color: rgb(104,104,103);padding-top: 20px;padding-bottom: 20px;">车辆考核规则</h3>
        </el-col>
      </el-row>
      <el-row type="flex" justify="start" v-for="(items, index) in groupData(carData)">
        <el-col :span="4" v-for="item in items" :key="item.id">
          <el-card :style="{ borderBottomColor: getStatusColor(item.auditStatus) }"style="width:150px;height: 150px;text-align: center;border-bottom-width: 3px;">
            <i style="font-size: 40px;padding: 15px;" :class="item.icon"></i>
            <div style="font-size:12px; text-align: center; height: 25px;">{{ item.name }} </div>
            <div class="bottom clearfix">
              <el-button type="text" class="button" @click="handleAudit(item)">审核</el-button>
              <el-button type="text" class="button" @click="handleUpdate(item)">修改</el-button>
            </div>
          </el-card>
          <br/>
        </el-col>
      </el-row>
    </div>
    <div class="container">
      <el-row type="flex" justify="center">
        <el-col :span="24">
          <h3 style="color: rgb(104,104,103);padding-top: 20px;padding-bottom: 20px;">人脸考核规则</h3>
        </el-col>
      </el-row>
      <el-row type="flex" justify="start" v-for="(items, index) in groupData(faceData)">
        <el-col :span="4" v-for="item in items" :key="item.id">
          <el-card :style="{ borderBottomColor: getStatusColor(item.auditStatus) }"style="width:150px;height: 150px;text-align: center;border-bottom-width: 3px;">
            <i style="font-size: 40px;padding: 15px;" :class="item.icon"></i>
            <div style="font-size:12px; text-align: center; height: 25px;">{{ item.name }} </div>
            <div class="bottom clearfix">
              <el-button type="text" class="button" @click="handleAudit(item)">审核</el-button>
              <el-button type="text" class="button" @click="handleUpdate(item)">修改</el-button>
            </div>
          </el-card>
          <br/>
        </el-col>
      </el-row>
    </div>
    <br/><br/><br/><br/>
    <!-- 添加或修改考核规则对话框 -->
    <el-dialog :title="title" :visible.sync="open" width="600px" append-to-body>
      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
        <el-form-item label="规则名称" prop="ruleName">
          <el-input v-model="form.ruleName" placeholder="请输入规则名称"/>
          <el-input v-model="form.name" placeholder="请输入规则名称"/>
        </el-form-item>
        <el-form-item label="考核类型" prop="examineCategory">
          <el-select v-model="form.examineCategory" placeholder="考核类型" disabled>
          <el-select v-model="form.examineCategory" placeholder="考核类型">
            <el-option
              v-for="dict in dict.type.platform_examine_category"
              :key="dict.value"
@@ -142,7 +85,7 @@
          </el-select>
        </el-form-item>
        <el-form-item label="规则类型" prop="ruleCategory">
          <el-select v-model="form.ruleCategory" placeholder="考核类型" disabled>
          <el-select v-model="form.ruleCategory" placeholder="规则类型">
            <el-option
              v-for="dict in dict.type.platform_rule_category"
              :key="dict.value"
@@ -152,20 +95,7 @@
          </el-select>
        </el-form-item>
        <el-form-item label="规则描述" prop="ruleDescription">
          <el-input v-model="form.ruleDescription" type="textarea" placeholder="请输入规则名称"/>
        </el-form-item>
        <el-form-item label="考核模板" prop="templateId">
          <el-select v-model="form.templateId" placeholder="请选择">
            <el-option
              v-for="item in templateList"
              :key="item.id"
              :label="item.templateName"
              :value="item.id">
            </el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="权重" prop="weight">
          <el-input type="number" v-model="form.weight" placeholder="请输入权重"/>
          <el-input v-model="form.ruleDescription" type="textarea" :autosize="{ minRows: 4, maxRows: 6}" placeholder="请输入规则名称"/>
        </el-form-item>
      </el-form>
      <div slot="footer" class="dialog-footer">
@@ -173,7 +103,7 @@
        <el-button @click="cancel">取 消</el-button>
      </div>
    </el-dialog>
  </div>
  <!-- 审核考核规则对话框 -->
  <el-dialog :title="title" :visible.sync="auditOpen" width="600px" append-to-body>
@@ -204,19 +134,7 @@
      <el-form-item label="规则描述" prop="ruleDescription">
        <el-input v-model="form.ruleDescription" type="textarea" placeholder="请输入规则名称" disabled/>
      </el-form-item>
      <el-form-item label="考核模板" prop="templateId">
        <el-select v-model="form.templateId" placeholder="请选择" disabled>
          <el-option
            v-for="item in templateList"
            :key="item.id"
            :label="item.templateName"
            :value="item.id">
          </el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="权重" prop="weight">
        <el-input type="number" v-model="form.weight" placeholder="请输入权重" disabled/>
      </el-form-item>
      <el-form-item label="审核结果" prop="auditState" >
        <el-radio-group v-model="form.auditState">
@@ -277,6 +195,48 @@
        templateId: null,
        examineCategory: 1,
      },
      videoData: [
        { name: '平台在线率', icon: 'el-icon-connection', ruleDescription: '省厅对市级共享和联网平台进行实时监测,市级共享/联网平台每月离线总时长在30分钟以内的平台在线率为100%,每超过30分钟扣10个百分点,扣完为止。' +
            '每个月底最后4个工作日为预留的调试时间,可进行平台对接调试或者升级改造,平台对接调试或者升级改造须提前向省厅报备。除' +
            '每月底4个工作日,其余时间报备每次扣10个百分点,每次报备不超过24小时,每月不超过3次。(重大特殊情况,如重大自然灾害等报厅领导批示)', examineCategory:0,ruleCategory:'0', auditStatus: 'approved'},
        { name: '一机一档合格率', icon: 'el-icon-folder', ruleDescription: '运维平台每月初对各地上传至联网平台的“一机一档”数据库中的摄像机档案数据进行质量校验,对必填项填报准确、规范的档案数据视为合格。\n' +
            '一机一档合格率=合格的档案数据条数/档案数据总条数', examineCategory:0,ruleCategory:'0', auditStatus: 'pending' },
        { name: '一机一档注册率', icon: 'el-icon-folder', ruleDescription: '运维平台每月对省厅视图库的前端摄像机点位数量和一机一档的数据匹配。(上月底最后一天确认一机一档车辆、人脸点位数,1号由视图库侧进行考核)\n' +
            '人脸卡口资产注册率=资产库登记在用的人脸卡口数量/(未注册的在线人脸卡口数量+资产库登记在用的人脸卡口数量)\n' +
            '车辆卡口资产注册率=资产库登记在用的人脸卡口数量/(未注册的在线人脸卡口数量+资产库登记在用的人脸卡口数量)', examineCategory:0,ruleCategory:'0', auditStatus: 'rejected' },
        { name: '档案考核比', icon: 'el-icon-folder', ruleDescription: '描述信息', examineCategory:0,ruleCategory:'0',auditStatus: 'approved' },
        { name: '点位在线率', icon: 'el-icon-search', ruleDescription: '描述信息',  examineCategory:0,ruleCategory:'0',auditStatus: 'approved'},
        { name: '录像可用率', icon: 'el-icon-turn-off', ruleDescription: '描述信息',examineCategory:0,ruleCategory:'0',auditStatus: 'approved'},
        { name: '标注正确率', icon: 'el-icon-place', ruleDescription: '描述信息', examineCategory:0,ruleCategory:'0',auditStatus: 'approved' },
        { name: '校时正确率', icon: 'el-icon-place', ruleDescription: '描述信息', examineCategory:0,ruleCategory:'0',auditStatus: 'approved' },
        { name: '重点点位在线率', icon: 'el-icon-place', ruleDescription: '描述信息',  examineCategory:0,ruleCategory:'0',auditStatus: 'approved'},
        { name: '重点点位校时正确率', icon: 'el-icon-place', ruleDescription: '描述信息', examineCategory:0,ruleCategory:'0',auditStatus: 'approved' },
        { name: '重点指挥图像在线率', icon: 'el-icon-place', ruleDescription: '描述信息', examineCategory:0,ruleCategory:'0',auditStatus: 'approved' },
        { name: '视频图像资源安全管理', icon: 'el-icon-place', ruleDescription: '描述信息', examineCategory:0,ruleCategory:'0',auditStatus: 'approved' },
      ],
      carData: [
        { name: '视图库对接稳定性', icon: 'el-icon-truck', ruleDescription: '描述信息', auditStatus: 'approved' },
        { name: '点位在线率', icon: 'el-icon-truck', ruleDescription: '描述信息', auditStatus: 'approved' },
        { name: '联网卡口设备目录一致率', icon: 'el-icon-truck', ruleDescription: '描述信息', auditStatus: 'approved' },
        { name: '车辆卡口信息采集准确率', icon: 'el-icon-truck', ruleDescription: '描述信息', auditStatus: 'approved' },
        { name: '车辆卡口设备抓拍数据完整性', icon: 'el-icon-truck', ruleDescription: '描述信息', auditStatus: 'approved' },
        { name: '车辆卡口设备抓拍数据准确性', icon: 'el-icon-truck', ruleDescription: '描述信息', auditStatus: 'approved' },
        { name: '车辆卡口设备时钟准确性', icon: 'el-icon-truck', ruleDescription: '描述信息', auditStatus: 'approved' },
        { name: '车辆卡口设备抓拍数据上传及时性', icon: 'el-icon-truck', ruleDescription: '描述信息', auditStatus: 'approved' },
        { name: '车辆卡口设备url可用性', icon: 'el-icon-truck', ruleDescription: '描述信息', auditStatus: 'approved' },
        { name: '车辆卡口设备抓拍数据大图可用性', icon: 'el-icon-truck', ruleDescription: '描述信息', auditStatus: 'approved' },
      ],
      faceData: [
        { name: '视图库对接稳定性', icon: 'el-icon-alarm-clock', ruleDescription: '描述信息', auditStatus: 'approved' },
        { name: '点位在线率', icon: 'el-icon-user', ruleDescription: '描述信息', auditStatus: 'approved' },
        { name: '目录一致率', icon: 'el-icon-data-line', ruleDescription: '描述信息', auditStatus: 'approved' },
        { name: '人脸卡口信息采集准确率', icon: 'el-icon-timer', ruleDescription: '描述信息', auditStatus: 'approved' },
        { name: '设备抓拍图片合格性', icon: 'el-icon-money', ruleDescription: '描述信息', auditStatus: 'approved' },
        { name: '设备抓拍图片时钟准确性', icon: 'el-icon-data-analysis', ruleDescription: '描述信息', auditStatus: 'approved' },
        { name: '抓拍人脸数据上传及时性', icon: 'el-icon-data-analysis', ruleDescription: '描述信息', auditStatus: 'approved' },
        { name: '人脸卡口设备抓拍数据大图可用性', icon: 'el-icon-data-analysis', ruleDescription: '描述信息', auditStatus: 'approved' },
      ],
      activeIndex: '0',
      // 表单参数
      form: {},
      // 表单校验
@@ -288,10 +248,17 @@
    };
  },
  created() {
    this.getList();
    this.getTemplateSelect();
  },
  methods: {
    groupData(data) {
      // 将数据按每六个一组进行分组
      const groupedData = [];
      for (let i = 0; i < data.length; i += 6) {
        groupedData.push(data.slice(i, i + 6));
      }
      return groupedData;
    },
    /** 考核模板下拉列表 */
    getTemplateSelect() {
      templateSelect().then((res) => {
@@ -332,16 +299,22 @@
      };
      this.resetForm("form");
    },
    /** 搜索按钮操作 */
    handleQuery() {
      this.queryParams.pageNum = 1;
      this.getList();
    handleSelect(key, keyPath) {
      console.log(key, keyPath);
    },
    /** 重置按钮操作 */
    resetQuery() {
      this.resetForm("queryForm");
      this.handleQuery();
    getStatusColor(status) {
      switch (status) {
        case 'pending':
          return '#ffffff'; // '#00a1d6'蓝色,表示待审核
        case 'approved':
          return '#ffffff'; // '#00e297'绿色,表示已审核
        case 'rejected':
          return '#f56c6c'; // 红色,表示审核未通过
        default:
          return '#ffffff'; // 白色,默认状态
      }
    },
    // 多选框选中数据
    handleSelectionChange(selection) {
      this.ids = selection.map(item => item.id)
@@ -355,15 +328,12 @@
      this.title = "添加考核规则";
    },
    /** 修改按钮操作 */
    handleUpdate(row) {
    handleUpdate(item) {
      this.reset();
      const id = row.id || this.ids
      getCheckRule(id).then(response => {
        this.form = response.data;
        this.open = true;
        this.title = "修改考核规则";
      });
      const id = item.id || this.ids
      this.form = item;
      this.open = true;
      this.title = "修改考核规则";
    },
    /** 审核按钮操作 */
    handleAudit(row) {
@@ -419,37 +389,11 @@
</script>
<style scoped>
.input-w {
  margin-left: 5px;
  width: 70px;
.container {
  width: 90%;
  margin: 10px auto;
}
.row-warp {
  display: flex;
  flex-direction: column;
  justify-content: center;
  text-align: center;
  border: solid 1px gray;
  /*padding: 3px;*/
}
.row {
  display: flex;
  flex-direction: row;
  justify-content: center;
  align-items: center;
  border-bottom: solid 1px gray;
  padding: 3px;
}
.row:last-of-type {
  border-bottom: none;
}
.row-left {
  flex: 2;
  border-right: solid 1px gray;
}
.row-right {
  flex: 4;
  display: flex;
  flex-direction: row;
  justify-content: center;
.el-menu{
  margin: 10px auto;
}
</style>