You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

742 lines
25 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<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>