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.

302 lines
14 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.

# 服务评价相关功能
> 模块编码evaluation
> 端侧:微信小程序
> 关联文档01-模块划分.mdv4.0、02-功能清单-小程序端.md§7、03-业务流转逻辑-小程序端.md§7、05-接口规范.md§9、06-项目技术要求.md
> 强制规范遵循 `07-前端界面开发规范.md`
## 功能概览
| 项目 | 说明 |
|------|------|
| 菜单名称 | 服务评价 |
| 子菜单 | 待评价列表 / 评分留言 / 历史评价 |
| 功能编号 | MP-EV-01 ~ MP-EV-03 |
| 权限编码 | evaluation:list:* |
## 页面清单
### 页面1待评价列表
- **页面路径**`/pages/evaluation/pending`
- **适用角色**:报修人
- **页面元素**
- 待评价工单列表
- 工单摘要信息
- 评价入口
- 提醒红点/数字标记
- **查询条件**:无(自动过滤待评价工单)
- **列表字段**
| 字段 | 类型 | 说明 |
|------|------|------|
| 工单编号 | 文本 | 报修工单号 |
| 报修类型 | 标签 | 报修分类 |
| 报修描述 | 文本 | 问题描述摘要 |
| 完工时间 | 时间 | 维修完成时间 |
| 维修人员 | 文本 | 处理人姓名 |
| 评价状态 | 标签 | 待评价/已评价 |
- **界面布局**
- 顶部:待评价数量统计
- 中部:工单卡片列表,每张卡片显示工单信息
- 底部:无操作栏
- **操作按钮**
- 「去评价」→ 跳转评分留言页
**触发条件**:工单完工验收后,系统自动推送评价通知给报修人
**数据来源**物业公司在Web/小程序端验收通过后触发评价事件ORDER_COMPLETED
**需求追溯**
| 功能点编号 | 功能名称 | 文档来源 | 后续服务 | 关联功能 |
|------------|----------|----------|----------|----------|
| MP-EV-01 | 待评价列表 | 02-小程序端 §7 | 评分留言 | 在线报修(验收完成后触发) |
#### 交互流程要求
1. **页面加载流程**:页面加载时获取待评价工单列表→显示骨架屏→渲染待评价数量和工单列表
2. **查询/筛选交互流程**:无手动筛选,自动过滤待评价工单
3. **表单填写与提交流程**:无表单提交操作
4. **弹窗/弹层交互流程**:无弹窗
5. **行内操作流程**:点击「去评价」→跳转评分留言页
6. **异常与错误处理**:列表加载失败显示重试;无待评价工单显示空状态
7. **联动/级联交互**:评价完成后列表自动移除已评价项
8. **权限控制交互表现**:仅报修人可访问;待评价工单自动过滤展示
#### 前端硬性约束
- **H1 防重复提交**:列表加载时防重复请求;使用 pending 请求去重机制;点击「去评价」跳转时防重复跳转
- **H2 超时控制**GET 请求超时 15s列表加载 >3s 时调用 `wx.showLoading({ title: '加载中...', mask: true })`
- **H3 二次确认**:无危险操作,无需二次确认
- **H4 脏数据检测**:本页面为列表查看页,无需表单脏数据检测
- **H7 文件上传**:无上传操作
- **H8 操作反馈**:加载成功无提示(静默刷新);加载失败调用 `wx.showToast({ title: '加载失败', icon: 'none' })` 并显示重试按钮;网络异常时提示"网络异常,请检查网络后重试"
- **通用约束**:使用 uni-ui 组件库;所有可点击元素触控区域 ≥44px去评价按钮 ≥44px
#### 组件规范
| 元素 | 组件 | 配置参数 |
|------|------|----------|
| 待评价数量 | `uni-badge` | :content="count"type="warning" |
| 工单列表 | `uni-list` + `uni-list-item` | clickable=trueshowArrow=true |
| 评价状态标签 | `uni-tag` | type: warning(待评价)/success(已评价) |
| 去评价按钮 | `button` | type="primary"size="mini" |
| 空状态 | `uni-section` | 插槽自定义空状态插图与文案 |
#### 校验规则
| 字段 | 规则 | 错误提示 |
|------|------|----------|
| 工单列表 | 加载失败允许重试 | "加载失败,请重试" |
| 评价时效 | 验收后7天内可评价 | "评价已超期" |
#### 响应式布局
- **适配机型**iPhone SE375px~ iPad mini768px卡片宽度自适应
- **横竖屏适配策略**:竖屏单列卡片;横屏双列卡片展示
- **手势交互规范**工单项可点击区域≥44px去评价按钮≥44px
- **安全区域**:底部适配底部安全区
---
### 页面2评分留言
- **页面路径**`/pages/evaluation/rate`
- **适用角色**:报修人
- **页面元素**
- 工单信息摘要卡片
- 五分制评分组件(⭐⭐⭐⭐⭐)
- 评分维度标签(响应速度/服务态度/维修质量/整体满意度)
- 文字留言输入框多行文本最多200字
- 图片上传区≤9张
- 匿名评价开关
- 提交按钮
- **查询条件**:无
- **列表字段**:无
- **界面布局**
- 顶部:工单信息摘要
- 中部:评分星星 + 维度标签 + 留言框 + 图片上传
- 底部:匿名开关 + 提交按钮
- **操作按钮**
- 「选择评分」→ 点击星星选择1~5分
- 「拍照」→ 调用相机拍照评价凭证
- 「提交评价」→ 提交评价权限evaluation:list:create
**评价规则**
- 五分制评分1分=非常不满意2分=不满意3分=一般4分=满意5分=非常满意
- 评分≤3分时触发低分评价事件LOW_SCORE_EVALUATION通知主管
- 提交后不可修改评价
- 评价数据写入评价模块物业公司Web端可查看和回复
**需求追溯**
| 功能点编号 | 功能名称 | 文档来源 | 后续服务 | 关联功能 |
|------------|----------|----------|----------|----------|
| MP-EV-02 | 评分留言 | 02-小程序端 §7 | 物业公司查看回复 | 服务评价Web端 |
#### 交互流程要求
1. **页面加载流程**:页面加载时获取工单信息→渲染工单摘要卡片
2. **查询/筛选交互流程**:无筛选操作
3. **表单填写与提交流程**:点击星星选择评分→可选点击评分维度标签→输入留言→可选上传图片→开关匿名评价→点击提交评价→确认弹窗→提交成功
4. **弹窗/弹层交互流程**:点击拍照弹出选择(拍照/相册);提交前弹出确认弹窗"确认提交评价?提交后不可修改"
5. **行内操作流程**:选择评分→输入留言→上传图片→设置匿名→提交
6. **异常与错误处理**图片上传失败提示重传提交失败显示重试评分≤3分触发低分预警事件
7. **联动/级联交互**:评分与提交按钮联动(必须选择评分);匿名开关与提交数据联动
8. **权限控制交互表现**:仅报修人可评价;评价不可修改
#### 前端硬性约束
- **H1 防重复提交**:提交按钮点击后立即 `loading=true` + `disabled=true` 防止重复提交;使用 pending 请求去重机制(提交请求未返回前禁用按钮);支持 `wx.requestTask.abort()` 取消前一次未完成的提交
- **H2 超时控制**GET 请求超时 15s、POST 请求超时 30s、文件上传超时 60s上传耗时 >3s 时调用 `wx.showLoading({ title: '上传中...', mask: true })`
- **H3 二次确认**:提交评价前必须调用 `wx.showModal({ title: '确认提交评价', content: '确认提交评价?提交后不可修改。', confirmText: '确认', cancelText: '取消' })` 进行二次确认,明确告知操作后果(不可修改)
- **H4 脏数据检测**:页面进入时对表单数据做 deep clone 快照(评分、留言、图片等);用户编辑过程中维护 isDirty 状态;`onUnload` / `onBackPress` 生命周期中检测到 isDirty 时弹出 `wx.showModal` 提示"未保存的评价内容将丢失,确定离开吗?",用户确认后才允许离开
- **H7 文件上传**:单张图片 ≤10MB超出时提示"图片大小不能超过10MB"并阻止上传;使用 `uni-file-picker``onProgress` 回调显示上传进度条;支持多图队列上传
- **H8 操作反馈**:提交成功调用 `wx.showToast({ title: '评价提交成功', icon: 'success' })`;网络异常时调用 `wx.showToast({ title: '网络异常,请检查网络后重试', icon: 'none' })` 并提供重试按钮低分预警≤3分提示"已通知主管关注"
- **通用约束**:使用 uni-ui 组件库;星级评分每颗星 ≥44px提交按钮 ≥44px
#### 组件规范
| 元素 | 组件 | 配置参数 |
|------|------|----------|
| 工单信息摘要 | `uni-card` | mode="basic",只读展示 |
| 星级评分 | `uni-rate` | :max="5":value="score":size="28" |
| 评分维度标签 | `uni-data-checkbox` | :localdata="dimensionList"multiple=true |
| 留言输入 | `uni-easyinput` | type="textarea"maxlength="200":showWordLimit="true" |
| 图片上传 | `uni-file-picker` | limit="9"file-mediatype="image" |
| 匿名开关 | `switch` | @change="onAnonymousChange" |
| 提交按钮 | `button` | type="primary":loading="submitting" |
| 确认弹窗 | `uni-popup` | type="dialog" |
#### 校验规则
| 字段 | 规则 | 错误提示 |
|------|------|----------|
| 评分 | 必选1~5分 | "请选择评分" |
| 留言 | 最多200字 | "留言不能超过200字" |
| 图片 | 最多9张 | "评价图片最多上传9张" |
| 评价时效 | 验收后7天内 | "评价已超期" |
#### 响应式布局
- **适配机型**iPhone SE375px~ iPad mini768px表单宽度自适应
- **横竖屏适配策略**:竖屏垂直布局;横屏评分与输入并排
- **手势交互规范**星级评分每颗星≥44px提交按钮≥44px
- **安全区域**:底部提交按钮适配底部安全区
---
### 页面3历史评价
- **页面路径**`/pages/evaluation/history`
- **适用角色**:报修人
- **页面元素**
- 历史评价列表
- 评价详情查看
- 物业回复内容展示
- **查询条件**
- 评分筛选(全部/好评/中评/差评)
- 时间筛选
- **列表字段**
| 字段 | 类型 | 说明 |
|------|------|------|
| 工单编号 | 文本 | 报修工单号 |
| 评分 | 数字 | 1~5分 |
| 评价内容 | 文本 | 留言摘要 |
| 评价时间 | 时间 | 提交评价时间 |
| 回复状态 | 标签 | 已回复/未回复 |
- **界面布局**
- 顶部:筛选条件 + 统计信息
- 中部:评价卡片列表,每张卡片显示评分、留言、回复
- 底部:无操作栏
- **操作按钮**
- 「查看详情」→ 查看评价详情及物业回复
**需求追溯**
| 功能点编号 | 功能名称 | 文档来源 | 后续服务 | 关联功能 |
|------------|----------|----------|----------|----------|
| MP-EV-03 | 历史评价 | 02-小程序端 §7 | 无 | 服务评价Web端 |
#### 交互流程要求
1. **页面加载流程**:页面加载时获取历史评价列表→渲染筛选条件和评价卡片
2. **查询/筛选交互流程**:评分筛选(全部/好评/中评/差评)→过滤列表;时间筛选→过滤列表;下拉刷新
3. **表单填写与提交流程**:无表单提交操作
4. **弹窗/弹层交互流程**:点击查看详情→弹出评价详情弹窗(含物业回复内容)
5. **行内操作流程**:点击查看详情→查看评价详情及物业回复
6. **异常与错误处理**:列表加载失败显示重试;无评价显示空状态
7. **联动/级联交互**:筛选条件与列表数据联动
8. **权限控制交互表现**:仅报修人可查看自己的历史评价
#### 前端硬性约束
- **H1 防重复提交**:评分筛选/时间筛选切换时防重复请求;列表加载期间禁用筛选操作;使用 pending 请求去重下拉刷新需防重复触发refreshing 标志位)
- **H2 超时控制**GET 请求超时 15s列表加载 >3s 时调用 `wx.showLoading({ title: '加载中...', mask: true })`
- **H3 二次确认**:无危险操作,无需二次确认
- **H4 脏数据检测**:本页面为列表查看页,无需表单脏数据检测
- **H7 文件上传**:无上传操作
- **H8 操作反馈**:加载成功无提示(静默刷新);加载失败调用 `wx.showToast({ title: '加载失败', icon: 'none' })` 并显示重试按钮;网络异常时提示"网络异常,请检查网络后重试"
- **通用约束**:使用 uni-ui 组件库;所有可点击元素触控区域 ≥44px下拉刷新需防重复触发refreshing 标志位)
#### 组件规范
| 元素 | 组件 | 配置参数 |
|------|------|----------|
| 评分筛选 | `uni-segmented-control` | :values="['全部','好评','中评','差评']" |
| 时间筛选 | `uni-datetime-picker` | type="date"fields="month" |
| 评价列表 | `uni-list` + `uni-list-item` | clickable=true |
| 评分显示 | `uni-rate` | :size="14":readonly="true" |
| 回复状态标签 | `uni-tag` | type: success(已回复)/warning(未回复) |
| 详情弹窗 | `uni-popup` | type="bottom",展示评价详情+物业回复 |
| 下拉刷新 | `uni-refresher` | @onRefresh回调 |
#### 校验规则
| 字段 | 规则 | 错误提示 |
|------|------|----------|
| 评价列表 | 加载失败允许重试 | "加载失败,请重试" |
#### 响应式布局
- **适配机型**iPhone SE375px~ iPad mini768px卡片宽度自适应
- **横竖屏适配策略**:竖屏单列卡片;横屏双列卡片展示
- **手势交互规范**评价项可点击区域≥44px
- **安全区域**:底部适配底部安全区
---
## 业务规则
1. **评价触发**工单完工验收通过后自动触发评价通知事件ORDER_COMPLETED
2. **评价时效**验收通过后7天内可评价超期不可评价
3. **低分预警**评分≤3分触发 LOW_SCORE_EVALUATION 事件,通知主管
4. **评价匿名**:支持匿名评价,物业公司无法看到评价人信息
5. **评价不可修改**:提交后不可修改评价内容
6. **物业回复**物业公司可在Web端查看评价并回复回复内容在小程序端展示
7. **图片水印**:评价图片自动添加时间水印
8. **图片数量**单次评价最多上传9张图片
9. **评分维度**:支持多维度评分(响应速度/服务态度/维修质量/整体满意度)
## 状态流转
### 评价状态
```
待评价 → 已评价(显示物业回复)
超期未评价 → 关闭评价入口
```
### 事件触发
```
工单验收通过 → ORDER_COMPLETED 事件 → 触发评价通知
评价提交≤3分→ LOW_SCORE_EVALUATION 事件 → 通知主管
评价提交 → 评价数据写入评价模块 → 物业公司Web端可查看回复
```