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.
 
 
 
 
 

200 lines
7.3 KiB

<template>
<div>
<el-row :gutter="20">
<el-col :span="6">
<el-card @click.native="navigateToMes('unfinishedProjects',counts)" class="card-item">
<div class="card-title">我参与的未结物料</div>
<div class="card-count">{{ counts.unfinishedProjectsCount }}</div>
</el-card>
</el-col>
<el-col :span="6">
<el-card @click.native="navigateToMes('pendingUploads',counts)" class="card-item">
<div class="card-title">待上传文件</div>
<div class="card-count">{{ counts.pendingUploadsCount }}</div>
</el-card>
</el-col>
<el-col :span="6">
<el-card @click.native="navigateToMes('pendingConfirmations',counts)" class="card-item">
<div class="card-title">待生产确认的项目</div>
<div class="card-count">{{ counts.pendingConfirmationsCount }}</div>
</el-card>
</el-col>
</el-row>
<el-row :gutter="20" style="margin-top: 10px;">
<el-col :span="6">
<el-card @click.native="navigateToMes('allProjects',counts)" class="card-item">
<div class="card-title">我参与的所有物料</div>
<div class="card-count">{{ counts.allProjectsCount }}</div>
</el-card>
</el-col>
<el-col :span="6">
<el-card @click.native="navigateToMes('overdueUploads',counts)" class="card-item">
<div class="card-title">逾期的待上传文件</div>
<div class="card-count">{{ counts.overdueUploadsCount }}</div>
</el-card>
</el-col>
<el-col :span="6">
<el-card @click.native="navigateToMes('overdueConfirmations',counts)" class="card-item">
<div class="card-title">逾期的待生产确认的项目</div>
<div class="card-count">{{ counts.overdueConfirmationsCount }}</div>
</el-card>
</el-col>
</el-row>
</div>
</template>
<script>
import { agencyMatter } from "../../../api/eam/eamProject";
export default {
data() {
return {
counts: {
unfinishedProjectsCount: 0,
allProjectsCount: 0,
pendingUploadsCount: 0,
overdueUploadsCount: 0,
pendingConfirmationsCount: 0,
overdueConfirmationsCount: 0,
unfinishedProjects: [],
allProjects: [],
pendingUploads: [],
overdueUploads: [],
pendingConfirmations: [],
overdueConfirmations: [],
},
intervalId: null,
};
},
created() {
this.fetchCounts();
this.startAutoRefresh();
},
beforeDestroy() {
this.stopAutoRefresh();
},
methods: {
fetchCounts() {
agencyMatter()
.then(({ data }) => {
this.counts = data;
this.counts.unfinishedProjectsCount = this.counts.unfinishedProjects.length;
this.counts.allProjectsCount = this.counts.allProjects.length;
this.counts.pendingUploadsCount = this.counts.pendingUploads.length;
this.counts.overdueUploadsCount = this.counts.overdueUploads.length;
this.counts.pendingConfirmationsCount = this.counts.pendingConfirmations.length;
this.counts.overdueConfirmationsCount = this.counts.overdueConfirmations.length;
})
.catch((error) => {
console.error("Error fetching project counts:", error);
});
},
navigateToMes(path, row) {
let projectNos = '';
let testPartNos = '';
if (path === 'unfinishedProjects') {
for (let i = 0; i < row.unfinishedProjects.length; i++) {
// 使用逗号拼接 unfinishedProjects.projectNo,如果是最后一个则不加逗号
projectNos += row.unfinishedProjects[i].projectNo + (i === row.unfinishedProjects.length - 1 ? '' : ',');
testPartNos += row.unfinishedProjects[i].testPartNo + (i === row.unfinishedProjects.length - 1 ? '' : ',');
}
this.$router.push({ path: 'eam-eamProjectPartInfo', query: { projectNo: projectNos,testPartNo: testPartNos} });
}
else if (path === 'allProjects') {
for (let i = 0; i < row.allProjects.length; i++) {
projectNos += row.allProjects[i].projectNo + (i === row.allProjects.length - 1 ? '' : ',');
testPartNos += row.allProjects[i].testPartNo + (i === row.allProjects.length - 1 ? '' : ',');
}
this.$router.push({ path: 'eam-eamProjectPartInfo', query: { projectNo: projectNos,testPartNo: testPartNos } });
}
else if (path === 'pendingUploads') {
for (let i = 0; i < row.pendingUploads.length; i++) {
projectNos += row.pendingUploads[i].projectNo + (i === row.pendingUploads.length - 1 ? '' : ',');
testPartNos += row.pendingUploads[i].testPartNo + (i === row.pendingUploads.length - 1 ? '' : ',');
}
this.$router.push({ name: 'eam-eamProjectInfoForUploads', query: { projectNo: projectNos,flag:'1',testPartNo: testPartNos } });
}
else if (path === 'overdueUploads') {
for (let i = 0; i < row.overdueUploads.length; i++) {
projectNos += row.overdueUploads[i].projectNo + (i === row.overdueUploads.length - 1 ? '' : ',');
testPartNos += row.overdueUploads[i].testPartNo + (i === row.overdueUploads.length - 1 ? '' : ',');
}
this.$router.push({ path: 'eam-eamProjectInfoForUploads', query: { projectNo: projectNos,flag:'2',testPartNo: testPartNos } });
}
else if (path === 'pendingConfirmations') {
for (let i = 0; i < row.pendingConfirmations.length; i++) {
projectNos += row.pendingConfirmations[i].projectNo + (i === row.pendingConfirmations.length - 1 ? '' : ',');
testPartNos += row.pendingConfirmations[i].testPartNo + (i === row.pendingConfirmations.length - 1 ? '' : ',');
}
this.$router.push({ path: 'eam-eamProjectInfoForConfirm', query: { projectNo: projectNos,flag:'3',testPartNo: testPartNos } });
}
else if (path === 'overdueConfirmations') {
for (let i = 0; i < row.overdueConfirmations.length; i++) {
projectNos += row.overdueConfirmations[i].projectNo + (i === row.overdueConfirmations.length - 1 ? '' : ',');
testPartNos += row.overdueConfirmations[i].testPartNo + (i === row.overdueConfirmations.length - 1 ? '' : ',');
}
this.$router.push({ path: 'eam-eamProjectInfoForConfirm', query: { projectNo: projectNos,flag:'4',testPartNo: testPartNos } });
}
},
startAutoRefresh() {
this.intervalId = setInterval(() => {
this.fetchCounts();
}, 20000); // 每20秒刷新一次
},
stopAutoRefresh() {
if (this.intervalId) {
clearInterval(this.intervalId);
}
},
},
};
</script>
<style scoped>
.card-item {
cursor: pointer;
margin-bottom: 20px;
transition: transform 0.3s, box-shadow 0.3s;
overflow: hidden;
//padding: 10px;
display: flex;
flex-direction: column;
justify-content: space-between;
align-items: center;
height: 208px;
width: 230px;
margin-left: 40px;
margin-top: 10px;
}
.card-item:hover {
transform: translateY(-5px);
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
}
.card-title {
font-size: 18px;
font-weight: bold;
margin-bottom: 10px;
margin-top: 20px;
}
.card-count {
font-size: 55px;
color: #17B3A3;
text-align: center;
font-weight: bold;
margin-top: 50px;
}
.project-list {
font-size: 12px;
color: #333;
line-height: 1.5;
margin-bottom: 5px;
}
.el-divider {
margin: 10px 0;
}
</style>