|
|
# 服务评价相关功能
|
|
|
|
|
|
> 模块编码:evaluation
|
|
|
> 端侧:微信小程序
|
|
|
> 关联文档:01-模块划分.md(v4.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=true,showArrow=true |
|
|
|
| 评价状态标签 | `uni-tag` | type: warning(待评价)/success(已评价) |
|
|
|
| 去评价按钮 | `button` | type="primary",size="mini" |
|
|
|
| 空状态 | `uni-section` | 插槽自定义空状态插图与文案 |
|
|
|
|
|
|
#### 校验规则
|
|
|
|
|
|
| 字段 | 规则 | 错误提示 |
|
|
|
|------|------|----------|
|
|
|
| 工单列表 | 加载失败允许重试 | "加载失败,请重试" |
|
|
|
| 评价时效 | 验收后7天内可评价 | "评价已超期" |
|
|
|
|
|
|
#### 响应式布局
|
|
|
|
|
|
- **适配机型**:iPhone SE(375px)~ iPad mini(768px),卡片宽度自适应
|
|
|
- **横竖屏适配策略**:竖屏单列卡片;横屏双列卡片展示
|
|
|
- **手势交互规范**:工单项可点击区域≥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 SE(375px)~ iPad mini(768px),表单宽度自适应
|
|
|
- **横竖屏适配策略**:竖屏垂直布局;横屏评分与输入并排
|
|
|
- **手势交互规范**:星级评分每颗星≥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 SE(375px)~ iPad mini(768px),卡片宽度自适应
|
|
|
- **横竖屏适配策略**:竖屏单列卡片;横屏双列卡片展示
|
|
|
- **手势交互规范**:评价项可点击区域≥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端可查看回复
|
|
|
```
|