完善配送订单列表可读信息
This commit is contained in:
@@ -138,5 +138,9 @@ assert(recordPage.includes('if (saving.value) return'), '订单保存缺少显
|
||||
assert(orderCreation.includes('productAmount + deliveryFee - discountAmount'), '订单金额预估公式不正确');
|
||||
assert(orderCreation.includes("优惠金额必须小于商品金额与配送费之和"), '优惠金额缺少应付金额正数校验');
|
||||
assert(orderPreview.includes('金额仅供预览'), '订单金额预估未声明服务端最终计算');
|
||||
assert(definitions.includes("listDisplayKey: 'address'"), '订单列表收货地址未使用受控地址快照');
|
||||
assert(definitions.includes("listDisplayKey: 'contract_products_summary'"), '订单列表合同气瓶未使用可读摘要');
|
||||
assert(listPage.includes('function displayListField'), '资源列表未支持后端派生展示字段');
|
||||
assert(listPage.includes('field.listDetailLink'), '订单气瓶摘要缺少详情入口');
|
||||
|
||||
console.log(`独立资源页面契约通过:详情 ${listResources.length},新建 ${creatable.size},编辑 ${editable.size}`);
|
||||
|
||||
@@ -49,6 +49,10 @@ export type ResourceField = {
|
||||
listCopyable?: boolean;
|
||||
/** 关联选项优先展示的业务字段。 */
|
||||
relationOptionLabelKey?: string;
|
||||
/** 列表使用后端派生的只读展示字段,不改变提交字段。 */
|
||||
listDisplayKey?: string;
|
||||
/** 列表摘要可直接进入当前记录详情。 */
|
||||
listDetailLink?: boolean;
|
||||
/** 合同气瓶等关系的组合展示方式。 */
|
||||
relationOptionDisplay?: 'product-name-type';
|
||||
/** 为默认候选追加中文标识,并在加载完成后自动选择。 */
|
||||
@@ -564,6 +568,9 @@ const deliveryOverrides: ResourceUiDefinition[] = [
|
||||
}),
|
||||
relation('user_address_identity', '/user_address', true, {
|
||||
label: '收货地址',
|
||||
listDisplayKey: 'address',
|
||||
listDetailLink: false,
|
||||
emptyText: '未填写',
|
||||
placeholder: '请先选择配送合同,再选择该合同用户的收货地址',
|
||||
relationOptionLabelKey: 'address',
|
||||
relationOptionDefaultKey: 'is_default',
|
||||
@@ -581,6 +588,9 @@ const deliveryOverrides: ResourceUiDefinition[] = [
|
||||
required: true,
|
||||
type: 'identity-list',
|
||||
relation: '/gasorder_contract_product',
|
||||
listDisplayKey: 'contract_products_summary',
|
||||
listDetailLink: true,
|
||||
emptyText: '未填写',
|
||||
placeholder: '请输入智能气阀名称、气瓶类型或气瓶编码搜索',
|
||||
relationOptionDisplay: 'product-name-type',
|
||||
relationEmptyText: '该合同暂无可用气瓶,请先为合同绑定气瓶',
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<!-- 功能描述:展示配送点标准资源列表并导航到独立记录页。版本:v1.1.0。 -->
|
||||
<!-- 功能描述:展示配送点标准资源列表并导航到独立记录页。版本:v1.2.0。 -->
|
||||
<template>
|
||||
<a-card :title="listTitle" :bordered="false">
|
||||
<template v-if="isCredentialList" #extra>
|
||||
@@ -75,11 +75,15 @@
|
||||
@click="previewListContractAttachment(record)"
|
||||
>查看附件</a-button>
|
||||
<span v-else-if="field.type === 'contract-file'">暂无附件</span>
|
||||
<a-link v-else-if="field.listDetailLink" @click="openRecord('detail', record)">
|
||||
{{ displayListField(field, record) }}
|
||||
</a-link>
|
||||
<template v-else-if="field.listDisplayKey">{{ displayListField(field, record) }}</template>
|
||||
<IdentityText
|
||||
v-else-if="(field.type === 'identity' || field.listCopyable) && fieldValue(field, record)"
|
||||
:value="fieldValue(field, record)"
|
||||
/>
|
||||
<template v-else>{{ displayResourceValue(definition, field.key, record[field.key] ?? record[`${field.key}_masked`]) }}</template>
|
||||
<template v-else>{{ displayListField(field, record) }}</template>
|
||||
</template>
|
||||
</a-table-column>
|
||||
<a-table-column title="状态" :width="100">
|
||||
@@ -245,6 +249,19 @@ function fieldValue(field: ResourceField, row: ResourceRow) {
|
||||
return String(row[field.key] ?? row[`${field.key}_masked`] ?? '');
|
||||
}
|
||||
|
||||
/** 优先使用后端受控派生字段展示列表摘要,空值使用字段业务文案。 */
|
||||
function displayListField(field: ResourceField, row: ResourceRow) {
|
||||
if (field.listDisplayKey) {
|
||||
const value = row[field.listDisplayKey];
|
||||
return value == null || value === '' ? (field.emptyText ?? '-') : String(value);
|
||||
}
|
||||
return displayResourceValue(
|
||||
props.definition,
|
||||
field.key,
|
||||
row[field.key] ?? row[`${field.key}_masked`],
|
||||
);
|
||||
}
|
||||
|
||||
/** 加载当前列表和来源关系筛选。 */
|
||||
async function load() {
|
||||
avatarLoader.reset();
|
||||
|
||||
Reference in New Issue
Block a user