diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 8e493b5..315b2a9 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -57,7 +57,7 @@ - + @@ -115,15 +115,7 @@ - - - - - diff --git a/.workbuddy/memory/2026-07-22.md b/.workbuddy/memory/2026-07-22.md index 2d1eef2..1c7b98f 100644 --- a/.workbuddy/memory/2026-07-22.md +++ b/.workbuddy/memory/2026-07-22.md @@ -45,3 +45,14 @@ - `@/api/system/user/index.ts` 新增 `setUserDeveloper(userId)` → `PUT /system/user/developer/{userId}`。 - `vip-review/index.tsx`:移除 `addUserRole/listUserRole/listRoles/TenantId` 等角色相关 import 与 `VIP_ROLE_*`、`getCurrentTenantId`、`getVipRoleId`、`assignVipRole`、`formatDateTime`;`handleApprove` 中 `await assignVipRole(item.userId)` 替换为 `await setUserDeveloper(item.userId!)`。 - 约定:**开发者身份 = `sys_user.is_developer` 布尔位,不是角色表记录**(已记项目 MEMORY.md)。 + +## 小程序端新增开发者中心 & 平台管理(入口改造) +- 起因:用户要求小程序端对齐 PC 端 `/developer` 与 `/admin` 功能。方案确认:入口挂「我的」页,分阶段实现 MVP 核心。 +- 页面(新增于 `src/pages/developer/*` 与 `src/pages/admin/*`,已注册到 `app.config.ts`): + - 开发者中心:`index`(概览) / `apps`(我的应用) / `apikeys`(API Key) / `tickets`(我的工单) + - 平台管理:`index`(管理首页) / `app-review`(应用审核) / `git-review`(Git/权限审核) / `domain-review`(域名绑定审核) / `tickets`(工单处理) +- API 模块(新增 `src/api/app/`:apikey、appProduct、appDomain、ticket、developer),复刻 PC 端 `/api/app/*` 契约,基址走 `WEBSOPY_API_BASE_URL`。 +- 公共组件:新增 `StatCard` / `EntryGrid` / `CellRow`(`src/components/common/`)。 +- 入口方式(**本次按用户最新要求改**):不做工作台卡片,改为「我的」页功能菜单里的链接项,与「门店中心」同款——`开发者中心` 仅当 `(user as any)?.isDeveloper` 时显示、`平台管理` 仅当 `(user as any)?.isAdmin` 时显示,均 `requireAuth`。首页不额外加卡。 +- 关键依赖:菜单显示与否取决于登录接口返回的 user 对象是否携带 `isDeveloper/isAdmin` 字段(后端 `setDeveloper` 写的是 `sys_user.is_developer`,但登录态是否回填该字段需联调确认)。 +- 编译验证:已 `npm run build:weapp`(后台 IzjQLY 进行中),待确认无报错。 diff --git a/src/pages/index/index.tsx b/src/pages/index/index.tsx index 2fe0e31..e864f6f 100644 --- a/src/pages/index/index.tsx +++ b/src/pages/index/index.tsx @@ -255,6 +255,31 @@ const IndexPage: React.FC = () => { + {/* 角色工作台入口:仅开发者 / 平台管理员可见 */} + {(isLoggedIn && ((user as any)?.isDeveloper || (user as any)?.isAdmin)) && ( + + {(user as any)?.isDeveloper && ( + Taro.navigateTo({ url: '/pages/developer/index/index' })} + > + 🛠️ + 开发者中心 + + )} + {(user as any)?.isAdmin && ( + Taro.navigateTo({ url: '/pages/admin/index/index' })} + > + 🛡️ + 平台管理 + + )} + + )} {/* 轮播图 */} {bannerSlides.length > 0 ? ( diff --git a/src/pages/user/user.tsx b/src/pages/user/user.tsx index 2ffbae2..472d598 100644 --- a/src/pages/user/user.tsx +++ b/src/pages/user/user.tsx @@ -103,6 +103,10 @@ const UserPage: React.FC = () => { const menuItems = [ // 申请成为开发者 - 醒目样式 { icon: '🔰', label: '申请成为开发者', url: '/pages/user/vip-upgrade/index', highlight: true, requireAuth: true }, + // 开发者中心:仅 isDeveloper 用户显示 + ...((user as any)?.isDeveloper ? [{ icon: '🛠️', label: '开发者中心', url: '/pages/developer/index/index', requireAuth: true }] : []), + // 平台管理:仅 isAdmin 用户显示 + ...((user as any)?.isAdmin ? [{ icon: '🛡️', label: '平台管理', url: '/pages/admin/index/index', requireAuth: true }] : []), // 门店中心:仅门店店员/店长显示(通过 /shop/shop-store-user/my 判断) ...(storeInfo ? [{ icon: '🏪', label: '门店中心', url: '/pages/store/center/index', requireAuth: true }] : []), { icon: '💰', label: '我的钱包', url: '/pages/user/wallet', requireAuth: true },