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 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,
|
||||||
|
|
|
||||||
|
|
@ -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_digit', this.getTableFields('order_digit')));
|
||||||
|
} else if (orderType === 3) {
|
||||||
|
// 立减金
|
||||||
children.push(this.buildTreeNode('order_voucher', this.getTableFields('order_voucher')));
|
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_batch', this.getTableFields('goods_voucher_batch')));
|
||||||
children.push(this.buildTreeNode('goods_voucher_subject_config', this.getTableFields('goods_voucher_subject_config')));
|
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;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue