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.

541 lines
16 KiB

<!-- 任务管理aaa -->
4 weeks ago
<template>
<!-- 任务核查 -->
<div class="L-task-info">
<div class="info-left info-left-two" id="L-size-main">
<div class="content-info content-info-two" id="L-header">
<div class="info-title">任务详情</div>
<el-button type="primary" @click="sendBack" class="fanhuipiaofu" size='mini'>返回</el-button>
<div class="teshu-top-info">
<div class="top-info">
<el-row class="top-row">
<el-col :span="8">
任务下发时间<span>{{ titleInfoObj.taskTime }}</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-row>
<el-row>
<el-col :span="8">
任务期限<span>{{ titleInfoObj.taskDeadline }}</span>
</el-col>
<el-col :span="16">
核查资产类型<span>{{ listTow.join(",") }}</span>
</el-col>
</el-row>
</div>
</div>
</div>
<main class="renwuxiangqing">
<div class="info-cut-off-rule-my" id="L-tab">
<div class="info-title">资产信息</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">
4 weeks ago
<el-form-item label="系统名称:">
<el-input v-model="formInline.xtmc" placeholder="请输入"></el-input>
</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 label="已核查" value="1" />
<el-option label="审核通过" value="3" />
<el-option label="审核不通过" value="4" />
<el-option label="已关停" value="5" />
4 weeks ago
</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.unitName" placeholder="请输入"></el-input>
</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
v-for="item in chanckListTow"
:key="item.lable"
:label="item.conent"
:name="item.lable"
:xtmcName="item.xtmcName"
/>
4 weeks ago
</el-tabs>
<el-table
v-loading="loading"
:data="tableData"
:height="tabHeader"
:max-height="tabHeader"
:row-class-name="tableRowClassName"
>
4 weeks ago
<el-table-column type="index" width="50" label="序号" align="center" />
<el-table-column :label="xtmcName" prop="xtmc" align="center" />
<el-table-column label="核查单位" prop="zcdwmc" align="center" />
<el-table-column label="单位核查时间" prop="updateTime" align="center" />
<el-table-column label="审核状态" width="200px" prop="status" class-name="table-status" align="center">
<template #default="scope">
4 weeks ago
<span v-if="scope.row.status == 0" style="color: #E6A23C;">
未核查
</span>
<span v-if="scope.row.status == 1" style="color: #67C23A;">
已核查
</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 #default="scope">
4 weeks ago
<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 != 4 && scope.row.status != 0) || (route.query.pageType == 'look' || route.meta.pageType == 'look')"
>
4 weeks ago
<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
v-if="(route.query.pageType == 'info' || route.meta.pageType == 'info') && scope.row.status != 3 && scope.row.status != 5 && scope.row.status != 1"
4 weeks ago
style="display: flex;align-items: center;cursor: pointer;margin-left: 10px;"
@click="goInfo(2, scope.row)"
>
4 weeks ago
<img src="@/assets/images/icon-shenhe@2x.png" alt="" style="width: 15px;margin-right: 5px;">
<span class="del-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.btgyy'
>
4 weeks ago
<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>
<my-pagination
id="L-pagination"
:total="total"
:page="pagination.current"
:limit="pagination.size"
@pagination="getPagination"
:current-page.sync="pagination.current"
/>
4 weeks ago
</div>
</main>
</div>
<div class="info-right" v-if="route.query.pageType == 'look' || route.meta.pageType == 'look'">
4 weeks ago
<div class="info-title">任务流程节点</div>
<div class="timeline">
<div class="timeline-items" v-for="(item, index) in timeLineData" :key="index">
4 weeks ago
<div class="left-box">
<img class="main-img" :src="returnidimg(item.assetName)" 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 setup>
import { ref, onMounted, onUnmounted, computed } from 'vue';
import { useRoute, useRouter } from 'vue-router';
import useUserStore from "@/store/modules/user";
import myPagination from "@/views/components/Pagination/index.vue";
import myDialog from "@/views/components/myDialog/index.vue";
import { getassetTaskid, geassetTaskcHc } from "@/api/renwuApi/index.js";
import { assetLcpage } from "@/api/renwuApi/index.js";
import {require} from "@/utils/require.js";
const route = useRoute();
const router = useRouter();
const userStore = useUserStore();
console.log("userStore:", userStore.roles);
const index = ref(1);
const formInline = ref({});
const formInlineTwo = ref({
unitName: "",
});
const total = ref(0);
const pagination = ref({
current: 1,
size: 10,
});
const tableData = ref([]);
const tableDataTwo = ref([]);
const loading = ref(false);
const tabHeader = ref(undefined);
const timeLineData = ref([]);
const titleInfoObj = ref({});
const chakanyuanyin = ref("");
const activeName = ref("0");
const xtmcName = ref("系统名称");
const liebiaoDialog = ref(null);
const chanckList = [
{
lable: "0",
conent: "web资产",
xtmcName: "系统名称",
4 weeks ago
},
{
lable: "1",
conent: "小程序资产",
xtmcName: "小程序名称",
4 weeks ago
},
{
lable: "2",
conent: "公众号资产",
xtmcName: "公众号名称",
},
{
lable: "3",
conent: "电子邮件资产",
xtmcName: "电子邮箱后缀",
},
{
lable: "4",
conent: "移动应用程序资产",
xtmcName: "移动应用程序名称",
},
];
const chanckListTow = ref([]);
const listTow = ref([]);
const sendBack = () => {
if (localStorage.getItem('ismypagination')) {
let formInline = JSON.parse(localStorage.getItem('ismypagination'));
formInline.isfanhui = true;
localStorage.setItem("ismypagination", JSON.stringify(formInline));
}
// 添加数据重新加载
titleInfo();
getList();
router.go(-1);
};
const handleClick = (tab) => {
activeName.value = tab.props.name;
xtmcName.value = tab.props.xtmcName;
localStorage.setItem("activeName", activeName.value);
handleQuery();
};
const returnidimg = (iswenzi) => {
const 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'),
}
];
const item = listsna.find(item => iswenzi.includes(item.name));
return item ? item.imgdata : require('@/assets/images/wctj.png');
};
const assetLcpageList = async () => {
const obj = {
taskId: route.query.id || route.meta.id
};
const res = await assetLcpage(obj);
timeLineData.value = res.data;
};
const importClose = () => {};
const goInfo = (type, row) => {
if (type === 1) {
router.push({
name: 'mytaskAuditInfo',
query: {
pageType: "look",
taskId: row.taskId,
assetId: row.id,
type: activeName.value,
4 weeks ago
}
});
}
if (type === 2) {
router.push({
name: 'mytaskAuditInfo',
query: {
pageType: "change",
taskId: row.taskId,
assetId: row.id,
type: activeName.value,
4 weeks ago
}
});
}
if (type === 3) {
chakanyuanyin.value = row.btgyy;
liebiaoDialog.value.open();
}
};
const taskstatus = (id) => {
if (id) {
const obj = {
0: "已关闭",
1: "进行中",
2: "正常完成",
3: "超期完成",
4: "正常完成",
5: "审核驳回"
};
return obj[id];
}
return "-";
};
const titleInfoObjtype = (type = "0,1") => {
const list = type.split(",");
listTow.value = [];
chanckListTow.value = [];
chanckList.forEach(res => {
list.forEach(element => {
if (element === res.lable) {
listTow.value.push(res.conent);
chanckListTow.value.push(res);
4 weeks ago
}
});
});
activeName.value = chanckListTow.value[0].lable;
if (localStorage.getItem("activeName")) {
activeName.value = localStorage.getItem("activeName");
localStorage.setItem("activeName", activeName.value);
}
const listname = chanckListTow.value.filter(item => item.lable === activeName.value);
if (listname.length) {
xtmcName.value = listname[0].xtmcName;
}
handleQuery();
};
const titleInfo = async () => {
const res = await getassetTaskid(route.query.id || route.meta.id);
if (res.code === 200) {
titleInfoObj.value = res.data;
titleInfoObjtype(titleInfoObj.value.type);
}
};
const resetQuery = () => {
activeName.value = chanckListTow.value[0].lable;
pagination.value = {
current: 1,
size: 10,
type: activeName.value,
};
if (index.value === 1) {
formInline.value = {
type: activeName.value,
};
localStorage.removeItem("ismypaginationTow");
getList();
} else if (index.value === 2) {
formInlineTwo.value = {
unitName: "",
};
getListTwo();
}
};
const handleQuery = () => {
pagination.value = {
current: 1,
size: 10,
type: activeName.value,
};
if (index.value === 1) {
pagination.value = { ...pagination.value, ...formInline.value };
formInline.value.isfanhuiTow = false;
localStorage.setItem("ismypaginationTow", JSON.stringify(formInline.value));
getList();
} else if (index.value === 2) {
getListTwo();
}
};
const getPagination = (pages) => {
pagination.value.current = pages.page;
pagination.value.size = pages.limit;
if (index.value === 1) {
getList();
} else if (index.value === 2) {
getListTwo();
}
};
const activeTab = (id) => {
index.value = id;
if (id === 1) {
formInline.value = {
unit: "",
type: "",
status: "",
};
getList();
} else {
formInlineTwo.value = {
unitName: "",
};
getList();
}
};
const getList = async () => {
loading.value = true;
pagination.value.taskId = route.query.id || route.meta.id;
pagination.value.type = activeName.value;
if (userStore.roles.includes("unit")) {
pagination.value.dwmc = store.state.user.useer.nickName;
}
const res = await geassetTaskcHc(pagination.value);
tableData.value = res.data.records;
loading.value = false;
total.value = res.data.total;
};
const getListTwo = () => {};
const tableRowClassName = ({ rowIndex }) => {
return rowIndex % 2 !== 0 ? 'evenNumber-row' : '';
};
const cancalDebounce = () => {
const element = document.getElementById('L-size-main');
const header = document.getElementById('L-header');
const tab = document.getElementById('L-tab');
const pagination = document.getElementById('L-pagination');
if (element && header && pagination && tab) {
const elementHeight = element.offsetHeight;
const headerHeight = header.offsetHeight;
const paginationtHeight = pagination.offsetHeight;
const tabHeight = tab.offsetHeight;
tabHeader.value = elementHeight - headerHeight - paginationtHeight - tabHeight - 160;
}
};
onMounted(() => {
cancalDebounce();
window.addEventListener('resize', cancalDebounce);
titleInfo();
assetLcpageList();
if (localStorage.getItem('ismypaginationTow')) {
const storedData = JSON.parse(localStorage.getItem('ismypaginationTow'));
if (storedData.isfanhuiTow) {
formInline.value = storedData;
titleInfo();
} else {
localStorage.removeItem("ismypaginationTow");
4 weeks ago
}
}
});
onUnmounted(() => {
window.removeEventListener('resize', cancalDebounce);
});
4 weeks ago
</script>
4 weeks ago
<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;
}
.content-info {
position: relative;
}
.fanhuipiaofu {
position: absolute;
right: 20px;
top: 10px;
}
</style>