feat(user): 优化用户验证页面的机构查询逻辑
- 添加 fetchUserInfo 方法到 useUser hook 用于刷新用户信息 - 实现 normalizeOrganizationIds 函数处理商户ID数组格式化 - 添加从本地存储获取用户商户信息的逻辑 - 当本地无商户信息时通过接口刷新用户数据 - 根据用户商户权限动态调整机构查询参数 - 修复组织ID数组去重和过滤空值问题 - 优化 useEffect 依赖数组避免无效重复加载
This commit is contained in:
@@ -41,4 +41,5 @@ export interface OrganizationParam extends PageParam {
|
|||||||
keywords?: string;
|
keywords?: string;
|
||||||
limit?: number;
|
limit?: number;
|
||||||
parentId?: number;
|
parentId?: number;
|
||||||
|
organizationIds?: any;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ const UserVerifyAdmin: React.FC = () => {
|
|||||||
const [keywords, setKeywords] = useState<string>('')
|
const [keywords, setKeywords] = useState<string>('')
|
||||||
// const [showTextArea, setShowTextArea] = useState<boolean>(false)
|
// const [showTextArea, setShowTextArea] = useState<boolean>(false)
|
||||||
const [refreshing, setRefreshing] = useState<boolean>(false)
|
const [refreshing, setRefreshing] = useState<boolean>(false)
|
||||||
const {user} = useUser()
|
const {user, fetchUserInfo} = useUser()
|
||||||
console.log(refreshing)
|
console.log(refreshing)
|
||||||
|
|
||||||
// 获取状态显示
|
// 获取状态显示
|
||||||
@@ -52,25 +52,66 @@ const UserVerifyAdmin: React.FC = () => {
|
|||||||
keywords: keywords.trim(),
|
keywords: keywords.trim(),
|
||||||
}
|
}
|
||||||
|
|
||||||
// if (Taro.getStorageSync('RoleCode') == 'zhandian') {
|
// 如果当前登录用户可管理商户存在,则直接按商户ID过滤
|
||||||
// @ts-ignore
|
const normalizeOrganizationIds = (value: any): any[] | undefined => {
|
||||||
// where.organizationId = Taro.getStorageSync('OrganizationId')
|
if (value == null) return undefined
|
||||||
// }
|
if (Array.isArray(value)) return value
|
||||||
// if (Taro.getStorageSync('RoleCode') == 'kuaidi') {
|
if (typeof value === 'string') {
|
||||||
// @ts-ignore
|
const trimmed = value.trim()
|
||||||
// where.OrganizationParentId = Taro.getStorageSync('OrganizationParentId')
|
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({
|
let merchants = user?.merchants
|
||||||
parentId: Taro.getStorageSync('OrganizationId')
|
if (merchants == null) {
|
||||||
})
|
const storedUser = Taro.getStorageSync('User')
|
||||||
const organizationIds = organizations.map(item => item.organizationId)
|
if (storedUser) {
|
||||||
// 把Taro.getStorageSync('OrganizationId')也放入数组
|
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'))
|
organizationIds.push(Taro.getStorageSync('OrganizationId'))
|
||||||
|
}
|
||||||
|
|
||||||
console.log(organizationIds,'organizationIds')
|
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
where.organizationIds = organizationIds;
|
where.organizationIds = Array.from(new Set(organizationIds))
|
||||||
|
|
||||||
const res = await pageUserVerify(where)
|
const res = await pageUserVerify(where)
|
||||||
|
|
||||||
@@ -168,8 +209,9 @@ const UserVerifyAdmin: React.FC = () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
if (!user?.userId) return
|
||||||
reload().then()
|
reload().then()
|
||||||
}, [])
|
}, [user?.userId])
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
|
|||||||
Reference in New Issue
Block a user