From 6df550beb9ddb0da70a5aa1338b884d1fb2208a8 Mon Sep 17 00:00:00 2001 From: zhouyonggao <1971162852@qq.com> Date: Fri, 19 Dec 2025 14:35:52 +0800 Subject: [PATCH] =?UTF-8?q?fix(exports):=20=E4=BC=98=E5=8C=96=E5=AF=BC?= =?UTF-8?q?=E5=87=BA=E8=A1=A8=E5=8D=95=E5=88=9B=E5=BB=BA=E8=80=85=E9=80=89?= =?UTF-8?q?=E6=8B=A9=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修改创建者选择组件,支持通过 URL 中的 userId 自动选中并禁用创建者字段 - 更新导出逻辑,确保在对话框打开后重新设置 creatorId 和 ymtCreatorId - 增强日志记录,提供创建者选择的调试信息,确保用户体验的流畅性 --- web/index.html | 2 +- web/main.js | 66 ++++++++++++++++++++++++++++++++++++++++++++------ 2 files changed, 60 insertions(+), 8 deletions(-) diff --git a/web/index.html b/web/index.html index afd2deb..726566e 100644 --- a/web/index.html +++ b/web/index.html @@ -272,7 +272,7 @@ - + diff --git a/web/main.js b/web/main.js index ea53495..e9d45da 100644 --- a/web/main.js +++ b/web/main.js @@ -664,18 +664,50 @@ const app = createApp({ state.exportForm.datasource = state.exportTpl.datasource || row.datasource || 'marketing'; state.exportForm.file_format = state.exportTpl.file_format || row.file_format || 'xlsx'; + // 当 URL 中有 userId 时,自动选中并禁用创建者字段 + const userId = Api.getUserId(); + const shouldAutoSelectCreator = userId && hasOnlyUserId.value; + + console.log('[openExport] userId:', userId, 'hasOnlyUserId:', hasOnlyUserId.value, 'shouldAutoSelectCreator:', shouldAutoSelectCreator); + if (state.exportForm.datasource === 'marketing') { - loadCreators(); - // 注意:不再自动从 current_user_id 设置 creatorId/creatorIds - // 用户需要手动选择 creator 进行过滤 + await loadCreators(); + if (shouldAutoSelectCreator) { + const userIdNum = Number(userId); + console.log('[openExport] 设置 marketing creatorId:', userIdNum); + // 直接设置 userId,即使创建者列表中暂时没有该选项 + state.exportForm.creatorId = userIdNum; + // 等待 Vue 更新 + await Vue.nextTick(); + const creatorExists = creatorOptions.value.some(opt => opt.value === userIdNum); + console.log('[openExport] creatorOptions:', creatorOptions.value.length, 'creatorExists:', creatorExists); + if (!creatorExists) { + console.log(`警告: 创建者列表中未找到 userId=${userIdNum},但已自动设置`); + } + } } if (state.exportForm.datasource === 'ymt') { await loadYmtCreators(); - await loadYmtMerchants(); - await loadYmtActivities(); - // 注意:不再自动从 current_user_id 设置 ymtCreatorId - // 用户需要手动选择 creator 进行过滤 + if (shouldAutoSelectCreator) { + const userIdNum = Number(userId); + console.log('[openExport] 设置 ymt ymtCreatorId:', userIdNum); + // 直接设置 userId,即使创建者列表中暂时没有该选项 + state.exportForm.ymtCreatorId = userIdNum; + // 加载相关的商户和活动 + await loadYmtMerchants(); + await loadYmtActivities(); + // 等待 Vue 更新 + await Vue.nextTick(); + const creatorExists = ymtCreatorOptions.value.some(opt => opt.value === userIdNum); + console.log('[openExport] ymtCreatorOptions:', ymtCreatorOptions.value.length, 'creatorExists:', creatorExists); + if (!creatorExists) { + console.log(`警告: 易码通用户列表中未找到 userId=${userIdNum},但已自动设置`); + } + } else { + await loadYmtMerchants(); + await loadYmtActivities(); + } } if (!state.exportForm.dateRange?.length) { @@ -683,6 +715,26 @@ const app = createApp({ } state.exportVisible = true; + + // 对话框打开后,再次确保值已设置(处理异步加载和渲染的情况) + await Vue.nextTick(); + // 使用 setTimeout 确保在对话框完全渲染后再设置值 + setTimeout(() => { + if (shouldAutoSelectCreator) { + const userIdNum = Number(userId); + if (state.exportForm.datasource === 'marketing') { + if (state.exportForm.creatorId !== userIdNum) { + console.log('[openExport] 对话框打开后重新设置 marketing creatorId:', userIdNum); + state.exportForm.creatorId = userIdNum; + } + } else if (state.exportForm.datasource === 'ymt') { + if (state.exportForm.ymtCreatorId !== userIdNum) { + console.log('[openExport] 对话框打开后重新设置 ymt ymtCreatorId:', userIdNum); + state.exportForm.ymtCreatorId = userIdNum; + } + } + } + }, 100); }; /**