fuliqi
2024-04-24 14c7c489dccd062244410afd27c7235db3d27d63
考核结果一级页面
5个文件已修改
541 ■■■■■ 已修改文件
src/api/platform/check-score.js 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/router/index.js 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/result/detail/index1.vue 133 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/result/index.vue 371 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/template/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/platform/check-score.js
@@ -35,6 +35,15 @@
  })
}
// 修改考核积分明细
export function publishScore(data) {
  return request({
    url: '/check/score/publish',
    method: 'put',
    data: data
  })
}
// 删除考核积分明细
export function delScore(id) {
  return request({
src/router/index.js
@@ -72,19 +72,19 @@
      }
    ]
  },
  {
    path: '/contract/score',
    component: Layout,
    hidden: true,
    children: [
      {
        path: 'index',
        name: 'score',
        component: () => import('@/views/system/score/default/index'),
        meta: { title: '合同积分', activeMenu: '/system/score' }
      }
    ]
  },
  // {
  //   path: '/contract/score',
  //   component: Layout,
  //   hidden: true,
  //   children: [
  //     {
  //       path: 'index',
  //       name: 'score',
  //       component: () => import('@/views/system/score/default/index'),
  //       meta: { title: '合同积分', activeMenu: '/system/score' }
  //     }
  //   ]
  // },
  {
    path: '/check-result/contract',
    component: Layout,
src/views/system/result/detail/index1.vue
@@ -1,5 +1,5 @@
<template>
  <div style="padding: 5px">
  <div style="padding: 0px 10px">
    <div>
      <el-menu :default-active="activeIndex" class="el-menu-demo" mode="horizontal" @select="handleSelect" style="margin-bottom: 10px">
        <el-menu-item index="1">省厅考核</el-menu-item>
@@ -26,24 +26,35 @@
        style="width: 100%">
        <el-table-column
          label="考核时间"
          prop="time"
          prop="createTime"
          align="center">
        </el-table-column>
        <el-table-column
          label="考核对象"
          prop="deptId"
          align="center">
          <template slot-scope="scope">
            {{ translateDeptId(scope.row.deptId) }}
          </template>
        </el-table-column>
        <el-table-column
          label="标签"
          prop="tag"
          prop="examineTag"
          align="center">
          <template slot-scope="scope">
            {{ scope.row.examineTag == 0 ? '省厅考核' : '市局考核' }}
          </template>
        </el-table-column>
        <el-table-column
          label="考核类型"
          prop="category"
          prop="examineCategory"
          align="center">
          <template slot-scope="scope">
          <dict-tag :options="dict.type.platform_examine_category" :value="scope.row.examineCategory"/>
          </template>
        </el-table-column>
        <el-table-column
          label="考核频率"
          prop="frequency"
          align="center">
        </el-table-column>
        <el-table-column
          label="分数"
          prop="score"
@@ -51,11 +62,8 @@
        </el-table-column>
        <el-table-column
          label="状态"
          prop="state"
          prop="publish"
          align="center">
          <template slot-scope="scope">
            <dict-tag :options="dict.type.platform_examine_use" :value="scope.row.state"/>
          </template>
        </el-table-column>
        <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
          <template slot-scope="scope">
@@ -88,74 +96,80 @@
</template>
<script>
import { listScore, getScore, delScore, addScore, updateScore,publishScore} from "@/api/platform/check-score";
import { areaSelect } from '@/api/system/dept'
import * as echarts from 'echarts';
let lineChart = null;
let observer = null;
export default {
  name: 'index',
  dicts: ['platform_examine_use'],
  dicts: ['platform_examine_use','platform_examine_category'],
  data() {
    return {
      activeIndex: '1',
      activeIndex2: '1',
      activeIndex2: '2',
      areaList:[],
      dateRange: '',
      company: '',
      queryParams: {
        pageNum: 1,
        pageSize: 10,
        deptId: null,
      },
      dataList: [
        {
          name: '全部',
          complete: { '4.5': 95.5, '4.6': 95.3, '4.7': 96.0, '4.8': 97.2, '4.9': 96.5 ,
            '4.10': 95.5, '4.11': 95.3, '4.12': 96.0, '4.13': 97.2, '4.14': 96.5 },
          waiting: { '4.5': 94.8, '4.6': 91.3, '4.7': 95.3, '4.8': 92.3, '4.9': 93.3,
            '4.10': 94.8, '4.11': 91.3, '4.12': 95.3, '4.13': 92.3, '4.14': 93.3 },
          pending: { '4.5': 91.6, '4.6': 92.6, '4.7': 93.7, '4.8': 94.0, '4.9': 95.9
            ,'4.10': 91.6, '4.11': 92.6, '4.12': 93.7, '4.13': 94.0, '4.14': 95.9 }
            '4.10': 95.5, '4.11': 95.3, '4.12': 96.0, '4.13': 97.2, '4.14': 96.5 ,
            '4.15': 95.5, '4.16': 95.3, '4.17': 96.0, '4.18': 97.2, '4.19': 96.5 ,
            '4.20': 95.5, '4.21': 95.3, '4.22': 96.0, '4.23': 97.2, '4.24': 96.5,
            '4.25': 95.5, '4.26': 95.3, '4.27': 96.0, '4.28': 97.2, '4.29': 96.5 ,
          },
          // waiting: { '4.5': 94.8, '4.6': 91.3, '4.7': 95.3, '4.8': 92.3, '4.9': 93.3,
          //   '4.10': 94.8, '4.11': 91.3, '4.12': 95.3, '4.13': 92.3, '4.14': 93.3 },
          // pending: { '4.5': 91.6, '4.6': 92.6, '4.7': 93.7, '4.8': 94.0, '4.9': 95.9
          //   ,'4.10': 91.6, '4.11': 92.6, '4.12': 93.7, '4.13': 94.0, '4.14': 95.9 }
        }
      ],
      tableData: [
        {
          time: '2024-04-15',
          tag: '省厅考核',
          category: '车辆考核',
          frequency: '月度考核',
          score: '96.5',
          state: '0',
          publish: '0'
        },
        {
          time: '2024-04-15',
          tag: '省厅考核',
          category: '人脸考核',
          frequency: '月度考核',
          score: '93.3',
          state: '0',
          publish: '0'
        },
        {
          time: '2024-04-15',
          tag: '省厅考核',
          category: '视频考核',
          frequency: '月度考核',
          score: '95.9',
          state: '0',
          publish: '0'
        },
        {
          time: '2024-04-14',
          tag: '省厅考核',
          category: '车辆考核',
          frequency: '月度考核',
          score: '96.5',
          state: '1',
          publish: '1'
        },
      ],
      tableData: [],
      searchForm: {
        time: null,
      }
    }
  },
  created() {
    //考核成绩详情跳转参数接收
    console.log(this.$route.query.index)
    if(this.$route.query.index){
      this.queryParams.deptId = this.$route.query.index
    }
    this.getList(this.$route.query.index);
    this.areaSelect();
  },
  methods: {
    // 区域下拉数据
    areaSelect() {
      areaSelect().then(res => {
        this.areaList = res.data;
      })
    },
    translateDeptId(deptId) {
      const department = this.areaList.find(dept => dept.id == deptId);
      return department ? department.value : '未知';
    },
    /** 导航切换 */
    handleSelect(key){
      this.activeIndex = key; // 更新当前激活的菜单项
      this.getList();
    },
    /** 查询考核模板列表 */
    getList(deptId) {
      this.loading = true;
      listScore(this.queryParams).then(response => {
        this.tableData = response.data[deptId];
        this.loading = false;
      });
    },
    handleSizeChange(val) {
      console.log(`每页 ${val} 条`);
    },
@@ -241,7 +255,6 @@
      };
      lineChart.setOption(option, true);
    },
    // 监听变化
    observe() {
src/views/system/result/index.vue
@@ -1,5 +1,12 @@
<template>
  <div id="warp">
    <div>
      <el-menu :default-active="activeIndex" class="el-menu-demo" mode="horizontal" @select="handleSelect" style="margin-bottom: 10px">
        <el-menu-item index="1">省厅考核</el-menu-item>
        <el-menu-item index="2">市局考核</el-menu-item>
      </el-menu>
    </div>
    <div class="data-chart-container">
      <el-card class="data-card" :body-style="{ height: '100%' }">
        <div class="card-content">
@@ -10,239 +17,56 @@
            </el-date-picker>
          </div>
          </div>
          <div class="echart-container">
            <div id="barChart" ref="barChart"></div>
          </div>
        </div>
      </el-card>
    </div>
    <el-row :gutter="100">
      <el-col :span="6">
        <div class="city-warp">
          <div class="city">
            <div class="title">
              自流井
            </div>
            <div class="score-warp">
              <div class="score-item">
                <div style="font-size: 15px;margin-bottom: 15px">2024年4月12日</div>
    <div>
      <el-row :gutter="100">
        <el-col :span="6" v-for="(city, index) in checkScoreList" :key="index">
          <div class="city-warp">
            <div class="city">
              <div class="title">
                  {{ translateDeptId(index) }}
              </div>
              <div class="score-item">
                <div>视频:</div>
                <div class="score">99.5</div>
              <div class="score-warp">
                  <div class="score-item">
                  <div style="font-size: 15px; margin-bottom: 15px">{{ formatCreateDate(city[0].createTime) }}</div>
                  </div>
                <div v-for="(score, scoreIndex) in city" :key="scoreIndex">
                  <div class="score-item">
                    <div v-if="score.examineCategory == 0">车辆:</div>
                    <div v-else-if="score.examineCategory == 1">人脸:</div>
                    <div v-else-if="score.examineCategory == 2">视频:</div>
                    <div class="score">{{ score.score }}</div>
                  </div>
                </div>
              </div>
              <div class="score-item">
                <div>人脸:</div>
                <div class="score">87</div>
              <div class="bottom-publish">
                <el-button
                  size="medium"
                  :type="isAnyUnpublished(city) ? 'success' : 'danger'"
                  @click="publish(city)"
                >
                  {{ isAnyUnpublished(city) ? '发布' : '取消' }}
                </el-button>
                <el-button size="medium" @click="jumpDetail(index)" type="info">详情</el-button>
              </div>
              <div class="score-item">
                <div>车辆:</div>
                <div class="score">94</div>
              </div>
            </div>
            <div class="bottom-publish">
              <el-button size="medium" type="success">发布</el-button>
              <el-button size="medium" @click="jumpDetail" type="info">详情</el-button>
            </div>
          </div>
        </div>
      </el-col>
      <el-col :span="6">
        <div class="city-warp">
          <div class="city">
            <div class="title">
              富顺
            </div>
            <div class="score-warp">
              <div class="score-item">
                <div style="font-size: 15px;margin-bottom: 15px">2024年4月12日</div>
              </div>
              <div class="score-item">
                <div>视频:</div>
                <div class="score">99.5</div>
              </div>
              <div class="score-item">
                <div>人脸:</div>
                <div class="score">87</div>
              </div>
              <div class="score-item">
                <div>车辆:</div>
                <div class="score">94</div>
              </div>
            </div>
            <div class="bottom-publish">
              <el-button size="medium" v-hasPermi="['calculate:rule:add']" type="success">发布</el-button>
              <el-button size="medium" v-hasPermi="['calculate:rule:query']" @click="jumpDetail" type="info">详情</el-button>
            </div>
          </div>
        </div>
      </el-col>
      <el-col :span="6">
        <div class="city-warp">
          <div class="city">
            <div class="title">
              荣县
            </div>
            <div class="score-warp">
              <div class="score-item">
                <div style="font-size: 15px;margin-bottom: 15px">2024年4月12日</div>
              </div>
              <div class="score-item">
                <div>视频:</div>
                <div class="score">99.5</div>
              </div>
              <div class="score-item">
                <div>人脸:</div>
                <div class="score">87</div>
              </div>
              <div class="score-item">
                <div>车辆:</div>
                <div class="score">94</div>
              </div>
            </div>
            <div class="bottom-publish">
              <el-button size="medium" type="success">发布</el-button>
              <el-button size="medium" @click="jumpDetail" type="info">详情</el-button>
            </div>
          </div>
        </div>
      </el-col>
      <el-col :span="6">
        <div class="city-warp">
          <div class="city">
            <div class="title">
              沿滩区
            </div>
            <div class="score-warp">
              <div class="score-item">
                <div style="font-size: 15px;margin-bottom: 15px">2024年4月12日</div>
              </div>
              <div class="score-item">
                <div>视频:</div>
                <div class="score">99.5</div>
              </div>
              <div class="score-item">
                <div>人脸:</div>
                <div class="score">87</div>
              </div>
              <div class="score-item">
                <div>车辆:</div>
                <div class="score">94</div>
              </div>
            </div>
            <div class="bottom-publish">
              <el-button size="medium" type="success">发布</el-button>
              <el-button size="medium" @click="jumpDetail" type="info">详情</el-button>
            </div>
          </div>
        </div>
      </el-col>
    </el-row>
    <el-row style="margin-top: 30px" :gutter="100">
      <el-col :span="6">
        <div class="city-warp">
          <div class="city">
            <div class="title">
              高新区
            </div>
            <div class="score-warp">
              <div class="score-item">
                <div style="font-size: 15px;margin-bottom: 15px">2024年4月12日</div>
              </div>
              <div class="score-item">
                <div>视频:</div>
                <div class="score">99.5</div>
              </div>
              <div class="score-item">
                <div>人脸:</div>
                <div class="score">87</div>
              </div>
              <div class="score-item">
                <div>车辆:</div>
                <div class="score">94</div>
              </div>
            </div>
            <div class="bottom-publish">
              <el-button size="medium" type="success">发布</el-button>
              <el-button size="medium" @click="jumpDetail" type="info">详情</el-button>
            </div>
          </div>
        </div>
      </el-col>
      <el-col :span="6">
        <div class="city-warp">
          <div class="city">
            <div class="title">
              大安区
            </div>
            <div class="score-warp">
              <div class="score-item">
                <div style="font-size: 15px;margin-bottom: 15px">2024年4月12日</div>
              </div>
              <div class="score-item">
                <div>视频:</div>
                <div class="score">99.5</div>
              </div>
              <div class="score-item">
                <div>人脸:</div>
                <div class="score">87</div>
              </div>
              <div class="score-item">
                <div>车辆:</div>
                <div class="score">94</div>
              </div>
            </div>
            <div class="bottom-publish">
              <el-button size="medium" type="success">发布</el-button>
              <el-button size="medium" @click="jumpDetail" type="info">详情</el-button>
            </div>
          </div>
        </div>
      </el-col>
      <el-col :span="6">
        <div class="city-warp">
          <div class="city">
            <div class="title">
              贡井区
            </div>
            <div class="score-warp">
              <div class="score-item">
                <div style="font-size: 15px;margin-bottom: 15px">2024年4月12日</div>
              </div>
              <div class="score-item">
                <div>视频:</div>
                <div class="score">99.5</div>
              </div>
              <div class="score-item">
                <div>人脸:</div>
                <div class="score">87</div>
              </div>
              <div class="score-item">
                <div>车辆:</div>
                <div class="score">94</div>
              </div>
            </div>
            <div class="bottom-publish">
              <el-button size="medium" type="success">发布</el-button>
              <el-button size="medium" @click="jumpDetail" type="info">详情</el-button>
            </div>
          </div>
        </div>
      </el-col>
    </el-row>
        </el-col>
      </el-row>
    </div>
  </div>
</template>
<script>
import { areaSelect } from '@/api/system/dept';
import { listScore, getScore, delScore, addScore, updateScore,publishScore} from "@/api/platform/check-score";
import * as echarts from 'echarts';
let observer = null;
let chart = null;
@@ -250,8 +74,14 @@
  name: 'index',
  data() {
    return {
      province:{
        id: [],
        publish: null,
      },
      checkScoreList:[],
      areaList:[],
      activeIndex: '1',
      activeIndex2: '1',
      activeIndex2: '2',
      date: '',
      company: '',
      dataList: {
@@ -260,11 +90,29 @@
        data2: [93.7, 93.5, 94.3, 96.5, 95.3, 94.2, 93.3],
        data3: [98.3, 94.3, 93.3, 95.5, 96.8, 96.1, 95.8],
      },
      // 查询参数
      queryParams: {
        examineTag: null,
        createTime: null
      },
    }
  },
  created() {
    this.getList();
    this.areaSelect();
  },
  mounted() {
    chart = echarts.init(this.$refs.barChart);
    this.initEchart();
  },
  methods: {
    jumpDetail() {
      this.$router.push("/examine/detail")
    jumpDetail(index) {
      this.$router.push({
        path: '/examine/detail',
        query: {
          index: index
        }
      })
    },
    initEchart() {
      const option = {
@@ -319,13 +167,82 @@
        ]
      }
      chart.setOption(option, true);
    },
    // 区域下拉数据
    areaSelect() {
      areaSelect().then(res => {
        this.areaList = res.data;
      })
    },
    translateDeptId(deptId) {
      const department = this.areaList.find(dept => dept.id === deptId);
      return department ? department.value : '未知';
    },
    }
    isAnyUnpublished(city) {
      // 检查 city 的 score 数组中是否有任何一个的 publish 属性为 'UNPUBLISHED'
      return city.some(score => score.publish === 'UNPUBLISHED');
    },
    formatCreateDate(dateString) {
      const date = new Date(dateString);
      const year = date.getFullYear();
      const month = date.getMonth() + 1; // getMonth() 返回的月份是从 0 开始的,所以要加 1
      const day = date.getDate();
      // 使用 padStart 方法确保月份和日期始终是两位数
      const formattedMonth = month.toString().padStart(2, '0');
      const formattedDay = day.toString().padStart(2, '0');
      return `${year}年${formattedMonth}月${formattedDay}号`;
    },
    /** 导航切换 */
    handleSelect(key){
      this.activeIndex = key; // 更新当前激活的菜单项
      this.getList();
    },
    /** 查询考核成绩列表 */
    getList() {
      this.loading = true;
      if (this.activeIndex === '1') {
        this.queryParams.examineTag = '0'; // 省厅考核
      } else if (this.activeIndex === '2') {
        this.queryParams.examineTag = '1'; // 区域考核
      }
      // 获取当前日期
      const today = new Date();
      // 计算昨天的日期
      const yesterday = new Date(today);
      yesterday.setDate(today.getDate() - 1);
      // 将昨天的日期格式化为字符串,这里假设后端期望的是ISO 8601格式
      this.queryParams.createTime = yesterday.toISOString().split('T')[0];
      console.log(this.queryParams);
      listScore(this.queryParams).then(response => {
        this.checkScoreList = response.data;
        console.log(this.checkScoreList);
        this.loading = false;
      });
    },
    publish(city){
      let text = this.isAnyUnpublished(city) ? "发布":"取消发布";
      const cityName = this.translateDeptId(parseInt(city[0].deptId));
      this.province.publish = text === "发布" ? "PUBLISHED" : "UNPUBLISHED";
      this.province.id = city.map(city => city.id);
      this.$modal.confirm('是否确认' + text + '考核名为"' + cityName + '"的数据项?')
        .then(() => {
          return publishScore(this.province);
        })
        .then(() => {
          this.getList();
          this.$modal.msgSuccess(text + "成功");
        })
        .catch(() => {
          // 错误处理逻辑
        });
    },
  },
  mounted() {
    chart = echarts.init(this.$refs.barChart);
    this.initEchart();
  }
}
</script>
@@ -345,9 +262,10 @@
.score {
  width: 60px;
  text-align: right;
  padding: 3px 0;
}
#warp {
  padding: 20px;
  padding: 0 10px;
}
.city-warp {
  display: flex;
@@ -355,6 +273,7 @@
  align-items: center;
  justify-content: center;
  height: 210px;
  margin-bottom: 25px;
}
.city {
  width: 240px;
src/views/system/template/index.vue
@@ -222,7 +222,7 @@
<script>
import { listCheckTemplate, getCheckTemplate, delCheckTemplate, addCheckTemplate, updateCheckTemplate,copyCheckTemplate } from "@/api/platform/check-template";
 import { areaSelect } from '@/api/system/dept'
import { areaSelect } from '@/api/system/dept'
import { listCheckRule } from "../../../api/platform/check-rule";
export default {