@@ -198,7 +194,7 @@ const payMentRules = {
advancePayRatio: [{ required: true, message: '请输入预付款比例', trigger: 'blur' }],
balancePayRatio: [{ required: true, message: '请输入尾款比例', trigger: 'blur' }],
assuranceDepositRatio: [{ required: true, message: '请输入质保金比例', trigger: 'blur' }],
- payRatio: [{ required: true, message: '请输入付款比例', trigger: 'blur' }],
+
};
const project = computed(() => {
@@ -207,6 +203,16 @@ const project = computed(() => {
return JSON.parse(localStorage.getItem("selectedProject"))
});
+const payRatioComputed = computed({
+ get: () => {
+ const { advancePayRatio = 0, balancePayRatio = 0, assuranceDepositRatio = 0 } = form.value;
+ const total = 100 - (advancePayRatio + balancePayRatio + assuranceDepositRatio);
+ // form.value.payRatio = total;
+ return total;
+ },
+ // 只读
+ set: () => { }
+});
const checkContractType = (type) => {
contract_type.value = type;
form.value.contract_type = type;
@@ -282,10 +288,16 @@ const resetForm = () => {
}, 0);
};
const submitForm = async () => {
- console.log(payMentRef.value);
-
await payMentRef.value.validate(async (valid) => {
if (valid) {
+
+ if (payRatioComputed.value < 0) {
+
+ ElMessage.error('四项付款比例之和必须等于100%');
+ return;
+ }
+ form.value.payRatio = payRatioComputed.value;
+
// 提交付款信息逻辑
console.log('提交付款信息', form.value, fileList.value);
// 这里可以调用API提交数据
@@ -304,6 +316,7 @@ const submitForm = async () => {
}
resetForm();
ElMessage.success('合同提交成功');
+ active.value = 0; // 重置步骤
} else {
ElMessage.error('请填写完整的付款信息');
}
From ad04cff9170ea04de6484f8a58a47b575fbdd97f Mon Sep 17 00:00:00 2001
From: tcy <1193318383@qq.com>
Date: Fri, 22 Aug 2025 16:37:14 +0800
Subject: [PATCH 02/16] =?UTF-8?q?feat(largeScreen):=20=E5=A4=A7=E5=B1=8F?=
=?UTF-8?q?=E5=B1=95=E7=A4=BA=E5=8A=9F=E8=83=BD=E5=BC=80=E5=8F=91?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 新增 RevenueContractCard 组件,用于展示收入、支出等合同数据
- 实现 bottomboxconpoent 组件的通用化,支持自定义标题、数值等
- 在 centerPage 中集成 RevenueContractCard 组件,展示大屏数据
- 更新 rightPage 组件,添加实际数据请求和展示
- 优化 optionList 中的图表配置,提高图表可读性
---
src/api/largeScreen/index.js | 22 +++++
.../components/RevenueContractCard.vue | 51 +++++------
.../components/bottomboxconpoent.vue | 86 ++++++++++++-------
.../largeScreen/components/centerPage.vue | 25 ++++--
.../largeScreen/components/optionList.ts | 6 +-
.../largeScreen/components/rightPage.vue | 30 ++++---
6 files changed, 144 insertions(+), 76 deletions(-)
create mode 100644 src/api/largeScreen/index.js
diff --git a/src/api/largeScreen/index.js b/src/api/largeScreen/index.js
new file mode 100644
index 0000000..a108295
--- /dev/null
+++ b/src/api/largeScreen/index.js
@@ -0,0 +1,22 @@
+import request from '@/utils/request';
+// 合同金额
+export const totalAmount = () => {
+ return request({
+ url: '/money/big/screen/totalAmount',
+ method: 'get',
+ });
+};
+// 资金KPI
+export const monthMoney = () => {
+ return request({
+ url: '/money/big/screen/monthMoney',
+ method: 'get',
+ });
+};
+// 现金流
+export const monthCash = () => {
+ return request({
+ url: '/money/big/screen/monthCash',
+ method: 'get',
+ });
+};
diff --git a/src/views/largeScreen/components/RevenueContractCard.vue b/src/views/largeScreen/components/RevenueContractCard.vue
index 14154dc..2d52c2a 100644
--- a/src/views/largeScreen/components/RevenueContractCard.vue
+++ b/src/views/largeScreen/components/RevenueContractCard.vue
@@ -2,28 +2,21 @@
{{ title }}
-
+
- {{ formattedValue }}
+ {{ props.value }}
{{ unit }}
-
+
-
@@ -78,6 +71,10 @@ const props = defineProps({
customStyles: {
type: Object,
default: () => ({})
+ },
+ showIcon: {
+ type: Boolean,
+ default: false
}
});
@@ -103,22 +100,26 @@ const trendText = computed(() => {
display: flex;
flex-direction: column;
justify-content: space-between;
- padding: 20px;
+ padding: 35px 10px;
box-sizing: border-box;
border: 1px solid rgba(29, 214, 255, 0.1);
border-radius: 4px; // 增加轻微圆角,提升视觉效果
-
+ text-align: center;
+
+
&__title {
font-size: 14px;
color: #8FABBF;
line-height: 20px;
}
-
+
&__value-container {
- display: flex;
+ // display: flex;
align-items: baseline;
+ // align-items: center;
+ // flex-direction: column;
}
-
+
&__value {
font-size: 24px;
color: #fff;
@@ -126,34 +127,34 @@ const trendText = computed(() => {
margin-right: 5px;
font-weight: bold;
}
-
+
&__unit {
color: #8FABBF;
font-size: 14px;
}
-
+
&__footer {
display: flex;
justify-content: space-between;
align-items: center;
}
-
+
&__trend {
display: flex;
align-items: center;
}
-
+
&__trend-icon {
width: 12px;
height: 12px;
margin-right: 4px;
}
-
+
&__trend-text {
font-size: 14px;
color: #8FABBF;
}
-
+
&__badge {
width: 40px;
height: 40px;
diff --git a/src/views/largeScreen/components/bottomboxconpoent.vue b/src/views/largeScreen/components/bottomboxconpoent.vue
index 6735331..7c2b9e7 100644
--- a/src/views/largeScreen/components/bottomboxconpoent.vue
+++ b/src/views/largeScreen/components/bottomboxconpoent.vue
@@ -1,45 +1,65 @@
-
-
收入合同
-
- 205,805.17
- 万元
-
-
-
-
-
- 成本率
-
+
+
{{ title }}
+
+ {{ value }}
+ {{ unit }}
+
+
+
+
+ {{ period }}
+
+
\ No newline at end of file
diff --git a/src/views/largeScreen/components/centerPage.vue b/src/views/largeScreen/components/centerPage.vue
index aee49f0..c70df28 100644
--- a/src/views/largeScreen/components/centerPage.vue
+++ b/src/views/largeScreen/components/centerPage.vue
@@ -16,14 +16,19 @@
-->
-
+ badgeIcon="top4" period="较上月" /> -->
+
+
+
+
+