Riku
2024-09-28 c18772a3b843e3ca5af5e58d6570860ce1a4aa8f
src/views/fysp/evaluation/EvalutationRecord.vue
@@ -1,5 +1,13 @@
<template>
  <FYTable @search="onSearch" :pagination="false" ref="tableRef">
  <FYTable
    @search="onSearch"
    :pagination="false"
    ref="tableRef"
    @cell-click="cellClick"
    :cell-class-name="cellClassName"
    @table-paste="handlePaste"
    @sort-change="handleSortChange"
  >
    <template #options>
      <!-- 区县 -->
      <FYOptionLocation
@@ -34,33 +42,19 @@
      </el-form>
    </template>
    <template #table-column>
      <el-table-column type="index" fixed="left" prop="sceneName" label="名称" width="300">
        <template #default="{ row }">
          <el-tooltip
            effect="dark"
            :content="row.sceneName"
            placement="top-start"
            :show-after="500"
          >
            {{ row.sceneName }}
          </el-tooltip>
        </template>
    <template #table-column="{ size }">
      <el-table-column fixed="left" sortable="custom" prop="sceneIndex" label="编号" width="80">
      </el-table-column>
      <el-table-column prop="sceneName" :show-overflow-tooltip="true" label="名称" width="300">
      </el-table-column>
      <el-table-column
        prop="subTaskTime"
        label="巡查日期"
        width="110"
        sortable
        sortable="custom"
        :formatter="timeFormat"
      />
      <el-table-column
        prop="evaluation.resultscorebef"
        label="得分"
        width="90"
        sortable
        :sort-method="sortScore"
      />
      <el-table-column prop="evaluation.resultscorebef" label="得分" width="90" sortable="custom" />
      <el-table-column prop="evaluation.resultscorebef" label="环信码" width="100">
        <template #default="{ row }">
          <span :style="`color: ${toCode(row).color};`">{{ toCode(row).name }}</span>
@@ -78,12 +72,45 @@
      <el-table-column prop="evaluation.scenseaddress" label="地址" />
      <!-- <el-table-column prop="biArea" label="集中区" width="110" />
      <el-table-column prop="biManagementCompany" label="物业" min-width="110"/> -->
      <el-table-column
        v-if="scoreShow"
        fixed="right"
        align="right"
        label="监测数据超标"
        width="160"
      >
        <template #default="{ row }">
          <el-input :size="size" v-model="row.score1" />
        </template>
      </el-table-column>
      <el-table-column
        v-if="scoreShow"
        fixed="right"
        align="right"
        label="监测数据超区月均值"
        width="160"
      >
        <template #default="{ row }">
          <el-input :size="size" v-model="row.score2" />
        </template>
      </el-table-column>
      <el-table-column fixed="right" align="right" label="操作" width="160">
        <!-- <template #header>
          <el-button icon="Download" size="default" type="success" @click="exportExcel"
            >导出结果</el-button
        <template #header>
          <el-button
            v-show="!scoreShow"
            icon="ArrowLeft"
            size="small"
            type="success"
            @click="scoreShow = true"
            >监测数据得分</el-button
          >
        </template> -->
          <el-button v-show="scoreShow" size="small" type="primary" @click="updateMultipleScore"
            >上传</el-button
          >
          <el-button v-show="scoreShow" size="small" type="error" @click="scoreShow = false"
            >取消</el-button
          >
        </template>
        <template #default="{ row }">
          <el-button type="primary" size="small" @click="editRow(row)">查看</el-button>
        </template>
@@ -96,12 +123,21 @@
import dayjs from 'dayjs';
import evaluateApi from '@/api/fysp/evaluateApi';
import { envCreditCode } from '@/constants/index';
import CompQuickSet from './components/CompQuickSet.vue';
import CompReport from './components/CompReport.vue';
import { useTablePaste } from '@/composables/tablePaste';
import { useCloned } from '@vueuse/core';
import { useMessageBoxTip } from '@/composables/messageBox';
export default {
  name: 'ResultManage',
  components: { CompQuickSet, CompReport },
  setup() {
    const { cellClick, cellClassName, handlePaste, setTableData, addRefreshEvent, tableData } =
      useTablePaste({
        score1: 8,
        score2: 9
      });
    return { cellClick, cellClassName, handlePaste, setTableData, addRefreshEvent, tableData };
  },
  components: { CompReport },
  data() {
    return {
      formSearch: {
@@ -109,11 +145,27 @@
        scenetype: {},
        time: dayjs().add(-1, 'M').date(1).toDate()
      },
      townFilters: []
      townFilters: [],
      // 原始数据,用于排序取消后
      orginData: [],
      evaluationRule: undefined,
      evaluationSubRule: undefined,
      //监测数据规则名称
      ruleName: {
        score1: {
          id: undefined,
          name: '监测数据出现单日及以上有效超标'
        },
        score2: {
          id: undefined,
          name: '监测数据月均值超区域月均值20%以上或数据明显异常'
        }
      },
      scoreShow: false
    };
  },
  methods: {
    _getParam() {
  computed: {
    area() {
      const { locations, scenetype, time } = this.formSearch;
      return {
        provincecode: locations.pCode,
@@ -125,7 +177,22 @@
        starttime: dayjs(time).format('YYYY-MM-DD HH:mm:ss'),
        scensetypeid: scenetype.value
      };
    },
    }
  },
  methods: {
    // _getParam() {
    //   const { locations, scenetype, time } = this.formSearch;
    //   return {
    //     provincecode: locations.pCode,
    //     provincename: locations.pName,
    //     citycode: locations.cCode,
    //     cityname: locations.cName,
    //     districtcode: locations.dCode,
    //     districtname: locations.dName,
    //     starttime: dayjs(time).format('YYYY-MM-DD HH:mm:ss'),
    //     scensetypeid: scenetype.value
    //   };
    // },
    editRow(row) {
      this.$router.push(`evalutationEdit/${row.subTaskId}`);
    },
@@ -136,20 +203,78 @@
      this.$refs.tableRef.onSearch();
    },
    onSearch(page, func) {
      const area = this._getParam();
      evaluateApi.fetchAutoEvaluation(area).then((res) => {
        if (typeof func === 'function') {
          func({ data: res.data });
      this.$refs.tableRef.clearSort();
      this.fetchEvaluationRule(this.area).then(() => {
        evaluateApi.fetchAutoEvaluation(this.area).then((res) => {
          if (res.data) {
            this.tableData = res.data;
            this.orginData = useCloned(this.tableData).cloned;
            console.log(this.orginData);
            this.getFilters(res.data);
            if (typeof func === 'function') {
              func({ data: this.tableData });
            }
          }
        });
      });
    },
    fetchEvaluationRule() {
      const param = {
        // 自动评估类型
        taskTypeId: 99,
        ...this.area
      };
      // 获取评估总规则
      return evaluateApi.fetchEvaluationRule(param).then((res) => {
        if (res.data.length > 0) {
          this.evaluationRule = res.data[0];
          // 获取具体子规则
          return evaluateApi.getSubRules(this.evaluationRule.guid).then((res) => {
            this.evaluationSubRule = res.data;
            // 查找可导入得分的规则id
            for (const key in this.ruleName) {
              const value = this.ruleName[key];
              const subrule = this.evaluationSubRule.find((v) => {
                return v.itemname == value.name;
              });
              value.id = subrule.guid;
            }
          });
        }
        if (res.data) {
          this.getFilters(res.data);
      });
    },
    // 批量更新监测数据得分
    updateMultipleScore() {
      useMessageBoxTip({
        confirmMsg: '是否上传监测数据得分',
        confirmTitle: '上传监测数据得分',
        onConfirm: () => {
          if (this.evaluationRule) {
            const param = this.tableData.map((v) => {
              const subRule = [];
              for (const key in this.ruleName) {
                const value = this.ruleName[key];
                subRule.push({
                  first: value.id,
                  second: v[key].trim() != ''
                });
              }
              return {
                ...this.area,
                subTaskId: v.subTaskId,
                ruleId: this.evaluationRule.guid,
                subRule
              };
            });
            evaluateApi.updateMultipleScore(param);
          }
        }
      });
    },
    // 规范性评估与分析报告后台生成任务
    download() {
      const area = this._getParam();
      evaluateApi.downloadAutoEvaluation(area).then((res) => {
      evaluateApi.downloadAutoEvaluation(this.area).then((res) => {
        if (res == false) {
          // 未下载文档,而是开启了文档生成后台任务
          this.$parent;
@@ -192,7 +317,54 @@
      const s1 = a.evaluation ? parseInt(a.evaluation.resultscorebef) : 0;
      const s2 = b.evaluation ? parseInt(b.evaluation.resultscorebef) : 0;
      return s1 - s2;
    },
    handleSortChange({ column, prop, order }) {
      console.log(column, prop, order);
      if (order == null) {
        this.orginData.forEach((e, i) => {
          this.tableData[i] = e;
        });
      } else if (prop == 'evaluation.resultscorebef') {
        this.tableData.sort((a, b) => {
          const s1 = a.evaluation ? parseInt(a.evaluation.resultscorebef) : 0;
          const s2 = b.evaluation ? parseInt(b.evaluation.resultscorebef) : 0;
          if (order == 'ascending') {
            return s1 - s2;
          } else if (order == 'descending') {
            return s2 - s1;
          }
        });
      } else if (prop == 'sceneIndex') {
        this.tableData.sort((a, b) => {
          if (order == 'ascending') {
            if (a.sceneIndex === b.sceneIndex) {
              return a.subTaskTime > b.subTaskTime ? 1 : -1;
            } else {
              return a.sceneIndex - b.sceneIndex;
            }
          } else if (order == 'descending') {
            if (a.sceneIndex === b.sceneIndex) {
              return b.subTaskTime > a.subTaskTime ? 1 : -1;
            } else {
              return b.sceneIndex - a.sceneIndex;
            }
          }
        });
      } else if (prop == 'subTaskTime') {
        this.tableData.sort((a, b) => {
          if (order == 'ascending') {
            return a[prop] > b[prop] ? 1 : -1;
            // return dayjs(a).isAfter(dayjs(b)) ? 1 : -1;
          } else if (order == 'descending') {
            return b[prop] > a[prop] ? 1 : -1;
            // return dayjs(b).isAfter(dayjs(a)) ? 1 : -1;
          }
        });
      }
    }
  },
  mounted() {
    this.addRefreshEvent(this.$refs.tableRef.doLayout);
  }
};
</script>