From 07894f63a2bb7f825718b95adb65209b2220f4b3 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, 13 Jan 2026 16:54:38 +0800 Subject: [PATCH] =?UTF-8?q?feat(user):=20=E4=BC=98=E5=8C=96=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E9=AA=8C=E8=AF=81=E9=A1=B5=E9=9D=A2=E7=9A=84=E6=9C=BA?= =?UTF-8?q?=E6=9E=84=E6=9F=A5=E8=AF=A2=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加 fetchUserInfo 方法到 useUser hook 用于刷新用户信息 - 实现 normalizeOrganizationIds 函数处理商户ID数组格式化 - 添加从本地存储获取用户商户信息的逻辑 - 当本地无商户信息时通过接口刷新用户数据 - 根据用户商户权限动态调整机构查询参数 - 修复组织ID数组去重和过滤空值问题 - 优化 useEffect 依赖数组避免无效重复加载 --- src/api/system/organization/model/index.ts | 1 + src/user/userVerify/admin.tsx | 78 +++++++++++++++++----- 2 files changed, 61 insertions(+), 18 deletions(-) diff --git a/src/api/system/organization/model/index.ts b/src/api/system/organization/model/index.ts index 9a075f8..59d687d 100644 --- a/src/api/system/organization/model/index.ts +++ b/src/api/system/organization/model/index.ts @@ -41,4 +41,5 @@ export interface OrganizationParam extends PageParam { keywords?: string; limit?: number; parentId?: number; + organizationIds?: any; } diff --git a/src/user/userVerify/admin.tsx b/src/user/userVerify/admin.tsx index 4398597..8b76341 100644 --- a/src/user/userVerify/admin.tsx +++ b/src/user/userVerify/admin.tsx @@ -25,7 +25,7 @@ const UserVerifyAdmin: React.FC = () => { const [keywords, setKeywords] = useState('') // const [showTextArea, setShowTextArea] = useState(false) const [refreshing, setRefreshing] = useState(false) - const {user} = useUser() + const {user, fetchUserInfo} = useUser() console.log(refreshing) // 获取状态显示 @@ -52,25 +52,66 @@ const UserVerifyAdmin: React.FC = () => { keywords: keywords.trim(), } - // if (Taro.getStorageSync('RoleCode') == 'zhandian') { - // @ts-ignore - // where.organizationId = Taro.getStorageSync('OrganizationId') - // } - // if (Taro.getStorageSync('RoleCode') == 'kuaidi') { - // @ts-ignore - // where.OrganizationParentId = Taro.getStorageSync('OrganizationParentId') - // } + // 如果当前登录用户可管理商户存在,则直接按商户ID过滤 + const normalizeOrganizationIds = (value: any): any[] | undefined => { + if (value == null) return undefined + if (Array.isArray(value)) return value + if (typeof value === 'string') { + const trimmed = value.trim() + if (!trimmed) return [] + try { + const parsed = JSON.parse(trimmed) + if (Array.isArray(parsed)) return parsed + } catch (_e) {} + return trimmed + .split(',') + .map(s => s.trim()) + .filter(Boolean) + } + return [value] + } - const organizations = await listOrganizations({ - parentId: Taro.getStorageSync('OrganizationId') - }) - const organizationIds = organizations.map(item => item.organizationId) - // 把Taro.getStorageSync('OrganizationId')也放入数组 - organizationIds.push(Taro.getStorageSync('OrganizationId')) + let merchants = user?.merchants + if (merchants == null) { + const storedUser = Taro.getStorageSync('User') + if (storedUser) { + if (typeof storedUser === 'string') { + try { + merchants = JSON.parse(storedUser)?.merchants + } catch (_e) {} + } else { + merchants = storedUser?.merchants + } + } + } + + // 本地没有拿到 merchants 时,尝试从接口刷新一次用户信息 + if (merchants == null && user?.userId) { + const latestUser = await fetchUserInfo() + merchants = latestUser?.merchants + } + + // 查询机构列表:如果 merchants 存在,则用 organizationIds=merchants 来查 + const organizationIdsParam = normalizeOrganizationIds(merchants) + const hasMerchants = Boolean(organizationIdsParam && organizationIdsParam.length > 0) + + const organizations = await listOrganizations( + hasMerchants + ? // @ts-ignore + { organizationIds: organizationIdsParam } + : { parentId: Taro.getStorageSync('OrganizationId') } + ) + + const organizationIds = organizations.map(item => item.organizationId).filter(Boolean) as any[] + // 把 merchants/当前机构 也放入数组 + if (hasMerchants) { + organizationIds.push(...(organizationIdsParam as any[])) + } else { + organizationIds.push(Taro.getStorageSync('OrganizationId')) + } - console.log(organizationIds,'organizationIds') // @ts-ignore - where.organizationIds = organizationIds; + where.organizationIds = Array.from(new Set(organizationIds)) const res = await pageUserVerify(where) @@ -168,8 +209,9 @@ const UserVerifyAdmin: React.FC = () => { } useEffect(() => { + if (!user?.userId) return reload().then() - }, []) + }, [user?.userId]) return ( <>