From d77fa4b6240cb0894feb13b2d543cfd1172e6631 Mon Sep 17 00:00:00 2001
From: yanfeiyong <2060201549@qq.com>
Date: Mon, 12 May 2025 16:26:42 +0800
Subject: [PATCH] =?UTF-8?q?=E6=B5=8B=E8=AF=95=E5=86=85=E5=AE=B9=E7=9A=84?=
=?UTF-8?q?=E9=A1=B5=E9=9D=A2?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../ProjectDetails/Companyenter.vue | 30 +-
.../components/ProjectDetails/Months.vue | 425 ++++++++------
src/views/components/analysis/ndwcqk.vue | 136 ++++-
src/views/components/analysis/yuedutouzi.vue | 208 +++++++
src/views/login.vue | 19 +-
src/views/statistics/1.vue | 481 ++++++++--------
src/views/statistics/2.vue | 545 +++++++++---------
src/views/statistics/index.vue | 45 +-
8 files changed, 1125 insertions(+), 764 deletions(-)
create mode 100644 src/views/components/analysis/yuedutouzi.vue
diff --git a/src/views/components/ProjectDetails/Companyenter.vue b/src/views/components/ProjectDetails/Companyenter.vue
index 1fb3826..ad207c3 100644
--- a/src/views/components/ProjectDetails/Companyenter.vue
+++ b/src/views/components/ProjectDetails/Companyenter.vue
@@ -74,7 +74,7 @@
- {{ scope.row.name }}
+ {{ scope.row.name }}
@@ -152,8 +152,8 @@
-
-
-
-
-
-
- {{ scope.row.status }}
-
-
-
-
-
- {{ scope.row.monthDoneAmount }}
-
-
-
-
-
- {{ scope.row.totalDoneAmount }}
-
-
-
-
-
- {{ scope.row.cumulativeArea }}
-
-
-
-
-
- {{ scope.row.xmjzxq }}
-
-
-
-
- 保存
- 编辑
+
+
+
+
+
+ 暂无数据
+
+
+
+
+
+
+
+
+ {{ item.month }}
+
+
+
+
+
+ {{ item.status }}
+
+
+
+
+
+
+
+
+ {{ item.monthDoneAmount }}
+
+
+
+
+
+
+
+
+
+ {{ item.totalDoneAmount }}
+
+
+
+
+
+
+
+
+
+ {{ item.cumulativeArea }}
+
+
+
+
+
+
+
+
+
+ {{ formattedXmjzxq(item.xmjzxq) }}
+
+
+
+
+
+
编辑
+
保存
删除
-
-
-
-
-
-
-
+ @click="handleDelete(item)">删除
+
+
-
-
+
+
@@ -106,7 +137,7 @@
-
+
@@ -123,99 +154,139 @@
确 定
+
+
@@ -347,13 +418,7 @@ export default {
width: 100%;
background-color: #FFFFFF;
box-shadow: 0rem 0.13rem 0.63rem 0rem rgba(177, 177, 177, 0.1);
- border-radius: 0.5rem 0.5rem 0.5rem 0.5rem;
-}
-
-
-.content {
- padding: 1rem;
- display: flex;
+ border-radius: 0.5rem;
}
.containertop {
@@ -378,44 +443,64 @@ export default {
}
.topleft span {
- width: auto;
- height: 1rem;
font-family: aliregular;
font-weight: 500;
font-size: 1rem;
color: #3D424C;
line-height: 1rem;
- text-align: right;
- font-style: normal;
- text-transform: none;
}
-.picturediv {
- width: 18.31rem;
- height: 25.31rem;
- background-color: lightblue;
+.content {
+ padding: 1rem 1rem 1rem 2rem;
}
-.descriptionsdiv {
+/* 自定义表格样式 */
+.custom-table-container {
width: 100%;
- margin-left: 1rem;
- height: auto;
+ border: 1px solid #EBEEF5;
+ overflow: hidden;
}
-.two-row-item {
- height: 20rem;
+.custom-table-header {
+ display: flex;
+ background-color: #f5f7fa;
+ /* font-weight: bold; */
+ font-size: 0.88rem;
+ padding: 0.5rem 0;
}
-.block {
- width: 100%;
+.custom-table-body {
+ max-height: 14rem;
+ overflow-y: auto;
+ font-size: 0.88rem;
+ padding-right: 0.5rem;
+}
+
+.custom-table-row {
display: flex;
- justify-content: space-between;
- margin-top: 1rem;
+ align-items: center;
+ padding: 0.5rem 0;
+ border-bottom: 1px solid #EBEEF5;
}
-.no-data {
+.table-cell {
+ flex: 1;
text-align: center;
- padding: 2rem;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ padding: 0 0.5rem;
+}
+
+.no-data-row {
+ text-align: center;
+ padding: 1rem 0;
color: #999;
+ font-size: 0.875rem;
+}
+.yuedu{
+ width: 100%;
+ height: 100%;
+ padding: 0rem 1rem 1rem 2rem;
}
\ No newline at end of file
diff --git a/src/views/components/analysis/ndwcqk.vue b/src/views/components/analysis/ndwcqk.vue
index 454f009..ca4b95d 100644
--- a/src/views/components/analysis/ndwcqk.vue
+++ b/src/views/components/analysis/ndwcqk.vue
@@ -3,25 +3,49 @@
时间截止至2025年2月
+
+
-
+
-
-
+
+ {{ item.completed }}
+
-
+
+ {{ item.remaining }}
+
-
+
+ }">
+
+
+
+
+ {{ item.target }}
@@ -33,14 +57,15 @@ export default {
data() {
const currentYear = new Date().getFullYear();
return {
- // 示例数据:你可以替换成接口获取的真实数据
progressData: [
- { year: currentYear, completed: 950, target: 900, remaining: 50 },
- { year: currentYear - 1, completed: 800, target: 800, remaining: 0 },
- { year: currentYear - 2, completed: 750, target: 700, remaining: 0 },
- { year: currentYear - 3, completed: 500, target: 600, remaining: 100 },
+ { year: currentYear, completed: 0, target: 0, remaining: 0 },
+ { year: currentYear - 1, completed: 25, target: 65, remaining: 31 },
+ { year: currentYear - 2, completed: 25, target: 55, remaining: 30 },
+ { year: currentYear - 3, completed: 25, target: 39, remaining: 14 },
+ { year: currentYear - 4, completed: 25, target: 31, remaining: 6 },
+ { year: currentYear - 5, completed: 21, target: 22, remaining: 1 },
],
- bufferZone: 50
+ bufferZone: 3
};
},
methods: {
@@ -51,19 +76,28 @@ export default {
// 计算已完成百分比(不超过目标+缓冲)
completedWidth(item) {
const max = item.target + this.bufferZone;
+
+ if (max === 0) return '0%'; // 如果目标也是 0,就不显示进度
+
const value = Math.min(item.completed, max);
- return `${(value / max) * 100}%`;
+ const percentage = (value / max) * 100;
+
+ // 如果 completed 是 0,但 target > 0,则显示最小宽度 1%
+ return `${item.completed > 0 ? percentage : 15}%`;
},
// 缓冲区固定比例
bufferWidth(item) {
const max = item.target + this.bufferZone;
- return `${(this.bufferZone / max) * 100}%`;
+ const percentage = (this.bufferZone / max) * 100;
+ return `${percentage > 0 ? percentage : 1}%`;
},
// 剩余部分
remainingWidth(item) {
const max = item.target + this.bufferZone;
const remaining = Math.max(0, max - item.completed);
- return `${(remaining / max) * 100}%`;
+ const percentage = (remaining / max) * 100;
+
+ return `${percentage > 0 ? percentage : 1}%`;
}
}
};
@@ -75,7 +109,8 @@ export default {
height: 100%;
overflow: auto;
}
-.top{
+
+.top {
width: 100%;
display: flex;
margin-bottom: 10px;
@@ -83,8 +118,12 @@ export default {
color: gray;
justify-content: flex-end;
}
+
.year-progress {
margin-bottom: 1.5rem;
+ width: 100%;
+ display: flex;
+ gap: 10px;
}
.header {
@@ -95,6 +134,7 @@ export default {
}
.progress-bar {
+ width: 82%;
height: 1rem;
border-radius: 0.5rem;
background-color: #e0e0e0;
@@ -119,4 +159,66 @@ export default {
/* 淡蓝色 - 未完成 */
height: 100%;
}
+
+.legend {
+ width: 100%;
+ padding-left: 50%;
+ display: flex;
+ justify-content: space-between;
+ margin-bottom: 0.5rem;
+}
+
+.legend-item {
+ display: flex;
+ align-items: center;
+ font-size: 0.75rem;
+ color: #666;
+}
+
+.legend-color {
+ width: 12px;
+ height: 12px;
+ border-radius: 50%;
+ margin-right: 1rem;
+}
+
+.completed-color {
+ background-color: #409EFF;
+ /* 已完成颜色 */
+}
+
+.buffer-color {
+ background-color: #f0f0f0;
+ /* 年度目标颜色 */
+}
+
+.remaining-color {
+ background-color: #87CEFA;
+ /* 未完成颜色 */
+}
+
+.progress-bar {
+ position: relative;
+ height: 1rem;
+ display: flex;
+ align-items: center;
+ /* 垂直居中 */
+}
+
+.progress-bar div {
+ position: relative;
+ text-align: center;
+ color: white;
+ /* 文字颜色 */
+ font-size: 0.75rem;
+ overflow: hidden;
+}
+
+.progress-text {
+ position: absolute;
+ left: 50%;
+ top: 50%;
+ transform: translate(-50%, -50%);
+ white-space: nowrap;
+}
\ No newline at end of file
diff --git a/src/views/components/analysis/yuedutouzi.vue b/src/views/components/analysis/yuedutouzi.vue
new file mode 100644
index 0000000..bd76001
--- /dev/null
+++ b/src/views/components/analysis/yuedutouzi.vue
@@ -0,0 +1,208 @@
+