refactor(fields): 更新字段管理逻辑以支持订单类型特定子表展示
- 在FieldsManager类中根据订单类型动态添加子表,确保展示与订单类型一致 - 移除不必要的条件判断,简化子表展示逻辑 - 更新注释以反映新的逻辑,提升代码可读性和维护性 - 在主应用中引入metadataVersion以触发元数据更新时的树形结构重新计算
This commit is contained in:
parent
f9d6ed151c
commit
bbe316e113
|
|
@ -31,6 +31,7 @@ const app = createApp({
|
|||
// ==================== 字段元数据管理 ====================
|
||||
const metaTableLabels = Vue.ref({});
|
||||
const recommendedMeta = Vue.ref([]);
|
||||
const metadataVersion = Vue.ref(0); // 用于触发树重新计算的响应式变量
|
||||
|
||||
/**
|
||||
* 加载字段元数据
|
||||
|
|
@ -44,18 +45,22 @@ const app = createApp({
|
|||
fieldsManager.updateMetadata(tables, recommended);
|
||||
metaTableLabels.value = fieldsManager.tableLabels;
|
||||
recommendedMeta.value = recommended;
|
||||
metadataVersion.value++; // 触发树重新计算
|
||||
return recommended;
|
||||
} catch (error) {
|
||||
console.error('加载字段元数据失败:', error);
|
||||
fieldsManager.updateMetadata([], []);
|
||||
metaTableLabels.value = {};
|
||||
recommendedMeta.value = [];
|
||||
metadataVersion.value++; // 即使失败也触发更新
|
||||
return [];
|
||||
}
|
||||
};
|
||||
|
||||
// ==================== 树形选择器数据 ====================
|
||||
const fieldTreeData = Vue.computed(() => {
|
||||
// 引用 metadataVersion 以确保元数据更新时重新计算
|
||||
const _version = metadataVersion.value;
|
||||
return fieldsManager.buildFieldTree(
|
||||
state.form.datasource,
|
||||
state.form.orderType
|
||||
|
|
@ -63,6 +68,8 @@ const app = createApp({
|
|||
});
|
||||
|
||||
const editFieldTreeData = Vue.computed(() => {
|
||||
// 引用 metadataVersion 以确保元数据更新时重新计算
|
||||
const _version = metadataVersion.value;
|
||||
return fieldsManager.buildFieldTree(
|
||||
state.edit.datasource,
|
||||
state.edit.orderType,
|
||||
|
|
|
|||
|
|
@ -110,17 +110,30 @@ class FieldsManager {
|
|||
const orderFields = this.getTableFields('order');
|
||||
const children = orderFields.map(f => ({ value: f.value, label: f.label }));
|
||||
|
||||
// 添加公共子表(这些表与订单类型无关,应始终展示)
|
||||
// 添加公共子表(所有订单类型都有)
|
||||
children.push(this.buildTreeNode('merchant', this.getTableFields('merchant')));
|
||||
children.push(this.buildTreeNode('activity', this.getTableFields('activity')));
|
||||
|
||||
// 为避免“有时显示有时不显示”的问题,这里不再按订单类型裁剪子表,
|
||||
// 而是始终展示所有与订单相关的子表,由业务在导出层面控制是否使用。
|
||||
children.push(this.buildTreeNode('order_digit', this.getTableFields('order_digit')));
|
||||
children.push(this.buildTreeNode('order_voucher', this.getTableFields('order_voucher')));
|
||||
children.push(this.buildTreeNode('order_cash', this.getTableFields('order_cash')));
|
||||
children.push(this.buildTreeNode('goods_voucher_batch', this.getTableFields('goods_voucher_batch')));
|
||||
children.push(this.buildTreeNode('goods_voucher_subject_config', this.getTableFields('goods_voucher_subject_config')));
|
||||
// 根据订单类型添加特定子表
|
||||
if (orderType === 2) {
|
||||
// 直充卡密
|
||||
children.push(this.buildTreeNode('order_digit', this.getTableFields('order_digit')));
|
||||
} else if (orderType === 3) {
|
||||
// 立减金
|
||||
children.push(this.buildTreeNode('order_voucher', this.getTableFields('order_voucher')));
|
||||
children.push(this.buildTreeNode('goods_voucher_batch', this.getTableFields('goods_voucher_batch')));
|
||||
children.push(this.buildTreeNode('goods_voucher_subject_config', this.getTableFields('goods_voucher_subject_config')));
|
||||
} else if (orderType === 1) {
|
||||
// 红包
|
||||
children.push(this.buildTreeNode('order_cash', this.getTableFields('order_cash')));
|
||||
} else {
|
||||
// 未指定类型或全部类型(orderType = 0 或其他)
|
||||
children.push(this.buildTreeNode('order_voucher', this.getTableFields('order_voucher')));
|
||||
children.push(this.buildTreeNode('order_cash', this.getTableFields('order_cash')));
|
||||
children.push(this.buildTreeNode('order_digit', this.getTableFields('order_digit')));
|
||||
children.push(this.buildTreeNode('goods_voucher_batch', this.getTableFields('goods_voucher_batch')));
|
||||
children.push(this.buildTreeNode('goods_voucher_subject_config', this.getTableFields('goods_voucher_subject_config')));
|
||||
}
|
||||
|
||||
return children;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue