From ed02db5a8d4e4fe6e5b13a0ae6802f299e362643 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E5=BF=A0=E6=9E=97?= <170083662@qq.com> Date: Tue, 27 Jan 2026 17:50:16 +0800 Subject: [PATCH] =?UTF-8?q?fix(dealer):=20=E8=A7=A3=E5=86=B3=E7=BB=8F?= =?UTF-8?q?=E9=94=80=E5=95=86=E7=94=B3=E8=AF=B7=E6=B3=A8=E5=86=8C=E6=B5=81?= =?UTF-8?q?=E7=A8=8B=E4=B8=AD=E7=9A=84=E8=A7=92=E8=89=B2=E5=88=86=E9=85=8D?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加了对用户ID存在性的检查,避免注册时用户信息缺失导致的错误 - 实现了更健壮的角色查询逻辑,当查询不到角色时使用默认角色ID进行兜底 - 新增了addUserRole API方法用于在用户无角色时创建默认角色 - 优化了角色分配逻辑,支持upsert操作以处理不同后端实现方式 - 将页面跳转从navigateBack改为switchTab,确保注册后正确返回到"我的"页面 - 更新了API基础URL配置,统一指向新的mp-api域名 - 修复了二维码组件中的API地址引用,保持与新域名的一致性 --- config/env.ts | 6 +-- src/api/system/userRole/index.ts | 15 ++++++ src/components/SimpleQRCodeModal.tsx | 2 +- src/dealer/apply/add.tsx | 77 +++++++++++++++++++++++----- 4 files changed, 84 insertions(+), 16 deletions(-) diff --git a/config/env.ts b/config/env.ts index 16c21e5..da3a21b 100644 --- a/config/env.ts +++ b/config/env.ts @@ -3,19 +3,19 @@ export const ENV_CONFIG = { // 开发环境 development: { // API_BASE_URL: 'http://127.0.0.1:9200/api', - API_BASE_URL: 'https://cms-api.websoft.top/api', + API_BASE_URL: 'https://mp-api.websoft.top/api', APP_NAME: '开发环境', DEBUG: 'true', }, // 生产环境 production: { - API_BASE_URL: 'https://cms-api.websoft.top/api', + API_BASE_URL: 'https://mp-api.websoft.top/api', APP_NAME: '桂乐淘', DEBUG: 'false', }, // 测试环境 test: { - API_BASE_URL: 'https://cms-api.s209.websoft.top/api', + API_BASE_URL: 'https://mp-api.s209.websoft.top/api', APP_NAME: '测试环境', DEBUG: 'true', } diff --git a/src/api/system/userRole/index.ts b/src/api/system/userRole/index.ts index 3dfa2e1..ecaefcc 100644 --- a/src/api/system/userRole/index.ts +++ b/src/api/system/userRole/index.ts @@ -30,3 +30,18 @@ export async function updateUserRole(data: UserRole) { } return Promise.reject(new Error(res.message)); } + +/** + * 新增用户角色 + * 说明:部分后端实现为 POST 新增、PUT 修改;这里补齐 API 以便新用户无角色时可以创建默认角色。 + */ +export async function addUserRole(data: UserRole) { + const res = await request.post>( + SERVER_API_URL + '/system/user-role', + data + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} diff --git a/src/components/SimpleQRCodeModal.tsx b/src/components/SimpleQRCodeModal.tsx index 167c8cc..1acde23 100644 --- a/src/components/SimpleQRCodeModal.tsx +++ b/src/components/SimpleQRCodeModal.tsx @@ -81,7 +81,7 @@ const SimpleQRCodeModal: React.FC = ({ {qrContent ? ( 二维码 { - const {user, loginUser} = useUser() + const {user, loginUser, fetchUserInfo} = useUser() const [loading, setLoading] = useState(true) const [FormData, setFormData] = useState() const formRef = useRef(null) @@ -176,12 +178,27 @@ const AddUserAddress = () => { } console.log(values,FormData) - const roles = await listUserRole({userId: user?.userId}) - console.log(roles, 'roles...') + if (!user?.userId) { + Taro.showToast({ + title: '用户信息缺失,请先登录', + icon: 'error' + }); + return; + } + + let roles: UserRole[] = []; + try { + roles = await listUserRole({userId: user.userId}) + console.log(roles, 'roles...') + } catch (e) { + // 新用户/权限限制时可能查不到角色列表,不影响基础注册流程 + console.warn('查询用户角色失败,将尝试直接写入默认角色:', e) + roles = [] + } // 准备提交的数据 await updateUser({ - userId: user?.userId, + userId: user.userId, nickname: values.realName || FormData?.nickname, phone: values.phone || FormData?.phone, avatar: values.avatar || FormData?.avatar, @@ -189,17 +206,52 @@ const AddUserAddress = () => { }); await addShopDealerUser({ - userId: user?.userId, + userId: user.userId, realName: values.realName || FormData?.nickname, mobile: values.phone || FormData?.phone, refereeId: Number(values.refereeId) || Number(FormData?.refereeId) }) - if (roles.length > 0) { - await updateUserRole({ - ...roles[0], - roleId: 1848 - }) + // 角色为空时这里会导致“注册成功但没有角色”,这里做一次兜底写入默认 user 角色 + try { + // 1) 先尝试通过 roleCode=user 查询角色ID(避免硬编码) + // 2) 取不到就回退到旧的默认ID(1848) + let userRoleId: number | undefined; + try { + // 注意:当前 request.get 的封装不支持 axios 风格的 { params: ... }, + // 某些自动生成的 API 可能无法按参数过滤;这里直接取全量再本地查找更稳。 + const roleList = await listRoles(); + userRoleId = roleList?.find(r => r.roleCode === 'user')?.roleId; + } catch (_) { + // ignore + } + if (!userRoleId) userRoleId = 1848; + + const baseRolePayload = { + userId: user.userId, + tenantId: Number(TenantId), + roleId: userRoleId + }; + + // 后端若已创建 user-role 记录则更新;否则尝试“无id更新”触发创建(多数实现会 upsert) + if (roles.length > 0) { + await updateUserRole({ + ...roles[0], + roleId: userRoleId + }); + } else { + try { + await addUserRole(baseRolePayload); + } catch (_) { + // 兼容后端仅支持 PUT upsert 的情况 + await updateUserRole(baseRolePayload); + } + } + + // 刷新一次用户信息,确保 roles 写回本地缓存,避免“我的”页显示为空/不一致 + await fetchUserInfo(); + } catch (e) { + console.warn('写入默认角色失败(不影响注册成功):', e) } @@ -209,7 +261,8 @@ const AddUserAddress = () => { }); setTimeout(() => { - Taro.navigateBack(); + // “我的”是 tabBar 页面,注册完成后直接切到“我的” + Taro.switchTab({ url: '/pages/user/user' }); }, 1000); } catch (error) {