refactor(cms): 迁移CMS模块接口到独立cms-api服务

- 新增cmsRequest工具,基于request封装,默认baseURL为cms-api
- 改用cmsRequest替换所有cms相关请求,确保请求走独立域名
- 配置三环境新增CMS_API_BASE_URL及导出CmsBaseUrl常量
- 解决CMS接口走shop-api时返回404的问题,避免小程序域名白名单冲突
- 统一修改34个cms API模块的261处调用,保持接口行为一致
- 修复部分拼接全URL方式改为相对路径调用cmsRequest
- 更新注释说明并调整相关接口调用代码
- 兼容macOS sed替换问题,采用perl命令完成批量替换
This commit is contained in:
2026-08-11 11:04:40 +08:00
parent 2e80a49ca1
commit b4cd54e102
42 changed files with 450 additions and 370 deletions
+50 -17
View File
@@ -4,13 +4,46 @@
<option name="autoReloadType" value="SELECTIVE" />
</component>
<component name="ChangeListManager">
<list default="true" id="2de94e4f-0587-4c9b-8bfd-e87e0ae95b81" name="更改" comment="feat(checkout): 优化微信支付和线下付款流程&#10;&#10;- 支付方式新增微信支付(payType=1),并设为默认,保留线下付款(payType=9)&#10;- 微信支付时调用 Taro.requestPayment 发起支付流程,取消或失败给出明确提示&#10;- 支付选项选中状态下微信支付显示绿色提示,线下付款显示橙色提示&#10;- 提交按钮文案区分微信支付(提交并支付)与线下付款(提交订单)&#10;- 后端支付配置缺失时提示“微信支付暂不可用:支付配置缺失”&#10;- 确保编译构建通过,未引入新类型错误">
<list default="true" id="2de94e4f-0587-4c9b-8bfd-e87e0ae95b81" name="更改" comment="feat(official): 实现企业官网分包及内容展示&#10;&#10;- 新增官方分包目录及页面(首页、资讯列表、详情、关于我们、留言、我的)&#10;- 自定义实现底部导航组件 OfficialTabBar,解决微信 tabBar 不支持分包问题&#10;- 统一接口调用走 shop-api 代理,无新增 CMS 域名,减少合法域名负担&#10;- 新增 CMS 站点信息获取接口及留言咨询提交与查询接口&#10;- 设计并完善官网富文本样式,品牌色统一为 #185FA5,并更新 tailwind 配置&#10;- 首页新增企业官网入口卡片,方便用户访问官网内容&#10;- 完成官网分包构建验证,解决 Taro 构建批量删除保护问题&#10;- 规范 CMS 字段使用,适配字段名称及状态含义&#10;- 后续计划对历史页面 NutUI 组件进行空壳化整改,及更新 UI 设计文档">
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/config/app.ts" beforeDir="false" afterPath="$PROJECT_DIR$/config/app.ts" afterDir="false" />
<change beforePath="$PROJECT_DIR$/config/env.js" beforeDir="false" afterPath="$PROJECT_DIR$/config/env.js" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/api/cms/cmsAd/index.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/api/cms/cmsAd/index.ts" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/api/cms/cmsAdRecord/index.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/api/cms/cmsAdRecord/index.ts" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/api/cms/cmsArticle/index.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/api/cms/cmsArticle/index.ts" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/api/cms/cmsArticleCategory/index.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/api/cms/cmsArticleCategory/index.ts" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/api/cms/cmsArticleComment/index.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/api/cms/cmsArticleComment/index.ts" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/api/cms/cmsArticleContent/index.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/api/cms/cmsArticleContent/index.ts" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/api/cms/cmsArticleCount/index.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/api/cms/cmsArticleCount/index.ts" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/api/cms/cmsArticleLike/index.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/api/cms/cmsArticleLike/index.ts" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/api/cms/cmsComponents/index.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/api/cms/cmsComponents/index.ts" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/api/cms/cmsContactLead/index.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/api/cms/cmsContactLead/index.ts" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/api/cms/cmsDesign/index.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/api/cms/cmsDesign/index.ts" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/api/cms/cmsDesignRecord/index.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/api/cms/cmsDesignRecord/index.ts" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/api/cms/cmsDocs/index.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/api/cms/cmsDocs/index.ts" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/api/cms/cmsDocsBook/index.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/api/cms/cmsDocsBook/index.ts" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/api/cms/cmsDocsContent/index.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/api/cms/cmsDocsContent/index.ts" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/api/cms/cmsDomain/index.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/api/cms/cmsDomain/index.ts" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/api/cms/cmsForm/index.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/api/cms/cmsForm/index.ts" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/api/cms/cmsFormRecord/index.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/api/cms/cmsFormRecord/index.ts" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/api/cms/cmsLang/index.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/api/cms/cmsLang/index.ts" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/api/cms/cmsLangLog/index.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/api/cms/cmsLangLog/index.ts" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/api/cms/cmsLink/index.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/api/cms/cmsLink/index.ts" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/api/cms/cmsModel/index.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/api/cms/cmsModel/index.ts" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/api/cms/cmsMp/index.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/api/cms/cmsMp/index.ts" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/api/cms/cmsMpAd/index.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/api/cms/cmsMpAd/index.ts" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/api/cms/cmsMpField/index.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/api/cms/cmsMpField/index.ts" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/api/cms/cmsMpMenu/index.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/api/cms/cmsMpMenu/index.ts" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/api/cms/cmsMpPages/index.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/api/cms/cmsMpPages/index.ts" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/api/cms/cmsNavigation/index.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/api/cms/cmsNavigation/index.ts" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/api/cms/cmsOrder/index.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/api/cms/cmsOrder/index.ts" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/api/cms/cmsSpec/index.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/api/cms/cmsSpec/index.ts" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/api/cms/cmsSpecValue/index.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/api/cms/cmsSpecValue/index.ts" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/api/cms/cmsWebsite/index.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/api/cms/cmsWebsite/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/app.scss" beforeDir="false" afterPath="$PROJECT_DIR$/src/app.scss" 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$/tailwind.config.js" beforeDir="false" afterPath="$PROJECT_DIR$/tailwind.config.js" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/api/cms/cmsWebsiteField/index.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/api/cms/cmsWebsiteField/index.ts" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/api/cms/link/index.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/api/cms/link/index.ts" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/api/cms/mpOfficialMenu/index.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/api/cms/mpOfficialMenu/index.ts" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/api/layout/index.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/api/layout/index.ts" afterDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
@@ -125,15 +158,7 @@
<workItem from="1784638429525" duration="16147000" />
<workItem from="1784798575885" duration="4896000" />
<workItem from="1784873955217" duration="3822000" />
<workItem from="1786371937331" duration="8819000" />
</task>
<task id="LOCAL-00029" summary="refactor(api): 规范前端API接口地址并统一路径前缀&#10;&#10;- 修正开发者、小程序和企业相关API的基础URL,避免重复添加/api前缀&#10;- 统一调整developer、enterprise、invite等模块接口路径,保持与后端Controller一致&#10;- 新增权限申请及消息通知相关API,并完善相关函数实现&#10;- 规范请求参数传递,移除多余包装,改用直接传递对象方式&#10;- 新增API Key重置、版本发布/回滚等接口支持&#10;&#10;feat(invite): 重构邀请登录流程支持未注册快速加入&#10;&#10;- 完整重写invite页,分离已注册用户和未注册用户的按钮显示和交互&#10;- 实现未注册用户微信手机号授权后自动注册登录及自动加入应用&#10;- 已注册用户直接确认加入应用,无需手机号授权弹窗&#10;- 统一使用getPhoneNumber按钮处理两种状态并修复“授权码不能为空”报错&#10;- 前端配合后端改造,支持已登录用户可直接通过Authorization头加入应用&#10;&#10;fix(developer): 修复开发者中心应用加载问题&#10;&#10;- 修复只查询创建的应用导致邀请加入的应用不显示的问题&#10;- 同时请求创建应用和参与应用接口,合并并去重应用列表&#10;- 新增pageJoinedApp接口调用及合并逻辑,提高应用列表完整性和体验">
<option name="closed" value="true" />
<created>1776065433562</created>
<option name="number" value="00029" />
<option name="presentableId" value="LOCAL-00029" />
<option name="project" value="LOCAL" />
<updated>1776065433562</updated>
<workItem from="1786371937331" duration="10067000" />
</task>
<task id="LOCAL-00030" summary="refactor(api): 规范前端API接口地址并统一路径前缀&#10;&#10;- 修正开发者、小程序和企业相关API的基础URL,避免重复添加/api前缀&#10;- 统一调整developer、enterprise、invite等模块接口路径,保持与后端Controller一致&#10;- 新增权限申请及消息通知相关API,并完善相关函数实现&#10;- 规范请求参数传递,移除多余包装,改用直接传递对象方式&#10;- 新增API Key重置、版本发布/回滚等接口支持&#10;&#10;feat(invite): 重构邀请登录流程支持未注册快速加入&#10;&#10;- 完整重写invite页,分离已注册用户和未注册用户的按钮显示和交互&#10;- 实现未注册用户微信手机号授权后自动注册登录及自动加入应用&#10;- 已注册用户直接确认加入应用,无需手机号授权弹窗&#10;- 统一使用getPhoneNumber按钮处理两种状态并修复“授权码不能为空”报错&#10;- 前端配合后端改造,支持已登录用户可直接通过Authorization头加入应用&#10;&#10;fix(developer): 修复开发者中心应用加载问题&#10;&#10;- 修复只查询创建的应用导致邀请加入的应用不显示的问题&#10;- 同时请求创建应用和参与应用接口,合并并去重应用列表&#10;- 新增pageJoinedApp接口调用及合并逻辑,提高应用列表完整性和体验">
<option name="closed" value="true" />
@@ -519,7 +544,15 @@
<option name="project" value="LOCAL" />
<updated>1786407521622</updated>
</task>
<option name="localTasksCounter" value="78" />
<task id="LOCAL-00078" summary="feat(official): 实现企业官网分包及内容展示&#10;&#10;- 新增官方分包目录及页面(首页、资讯列表、详情、关于我们、留言、我的)&#10;- 自定义实现底部导航组件 OfficialTabBar,解决微信 tabBar 不支持分包问题&#10;- 统一接口调用走 shop-api 代理,无新增 CMS 域名,减少合法域名负担&#10;- 新增 CMS 站点信息获取接口及留言咨询提交与查询接口&#10;- 设计并完善官网富文本样式,品牌色统一为 #185FA5,并更新 tailwind 配置&#10;- 首页新增企业官网入口卡片,方便用户访问官网内容&#10;- 完成官网分包构建验证,解决 Taro 构建批量删除保护问题&#10;- 规范 CMS 字段使用,适配字段名称及状态含义&#10;- 后续计划对历史页面 NutUI 组件进行空壳化整改,及更新 UI 设计文档">
<option name="closed" value="true" />
<created>1786409297653</created>
<option name="number" value="00078" />
<option name="presentableId" value="LOCAL-00078" />
<option name="project" value="LOCAL" />
<updated>1786409297653</updated>
</task>
<option name="localTasksCounter" value="79" />
<servers />
</component>
<component name="TypeScriptGeneratedFilesManager">
@@ -539,7 +572,6 @@
<component name="VcsManagerConfiguration">
<option name="CHECK_CODE_SMELLS_BEFORE_PROJECT_COMMIT" value="false" />
<option name="CHECK_NEW_TODO" value="false" />
<MESSAGE value="feat(utils): 优化请求函数URL拼接逻辑&#10;&#10;- 在request函数中将请求拦截改为先拼接完整URL&#10;- 支持相对路径自动补全baseUrl&#10;- 删除原有请求拦截中url未处理的问题" />
<MESSAGE value="docs(schedule): 添加2026年7月1日日程文件&#10;&#10;- 创建新的日程文档文件 2026-07-01.md&#10;- 文件内容待后续补充和更新" />
<MESSAGE value="feat(pay): 优化小程序支付流程并增强日志调试&#10;&#10;- 更新 wx-login 接口以返回完整 LoginResult,包括 access_token 和 user 对象&#10;- 支付页面新增大量日志,详尽打印参数、请求和响应信息&#10;- 优化获取订阅详情流程,支持 returnRaw 返回完整响应用于调试&#10;- 支付流程新增步骤,先通过 code 获取 openid 并缓存,再尝试用 openid 自动登录&#10;- 增加自动登录失败交互,提示未注册用户先登录&#10;- 支付相关请求均使用 returnRaw 方便错误排查&#10;- request 请求模块添加统一请求和响应日志,增强调试能力&#10;- request 认证错误和业务错误时加入详细日志输出" />
<MESSAGE value="feat(pay): 支付成功后自动跳转到已购产品页面&#10;&#10;- 支付成功后显示成功提示&#10;- 延迟1.5秒自动跳转到已购产品页面&#10;- 处理跳转失败时回退到用户首页&#10;- 优化用户支付完成后的使用体验" />
@@ -564,7 +596,8 @@
<MESSAGE value="feat(user): 合并切换开发者菜单并优化首页轮播图显示&#10;&#10;- 用户菜单根据 isDeveloper 字段切换显示申请或进入开发者中心&#10;- 已审核用户菜单高亮显示“进入开发者中心”&#10;- 去除冗余开发者中心菜单条目,简化结构&#10;- 重新设计开发者中心页面UI,统一门店中心风格&#10;- 顶部展示开发者头像及昵称手机号信息&#10;- 功能卡片展示“我的应用”、“API Key”和“我的工单”,异步加载数量角标&#10;- 底部添加“开发者帮助与支持”入口,替代门店订阅消息卡片&#10;- 未登录或非开发者状态显示相应空态及操作按钮&#10;- 首页轮播图为空时不显示容器,功能入口自动上移,优化空状态体验&#10;- 优化登录状态与权限校验逻辑,防止页面闪烁和无权限展示" />
<MESSAGE value="feat(checkout): 优化微信支付和线下付款流程&#10;&#10;- 将默认支付方式调整为微信支付(payType=1),增加支付方式选择项&#10;- 微信支付成功后直接调用微信支付接口并处理支付结果反馈&#10;- 支付取消或失败时显示对应提示信息&#10;- 线下付款(payType=9)保留并显示相应提示,不触发在线支付&#10;- 提交订单时根据支付方式显示不同的按钮文本 (‘提交并支付’ 或 ‘提交订单’)&#10;- 针对微信支付配置缺失的错误,统一显示详细提示,便于定位问题&#10;- 优化支付方式选中时的提示样式与说明,提升用户体验" />
<MESSAGE value="feat(checkout): 优化微信支付和线下付款流程&#10;&#10;- 支付方式新增微信支付(payType=1),并设为默认,保留线下付款(payType=9)&#10;- 微信支付时调用 Taro.requestPayment 发起支付流程,取消或失败给出明确提示&#10;- 支付选项选中状态下微信支付显示绿色提示,线下付款显示橙色提示&#10;- 提交按钮文案区分微信支付(提交并支付)与线下付款(提交订单)&#10;- 后端支付配置缺失时提示“微信支付暂不可用:支付配置缺失”&#10;- 确保编译构建通过,未引入新类型错误" />
<option name="LAST_COMMIT_MESSAGE" value="feat(checkout): 优化微信支付和线下付款流程&#10;&#10;- 支付方式新增微信支付(payType=1),并设为默认,保留线下付款(payType=9)&#10;- 微信支付时调用 Taro.requestPayment 发起支付流程,取消或失败给出明确提示&#10;- 支付选项选中状态下微信支付显示绿色提示,线下付款显示橙色提示&#10;- 提交按钮文案区分微信支付(提交并支付)与线下付款(提交订单)&#10;- 后端支付配置缺失时提示“微信支付暂不可用:支付配置缺失”&#10;- 确保编译构建通过,未引入新类型错误" />
<MESSAGE value="feat(official): 实现企业官网分包及内容展示&#10;&#10;- 新增官方分包目录及页面(首页、资讯列表、详情、关于我们、留言、我的)&#10;- 自定义实现底部导航组件 OfficialTabBar,解决微信 tabBar 不支持分包问题&#10;- 统一接口调用走 shop-api 代理,无新增 CMS 域名,减少合法域名负担&#10;- 新增 CMS 站点信息获取接口及留言咨询提交与查询接口&#10;- 设计并完善官网富文本样式,品牌色统一为 #185FA5,并更新 tailwind 配置&#10;- 首页新增企业官网入口卡片,方便用户访问官网内容&#10;- 完成官网分包构建验证,解决 Taro 构建批量删除保护问题&#10;- 规范 CMS 字段使用,适配字段名称及状态含义&#10;- 后续计划对历史页面 NutUI 组件进行空壳化整改,及更新 UI 设计文档" />
<option name="LAST_COMMIT_MESSAGE" value="feat(official): 实现企业官网分包及内容展示&#10;&#10;- 新增官方分包目录及页面(首页、资讯列表、详情、关于我们、留言、我的)&#10;- 自定义实现底部导航组件 OfficialTabBar,解决微信 tabBar 不支持分包问题&#10;- 统一接口调用走 shop-api 代理,无新增 CMS 域名,减少合法域名负担&#10;- 新增 CMS 站点信息获取接口及留言咨询提交与查询接口&#10;- 设计并完善官网富文本样式,品牌色统一为 #185FA5,并更新 tailwind 配置&#10;- 首页新增企业官网入口卡片,方便用户访问官网内容&#10;- 完成官网分包构建验证,解决 Taro 构建批量删除保护问题&#10;- 规范 CMS 字段使用,适配字段名称及状态含义&#10;- 后续计划对历史页面 NutUI 组件进行空壳化整改,及更新 UI 设计文档" />
<option name="NON_MODAL_COMMIT_POSTPONE_SLOW_CHECKS" value="false" />
</component>
</project>