优化项目管理
This commit is contained in:
1 parent
a26c98b92b
commit
4ab5effce6
10 files changed
+434
-158
No files matched your search
@@ -454,7 +454,7 @@ watch(
|
||||
}
|
||||
);
|
||||
|
||||
/** 选择签订日期:生效日期为空时默认带入(生效日期仍可手动修改,改过则不再被覆盖) */
|
||||
/** 签订日期兜底(编辑历史数据/程序赋值):生效日期为空时带入签订日期 */
|
||||
watch(
|
||||
() => form.sign_date,
|
||||
(nv) => {
|
||||
@@ -462,9 +462,13 @@ watch(
|
||||
}
|
||||
);
|
||||
|
||||
/** 签订日期变更(用户操作):自动带入生效日期 */
|
||||
/**
|
||||
* 签订日期变更(用户操作):生效日期始终同步为签订日期。
|
||||
* 生效日期此后仍可单独调整;但签订日期再次变化时会重新同步,
|
||||
* 保持「生效日期默认等于签订日期」的口径。
|
||||
*/
|
||||
function onSignDateChange(val) {
|
||||
if (val && !form.effective_date) form.effective_date = val;
|
||||
if (val) form.effective_date = val;
|
||||
}
|
||||
|
||||
/** 合同形式文案:2双方 3三方 4四方 */
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
<div class="contract-payback">
|
||||
<div class="section-head">
|
||||
<span class="section-title">回款计划</span>
|
||||
<!-- 回款已收齐(进度 100%)时不可再新建回款计划 -->
|
||||
<el-tooltip :disabled="!paidOff" content="回款已全部完成(进度 100%),不可再新建回款计划" placement="top">
|
||||
<span class="btn-wrap">
|
||||
<el-button type="primary" size="small" :icon="Plus" :disabled="paidOff" @click="openCreate">
|
||||
@@ -88,9 +89,18 @@
|
||||
<span>已回款:<b class="success">¥{{ formatMoney(progressSummary.total_received) }}</b></span>
|
||||
<span>待回款:<b class="warning">¥{{ formatMoney((progressSummary.total_planned || 0) - (progressSummary.total_received || 0)) }}</b></span>
|
||||
</div>
|
||||
<el-tooltip :disabled="list.length > 0" content="回款进度以回款计划为先导条件,请先新建回款计划" placement="top">
|
||||
<!-- 无回款计划时不可登记(先导条件);回款已收齐(100%)时同样不可再新建 -->
|
||||
<el-tooltip
|
||||
:disabled="canCreateReceive"
|
||||
:content="
|
||||
list.length
|
||||
? '回款已全部完成(进度 100%),不可再新建回款'
|
||||
: '回款进度以回款计划为先导条件,请先新建回款计划'
|
||||
"
|
||||
placement="top"
|
||||
>
|
||||
<span class="btn-wrap">
|
||||
<el-button type="primary" size="small" :icon="Plus" :disabled="!list.length" @click="openReceive()">
|
||||
<el-button type="primary" size="small" :icon="Plus" :disabled="!canCreateReceive" @click="openReceive()">
|
||||
新建回款
|
||||
</el-button>
|
||||
</span>
|
||||
@@ -115,15 +125,15 @@
|
||||
<el-table-column label="回款方式" width="100" align="center">
|
||||
<template #default="{ row }">{{ paybackMethodText(row.pay_method) }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="流水回执" width="110" align="center">
|
||||
<el-table-column label="备注" min-width="120" show-overflow-tooltip>
|
||||
<template #default="{ row }">{{ row.remark || "-" }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="流水回执" width="110" align="center" fixed="right">
|
||||
<template #default="{ row }">
|
||||
<el-link v-if="row.receipt_url" type="primary" :href="row.receipt_url" target="_blank" :underline="false">查看回执</el-link>
|
||||
<span v-else>-</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="备注" min-width="120" show-overflow-tooltip>
|
||||
<template #default="{ row }">{{ row.remark || "-" }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="150" align="center" fixed="right">
|
||||
<template #default="{ row }">
|
||||
<el-button
|
||||
@@ -135,23 +145,15 @@
|
||||
>
|
||||
补回执
|
||||
</el-button>
|
||||
<el-tooltip
|
||||
:disabled="Number((planOf(row.payback_id) || {}).status) !== 2"
|
||||
content="所属回款计划已完成(回款已收齐),不允许删除回款记录"
|
||||
placement="top"
|
||||
<!-- 所属回款计划已完成(回款已收齐)的记录不可删除,不显示按钮 -->
|
||||
<el-button
|
||||
v-if="Number((planOf(row.payback_id) || {}).status) !== 2"
|
||||
link
|
||||
type="danger"
|
||||
size="small"
|
||||
@click="handleDeleteRecord(row)"
|
||||
>删除</el-button
|
||||
>
|
||||
<span>
|
||||
<el-button
|
||||
link
|
||||
type="danger"
|
||||
size="small"
|
||||
:disabled="Number((planOf(row.payback_id) || {}).status) === 2"
|
||||
@click="handleDeleteRecord(row)"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
</span>
|
||||
</el-tooltip>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<template #empty>
|
||||
@@ -408,13 +410,16 @@ function paybackItemStatusTag(row) {
|
||||
return { 0: "info", 1: "warning", 2: "success" }[itemStatusOf(row)] || "info";
|
||||
}
|
||||
|
||||
/** 回款计划是否已全部收齐(总进度达到 100%),收齐后禁止再新建回款计划 */
|
||||
/** 回款计划是否已全部收齐(总进度达到 100%),收齐后不可再新建回款计划 / 回款 */
|
||||
const paidOff = computed(() => {
|
||||
const planned = Number(progressSummary.value.total_planned) || 0;
|
||||
if (planned <= 0) return false;
|
||||
return (Number(progressSummary.value.total_received) || 0) >= planned;
|
||||
});
|
||||
|
||||
/** 「新建回款」可用条件:已存在回款计划(先导条件)且尚未全部收齐(进度未到 100%) */
|
||||
const canCreateReceive = computed(() => list.value.length > 0 && !paidOff.value);
|
||||
|
||||
/** 回款进度百分比 */
|
||||
function paybackPercent(row) {
|
||||
const total = Number(row.total_amount) || 0;
|
||||
@@ -423,7 +428,7 @@ function paybackPercent(row) {
|
||||
}
|
||||
|
||||
function openCreate() {
|
||||
// 兜底拦截:回款已收齐时不允许再建计划
|
||||
// 兜底拦截:回款已全部收齐(进度 100%)时不允许再建计划
|
||||
if (paidOff.value) {
|
||||
ElMessage.warning("回款已全部完成(进度 100%),不可再新建回款计划");
|
||||
return;
|
||||
@@ -516,6 +521,11 @@ function openReceive() {
|
||||
ElMessage.warning("请先新建回款计划,回款进度以计划为先导条件");
|
||||
return;
|
||||
}
|
||||
// 兜底拦截:回款已全部收齐(进度 100%)时不允许再登记回款
|
||||
if (paidOff.value) {
|
||||
ElMessage.warning("回款已全部完成(进度 100%),不可再新建回款");
|
||||
return;
|
||||
}
|
||||
const first = list.value[0];
|
||||
Object.assign(receiveForm, {
|
||||
payback_id: first.id,
|
||||
@@ -653,7 +663,7 @@ async function submitReceive() {
|
||||
}
|
||||
}
|
||||
|
||||
/** 删除一条回款记录(会同步回写计划的已回款金额;所属计划已完成时禁止) */
|
||||
/** 删除一条回款记录(后端同步重算计划的已回款金额与状态;所属计划已完成时禁止) */
|
||||
async function handleDeleteRecord(row) {
|
||||
if (Number((planOf(row.payback_id) || {}).status) === 2) {
|
||||
ElMessage.warning("所属回款计划已完成(回款已收齐),不允许删除回款记录");
|
||||
|
||||
Reference in new issue
Block a user