refactor(fields): 更新字段管理逻辑以支持订单类型特定子表展示

- 在FieldsManager类中根据订单类型动态添加子表,确保展示与订单类型一致
- 移除不必要的条件判断,简化子表展示逻辑
- 更新注释以反映新的逻辑,提升代码可读性和维护性
- 在主应用中引入metadataVersion以触发元数据更新时的树形结构重新计算
This commit is contained in:
zhouyonggao 2025-12-17 16:17:58 +08:00
parent f9d6ed151c
commit bbe316e113
2 changed files with 28 additions and 8 deletions

View File

@ -31,6 +31,7 @@ const app = createApp({
// ==================== 字段元数据管理 ==================== // ==================== 字段元数据管理 ====================
const metaTableLabels = Vue.ref({}); const metaTableLabels = Vue.ref({});
const recommendedMeta = Vue.ref([]); const recommendedMeta = Vue.ref([]);
const metadataVersion = Vue.ref(0); // 用于触发树重新计算的响应式变量
/** /**
* 加载字段元数据 * 加载字段元数据
@ -44,18 +45,22 @@ const app = createApp({
fieldsManager.updateMetadata(tables, recommended); fieldsManager.updateMetadata(tables, recommended);
metaTableLabels.value = fieldsManager.tableLabels; metaTableLabels.value = fieldsManager.tableLabels;
recommendedMeta.value = recommended; recommendedMeta.value = recommended;
metadataVersion.value++; // 触发树重新计算
return recommended; return recommended;
} catch (error) { } catch (error) {
console.error('加载字段元数据失败:', error); console.error('加载字段元数据失败:', error);
fieldsManager.updateMetadata([], []); fieldsManager.updateMetadata([], []);
metaTableLabels.value = {}; metaTableLabels.value = {};
recommendedMeta.value = []; recommendedMeta.value = [];
metadataVersion.value++; // 即使失败也触发更新
return []; return [];
} }
}; };
// ==================== 树形选择器数据 ==================== // ==================== 树形选择器数据 ====================
const fieldTreeData = Vue.computed(() => { const fieldTreeData = Vue.computed(() => {
// 引用 metadataVersion 以确保元数据更新时重新计算
const _version = metadataVersion.value;
return fieldsManager.buildFieldTree( return fieldsManager.buildFieldTree(
state.form.datasource, state.form.datasource,
state.form.orderType state.form.orderType
@ -63,6 +68,8 @@ const app = createApp({
}); });
const editFieldTreeData = Vue.computed(() => { const editFieldTreeData = Vue.computed(() => {
// 引用 metadataVersion 以确保元数据更新时重新计算
const _version = metadataVersion.value;
return fieldsManager.buildFieldTree( return fieldsManager.buildFieldTree(
state.edit.datasource, state.edit.datasource,
state.edit.orderType, state.edit.orderType,

View File

@ -110,17 +110,30 @@ class FieldsManager {
const orderFields = this.getTableFields('order'); const orderFields = this.getTableFields('order');
const children = orderFields.map(f => ({ value: f.value, label: f.label })); const children = orderFields.map(f => ({ value: f.value, label: f.label }));
// 添加公共子表(这些表与订单类型无关,应始终展示 // 添加公共子表(所有订单类型都有
children.push(this.buildTreeNode('merchant', this.getTableFields('merchant'))); children.push(this.buildTreeNode('merchant', this.getTableFields('merchant')));
children.push(this.buildTreeNode('activity', this.getTableFields('activity'))); children.push(this.buildTreeNode('activity', this.getTableFields('activity')));
// 为避免“有时显示有时不显示”的问题,这里不再按订单类型裁剪子表, // 根据订单类型添加特定子表
// 而是始终展示所有与订单相关的子表,由业务在导出层面控制是否使用。 if (orderType === 2) {
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_digit', this.getTableFields('order_digit')));
children.push(this.buildTreeNode('order_cash', this.getTableFields('order_cash'))); } else if (orderType === 3) {
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'))); 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; return children;
} }