Files
websopy-taro/.workbuddy/memory/2026-07-22.md
赵忠林 2ec3383fd0 feat(weapp): 新增开发者中心与平台管理入口及功能
- 小程序端新增开发者中心和平台管理页面模块,完善功能入口
- 新增开发者中心页面(概览、我的应用、API Key和工单)
- 新增平台管理页面(管理首页、应用审核、Git权限审核、域名绑定审核和工单处理)
- 复刻PC端/api/app/*相关API接口,基地址使用WEBSOPY_API_BASE_URL
- 增加公共组件StatCard、EntryGrid、CellRow以支持新页面UI
- 修改首页增加开发者中心和平台管理角色入口,仅对对应用户显示
- 用户页面菜单新增开发者中心和平台管理入口条件展示
- 约定开发者身份使用sys_user.is_developer布尔字段,不再依赖角色表
- 更新登录态业务,菜单是否显示基于登录接口返回的isDeveloper/isAdmin字段
- vip-review审核通过流程调整为只调用setUserDeveloper,后台替换角色为developer并置isDeveloper=1
2026-07-22 16:42:15 +08:00

8.8 KiB
Raw Blame History

2026-07-22 工作日志

开发者登录弹窗 UI 美化

  • 文件:src/pages/user/about/index.tsx
  • 美化了 Input圆角12px、高度48px、柔和背景色、Button蓝色渐变、阴影、圆角14px、验证码按钮与输入框等高、倒计时优化
  • 弹窗整体:圆角加大、内边距增加、宽度收窄

开发者登录弹窗样式改为红色系

  • 文件:src/pages/user/about/index.tsx
  • Input 边框:transparent#e53e3e(红色),背景 #f7f8fa#fff5f5(淡红)
  • 获取验证码按钮:激活态添加 backgroundColor: #e53e3eborderColor: #e53e3e
  • 登录按钮:渐变从蓝色 #4f8cff→#3b6fd4 改为红色 #fc5c5c→#e53e3e,阴影同步改为红色

关于我们页面介绍内容改写

  • 文件:src/pages/user/about/index.tsx
  • 公司南宁市网宿信息科技有限公司品牌威数谱软件websopy
  • 重写品牌故事三个段落、核心业务6项软件相关、联系我们公司名称/总部/电话/邮箱/官网)、版权信息
  • 头部 Logo 文字「鑫」→「威」,版本号显示 websopy v1.0.0

VIP 概念替换为「开发者」(文案统一)

  • 起因:用户要求把 pages/user/vip-upgrade/index 的 VIP 概念换成「开发者」。后台审核页 vip-review 已定义 VIP_ROLE_NAME='开发者',概念本就一致。
  • 改动文件与要点:
    • vip-upgrade/index.tsx + index.config.ts:导航栏/分享标题/主副标题/状态说明/温馨提示/权益区块标题及权益项描述全部「VIP会员」→「开发者」顶部图标 👑🔰;表单标签「门店名称/门店地址」→「开发团队/公司地址」placeholder、toast 同步),底层字段 realName/address 不变。
    • user.tsx用户中心入口「升级VIP会员」👑→「申请开发者」🔰
    • store/center/index.tsx门店中心入口「VIP会员审核/审核客户VIP会员申请」👑→「开发者审核/审核客户开发者申请」🔰
    • vip-review/index.tsx:导航栏标题、通过/驳回弹窗文案、审核说明、列表字段标签(门店名称/门店地址→开发团队/公司地址)统一为「开发者」。
  • 注意:仅改可见文案与图标,未重命名页面路由/文件夹vip-upgrade、vip-review、变量名VIP_ROLE_CODE、pendingVipCount 等及定价逻辑dealerPrice/VIP 状态判断仍保留原标识符,因对应后端角色与缓存 key
  • 用户确认方式:先给文案对照表,经 AskUserQuestion 确认表单标签与图标及范围后执行。

VIP 升级页新增「所在城市」选择

  • 文件:src/pages/user/vip-upgrade/index.tsxsrc/api/shop/shopDealerApply/model/index.ts
  • 在「办公地址」上方新增「所在城市 *」字段:复用微信原生 Picker mode='region'(省市区三级),与 pages/user/address-edit.tsx 风格一致。
  • 状态:cityValue: string[] + 派生 cityText(以空格连接);Pickerdisabled 跟随 isReadonly(审核中/已通过只读)。
  • ShopDealerApply 模型新增 city?: string(注释:省 市 区,空格分隔)。
  • 提交时 addShopDealerApply 增加 city: cityText;读取历史申请时 setCityValue(latest.city.split(' '));保存校验增加「请选择所在城市」。
  • 注意:仅前端扩展字段,后端是否落库 city 存疑(模型此前只有 address需后端 schema 支持才能真正持久化。

vip-review 审核通过:改为「更新 user 为 developer」不新增角色

  • 起因:用户要求 pages/user/vip-review/index 审核通过时直接把 user 标记为开发者,而不是往 sys_user_role 加 developer 角色。
  • 后端(仓库 /Users/gxwebsoft/JAVA/com.gxwebsoft.core,已 mvn -o compile BUILD SUCCESS
    • User.isDevelopersys_user.is_developerBoolean此前从未被写入正是开发者标记位。
    • UserService 新增 boolean markAsDeveloper(Integer userId)UserServiceImpl 用最小实体 updateByIdisDeveloper=true,成功后再经 syncMessageProducer 同步 websopy复用 updateUser 的同步范式)。
    • UserController 新增 PUT /api/system/user/developer/{userId}setDeveloper),权限沿用 sys:userRole:save(与原 addUserRole 一致,避免店员 403 回归)。
  • 前端:
    • @/api/system/user/index.ts 新增 setUserDeveloper(userId)PUT /system/user/developer/{userId}
    • vip-review/index.tsx:移除 addUserRole/listUserRole/listRoles/TenantId 等角色相关 import 与 VIP_ROLE_*getCurrentTenantIdgetVipRoleIdassignVipRoleformatDateTimehandleApproveawait assignVipRole(item.userId) 替换为 await setUserDeveloper(item.userId!)
  • 约定:开发者身份 = sys_user.is_developer 布尔位,不是角色表记录(已记项目 MEMORY.md

vip-review 审核通过:补回「开发者角色绑定」+ 保留 isDeveloper=1

  • 起因:上一轮把 addUserRole 整段删了(按"不用新增角色")。本轮用户要求"除了更新角色之外,还要更新 isDeveloper=1",即两者都要。
  • 改动:仅前端 src/pages/user/vip-review/index.tsx
    • 恢复 importaddUserRole, listUserRole(@/api/system/userRole)、listRoles(@/api/system/role)、TenantId(@/config/app)。
    • 恢复常量与函数:VIP_ROLE_CODE='developer'VIP_ROLE_NAME='开发者'getCurrentTenantId()getVipRoleId()(按 roleCode+租户查 roleIdassignVipRole(userId)(查已有角色、无则 addUserRole)。
    • handleApproveawait setUserDeveloper(item.userId!) 之前新增 await assignVipRole(item.userId):先绑 developer 角色,再置 is_developer=1
  • 后端 markAsDeveloperPUT /system/user/developer/{userId})上一轮已落地并编译通过,本次未改;其 updateByIdisDeveloper=true 即"更新数据库"的落库动作。
  • 结论:审核通过 = 绑定 developer 角色 + 置 isDeveloper=1两项都做。已更新项目 MEMORY.md 的"开发者身份表示方式"条目。

vip-review 审核通过:更正为「替换角色为 developer」+ is_developer=1(最终方案)

  • 用户纠正上一轮:不是"新增/叠加角色"(那样会留下原角色 + developer 两个角色),而是把用户角色改成 developer替换不并存,同时 sys_user.is_developer=1
  • 前端 vip-review/index.tsx:撤掉上一轮刚加回的 assignVipRoleaddUserRole/listUserRole/listRoles/TenantId/VIP_ROLE_*/getCurrentTenantId/getVipRoleIdhandleApprove 恢复为只 await setUserDeveloper(item.userId!)。前端完全不碰 sys_user_role
  • 后端 UserServiceImpl.markAsDeveloper 本次新增"替换角色"逻辑:置 is_developer=1 后,按 user.getTenantId()roleService.getByRoleCode(roleCode="developer", tenantId) 找到 developer 角色 → userRoleService.remove(eq userId) 删现有角色 → saveBatch(userId, [developerRoleId]) 只绑 developer单角色。整段包 try/catch角色缺失/失败不影响 is_developer 落库。新增 importRoleParamjava.util.Collections
  • 编译:./mvnw -o compile → BUILD SUCCESS。前端无残留角色符号。
  • 结论(已同步 MEMORY.md升级为开发者 = 单角色 developer + isDeveloper 标记位;前端一次 setUserDeveloper 调用、后端一处搞定。

小程序端新增开发者中心 & 平台管理(入口改造)

  • 起因:用户要求小程序端对齐 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 / CellRowsrc/components/common/)。
  • 入口方式(本次按用户最新要求改):不做工作台卡片,改为「我的」页功能菜单里的链接项,与「门店中心」同款——开发者中心 仅当 (user as any)?.isDeveloper 时显示、平台管理 仅当 (user as any)?.isAdmin 时显示,均 requireAuth。首页不额外加卡。
  • 关键依赖:菜单显示与否取决于登录接口返回的 user 对象是否携带 isDeveloper/isAdmin 字段(后端 setDeveloper 写的是 sys_user.is_developer,但登录态是否回填该字段需联调确认)。
  • 编译验证:已 npm run build:weapp(后台 IzjQLY 进行中),待确认无报错。