|
|
# 通用功能
|
|
|
|
|
|
> 模块编码: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 SE(375px)~ iPad mini(768px),按钮宽度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 SE(375px)~ iPad mini(768px),功能入口网格宽度自适应
|
|
|
- **横竖屏适配策略**:竖屏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 SE(375px)~ iPad mini(768px),信息列表宽度自适应
|
|
|
- **横竖屏适配策略**:竖屏垂直布局;横屏信息列表水平分组展示
|
|
|
- **手势交互规范**:头像可点击区域≥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态+disabled;Tab切换请求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=true,showArrow=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 SE(375px)~ iPad mini(768px),消息列表宽度自适应
|
|
|
- **横竖屏适配策略**:竖屏垂直列表;横屏可双列展示消息卡片
|
|
|
- **手势交互规范**:消息项可点击区域≥44px;Tab切换区域≥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 SE(375px)~ iPad mini(768px),表单宽度自适应
|
|
|
- **横竖屏适配策略**:竖屏垂直布局;横屏表单水平分组展示
|
|
|
- **手势交互规范**:选择器可点击区域≥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=true,showArrow=false |
|
|
|
| 头像 | `image` | mode="aspectFill",40px圆形 |
|
|
|
| 手机号图标 | `uni-icons` | type="phone",size="22",color="#007AFF" |
|
|
|
| 拨打电话 | `button` | @click="makePhoneCall",open-type="contact" |
|
|
|
|
|
|
#### 校验规则
|
|
|
|
|
|
| 字段 | 规则 | 错误提示 |
|
|
|
|------|------|----------|
|
|
|
| 搜索关键词 | 最少2个字符才触发搜索 | "请输入至少2个字符" |
|
|
|
| 手机号 | 脱敏显示中间4位 | — |
|
|
|
| 联系人列表 | 加载失败允许重试 | "加载失败,请重试" |
|
|
|
|
|
|
#### 响应式布局
|
|
|
|
|
|
- **适配机型**:iPhone SE(375px)~ iPad mini(768px),联系人列表宽度自适应
|
|
|
- **横竖屏适配策略**:竖屏垂直列表;横屏可双列展示联系人卡片
|
|
|
- **手势交互规范**:联系人项可点击区域≥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=true,max-height="300rpx" |
|
|
|
| 更新按钮 | `button` | type="primary",@click="updateApp" |
|
|
|
| 取消按钮 | `button` | type="default",@click="closePopup"(仅小版本显示) |
|
|
|
|
|
|
#### 校验规则
|
|
|
|
|
|
| 字段 | 规则 | 错误提示 |
|
|
|
|------|------|----------|
|
|
|
| 版本号 | 必须为有效版本格式(x.y.z) | — |
|
|
|
| 更新内容 | 不能为空 | — |
|
|
|
| 最低兼容版本 | 必须为有效版本格式 | — |
|
|
|
|
|
|
#### 响应式布局
|
|
|
|
|
|
- **适配机型**:iPhone SE(375px)~ iPad mini(768px),弹窗宽度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):
|
|
|
- 小程序端存本地Storage,2小时过期
|
|
|
- Token失效自动使用openid静默登录,刷新token
|
|
|
|
|
|
4. **版本更新规则**(03-业务流转逻辑-小程序端 §10):
|
|
|
- 启动时调用后台接口获取最新版本号 + 最低兼容版本
|
|
|
- 版本一致:正常使用
|
|
|
- 小版本更新(兼容):提示"发现新版本,是否更新?",用户可取消
|
|
|
- 大版本更新(不兼容):强制更新,引导前往微信更新小程序
|
|
|
- SDK依赖校验:启动时校验蓝牙SDK、微信SDK等关键依赖版本
|
|
|
|
|
|
5. **消息通知规则**(01-模块划分.md §7):
|
|
|
- 通知场景:新工单、催单、审批、完工、异常上报等
|
|
|
- 通知方式:小程序推送
|
|
|
- 点击消息跳转对应业务详情
|
|
|
|
|
|
6. **数据补录规则**(06-项目技术要求.md §4.5):
|
|
|
- 补录数据必须标记 `is_supplement=true`
|
|
|
- 补录申请需主管审核(Web+小程序均可)
|
|
|
- 补录日志单独记录
|
|
|
|
|
|
## 状态流转
|
|
|
|
|
|
### 登录状态流转
|
|
|
|
|
|
```
|
|
|
未登录 ──[微信授权]──▶ 获取openid ──[绑定手机号]──▶ 匹配人员信息
|
|
|
│
|
|
|
┌───匹配成功───┐ ┌───匹配失败───┐
|
|
|
│ │ │ │
|
|
|
创建账号 提示联系管理员
|
|
|
进入工作台 无法使用
|
|
|
```
|
|
|
|
|
|
### 补录申请状态流转
|
|
|
|
|
|
```
|
|
|
草稿 ──[提交]──▶ 待审核 ──[主管通过]──▶ 已通过(数据补录生效)
|
|
|
└──[主管驳回]──▶ 已驳回(通知申请人)
|
|
|
```
|