fuliqi
2024-04-24 14c7c489dccd062244410afd27c7235db3d27d63
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;