修复配送合同草稿编辑状态判断

修正平台总后台将待处理状态误判为草稿的问题。
统一平台、气站和配送点后台的合同编辑限制,并补充禁用原因、回归检查及中文操作文档。
This commit is contained in:
czl231
2026-08-12 22:11:52 +08:00
parent 99324acc89
commit 8ad6748397
6 changed files with 101 additions and 8 deletions

View File

@@ -76,7 +76,9 @@
<a-button v-if="definition.accountManagement" size="mini" type="primary" @click="manageAccounts(record)">账户管理</a-button>
<a-button v-if="definition.name === 'staff_account'" size="mini" @click="viewCredentials(record)">查看资质</a-button>
<a-button size="mini" @click="openDetail(record)">详情</a-button>
<a-button v-if="canEdit" size="mini" :disabled="isProtectedRecord(record)" @click="openEdit(record)">编辑</a-button>
<a-tooltip v-if="canEdit" :content="recordEditReason(record) || '编辑记录'">
<span><a-button size="mini" :disabled="Boolean(recordEditReason(record))" @click="openEdit(record)">编辑</a-button></span>
</a-tooltip>
<a-button v-if="canChangeStatus && definition.name !== 'gas_basic'" size="mini" :disabled="isProtectedRecord(record)" @click="openStatus(record)">审核</a-button>
<a-button v-if="canArchive" size="mini" status="danger" :disabled="isProtectedRecord(record)" @click="confirmArchive(record)">删除</a-button>
</a-space>
@@ -766,6 +768,11 @@ function openCreate() {
}
function openEdit(row: Row) {
const reason = recordEditReason(row);
if (reason) {
Message.warning(reason);
return;
}
editingIdentity.value = String(row.identity ?? '');
resetForm(row);
formVisible.value = true;
@@ -775,6 +782,17 @@ function isProtectedRecord(row: Row) {
return props.definition.name === 'platform_role' && row.is_system === true;
}
/** 统一返回合同和系统记录的编辑阻止原因。 */
function recordEditReason(row: Row) {
if (isProtectedRecord(row)) return '系统内置记录不允许编辑';
if (props.definition.name !== 'gasorder_contract') return '';
if (Number(row.contract_status) !== 0)
return '只有草稿状态的合同可以编辑';
if (![0, 1].includes(Number(row.status)))
return '停用、已归档或已冻结的合同不可编辑';
return '';
}
async function openDetail(row: Row) {
try {
detail.value = await resourceApi.detail<Row>(

View File

@@ -76,7 +76,9 @@
<a-button v-if="definition.accountManagement" size="mini" type="primary" @click="manageAccounts(record)">账户管理</a-button>
<a-button v-if="definition.name === 'staff_account'" size="mini" @click="viewCredentials(record)">查看资质</a-button>
<a-button size="mini" @click="openDetail(record)">详情</a-button>
<a-button v-if="canEdit" size="mini" :disabled="isProtectedRecord(record)" @click="openEdit(record)">编辑</a-button>
<a-tooltip v-if="canEdit" :content="recordEditReason(record) || '编辑记录'">
<span><a-button size="mini" :disabled="Boolean(recordEditReason(record))" @click="openEdit(record)">编辑</a-button></span>
</a-tooltip>
<a-button v-if="canChangeStatus && definition.name !== 'gas_basic'" size="mini" :disabled="isProtectedRecord(record)" @click="openStatus(record)">审核</a-button>
<a-button v-if="canArchive" size="mini" status="danger" :disabled="isProtectedRecord(record)" @click="confirmArchive(record)">删除</a-button>
</a-space>
@@ -766,6 +768,11 @@ function openCreate() {
}
function openEdit(row: Row) {
const reason = recordEditReason(row);
if (reason) {
Message.warning(reason);
return;
}
editingIdentity.value = String(row.identity ?? '');
resetForm(row);
formVisible.value = true;
@@ -775,6 +782,17 @@ function isProtectedRecord(row: Row) {
return props.definition.name === 'platform_role' && row.is_system === true;
}
/** 统一返回合同和系统记录的编辑阻止原因。 */
function recordEditReason(row: Row) {
if (isProtectedRecord(row)) return '系统内置记录不允许编辑';
if (props.definition.name !== 'gasorder_contract') return '';
if (Number(row.contract_status) !== 0)
return '只有草稿状态的合同可以编辑';
if (![0, 1].includes(Number(row.status)))
return '停用、已归档或已冻结的合同不可编辑';
return '';
}
async function openDetail(row: Row) {
try {
detail.value = await resourceApi.detail<Row>(

View File

@@ -62,6 +62,17 @@ for (const marker of [
]) {
if (!displaySource.includes(marker)) fail(`合同详情中文展示缺少 ${marker}`);
}
for (const marker of [
"Number(row.contract_status) !== 0",
"![0, 1].includes(Number(row.status))",
"只有草稿状态的合同可以编辑",
"停用、已归档或已冻结的合同不可编辑",
]) {
if (!ruleSource.includes(marker)) fail(`合同编辑状态规则缺少 ${marker}`);
}
if (!listSource.includes('recordEditReason(record)')) {
fail('合同列表缺少编辑禁用原因提示');
}
const createCount = listResources.filter((item) => createModes.has(item.mode)).length;
console.log(

View File

@@ -291,11 +291,11 @@ export function editBlockedReason(
context: ResourcePageContext,
) {
if (!definition.canEdit) return '当前资源不支持编辑';
if (
definition.name === 'gasorder_contract' &&
Number(row.contract_status) !== 10
) {
return '只有草稿状态的合同可编辑';
if (definition.name === 'gasorder_contract') {
if (Number(row.contract_status) !== 0)
return '只有草稿状态的合同可以编辑';
if (![0, 1].includes(Number(row.status)))
return '停用、已归档或已冻结的合同可编辑';
}
if (definition.name === 'platform_role') {
if (context.role !== 'root') return '只有 root 可以编辑平台角色';