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