From bbe316e11366f2ccc92da2d9538087c09e06d9b7 Mon Sep 17 00:00:00 2001 From: zhouyonggao <1971162852@qq.com> Date: Wed, 17 Dec 2025 16:17:58 +0800 Subject: [PATCH] =?UTF-8?q?refactor(fields):=20=E6=9B=B4=E6=96=B0=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=E7=AE=A1=E7=90=86=E9=80=BB=E8=BE=91=E4=BB=A5=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E8=AE=A2=E5=8D=95=E7=B1=BB=E5=9E=8B=E7=89=B9=E5=AE=9A?= =?UTF-8?q?=E5=AD=90=E8=A1=A8=E5=B1=95=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在FieldsManager类中根据订单类型动态添加子表,确保展示与订单类型一致 - 移除不必要的条件判断,简化子表展示逻辑 - 更新注释以反映新的逻辑,提升代码可读性和维护性 - 在主应用中引入metadataVersion以触发元数据更新时的树形结构重新计算 --- web/main.js | 7 +++++++ web/modules/fields.js | 29 +++++++++++++++++++++-------- 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/web/main.js b/web/main.js index ed653be..2f759bd 100644 --- a/web/main.js +++ b/web/main.js @@ -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, diff --git a/web/modules/fields.js b/web/modules/fields.js index 23a1e80..00e76a2 100644 --- a/web/modules/fields.js +++ b/web/modules/fields.js @@ -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; }