refactor(user): 将VIP身份统一改为开发者标记

- 审核通过时不再新增角色,而是更新用户isDeveloper布尔标记
- 后端UserService新增markAsDeveloper方法,通过updateById设置isDeveloper
- UserController新增PUT接口更新开发者标记,权限使用sys:userRole:save
- 前端api新增setUserDeveloper调用新的审核接口
- vip-review页面移除角色相关代码,改为调用setUserDeveloper方法
- 约定开发者身份即sys_user.is_developer字段,不再依赖角色表记录
- app.config.ts追加开发者中心与平台管理相关页面路由
- 新增开发者中心、平台管理的多个API模块(apikey、appProduct、appDomain、developer请求等)
- 添加公共工具方法和复用组件用于开发者中心及平台管理功能
- 统一品牌名称为“威数谱软件”,更新文案及界面展现一致性
This commit is contained in:
2026-07-22 14:57:03 +08:00
parent 2ea16e22cf
commit 39d3b59434
24 changed files with 2015 additions and 95 deletions

40
.idea/workspace.xml generated
View File

@@ -4,18 +4,12 @@
<option name="autoReloadType" value="SELECTIVE" />
</component>
<component name="ChangeListManager">
<list default="true" id="2de94e4f-0587-4c9b-8bfd-e87e0ae95b81" name="更改" comment="refactor(user): 删除门店信息输入框&#10;&#10;- 移除用户资料页面中的门店名称输入框&#10;- 移除用户资料页面中的门店地址输入框&#10;- 简化用户页面界面布局,提高界面整洁度">
<list default="true" id="2de94e4f-0587-4c9b-8bfd-e87e0ae95b81" name="更改" comment="refactor(user): 统一品牌名称为“威数谱软件”&#10;&#10;- 将项目中所有“威硕谱软件”名称修改为“威数谱软件”&#10;- 更新协议页面、欢迎消息、礼品卡等多处文本内容&#10;- 修改小程序配置文件中的项目名称和显示标题&#10;- 优化开发者申请页部分文案,明确开发者身份描述&#10;- 保证所有界面及配置中的品牌名称统一一致">
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/config/env.js" beforeDir="false" afterPath="$PROJECT_DIR$/config/env.js" afterDir="false" />
<change beforePath="$PROJECT_DIR$/project.config.json" beforeDir="false" afterPath="$PROJECT_DIR$/project.config.json" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/pages/detail.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/detail.tsx" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/pages/gift-card/purchase/index.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/gift-card/purchase/index.tsx" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/pages/index/index.config.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/index/index.config.ts" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/pages/index/index.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/index/index.tsx" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/pages/purchase.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/purchase.tsx" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/pages/user/vip-upgrade/index.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/user/vip-upgrade/index.tsx" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/passport/agreement.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/src/passport/agreement.tsx" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/passport/login.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/src/passport/login.tsx" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.workbuddy/memory/2026-07-22.md" beforeDir="false" afterPath="$PROJECT_DIR$/.workbuddy/memory/2026-07-22.md" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/api/system/user/index.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/api/system/user/index.ts" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/app.config.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/app.config.ts" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/pages/user/vip-review/index.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/user/vip-review/index.tsx" afterDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
@@ -127,15 +121,7 @@
<workItem from="1784131049625" duration="2304000" />
<workItem from="1784133736973" duration="4614000" />
<workItem from="1784585070286" duration="3047000" />
<workItem from="1784638429525" duration="8483000" />
</task>
<task id="LOCAL-00012" summary="refactor(api): 移除未使用的配置接口及相关Hook&#10;&#10;- 从cmsWebsiteField接口中删除configWebsiteField方法&#10;- 删除useConfig自定义Hook及其引用&#10;- 更新about页面去除对config对象和useConfig的使用&#10;- 修正invite模块请求URL统一加上/api前缀">
<option name="closed" value="true" />
<created>1775908253789</created>
<option name="number" value="00012" />
<option name="presentableId" value="LOCAL-00012" />
<option name="project" value="LOCAL" />
<updated>1775908253789</updated>
<workItem from="1784638429525" duration="10410000" />
</task>
<task id="LOCAL-00013" summary="refactor(api): 移除未使用的配置接口及相关Hook&#10;&#10;- 从cmsWebsiteField接口中删除configWebsiteField方法&#10;- 删除useConfig自定义Hook及其引用&#10;- 更新about页面去除对config对象和useConfig的使用&#10;- 修正invite模块请求URL统一加上/api前缀">
<option name="closed" value="true" />
@@ -521,7 +507,15 @@
<option name="project" value="LOCAL" />
<updated>1784697730666</updated>
</task>
<option name="localTasksCounter" value="61" />
<task id="LOCAL-00061" summary="refactor(user): 统一品牌名称为“威数谱软件”&#10;&#10;- 将项目中所有“威硕谱软件”名称修改为“威数谱软件”&#10;- 更新协议页面、欢迎消息、礼品卡等多处文本内容&#10;- 修改小程序配置文件中的项目名称和显示标题&#10;- 优化开发者申请页部分文案,明确开发者身份描述&#10;- 保证所有界面及配置中的品牌名称统一一致">
<option name="closed" value="true" />
<created>1784699171525</created>
<option name="number" value="00061" />
<option name="presentableId" value="LOCAL-00061" />
<option name="project" value="LOCAL" />
<updated>1784699171525</updated>
</task>
<option name="localTasksCounter" value="62" />
<servers />
</component>
<component name="TypeScriptGeneratedFilesManager">
@@ -541,7 +535,6 @@
<component name="VcsManagerConfiguration">
<option name="CHECK_CODE_SMELLS_BEFORE_PROJECT_COMMIT" value="false" />
<option name="CHECK_NEW_TODO" value="false" />
<MESSAGE value="feat(passport): 优化已登录用户加入时协议勾选逻辑&#10;&#10;- 已登录用户点击「确认加入」时不再强制勾选协议&#10;- 移除 handleConfirmJoin 中对协议勾选的检查&#10;- 未注册用户仍需勾选协议后才能授权手机号&#10;- 确保登录状态异常时有提示信息显示" />
<MESSAGE value="feat(invite): 支持已登录用户直接加入应用&#10;&#10;- 后端accept接口code参数改为可选支持通过Authorization头识别登录用户&#10;- 已登录用户加入时不再弹手机号授权前端调用新增的doJoinAppForLoggedInUser方法&#10;- 未注册用户仍通过手机号授权码code加入调用doJoinAppForNewUser方法&#10;- 拆分前端加入逻辑新增handleConfirmJoin统一处理已登录加入流程&#10;- 优化按钮交互,已登录状态下按钮变为普通点击,移除协议强制勾选&#10;- 错误处理和状态提示完善,加入成功后自动跳转首页" />
<MESSAGE value="feat(developer): 完成小程序开发者中心和企业控制台改造&#10;&#10;- 设计并实现了开发者中心与企业控制台两大模块&#10;- 按用户角色区分开发者和企业客户,支持多项目类型及成员管理&#10;- 新增项目管理、应用管理、API Key管理及成员邀请等多功能页面&#10;- 实现应用版本发布、消息通知中心、权限审批与开发者申请流程&#10;- 完成CI/CD流水线、运营监控、发票管理、SSO单点登录功能&#10;- 搭建SDK下载中心、工单系统、FAQ系统、数据导入导出等模块&#10;- 优化后端API支持已登录和未注册用户不同加入应用流程&#10;- 前端按钮统一采用微信手机号授权,完善用户授权体验&#10;- 修复多个页面的JSX语法错误及依赖导入问题替换部分组件库&#10;- 增加详细的类型定义文件,提升项目类型安全&#10;- 新增超过55个页面及60个API接口扩展应用功能和服务体系&#10;- 完成全面的样式设计,实现一致的视觉风格和交互体验" />
<MESSAGE value="feat(api-keys): 优化隐私协议同意逻辑及样式&#10;&#10;- 修正api-keys样式导入路径改为developer路径&#10;- 在开发者申请页面增加服务协议和隐私政策勾选框&#10;- 提交时校验协议是否已勾选,未勾选时提示用户&#10;- 优化申请页面协议区域样式及交互&#10;- 在用户验证页面添加隐私政策同意勾选框&#10;- 提交用户验证表单时检查协议同意状态&#10;- 增加打开服务协议和隐私政策的链接跳转&#10;- 更新项目配置增加passport/webview路由配置&#10;- 修复createTicket函数中日期格式正则表达式问题" />
@@ -566,7 +559,8 @@
<MESSAGE value="feat(user): 动态查询VIP角色ID避免硬编码绑定问题&#10;&#10;- RoleParam新增tenantId字段支持按租户过滤角色&#10;- 新增getCurrentTenantId函数兼容登录态及默认租户回退&#10;- 实现getVipRoleId函数按roleCode与tenantId查询VIP角色ID&#10;- assignVipRole动态获取VIP角色ID移除写死的角色ID&#10;- 添加用户角色时传" />
<MESSAGE value="feat(user): 统一VIP概念为开发者并优化开发者登录及申请&#10;&#10;- 将VIP相关文案、图标改为开发者涉及用户中心、门店中心、审核页等&#10;- 优化登录弹窗UI改为红色系提升视觉统一性和交互体验&#10;- 关于我们页面品牌和公司信息内容更新,展示最新企业介绍和业务范围&#10;- VIP升级页新增“所在城市”选择使用微信原生地区选择器完善地址信息&#10;- 用户申请表单中新增城市字段及校验,提交时携带城市信息&#10;- 优化审核页面文案,统称开发者身份,明确申请审核内容&#10;- 修复UserRoleController.save接口bug避免userId被无条件覆盖导致角色绑错&#10;- 动态查询VIP角色ID避免硬编码支持多租户环境正确绑定角色" />
<MESSAGE value="refactor(user): 删除门店信息输入框&#10;&#10;- 移除用户资料页面中的门店名称输入框&#10;- 移除用户资料页面中的门店地址输入框&#10;- 简化用户页面界面布局,提高界面整洁度" />
<option name="LAST_COMMIT_MESSAGE" value="refactor(user): 删除门店信息输入框&#10;&#10;- 移除用户资料页面中的门店名称输入框&#10;- 移除用户资料页面中的门店地址输入框&#10;- 简化用户页面界面布局,提高界面整洁度" />
<MESSAGE value="refactor(user): 统一品牌名称为“威数谱软件”&#10;&#10;- 将项目中所有“威硕谱软件”名称修改为“威数谱软件”&#10;- 更新协议页面、欢迎消息、礼品卡等多处文本内容&#10;- 修改小程序配置文件中的项目名称和显示标题&#10;- 优化开发者申请页部分文案,明确开发者身份描述&#10;- 保证所有界面及配置中的品牌名称统一一致" />
<option name="LAST_COMMIT_MESSAGE" value="refactor(user): 统一品牌名称为“威数谱软件”&#10;&#10;- 将项目中所有“威硕谱软件”名称修改为“威数谱软件”&#10;- 更新协议页面、欢迎消息、礼品卡等多处文本内容&#10;- 修改小程序配置文件中的项目名称和显示标题&#10;- 优化开发者申请页部分文案,明确开发者身份描述&#10;- 保证所有界面及配置中的品牌名称统一一致" />
<option name="NON_MODAL_COMMIT_POSTPONE_SLOW_CHECKS" value="false" />
</component>
</project>