# 服务评价相关功能 > 模块编码: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端可查看回复 ```