优化配送订单合同气瓶候选显示

This commit is contained in:
czl231
2026-08-14 00:08:00 +08:00
parent 4d2acbaf46
commit eafb6fadf3
8 changed files with 144 additions and 3 deletions

View File

@@ -24,6 +24,7 @@
"user-address-display:check": "node scripts/check-user-address-relation-display.mjs",
"gasorder-address:check": "node scripts/check-gasorder-address-linkage.mjs",
"gasorder-contract-candidates:check": "node scripts/check-gasorder-contract-candidates.mjs",
"gasorder-contract-products:check": "node scripts/check-gasorder-contract-product-display.mjs",
"product-ownership:check": "node scripts/check-product-ownership-action.mjs",
"product-ownership-display:check": "node scripts/check-product-ownership-display.mjs",
"product-lifecycle-display:check": "node scripts/check-product-lifecycle-display.mjs",

View File

@@ -0,0 +1,20 @@
/**
* 功能:静态检查配送订单合同气瓶候选的可读显示与交互约束。
* 版本v1.0.0
*/
import assert from 'node:assert/strict';
import { readFileSync } from 'node:fs';
const resources = readFileSync(new URL('../src/api/resources.ts', import.meta.url), 'utf8');
const display = readFileSync(new URL('../src/api/resource-display.ts', import.meta.url), 'utf8');
const form = readFileSync(new URL('../src/views/resource/ResourceFieldForm.vue', import.meta.url), 'utf8');
assert.match(resources, /label: '合同气瓶'/, '订单气瓶字段必须使用业务名称');
assert.match(resources, /relationOptionLabelKey: 'product_type_name'/, '气瓶候选必须显示气瓶类型名称');
assert.match(resources, /该合同暂无可用气瓶,请先为合同绑定气瓶/, '缺少无可用气瓶的业务引导');
assert.match(resources, /filterKey: 'contract_identity'/, '订单气瓶请求必须携带合同标识');
assert.match(display, /field\.relationOptionLabelKey/, '关系选项必须支持指定业务展示字段');
assert.doesNotMatch(form, /max-tag-count/, '合同气瓶多选必须完整展示全部已选标签');
assert.match(form, /'请先选择配送合同'/, '父合同未选时缺少操作顺序提示');
console.log('合同气瓶显示检查通过:候选显示气瓶类型名称,并完整展示全部已选标签。');

View File

@@ -532,7 +532,7 @@ export const resources: ResourceUiDefinition[] = [
filterKey: 'gasorder_contract_identity', filterOnly: true, requiresParent: true,
parentChangeMessage: '配送合同已变更,请重新选择该合同用户的收货地址',
},
}), f('gasorder_contract_product_identities', { required: true, type: 'identity-list', relation: '/gasorder_contract_product', placeholder: '请先选择配送合同,再选择该合同可用的气瓶', relationLinkage: { parentKey: 'gasorder_contract_identity', optionParentKey: '', filterKey: 'contract_identity', filterOnly: true, requiresParent: true, parentChangeMessage: '配送合同已变更,请重新选择该合同可用的气瓶' } }), f('contact_name', { required: true }), f('contact_phone', { required: true }), f('discount_amount'), f('remark')], 'list', [
}), f('gasorder_contract_product_identities', { label: '合同气瓶', required: true, type: 'identity-list', relation: '/gasorder_contract_product', placeholder: '请输入气瓶编码或类型搜索', relationOptionLabelKey: 'product_type_name', relationEmptyText: '该合同暂无可用气瓶,请先为合同绑定气瓶', relationLinkage: { parentKey: 'gasorder_contract_identity', optionParentKey: '', filterKey: 'contract_identity', filterOnly: true, requiresParent: true, parentChangeMessage: '配送合同已变更,请重新选择该合同可用的气瓶' } }), f('contact_name', { required: true }), f('contact_phone', { required: true }), f('discount_amount'), f('remark')], 'list', [
{ name: '分配订单', resource: '/gasorder_basic/:identity/assign', fields: [relation('delivery_basic_identity', '/delivery_basic', true), relation('staff_account_identity', '/staff_account', true, { staffRelation: { roles: ['delivery'], enabledOnly: true, workStatus: 'on_duty' } }), ...reason], visibleFor: { field: 'order_status', values: [16, 18] } },
{ name: '开始罐装', resource: '/gasorder_basic/:identity/filling', fields: reason, visibleFor: { field: 'order_status', values: [18] } },
{ name: '待配送', resource: '/gasorder_basic/:identity/ready', fields: reason, visibleFor: { field: 'order_status', values: [19] } },

View File

@@ -92,7 +92,7 @@
v-model="model[field.key]"
:disabled="disabledSet.has(field.key) || relationRequiresParent(field)"
:multiple="field.type === 'identity-list'"
:placeholder="field.placeholder"
:placeholder="relationPlaceholder(field)"
:loading="relationLoading[field.relation ?? '']"
allow-clear
allow-search
@@ -203,6 +203,14 @@ function relationRequiresParent(field: ResourceField) {
);
}
/** 父级未选择时直接在控件内提示操作顺序,选择后恢复字段搜索提示。 */
function relationPlaceholder(field: ResourceField) {
if (!relationRequiresParent(field)) return field.placeholder;
return field.relationLinkage?.parentKey === 'gasorder_contract_identity'
? '请先选择配送合同'
: '请先选择上级数据';
}
/** 根据父级和候选状态给出明确的关联选择引导。 */
function relationEmptyText(field: ResourceField) {
if (relationRequiresParent(field)) {