<template> <div class="L-task-info"> <div class="info-left" id="L-size-main"> <div class="content-info" id="L-header"> <div class="info-title">任务详情</div> <div class="teshu-top-info"> <div class="top-info"> <el-row class="top-row"> <!-- <el-col :span="8"> 任务编号:<span>{{ titleInfoObj.id }}</span> </el-col> --> <el-col :span="8"> 任务名称:<span>{{ titleInfoObj.taskName }}</span> </el-col> <el-col :span="8"> 任务状态:<span>{{ taskstatus(titleInfoObj.taskStatus) }}</span> </el-col> <el-col :span="8"> 任务期限:<span>{{ titleInfoObj.taskDeadline }}</span> </el-col> </el-row> <el-row> <el-col :span="8"> 任务下发时间:<span>{{ titleInfoObj.taskTime }}</span> </el-col> <el-col :span="16"> 核查资产类型:<span>{{ listTow.join(",") }}</span> </el-col> </el-row> </div> </div> </div> <div class="info-cut-off-rule" id="L-tab"> <div class="left-tab" :class="index == 1 ? 'active-tab' : ''" @click="activeTab(1)">资产核查信息</div> <div :class="index == 2 ? 'active-tab' : ''" @click="activeTab(2)">单位完成情况</div> </div> <div class="info-bottom-box"> <el-form :inline="true" :model="formInline" size="small" class="demo-form-inline" v-if="index == 1"> <el-row> <el-col :span="7"> <el-form-item label="核查单位:"> <el-input v-model="formInline.dwmc" placeholder="请输入"></el-input> </el-form-item> </el-col> <!-- <el-col :span="9"> <el-form-item label="系统类型:"> <el-select v-model="formInline.xtlx" placeholder="请选择"> <el-option v-for="dict in dict.type.zc_xtlx" :key="dict.label" :label="dict.label" :value="dict.value"> </el-option> </el-select> </el-form-item> </el-col> --> <el-col :span="7"> <el-form-item label="审核状态:"> <el-select v-model="formInline.status" placeholder="请选择"> <el-option label="待核查" value="0"> </el-option> <el-option label="待审核" value="1"> </el-option> <el-option label="审核通过" value="3"> </el-option> <el-option label="审核不通过" value="4"> </el-option> <!-- <el-option label="已关停" value="5"> </el-option> --> </el-select> </el-form-item> </el-col> <el-col :span="4"> <el-form-item> <el-button size="mini" type="primary" @click="handleQuery()">查询</el-button> <el-button size="mini" @click="resetQuery()">重置</el-button> </el-form-item> </el-col> </el-row> </el-form> <el-form :inline="true" :model="formInlineTwo" size="small" class="demo-form-inline" v-if="index == 2"> <el-row> <el-col :span="7"> <el-form-item label="单位名称:"> <el-input v-model="formInlineTwo.dwmc" placeholder="请输入"></el-input> <!-- <el-select v-model="formInline.unit" placeholder="请选择"> --> <!-- <el-option v-for="dict in dict.type.bms_approval_status" :key="dict.value" :label="dict.label" :value="dict.value"> </el-option> --> <!-- </el-select> --> </el-form-item> </el-col> <el-col :span="7"> <el-form-item label="完成状态:"> <el-select v-model="formInlineTwo.taskStatus" placeholder="请选择"> <el-option label="进行中" value="1"> </el-option> <el-option label="正常完成" value="2"> </el-option> <el-option label="超期完成" value="3"> </el-option> </el-select> </el-form-item> </el-col> <el-col :span="4"> <el-form-item> <el-button size="mini" type="primary" @click="handleQuery()">查询</el-button> <el-button size="mini" @click="resetQuery()">重置</el-button> </el-form-item> </el-col> </el-row> </el-form> <section v-if="index == 1"> <el-tabs v-model="activeName" @tab-click="handleClick"> <el-tab-pane :label="item.conent" :name="item.lable" :xtmcName="item.xtmcName" v-for="item in chanckListTow"> </el-tab-pane> </el-tabs> <el-table v-loading="loading" :data="tableData" :height="tabHeader" :row-class-name="tableRowClassName"> <el-table-column type="index" width="50" label="序号" align="center" /> <!-- <el-table-column label="资产编号" key="id" width="200px" prop="id" align="center" /> --> <el-table-column :label="xtmcName" key="xtmc" prop="xtmc" align="center" /> <!-- <el-table-column label="系统类型" key="xtlx" prop="xtlx" align="center"> <template slot-scope="scope" > <div v-if='scope.row.xtlx'> <dict-tag :options="dict.type.zc_xtlx" :value="scope.row.xtlx" /> </div> </template> </el-table-column> --> <el-table-column label="核查单位" key="zcdwmc" prop="zcdwmc" align="center" /> <el-table-column label="审核状态" key="status" width="200px" prop="status" class-name="table-status" align="center"> <template slot-scope="scope"> <span v-if="scope.row.status == 0" style="color: #e6a230;"> 待核查 </span> <span v-if="scope.row.status == 1" style="color: #E6A23C;"> 待审核 </span> <span v-if="scope.row.status == 3" style="color: #67C23A;"> 审核通过 </span> <span v-if="scope.row.status == 4" style="color: #F56C6C;"> 审核不通过 </span> <span v-if="scope.row.status == 5" style="color: #F56C6C;"> 已关停 </span> </template> </el-table-column> <el-table-column label="操作" prop="userId" class-name="table-operation" align="center"> <template slot-scope="scope"> <div style="display: flex;align-items: center;justify-content: center;"> <div style="display: flex;align-items: center;cursor: pointer;" @click="goInfo(1, scope.row)" v-if="scope.row.status != 1 || ($route.query.pageType == 'look' || $route.meta.pageType == 'look')"> <img src="@/assets/images/icon-ck@2x.png" alt="" style="width: 20px;margin-right: 5px;"> <span class="look-info" style="color: #1485EF;">查看</span> </div> <div style="display: flex;align-items: center;cursor: pointer;margin-left: 5px;" @click="goInfo(2, scope.row)" v-if="$route.query.pageType == 'info' || $route.meta.pageType == 'info'" v-show='scope.row.status == 1'> <img src="@/assets/images/icon-shenhe@2x.png" alt="" style="width: 15px;margin-right: 5px;"> <span class="look-info" style="color: #1485EF;">审核</span> </div> <div style="display: flex;align-items: center;cursor: pointer;margin-left: 5px;" @click="goInfo(3, scope.row)" v-show='scope.row.status == 4'> <img src="@/assets/images/icon-ck@2x.png" alt="" style="width: 20px;margin-right: 5px;"> <span class="look-info" style="color: #1485EF;">查看原因</span> </div> </div> </template> </el-table-column> </el-table> </section> <section v-if="index == 2" class="shuangchongbox"> <div class="shuangchongboxleftbox" :class="isshow ? '' : 'shuangchongboxleftboxShow'"> <div style="margin-bottom: 10px;"> <el-button size="mini" type="primary" @click="daochu()">导出</el-button> </div> <el-table v-loading="loading" :data="tableDataTwo" :height="tabHeader" :max-height="tabHeader" :row-class-name="tableRowClassName" style="width: 100%"> <el-table-column type="index" width="50" label="序号" align="center" /> <el-table-column label="单位名称" key="dwmc" width="150px" prop="dwmc" align="center" /> <el-table-column label="完成状态" key="taskStatus" prop="taskStatus" class-name="table-status" align="center"> <template slot-scope="scope"> <span v-if="scope.row.taskStatus == 0" style="color: #F56C6C;"> 已关闭 </span> <span v-if="scope.row.taskStatus == 1" style="color: #E6A23C;"> 进行中 </span> <span v-if="scope.row.taskStatus == 2" style="color: #67C23A;"> 正常完成 </span> <span v-if="scope.row.taskStatus == 3" style="color:#67C23A;"> 超期完成 </span> <span v-if="scope.row.taskStatus == 4" style="color: #F56C6C;"> 审核不通过 </span> <span v-if="scope.row.taskStatus == 5" style="color: #F56C6C;"> 审核驳回 </span> </template> </el-table-column> <el-table-column label="核查资产数量" key="total" width="120px" prop="total" align="center" /> <el-table-column label="待核查数量" key="total" width="120px" prop="notChecked" align="center" /> <el-table-column label="待审批数量" key="total" width="120px" prop="dsp" align="center" /> <el-table-column label="完成数量" key="checked" prop="checked" align="center"> <!-- <template slot-scope="scope"> <dict-tag :options="dict.type.project_middle_type" :value="scope.row.projectMiddleType"/> </template> --> </el-table-column> <!-- <el-table-column label="未完成数量" key="wwcsl" prop="notChecked" align="center" /> --> <el-table-column label="审核退回次数" key="wwcsl" width="180px" prop="shthcs" align="center" /> <el-table-column label="完成比例" key="checkedRatio" prop="checkedRatio" align="center"> <template slot-scope="scope"> <span style="color: #192A92;">{{ scope.row.checkedRatio }}%</span> </template> </el-table-column> </el-table> </div> <div class="shouqiwenzi" @click="shouqiisis">{{ isshow ? "收起" : '展开' }}>></div> <div v-show="isshow" class="myEcharts" id="myEcharts" ref="myEcharts" :style="{ height: tabHeader }"> <!-- 123 --> </div> </section> <my-pagination id="L-pagination" :total="total" :page="pagination.current" :limit="pagination.size" @pagination="getPagination" :current-page.sync="pagination.current"></my-pagination> </div> </div> <div class="info-right" v-if="$route.query.pageType == 'look' || $route.meta.pageType == 'look'"> <div class="info-title">任务流程节点</div> <div class="timeline"> <div class="timeline-items" v-for="(item, index) in timeLineData"> <div class="left-box"> <img class="main-img" :src="returnidimg(item.assetName)" alt=""> <!-- <img class="main-img" v-if="item.status == 2" src="" alt=""> <img class="main-img" v-if="item.status == 3" src="" alt=""> <img class="main-img" v-if="item.status == 4" src="" alt=""> --> <img class="icon-jt" v-if="(index + 1) != timeLineData.length" src="@/assets/images/icon-jt@2x.png" alt=""> </div> <div class="right-box"> <span class="span-title">{{ item.assetName }}:</span> <span class="span-time">{{ item.xfTime }}</span> </div> </div> </div> </div> <my-dialog title="查看原因" ref="liebiaoDialog" @close="importClose" class="taskDialogBox" width="40%"> <el-descriptions> <el-descriptions-item label="不通过原因"> {{ chakanyuanyin }} </el-descriptions-item> </el-descriptions> </my-dialog> </div> </template> <script> import myPagination from "@/views/components/Pagination/index.vue" import { getassetTaskid, geassetTaskcHc, assetTaskdwHc, assetLcpage, assetTaskdwHcBl } from "@/api/renwuApi/index.js" import myDialog from "@/views/components/myDialog/index.vue" import * as echarts from 'echarts'; export default { dicts: ['zc_xtlx'], components: { myPagination, myDialog }, data() { return { index: 1, formInline: { xtlx: "", }, formInlineTwo: { dwmc: "", taskStatus: "" }, total: 0, pagination: { current: 1, size: 10, }, tableData: [ ], tableDataTwo: [ ], loading: false, tabHeader: undefined, timeLineData: [], titleInfoObj: {}, chakanyuanyin: "", activeName: "0", xtmcName: "系统名称", chanckList: [ { lable: "0", conent: "web资产", xtmcName: "系统名称", }, { lable: "1", conent: "小程序资产", xtmcName: "小程序名称", }, { lable: "2", conent: "公众号资产", xtmcName: "公众号名称", }, { lable: "3", conent: "电子邮件资产", xtmcName: "电子邮箱后缀", }, { lable: "4", conent: "移动应用程序资产", xtmcName: "移动应用程序名称", }, ], chanckListTow: [], listTow: [], option: null, myChart: null, isshow: true, echartsdata: [ { value: 0, name: '进行中', taskStatus: "1" }, { value: 0, name: '正常完成', taskStatus: "2" }, { value: 0, name: '超期完成', taskStatus: "3" }, ] } }, mounted() { this.cancalDebounce(); window.addEventListener('resize', this.cancalDebounce); // 获取详情 this.titleInfo() //获取流程节点数据 this.assetLcpageList() //获取饼状图数据 this.getEchartsdata() }, destroyed() { window.removeEventListener('resize', this.cancalDebounce); }, methods: { shouqiisis() { console.log(123); this.isshow = !this.isshow // this.myEchartsis() }, // 导出按钮 daochu() { this.formInlineTwo.taskId = this.$route.query.id this.download('/unit/assetTask/export', { ...this.formInlineTwo }, `单位完成情况${new Date().getTime()}.xlsx`) }, //切换资产核查tab handleClick(tab, event) { this.formInline = { xtlx: "", } this.activeName = tab.name this.xtmcName = tab.$attrs.xtmcName, localStorage.setItem("activeName", this.activeName) this.handleQuery() }, //返回图片 returnidimg(iswenzi) { // let obj = { // '下发':require('@/assets/images/rwxf.png'), // "提交":require('@/assets/images/wctj.png'), // "驳回,不通过":require('@/assets/images/shbh.png'), // "审核通过":require('@/assets/images/shtg.png'), // } let listsna = [ { name: "下发", imgdata: require('@/assets/images/rwxf.png'), }, { name: "提交", imgdata: require('@/assets/images/wctj.png'), }, { name: "不通过", imgdata: require('@/assets/images/shbh.png'), }, { name: "审核通过", imgdata: require('@/assets/images/shtg.png'), }, { name: "驳回", imgdata: require('@/assets/images/shbh.png'), } ] let item = listsna.find(item => iswenzi.includes(item.name)) if (item) { return item.imgdata } else { return require('@/assets/images/wctj.png') } }, //获取流程 assetLcpageList() { let obj = { taskId: this.$route.query.id || this.$route.meta.id } assetLcpage(obj).then(res => { this.timeLineData = res.data }) }, importClose() { }, goInfo(type, row) { // 查看 if (type == 1) { this.$router.push({ name: 'taskAuditInfo', query: { pageType: "look", taskId: row.taskId, assetId: row.id, type: this.activeName, } }) } //审核 if (type == 2) { this.$router.push({ name: 'taskAuditInfo', query: { pageType: "change", taskId: row.taskId, assetId: row.id, type: this.activeName, zcdwmc: row.zcdwmc, taskInfo: 'taskInfo' } }) } //查看不通过原因 if (type == 3) { this.chakanyuanyin = row.btgyy this.$refs.liebiaoDialog.open() } // getassetTaskid(row.id) }, taskstatus(id) { if (id) { let obj = { 0: "已关闭", 1: "进行中", 2: "正常完成", 3: "超期完成", 4: "正常完成", 5: "审核驳回" } return obj[id] } else { return "-" } }, titleInfoObjtype(type = "0,1") { console.log(type); let list = type.split(",") this.listTow = [] this.chanckListTow = [] this.chanckList.forEach(res => { list.forEach(element => { if (element == res.lable) { this.listTow.push(res.conent) this.chanckListTow.push(res) } }); }) this.activeName = this.chanckListTow[0].lable // this.xtmcName = tab.$attrs.xtmcName if (localStorage.getItem("activeName")) { this.activeName = localStorage.getItem("activeName") localStorage.setItem("activeName", this.activeName) } let listname = this.chanckListTow.filter(item => item.lable == this.activeName) if (listname) { this.xtmcName = listname[0].xtmcName } this.handleQuery(); }, titleInfo() { // console.log(this.$route.query); getassetTaskid(this.$route.query.id || this.$route.meta.id).then(res => { if (res.code == 200) { this.titleInfoObj = res.data this.titleInfoObjtype(this.titleInfoObj.type) } }) }, // 重置 resetQuery() { this.activeName = this.chanckListTow[0].lable this.xtmcName = "系统名称", this.pagination = { current: 1, size: 10, type: this.activeName, } if (this.index == 1) { this.formInline = { xtlx: "", type: this.activeName, } this.getList(); } else if (this.index == 2) { this.formInlineTwo = { dwmc: "", taskStatus: "" } this.getListTwo(); } }, // 查询 handleQuery() { this.pagination = { current: 1, size: 10, type: this.activeName, } if (this.index == 1) { this.pagination = { ...this.pagination, ...this.formInline }; this.getList(); } else if (this.index == 2) { this.pagination = { ...this.pagination, ...this.formInlineTwo }; this.getListTwo(); } }, // 获取页码 getPagination(pages) { this.pagination.current = pages.page; this.pagination.size = pages.limit; if (this.index == 1) { this.getList(); } else if (this.index == 2) { this.getListTwo(); } }, // 切换tab activeTab(id) { this.pagination.current = 1; this.pagination.size = 10; this.total = 0 this.index = id console.log(id); this.resetQuery() if (id == 2) { setTimeout(() => { this.myEchartsis() }, 100); } }, getList() { this.loading = true this.pagination.taskId = this.$route.query.id || this.$route.meta.id geassetTaskcHc(this.pagination).then(res => { this.tableData = res.data.records this.total = res.data.total this.loading = false }) }, getListTwo() { this.loading = true this.pagination.taskId = this.$route.query.id || this.$route.meta.id assetTaskdwHc(this.pagination).then(res => { this.tableDataTwo = res.data.records this.total = res.data.total this.loading = false }) }, //获取Echarts数据 getEchartsdata() { assetTaskdwHcBl({ taskId: this.$route.query.id }).then(res => { if (res.code == 200) { let datalsit = res.data this.echartsdata.forEach(res => { datalsit.forEach(datares => { if (res.taskStatus == datares.taskStatus) { res.value = datares.count } }) }) // this.echartsdata = this.echartsdata.filter(item => item.value != ""); } }) }, myEchartsis() { // var chartDom = document.querySelector('.myEcharts'); console.log(this.$refs.myEcharts); this.myChart = echarts.init(this.$refs.myEcharts); this.option = { legend: { top: 'bottom' }, toolbox: { show: true, }, tooltip: { trigger: 'item', formatter: '{b}:{c}({d}%)' }, series: [ { name: 'Access From', type: 'pie', radius: '50%', data: this.echartsdata, emphasis: { itemStyle: { shadowBlur: 10, shadowOffsetX: 0, shadowColor: 'rgba(0, 0, 0, 0.5)' } } } ] }; this.option && this.myChart.setOption(this.option); this.myChart.on('click', (params) => { // params 包含了事件的数据和图表的信息 console.log(params.data.taskStatus); this.formInlineTwo.taskStatus = params.data.taskStatus this.handleQuery() // 可以在这里添加你的逻辑,比如弹窗显示详细信息等 }); }, // 修改table背景色 tableRowClassName({ row, rowIndex }) { if (rowIndex % 2 !== 0) { return 'evenNumber-row'; } return ''; }, // 屏幕尺寸变化 cancalDebounce() { const element = document.getElementById('L-size-main'); // 通过元素的 ID 获取元素 const header = document.getElementById('L-header'); // 通过元素的 ID 获取元素 const tab = document.getElementById('L-tab'); // 通过元素的 ID 获取元素 const pagination = document.getElementById('L-pagination'); // 通过元素的 ID 获取元素 const elementHeight = element.offsetHeight; const headerHeight = header.offsetHeight; const paginationtHeight = pagination.offsetHeight; const tabHeight = tab.offsetHeight; this.tabHeader = elementHeight - headerHeight - paginationtHeight - tabHeight - 160; } }, beforeRouteEnter(to, from, next) { if (to.query.pageType == 'info') { to.meta.title = '任务审核' to.meta.pageType = to.query.pageType to.meta.id = to.query.id } else if (to.query.pageType == 'look') { to.meta.title = '任务详情' to.meta.pageType = to.query.pageType to.meta.id = to.query.id } next(); }, } </script> <style lang="scss" scoped> ::v-deep .el-timeline { padding-left: 0; font-size: 12px; } ::v-deep .el-form-item__label { padding-right: 3px; } .look-info {} ::v-deep .el-dialog { margin-top: 20vh !important; } .shuangchongbox { width: 100%; display: flex; position: relative; .shuangchongboxleftbox { width: 70%; } .shuangchongboxleftboxShow { width: 100%; } .myEcharts { width: 30%; // height: 100%; } } .shouqiwenzi { position: absolute; top: 10px; right: -30px; width: 100px; font-size: 14px; font-weight: bold; color: #409EFF; cursor: pointer; z-index: 999; } </style>