From 516b908d7d2df5e0eeb36f2f5ca3ccb103d1e14b Mon Sep 17 00:00:00 2001
From: zxl <763096477@qq.com>
Date: 星期四, 11 十二月 2025 15:49:35 +0800
Subject: [PATCH] 首页工作台
---
src/views/workbench.vue | 622 ++++++++++++++++---
src/api/index/index.js | 29
src/views/index-nongtou.vue | 1125 ++++++++++++++++++++---------------
src/api/workbench/workbench.js | 74 ++
4 files changed, 1,265 insertions(+), 585 deletions(-)
diff --git a/src/api/index/index.js b/src/api/index/index.js
index 8671789..595994e 100644
--- a/src/api/index/index.js
+++ b/src/api/index/index.js
@@ -13,3 +13,32 @@
method:"GET"
})
}
+
+export const getTaskStatus = (params) =>{
+ return request({
+ url:"/index/taskStatus",
+ method:"POST",
+ data:params
+ })
+}
+
+export const getProjectSelectList = (params) =>{
+ return request({
+ url:"/index/getSelect",
+ method:"GET"
+ })
+}
+
+export const getStageCount = () =>{
+ return request({
+ url:"/index/stageCount",
+ method:"GET"
+ })
+}
+
+export const getProjectAdvanceCheckPoint = ()=>{
+ return request({
+ url:"/index/getProjectAdvanceCheckPoint",
+ method:"GET"
+ })
+}
diff --git a/src/api/workbench/workbench.js b/src/api/workbench/workbench.js
new file mode 100644
index 0000000..7b258a3
--- /dev/null
+++ b/src/api/workbench/workbench.js
@@ -0,0 +1,74 @@
+import request from '@/utils/request'
+
+export const getCountAchievements =() =>{
+ return request({
+ url:"/work-station-schedule/countAchievements",
+ method:"GET"
+ })
+}
+
+export const getProjectList =() =>{
+ return request({
+ url:"/work-station-schedule/getProjectList",
+ method:"GET"
+ })
+}
+
+export const getWaitTaskList =(params) =>{
+ return request({
+ url:"/work-station-schedule/getWaitTaskList",
+ method:"GET",
+ params:params
+ })
+}
+export const add =(data) =>{
+ return request({
+ url:"/work-station-schedule",
+ method:"POST",
+ data:data
+ })
+}
+
+export const update = (data)=>{
+ return request({
+ url:"/work-station-schedule",
+ method:"PUT",
+ data:data
+ })
+}
+
+export const del = (params)=>{
+ return request({
+ url:"/work-station-schedule/" +params,
+ method:"DELETE",
+ })
+}
+// export const page =(params) =>{
+// return request({
+// url:"/work-station-schedule/page",
+// method:"GET",
+// params:params
+// })
+// }
+export const listByDate =(params) =>{
+ return request({
+ url:"/work-station-schedule/listByDate",
+ method:"GET",
+ params:params
+ })
+}
+
+export const countTodayTask = () =>{
+ return request({
+ url:"/work-station-schedule/countTodayTask",
+ method:"GET"
+ })
+}
+
+export const auditHistoryPage = (params)=>{
+ return request({
+ url:"/work-station-schedule/auditHistoryPage",
+ method:"GET",
+ params:params
+ })
+}
diff --git a/src/views/index-nongtou.vue b/src/views/index-nongtou.vue
index 2850d36..31aeb41 100644
--- a/src/views/index-nongtou.vue
+++ b/src/views/index-nongtou.vue
@@ -60,19 +60,15 @@
<div slot="header" class="clearfix row">
<div style="flex: 1">椤圭洰杩涘害缁熻</div>
<div style="flex: 3;display: flex;justify-content: flex-end">
- <el-select
+ <el-date-picker
v-model="selectedMonth"
+ type="month"
placeholder="閫夋嫨鏈堜唤"
- style="width: 120px; margin-right: 10px;"
+ style="width: 180px; margin-right: 10px;"
@change="updateProgressChart"
- >
- <el-option
- v-for="month in months"
- :key="month.value"
- :label="month.label"
- :value="month.value"
- ></el-option>
- </el-select>
+ format="yyyy-MM"
+ value-format="yyyy-MM"
+ ></el-date-picker>
<el-select
v-model="selectedProjects"
multiple
@@ -88,7 +84,7 @@
:value="project.id"
></el-option>
</el-select>
- <el-button type="text" @click="showDetail">璇︽儏</el-button>
+<!-- <el-button type="text" @click="showDetail">璇︽儏</el-button>-->
</div>
</div>
<div class="chart-container" ref="progressChart" style="height: 400px;"></div>
@@ -99,17 +95,17 @@
<div slot="header" class="clearfix row">
<div style="flex: 1">鎺ㄨ繘鍗$偣</div>
<div style="flex: 3; display: flex; justify-content: flex-end">
- <el-button type="text">鍏ㄩ儴</el-button>
+<!-- <el-button type="text">鍏ㄩ儴</el-button>-->
</div>
</div>
<el-table :data="blockingTasks" style="width: 100%" height="250">
<el-table-column prop="taskName" label="浠诲姟鍚嶇О" width="180"></el-table-column>
- <el-table-column prop="project" label="鎵�灞為」鐩�"></el-table-column>
- <el-table-column prop="owner" label="璐熻矗浜�" width="100"></el-table-column>
+ <el-table-column prop="checkPointInfo.projectName" label="鎵�灞為」鐩�"></el-table-column>
+ <el-table-column prop="customerTaskInfo.promoterName" label="璐熻矗浜�" width="100"></el-table-column>
<el-table-column prop="startTime" label="寮�濮嬫椂闂�" width="120"></el-table-column>
- <el-table-column prop="deadline" label="鎴鏃ユ湡" width="120"></el-table-column>
- <el-table-column prop="overTime" label="宸茶秴鏃�" width="120"></el-table-column>
- <el-table-column prop="totalOverTimes" label="绱瓒呮椂娆℃暟" width="120" align="center"></el-table-column>
+ <el-table-column prop="endTime" label="鎴鏃ユ湡" width="120"></el-table-column>
+ <el-table-column prop="totalOverTime" label="宸茶秴鏃�" width="120"></el-table-column>
+ <el-table-column prop="overTimeCount" label="绱瓒呮椂娆℃暟" width="120" align="center"></el-table-column>
<el-table-column label="鎿嶄綔" width="80">
<template slot-scope="scope">
<el-button size="mini" @click="handleTaskDetail(scope.row)">鏌ョ湅</el-button>
@@ -141,7 +137,7 @@
:value="project.id"
></el-option>
</el-select>
- <el-button type="text" @click="showFundDetail">璇︽儏</el-button>
+<!-- <el-button type="text" @click="showFundDetail">璇︽儏</el-button>-->
</div>
</div>
<div class="chart-container" ref="fundChart" style="height: 400px;"></div>
@@ -152,7 +148,7 @@
<div slot="header" class="clearfix row">
<div style="flex:1">椤圭洰闃舵缁熻</div>
<div style="flex:3;display: flex;justify-content: flex-end">
- <el-button type="text">璇︽儏</el-button>
+<!-- <el-button type="text">璇︽儏</el-button>-->
</div>
</div>
<div class="chart-container" ref="stageChart" style="height: 250px;"></div>
@@ -164,66 +160,52 @@
<script>
import * as echarts from 'echarts';
-import {getCodingCount ,getFundingStatus } from '@/api/index/index.js'
+import {
+ getCodingCount,
+ getFundingStatus,
+ getTaskStatus,
+ getProjectSelectList,
+ getStageCount,
+ getProjectAdvanceCheckPoint
+} from '@/api/index/index.js'
export default {
name: 'ProjectManagement',
data() {
return {
+ pathMap:{
+ '鍦ㄥ簱': { path: '/projectEngineering/project/projectLibrary' },
+ '鍌ㄥ': {
+ path: '/projectEngineering/project/reserveProjects',
+ query: { projectPhase: 1 }
+ },
+ '鍓嶆湡': {
+ path:'/projectEngineering/project/previousProjects',
+ query: { projectPhase: 2 }
+ },
+ '瀹炴柦': {
+ path:'/projectEngineering/project/implementationProject',
+ query: { projectPhase: 3 }
+ },
+ '绔e伐': {
+ path:'/projectEngineering/project/completedProjects',
+ query: { projectPhase: 4 }
+ }
+ },
userName: '寮犵粡鐞�',
userAvatar: 'https://cube.elemecdn.com/3/7c/3ea6beec64369c2642b92c6726f1epng.png',
overviewData: {
- totalProjects: 42,
- inProgress: 28,
- atRisk: 7,
- delayed: 5
+ totalProjects: 0,
+ inProgress: 0,
+ atRisk: 0,
+ delayed: 0
},
blockingTasks: [
- {
- taskName: '鍙栧緱鍦熷湴鏉冨睘',
- project: '灏勬椽甯傞厭绮熀鍦板缓璁鹃」鐩�',
- owner: '鏉庡洓',
- startTime: '2025-05-15',
- overTime: '10澶�06灏忔椂',
- deadline: '2025-06-05',
- totalOverTimes: 4,
- status: '绱ф��'
- },
- {
- taskName: '鍙鎬х爺绌舵姤鍛婄敵璇�',
- project: '灏勬椽甯傞厭绮熀鍦板缓璁鹃」鐩�',
- owner: '鐜嬩簲',
- startTime: '2025-05-21',
- overTime: '8澶�',
- deadline: '2025-05-30',
- totalOverTimes: '5',
- status: '楂橀闄�'
- },
- {
- taskName: '寤鸿宸ョ▼绔e伐楠屾敹鐢宠',
- project: '灏勬椽甯傚疁灞呭疁涓氬拰缇庝埂鏉戝缓璁鹃」鐩�',
- owner: '璧靛叚',
- startTime: '2025-05-24',
- overTime: '4澶�14灏忔椂',
- deadline: '2025-06-04',
- totalOverTimes: '4',
- status: '寤舵湡'
- },
- {
- taskName: '鐢熶骇寤鸿椤圭洰姘村湡淇濇寔鏂规缂栧埗',
- project: '灏勬椽甯傚疁灞呭疁涓氬拰缇庝埂鏉戝缓璁鹃」鐩�',
- owner: '閽变竷',
- startTime: '2025-06-01',
- overTime: '4澶�',
- deadline: '2025-06-07',
- totalOverTimes: '6',
- status: '杩涜涓�'
- },
],
progressChart: null,
fundChart: null,
stageChart: null,
// 绛涢�夋暟鎹�
- selectedMonth: '2025-06',
+ selectedMonth: this.getCurrentMonth(),
months: [
{ value: '2025-05', label: '2025骞�5鏈�' },
{ value: '2025-06', label: '2025骞�6鏈�' },
@@ -233,134 +215,15 @@
selectedProjects: [],
fundSelectedProjects: [],
allProjects: [
- { id: 'p1', name: '灏勬椽甯傚浗瀹跺偍澶囨灄寤鸿椤圭洰锛堜竴鏈燂級' },
- { id: 'p2', name: '灏勬椽甯傜櫧缇借倝楦′骇涓氬缓璁鹃」鐩�' },
- { id: 'p3', name: '閬傚畞甯傚皠娲�2024鈥�2027骞村害涓滃寳鐗囧尯楂樻爣鍑嗗啘鐢板缓璁鹃」鐩�' },
- { id: 'p4', name: '灏勬椽甯傜幇浠g涓氱ず鑼冨熀鍦板缓璁鹃」鐩�' },
- { id: 'p5', name: '灏勬椽甯傚疁灞呭疁涓氬拰缇庝埂鏉戝缓璁鹃」鐩�' },
- { id: 'p6', name: '灏勬椽甯傛脖鐗岄晣缁煎悎姘村埄璁炬柦寤鸿椤圭洰' }
],
// 椤圭洰杩涘害妯℃嫙鏁版嵁
- progressData: {
- '2025-05': {
- 'p1': { completed: 30, inProgress: 50, notStarted: 20 },
- 'p2': { completed: 40, inProgress: 40, notStarted: 20 },
- 'p3': { completed: 10, inProgress: 60, notStarted: 30 },
- 'p4': { completed: 60, inProgress: 30, notStarted: 10 },
- 'p5': { completed: 25, inProgress: 45, notStarted: 30 },
- 'p6': { completed: 35, inProgress: 35, notStarted: 30 }
- },
- '2025-06': {
- 'p1': { completed: 50, inProgress: 40, notStarted: 10 },
- 'p2': { completed: 60, inProgress: 30, notStarted: 10 },
- 'p3': { completed: 30, inProgress: 50, notStarted: 20 },
- 'p4': { completed: 80, inProgress: 15, notStarted: 5 },
- 'p5': { completed: 45, inProgress: 35, notStarted: 20 },
- 'p6': { completed: 55, inProgress: 25, notStarted: 20 }
- },
- '2025-07': {
- 'p1': { completed: 70, inProgress: 25, notStarted: 5 },
- 'p2': { completed: 80, inProgress: 15, notStarted: 5 },
- 'p3': { completed: 50, inProgress: 40, notStarted: 10 },
- 'p4': { completed: 90, inProgress: 10, notStarted: 0 },
- 'p5': { completed: 65, inProgress: 25, notStarted: 10 },
- 'p6': { completed: 75, inProgress: 15, notStarted: 10 }
- },
- '2025-08': {
- 'p1': { completed: 90, inProgress: 10, notStarted: 0 },
- 'p2': { completed: 95, inProgress: 5, notStarted: 0 },
- 'p3': { completed: 70, inProgress: 25, notStarted: 5 },
- 'p4': { completed: 100, inProgress: 0, notStarted: 0 },
- 'p5': { completed: 85, inProgress: 10, notStarted: 5 },
- 'p6': { completed: 90, inProgress: 5, notStarted: 5 }
- }
- },
- // 璧勯噾浣跨敤妯℃嫙鏁版嵁
- fundData: {
- 'p1': {
- total: 5000,
- allocated: 3500,
- remaining: 1500,
- completed: 2800,
- sources: {
- projectCapital: 2000,
- countyInvestment: 1500,
- otherInvestment: 1000,
- governmentInvestment: 500
- }
- },
- 'p2': {
- total: 3200,
- allocated: 2500,
- remaining: 700,
- completed: 1800,
- sources: {
- projectCapital: 1200,
- countyInvestment: 1000,
- governmentInvestment: 1000
- }
- },
- 'p3': {
- total: 4200,
- allocated: 3000,
- remaining: 1200,
- completed: 2200,
- sources: {
- projectCapital: 1500,
- otherInvestment: 1200,
- governmentInvestment: 1500
- }
- },
- 'p4': {
- total: 2800,
- allocated: 2000,
- remaining: 800,
- completed: 1500,
- sources: {
- projectCapital: 1000,
- countyInvestment: 800,
- otherInvestment: 500,
- governmentInvestment: 500
- }
- },
- 'p5': {
- total: 3800,
- allocated: 3000,
- remaining: 800,
- completed: 2500,
- sources: {
- projectCapital: 1500,
- countyInvestment: 1000,
- governmentInvestment: 1300
- }
- },
- 'p6': {
- total: 4500,
- allocated: 3500,
- remaining: 1000,
- completed: 3000,
- sources: {
- projectCapital: 2000,
- countyInvestment: 1500,
- otherInvestment: 500,
- governmentInvestment: 500
- }
- }
- }
+ progressData: {},
+ fundData: {}
};
},
mounted() {
- getCodingCount().then(res =>{
+ this.initData();
- })
- getFundingStatus().then(res=>{
-
- })
-
- this.selectedProjects = this.allProjects.map(p => p.id); // 榛樿鍏ㄩ��
- this.fundSelectedProjects = this.allProjects.map(p => p.id); // 榛樿鍏ㄩ��
- this.initCharts();
- window.addEventListener('resize', this.handleResize);
},
beforeDestroy() {
window.removeEventListener('resize', this.handleResize);
@@ -375,6 +238,52 @@
}
},
methods: {
+ getCurrentMonth() {
+ const now = new Date();
+ const year = now.getFullYear();
+ const month = String(now.getMonth() + 1).padStart(2, '0'); // 鏈堜唤浠�0寮�濮嬶紝闇�瑕�+1
+ return `${year}-${month}`;
+ },
+ async initData(){
+
+ await this.initSelect();
+ await this.initCodingCount();
+ await this.initCharts();
+ await this.initProjectAdvanceCheckPoint();
+ window.addEventListener('resize', this.handleResize);
+ },
+ initProjectAdvanceCheckPoint(){
+ getProjectAdvanceCheckPoint().then(res =>{
+ if (res.code === 200){
+ this.blockingTasks = res.data;
+
+ }
+
+ })
+ },
+ initCodingCount(){
+ getCodingCount().then(res =>{
+ if(res.code === 200){
+ this.overviewData.totalProjects = res.data.total;
+ this.overviewData.inProgress = res.data.green;
+ this.overviewData.atRisk = res.data.yellow;
+ this.overviewData.delayed = res.data.red;
+ }
+ })
+
+ },
+ initSelect(){
+ getProjectSelectList().then(res =>{
+ if (res.code === 200){
+ this.allProjects = Object.entries(res.data).map(([id, name]) => ({
+ id: id, // 椤圭洰ID锛堝"151"锛�
+ name: name // 椤圭洰鍚嶇О锛堝"灏勬椽甯備竾鏋楅挗鍘傜墖鍖烘鎴峰尯鏀归�犻」鐩�"锛�
+ }));
+ this.selectedProjects = this.allProjects.slice(0, 5).map(p => p.id);
+ this.fundSelectedProjects = this.allProjects.slice(0, 5).map(p => p.id);
+ }
+ })
+ },
initCharts() {
// 鍒濆鍖栭」鐩繘搴﹀浘琛�
this.progressChart = echarts.init(this.$refs.progressChart);
@@ -386,329 +295,560 @@
// 鍒濆鍖栭」鐩樁娈电粺璁″浘琛�
this.stageChart = echarts.init(this.$refs.stageChart);
- this.stageChart.setOption({
- tooltip: {
- trigger: 'axis',
- axisPointer: {
- type: 'shadow'
- }
- },
- grid: {
- left: '3%',
- right: '4%',
- bottom: '3%',
- containLabel: true
- },
- xAxis: {
- type: 'category',
- data: ['鍦ㄥ簱', '鍌ㄥ', '鍓嶆湡', '瀹炴柦', '绔e伐'],
- axisLine: {
- lineStyle: {
- color: '#409EFF'
- }
- }
- },
- yAxis: {
- type: 'value',
- axisLine: {
- lineStyle: {
- color: '#409EFF'
- }
- }
- },
- series: [
- {
- data: [15, 12, 10, 8, 6, 4, 2],
- type: 'line',
- smooth: true,
- lineStyle: {
- width: 3,
- color: '#409EFF'
- },
- itemStyle: {
- color: '#409EFF'
- },
- areaStyle: {
- color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
- {
- offset: 0,
- color: 'rgba(64, 158, 255, 0.5)'
- },
- {
- offset: 1,
- color: 'rgba(64, 158, 255, 0.1)'
- }
- ])
- }
- }
- ]
- });
- },
+ this.updateStageChart();
+ },
+ updateStageChart(){
+ if (!this.stageChart) return;
+ getStageCount().then(res =>{
+ if (res.code ===200){
+ const xData = res.data.xData || [];
+ const yData = res.data.yData || [];
+ this.stageChart.setOption({
+ tooltip: {
+ trigger: 'axis',
+ triggerOn: 'mousemove',
+ axisPointer: {
+ type: 'shadow'
+ }
+ },
+ grid: {
+ left: '3%',
+ right: '4%',
+ bottom: '3%',
+ containLabel: true
+ },
+ xAxis: {
+ type: 'category',
+ data: xData,
+ axisLine: {
+ lineStyle: {
+ color: '#409EFF'
+ }
+ }
+ },
+ yAxis: {
+ type: 'value',
+ axisLine: {
+ lineStyle: {
+ color: '#409EFF'
+ }
+ }
+ },
+ series: [
+ {
+ data: yData,
+ type: 'line',
+ smooth: true,
+ lineStyle: {
+ width: 3,
+ color: '#409EFF'
+ },
+ itemStyle: {
+ color: '#409EFF'
+ },
+ emphasis: {
+ itemStyle: {
+ color: '#1989fa',
+ size: 10
+ },
+ lineStyle: {
+ width: 4
+ },
+ // 鏁翠釜绯诲垪鍖哄煙hover閮芥樉绀烘墜鍨�
+ cursor: 'pointer',
+ areaStyle: {
+ color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
+ { offset: 0, color: 'rgba(25, 137, 250, 0.6)' },
+ { offset: 1, color: 'rgba(25, 137, 250, 0.2)' }
+ ])
+ }
+ },
+ areaStyle: {
+ color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
+ {
+ offset: 0,
+ color: 'rgba(64, 158, 255, 0.5)'
+ },
+ {
+ offset: 1,
+ color: 'rgba(64, 158, 255, 0.1)'
+ }
+ ])
+ },
+ triggerLineEvent: true,
+ triggerAreaEvent: true
+ }
+ ]
+ });
+
+ this.stageChart.off('click');
+ this.stageChart.on('click', (params) => {
+ console.log('鍥捐〃鐐瑰嚮鍙傛暟锛�', params);
+ // 浠呯偣鍑荤郴鍒楀尯鍩熸椂澶勭悊
+ if (params.componentType === 'series') {
+ // 1. 灏嗙偣鍑荤殑鍍忕礌鍧愭爣杞崲涓篨杞寸储寮�
+ const pointInPixel = [params.event.offsetX, params.event.offsetY];
+ const xAxisIndex = 0; // X杞寸储寮曪紙鍙湁涓�涓猉杞达紝鍥哄畾涓�0锛�
+ const xAxisValue = this.stageChart.convertFromPixel({ seriesIndex: 0, axisIndex: xAxisIndex }, pointInPixel)[0];
+
+ // 2. 璁$畻鎵�灞炵殑X杞存爣绛剧储寮曪紙鍙栨暣锛�
+ const targetIndex = Math.max(0, Math.min(xData.length - 1, Math.floor(xAxisValue)));
+ // 3. 鑾峰彇瀵瑰簲鏍囩
+ const targetLabel = xData[targetIndex];
+
+ // 4. 鍖归厤pathMap璺宠浆锛堟棤鍖归厤鍒欒蛋榛樿锛�
+ if (targetLabel && Object.keys(this.pathMap).includes(targetLabel)) {
+ console.log(targetLabel)
+ const targetRoute = this.pathMap[targetLabel] || { path: '/projectEngineering/project/projectLibrary' };
+ this.$router.push(targetRoute);
+ }
+ }
+ });
+ }
+ })
+ },
// 鏇存柊椤圭洰杩涘害鍥捐〃鏁版嵁
updateProgressChart() {
if (!this.progressChart) return;
+ const form ={
+ startTime:this.selectedMonth
+ }
+ getTaskStatus(form).then(res => {
+ if (res.code === 200) {
+ // 浠庡搷搴旀暟鎹腑鎻愬彇娴佺▼缁熻淇℃伅
+ const processStatistics = res.data || [];
- const monthData = this.progressData[this.selectedMonth];
- const filteredProjects = this.allProjects.filter(p =>
- this.selectedProjects.includes(p.id)
- );
- const categories = filteredProjects.map(p => p.name);
- const completedData = filteredProjects.map(p => monthData[p.id].completed);
- const inProgressData = filteredProjects.map(p => monthData[p.id].inProgress);
- const notStartedData = filteredProjects.map(p => monthData[p.id].notStarted);
+ // 灏嗗悗绔暟鎹浆鎹负鍓嶇闇�瑕佺殑鏍煎紡
+ const monthData = {};
+ processStatistics.forEach(item => {
+ // 鍋囪鍚庣杩斿洖鐨勯」鐩甀D瀛楁鏄� projectId锛岄渶瑕佸拰鍓嶇鐨� allProjects 涓殑 id 鍖归厤
+ monthData[item.id] = {
+ completed: item.completed || 0,
+ inProgress: item.inProgress || 0,
+ notStarted: item.notStarted || 0
+ };
+ });
+ // 绛涢�夐�変腑鐨勯」鐩�
+ const filteredProjects = this.allProjects.filter(p =>
+ this.selectedProjects.includes(p.id)
+ );
- this.progressChart.setOption({
- tooltip: {
- trigger: 'axis',
- axisPointer: {
- type: 'shadow'
- },
- formatter: function(params) {
- let result = params[0].name + '<br/>';
- params.forEach(param => {
- result += `${param.seriesName}: ${param.value}%<br/>`;
- });
- result += `鎬昏: ${params.reduce((sum, param) => sum + param.value, 0)}%`;
- return result;
- }
- },
- legend: {
- data: ['宸插畬鎴愪簨椤�', '杩涜涓簨椤�', '鏈紑濮嬩簨椤�']
- },
- grid: {
- left: '3%',
- right: '4%',
- bottom: '3%',
- containLabel: true
- },
- xAxis: {
- type: 'value',
- max: 100,
- axisLabel: {
- formatter: '{value}%'
- }
- },
- yAxis: {
- type: 'category',
- data: categories
- },
- series: [
- {
- name: '宸插畬鎴愪簨椤�',
- type: 'bar',
- stack: 'total',
- emphasis: {
- focus: 'series'
+ // 鍑嗗鍥捐〃鏁版嵁
+ const categories = filteredProjects.map(p => p.name);
+ const completedData = filteredProjects.map(p => monthData[p.id]?.completed || 0);
+ const inProgressData = filteredProjects.map(p => monthData[p.id]?.inProgress || 0);
+ const notStartedData = filteredProjects.map(p => monthData[p.id]?.notStarted || 0);
+
+ // 鏇存柊鍥捐〃閰嶇疆
+ this.progressChart.setOption({
+ tooltip: {
+ trigger: 'axis',
+ axisPointer: {
+ type: 'shadow'
+ },
+ formatter: function(params) {
+ let result = params[0].name + '<br/>';
+ params.forEach(param => {
+ result += `${param.seriesName}: ${param.value}%<br/>`;
+ });
+ // result += `鎬昏: ${params.reduce((sum, param) => sum + param.value, 0)}%`;
+ return result;
+ }
},
- data: completedData,
- itemStyle: {
- color: '#67C23A'
+ legend: {
+ data: ['宸插畬鎴愪簨椤�', '杩涜涓簨椤�', '鏈紑濮嬩簨椤�']
},
- label: {
- show: true,
- position: 'inside',
- formatter: '{c}%'
- }
- },
- {
- name: '杩涜涓簨椤�',
- type: 'bar',
- stack: 'total',
- emphasis: {
- focus: 'series'
+ grid: {
+ left: '3%',
+ right: '4%',
+ bottom: '3%',
+ containLabel: true
},
- data: inProgressData,
- itemStyle: {
- color: '#409EFF'
+ xAxis: {
+ type: 'value',
+ max: 100,
+ axisLabel: {
+ formatter: '{value}%'
+ }
},
- label: {
- show: true,
- position: 'inside',
- formatter: '{c}%'
- }
- },
- {
- name: '鏈紑濮嬩簨椤�',
- type: 'bar',
- stack: 'total',
- emphasis: {
- focus: 'series'
+ yAxis: {
+ type: 'category',
+ data: categories
},
- data: notStartedData,
- itemStyle: {
- color: '#E6A23C'
- },
- label: {
- show: true,
- position: 'inside',
- formatter: '{c}%'
- }
- }
- ]
+ series: [
+ {
+ name: '宸插畬鎴愪簨椤�',
+ type: 'bar',
+ stack: 'total',
+ emphasis: {
+ focus: 'series'
+ },
+ data: completedData,
+ itemStyle: {
+ color: '#67C23A'
+ },
+ label: {
+ show: true,
+ position: 'inside',
+ formatter: '{c}%'
+ }
+ },
+ {
+ name: '杩涜涓簨椤�',
+ type: 'bar',
+ stack: 'total',
+ emphasis: {
+ focus: 'series'
+ },
+ data: inProgressData,
+ itemStyle: {
+ color: '#409EFF'
+ },
+ label: {
+ show: true,
+ position: 'inside',
+ formatter: '{c}%'
+ }
+ },
+ {
+ name: '鏈紑濮嬩簨椤�',
+ type: 'bar',
+ stack: 'total',
+ emphasis: {
+ focus: 'series'
+ },
+ data: notStartedData,
+ itemStyle: {
+ color: '#E6A23C'
+ },
+ label: {
+ show: true,
+ position: 'inside',
+ formatter: '{c}%'
+ }
+ }
+ ]
+ });
+ }
+ }).catch(error => {
+ // 閿欒澶勭悊
+ this.progressChart.hideLoading();
+ console.error('鑾峰彇浠诲姟鐘舵�佹暟鎹け璐�:', error);
+ // 鍙互鏄剧ず閿欒鎻愮ず鎴栦娇鐢ㄩ粯璁ゆ暟鎹�
});
},
// 鏇存柊璧勯噾浣跨敤鍥捐〃鏁版嵁
updateFundChart() {
if (!this.fundChart) return;
+ getFundingStatus().then(res=> {
+ if (res.code === 200) {
+ const fundingData = res.data || [];
+ const data = {};
+ fundingData.forEach(item => {
+ // 浠呯粍瑁� SQL 鏌ヨ杩斿洖鐨� 9 涓瓧娈碉紝瀛楁鍚嶄笌 VO 涓�鑷�
+ data[item.projectId] = {
+ id: item.projectId || '', // 椤圭洰ID锛堝叧鑱旈敭锛�
+ totalInvestment: item.totalInvestment || '0', // 椤圭洰鎬绘姇璧勯
+ principal: item.principal || '0', // 椤圭洰鏈噾
+ governmentInvestmentTotal: item.governmentInvestmentTotal || '0', // 鏀垮簻鎶曡祫鎬婚
+ centralInvestmentTotal: item.centralInvestmentTotal || '0', // 涓ぎ鎶曡祫鎬婚
+ provincialInvestmentTotal: item.provincialInvestmentTotal || '0', // 鐪佺骇鎶曡祫鎬婚
+ cityInvestmentTotal: item.cityInvestmentTotal || '0', // 甯傦紙宸烇級鎶曡祫鎬婚
+ countyInvestmentTotal: item.countyInvestmentTotal || '0', // 鍘匡紙甯傘�佸尯锛夋姇璧勬�婚
+ otherInvestmentTotal: item.otherInvestmentTotal || '0', // 鍏朵粬鎶曡祫鎬婚
+ enterpriseSelfRaisedTotal: item.enterpriseSelfRaisedTotal || '0',
+ foreignInvestmentTotal: item.foreignInvestmentTotal || '0',
+ bankLoan: item.bankLoan || '0',//閾惰璐锋
+ domesticLoanTotal: item.domesticLoanTotal || '0',
+ };
+ });
+ console.log(data)
+ const filteredProjects = this.allProjects.filter(p =>
+ this.fundSelectedProjects.includes(p.id)
+ );
+ const categories = filteredProjects.map(p => p.name);
+ // console.log(categories)
+ // const allocatedData = filteredProjects.map(p => data[p.id].allocated);
+ // console.log(allocatedData)
+ // const remainingData = filteredProjects.map(p => data[p.id].remaining);
+ // console.log(remainingData)
- const filteredProjects = this.allProjects.filter(p =>
- this.fundSelectedProjects.includes(p.id)
- );
+ // 璧勯噾鏉ユ簮鏁版嵁 鏈噾
+ const projectCapitalData = filteredProjects.map(p =>
+ data[p.id].principal || 0
+ );
+ //鎬绘姇璧�
+ const totalInvestmentData = filteredProjects.map(p =>
+ data[p.id].totalInvestment || 0
+ );
+ // 鍘匡紙甯傘�佸尯锛夋姇璧勬�婚
+ const countyInvestmentData = filteredProjects.map(p =>
+ data[p.id].countyInvestmentTotal || 0
+ );
+ // 甯傦紙宸烇級鎶曡祫鎬婚
+ const cityInvestmentTotalData = filteredProjects.map(p =>
+ data[p.id].cityInvestmentTotal || 0)
+ // 鐪佺骇鎶曡祫鎬婚
+ const provincialInvestmentTotalData = filteredProjects.map(p =>
+ data[p.id].provincialInvestmentTotal || 0)
+ //鏀垮簻鎶曡祫
+ const governmentInvestmentData = filteredProjects.map(p =>
+ data[p.id].governmentInvestmentTotal || 0
+ );
+ //鍏朵粬鎶曡祫
+ const otherInvestmentData = filteredProjects.map(p =>
+ data[p.id].otherInvestmentTotal || 0
+ );
+ //涓ぎ
+ const centralInvestmentTotalData = filteredProjects.map(p =>
+ data[p.id].centralInvestmentTotal || 0
+ );
+ //浼佷笟鑷
+ const enterpriseSelfRaisedTotalData = filteredProjects.map(p =>
+ data[p.id].enterpriseSelfRaisedTotal || 0
+ );
+ //澶栧晢鎶曡祫
+ const foreignInvestmentTotalData = filteredProjects.map(p =>
+ data[p.id].foreignInvestmentTotal || 0
+ );
+ const bankLoanData = filteredProjects.map(p =>
+ data[p.id].bankLoan || 0
+ );
+ const domesticLoanTotalData = filteredProjects.map(p =>
+ data[p.id].domesticLoanTotal || 0
+ );
- const categories = filteredProjects.map(p => p.name);
- const allocatedData = filteredProjects.map(p => this.fundData[p.id].allocated);
- const remainingData = filteredProjects.map(p => this.fundData[p.id].remaining);
- // 璧勯噾鏉ユ簮鏁版嵁
- const projectCapitalData = filteredProjects.map(p =>
- this.fundData[p.id].sources.projectCapital || 0
- );
- const countyInvestmentData = filteredProjects.map(p =>
- this.fundData[p.id].sources.countyInvestment || 0
- );
- const otherInvestmentData = filteredProjects.map(p =>
- this.fundData[p.id].sources.otherInvestment || 0
- );
- const governmentInvestmentData = filteredProjects.map(p =>
- this.fundData[p.id].sources.governmentInvestment || 0
- );
+ this.fundChart.setOption({
+ tooltip: {
+ trigger: 'axis',
+ confine: true,
+ axisPointer: {
+ type: 'shadow'
+ },
+ zIndex: 9999,
- this.fundChart.setOption({
- tooltip: {
- trigger: 'axis',
- axisPointer: {
- type: 'shadow'
- },
- formatter: function(params) {
- let result = params[0].name + '<br/>';
- // 璧勯噾鎷ㄤ粯鍜屽墿浣�
- result += `璧勯噾鎷ㄤ粯: ${params[0].value}涓囧厓<br/>`;
- result += `鍓╀綑閲戦: ${params[1].value}涓囧厓<br/>`;
- result += `鎬婚噾棰�: ${params[0].value + params[1].value}涓囧厓<br/>`;
- result += `瀹屾垚鎶曡祫: ${params[0].axisValueLabel}涓囧厓<br/><br/>`;
-
- // 璧勯噾鏉ユ簮
- result += '<strong>璧勯噾鏉ユ簮鏋勬垚:</strong><br/>';
- result += `椤圭洰鏈噾: ${params[2].value}涓囧厓<br/>`;
- result += `鍘�(甯傘�佸尯)鎶曡祫: ${params[3].value}涓囧厓<br/>`;
- result += `鍏朵粬鎶曡祫: ${params[4].value}涓囧厓<br/>`;
- result += `鏀垮簻鎶曡祫: ${params[5].value}涓囧厓<br/>`;
-
- return result;
- }
- },
- legend: {
- data: ['鍓╀綑閲戦', '璧勯噾鎷ㄤ粯', '椤圭洰鏈噾', '鍘�(甯傘�佸尯)鎶曡祫', '鏀垮簻鎶曡祫', '鍏朵粬鎶曡祫']
- },
- grid: {
- top: '30%',
- left: '3%',
- right: '4%',
- bottom: '5%',
- containLabel: true
- },
- xAxis: {
- type: 'category',
- data: categories,
- axisLabel: {
- interval: 0,
- rotate: 30
- }
- },
- yAxis: {
- type: 'value',
- name: '閲戦(涓囧厓)'
- },
- series: [
- {
- name: '璧勯噾鎷ㄤ粯',
- type: 'bar',
- stack: 'total',
- emphasis: {
- focus: 'series'
+ formatter: function(params) {
+ let result = params[0].name + '<br/>';
+ // 璧勯噾鎷ㄤ粯鍜屽墿浣�
+ // result += `璧勯噾鎷ㄤ粯: ${params[0].value}涓囧厓<br/>`;
+ // result += `鍓╀綑閲戦: ${params[1].value}涓囧厓<br/>`;
+ const value1 = Number(params[0].value) || 0;
+ const value2 = Number(params[1].value) || 0;
+ result += `鎬婚噾棰�: ${value1 + value2}涓囧厓<br/>`;
+ // result += `瀹屾垚鎶曡祫: ${params[0].axisValueLabel}涓囧厓<br/><br/>`;
+ //
+ // // 璧勯噾鏉ユ簮
+ result += '<strong>璧勯噾鏉ユ簮鏋勬垚:</strong><br/>';
+ result += `椤圭洰鏈噾: ${params[0].value}涓囧厓<br/>`;
+ result += `鍘�(甯傘�佸尯)鎶曡祫: ${params[2].value}涓囧厓<br/>`;
+ result += `甯傦紙宸烇級鎶曡祫: ${params[3].value}涓囧厓<br/>`;
+ result += `鐪佺骇鎶曡祫: ${params[4].value}涓囧厓<br/>`;
+ result += `涓ぎ鎶曡祫: ${params[5].value}涓囧厓<br/>`;
+ result += `鏀垮簻鎶曡祫: ${params[6].value}涓囧厓<br/>`;
+ result += `鍏朵粬鎶曡祫: ${params[7].value}涓囧厓<br/>`;
+ result += `浼佷笟鑷: ${params[8].value}涓囧厓<br/>`;
+ result += `澶栧晢鎶曡祫: ${params[9].value}涓囧厓<br/>`;
+ result += `閾惰璐锋: ${params[10].value}涓囧厓<br/>`;
+ result += `鍥藉唴璐锋: ${params[11].value}涓囧厓<br/>`;
+ return result;
+ }
},
- data: allocatedData,
- itemStyle: {
- color: '#409EFF'
+ legend: {
+ data: [
+ // '鍓╀綑閲戦', '璧勯噾鎷ㄤ粯',
+ '椤圭洰鏈噾','椤圭洰鎬绘姇璧�', '鍘�(甯傘�佸尯)鎶曡祫','甯傦紙宸烇級鎶曡祫','鐪佺骇鎶曡祫','涓ぎ鎶曡祫', '鏀垮簻鎶曡祫', '鍏朵粬鎶曡祫',
+ '浼佷笟鑷', '澶栧晢鎶曡祫', '閾惰璐锋', '鍥藉唴璐锋',]
},
- label: {
- show: true,
- position: 'inside',
- formatter: '{c}'
- }
- },
- {
- name: '鍓╀綑閲戦',
- type: 'bar',
- stack: 'total',
- emphasis: {
- focus: 'series'
+ grid: {
+ top: '30%',
+ left: '3%',
+ right: '4%',
+ bottom: '5%',
+ containLabel: true
},
- data: remainingData,
- itemStyle: {
- color: '#E6A23C'
+ xAxis: {
+ type: 'category',
+ data: categories,
+ axisLabel: {
+ interval: 0,
+ rotate: 30
+ }
},
- label: {
- show: true,
- position: 'inside',
- formatter: '{c}'
- }
- },
- {
- name: '椤圭洰鏈噾',
- type: 'bar',
- stack: 'sources',
- emphasis: {
- focus: 'series'
+ yAxis: {
+ type: 'value',
+ name: '閲戦(涓囧厓)'
},
- data: projectCapitalData,
- itemStyle: {
- color: '#67C23A'
- }
- },
- {
- name: '鍘�(甯傘�佸尯)鎶曡祫',
- type: 'bar',
- stack: 'sources',
- emphasis: {
- focus: 'series'
- },
- data: countyInvestmentData,
- itemStyle: {
- color: '#F56C6C'
- }
- },
- {
- name: '鍏朵粬鎶曡祫',
- type: 'bar',
- stack: 'sources',
- emphasis: {
- focus: 'series'
- },
- data: otherInvestmentData,
- itemStyle: {
- color: '#909399'
- }
- },
- {
- name: '鏀垮簻鎶曡祫',
- type: 'bar',
- stack: 'sources',
- emphasis: {
- focus: 'series'
- },
- data: governmentInvestmentData,
- itemStyle: {
- color: '#8E44AD'
- }
- }
- ]
+ series: [
+ {
+ name: '椤圭洰鏈噾',
+ type: 'bar',
+ stack: 'sources',
+ emphasis: {
+ focus: 'series'
+ },
+ data: projectCapitalData,
+ itemStyle: {
+ color: '#42B983' // 涓荤豢鑹诧細椤圭洰鏍稿績鑷湁璧勯噾
+ }
+ },
+ {
+ name: '椤圭洰鎬绘姇璧�',
+ type: 'bar',
+ stack: 'sources',
+ emphasis: {
+ focus: 'series'
+ },
+ data: totalInvestmentData,
+ itemStyle: {
+ color: '#36CFC9' // 闈掔豢鑹诧細鎬绘姇璧勬眹鎬绘暟鎹�
+ }
+ },
+ {
+ name: '鍘�(甯傘�佸尯)鎶曡祫',
+ type: 'bar',
+ stack: 'sources',
+ emphasis: {
+ focus: 'series'
+ },
+ data: countyInvestmentData,
+ itemStyle: {
+ color: '#A0D911' // 娴呴粍缁胯壊锛氬幙绾ф姇璧�
+ }
+ },
+ {
+ name: '甯傦紙宸烇級鎶曡祫',
+ type: 'bar',
+ stack: 'sources',
+ emphasis: {
+ focus: 'series'
+ },
+ data: cityInvestmentTotalData,
+ itemStyle: {
+ color: '#7CB305' // 浜豢鑹诧細甯傚窞绾ф姇璧�
+ }
+ },
+ {
+ name: '鐪佺骇鎶曡祫',
+ type: 'bar',
+ stack: 'sources',
+ emphasis: {
+ focus: 'series'
+ },
+ data: provincialInvestmentTotalData,
+ itemStyle: {
+ color: '#40A9FF' // 涓摑鑹诧細鐪佺骇鎶曡祫
+ }
+ },
+ {
+ name: '涓ぎ鎶曡祫',
+ type: 'bar',
+ stack: 'sources',
+ emphasis: {
+ focus: 'series'
+ },
+ data: centralInvestmentTotalData,
+ itemStyle: {
+ color: '#1890FF' // 娣辫摑鑹诧細涓ぎ鎶曡祫锛堝眰绾ф渶楂橈級
+ }
+ },
+ {
+ name: '鏀垮簻鎶曡祫',
+ type: 'bar',
+ stack: 'sources',
+ emphasis: {
+ focus: 'series'
+ },
+ data: governmentInvestmentData,
+ itemStyle: {
+ color: '#8E44AD' // 绱壊锛氭斂搴滄姇璧勬�婚锛堟眹鎬婚」锛�
+ }
+ },{
+ name: '鍏朵粬鎶曡祫',
+ type: 'bar',
+ stack: 'sources',
+ emphasis: {
+ focus: 'series'
+ },
+ data: otherInvestmentData,
+ itemStyle: {
+ color: '#909399' // 娣辩伆鑹诧細鍏朵粬鎶曡祫
+ }
+ },
+ {
+ name: '浼佷笟鑷',
+ type: 'bar',
+ stack: 'sources',
+ emphasis: {
+ focus: 'series'
+ },
+ data: enterpriseSelfRaisedTotalData,
+ itemStyle: {
+ color: '#e6cb6d' // 娣辩伆鑹诧細鍏朵粬鎶曡祫
+ }
+ },
+ {
+ name: '澶栧晢鎶曡祫',
+ type: 'bar',
+ stack: 'sources',
+ emphasis: {
+ focus: 'series'
+ },
+ data: foreignInvestmentTotalData,
+ itemStyle: {
+ color: '#f443b9' // 娣辩伆鑹诧細鍏朵粬鎶曡祫
+ }
+ },{
+ name: '閾惰璐锋',
+ type: 'bar',
+ stack: 'sources',
+ emphasis: {
+ focus: 'series'
+ },
+ data: bankLoanData,
+ itemStyle: {
+ color: '#bd5fd8' // 娣辩伆鑹诧細鍏朵粬鎶曡祫
+ }
+ },{
+ name: '鍥藉唴璐锋',
+ type: 'bar',
+ stack: 'sources',
+ emphasis: {
+ focus: 'series'
+ },
+ data: domesticLoanTotalData,
+ itemStyle: {
+ color: '#4373d3' // 娣辩伆鑹诧細鍏朵粬鎶曡祫
+ }
+ }
+ ]
+ });
+ this.fundChart.on('click', (params) => { // 杩欓噷鏀逛负绠ご鍑芥暟
+ const clickedProject = filteredProjects[params.dataIndex];
+ const projectId = clickedProject ? clickedProject.id : '鏃�';
+ const audit = 1;
+ // 姝ゆ椂 this 鎸囧悜 Vue 缁勪欢锛屽彲姝e父璁块棶 $router
+ this.$router.push({
+ path: '/projectEngineering/project/ProjectDetails',
+ query: { projectId: projectId, disabled: 'true', audit: audit }
+ });
+ });
+ }
});
- },
+
+ },
+ removeStore() {
+ localStorage.removeItem("projectForm")
+ localStorage.removeItem("investmentForm")
+ localStorage.removeItem("investmentFundsForm")
+ localStorage.removeItem("legalPersonForm")
+ localStorage.removeItem("policyInfoForm")
+ localStorage.removeItem("documentsInfoForm")
+ },
// 鏇存柊鎵�鏈夊浘琛�
updateCharts() {
this.updateProgressChart();
@@ -736,7 +876,28 @@
return map[status] || '';
},
handleTaskDetail(task) {
- this.$message.info(`鏌ョ湅浠诲姟璇︽儏: ${task.taskName}`);
+ console.log(task)
+ const queryParams= {
+ taskName: '',
+ taskType: 'todo',
+ pageSize: 5,
+ currentPage: 1,
+ projectId: null,
+ processDefId: null,
+ processInsId: null,
+ deployId: null,
+ processName: '' // 娴佺▼鍚嶇О
+ }
+ this.$router.push({ path: '/flowable/task/myProcess/detail/index',
+ query: {
+ projectName: task.checkPointInfo.projectName,
+ flowName: task.checkPointInfo.processName,
+ procInsId: task.checkPointInfo.processInstanceId,
+ deployId: task.checkPointInfo.deployId,
+ taskId: task.id,
+ projectId: task.checkPointInfo.id,
+ goBackParams: queryParams
+ }})
},
showDetail() {
this.$message.info(`鏌ョ湅${this.selectedMonth}鏈堜唤鐨勯」鐩繘搴﹁鎯卄);
diff --git a/src/views/workbench.vue b/src/views/workbench.vue
index ce8c638..1d02a08 100644
--- a/src/views/workbench.vue
+++ b/src/views/workbench.vue
@@ -3,7 +3,7 @@
<!-- 椤堕儴瀵艰埅鏍� -->
<div class="top-navbar">
<div class="welcome-message">
- <h2>鏃╁畨锛寋{ this.$store.state.user.name }}锛�</h2>
+ <h2>{{ getCurrentTimePeriod() }}锛寋{ this.$store.state.user.name }}锛�</h2>
<p>浠婂ぉ鏄瘂{ currentDate }}锛岀鎮ㄥ伐浣滄剦蹇紒</p>
</div>
<div class="quick-stats">
@@ -16,8 +16,8 @@
<span class="stat-label">浠婃棩鏃ョ▼</span>
</div>
<div class="stat-item">
- <span class="stat-number">{{ unreadMessages }}</span>
- <span class="stat-label">鏈娑堟伅</span>
+ <span class="stat-number">{{ totalActiveTasks }}</span>
+ <span class="stat-label">浠婃棩澶勭悊</span>
</div>
</div>
<div class="user-profile">
@@ -52,15 +52,15 @@
<el-menu-item
v-for="project in projects"
:key="project.id"
- :index="project.id">
+ :index="project.id +''">
<i class="el-icon-folder"></i>
- <span slot="title" class="project-name" :title="project.name">
- {{ project.name }}
+ <span slot="title" class="project-name" :title="project.projectName">
+ {{ project.projectName }}
</span>
</el-menu-item>
</el-menu>
<div class="project-actions">
- <el-button type="primary" icon="el-icon-plus" size="small">鏂板缓椤圭洰</el-button>
+ <el-button type="primary" icon="el-icon-plus" size="small" @click="addProject">鏂板缓椤圭洰</el-button>
</div>
</div>
</div>
@@ -71,73 +71,88 @@
<div class="task-section">
<div class="section-header">
<h3>寰呭姙浠诲姟</h3>
- <el-button type="text" icon="el-icon-refresh">鍒锋柊</el-button>
+ <el-button type="text" icon="el-icon-refresh" @click="getWaitTaskList()" :disabled="waitTaskRefreshing">鍒锋柊</el-button>
</div>
- <el-table
- :data="tasks"
- border
- style="width: 100%"
+ <div>
+ <el-table
+ v-loading="loading"
+ :data="tasks"
+ border
+ style="width: 100%"
>
- <el-table-column
- prop="name"
- label="浠诲姟鍚嶇О"
- width="240">
- </el-table-column>
- <el-table-column
- prop="project"
- label="鎵�灞為」鐩�"
- show-overflow-tooltip
- width="300">
- </el-table-column>
- <el-table-column
- prop="startTime"
- label="寮�濮嬫椂闂�"
- align="center"
- width="160">
- </el-table-column>
- <el-table-column
- prop="deadline"
- label="鎴鏃堕棿"
- align="center"
- width="160">
- </el-table-column>
- <el-table-column
- prop="status"
- label="鐘舵��"
- align="center"
- width="100">
- <template slot-scope="scope">
- <el-tag :type="scope.row.status === '寰呭畬鎴�' ? 'success' : 'warning'" size="small">
- {{ scope.row.status }}
- </el-tag>
- </template>
- </el-table-column>
- <el-table-column
- label="鎿嶄綔"
- fixed="right"
- width="120">
- <template slot-scope="scope">
- <el-button size="mini" @click="handleTaskEdit(scope.row)">鍔炵悊</el-button>
- </template>
- </el-table-column>
- </el-table>
+ <el-table-column
+ prop="taskName"
+ label="浠诲姟鍚嶇О"
+ width="240">
+ </el-table-column>
+ <el-table-column
+ prop="checkPointInfo.projectName"
+ label="鎵�灞為」鐩�"
+ show-overflow-tooltip
+ width="300">
+ </el-table-column>
+ <el-table-column
+ prop="startTime"
+ label="寮�濮嬫椂闂�"
+ align="center"
+ width="160">
+ </el-table-column>
+ <el-table-column
+ prop="endTime"
+ label="鎴鏃堕棿"
+ align="center"
+ width="160">
+ </el-table-column>
+ <el-table-column
+ prop="status"
+ label="鐘舵��"
+ align="center"
+ width="100">
+ <template slot-scope="scope">
+ <el-tag :type="scope.row.taskType === '寰呭畬鎴�' ? 'success' : 'warning'" size="small">
+ {{ scope.row.taskType }}
+ </el-tag>
+ </template>
+ </el-table-column>
+ <el-table-column
+ label="鎿嶄綔"
+ fixed="right"
+ >
+ <template slot-scope="scope">
+ <el-button size="mini" @click="handleTaskEdit(scope.row)">鍔炵悊</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ </div>
+
</div>
<!-- 椤圭洰鍔炵悊鏃ュ織 -->
<div class="log-section">
<div class="section-header">
<h3>椤圭洰鍔炵悊鏃ュ織</h3>
- <el-button type="text" icon="el-icon-refresh">鍒锋柊</el-button>
+ <el-button type="text" icon="el-icon-refresh" @click="getAuditHistoryPage" :disabled="auditHistoryRefreshing">鍒锋柊</el-button>
</div>
- <div class="log-list">
+ <div class="log-list" v-loading="auditHistoryLoading">
<div v-for="log in logs" :key="log.id" class="log-item">
<div class="log-time">{{ log.time }}</div>
<div class="log-content">
- <span class="log-project">{{ log.project }}</span>
- <span class="log-action">{{ log.action }}</span>
- <span class="log-detail">{{ log.detail }}</span>
+ <span class="log-project">{{ log.projectName }}</span>
+ <span class="log-action">{{ getAuditTypeText(log.auditType) }}</span>
+ <span class="log-detail">{{ log.content }}</span>
</div>
</div>
+
+ </div>
+ <div class="pagination-container">
+ <el-pagination
+ @current-change="auditHistoryHandleCurrentChange"
+ :current-page="auditHistoryQuery.currentPage"
+ :page-size="auditHistoryQuery.pageSize"
+ layout="total, sizes, prev, pager, next, jumper"
+ :total="auditHistoryTotal"
+ >
+ </el-pagination>
</div>
</div>
</div>
@@ -189,11 +204,12 @@
<h3>鏃ョ▼鍒楄〃</h3>
<div>
<el-button type="text" icon="el-icon-plus" @click="handleAddSchedule">鏂板</el-button>
- <el-button type="text" icon="el-icon-refresh">鍒锋柊</el-button>
+ <el-button type="text" icon="el-icon-refresh" @click="getScheduleList" :disabled="scheduleRefreshing">鍒锋柊</el-button>
</div>
</div>
<div class="schedule-list">
<el-table
+ v-loading="scheduleLoading"
:data="filteredSchedules"
style="width: 100%"
height="250">
@@ -217,40 +233,161 @@
</el-table-column>
</el-table>
</div>
+ <div class="pagination-container">
+ <el-pagination
+ @current-change="handleCurrentChange"
+ :current-page="waitTaskQuery.currentPage"
+ :page-size="waitTaskQuery.pageSize"
+ layout="total, sizes, prev, pager, next, jumper"
+ :total="waitTaskTotal"
+ >
+ </el-pagination>
+ </div>
</div>
</div>
</div>
+
+ <el-dialog
+ :title="diaLogTitle"
+ :visible.sync="scheduleDialogVisible"
+ width="500px"
+ @close="resetScheduleForm"
+ >
+ <el-form
+ ref="scheduleFormRef"
+ :model="scheduleForm"
+ :rules="scheduleRules"
+ label-width="80px"
+ >
+ <el-form-item label="閫夋嫨椤圭洰" prop="projectId">
+ <el-select
+ v-model="scheduleForm.projectId"
+ clearable
+ placeholder="閫夋嫨椤圭洰"
+ style="width: 100%"
+ >
+ <el-option
+ v-for="project in allProjects"
+ :key="project.id"
+ :label="project.name"
+ :value="project.id"
+ ></el-option>
+ </el-select>
+ </el-form-item>
+ <!-- 宸ヤ綔鍐呭 -->
+ <el-form-item label="宸ヤ綔鍐呭" prop="content">
+ <el-input
+ v-model="scheduleForm.content"
+ type="textarea"
+ placeholder="璇疯緭鍏ュ伐浣滃唴瀹�"
+ rows="3"
+ ></el-input>
+ </el-form-item>
+ <!-- 瀹屾垚鏃ユ湡 -->
+ <el-form-item label="瀹屾垚鏃ユ湡" prop="completedTime">
+ <el-date-picker
+ v-model="scheduleForm.completedTime"
+ type="datetime"
+ placeholder="璇烽�夋嫨瀹屾垚鏃ユ湡"
+ value-format="yyyy-MM-dd HH:mm:ss"
+ style="width: 100%;"
+ ></el-date-picker>
+ </el-form-item>
+
+ </el-form>
+ <template v-slot:footer>
+ <el-button @click="scheduleDialogVisible = false">鍙栨秷</el-button>
+ <el-button type="primary" @click="submitSaveSchedule">纭畾</el-button>
+ </template>
+ </el-dialog>
</div>
</template>
<script>
+import {
+ getCountAchievements,
+ getProjectList,
+ getWaitTaskList,
+ add,
+ auditHistoryPage,
+ listByDate,
+ update,
+ del,
+ countTodayTask,
+} from "@/api/workbench/workbench"
+import {getTaskIsAuditing} from "@/api/projectProcess/projectProcess";
+import {getProjectSelectList} from "@/api/index";
export default {
+
data() {
return {
+
+
+ diaLogTitle:"",
+ allProjects:[],
+ scheduleDialogVisible: false,
+ // 鏂板锛氭柊澧炴棩绋嬭〃鍗曟暟鎹紙瀵瑰簲WorkStationSchedule瀹炰綋锛�
+ scheduleForm: {
+ id:'',
+ content: '', // 宸ヤ綔鍐呭
+ completedTime: '',
+ projectId:''
+
+ },
+ // 鏂板锛氳〃鍗曟牎楠岃鍒�
+ scheduleRules: {
+ content: [
+ {required: true, message: '璇疯緭鍏ュ伐浣滃唴瀹�', trigger: 'blur'},
+ {max: 500, message: '宸ヤ綔鍐呭鏈�澶�500涓瓧绗�', trigger: 'blur'}
+ ],
+ completedTime: [
+ {required: true, message: '璇烽�夋嫨瀹屾垚鏃ユ湡', trigger: 'change'}
+ ],
+ projectId:[
+ {required:true,message: '璇烽�夋嫨椤圭洰', trigger: 'change'}
+ ]
+ },
+ queryParams: {
+ taskName: '',
+ taskType: 'todo',
+ pageSize: 5,
+ currentPage: 1,
+ projectId: null,
+ processDefId: null,
+ processInsId: null,
+ deployId: null,
+ processName: '' // 娴佺▼鍚嶇О
+ },
+ waitTaskRefreshing:false,
+ scheduleRefreshing:false,
+ auditHistoryRefreshing:false,
+ loading:false,
+ scheduleLoading:false,
+ auditHistoryLoading:false,
+ waitTaskQuery:{
+ pageSize:5,
+ currentPage:1,
+ },
+ auditHistoryQuery:{
+ pageSize:5,
+ currentPage:1,
+ },
+ waitTaskTotal:0,
+ auditHistoryTotal:0,
+ projectId:null,
+
userInfo: {
name: '寮犲伐绋嬪笀',
avatar: 'https://cube.elemecdn.com/0/88/03b0d39583f48206768a7534e55bcpng.png',
department: '椤圭洰閮�'
},
currentDate: this.formatDate(new Date()),
- todayTasks: 5,
- todaySchedules: 3,
- unreadMessages: 2,
+ todayTasks: 0,
+ todaySchedules: 0,
+ totalActiveTasks: 0,
activeProject: 'all',
- projects: [
- { id: '1', name: '灏勬椽甯傛脖鐗岄晣缁煎悎姘村埄璁炬柦寤鸿椤圭洰' },
- { id: '2', name: '灏勬椽甯傚浗瀹跺偍澶囨灄寤鸿椤圭洰锛堜竴鏈燂級' },
- { id: '3', name: '灏勬椽甯傜櫧缇借倝楦′骇涓氬缓璁鹃」鐩�' },
- { id: '4', name: '閬傚畞甯傚皠娲�2024鈥�2027骞村害涓滃寳鐗囧尯楂樻爣鍑嗗啘鐢板缓璁鹃」鐩�' },
- { id: '5', name: '灏勬椽甯傜幇浠g涓氱ず鑼冨熀鍦板缓璁鹃」鐩�' },
- ],
- tasks: [
- { id: 1, name: '瀹℃牳鏂藉伐鍥剧焊', project: '灏勬椽甯傚浗瀹跺偍澶囨灄寤鸿椤圭洰锛堜竴鏈燂級', startTime: '2025-05-05', deadline: '2025-06-15', status: '寰呭畬鎴�' },
- { id: 2, name: '閲囪喘鏉愭枡娓呭崟', project: '灏勬椽甯傜櫧缇借倝楦′骇涓氬缓璁鹃」鐩�', startTime: '2025-05-14', deadline: '2025-06-18', status: '寰呭畬鎴�' },
- { id: 3, name: '鐜板満瀹夊叏妫�鏌�', project: '閬傚畞甯傚皠娲�2024鈥�2027骞村害涓滃寳鐗囧尯楂樻爣鍑嗗啘鐢板缓璁鹃」鐩�', startTime: '2025-05-10', deadline: '2025-06-12', status: '瀹圭己涓�' },
- { id: 4, name: '椤圭洰杩涘害鎶ュ憡', project: '灏勬椽甯傜幇浠g涓氱ず鑼冨熀鍦板缓璁鹃」鐩�', startTime: '2025-05-23', deadline: '2025-06-20', status: '寰呭畬鎴�' },
- { id: 5, name: '渚涘簲鍟嗕細璁�', project: '灏勬椽甯傛脖鐗岄晣缁煎悎姘村埄璁炬柦寤鸿椤圭洰', startTime: '2025-05-14', deadline: '2025-06-14', status: '瀹圭己涓�' }
- ],
+ projects: [],
+ tasks: [],
logs: [
{ id: 1, time: '09:30', project: '灏勬椽甯傚浗瀹跺偍澶囨灄寤鸿椤圭洰锛堜竴鏈燂級', action: '鎻愪氦', detail: '鎻愪氦浜嗘柦宸ュ浘绾稿鏍哥敵璇�' },
{ id: 2, time: '10:15', project: '灏勬椽甯傜櫧缇借倝楦′骇涓氬缓璁鹃」鐩�', action: '鏇存柊', detail: '鏇存柊浜嗘潗鏂欓噰璐竻鍗�' },
@@ -259,20 +396,13 @@
{ id: 5, time: '16:45', project: '灏勬椽甯傛脖鐗岄晣缁煎悎姘村埄璁炬柦寤鸿椤圭洰', action: '瀹℃壒', detail: '瀹℃壒閫氳繃浜嗗畨鍏ㄦ柟妗�' }
],
achievements: {
- completedTasks: 128,
- avgDuration: 3.5,
- totalSchedules: 89,
- completedSchedules: 76
+ completedTasks: 0,
+ avgDuration: 0,
+ totalSchedules: 0,
+ completedSchedules: 0
},
calendarDate: new Date(),
- schedules: [
- { id: 1, date: '2025-05-10', time: '09:00', title: '椤圭洰鍚姩浼氳', project: '灏勬椽甯傚浗瀹跺偍澶囨灄寤鸿椤圭洰锛堜竴鏈燂級' },
- { id: 2, date: '2025-05-10', time: '14:00', title: '渚涘簲鍟嗘唇璋�', project: '灏勬椽甯傜櫧缇借倝楦′骇涓氬缓璁鹃」鐩�' },
- { id: 3, date: '2025-05-11', time: '10:30', title: '鐜板満鍕樺療', project: '閬傚畞甯傚皠娲�2024鈥�2027骞村害涓滃寳鐗囧尯楂樻爣鍑嗗啘鐢板缓璁鹃」鐩�' },
- { id: 4, date: '2025-05-12', time: '09:00', title: '瀹夊叏鍩硅', project: '灏勬椽甯傜幇浠g涓氱ず鑼冨熀鍦板缓璁鹃」鐩�' },
- { id: 5, date: '2025-05-12', time: '15:00', title: '杩涘害姹囨姤', project: '灏勬椽甯傛脖鐗岄晣缁煎悎姘村埄璁炬柦寤鸿椤圭洰' },
- { id: 6, date: '2025-05-15', time: '13:00', title: '璁惧楠屾敹', project: '灏勬椽甯傜櫧缇借倝楦′骇涓氬缓璁鹃」鐩�' }
- ]
+ schedules: []
}
},
computed: {
@@ -281,7 +411,242 @@
return this.schedules.filter(schedule => schedule.date === selectedDate);
}
},
+ mounted() {
+ this.initData();
+ this.initSelect();
+ this.getScheduleList();
+ this.countTodayTask();
+ this.getAuditHistoryPage();
+ },
methods: {
+ getAuditTypeText(auditType) {
+ // 鏄犲皠鍏崇郴锛氬悗绔�� 鈫� 鍓嶇姹夊瓧
+ const typeMap = {
+ Submit: '鎻愪氦',
+ Review: '瀹℃牳',
+ Reject: '椹冲洖',
+ Forward: '杞氦'
+ };
+ // 鍏滃簳锛氭湭鐭ュ�艰繑鍥炩�滄湭鐭ユ搷浣溾��
+ return typeMap[auditType] || '鏈煡鎿嶄綔';
+ },
+ countTodayTask(){
+ countTodayTask().then(res =>{
+ if (res.code === 200){
+ this.todayTasks = res.data.todayTasks;
+ this.todaySchedules = res.data.todaySchedules;
+ this.totalActiveTasks = res.data.totalActiveTasks;
+ }
+ })
+ },
+ initSelect(){
+ getProjectSelectList().then(res =>{
+ if (res.code === 200){
+ this.allProjects = Object.entries(res.data).map(([id, name]) => ({
+ id: id, // 椤圭洰ID锛堝"151"锛�
+ name: name // 椤圭洰鍚嶇О锛堝"灏勬椽甯備竾鏋楅挗鍘傜墖鍖烘鎴峰尯鏀归�犻」鐩�"锛�
+ }));
+ }
+ })
+ },
+ getScheduleList(){
+ if (this.scheduleRefreshing){
+ return
+ }
+ const form ={
+ completedTime:this.formatDateToFrontend(this.calendarDate),
+ projectId:this.activeProject
+ }
+ this.scheduleLoading = true
+ this.scheduleRefreshing = true
+ listByDate(form).then(res =>{
+ this.scheduleRefreshing = false
+ this.scheduleLoading = false
+ if (res.code === 200){
+ this.schedules = res.data;
+ }
+ })
+ },
+ formatDateToFrontend(date) {
+ if (!date) return '';
+ const d = new Date(date);
+ const year = d.getFullYear();
+ const month = (d.getMonth() + 1).toString().padStart(2, '0');
+ const day = d.getDate().toString().padStart(2, '0');
+ const hour = d.getHours().toString().padStart(2, '0');
+ const minute = d.getMinutes().toString().padStart(2, '0');
+ const second = d.getSeconds().toString().padStart(2, '0');
+ return `${year}-${month}-${day} ${hour}:${minute}:${second}`;
+ },
+ async submitSaveSchedule(){
+ this.$refs.scheduleFormRef.validate((valid, fields) => {
+ if (valid) {
+ console.log(this.scheduleForm.id)
+ if (this.scheduleForm.id === null || this.scheduleForm.id ==='' || this.scheduleForm.id === undefined){
+ const submitData = {
+ content: this.scheduleForm.content,
+ completedTime: this.formatDateToFrontend(this.scheduleForm.completedTime),
+ projectId:this.scheduleForm.projectId
+ };
+ this.$message.success('琛ㄥ崟鎻愪氦鎴愬姛锛�');
+ add(submitData).then(res =>{
+ if (res.code === 200){
+ this.scheduleDialogVisible = false;
+ this.$message.success('鏂板鏃ョ▼鎴愬姛')
+ //鍒锋柊鍒楄〃
+ this.getScheduleList();
+ }
+ })
+ }else {
+ const submitData = {
+ id:this.scheduleForm.id,
+ content: this.scheduleForm.content,
+ completedTime: this.formatDateToFrontend(this.scheduleForm.completedTime),
+ projectId:this.scheduleForm.projectId
+ };
+ this.$message.success('琛ㄥ崟鎻愪氦鎴愬姛锛�');
+ update(submitData).then(res =>{
+ if (res.code === 200){
+ this.scheduleDialogVisible = false;
+ this.$message.success('缂栬緫鏃ョ▼鎴愬姛')
+ //鍒锋柊鍒楄〃
+ this.getScheduleList();
+ }
+ })
+
+ }
+ }else {
+ const firstError = Object.values(fields)[0][0].message;
+ this.$message.error(firstError);
+ }
+
+
+ });
+ },
+ handleAddSchedule() {
+ this.resetScheduleForm();
+ this.scheduleDialogVisible = true;
+ this.diaLogTitle = "鏂板鏃ュ織"
+ },
+ handleEditSchedule(row){
+ this.resetScheduleForm();
+ this.scheduleDialogVisible = true;
+ this.diaLogTitle = "缂栬緫鏃ュ織"
+ //璧嬪��
+ this.scheduleForm.id = row.id;
+ this.scheduleForm.content = row.title;
+ this.scheduleForm.projectId = row.projectId +"";
+ this.scheduleForm.completedTime = new Date(row.completedTime);
+ console.log(row)
+ },
+ // 鏂板锛氶噸缃柊澧炶〃鍗�
+ resetScheduleForm() {
+ this.scheduleForm = {
+ if:'',
+ content: '',
+ completedTime: ''
+ };
+ // 閲嶇疆琛ㄥ崟鏍¢獙鐘舵��
+ if (this.$refs.scheduleFormRef) {
+ this.$refs.scheduleFormRef.resetFields();
+ }
+ },
+ addProject(){
+ this.$router.push({path: '/projectEngineering/project/ProjectDetails'});
+ },
+ handleSizeChange(val) {
+ this.waitTaskQuery.pageSize = val;
+ },
+ handleCurrentChange(val) {
+ this.waitTaskQuery.currentPage = val;
+ this.getWaitTaskList();
+ },
+ auditHistoryHandleCurrentChange(val) {
+ this.auditHistoryTotal.currentPage = val;
+ this.getAuditHistoryPage();
+ },
+ getAuditHistoryPage(){
+ if (this.auditHistoryRefreshing)return;
+ this.auditHistoryLoading = true;
+ const form ={
+ pageSize:this.auditHistoryQuery.pageSize,
+ currentPage:this.auditHistoryQuery.currentPage,
+ projectId:this.activeProject
+ }
+ this.auditHistoryRefreshing = true
+ auditHistoryPage(form).then(res =>{
+ this.auditHistoryLoading = false;
+ this.auditHistoryRefreshing = false;
+ if (res.code === 200){
+ this.logs = res.data;
+ this.auditHistoryTotal = res.total;
+ }
+ })
+
+ },
+ getWaitTaskList(){
+ if (this.waitTaskRefreshing) return;
+ this.waitTaskRefreshing = true;
+ const form ={
+ pageSize:this.waitTaskQuery.pageSize,
+ currentPage:this.waitTaskQuery.currentPage,
+ id:this.activeProject
+ }
+ this.loading = true;
+ getWaitTaskList(form).then(res=>{
+ this.loading = false;
+ this.waitTaskRefreshing = false;
+ if (res.code === 200){
+ this.tasks = res.data.data;
+ this.waitTaskTotal = res.data.total;
+ }
+
+ })
+ },
+ getProjectList(){
+ getProjectList().then(res =>{
+ if (res.code === 200){
+ this.projects = res.data;
+ }
+ })
+ },
+ initData() {
+ this.getProjectList();
+ this.getWaitTaskList();
+ this.getCountAchievements();
+ },
+ getCountAchievements(){
+ getCountAchievements().then(res =>{
+ // 涓汉鎴愬氨
+ if (res.code === 200){
+ this.achievements = res.data;
+ }
+ })
+
+ },
+ getCurrentTimePeriod() {
+ // 鑾峰彇褰撳墠鏃堕棿鐨勫皬鏃跺拰鍒嗛挓
+ const now = new Date();
+ const hours = now.getHours();
+
+ // 鎸夊尯闂村垽鏂�
+ if (hours >= 0 && hours < 6) {
+ // 0:00 - 5:59 涓哄噷鏅�
+ return "鍑屾櫒濂�";
+ } else if (hours >= 6 && hours < 12) {
+ // 6:00 - 11:59 涓烘棭涓�
+ return "鏃╀笂濂�";
+ } else if (hours >= 12 && hours < 14) {
+ // 12:00 - 13:59 涓轰腑鍗�
+ return "涓崍濂�";
+ } else if (hours >= 14 && hours < 18) {
+ // 14:00 - 17:59 涓轰笅鍗�
+ return "涓嬪崍濂�";
+ } else {
+ // 18:00 - 23:59 涓烘櫄涓�
+ return "鏅氫笂濂�";
+ }
+ },
// 鎴柇杩囬暱鐨勯」鐩悕绉�
truncateProjectName(name) {
const maxLength = 10; // 鏈�澶ф樉绀洪暱搴�
@@ -305,6 +670,8 @@
},
handleProjectSelect(index) {
this.activeProject = index;
+ console.log(this.activeProject)
+ this.getWaitTaskList();
// 杩欓噷鍙互娣诲姞椤圭洰绛涢�夐�昏緫
},
getPriorityType(priority) {
@@ -315,19 +682,55 @@
default: return 'info';
}
},
- handleTaskEdit(task) {
- console.log('缂栬緫浠诲姟:', task);
- this.$message.info(`寮�濮嬪鐞嗕换鍔�: ${task.name}`);
+ handleTaskEdit(row) {
+ console.log(row)
+ if (row.taskType === '瀹圭己') {
+ this.$router.push({
+ path: '/flowable/task/myProcess/send/index',
+ query: {
+ deployId: row.checkPointInfo.deployId,
+ procDefId: row.checkPointInfo.processDefinitionId,
+ procInsId: row.checkPointInfo.processInstanceId,
+ processName: row.taskName,
+ flowName: row.checkPointInfo.processName,
+ projectName: row.checkPointInfo.projectName,
+ taskId: row.id,
+ showAuditing: false,
+ projectId: row.checkPointInfo.id,
+ isWait: true,
+ goBackParams: this.queryParams
+ }
+ })
+ } else {
+ // 鏌ヨ璇ヤ换鍔℃槸鍚﹂厤缃簡闇�瑕佸鎵�
+ let params = {
+ processDefId: row.checkPointInfo.processDefinitionId,
+ taskId: row.id
+ }
+ getTaskIsAuditing(params).then(res => {
+ console.log("row",row)
+ this.$router.push({
+ path: '/flowable/task/myProcess/send/index',
+ query: {
+ deployId: row.checkPointInfo.deployId,
+ procDefId: row.checkPointInfo.processDefinitionId,
+ procInsId: row.checkPointInfo.processInstanceId,
+ processName: row.taskName,
+ flowName: row.checkPointInfo.processName,
+ projectName: row.checkPointInfo.projectName,
+ taskId: row.id,
+ showAuditing: res.data,
+ projectId: row.checkPointInfo.id,
+ isWait: false,
+ goBackParams: this.queryParams
+ }
+ })
+ })
+ }
},
getScheduleCount(date) {
const dateStr = this.formatCalendarDate(date);
return this.schedules.filter(s => s.date === dateStr).length;
- },
- handleAddSchedule() {
- this.$message.info('鏂板鏃ョ▼');
- },
- handleEditSchedule(schedule) {
- this.$message.info(`缂栬緫鏃ョ▼: ${schedule.title}`);
},
handleDeleteSchedule(schedule) {
this.$confirm('纭畾鍒犻櫎璇ユ棩绋嬪悧?', '鎻愮ず', {
@@ -335,7 +738,12 @@
cancelButtonText: '鍙栨秷',
type: 'warning'
}).then(() => {
- this.$message.success('鍒犻櫎鎴愬姛');
+ del(schedule.id).then(res =>{
+ if (res.code === 200){
+ this.$message.success('鍒犻櫎鎴愬姛锛�');
+ }
+ this.getScheduleList()
+ })
}).catch(() => {
this.$message.info('宸插彇娑堝垹闄�');
});
@@ -345,6 +753,12 @@
</script>
<style scoped>
+.pagination-container {
+ margin-top: 20px;
+ padding-right: 5px;
+ text-align: center;
+ width: 100%;
+}
.dashboard-container {
font-family: 'Helvetica Neue', Helvetica, 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', Arial, sans-serif;
height: 100vh;
@@ -453,6 +867,7 @@
}
.center-content {
+
flex: 1;
padding: 15px;
overflow-y: auto;
@@ -476,13 +891,14 @@
.task-section {
margin-bottom: 20px;
- height: 350px;
+ height: 450px;
}
.log-list {
border: 1px solid #ebeef5;
border-radius: 4px;
padding: 10px;
+ min-height: 100px;
}
.log-item {
@@ -569,7 +985,7 @@
}
.schedule-count {
- font-size: 12px;
+ font-size: 10px;
color: #1e88e5;
margin-top: 2px;
}
@@ -582,7 +998,7 @@
}
.calendar-section >>> .el-calendar-table .el-calendar-day {
- height: 40px !important; /* 璁剧疆姣忔棩鍗曞厓鏍奸珮搴� */
+ height: 45px !important; /* 璁剧疆姣忔棩鍗曞厓鏍奸珮搴� */
padding: 0 !important;
}
.calendar-section >>> .el-calendar__header {
--
Gitblit v1.8.0