统一智能气阀空归属展示
库房、气站、配送点和用户归属为空时统一显示未填写,保留归属互斥与接口规则,并补充专项检查、中文操作日志及项目文档。
This commit is contained in:
37
docs/操作日志_智能气阀归属空值展示_20260813.md
Normal file
37
docs/操作日志_智能气阀归属空值展示_20260813.md
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
# 智能气阀归属空值展示操作日志
|
||||||
|
|
||||||
|
操作时间:2026-08-13
|
||||||
|
操作类型:修改
|
||||||
|
影响模块:平台总后台智能气阀管理
|
||||||
|
|
||||||
|
## 操作前状态
|
||||||
|
|
||||||
|
智能气阀的库房、气站、配送点和用户归属没有数据时,列表、详情和编辑只读区域使用通用默认文案 `-`,与当前业务页面的“未填写”约定不一致。
|
||||||
|
|
||||||
|
## 具体操作
|
||||||
|
|
||||||
|
1. 为四个可选归属字段统一配置空值文案“未填写”。
|
||||||
|
2. 保持四个字段的可选关系、接口键和归属互斥规则不变。
|
||||||
|
3. 增加专项静态检查,防止后续配置遗漏或回退。
|
||||||
|
|
||||||
|
## 操作后状态
|
||||||
|
|
||||||
|
库房、气站、配送点和用户归属没有数据时,在列表、详情及编辑只读展示中统一显示“未填写”。其他字段的空值文案不受影响。
|
||||||
|
|
||||||
|
## 代码变更
|
||||||
|
|
||||||
|
- `frontend/platform_admin/src/api/resources.ts`:配置四个归属字段的空值文案。
|
||||||
|
- `frontend/platform_admin/scripts/check-product-ownership-display.mjs`:增加归属展示专项检查。
|
||||||
|
- `frontend/platform_admin/package.json`:注册专项检查命令。
|
||||||
|
|
||||||
|
## 验证结果
|
||||||
|
|
||||||
|
- `npm.cmd run product-ownership-display:check`:通过,四类空归属统一显示“未填写”。
|
||||||
|
- `npm.cmd run product-ownership:check`:通过,归属互斥选择行为保持正常。
|
||||||
|
- `npm.cmd run resource-pages:check`:通过,详情 46 类、新建 25 类、编辑 23 类。
|
||||||
|
- `npm.cmd run build`:通过,TypeScript 类型检查与 Vite 生产构建成功。
|
||||||
|
- `git diff --check`:通过,未发现空白符错误。
|
||||||
|
|
||||||
|
## 风险评估
|
||||||
|
|
||||||
|
仅修改前端展示元数据,不改变数据库、后端接口、历史数据和归属变更业务规则。
|
||||||
33
docs/项目文档_智能气阀归属空值展示_v1.0.md
Normal file
33
docs/项目文档_智能气阀归属空值展示_v1.0.md
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
# 项目文档:智能气阀归属空值展示 v1.0
|
||||||
|
|
||||||
|
## 1. 项目概述
|
||||||
|
|
||||||
|
智能气阀的库房、气站、配送点和用户均为可选且互斥的当前归属。未设置的归属统一展示为“未填写”,避免使用含义不明确的横线。
|
||||||
|
|
||||||
|
## 2. 目录结构说明
|
||||||
|
|
||||||
|
```text
|
||||||
|
platforms/
|
||||||
|
├── frontend/platform_admin/
|
||||||
|
│ ├── src/api/resources.ts
|
||||||
|
│ └── scripts/check-product-ownership-display.mjs
|
||||||
|
└── docs/
|
||||||
|
├── 项目文档_智能气阀归属空值展示_v1.0.md
|
||||||
|
└── 操作日志_智能气阀归属空值展示_20260813.md
|
||||||
|
```
|
||||||
|
|
||||||
|
## 3. 核心行为
|
||||||
|
|
||||||
|
- `warehouse_identity` 空值显示“未填写”。
|
||||||
|
- `gas_basic_identity` 空值显示“未填写”。
|
||||||
|
- `delivery_basic_identity` 空值显示“未填写”。
|
||||||
|
- `user_account_identity` 空值显示“未填写”。
|
||||||
|
- 非空关系仍按现有规则显示业务名称或唯一标识。
|
||||||
|
|
||||||
|
## 4. 接口兼容性
|
||||||
|
|
||||||
|
前端仍通过四个 identity 字段读取和提交关系,不修改接口字段及数据格式。归属变更继续遵守最多一个当前归属的规则。
|
||||||
|
|
||||||
|
## 5. 维护指南
|
||||||
|
|
||||||
|
智能气阀归属字段应作为同一组维护。调整其中一个字段的空值文案时,应同步检查其余三个字段以及列表、详情和编辑页面。
|
||||||
@@ -23,6 +23,7 @@
|
|||||||
"staff-relations:check": "node scripts/check-staff-relation-policy.mjs",
|
"staff-relations:check": "node scripts/check-staff-relation-policy.mjs",
|
||||||
"user-address-display:check": "node scripts/check-user-address-relation-display.mjs",
|
"user-address-display:check": "node scripts/check-user-address-relation-display.mjs",
|
||||||
"product-ownership:check": "node scripts/check-product-ownership-action.mjs",
|
"product-ownership:check": "node scripts/check-product-ownership-action.mjs",
|
||||||
|
"product-ownership-display:check": "node scripts/check-product-ownership-display.mjs",
|
||||||
"resource-search:check": "node scripts/check-resource-search.mjs",
|
"resource-search:check": "node scripts/check-resource-search.mjs",
|
||||||
"audit:platform": "node scripts/check-backend-contract.mjs",
|
"audit:platform": "node scripts/check-backend-contract.mjs",
|
||||||
"lint": "biome lint .",
|
"lint": "biome lint .",
|
||||||
|
|||||||
@@ -0,0 +1,23 @@
|
|||||||
|
/**
|
||||||
|
* 功能:检查智能气阀四类可选归属的空值文案保持一致。
|
||||||
|
* 版本:v1.0.0
|
||||||
|
*/
|
||||||
|
import { readFile } from 'node:fs/promises';
|
||||||
|
import { fileURLToPath } from 'node:url';
|
||||||
|
|
||||||
|
const resourcesUrl = new URL('../src/api/resources.ts', import.meta.url);
|
||||||
|
const source = await readFile(fileURLToPath(resourcesUrl), 'utf8');
|
||||||
|
const ownershipRelations = [
|
||||||
|
"relation('warehouse_identity', '/product_warehouse', false, { emptyText: '未填写' })",
|
||||||
|
"relation('gas_basic_identity', '/gas_basic', false, { emptyText: '未填写' })",
|
||||||
|
"relation('delivery_basic_identity', '/delivery_basic', false, { emptyText: '未填写' })",
|
||||||
|
"relation('user_account_identity', '/user_account', false, { emptyText: '未填写' })",
|
||||||
|
];
|
||||||
|
|
||||||
|
for (const relation of ownershipRelations) {
|
||||||
|
if (!source.includes(relation)) {
|
||||||
|
throw new Error(`智能气阀归属空值文案配置缺失:${relation}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log('智能气阀归属展示检查通过:四类空归属统一显示“未填写”。');
|
||||||
@@ -447,7 +447,7 @@ export const resources: ResourceUiDefinition[] = [
|
|||||||
define('producer_account', '生产商管理', 'writable', [f('producer_code', { required: true }), f('name', { required: true }), f('credit_code'), f('principal'), f('phone'), f('address', { emptyText: '未填写', placeholder: '请输入地址' }), f('username', { required: true }), f('password', { required: true }), f('display_name'), producerAdminRole(), f('remark')]),
|
define('producer_account', '生产商管理', 'writable', [f('producer_code', { required: true }), f('name', { required: true }), f('credit_code'), f('principal'), f('phone'), f('address', { emptyText: '未填写', placeholder: '请输入地址' }), f('username', { required: true }), f('password', { required: true }), f('display_name'), producerAdminRole(), f('remark')]),
|
||||||
define('product_type', '智能气阀类型', 'editable', [f('code', { required: true }), f('name', { required: true })]),
|
define('product_type', '智能气阀类型', 'editable', [f('code', { required: true }), f('name', { required: true })]),
|
||||||
define('product_warehouse', '智能气阀库房', 'editable', [f('code', { required: true }), f('name', { required: true }), f('address', { emptyText: '未填写', placeholder: '请输入地址' }), f('manager'), f('phone')]),
|
define('product_warehouse', '智能气阀库房', 'editable', [f('code', { required: true }), f('name', { required: true }), f('address', { emptyText: '未填写', placeholder: '请输入地址' }), f('manager'), f('phone')]),
|
||||||
define('product_info', '智能气阀', 'editable', [f('code', { required: true }), f('name', { required: true }), relation('producer_account_identity', '/producer_account', true, { label: '生产商', listLabel: '生产商', listRelationNameOnly: true, displayRelationLabel: true, showIdentityCopy: true, emptyText: '未填写', placeholder: '请选择生产商' }), relation('product_type_identity', '/product_type', true, { label: '智能气阀类型', listLabel: '智能气阀类型', listRelationNameOnly: true, displayRelationLabel: true, showIdentityCopy: true, emptyText: '未填写', placeholder: '请选择智能气阀类型' }), f('params', { required: true }), relation('warehouse_identity', '/product_warehouse'), relation('gas_basic_identity', '/gas_basic'), relation('delivery_basic_identity', '/delivery_basic'), relation('user_account_identity', '/user_account'), f('produced_at', { required: true })], 'list', [
|
define('product_info', '智能气阀', 'editable', [f('code', { required: true }), f('name', { required: true }), relation('producer_account_identity', '/producer_account', true, { label: '生产商', listLabel: '生产商', listRelationNameOnly: true, displayRelationLabel: true, showIdentityCopy: true, emptyText: '未填写', placeholder: '请选择生产商' }), relation('product_type_identity', '/product_type', true, { label: '智能气阀类型', listLabel: '智能气阀类型', listRelationNameOnly: true, displayRelationLabel: true, showIdentityCopy: true, emptyText: '未填写', placeholder: '请选择智能气阀类型' }), f('params', { required: true }), relation('warehouse_identity', '/product_warehouse', false, { emptyText: '未填写' }), relation('gas_basic_identity', '/gas_basic', false, { emptyText: '未填写' }), relation('delivery_basic_identity', '/delivery_basic', false, { emptyText: '未填写' }), relation('user_account_identity', '/user_account', false, { emptyText: '未填写' }), f('produced_at', { required: true })], 'list', [
|
||||||
{ name: '修改智能气阀状态', resource: '/product_info/:identity/lifecycle', method: 'PATCH', fields: [f('product_status', { required: true, type: 'select', options: [{ label: '待处理', value: 10 }, { label: '在库', value: 28 }, { label: '运输中', value: 29 }, { label: '使用中', value: 30 }, { label: '维修中', value: 31 }, { label: '已报废', value: 27 }] })] },
|
{ name: '修改智能气阀状态', resource: '/product_info/:identity/lifecycle', method: 'PATCH', fields: [f('product_status', { required: true, type: 'select', options: [{ label: '待处理', value: 10 }, { label: '在库', value: 28 }, { label: '运输中', value: 29 }, { label: '使用中', value: 30 }, { label: '维修中', value: 31 }, { label: '已报废', value: 27 }] })] },
|
||||||
{ name: '变更智能气阀归属', resource: '/product_info/:identity', method: 'PUT', fields: [relation('warehouse_identity', '/product_warehouse'), relation('gas_basic_identity', '/gas_basic'), relation('delivery_basic_identity', '/delivery_basic'), relation('user_account_identity', '/user_account'), f('action', { required: true, type: 'select', options: [{ label: '入库', value: 'warehouse' }, { label: '分配', value: 'assigned' }, { label: '归还', value: 'returned' }, { label: '人工调整', value: 'manual' }] }), f('reason', { required: true }), f('remark')] },
|
{ name: '变更智能气阀归属', resource: '/product_info/:identity', method: 'PUT', fields: [relation('warehouse_identity', '/product_warehouse'), relation('gas_basic_identity', '/gas_basic'), relation('delivery_basic_identity', '/delivery_basic'), relation('user_account_identity', '/user_account'), f('action', { required: true, type: 'select', options: [{ label: '入库', value: 'warehouse' }, { label: '分配', value: 'assigned' }, { label: '归还', value: 'returned' }, { label: '人工调整', value: 'manual' }] }), f('reason', { required: true }), f('remark')] },
|
||||||
]),
|
]),
|
||||||
|
|||||||
Reference in New Issue
Block a user