<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="AutoImportSettings">
    <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;- 简化用户页面界面布局，提高界面整洁度">
      <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" />
    </list>
    <option name="SHOW_DIALOG" value="false" />
    <option name="HIGHLIGHT_CONFLICTS" value="true" />
    <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
    <option name="LAST_RESOLUTION" value="IGNORE" />
  </component>
  <component name="Git.Settings">
    <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
    <option name="RESET_MODE" value="HARD" />
  </component>
  <component name="ProjectColorInfo">{
  &quot;associatedIndex&quot;: 7
}</component>
  <component name="ProjectId" id="3CCElusNNIyc7lgX61jkNQo02h3" />
  <component name="ProjectLevelVcsManager">
    <ConfirmationsSetting value="2" id="Add" />
  </component>
  <component name="ProjectViewState">
    <option name="hideEmptyMiddlePackages" value="true" />
    <option name="showLibraryContents" value="true" />
  </component>
  <component name="PropertiesComponent">{
  &quot;keyToString&quot;: {
    &quot;ModuleVcsDetector.initialDetectionPerformed&quot;: &quot;true&quot;,
    &quot;RunOnceActivity.ShowReadmeOnStart&quot;: &quot;true&quot;,
    &quot;RunOnceActivity.TerminalTabsStorage.copyFrom.TerminalArrangementManager.252&quot;: &quot;true&quot;,
    &quot;RunOnceActivity.git.unshallow&quot;: &quot;true&quot;,
    &quot;git-widget-placeholder&quot;: &quot;master&quot;,
    &quot;junie.onboarding.icon.badge.shown&quot;: &quot;true&quot;,
    &quot;last_opened_file_path&quot;: &quot;/Users/gxwebsoft/VUE/websopy-taro/src/passport&quot;,
    &quot;node.js.detected.package.eslint&quot;: &quot;true&quot;,
    &quot;node.js.detected.package.stylelint&quot;: &quot;true&quot;,
    &quot;node.js.detected.package.tslint&quot;: &quot;true&quot;,
    &quot;node.js.selected.package.eslint&quot;: &quot;(autodetect)&quot;,
    &quot;node.js.selected.package.stylelint&quot;: &quot;/Users/gxwebsoft/VUE/websopy-taro/node_modules/stylelint&quot;,
    &quot;node.js.selected.package.tslint&quot;: &quot;(autodetect)&quot;,
    &quot;nodejs_package_manager_path&quot;: &quot;pnpm&quot;,
    &quot;npm.build:weapp.executor&quot;: &quot;Run&quot;,
    &quot;npm.dev:weapp.executor&quot;: &quot;Run&quot;,
    &quot;settings.editor.selected.configurable&quot;: &quot;preferences.pluginManager&quot;,
    &quot;to.speed.mode.migration.done&quot;: &quot;true&quot;,
    &quot;ts.external.directory.path&quot;: &quot;/Users/gxwebsoft/VUE/websopy-taro/node_modules/typescript/lib&quot;,
    &quot;vue.rearranger.settings.migration&quot;: &quot;true&quot;
  }
}</component>
  <component name="RecentsManager">
    <key name="CopyFile.RECENT_KEYS">
      <recent name="$PROJECT_DIR$/src/passport" />
      <recent name="$PROJECT_DIR$/src/api" />
      <recent name="$PROJECT_DIR$/src/api/passport/wx-login" />
      <recent name="$PROJECT_DIR$" />
    </key>
  </component>
  <component name="RunManager" selected="npm.dev:weapp">
    <configuration name="build:weapp" type="js.build_tools.npm" temporary="true" nameIsGenerated="true">
      <package-json value="$PROJECT_DIR$/package.json" />
      <command value="run" />
      <scripts>
        <script value="build:weapp" />
      </scripts>
      <node-interpreter value="project" />
      <envs />
      <method v="2" />
    </configuration>
    <configuration name="dev:weapp" type="js.build_tools.npm" temporary="true" nameIsGenerated="true">
      <package-json value="$PROJECT_DIR$/package.json" />
      <command value="run" />
      <scripts>
        <script value="dev:weapp" />
      </scripts>
      <node-interpreter value="project" />
      <envs />
      <method v="2" />
    </configuration>
    <recent_temporary>
      <list>
        <item itemvalue="npm.dev:weapp" />
        <item itemvalue="npm.build:weapp" />
      </list>
    </recent_temporary>
  </component>
  <component name="SharedIndexes">
    <attachedChunks>
      <set>
        <option value="bundled-js-predefined-d6986cc7102b-e03c56caf84a-JavaScript-WS-252.23892.411" />
      </set>
    </attachedChunks>
  </component>
  <component name="TaskManager">
    <task active="true" id="Default" summary="默认任务">
      <changelist id="2de94e4f-0587-4c9b-8bfd-e87e0ae95b81" name="更改" comment="" />
      <created>1775881305279</created>
      <option name="number" value="Default" />
      <option name="presentableId" value="Default" />
      <updated>1775881305279</updated>
      <workItem from="1775881306434" duration="12652000" />
      <workItem from="1775910653750" duration="20840000" />
      <workItem from="1777873063244" duration="20000" />
      <workItem from="1778089953570" duration="7000" />
      <workItem from="1778308774420" duration="947000" />
      <workItem from="1780559793276" duration="400000" />
      <workItem from="1782803615391" duration="418000" />
      <workItem from="1782804285999" duration="4025000" />
      <workItem from="1782813891753" duration="1850000" />
      <workItem from="1782876148090" duration="4787000" />
      <workItem from="1782903749109" duration="4000" />
      <workItem from="1782971387128" duration="7154000" />
      <workItem from="1784093204572" duration="6082000" />
      <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>
    </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" />
      <created>1775908391880</created>
      <option name="number" value="00013" />
      <option name="presentableId" value="LOCAL-00013" />
      <option name="project" value="LOCAL" />
      <updated>1775908391880</updated>
    </task>
    <task id="LOCAL-00014" summary="fix(invite): 修正邀请接口路径以支持小程序专用前缀&#10;&#10;- 将请求邀请信息接口路径改为使用 /api/_app 前缀，确保小程序免登录访问&#10;- 修改接受邀请接口路径，统一使用小程序专用 API 域名和前缀&#10;- 更新邀请相关接口注释，明确小程序专用接口前缀含义&#10;- 在专家历史数据中添加高级开发工程师 Will 的条目并更新时间戳">
      <option name="closed" value="true" />
      <created>1775909013060</created>
      <option name="number" value="00014" />
      <option name="presentableId" value="LOCAL-00014" />
      <option name="project" value="LOCAL" />
      <updated>1775909013060</updated>
    </task>
    <task id="LOCAL-00015" summary="fix(passport): 添加邀请接受接口调试日志&#10;&#10;- 在接受邀请请求前打印token和请求URL、参数&#10;- 在请求响应后输出接口响应及返回数据&#10;- 在调用失败时打印错误信息及异常日志&#10;- 保持请求流程和状态管理不变，增强调试能力">
      <option name="closed" value="true" />
      <created>1775909542310</created>
      <option name="number" value="00015" />
      <option name="presentableId" value="LOCAL-00015" />
      <option name="project" value="LOCAL" />
      <updated>1775909542310</updated>
    </task>
    <task id="LOCAL-00016" summary="fix(passport): 添加邀请接受接口调试日志&#10;&#10;- 在接受邀请请求前打印token和请求URL、参数&#10;- 在请求响应后输出接口响应及返回数据&#10;- 在调用失败时打印错误信息及异常日志&#10;- 保持请求流程和状态管理不变，增强调试能力">
      <option name="closed" value="true" />
      <created>1775909811705</created>
      <option name="number" value="00016" />
      <option name="presentableId" value="LOCAL-00016" />
      <option name="project" value="LOCAL" />
      <updated>1775909811705</updated>
    </task>
    <task id="LOCAL-00017" summary="fix(passport): 优化邀请码接受失败的用户提示和处理&#10;&#10;- 针对“用户不存在”、“用户创建失败”及“请先登录”提示，改为弹窗提示需登录&#10;- 在弹窗中增加“去登录”按钮，点击后跳转到登录页面，并携带重定向token参数&#10;- 其他错误仍使用原Toast提示方式展示错误信息&#10;- 保留错误日志打印，便于排查异常情况">
      <option name="closed" value="true" />
      <created>1775920899787</created>
      <option name="number" value="00017" />
      <option name="presentableId" value="LOCAL-00017" />
      <option name="project" value="LOCAL" />
      <updated>1775920899787</updated>
    </task>
    <task id="LOCAL-00018" summary="feat(passport-invite): 优化新用户扫码邀请加入流程&#10;&#10;- 扫码进入邀请页面时保存邀请 token 到本地存储&#10;- 新增登录状态检测，未登录用户点击快速加入时保存邀请信息并跳转登录页&#10;- 登录成功后返回邀请页自动执行加入应用操作，提升用户体验&#10;- 支持已登录用户直接加入应用，简化流程&#10;- 增加清理 pending 邀请数据的方法，防止数据残留&#10;- 监听页面显示事件，处理登录返回后自动操作&#10;- 调整接口请求逻辑，确保携带最新的邀请和授权数据&#10;- 更新项目配置，注册邀请页面路径信息">
      <option name="closed" value="true" />
      <created>1775921636640</created>
      <option name="number" value="00018" />
      <option name="presentableId" value="LOCAL-00018" />
      <option name="project" value="LOCAL" />
      <updated>1775921636640</updated>
    </task>
    <task id="LOCAL-00019" summary="feat(passport): 重写登录与邀请加入流程，支持微信手机号一键登录&#10;&#10;- 完全重写 passport/login.tsx，实现微信手机号一键登录功能&#10;- 支持登录页面携带 redirect 参数，登录后自动跳转回原页面&#10;- 登录成功后自动处理邀请加入应用，支持邀请关系绑定&#10;- 重写 passport/invite/index.tsx，实现扫码邀请加入应用完整流程&#10;- 支持调用 wx.login 获取 code，使用 loginByOpenId 判断注册状态&#10;- 未注册用户自动跳转登录页完成微信手机号登录再加入应用&#10;- 已登录用户直接执行加入应用操作，加入接口支持 Authorization 头&#10;- 解决邀请页面与登录页面间旧授权码混用导致加入失败问题&#10;- 处理后端 401 错误，优先使用微信授权码免登录接口&#10;- 优化用户体验，添加服务协议与隐私政策弹窗及错误提示&#10;- 页面状态管理改进，加入加载、检查登录、错误和跳转反馈">
      <option name="closed" value="true" />
      <created>1775962292970</created>
      <option name="number" value="00019" />
      <option name="presentableId" value="LOCAL-00019" />
      <option name="project" value="LOCAL" />
      <updated>1775962292970</updated>
    </task>
    <task id="LOCAL-00020" summary="feat(invite): 重构邀请加入流程，实现已登录用户免授权直接加入&#10;&#10;- 完全重写邀请页逻辑，区分已登录与未注册用户按钮显示&#10;- 已登录用户显示“确认加入”按钮，点击用 wx.login 获取 code 加入&#10;- 未注册用户显示“微信手机号快速加入”按钮，授权手机号后完成注册登录再加入&#10;- 移除跳转登录页面逻辑，所有流程在邀请页内完成&#10;- 加入接口统一使用 Authorization 头携带 token，确保身份双重验证&#10;- 优化背景、粒子和扫描线效果，提升界面视觉体验&#10;- 增加错误处理提示，加入失败时显示详细原因并可返回首页&#10;- 协议勾选仅在未注册用户显示，确保合规授权流程">
      <option name="closed" value="true" />
      <created>1775965322794</created>
      <option name="number" value="00020" />
      <option name="presentableId" value="LOCAL-00020" />
      <option name="project" value="LOCAL" />
      <updated>1775965322794</updated>
    </task>
    <task id="LOCAL-00021" summary="feat(passport): 优化已登录用户加入时协议勾选逻辑&#10;&#10;- 已登录用户点击「确认加入」时不再强制勾选协议&#10;- 移除 handleConfirmJoin 中对协议勾选的检查&#10;- 未注册用户仍需勾选协议后才能授权手机号&#10;- 确保登录状态异常时有提示信息显示">
      <option name="closed" value="true" />
      <created>1775965478226</created>
      <option name="number" value="00021" />
      <option name="presentableId" value="LOCAL-00021" />
      <option name="project" value="LOCAL" />
      <updated>1775965478226</updated>
    </task>
    <task id="LOCAL-00022" summary="feat(invite): 支持已登录用户直接加入应用&#10;&#10;- 后端accept接口code参数改为可选，支持通过Authorization头识别登录用户&#10;- 已登录用户加入时不再弹手机号授权，前端调用新增的doJoinAppForLoggedInUser方法&#10;- 未注册用户仍通过手机号授权码code加入，调用doJoinAppForNewUser方法&#10;- 拆分前端加入逻辑，新增handleConfirmJoin统一处理已登录加入流程&#10;- 优化按钮交互，已登录状态下按钮变为普通点击，移除协议强制勾选&#10;- 错误处理和状态提示完善，加入成功后自动跳转首页">
      <option name="closed" value="true" />
      <created>1775966172496</created>
      <option name="number" value="00022" />
      <option name="presentableId" value="LOCAL-00022" />
      <option name="project" value="LOCAL" />
      <updated>1775966172496</updated>
    </task>
    <task id="LOCAL-00023" summary="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;- 完成全面的样式设计，实现一致的视觉风格和交互体验">
      <option name="closed" value="true" />
      <created>1776018406658</created>
      <option name="number" value="00023" />
      <option name="presentableId" value="LOCAL-00023" />
      <option name="project" value="LOCAL" />
      <updated>1776018406658</updated>
    </task>
    <task id="LOCAL-00024" summary="feat(api-keys): 优化隐私协议同意逻辑及样式&#10;&#10;- 修正api-keys样式导入路径，改为developer路径&#10;- 在开发者申请页面增加服务协议和隐私政策勾选框&#10;- 提交时校验协议是否已勾选，未勾选时提示用户&#10;- 优化申请页面协议区域样式及交互&#10;- 在用户验证页面添加隐私政策同意勾选框&#10;- 提交用户验证表单时检查协议同意状态&#10;- 增加打开服务协议和隐私政策的链接跳转&#10;- 更新项目配置，增加passport/webview路由配置&#10;- 修复createTicket函数中日期格式正则表达式问题">
      <option name="closed" value="true" />
      <created>1776019228297</created>
      <option name="number" value="00024" />
      <option name="presentableId" value="LOCAL-00024" />
      <option name="project" value="LOCAL" />
      <updated>1776019228297</updated>
    </task>
    <task id="LOCAL-00025" summary="feat(api-keys): 优化隐私协议同意逻辑及样式&#10;&#10;- 修正api-keys样式导入路径，改为developer路径&#10;- 在开发者申请页面增加服务协议和隐私政策勾选框&#10;- 提交时校验协议是否已勾选，未勾选时提示用户&#10;- 优化申请页面协议区域样式及交互&#10;- 在用户验证页面添加隐私政策同意勾选框&#10;- 提交用户验证表单时检查协议同意状态&#10;- 增加打开服务协议和隐私政策的链接跳转&#10;- 更新项目配置，增加passport/webview路由配置&#10;- 修复createTicket函数中日期格式正则表达式问题">
      <option name="closed" value="true" />
      <created>1776019711439</created>
      <option name="number" value="00025" />
      <option name="presentableId" value="LOCAL-00025" />
      <option name="project" value="LOCAL" />
      <updated>1776019711439</updated>
    </task>
    <task id="LOCAL-00026" summary="refactor(config): 移除开发者中心和企业控制台的自定义导航样式&#10;&#10;- 删除了开发者中心页面配置中的 navigationStyle: 'custom'&#10;- 删除了企业控制台页面配置中的 navigationStyle: 'custom'&#10;- 简化了页面配置，保持默认导航样式&#10;- 有助于提升页面兼容性和维护性">
      <option name="closed" value="true" />
      <created>1776019857647</created>
      <option name="number" value="00026" />
      <option name="presentableId" value="LOCAL-00026" />
      <option name="project" value="LOCAL" />
      <updated>1776019857647</updated>
    </task>
    <task id="LOCAL-00027" summary="feat(userVerify): 添加阿里云身份证二要素核验功能&#10;&#10;- 在接口层新增 verifyIdCard 接口，实现姓名与身份证号核验&#10;- userVerify 页面提交时增加身份核验逻辑，核验失败阻止提交&#10;- 调用核验接口时显示加载状态，并根据结果提示用户&#10;- 后端依赖 aliyun cloudauth，提供实人认证相关服务接口&#10;- 完成基本的错误捕获与用户提示，提升实名认证流程安全性">
      <option name="closed" value="true" />
      <created>1776021606260</created>
      <option name="number" value="00027" />
      <option name="presentableId" value="LOCAL-00027" />
      <option name="project" value="LOCAL" />
      <updated>1776021606260</updated>
    </task>
    <task id="LOCAL-00028" summary="feat(userVerify): 添加阿里云身份证二要素核验功能&#10;&#10;- 在接口层新增 verifyIdCard 接口，实现姓名与身份证号核验&#10;- userVerify 页面提交时增加身份核验逻辑，核验失败阻止提交&#10;- 调用核验接口时显示加载状态，并根据结果提示用户&#10;- 后端依赖 aliyun cloudauth，提供实人认证相关服务接口&#10;- 完成基本的错误捕获与用户提示，提升实名认证流程安全性">
      <option name="closed" value="true" />
      <created>1776021764419</created>
      <option name="number" value="00028" />
      <option name="presentableId" value="LOCAL-00028" />
      <option name="project" value="LOCAL" />
      <updated>1776021764419</updated>
    </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>
    </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" />
      <created>1782803958326</created>
      <option name="number" value="00030" />
      <option name="presentableId" value="LOCAL-00030" />
      <option name="project" value="LOCAL" />
      <updated>1782803958326</updated>
    </task>
    <task id="LOCAL-00031" 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>1782803960387</created>
      <option name="number" value="00031" />
      <option name="presentableId" value="LOCAL-00031" />
      <option name="project" value="LOCAL" />
      <updated>1782803960387</updated>
    </task>
    <task id="LOCAL-00032" 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>1782803963602</created>
      <option name="number" value="00032" />
      <option name="presentableId" value="LOCAL-00032" />
      <option name="project" value="LOCAL" />
      <updated>1782803963602</updated>
    </task>
    <task id="LOCAL-00033" summary="feat(app): 添加应用入口文件和配置文件&#10;&#10;- 新增 index.tsx 作为应用的主入口文件&#10;- 新增 index.config.ts 用于应用的配置管理">
      <option name="closed" value="true" />
      <created>1782804027400</created>
      <option name="number" value="00033" />
      <option name="presentableId" value="LOCAL-00033" />
      <option name="project" value="LOCAL" />
      <updated>1782804027400</updated>
    </task>
    <task id="LOCAL-00034" summary="feat(app): 添加应用入口文件和配置文件&#10;&#10;- 新增 index.tsx 作为应用的主入口文件&#10;- 新增 index.config.ts 用于应用的配置管理">
      <option name="closed" value="true" />
      <created>1782804461646</created>
      <option name="number" value="00034" />
      <option name="presentableId" value="LOCAL-00034" />
      <option name="project" value="LOCAL" />
      <updated>1782804461646</updated>
    </task>
    <task id="LOCAL-00035" summary="fix(tailwind): 更新配置以兼容微信小程序&#10;&#10;- 启用 autoprefixer 并新增 postcss-nested 插件支持嵌套语法&#10;- 扩展主题颜色，添加 primary 色系&#10;- 更新 content 路径包含 public/index.html&#10;- 禁用 preflight 以移除默认样式重置&#10;- 移除多数 corePlugins 禁用项，保留 preflight 禁用，简化兼容性配置">
      <option name="closed" value="true" />
      <created>1782805513768</created>
      <option name="number" value="00035" />
      <option name="presentableId" value="LOCAL-00035" />
      <option name="project" value="LOCAL" />
      <updated>1782805513768</updated>
    </task>
    <task id="LOCAL-00036" summary="feat(postcss): 添加插件移除微信小程序不兼容Tailwind规则&#10;&#10;- 实现 postcss-remove-wxss-incompatible 插件&#10;- 移除反斜杠转义的重要性修饰符类选择器（.\!xxx）&#10;- 删除依赖 :not 和兄弟选择器的 .space-[x|y]-* 规则&#10;- 删除依赖 :not 和兄弟选择器的 .divide-[x|y]-* 规则&#10;- 解决微信小程序 WXSS 不支持的 CSS 特性问题">
      <option name="closed" value="true" />
      <created>1782808735147</created>
      <option name="number" value="00036" />
      <option name="presentableId" value="LOCAL-00036" />
      <option name="project" value="LOCAL" />
      <updated>1782808735147</updated>
    </task>
    <task id="LOCAL-00037" summary="feat(postcss): 添加插件移除微信小程序不兼容Tailwind规则&#10;&#10;- 实现 postcss-remove-wxss-incompatible 插件&#10;- 移除反斜杠转义的重要性修饰符类选择器（.\!xxx）&#10;- 删除依赖 :not 和兄弟选择器的 .space-[x|y]-* 规则&#10;- 删除依赖 :not 和兄弟选择器的 .divide-[x|y]-* 规则&#10;- 解决微信小程序 WXSS 不支持的 CSS 特性问题">
      <option name="closed" value="true" />
      <created>1782808737652</created>
      <option name="number" value="00037" />
      <option name="presentableId" value="LOCAL-00037" />
      <option name="project" value="LOCAL" />
      <updated>1782808737652</updated>
    </task>
    <task id="LOCAL-00038" summary="feat(postcss): 添加插件移除微信小程序不兼容Tailwind规则&#10;&#10;- 实现 postcss-remove-wxss-incompatible 插件&#10;- 移除反斜杠转义的重要性修饰符类选择器（.\!xxx）&#10;- 删除依赖 :not 和兄弟选择器的 .space-[x|y]-* 规则&#10;- 删除依赖 :not 和兄弟选择器的 .divide-[x|y]-* 规则&#10;- 解决微信小程序 WXSS 不支持的 CSS 特性问题">
      <option name="closed" value="true" />
      <created>1782808741979</created>
      <option name="number" value="00038" />
      <option name="presentableId" value="LOCAL-00038" />
      <option name="project" value="LOCAL" />
      <updated>1782808741979</updated>
    </task>
    <task id="LOCAL-00039" summary="fix(pay): 优化订阅号获取逻辑并调整支付组件样式&#10;&#10;- 优先从小程序码 scene 参数读取 subscriptionNo，提升参数兼容性&#10;- 对 scene 参数进行解码，避免编码引起的问题&#10;- 移除支付组件价格显示处的固定颜色设置，增强样式灵活性">
      <option name="closed" value="true" />
      <created>1782810191833</created>
      <option name="number" value="00039" />
      <option name="presentableId" value="LOCAL-00039" />
      <option name="project" value="LOCAL" />
      <updated>1782810191833</updated>
    </task>
    <task id="LOCAL-00040" summary="fix(utils): 优化小程序端复制文本功能体验&#10;&#10;- 小程序端直接调用原生 wx.setClipboardData，避免 Taro Promise 封装问题&#10;- 避免微信小程序重复显示复制成功提示和误报复制失败&#10;- 失败时仅在小程序端输出错误日志，非小程序端显示提示&#10;- 修改首页外链跳转逻辑，支持相对路径跳转，小程序内外链复制提示提升用户体验&#10;- 更新项目内剪切板使用规范文档，说明复制行为调整及符合相应规范要求">
      <option name="closed" value="true" />
      <created>1782814230613</created>
      <option name="number" value="00040" />
      <option name="presentableId" value="LOCAL-00040" />
      <option name="project" value="LOCAL" />
      <updated>1782814230613</updated>
    </task>
    <task id="LOCAL-00041" summary="fix(utils): 优化小程序端复制文本功能体验&#10;&#10;- 小程序端直接调用原生 wx.setClipboardData，避免 Taro Promise 封装问题&#10;- 避免微信小程序重复显示复制成功提示和误报复制失败&#10;- 失败时仅在小程序端输出错误日志，非小程序端显示提示&#10;- 修改首页外链跳转逻辑，支持相对路径跳转，小程序内外链复制提示提升用户体验&#10;- 更新项目内剪切板使用规范文档，说明复制行为调整及符合相应规范要求">
      <option name="closed" value="true" />
      <created>1782814693982</created>
      <option name="number" value="00041" />
      <option name="presentableId" value="LOCAL-00041" />
      <option name="project" value="LOCAL" />
      <updated>1782814693982</updated>
    </task>
    <task id="LOCAL-00042" summary="fix(index): 优化外链提示及删除复制咨询模板功能&#10;&#10;- 替换小程序内外链打开方式提示为弹窗提醒用户手动复制&#10;- 删除复制咨询模板功能及相关按钮&#10;- 修改联系我们文案，突出直接电话沟通或需求反馈&#10;- 移除无用导入的复制文本工具函数copyText">
      <option name="closed" value="true" />
      <created>1782814719111</created>
      <option name="number" value="00042" />
      <option name="presentableId" value="LOCAL-00042" />
      <option name="project" value="LOCAL" />
      <updated>1782814719111</updated>
    </task>
    <task id="LOCAL-00043" summary="feat(utils): 优化请求函数URL拼接逻辑&#10;&#10;- 在request函数中将请求拦截改为先拼接完整URL&#10;- 支持相对路径自动补全baseUrl&#10;- 删除原有请求拦截中url未处理的问题">
      <option name="closed" value="true" />
      <created>1782879460607</created>
      <option name="number" value="00043" />
      <option name="presentableId" value="LOCAL-00043" />
      <option name="project" value="LOCAL" />
      <updated>1782879460607</updated>
    </task>
    <task id="LOCAL-00044" summary="feat(utils): 优化请求函数URL拼接逻辑&#10;&#10;- 在request函数中将请求拦截改为先拼接完整URL&#10;- 支持相对路径自动补全baseUrl&#10;- 删除原有请求拦截中url未处理的问题">
      <option name="closed" value="true" />
      <created>1782881600013</created>
      <option name="number" value="00044" />
      <option name="presentableId" value="LOCAL-00044" />
      <option name="project" value="LOCAL" />
      <updated>1782881600013</updated>
    </task>
    <task id="LOCAL-00045" summary="feat(utils): 优化请求函数URL拼接逻辑&#10;&#10;- 在request函数中将请求拦截改为先拼接完整URL&#10;- 支持相对路径自动补全baseUrl&#10;- 删除原有请求拦截中url未处理的问题">
      <option name="closed" value="true" />
      <created>1782881602732</created>
      <option name="number" value="00045" />
      <option name="presentableId" value="LOCAL-00045" />
      <option name="project" value="LOCAL" />
      <updated>1782881602732</updated>
    </task>
    <task id="LOCAL-00046" summary="feat(utils): 优化请求函数URL拼接逻辑&#10;&#10;- 在request函数中将请求拦截改为先拼接完整URL&#10;- 支持相对路径自动补全baseUrl&#10;- 删除原有请求拦截中url未处理的问题">
      <option name="closed" value="true" />
      <created>1782881620199</created>
      <option name="number" value="00046" />
      <option name="presentableId" value="LOCAL-00046" />
      <option name="project" value="LOCAL" />
      <updated>1782881620199</updated>
    </task>
    <task id="LOCAL-00047" summary="feat(utils): 优化请求函数URL拼接逻辑&#10;&#10;- 在request函数中将请求拦截改为先拼接完整URL&#10;- 支持相对路径自动补全baseUrl&#10;- 删除原有请求拦截中url未处理的问题">
      <option name="closed" value="true" />
      <created>1782881623335</created>
      <option name="number" value="00047" />
      <option name="presentableId" value="LOCAL-00047" />
      <option name="project" value="LOCAL" />
      <updated>1782881623335</updated>
    </task>
    <task id="LOCAL-00048" summary="feat(utils): 优化请求函数URL拼接逻辑&#10;&#10;- 在request函数中将请求拦截改为先拼接完整URL&#10;- 支持相对路径自动补全baseUrl&#10;- 删除原有请求拦截中url未处理的问题">
      <option name="closed" value="true" />
      <created>1782881646712</created>
      <option name="number" value="00048" />
      <option name="presentableId" value="LOCAL-00048" />
      <option name="project" value="LOCAL" />
      <updated>1782881646712</updated>
    </task>
    <task id="LOCAL-00049" summary="docs(schedule): 添加2026年7月1日日程文件&#10;&#10;- 创建新的日程文档文件 2026-07-01.md&#10;- 文件内容待后续补充和更新">
      <option name="closed" value="true" />
      <created>1782899810526</created>
      <option name="number" value="00049" />
      <option name="presentableId" value="LOCAL-00049" />
      <option name="project" value="LOCAL" />
      <updated>1782899810526</updated>
    </task>
    <task id="LOCAL-00050" summary="docs(schedule): 添加2026年7月1日日程文件&#10;&#10;- 创建新的日程文档文件 2026-07-01.md&#10;- 文件内容待后续补充和更新">
      <option name="closed" value="true" />
      <created>1782899812498</created>
      <option name="number" value="00050" />
      <option name="presentableId" value="LOCAL-00050" />
      <option name="project" value="LOCAL" />
      <updated>1782899812498</updated>
    </task>
    <task id="LOCAL-00051" summary="feat(pay): 优化小程序支付流程并增强日志调试&#10;&#10;- 更新 wx-login 接口以返回完整 LoginResult，包括 access_token 和 user 对象&#10;- 支付页面新增大量日志，详尽打印参数、请求和响应信息&#10;- 优化获取订阅详情流程，支持 returnRaw 返回完整响应用于调试&#10;- 支付流程新增步骤，先通过 code 获取 openid 并缓存，再尝试用 openid 自动登录&#10;- 增加自动登录失败交互，提示未注册用户先登录&#10;- 支付相关请求均使用 returnRaw 方便错误排查&#10;- request 请求模块添加统一请求和响应日志，增强调试能力&#10;- request 认证错误和业务错误时加入详细日志输出">
      <option name="closed" value="true" />
      <created>1782979300991</created>
      <option name="number" value="00051" />
      <option name="presentableId" value="LOCAL-00051" />
      <option name="project" value="LOCAL" />
      <updated>1782979300991</updated>
    </task>
    <task id="LOCAL-00052" summary="feat(pay): 支付成功后自动跳转到已购产品页面&#10;&#10;- 支付成功后显示成功提示&#10;- 延迟1.5秒自动跳转到已购产品页面&#10;- 处理跳转失败时回退到用户首页&#10;- 优化用户支付完成后的使用体验">
      <option name="closed" value="true" />
      <created>1783003209100</created>
      <option name="number" value="00052" />
      <option name="presentableId" value="LOCAL-00052" />
      <option name="project" value="LOCAL" />
      <updated>1783003209100</updated>
    </task>
    <task id="LOCAL-00053" summary="feat(pay-bak): 新增小程序支付页面及相关配置&#10;&#10;- 新增确认支付页面配置，设置导航栏标题和样式&#10;- 实现小程序支付页完整组件逻辑，包括加载订单、发起JSAPI支付等&#10;- 支持通过 scene 或 subscriptionNo 获取订单参数&#10;- 完善支付流程接口请求及错误处理，支持自动登录和支付确认&#10;- 增加支付成功、支付中、支付失败、取消等状态页面展示&#10;- 支持支付成功后跳转已购产品页或用户页&#10;- 提供取消支付返回逻辑和界面展示&#10;- 细化支付金额显示和提示用户支付后可使用应用功能">
      <option name="closed" value="true" />
      <created>1784131564427</created>
      <option name="number" value="00053" />
      <option name="presentableId" value="LOCAL-00053" />
      <option name="project" value="LOCAL" />
      <updated>1784131564427</updated>
    </task>
    <task id="LOCAL-00054" summary="feat(address): 新增收货地址与售后申请功能&#10;&#10;- 新增地址编辑页面，支持地址智能识别、地图选点、地区选择和默认地址设置&#10;- 实现地址列表页面，支持地址查看、删除、设为默认及选择返回结算页&#10;- 新增售后申请页面，支持退款类型选择、商品选择、原因填写、图片上传和提交审核&#10;- 修复 passport 分包配置，移除不存在分包并补充缺失声明，避免 Taro 编译报错&#10;- 新增地址类型定义，增强前端地址数据结构类型安全&#10;- 优化页面交互体验，完善表单校验及错误提示逻辑&#10;- 统一代码格式与命名规范，保持代码风格一致性">
      <option name="closed" value="true" />
      <created>1784135922873</created>
      <option name="number" value="00054" />
      <option name="presentableId" value="LOCAL-00054" />
      <option name="project" value="LOCAL" />
      <updated>1784135922873</updated>
    </task>
    <task id="LOCAL-00055" summary="feat(passport): 迁移并修复小程序支付页面访问 websopy API 问题&#10;&#10;- 迁移 src/passport/pay 相关代码至当前项目，无需替换文件&#10;- 新增环境变量 WEBSOPY_API_BASE_URL，提供 websopy API 基础地址&#10;- 在 config/app.ts 导出 WebsopyBaseUrl，供代码引用&#10;- 配置 env.d.ts 类型定义，消除 TypeScript 隐式 any 错误&#10;- request 请求方法支持自定义 baseUrl 以调用不同接口地址&#10;- passport/pay 页面调用订阅接口统一传入 WebsopyBaseUrl&#10;- 修正 tenantId 类型为 number，调整登录用户类型断言&#10;- 确认编译成功，dist 目录生成对应文件及正确请求地址&#10;- 说明 type-check 依赖库问题不影响正常构建和运行">
      <option name="closed" value="true" />
      <created>1784136882898</created>
      <option name="number" value="00055" />
      <option name="presentableId" value="LOCAL-00055" />
      <option name="project" value="LOCAL" />
      <updated>1784136882898</updated>
    </task>
    <task id="LOCAL-00056" summary="feat(passport): 优化支付成功后页面跳转逻辑&#10;&#10;- 修改支付成功后的自动跳转目标，从已购产品页面改为我的页面&#10;- 使用 switchTab 替代 navigateTo 保证在 tabBar 页顺利跳转&#10;- 移除多余的跳转失败回退逻辑，简化跳转流程&#10;- 调整跳转延迟时间为 1500 毫秒，提升用户体验">
      <option name="closed" value="true" />
      <created>1784586922535</created>
      <option name="number" value="00056" />
      <option name="presentableId" value="LOCAL-00056" />
      <option name="project" value="LOCAL" />
      <updated>1784586922535</updated>
    </task>
    <task id="LOCAL-00057" summary="feat(user): 改为动态查询 VIP 角色ID，避免写死角色ID&#10;&#10;- RoleParam 类型新增 tenantId 字段，支持按租户过滤角色&#10;- 新增 getCurrentTenantId 获取当前租户ID，支持登录态和默认租户回退&#10;- 实现 getVipRoleId 函数，按 roleCode 与 tenantId 查询 VIP 角色ID&#10;- assignVipRole 中动态获取 VIP 角色ID，避免硬编码&#10;- 添加用户角色时带上 tenantId，确保多租户角色绑定正确&#10;- 移除写死的 VIP_ROLE_ID，改用动态查询结果，提高跨租户兼容性&#10;- 补充引入 listRoles 和 TenantId，完善相关依赖引用">
      <option name="closed" value="true" />
      <created>1784639229566</created>
      <option name="number" value="00057" />
      <option name="presentableId" value="LOCAL-00057" />
      <option name="project" value="LOCAL" />
      <updated>1784639229566</updated>
    </task>
    <task id="LOCAL-00058" summary="feat(user): 动态查询VIP角色ID，避免硬编码绑定问题&#10;&#10;- RoleParam新增tenantId字段，支持按租户过滤角色&#10;- 新增getCurrentTenantId函数，兼容登录态及默认租户回退&#10;- 实现getVipRoleId函数，按roleCode与tenantId查询VIP角色ID&#10;- assignVipRole动态获取VIP角色ID，移除写死的角色ID&#10;- 添加用户角色时传入tenantId，确保多租户环境中角色绑定正确&#10;- 修复后端UserRoleController.save接口bug，避免userId被无条件覆盖&#10;- 用户角色绑定时正确使用申请人userId，解决VIP审核角色误绑定问题">
      <option name="closed" value="true" />
      <created>1784653464775</created>
      <option name="number" value="00058" />
      <option name="presentableId" value="LOCAL-00058" />
      <option name="project" value="LOCAL" />
      <updated>1784653464775</updated>
    </task>
    <task id="LOCAL-00059" summary="feat(user): 统一VIP概念为开发者并优化开发者登录及申请&#10;&#10;- 将VIP相关文案、图标改为开发者，涉及用户中心、门店中心、审核页等&#10;- 优化登录弹窗UI，改为红色系，提升视觉统一性和交互体验&#10;- 关于我们页面品牌和公司信息内容更新，展示最新企业介绍和业务范围&#10;- VIP升级页新增“所在城市”选择，使用微信原生地区选择器，完善地址信息&#10;- 用户申请表单中新增城市字段及校验，提交时携带城市信息&#10;- 优化审核页面文案，统称开发者身份，明确申请审核内容&#10;- 修复UserRoleController.save接口bug，避免userId被无条件覆盖导致角色绑错&#10;- 动态查询VIP角色ID，避免硬编码，支持多租户环境正确绑定角色">
      <option name="closed" value="true" />
      <created>1784697551142</created>
      <option name="number" value="00059" />
      <option name="presentableId" value="LOCAL-00059" />
      <option name="project" value="LOCAL" />
      <updated>1784697551142</updated>
    </task>
    <task id="LOCAL-00060" summary="refactor(user): 删除门店信息输入框&#10;&#10;- 移除用户资料页面中的门店名称输入框&#10;- 移除用户资料页面中的门店地址输入框&#10;- 简化用户页面界面布局，提高界面整洁度">
      <option name="closed" value="true" />
      <created>1784697730666</created>
      <option name="number" value="00060" />
      <option name="presentableId" value="LOCAL-00060" />
      <option name="project" value="LOCAL" />
      <updated>1784697730666</updated>
    </task>
    <option name="localTasksCounter" value="61" />
    <servers />
  </component>
  <component name="TypeScriptGeneratedFilesManager">
    <option name="version" value="3" />
  </component>
  <component name="Vcs.Log.Tabs.Properties">
    <option name="TAB_STATES">
      <map>
        <entry key="MAIN">
          <value>
            <State />
          </value>
        </entry>
      </map>
    </option>
  </component>
  <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函数中日期格式正则表达式问题" />
    <MESSAGE value="refactor(config): 移除开发者中心和企业控制台的自定义导航样式&#10;&#10;- 删除了开发者中心页面配置中的 navigationStyle: 'custom'&#10;- 删除了企业控制台页面配置中的 navigationStyle: 'custom'&#10;- 简化了页面配置，保持默认导航样式&#10;- 有助于提升页面兼容性和维护性" />
    <MESSAGE value="feat(userVerify): 添加阿里云身份证二要素核验功能&#10;&#10;- 在接口层新增 verifyIdCard 接口，实现姓名与身份证号核验&#10;- userVerify 页面提交时增加身份核验逻辑，核验失败阻止提交&#10;- 调用核验接口时显示加载状态，并根据结果提示用户&#10;- 后端依赖 aliyun cloudauth，提供实人认证相关服务接口&#10;- 完成基本的错误捕获与用户提示，提升实名认证流程安全性" />
    <MESSAGE value="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接口调用及合并逻辑，提高应用列表完整性和体验" />
    <MESSAGE value="feat(app): 添加应用入口文件和配置文件&#10;&#10;- 新增 index.tsx 作为应用的主入口文件&#10;- 新增 index.config.ts 用于应用的配置管理" />
    <MESSAGE value="fix(tailwind): 更新配置以兼容微信小程序&#10;&#10;- 启用 autoprefixer 并新增 postcss-nested 插件支持嵌套语法&#10;- 扩展主题颜色，添加 primary 色系&#10;- 更新 content 路径包含 public/index.html&#10;- 禁用 preflight 以移除默认样式重置&#10;- 移除多数 corePlugins 禁用项，保留 preflight 禁用，简化兼容性配置" />
    <MESSAGE value="feat(postcss): 添加插件移除微信小程序不兼容Tailwind规则&#10;&#10;- 实现 postcss-remove-wxss-incompatible 插件&#10;- 移除反斜杠转义的重要性修饰符类选择器（.\!xxx）&#10;- 删除依赖 :not 和兄弟选择器的 .space-[x|y]-* 规则&#10;- 删除依赖 :not 和兄弟选择器的 .divide-[x|y]-* 规则&#10;- 解决微信小程序 WXSS 不支持的 CSS 特性问题" />
    <MESSAGE value="fix(pay): 优化订阅号获取逻辑并调整支付组件样式&#10;&#10;- 优先从小程序码 scene 参数读取 subscriptionNo，提升参数兼容性&#10;- 对 scene 参数进行解码，避免编码引起的问题&#10;- 移除支付组件价格显示处的固定颜色设置，增强样式灵活性" />
    <MESSAGE value="fix(utils): 优化小程序端复制文本功能体验&#10;&#10;- 小程序端直接调用原生 wx.setClipboardData，避免 Taro Promise 封装问题&#10;- 避免微信小程序重复显示复制成功提示和误报复制失败&#10;- 失败时仅在小程序端输出错误日志，非小程序端显示提示&#10;- 修改首页外链跳转逻辑，支持相对路径跳转，小程序内外链复制提示提升用户体验&#10;- 更新项目内剪切板使用规范文档，说明复制行为调整及符合相应规范要求" />
    <MESSAGE value="fix(index): 优化外链提示及删除复制咨询模板功能&#10;&#10;- 替换小程序内外链打开方式提示为弹窗提醒用户手动复制&#10;- 删除复制咨询模板功能及相关按钮&#10;- 修改联系我们文案，突出直接电话沟通或需求反馈&#10;- 移除无用导入的复制文本工具函数copyText" />
    <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;- 优化用户支付完成后的使用体验" />
    <MESSAGE value="feat(pay-bak): 新增小程序支付页面及相关配置&#10;&#10;- 新增确认支付页面配置，设置导航栏标题和样式&#10;- 实现小程序支付页完整组件逻辑，包括加载订单、发起JSAPI支付等&#10;- 支持通过 scene 或 subscriptionNo 获取订单参数&#10;- 完善支付流程接口请求及错误处理，支持自动登录和支付确认&#10;- 增加支付成功、支付中、支付失败、取消等状态页面展示&#10;- 支持支付成功后跳转已购产品页或用户页&#10;- 提供取消支付返回逻辑和界面展示&#10;- 细化支付金额显示和提示用户支付后可使用应用功能" />
    <MESSAGE value="feat(address): 新增收货地址与售后申请功能&#10;&#10;- 新增地址编辑页面，支持地址智能识别、地图选点、地区选择和默认地址设置&#10;- 实现地址列表页面，支持地址查看、删除、设为默认及选择返回结算页&#10;- 新增售后申请页面，支持退款类型选择、商品选择、原因填写、图片上传和提交审核&#10;- 修复 passport 分包配置，移除不存在分包并补充缺失声明，避免 Taro 编译报错&#10;- 新增地址类型定义，增强前端地址数据结构类型安全&#10;- 优化页面交互体验，完善表单校验及错误提示逻辑&#10;- 统一代码格式与命名规范，保持代码风格一致性" />
    <MESSAGE value="feat(passport): 迁移并修复小程序支付页面访问 websopy API 问题&#10;&#10;- 迁移 src/passport/pay 相关代码至当前项目，无需替换文件&#10;- 新增环境变量 WEBSOPY_API_BASE_URL，提供 websopy API 基础地址&#10;- 在 config/app.ts 导出 WebsopyBaseUrl，供代码引用&#10;- 配置 env.d.ts 类型定义，消除 TypeScript 隐式 any 错误&#10;- request 请求方法支持自定义 baseUrl 以调用不同接口地址&#10;- passport/pay 页面调用订阅接口统一传入 WebsopyBaseUrl&#10;- 修正 tenantId 类型为 number，调整登录用户类型断言&#10;- 确认编译成功，dist 目录生成对应文件及正确请求地址&#10;- 说明 type-check 依赖库问题不影响正常构建和运行" />
    <MESSAGE value="feat(passport): 优化支付成功后页面跳转逻辑&#10;&#10;- 修改支付成功后的自动跳转目标，从已购产品页面改为我的页面&#10;- 使用 switchTab 替代 navigateTo 保证在 tabBar 页顺利跳转&#10;- 移除多余的跳转失败回退逻辑，简化跳转流程&#10;- 调整跳转延迟时间为 1500 毫秒，提升用户体验" />
    <MESSAGE value="feat(user): 改为动态查询 VIP 角色ID，避免写死角色ID&#10;&#10;- RoleParam 类型新增 tenantId 字段，支持按租户过滤角色&#10;- 新增 getCurrentTenantId 获取当前租户ID，支持登录态和默认租户回退&#10;- 实现 getVipRoleId 函数，按 roleCode 与 tenantId 查询 VIP 角色ID&#10;- assignVipRole 中动态获取 VIP 角色ID，避免硬编码&#10;- 添加用户角色时带上 tenantId，确保多租户角色绑定正确&#10;- 移除写" />
    <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;- 简化用户页面界面布局，提高界面整洁度" />
    <option name="NON_MODAL_COMMIT_POSTPONE_SLOW_CHECKS" value="false" />
  </component>
</project>