| | |
| | | <template> |
| | | <FYTable |
| | | id="fyTable" |
| | | @search="onSearch" |
| | | :data="tableData" |
| | | :pagination="false" |
| | | ref="tableRef" |
| | | @cell-click="cellClick" |
| | | :cell-class-name="cellClassName" |
| | | @table-paste="handlePaste" |
| | | @sort-change="handleSortChange" |
| | | > |
| | | <template #options> |
| | | <!-- 区县 --> |
| | |
| | | <el-form :inline="true"> |
| | | <CompQuickSet @quick-set="setOptions"></CompQuickSet> |
| | | </el-form> |
| | | <el-descriptions v-if="this.tableData.length > 0" title="" :column="1" direction="vertical" border> |
| | | <el-descriptions |
| | | v-if="this.tableData.length > 0" |
| | | title="" |
| | | :column="1" |
| | | direction="vertical" |
| | | border |
| | | > |
| | | <el-descriptions-item label="联合执法清单"> |
| | | {{ listSummary }} |
| | | </el-descriptions-item> |
| | | </el-descriptions> |
| | | </template> |
| | | |
| | | <template #buttons> |
| | | <FYDownloadTableButton |
| | | label="下载清单" |
| | | table-id="fyTable" |
| | | :file-name="fileName" |
| | | :disabled="downloadDisabled" |
| | | ></FYDownloadTableButton> |
| | | </template> |
| | | <template #table-column="{ size }"> |
| | | <el-table-column fixed="left" label="序号" width="80"> |
| | | <el-table-column fixed="left" label="序号" width="53"> |
| | | <template #default="{ row }"> |
| | | {{ row.index + 1 }} |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column fixed="left" label="编号" width="53" prop="sceneIndex"> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="sceneName" |
| | |
| | | label="名称" |
| | | width="300" |
| | | > |
| | | </el-table-column> |
| | | <el-table-column prop="evaluation.scenseaddress" label="地址" /> |
| | | <el-table-column prop="_problems" label="问题" width="300"> |
| | | <template #default="{ row }"> |
| | | <el-icon class="is-loading" v-if="row._loading"> |
| | | <Loading color="#409eff" /> |
| | | </el-icon> |
| | | <div v-else> |
| | | <template v-if="row._problems.length > 0"> |
| | | <div v-for="(p, i) in row._problems" :key="p.guid"> |
| | | <el-text>{{ i + 1 }}、</el-text> |
| | | <el-text>{{ p.problemname }}</el-text> |
| | | </div> |
| | | </template> |
| | | <el-text v-else>/</el-text> |
| | | </div> |
| | | </template> |
| | | </el-table-column> |
| | | <!-- <el-table-column |
| | | prop="subTaskTime" |
| | |
| | | prop="evaluation.resultscorebef" |
| | | label="得分" |
| | | width="90" |
| | | sortable="custom" |
| | | /> --> |
| | | <el-table-column prop="" label="监测数据" width="81"> |
| | | <template #default="{ row }"> |
| | | <el-icon class="is-loading" v-if="row._loading"> |
| | | <Loading color="#409eff" /> |
| | | </el-icon> |
| | | <el-text v-else>/</el-text> |
| | | </template> |
| | | </el-table-column> |
| | | <!-- <el-table-column |
| | | prop="evaluation.resultscorebef" |
| | | label="环信码" |
| | |
| | | </el-table-column> --> |
| | | |
| | | <el-table-column prop="dname" label="区县" width="90" /> |
| | | <el-table-column |
| | | prop="tname" |
| | | label="街道" |
| | | width="110" |
| | | :filters="townFilters" |
| | | :filter-method="filterHandler" |
| | | /> |
| | | <el-table-column prop="evaluation.scenseaddress" label="地址" /> |
| | | <el-table-column prop="tname" label="街道" width="110" /> |
| | | <el-table-column prop="_contacts" label="联系人" width="70"> |
| | | <template #default="{ row }"> |
| | | <el-icon class="is-loading" v-if="row._loading2"> |
| | | <Loading color="#409eff" /> |
| | | </el-icon> |
| | | <el-text v-else>{{ row._contacts }}</el-text> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="_contactst" label="联系电话" width="112"> |
| | | <template #default="{ row }"> |
| | | <el-icon class="is-loading" v-if="row._loading2"> |
| | | <Loading color="#409eff" /> |
| | | </el-icon> |
| | | <el-text v-else>{{ row._contactst }}</el-text> |
| | | </template> |
| | | </el-table-column> |
| | | <!-- <el-table-column prop="biArea" label="集中区" width="110" /> |
| | | <el-table-column prop="biManagementCompany" label="物业" min-width="110"/> --> |
| | | <!-- <el-table-column fixed="right" align="right" label="操作" width="160"> |
| | |
| | | */ |
| | | import dayjs from 'dayjs'; |
| | | import evaluateApi from '@/api/fysp/evaluateApi'; |
| | | import problemApi from '@/api/fysp/problemApi'; |
| | | import sceneApi from '@/api/fysp/sceneApi'; |
| | | import { envCreditCode } from '@/constants/index'; |
| | | import { useTablePaste } from '@/composables/tablePaste'; |
| | | import { useCloned } from '@vueuse/core'; |
| | | import { useMessageBoxTip } from '@/composables/messageBox'; |
| | | |
| | | export default { |
| | | setup() { |
| | |
| | | townFilters: [], |
| | | // 原始数据,用于排序取消后 |
| | | orginData: [], |
| | | evaluationRule: undefined, |
| | | evaluationSubRule: undefined, |
| | | //监测数据规则名称 |
| | | ruleName: { |
| | | score1: { |
| | | id: undefined, |
| | | name: '监测数据出现单日及以上有效超标' |
| | | }, |
| | | score2: { |
| | | id: undefined, |
| | | name: '监测数据月均值超区域月均值20%以上或数据明显异常' |
| | | } |
| | | }, |
| | | updateLoading: false |
| | | dlLoading: false |
| | | }; |
| | | }, |
| | | computed: { |
| | |
| | | } else { |
| | | return ``; |
| | | } |
| | | }, |
| | | downloadDisabled() { |
| | | if (this.tableData.length == 0) { |
| | | return true; |
| | | } else { |
| | | let b = false; |
| | | this.tableData.forEach((e) => { |
| | | b = b || e._loading || e._loading2; |
| | | }); |
| | | return b; |
| | | } |
| | | }, |
| | | fileName() { |
| | | const { locations, scenetype, time } = this.formSearch; |
| | | return `${locations.dName}${dayjs(time).format( |
| | | 'YYYY年MM月' |
| | | )}联合执法清单`; |
| | | } |
| | | }, |
| | | 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}`); |
| | | }, |
| | |
| | | }, |
| | | onSearch(page, func) { |
| | | this.$refs.tableRef.clearSort(); |
| | | this.fetchEvaluationRule(this.area).then(() => { |
| | | evaluateApi.fetchAutoEvaluation(this.area).then((res) => { |
| | | if (res.data) { |
| | | this.tableData = res.data |
| | | .filter((d) => { |
| | | return d.evaluation != null; |
| | | // this.fetchEvaluationRule(this.area).then(() => { |
| | | evaluateApi.fetchAutoEvaluation(this.area).then((res) => { |
| | | if (res.data) { |
| | | res.data.sort((a, b) => { |
| | | const s1 = a.evaluation ? parseInt(a.evaluation.resultscorebef) : 0; |
| | | const s2 = b.evaluation ? parseInt(b.evaluation.resultscorebef) : 0; |
| | | return s1 - s2; |
| | | }); |
| | | this.tableData = res.data |
| | | .filter((d) => { |
| | | return ( |
| | | d.evaluation != null && |
| | | parseInt(d.evaluation.resultscorebef) < 90 |
| | | ); |
| | | }) |
| | | .slice(0, 10); |
| | | this.tableData.forEach((e) => { |
| | | e._loading = true; |
| | | problemApi |
| | | .getProBySubtask(e.subTaskId) |
| | | .then((res) => { |
| | | e._problems = res; |
| | | }) |
| | | .slice(0, 10); |
| | | this.tableData.sort((a, b) => { |
| | | const s1 = a.evaluation |
| | | ? parseInt(a.evaluation.resultscorebef) |
| | | : 0; |
| | | const s2 = b.evaluation |
| | | ? parseInt(b.evaluation.resultscorebef) |
| | | : 0; |
| | | return s1 - s2; |
| | | }); |
| | | this.orginData = useCloned(this.tableData).cloned; |
| | | this.getFilters(res.data); |
| | | if (typeof func === 'function') { |
| | | func({ data: this.tableData }); |
| | | } |
| | | } else { |
| | | this.tableData = []; |
| | | this.orginData = []; |
| | | 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; |
| | | }); |
| | | if (subrule) { |
| | | value.id = subrule.guid; |
| | | } |
| | | } |
| | | }); |
| | | } |
| | | }); |
| | | }, |
| | | .finally(() => { |
| | | e._loading = false; |
| | | }); |
| | | |
| | | getFilters(data) { |
| | | const townList = []; |
| | | data.forEach((e) => { |
| | | if (townList.indexOf(e.tname) == -1) { |
| | | townList.push(e.tname); |
| | | e._loading2 = true; |
| | | sceneApi |
| | | .getSceneDetail(e.sceneId) |
| | | .then((res) => { |
| | | //场景 |
| | | if (res.data.scense) { |
| | | e._contacts = res.data.scense.contacts; |
| | | e._contactst = res.data.scense.contactst; |
| | | } |
| | | }) |
| | | .finally(() => { |
| | | e._loading2 = false; |
| | | }); |
| | | }); |
| | | // this.orginData = useCloned(this.tableData).cloned; |
| | | if (typeof func === 'function') { |
| | | func(); |
| | | } |
| | | } else { |
| | | this.tableData = []; |
| | | // this.orginData = []; |
| | | if (typeof func === 'function') { |
| | | func(); |
| | | } |
| | | } |
| | | }); |
| | | this.townFilters = townList.map((v) => { |
| | | return { text: v, value: v }; |
| | | }); |
| | | // }); |
| | | }, |
| | | toCode(row, column) { |
| | | if (row.evaluation) { |
| | |
| | | const property = column['property']; |
| | | return row[property] === value; |
| | | }, |
| | | sortScore(a, b) { |
| | | 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); |