项目文档.md
10.6 KB
静待花开-活动小助手 项目文档
项目概述
项目名称: 静待花开-活动小助手 (swx-weapp) 项目版本: 1.0.0 项目类型: 微信小程序 开发框架: Taro 3.4.10 + Vue 3 + Vant Weapp Node.js版本: 16.14.2
技术栈
核心框架
- Taro: 3.4.10 (多端统一开发框架)
- Vue: 3.2.24 (使用 Composition API)
- Pinia: 2.0.6 (状态管理)
- Vant Weapp: 1.11.7 (UI组件库)
开发工具
- 构建工具: Webpack + Babel
- 样式预处理: Less
- 代码规范: ESLint + Stylelint
- 包管理: npm/pnpm
- 跨平台环境变量: cross-env
网络请求
- HTTP客户端: axios-miniprogram 2.0.0-rc-2
- 数据序列化: qs 6.11.0
- 时间处理: dayjs 1.11.5
项目结构
src/
├── api/ # API接口层
│ ├── Activity/ # 活动相关接口
│ ├── Host/ # 主办方接口
│ ├── Member/ # 成员接口
│ ├── Partner/ # 合作伙伴接口
│ ├── Reg/ # 注册接口
│ ├── User/ # 用户接口
│ ├── wx/ # 微信相关接口
│ ├── common.js # 通用接口
│ └── fn.js # 接口封装函数
├── assets/ # 静态资源
│ ├── images/ # 图片资源
│ └── styles/ # 全局样式
├── components/ # 公共组件
│ ├── vant-weapp/ # Vant组件库
│ ├── activity-bar.vue # 活动栏组件
│ ├── activity-card.vue # 活动卡片组件
│ ├── navbar.vue # 底部导航栏
│ └── ...
├── pages/ # 页面目录
│ ├── index/ # 首页
│ ├── createActivity/ # 创建活动
│ ├── activityDetail/ # 活动详情
│ ├── joinActivity/ # 参加活动
│ ├── userInfo/ # 用户信息
│ ├── auth/ # 授权页面
│ ├── my/ # 我的页面
│ └── ...
├── stores/ # 状态管理
│ ├── counter.js # 计数器状态
│ ├── host.js # 主办方状态
│ └── router.js # 路由状态
├── utils/ # 工具函数
│ ├── config.js # 配置文件
│ ├── request.js # 网络请求封装
│ ├── tools.js # 工具函数
│ └── ...
├── app.config.js # 应用配置
├── app.js # 应用入口
└── app.less # 全局样式
核心功能模块
1. 用户认证模块
-
授权页面:
/pages/auth/index - 功能: 微信授权登录,获取用户信息
- 权限控制: 未授权用户自动跳转到授权页面
2. 活动管理模块
- 首页: 推荐活动展示,轮播图
-
创建活动:
/pages/createActivity/index -
活动详情:
/pages/activityDetail/index -
参加活动:
/pages/joinActivity/index - 我的活动: 创建的活动和参加的活动列表
3. 用户管理模块
-
用户信息:
/pages/userInfo/index -
用户编辑:
/pages/editInfo/index -
用户搜索:
/pages/userSearch/index
4. 项目管理模块
-
项目管理:
/pages/projectManage/index -
创建项目:
/pages/createProject/index -
编辑项目:
/pages/editProject/index
API接口设计
基础配置
-
服务器地址:
https://oa.onwall.cn - 请求格式: RESTful API
-
参数标识:
f=swx - 超时时间: 5000ms
主要接口模块
活动接口 (Activity)
-
activity_join_list: 我加入的活动列表 -
activity_add_list: 我创建的活动列表 -
activity_copy: 复制活动 -
activity_end: 结束活动 -
activity_del: 删除活动 -
activity_info_qrcode: 生成小程序码
用户接口 (User)
-
user_info: 获取用户信息 -
user_edit: 修改用户信息
通用接口 (Common)
-
sms: 发送验证码 -
upload: 获取七牛云上传token -
save_file: 保存文件
状态管理
Pinia Store
- router.js: 路由状态管理,缓存未授权访问的页面
- host.js: 主办方相关状态
- counter.js: 计数器状态
UI组件库
Vant Weapp 组件
已配置的组件包括:
- 基础组件: button, icon, loading, info
- 表单组件: field, cell, picker, stepper, uploader, switch, radio, checkbox
- 反馈组件: toast, dialog, action-sheet, share-sheet
- 展示组件: image, tag, skeleton, empty
- 导航组件: tab, tabs, sticky
- 布局组件: col, row, popup, overlay
自定义组件
- navbar.vue: 底部导航栏 (首页/创建/我的)
- activity-card.vue: 活动卡片展示
- activity-bar.vue: 活动栏组件
开发规范
代码规范
- 使用 Vue 3 Composition API
- 使用
<script setup>语法糖 - 样式使用 Less 预处理器
- 遵循 ESLint 代码规范
文件命名
- 页面文件: 小写字母 + 连字符
- 组件文件: 小写字母 + 连字符
- 工具文件: 小写字母 + 连字符
注释规范
- 文件头部包含作者、日期、描述信息
- 函数使用 JSDoc 风格注释
- 重要逻辑添加行内注释
项目配置详解
Taro 配置 (config/index.js)
- 设计稿宽度: 750px
- 设备适配比例: 支持 640/750/828 多种设备
-
路径别名配置:
-
@/utils: 工具函数目录 -
@/components: 组件目录 -
@/images: 图片资源目录 -
@/api: API接口目录 -
@/stores: 状态管理目录
-
插件配置
- taro-plugin-pinia: Pinia 状态管理支持
- @tarojs/plugin-framework-vue3: Vue3 框架支持
- @tarojs/plugin-html: HTML 标签支持
- @tarojs/plugin-inject: 第三方组件注入
- tarojs-plugin-platform-miniprogram: 自定义 wxml 支持
样式处理
- pxtransform: px 转 rpx,排除 van- 前缀组件
- url处理: 图片资源转换,限制 1024 字节
- CSS Modules: 默认关闭
工具函数库 (utils/tools.js)
时间处理
-
formatDate(date): 格式化时间为 YYYY-MM-DD HH:mm - 使用 moment.js 进行时间处理
平台检测
-
wxInfo(): 检测浏览器平台信息- isAndroid: 安卓平台检测
- isiOS: iOS平台检测
- isWx: 微信环境检测
- isWxPc: PC端微信检测
字符串工具
-
strExist(array, str): 检查字符串是否存在于数组中 -
parseQueryString(url): 解析URL查询参数 -
randomId(n): 生成随机ID
构建和部署
开发环境
# 切换Node.js版本
nvm use 16.14.2
# 安装依赖
npm install
# 启动微信小程序开发
npm run dev:weapp
生产构建
# 构建微信小程序
npm run build:weapp
支持平台
- 微信小程序 (主要)
- 支付宝小程序
- 百度小程序
- 字节跳动小程序
- QQ小程序
- H5
- React Native
注意事项
开发环境要求
- Node.js 版本必须使用 16.14.2
- 建议使用 nvm 管理 Node.js 版本
- 项目较老,可能存在依赖兼容性问题
已知问题
- 需要更新 browserslist 配置
- 部分依赖版本较老,升级需谨慎
- OpenSSL 兼容性问题,需使用指定 Node.js 版本
开发建议
- 严格按照现有代码风格开发
- 新增 Vant 组件需在
vantComponentConf.js中配置 - API 接口统一使用封装的
fn函数处理 - 页面路由需在
app.config.js中注册 - 状态管理优先使用 Pinia
- 样式单位使用 rem,适配小程序
- 图片上传使用七牛云存储
- 富文本编辑使用自定义
activity-editor组件 - 表单验证遵循现有的验证规则
- 错误处理统一使用 Toast 提示
页面实现细节
创建活动页面 (/pages/createActivity/index.vue)
- 功能: 创建新活动,包含主办方选择、活动信息填写、封面上传等
-
关键组件:
-
van-field: 表单输入组件 -
van-uploader: 图片上传组件 -
activity-editor: 富文本编辑器
-
-
技术特点:
- 支持图片上传到七牛云
- 动态表单字段配置
- 富文本内容编辑
- 表单验证和提交
首页 (/pages/index/index.vue)
- 功能: 展示推荐活动,轮播图展示
-
关键组件:
-
swiper: 轮播图组件 -
activity-card: 活动卡片组件 -
scroll-view: 滚动加载
-
-
技术特点:
- 无限滚动加载
- 缺省页面处理
- 活动卡片点击跳转
授权页面 (/pages/auth/index.vue)
- 功能: 微信授权登录
-
技术实现:
- 使用
Taro.login()获取授权码 - 发送到服务器换取 sessionid
- 自动跳转到目标页面
- 使用
网络请求封装
请求拦截器
// 请求拦截器配置
service.interceptors.request.use(
config => {
// POST 请求数据序列化(排除上传接口)
config.data = config.method === 'post' &&
!strExist(['a=upload', 'upload.qiniup.com'], config.url)
? qs.stringify(config.data) : config.data;
return config
}
)
响应处理
- 统一错误处理和 Toast 提示
- 自动处理授权失效跳转
- 支持七牛云上传响应格式
业务流程
用户授权流程
- 用户首次进入小程序
- 检查是否已授权 (sessionid)
- 未授权自动跳转授权页面 (
/pages/auth/index) - 调用
Taro.login()获取 code - 发送 code 到服务器获取 openid
- 服务器返回 sessionid,保存到本地存储
- 授权成功后跳转到缓存的目标页面
授权技术实现
// 授权登录核心代码
Taro.login({
success: function (res) {
if (res.code) {
request.post('/srv/?a=openid', {
code: res.code
}).then(res => {
if (res.data.code) {
// 保存 sessionid
wx.setStorageSync("sessionid", res.cookies[0]);
// 跳转到目标页面
}
})
}
}
})
活动参与流程
- 首页浏览推荐活动
- 点击活动卡片查看详情
- 填写参与信息
- 提交参与申请
- 查看参与状态
维护和扩展
- 更新时候注意事项
- datetime-picker 组件有一部分写死修改,需要注意不要修改
添加新页面
- 在
src/pages/下创建页面目录 - 在
app.config.js中注册路由 - 如需分包,在
subpackages中配置
添加新接口
- 在对应的 API 模块中定义接口
- 使用统一的
fn函数封装 - 添加必要的错误处理
添加新组件
- 在
src/components/下创建组件 - 如使用新的 Vant 组件,需在配置文件中添加
- 遵循现有的组件开发规范
文档更新日期: 2024年12月 维护人员: 开发团队 联系方式: hookehuyr@gmail.com