From a834f88aaac7918d02737ff40688af738178efd1 Mon Sep 17 00:00:00 2001 From: gxwebsoft <170083662@qq.com> Date: Mon, 9 Mar 2026 16:15:30 +0800 Subject: [PATCH] =?UTF-8?q?refactor(admin):=20=E9=87=8D=E6=9E=84=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E7=AE=A1=E7=90=86=E9=A1=B5=E9=9D=A2=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将原有经销商团队页面重构为用户管理页面 - 集成分页用户查询功能替代原有团队数据获取 - 添加搜索栏和下拉刷新功能 - 实现无限滚动加载用户数据 - 添加用户角色显示和切换功能 - 优化页面布局和用户体验 - 移除原有的经销商相关代码逻辑refactor(admin): 重构用户管理页面实现角色切换功能 - 将原经销商团队页面重构为系统用户管理页面 - 集成分页用户列表查询功能 - 实现下拉刷新和无限滚动加载 - 添加用户搜索和筛选功能 - 实现用户角色切换功能 - 优化用户列表展示界面和交互体验 - 移除原有的经销商相关统计功能 - 统一使用Taro框架进行页面开发 - 修复系统角色API参数传递问题 --- src/admin/users/index.tsx | 41 ++++++++++++++++++++++++++------------- 1 file changed, 28 insertions(+), 13 deletions(-) diff --git a/src/admin/users/index.tsx b/src/admin/users/index.tsx index 58ac8ab..bc5abde 100644 --- a/src/admin/users/index.tsx +++ b/src/admin/users/index.tsx @@ -1,4 +1,4 @@ -import {useEffect, useRef, useState} from 'react' +import {useRef, useState} from 'react' import Taro, {useDidShow} from '@tarojs/taro' import {View, Text} from '@tarojs/components' import { @@ -14,6 +14,7 @@ import { import type {User} from '@/api/system/user/model' import {pageUsers} from '@/api/system/user' import {listUserRole, updateUserRole} from '@/api/system/userRole' +import {listRoles} from '@/api/system/role' const PAGE_SIZE = 10 @@ -26,7 +27,21 @@ const AdminUsers = () => { const [page, setPage] = useState(1) const [total, setTotal] = useState(0) - const rolesLoadedRef = useRef(false) + const roleIdMapRef = useRef>({}) + const roleMapLoadedRef = useRef(false) + + const getRoleIdByCode = async (roleCode: string) => { + if (!roleMapLoadedRef.current) { + const roles = await listRoles() + const nextMap: Record = {} + roles?.forEach(role => { + if (role.roleCode && role.roleId) nextMap[role.roleCode] = role.roleId + }) + roleIdMapRef.current = nextMap + roleMapLoadedRef.current = true + } + return roleIdMapRef.current[roleCode] + } const reload = async (isRefresh = false, overrideKeywords?: string) => { if (loading) return @@ -92,7 +107,8 @@ const AdminUsers = () => { const toggleRole = async (target: User) => { const current = getPrimaryRoleCode(target) - const nextRoleName = current === 'dealer' ? '注册会员' : '业务员' + const nextRoleCode = current === 'dealer' ? 'user' : 'dealer' + const nextRoleName = nextRoleCode === 'user' ? '注册会员' : '业务员' const confirmRes = await Taro.showModal({ title: '确认切换角色', @@ -104,18 +120,23 @@ const AdminUsers = () => { const userId = target.userId if (!userId) return + const nextRoleId = await getRoleIdByCode(nextRoleCode) + if (!nextRoleId) { + throw new Error(`未找到角色配置:${nextRoleCode}`) + } + const roles = await listUserRole({userId}) - const candidate = roles?.find(r => r.roleCode === 'dealer' || r.roleCode === 'user') || roles?.[0] + const candidate = roles?.find(r => r.roleCode === 'dealer' || r.roleCode === 'user') if (candidate) { await updateUserRole({ ...candidate, - roleId: 1935 + roleId: nextRoleId }) } else { await updateUserRole({ userId, - roleId: 1915 + roleId: nextRoleId }) } @@ -129,7 +150,7 @@ const AdminUsers = () => { const handleSearch = (value: string) => { setSearchValue(value) - reload(true, undefined).then() + reload(true, value).then() } const loadMore = async () => { @@ -150,12 +171,6 @@ const AdminUsers = () => { init().then() }) - useEffect(() => { - if (!rolesLoadedRef.current) return - reload(true).then() - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [searchValue]) - return (