You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

540 lines
30 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 通用功能
> 模块编码common
> 端侧:小程序
> 关联文档01-模块划分.md §5.2、02-功能清单-小程序端.md §1、03-业务流转逻辑-小程序端.md §1&10、05-接口规范.md §2、06-项目技术要求.md §4.1
> 强制规范遵循 `07-前端界面开发规范.md`
## 功能概览
| 项目 | 说明 |
|------|------|
| 菜单名称 | 通用功能 |
| 子菜单 | 快捷登录、个人信息、消息通知、数据补录申请、版本更新提示、通讯录 |
| 功能编号 | MP-C-01 ~ MP-C-06 |
| 权限编码 | —(通用功能,登录即可用) |
## 页面清单
### 页面1登录页
- **页面路径**`/pages/login/index`
- **页面元素**
- 微信授权登录按钮获取openid
- 手机号绑定按钮(微信获取手机号组件)
- 用户协议与隐私政策链接
- 版本号展示
- **界面布局**
- 顶部应用Logo + 系统名称
- 中部:微信一键登录按钮(大按钮,居中)
- 底部:版本号 + 协议链接
- **操作按钮**
| 按钮 | 权限 | 说明 |
|------|------|------|
| 微信一键登录 | — | 触发wx.login()获取code后端换openid |
| 获取手机号 | — | 微信获取手机号组件,绑定手机号 |
#### 交互流程要求
1. **页面加载流程**页面加载时检查本地token是否有效→有效则直接跳转工作台→无效则显示登录页展示应用Logo和系统名称显示骨架屏占位
2. **查询/筛选交互流程**:无筛选操作
3. **表单填写与提交流程**:点击「微信一键登录」→ 触发wx.login()获取code → 后端换取openid → 若未绑定手机号则显示获取手机号按钮 → 点击获取手机号调用微信获取手机号组件 → 绑定成功后跳转工作台
4. **弹窗/弹层交互流程**:首次使用弹出用户协议与隐私政策确认弹窗→用户点击同意后继续登录流程;匹配失败时弹出提示"未找到关联信息,请联系管理员"
5. **行内操作流程**:点击协议链接→跳转协议详情页
6. **异常与错误处理**:微信授权失败显示"授权失败,请重试"网络异常显示重试按钮openid匹配失败提示联系管理员离线状态下提示"网络不可用,请检查网络连接"
7. **联动/级联交互**:登录成功后自动加载权限集,根据权限渲染工作台功能入口
8. **权限控制交互表现**登录前无法访问其他页面所有页面跳转均需验证token有效性
#### 组件规范
| 元素 | 组件 | 配置参数 |
|------|------|----------|
| 应用Logo | `image` | mode="aspectFit"宽度120px |
| 微信一键登录按钮 | `button` | open-type="getPhoneNumber"type="primary"size="default" |
| 获取手机号按钮 | `button` | open-type="getPhoneNumber"type="default" |
| 协议链接 | `navigator` | url="/pages/agreement/index" |
| 版本号 | `text` | font-size="12px"color="#999" |
| 确认弹窗 | `uni-popup` | type="dialog":mask-click="false" |
#### 校验规则
| 字段 | 规则 | 错误提示 |
|------|------|----------|
| 微信授权 | wx.login()必须返回有效code | "微信授权失败,请重试" |
| 手机号绑定 | 必须获取微信手机号组件返回的有效手机号 | "获取手机号失败,请重试" |
| 用户协议 | 首次登录必须同意协议 | "请先同意用户协议与隐私政策" |
| 人员匹配 | openid必须关联系统人员信息 | "未找到关联信息,请联系管理员" |
#### 响应式布局
- **适配机型**iPhone SE375px~ iPad mini768px按钮宽度max-width=320px居中
- **横竖屏适配策略**竖屏为默认布局横屏时Logo缩小按钮宽度自适应
- **手势交互规范**登录按钮可点击区域≥44px协议链接可点击区域≥44px
- **安全区域**底部按钮适配底部安全区padding-bottom=env(safe-area-inset-bottom)
### 页面2工作台首页
- **页面路径**`/pages/workbench/index`
- **页面元素**
- 用户头像 + 姓名 + 角色
- 功能入口网格(根据角色动态渲染)
- 消息通知红点提示
- 今日关键指标简卡
- **查询条件**:无
- **列表字段**:无
- **界面布局**
- 顶部:用户信息栏(头像 + 姓名 + 角色 + 消息入口)
- 中部功能入口网格2列×N行按角色动态显示
- 维修人员:我的工单、消息通知
- 巡检人员:今日巡检、异常上报
- 保洁人员:今日保洁、异常反馈
- 主管:工单分配、审批中心、统计概览
- 管理员:报修管理、巡检管理、保洁管理、考勤管理、评价管理、组织架构
- 底部底部Tab栏工作台、消息、我的
- **操作按钮**
| 按钮 | 权限 | 说明 |
|------|------|------|
| 各功能入口 | 按角色 | 根据权限集动态显示/隐藏 |
#### 交互流程要求
1. **页面加载流程**:页面加载时获取用户信息及权限集→根据权限动态渲染功能入口网格→显示骨架屏占位→数据返回后渲染用户信息栏和功能入口
2. **查询/筛选交互流程**:无手动筛选,功能入口根据角色权限自动过滤显示
3. **表单填写与提交流程**:无表单提交操作
4. **弹窗/弹层交互流程**:点击消息入口→跳转消息通知列表页;功能入口红点提示为系统推送自动标记
5. **行内操作流程**点击功能入口→跳转对应功能页面点击消息入口→跳转消息列表底部Tab切换工作台/消息/我的
6. **异常与错误处理**:权限加载失败显示重试按钮;网络异常显示错误提示;离线时显示缓存的功能入口但提示"数据可能不是最新"
7. **联动/级联交互**:功能入口数量与权限集联动,角色变更后重新渲染入口网格
8. **权限控制交互表现**:无权限的功能入口不显示;不同角色看到不同的功能入口集合
9. **H1 防重复请求(强制)**功能入口点击后做轻量防抖300ms避免重复跳转权限集加载请求pending期间不重复发下拉刷新时abort前一次请求后重发
10. **H2 超时配置(强制)**获取用户信息及权限集GET请求超时15s>3s显示wx.showLoading("加载中...");超时后提示"加载超时,请下拉刷新"+重试按钮
11. **H8 反馈(建议)**数据加载成功无额外toast静默渲染加载失败wx.showToast({icon:'none', title:'数据加载失败'}); 禺线模式wx.showToast({icon:'none', title:'数据可能不是最新'})
#### 组件规范
| 元素 | 组件 | 配置参数 |
|------|------|----------|
| 用户信息栏 | `view` + `image` + `text` | flex布局头像40px圆形 |
| 功能入口网格 | `uni-grid` | :column="2":showBorder="false" |
| 功能入口项 | `uni-grid-item` | 点击跳转对应页面 |
| 红点提示 | `uni-badge` | :content="count"type="error" |
| 消息入口 | `uni-icons` | type="notification"size="24" |
| 底部Tab栏 | `uni-tabbar` | 3个Tab工作台/消息/我的 |
| 今日指标卡片 | `uni-card` | mode="center",简洁数字展示 |
#### 校验规则
| 字段 | 规则 | 错误提示 |
|------|------|----------|
| 用户信息 | 必须返回有效的用户信息 | "获取用户信息失败,请下拉刷新" |
| 权限集 | 必须返回有效的权限数据 | "权限加载失败,请重新登录" |
| 功能入口 | 至少有一个可访问的功能入口 | "暂无可用功能,请联系管理员" |
#### 响应式布局
- **适配机型**iPhone SE375px~ iPad mini768px功能入口网格宽度自适应
- **横竖屏适配策略**竖屏2列网格横屏改为3~4列网格用户信息栏水平展开
- **手势交互规范**功能入口可点击区域≥44px底部Tab可点击区域≥48px支持下拉刷新
- **安全区域**底部Tab栏适配底部安全区padding-bottom=env(safe-area-inset-bottom)
### 页面3个人信息页
- **页面路径**`/pages/profile/index`
- **页面元素**
- 头像(可点击查看大图)
- 姓名(只读)
- 手机号(脱敏显示,可修改)
- 所属物业公司(只读)
- 所属班组(只读)
- 角色信息(只读)
- 退出登录按钮
- **查询条件**:无
- **列表字段**:无
- **界面布局**
- 顶部:头像(居中,大尺寸)
- 中部信息列表Label + Value形式
- 底部:退出登录按钮(红色文字)
- **操作按钮**
| 按钮 | 权限 | 说明 |
|------|------|------|
| 修改手机号 | — | 弹出微信获取手机号组件 |
| 退出登录 | — | 清除本地token跳转登录页 |
#### 交互流程要求
1. **页面加载流程**:页面加载时获取当前用户个人信息→渲染头像、姓名、手机号、所属公司/班组/角色
2. **查询/筛选交互流程**:无筛选操作
3. **表单填写与提交流程**:点击修改手机号→弹出微信获取手机号组件→获取新手机号→调用接口更新→更新成功提示"手机号修改成功"
4. **弹窗/弹层交互流程**:点击头像→弹出大图预览;退出登录→弹出确认弹窗"确定要退出登录吗?"
5. **行内操作流程**点击修改手机号→调用微信手机号组件点击退出登录→确认后清除token跳转登录页
6. **异常与错误处理**:信息加载失败显示重试;手机号修改失败提示错误信息;退出登录清除本地缓存失败则强制跳转
7. **联动/级联交互**:手机号修改成功后同步更新页面显示和本地缓存
8. **权限控制交互表现**:所有登录用户均可访问;部分信息只读不可编辑
9. **H1 防重复请求(强制)**修改手机号按钮点击后loading态+disabled退出登录按钮点击后立即disabled防止重复触发手机号更新请求pending期间禁止重复调用微信组件
10. **H2 超时配置(强制)**手机号更新接口POST请求超时30s>3s显示wx.showLoading("正在更新...");超时后提示"请求超时,请重试"+重试按钮
11. **H3 操作确认(强制)**退出登录必须使用uni-popup(type="dialog")弹出确认弹窗"确定要退出登录吗?退出后需重新登录"含后果说明用户确认后才执行清除token和跳转
12. **H4 脏数据检测(强制)**:修改手机号操作前对当前用户信息做深拷贝快照(JSON.parse(JSON.stringify(userInfo)))页面卸载onUnload时检测isDirty若有未保存的修改弹出提示
13. **H7 文件上传(建议)**:本页面不涉及文件上传
14. **H8 反馈(建议)**手机号修改成功wx.showToast({icon:'success', title:'手机号修改成功'})修改失败wx.showToast({icon:'none', title:'修改失败原因'}); 退出登录成功无需toast静默跳转
#### 组件规范
| 元素 | 组件 | 配置参数 |
|------|------|----------|
| 头像 | `image` | mode="aspectFill"80px圆形@click预览大图 |
| 信息列表 | `uni-list` + `uni-list-item` | :showArrow="false",右侧为值 |
| 修改手机号 | `button` | open-type="getPhoneNumber"type="default" |
| 退出登录 | `button` | type="warn"size="default" |
| 确认弹窗 | `uni-popup` | type="dialog",确认退出/取消 |
| 大图预览 | `uni-popup` | type="center",图片全屏预览 |
#### 校验规则
| 字段 | 规则 | 错误提示 |
|------|------|----------|
| 手机号 | 必须为11位有效手机号 | "手机号格式不正确" |
| 头像 | 点击预览需有效URL | — |
| 退出确认 | 必须用户二次确认 | — |
#### 响应式布局
- **适配机型**iPhone SE375px~ iPad mini768px信息列表宽度自适应
- **横竖屏适配策略**:竖屏垂直布局;横屏信息列表水平分组展示
- **手势交互规范**头像可点击区域≥44px修改手机号按钮≥44px退出登录按钮≥44px
- **安全区域**:底部退出按钮适配底部安全区
### 页面4消息通知列表
- **页面路径**`/pages/message/list`
- **页面元素**
- 消息分类Tab全部 / 工单 / 审批 / 系统)
- 消息列表
- 未读标记红点
- 全部标记已读按钮
- **查询条件**
| 条件 | 类型 | 说明 |
|------|------|------|
| 分类 | Tab切换 | 全部/工单/审批/系统 |
- **列表字段**
| 字段 | 说明 |
|------|------|
| 消息标题 | 通知标题 |
| 消息摘要 | 内容前30字 |
| 消息时间 | 相对时间(如"5分钟前" |
| 已读标记 | 红点显示未读 |
| 消息类型图标 | 不同类型不同图标 |
- **界面布局**
- 顶部分类Tab
- 中部:消息列表(左图标 + 中标题摘要 + 右时间 + 未读红点)
- 底部:全部标记已读按钮
- **操作按钮**
| 按钮 | 权限 | 说明 |
|------|------|------|
| 全部标记已读 | — | 将所有未读消息标为已读 |
| 点击消息 | — | 跳转到对应业务详情页 |
#### 交互流程要求
1. **页面加载流程**页面加载时请求消息列表→显示骨架屏→数据返回后渲染分类Tab和消息列表默认显示"全部"分类
2. **查询/筛选交互流程**点击分类Tab切换消息类别→重新加载对应分类的消息列表支持滚动加载更多
3. **表单填写与提交流程**:无表单提交操作
4. **弹窗/弹层交互流程**:无弹窗
5. **行内操作流程**:点击消息→标记该消息已读→跳转对应业务详情页;点击「全部标记已读」→批量标记所有未读消息
6. **异常与错误处理**:消息加载失败显示重试;网络异常显示错误提示;离线时显示缓存消息并提示"离线模式"
7. **联动/级联交互**Tab切换与列表数据联动标记已读后红点数量实时更新
8. **权限控制交互表现**:所有登录用户均可访问;消息内容根据权限控制跳转详情页的可见性
9. **H1 防重复请求(强制)**「全部标记已读」按钮点击后loading态+disabledTab切换请求pending时不重复发上拉加载更多时分页请求使用requestTask新请求时abort前一次下拉刷新时abort进行中的列表请求
10. **H2 超时配置(强制)**消息列表GET请求超时15s标记已读POST请求超时30s列表加载>3s保持骨架屏超时后提示"请求超时,请下拉刷新"+重试按钮
11. **H3 操作确认(强制)**:本页面无删除等危险操作,「全部标记已读」为低风险操作可不加确认
12. **H6 批量限制(建议)**:「全部标记已读」为批量操作,操作前检查未读数量,>50条时提示"未读消息较多,确认全部标记?"再执行
13. **H8 反馈(建议)**标记已读成功wx.showToast({icon:'success', title:'已全部标记已读'})消息加载失败wx.showToast({icon:'none', title:'消息加载失败'}); 无未读消息时提示"暂无未读消息"
#### 组件规范
| 元素 | 组件 | 配置参数 |
|------|------|----------|
| 分类Tab | `uni-segmented-control` | :current="currentTab":values="['全部','工单','审批','系统']" |
| 消息列表 | `uni-list` + `uni-list-item` | clickable=trueshowArrow=true |
| 未读红点 | `uni-badge` | :content="1"type="error"size="small" |
| 消息类型图标 | `uni-icons` | type="notification/chat/settings"size="22" |
| 全部标记已读 | `button` | type="default"size="mini" |
| 下拉刷新 | `uni-refresher` | @onRefresh回调threshold=45px |
| 上拉加载 | `uni-load-more` | :status="loadingStatus" |
#### 校验规则
| 字段 | 规则 | 错误提示 |
|------|------|----------|
| 消息列表 | 加载失败时允许重试 | "消息加载失败,请下拉刷新重试" |
| 分类Tab | 切换时重新请求数据 | — |
| 全部标记已读 | 须有未读消息才可操作 | "暂无未读消息" |
#### 响应式布局
- **适配机型**iPhone SE375px~ iPad mini768px消息列表宽度自适应
- **横竖屏适配策略**:竖屏垂直列表;横屏可双列展示消息卡片
- **手势交互规范**消息项可点击区域≥44pxTab切换区域≥44px支持下拉刷新
- **安全区域**:底部标记已读按钮适配底部安全区
### 页面5数据补录申请页
- **页面路径**`/pages/supplement/apply`
- **页面元素**
- 补录模块选择(报修/巡检/保洁/考勤)
- 补录原因(下拉选择:蓝牙失灵/定位失败/系统异常/其他)
- 补录说明多行文本最多200字
- 证明材料上传照片最多3张
- 补录数据表单(根据选择的模块动态渲染)
- **查询条件**:无
- **列表字段**:无
- **界面布局**
- 顶部:补录模块选择(下拉选择器)
- 中部:补录原因 + 说明 + 上传证明
- 下部:补录数据表单(动态)
- 底部:提交按钮
- **操作按钮**
| 按钮 | 权限 | 说明 |
|------|------|------|
| 提交申请 | — | 提交补录申请,等待主管审核 |
#### 交互流程要求
1. **页面加载流程**:页面加载时获取补录模块字典→渲染模块选择器
2. **查询/筛选交互流程**:无筛选操作
3. **表单填写与提交流程**:选择补录模块→渲染对应的动态表单→选择补录原因→填写补录说明→上传证明材料→点击提交申请→确认弹窗→提交成功提示"补录申请已提交,等待主管审核"
4. **弹窗/弹层交互流程**:提交前弹出确认弹窗"确认提交补录申请?";上传照片时可选择拍照或从相册选择
5. **行内操作流程**:选择补录模块→动态渲染对应表单字段;点击上传区域→调起相机/相册
6. **异常与错误处理**:网络异常提交失败提示"提交失败,请重试";图片上传失败提示重传;离线时数据暂存本地,联网后自动提交
7. **联动/级联交互**:补录模块选择与动态表单联动,不同模块显示不同字段
8. **权限控制交互表现**:所有登录用户均可提交补录申请;提交后状态为待审核,不可重复提交同一条
9. **H1 防重复请求(强制)**:提交申请按钮点击后:loading="true"且disabled表单提交请求pending期间禁用提交按钮和返回操作使用requestTask管理提交请求
10. **H2 超时配置(强制)**补录模块字典GET请求超时15s提交补录POST请求超时30s图片上传超时60s>3s wx.showLoading("正在提交..."); 超时后提示"请求超时,请重试"+重试按钮
11. **H3 操作确认(强制)**提交前必须弹出uni-popup确认弹窗"确认提交补录申请?提交后将等待主管审核",含后果说明
12. **H4 脏数据检测(强制)**页面进入时对表单初始值做深拷贝快照离开页面onUnload/onHide时检测表单是否有填写内容(isDirty),若有已填写内容但未提交则弹出提示"有未提交的内容,确定离开吗?"
13. **H6 批量限制(建议)**证明材料最多3张已在校验规则限制超出时提示"证明材料最多上传3张"
14. **H7 文件上传(建议)**证明材料使用wx.chooseMedia选择图片限制最多3张单张≤10MB格式白名单jpg/jpeg/png上传时显示进度回调(uni-file-picker内置);上传失败提示具体错误原因
15. **H8 反馈(建议)**提交成功wx.showToast({icon:'success', title:'补录申请已提交,等待主管审核'}); 提交失败wx.showToast({icon:'none', title:'提交失败原因'}可显示多文字); 网络异常wx.getNetworkType检测后提示+重试按钮
#### 组件规范
| 元素 | 组件 | 配置参数 |
|------|------|----------|
| 补录模块选择 | `uni-data-select` | v-model="module":localdata="moduleList" |
| 补录原因选择 | `uni-data-select` | v-model="reason":localdata="reasonList" |
| 补录说明 | `uni-easyinput` | type="textarea"maxlength="200":showWordLimit="true" |
| 证明材料上传 | `uni-file-picker` | limit="3"file-mediatype="image":auto-upload="true" |
| 动态表单 | `uni-forms` | :modelValue="formData":rules="rules" |
| 提交按钮 | `button` | type="primary":loading="submitting" |
| 确认弹窗 | `uni-popup` | type="dialog",确认提交/取消 |
#### 校验规则
| 字段 | 规则 | 错误提示 |
|------|------|----------|
| 补录模块 | 必选 | "请选择补录模块" |
| 补录原因 | 必选 | "请选择补录原因" |
| 补录说明 | 必填最多200字 | "请填写补录说明" / "补录说明不能超过200字" |
| 证明材料 | 最多3张 | "证明材料最多上传3张" |
| 动态表单 | 根据模块动态校验 | 根据具体字段提示 |
#### 响应式布局
- **适配机型**iPhone SE375px~ iPad mini768px表单宽度自适应
- **横竖屏适配策略**:竖屏垂直布局;横屏表单水平分组展示
- **手势交互规范**选择器可点击区域≥44px提交按钮≥44px上传区域≥44px
- **安全区域**:底部提交按钮适配底部安全区
### 页面6通讯录页
- **页面路径**`/pages/contacts/index`
- **页面元素**
- 搜索框
- 按班组分组显示联系人
- 联系人信息卡片
- **查询条件**
| 条件 | 类型 | 说明 |
|------|------|------|
| 搜索关键词 | 输入框 | 按姓名/手机号搜索 |
- **列表字段**
| 字段 | 说明 |
|------|------|
| 头像 | 联系人头像 |
| 姓名 | 联系人姓名 |
| 角色 | 联系人角色 |
| 手机号 | 脱敏显示,点击可拨打 |
| 班组 | 所属班组 |
- **界面布局**
- 顶部:搜索框
- 中部:按班组分组的联系人列表
- 班组标题(灰色背景)
- 联系人卡片(左头像 + 中姓名角色 + 右手机号图标)
- **操作按钮**
| 按钮 | 权限 | 说明 |
|------|------|------|
| 拨打电话 | — | 点击手机号直接拨打 |
#### 交互流程要求
1. **页面加载流程**:页面加载时获取联系人数据→按班组分组→渲染分组列表
2. **查询/筛选交互流程**:输入搜索关键词→实时过滤联系人(按姓名/手机号匹配)→无匹配结果显示"未找到联系人"
3. **表单填写与提交流程**:无表单提交操作
4. **弹窗/弹层交互流程**:无弹窗
5. **行内操作流程**点击手机号图标→调用wx.makePhoneCall拨打电话滚动列表浏览不同班组的联系人
6. **异常与错误处理**:联系人加载失败显示重试;拨号失败提示"拨号失败";离线时显示缓存数据
7. **联动/级联交互**:搜索关键词与列表过滤联动,输入即过滤
8. **权限控制交互表现**:所有登录用户均可访问;只能查看本公司/班组人员
9. **H1 防重复请求(强制)**:搜索输入做防抖处理(300ms)避免频繁过滤联系人列表加载请求pending期间不重复发拨打电话按钮点击后短暂disabled防止连击
10. **H2 超时配置(强制)**联系人列表GET请求超时15s>3s显示加载骨架屏超时后提示"加载超时,请重试"+重试按钮
11. **H6 批量限制(建议)**:本页面无批量操作
12. **H8 反馈(建议)**联系人加载成功静默渲染加载失败wx.showToast({icon:'none', title:'联系人加载失败'}); 拨号失败wx.showToast({icon:'none', title:'拨号失败,请重试'})
#### 组件规范
| 元素 | 组件 | 配置参数 |
|------|------|----------|
| 搜索框 | `uni-search-bar` | placeholder="搜索姓名/手机号"@confirm="search" |
| 班组分组 | `uni-section` | :title="groupName"type="line" |
| 联系人列表 | `uni-list` + `uni-list-item` | clickable=trueshowArrow=false |
| 头像 | `image` | mode="aspectFill"40px圆形 |
| 手机号图标 | `uni-icons` | type="phone"size="22"color="#007AFF" |
| 拨打电话 | `button` | @click="makePhoneCall"open-type="contact" |
#### 校验规则
| 字段 | 规则 | 错误提示 |
|------|------|----------|
| 搜索关键词 | 最少2个字符才触发搜索 | "请输入至少2个字符" |
| 手机号 | 脱敏显示中间4位 | — |
| 联系人列表 | 加载失败允许重试 | "加载失败,请重试" |
#### 响应式布局
- **适配机型**iPhone SE375px~ iPad mini768px联系人列表宽度自适应
- **横竖屏适配策略**:竖屏垂直列表;横屏可双列展示联系人卡片
- **手势交互规范**联系人项可点击区域≥44px拨打电话图标≥44px搜索框≥44px
- **安全区域**:底部适配底部安全区
### 页面7版本更新提示弹窗
- **页面路径**:弹窗组件(非独立页面)
- **页面元素**
- 新版本号
- 更新内容说明
- 更新/取消按钮(小版本)
- 强制更新按钮(大版本)
- **界面布局**
- 居中弹窗
- 顶部:版本号
- 中部:更新说明
- 底部:操作按钮
#### 交互流程要求
1. **页面加载流程**:应用启动时调用后台接口获取最新版本号+最低兼容版本→对比当前版本→小版本更新弹窗提示→大版本更新强制弹窗
2. **查询/筛选交互流程**:无筛选操作
3. **表单填写与提交流程**:无表单提交操作
4. **弹窗/弹层交互流程**:小版本更新→弹窗显示更新内容+更新/取消按钮,用户可关闭;大版本更新→弹窗仅显示更新按钮,不可关闭
5. **行内操作流程**:点击更新→跳转微信小程序更新页面;点击取消→关闭弹窗继续使用(小版本)
6. **异常与错误处理**版本检查接口失败静默处理不影响正常使用SDK依赖校验失败提示"应用需要更新"
7. **联动/级联交互**:版本号与更新内容联动展示
8. **权限控制交互表现**:所有用户均可见更新提示
9. **H1 防重复请求(强制)**更新按钮点击后loading态+disabled防止重复下载版本检查请求pending期间不重复发送使用requestTask管理版本检查接口
10. **H2 超时配置(强制)**版本检查GET接口超时15s>3s显示wx.showLoading("检查更新中..."); 接口超时或失败静默处理不影响正常使用
11. **H3 操作确认(强制)**:小版本更新弹窗需明确展示更新内容+更新/取消选项;大版本更新弹窗仅显示更新按钮不可关闭,强制用户更新
12. **H8 反馈(建议)**版本检查成功且有新版本正常展示弹窗已是最新版本无需提示SDK校验失败wx.showToast({icon:'none', title:'应用需要更新'})
#### 组件规范
| 元素 | 组件 | 配置参数 |
|------|------|----------|
| 弹窗容器 | `uni-popup` | type="center":mask-click="false"(大版本)/ :mask-click="true"(小版本) |
| 版本号 | `text` | font-size="18px"font-weight="bold" |
| 更新说明 | `scroll-view` | scroll-y=truemax-height="300rpx" |
| 更新按钮 | `button` | type="primary"@click="updateApp" |
| 取消按钮 | `button` | type="default"@click="closePopup"(仅小版本显示) |
#### 校验规则
| 字段 | 规则 | 错误提示 |
|------|------|----------|
| 版本号 | 必须为有效版本格式x.y.z | — |
| 更新内容 | 不能为空 | — |
| 最低兼容版本 | 必须为有效版本格式 | — |
#### 响应式布局
- **适配机型**iPhone SE375px~ iPad mini768px弹窗宽度max-width=300px居中
- **横竖屏适配策略**:竖屏居中弹窗;横屏弹窗宽度适当增大
- **手势交互规范**更新按钮≥44px取消按钮≥44px更新说明区域可滚动
- **安全区域**:弹窗内容不受安全区影响
## 需求追溯
| 功能点编号 | 功能名称 | 文档来源 | 后续服务 | 关联功能 |
|------------|----------|----------|----------|----------|
| MP-C-01 | 快捷登录 | 02-小程序端 §1 | 登录成功→加载权限集→渲染工作台 | 权限管理(角色分配) |
| MP-C-02 | 个人信息 | 02-小程序端 §1 | 修改手机号→更新sys_user | 通讯录 |
| MP-C-03 | 消息通知 | 02-小程序端 §1 | 点击消息→跳转业务详情 | 各业务模块(推送触发) |
| MP-C-04 | 数据补录申请 | 02-小程序端 §1 | 提交→触发补录审核→主管审批 | 各模块补录审核 |
| MP-C-05 | 版本更新提示 | 02-小程序端 §1 | 小版本→提示更新;大版本→强制更新 | 超管系统配置(版本管理) |
| MP-C-06 | 通讯录 | 02-小程序端 §1 | 点击拨打→调起手机拨号 | 组织架构(班组/人员) |
## 业务规则
1. **登录规则**03-业务流转逻辑-小程序端 §1
- 首次登录微信授权获取openid → 绑定手机号 → 系统匹配物业公司+人员信息
- 匹配成功:创建账号,进入工作台
- 匹配失败:提示"未找到关联信息,请联系管理员",无法使用
- 再次登录读取本地token → 有效则直接进入 → 无效则openid静默登录
2. **权限加载规则**01-模块划分.md §5.3
- 登录后获取角色及权限集(四级粒度)
- 根据权限动态渲染:可见菜单项、页面内可见功能点、功能点可用动作、数据范围(行级隔离)
3. **Token管理**06-项目技术要求.md §4.1
- 小程序端存本地Storage2小时过期
- Token失效自动使用openid静默登录刷新token
4. **版本更新规则**03-业务流转逻辑-小程序端 §10
- 启动时调用后台接口获取最新版本号 + 最低兼容版本
- 版本一致:正常使用
- 小版本更新(兼容):提示"发现新版本,是否更新?",用户可取消
- 大版本更新(不兼容):强制更新,引导前往微信更新小程序
- SDK依赖校验启动时校验蓝牙SDK、微信SDK等关键依赖版本
5. **消息通知规则**01-模块划分.md §7
- 通知场景:新工单、催单、审批、完工、异常上报等
- 通知方式:小程序推送
- 点击消息跳转对应业务详情
6. **数据补录规则**06-项目技术要求.md §4.5
- 补录数据必须标记 `is_supplement=true`
- 补录申请需主管审核Web+小程序均可)
- 补录日志单独记录
## 状态流转
### 登录状态流转
```
未登录 ──[微信授权]──▶ 获取openid ──[绑定手机号]──▶ 匹配人员信息
┌───匹配成功───┐ ┌───匹配失败───┐
│ │ │ │
创建账号 提示联系管理员
进入工作台 无法使用
```
### 补录申请状态流转
```
草稿 ──[提交]──▶ 待审核 ──[主管通过]──▶ 已通过(数据补录生效)
└──[主管驳回]──▶ 已驳回(通知申请人)
```