Files
soul-yongping/.cursor/skills/miniprogram-dev/SKILL.md

6.0 KiB
Raw Blame History

name, description
name description
soul-miniprogram-dev Soul 创业派对小程序开发规范。在 miniprogram/ 下编辑时必遵循。WXML/WXSS/JS、app.request、/api/miniprogram/*、scene、支付、权限。Use when editing miniprogram, 小程序, 微信原生.

Soul 创业派对 - 小程序开发 Skill

当你在 miniprogram/ 目录下新增、优化或编辑代码时,必须遵循本 Skill。本 Skill 与 soul-api、soul-admin 的边界约束见项目 Rules防止与 API/管理端逻辑互窜。


1. 项目定位与边界

  • miniprogram微信原生小程序WXML/WXSS/JS面向 C 端用户。
  • 唯一后端:业务接口只请求 soul-apiGo通过 app.globalData.baseUrl 配置。
  • 禁止:不得在 miniprogram 内实现或依赖 next-project 的 API 路由;不得调用 /api/admin/*/api/db/* 等管理端路径。

2. API 调用规范(防互窜)

  • 路径前缀:所有请求必须使用 /api/miniprogram/...,与 soul-api 的 miniprogram 路由组一致。
  • 发起方式:统一通过 getApp().request(url, options),禁止在页面里直接 wx.request 写死 baseUrl。
  • 示例
    • 正确:app.request('/api/miniprogram/book/all-chapters')app.request('/api/miniprogram/login', { method: 'POST', data: { code } })
    • 错误:app.request('/api/book/all-chapters')app.request('/api/admin/xxx')/api/vip/status(若 soul-api 未提供 miniprogram 下等价接口则视为错误,需统一走 miniprogram 组)。
  • 静默请求:不弹窗的请求(如推荐访问、统计)传 silent: trueapp.request(url, { ..., silent: true })
  • 错误处理request 已统一处理 200 且 success: false、401、4xx/5xx 与网络错误;页面只需 try/catch.then/.catch,用 _getApiErrorMsg 的文案即可,勿重复造轮子。

3. 代码风格与结构

  • 入口app.js 内维护 globalDatabaseUrl、userInfo、openId、bookData、purchasedSections、theme、推荐相关等页面通过 getApp().globalData 读取。
  • 页面:每个页面一个目录,含 *.js*.wxml*.wxss*.json;页面逻辑用 Page({ data: {...}, onLoad, onShow, ... }),数据用 this.setData() 更新。
  • 工具:公共方法放在 utils/(如 util.jsscene.jschapterAccessManager.jsreadingTracker.jspayment.js);使用 module.exports 导出,页面内 require
  • 命名:文件名小写短横线(如 withdraw-recordsJS 内变量/函数小驼峰;常量可全大写下划线。
  • 注释文件头注明「Soul创业派对 - 模块名」及重要逻辑说明(如 scene 编解码、权限状态机)。

4. 业务逻辑约定(与 soul-api 对齐)

  • 登录:微信登录走 POST /api/miniprogram/logincode手机号用 POST /api/miniprogram/phone-login/api/miniprogram/phonetoken 存 wx.setStorageSync('token', ...),请求头由 app.request 统一带 Authorization: Bearer <token>
  • 推荐码:扫码/分享带 ref 或 scene 中 ref,由 app.handleReferralCode 统一处理;绑定调 POST /api/miniprogram/referral/bind,访问记录调 POST /api/miniprogram/referral/visit(可用 silent
  • 书籍/章节:目录与内容来自 GET /api/miniprogram/book/all-chapters/api/miniprogram/book/chapter/by-mid/:mid 等;权限与购买状态用 GET /api/miniprogram/user/purchase-status,勿在端内臆造权限规则。
  • 阅读进度:使用 utils/readingTracker.jschapterAccessManager.js;进度上报 POST /api/miniprogram/user/reading-progress
  • 支付:下单/查单走 POST/GET /api/miniprogram/pay、回调由 soul-api 处理;支付前必须已有 openId通过登录或 getOpenId 获得)。
  • 提现:申请/记录/确认等走 /api/miniprogram/withdraw/*;订阅消息模板 ID 在 app.globalData.withdrawSubscribeTmplId
  • scene 编解码:海报与扫码统一用 utils/scene.jsbuildScene/parseScene,支持 mid、id、ref分隔符与后端生成一致_)。

5. 与 soul-api 的对接要点

  • 响应格式:成功为 { success: true, data: ... } 或带 message;失败为 { success: false, error: "..." }messageapp.request 已据此解析并 reject。
  • 鉴权:需登录的接口由 soul-api 校验 token401 时 app 会清登录态并提示重新登录。
  • 新增需求:若 soul-api 尚未提供某能力,应在 soul-api 的 miniprogram 组下新增接口,小程序再调 /api/miniprogram/...,不得在 miniprogram 内写管理端路径或臆造接口。

6. 表单与输入框

  • input / textarea 边距必须<view> 包裹padding/边距一律写在 view 上;内部 <input> 仅设 width: 100% 和字体样式。禁止在 input/textarea 自身上设 padding否则会光标截断、布局异常。
  • 口诀:外边包 view内部 input width 100%。
  • 正确写法
    • input<view class="form-input"><input class="form-input-inner" ... /></view>.form-input { padding: 16rpx 24rpx; background: #1F2937; }.form-input-inner { width: 100%; font-size: 28rpx; background: transparent; }
    • textarea<view class="form-textarea-wrap"><textarea class="form-textarea-inner" ... /></view>.form-textarea-wrap { padding: 16rpx 24rpx; background: #1F2937; }.form-textarea-inner { width: 100%; font-size: 28rpx; background: transparent; min-height: 160rpx; }

7. 何时使用本 Skill

  • miniprogram/ 下新增或修改页面、组件、utils 时。
  • 在小程序内新增或修改任何网络请求路径时(必须保持 /api/miniprogram/...)。
  • 做阅读、支付、推荐、提现等与 soul-api 对接的功能时。
  • 做表单、input/textarea 样式时(遵循 §6用 view 包裹padding 写在 view 上)。

遵循本 Skill 可保证小程序只与 soul-api 的 miniprogram 路由组对接,避免与管理端或 next-project 接口混用。