# 小鹏小程序 ## 启动配置 需补全 config 目录下 dev.js/prod.js 的必填appId/密钥 ``` const XP_APPID_MAP = { weapp: '"xxxxxxx"', // 用户中心登录appId }; const XP_SECRET_MAP = { weapp: '"xxxxxxx"', // 用户中心登录密钥 }; const PLATFORM_APPID_MAP = { weapp: '"xxxxxxx"', // 微信小程序平台 appId }; ``` 补全 project.config.json 文件的 appId ``` "packOptions": { "ignore": [], "include": [] }, "appid": "xxxxxxxxxxxxx", "projectname": "xp-robotaxi-miniprogram", "libVersion": "3.13.0" ``` ## 环境依赖 ```js Taro@3.4.9 node@14.x ``` ## 建议使用 nvm 进行 node 版本管理 [nvm 安装文档](https://github.com/nvm-sh/nvm) ```js // 安装 node@14.x nvm install v14.21.3 // 切换node版本 nvm use 14 ``` ## 安装依赖 ```js // 安装 cli npm install -g @tarojs/cli@3.4.9 // 安装本地依赖 npm install ``` ## 运行命令 ```js // 本地开发(预发环境) npm run dev:weapp // 本地开发(切换线上环境变量) npm run dev:weapp_prod // 本地预览(开启压缩模式) npm run preview:weapp // 生产发布 npm run build:weapp ``` ## 核心文件结构说明 项目主要目录与文件结构如下: ``` ├── config/ # 环境配置(如 appId、密钥等) ├── src/ │ ├── app.config.ts # 小程序全局页面、分包、tabBar 配置 │ ├── app.tsx # 应用入口,初始化全局逻辑、store │ ├── actions/ # redux action 定义 │ ├── reducers/ # redux reducer 定义 │ ├── store/ # redux store 配置 │ ├── constants/ # 常量、配置项(如 api、app) │ ├── utils/ # 工具方法(如 request、tools、jump 等) │ ├── components/ # 通用 UI 组件 │ ├── pages/ # 主包页面(如 map、user、xpeng) │ │ └── robotaxi/ # robottaxi 首页 │ └── robotaxi/ # 业务子包,robotaxi 相关页面与组件 ├── package.json # 依赖与脚本 ├── project.config.json # 微信小程序项目配置 ├── tsconfig.json # TypeScript 配置 ├── babel.config.js # Babel 配置 ``` ## robotaxi 开发约束 - robotaxi 首页放 `pages/robotaxi/` 目录下,注意将修改和新增限制在此目录内,方便迁移 - 除首页外,所有 robotaxi 相关代码统一放在 `src/robotaxi` 子包目录中 - 除 `pages/robotaxi/` 和 `src/robotaxi` 目录以外文件只能新增,不要修改已有文件(配置文件除外) - 所有接口请求通过 `request.ts` 进行统一处理,request 已经对接口协议和登录态传递进行了统一封装 ## 网络请求使用说明 所有接口请求请统一通过 `src/utils/request.ts` 封装的方法发起。 ### 核心逻辑 - 封装了 Taro.request,自动处理请求头、签名、登录态校验、异常处理等。 - 支持自动跳转登录页(如登录态失效),无需手动处理。 - 支持 payload 排序、签名、设备信息、用户信息等自动注入。 ### 基本用法 ```js import request from '@/utils/request'; // 发起 POST 请求(默认) request({ url: '/api/xxx', payload: { foo: 'bar' } }, true) // 第二个参数 true 表示需要校验登录态 .then(data => { // 业务数据处理 }) .catch(err => { // 错误处理(如需自定义) }); // 如需 GET 或自定义 header,可传递 method/extraHeader 等参数 ``` > 建议所有业务接口均通过该方法发起,避免重复造轮子和遗漏登录校验、签名等安全逻辑。 > 后端需要接入用户中心提供的验签 sdk --- ## 登录相关说明 - 页面通过检查 storage 中是否缓存 `otp` 标识确定用户是否已登录,具体可以参考 `checkOtp` 方法 - 用户没有登录可以通过跳转到 `/pages/user/login` 页面进行登录,具体可以参考 `checkOtp` 方法 - 如果 `otp` 已过期或实效,则通过 `request.ts` 封装的方法自动跳转到登录页进行续登或重新登录