# 服务评价 > 模块编码:evaluation > 端侧:Web专属(仅医院账号) > 关联文档:01-模块划分 §4.4 / 02-功能清单-医院 §4 / 03-业务流转逻辑-医院 §4 / 05-接口规范 §9.2 > 强制规范遵循 `07-前端界面开发规范.md` ## 功能概览 | 项目 | 说明 | |------|------| | 菜单名称 | 服务评价 | | 子菜单 | 发起评价、评价汇总查看、评价列表查看 | | 功能编号 | HO-EV-01 ~ HO-EV-03 | | 权限编码前缀 | evaluation:list:* | > **重要**:医院账号是评价的**发起方**,物业公司是评价的**接收和回复方**。 --- ## 页面1:发起评价页 **页面编号**:HO-EV-01-P01 **端侧归属**:Web专属 **页面路径**:/evaluation/create ### 界面布局 ``` ┌──────────────────────────────────────────────────────────────────┐ │ [面包屑] 服务评价 > 发起评价 │ ├──────────────────────────────────────────────────────────────────┤ │ ── 评价类型 ── │ │ ○ 报修服务 ○ 巡检服务 ○ 保洁服务 ○ 综合评价 │ ├──────────────────────────────────────────────────────────────────┤ │ ── 评价对象 ── │ │ 关联物业公司:[▼] │ │ 关联服务:[▼] (选择具体工单/巡检任务/保洁任务) │ ├──────────────────────────────────────────────────────────────────┤ │ ── 评分 ── │ │ ★★★★★ 5分-非常满意 │ │ ★★★★☆ 4分-满意 │ │ ★★★☆☆ 3分-一般 │ │ ★★☆☆☆ 2分-不满意 │ │ ★☆☆☆☆ 1分-非常不满意 │ ├──────────────────────────────────────────────────────────────────┤ │ ── 评价内容 ── │ │ 留言:[____________________________] │ │ 图片:[+点击上传] (≤5张) │ ├──────────────────────────────────────────────────────────────────┤ │ [取消] [提交评价] │ └──────────────────────────────────────────────────────────────────┘ ``` ### 表单字段 | 字段名 | 控件类型 | 必填 | 默认值 | 数据来源 | 校验规则 | |--------|----------|------|--------|----------|----------| | 评价类型 | 单选按钮 | 是 | — | 固定选项 | 报修/巡检/保洁/综合 | | 关联物业公司 | 下拉单选 | 是 | — | 本医院关联物业公司 | — | | 关联服务 | 下拉单选 | 条件 | — | 物业公司业务数据 | 非综合评价时必填 | | 评分 | 星级选择 | 是 | — | 固定选项 | 1~5分 | | 留言 | 多行文本 | 否 | — | 自填 | 最大500字 | | 图片 | 图片上传 | 否 | — | 上传 | ≤5张 | ### 通知触发 | 触发操作 | 通知对象 | 通知方式 | 消息模板 | 文档来源 | |----------|----------|----------|----------|----------| | 低评分(≤2分) | 物业主管+管理员 | 小程序推送 | 低评分评价通知 | 03-医院 §4.1 / 03-物业公司 §6 | | 新评价 | 物业公司 | — | 物业可查看评价 | — | ### 评分触发规则 | 评分 | 含义 | 物业端触发动作 | 文档来源 | |------|------|----------------|----------| | 5分 | 非常满意 | — | 03-医院 §4.1 | | 4分 | 满意 | — | 03-医院 §4.1 | | 3分 | 一般 | 主管关注 | 03-医院 §4.1 | | 2分 | 不满意 | 自动通知物业主管,要求回复 | 03-医院 §4.1 | | 1分 | 非常不满意 | 通知主管+管理员,24h内必须回复 | 03-医院 §4.1 | ### API端点 | 页面操作 | API路径 | 方法 | 说明 | |----------|---------|------|------| | 发起评价 | /api/v1/evaluations | POST | — | ### 交互流程要求 1. **页面加载流程**:进入页面 → 渲染空评价表单 → 加载下拉选项(物业公司列表、服务类型) 2. **查询/筛选交互流程**:不适用 3. **表单填写与提交流程**:选择评价类型 → 选择物业公司 → 选择关联服务(综合评价时跳过)→ 评分(1-5星)→ 填写留言(可选)→ 上传图片(可选,≤5张)→ 点击"提交评价" → 校验通过后调用API → 提交成功提示"评价提交成功",低评分自动触发通知 4. **弹窗/抽屉交互流程**:不适用(表单在页面内直接展示) 5. **行内操作流程**:选择评价类型后联动显示对应的服务选择项;评分选择后显示对应文字描述 6. **异常与错误处理**:必填项未填时表单校验不通过;提交失败显示el-message错误提示;图片上传失败提示"图片上传失败" 7. **联动/级联交互**:评价类型选择→关联物业公司选择→关联服务选择(级联);评价类型为"综合评价"时隐藏关联服务选择;物业公司选择后动态加载该物业的服务数据 8. **权限控制交互表现**:仅医院账号可发起评价;无评价权限时隐藏"提交评价"按钮 ### 组件规范 | 元素 | 组件 | 配置参数 | |------|------|----------| | 评价类型 | el-radio-group | v-for遍历4种类型,@change联动关联服务显示 | | 关联物业公司 | el-select | placeholder="请选择物业公司",filterable,@change加载服务数据 | | 关联服务 | el-select | placeholder="请选择关联服务",filterable,v-if="非综合评价" | | 评分 | el-rate | :max=5,show-text,:texts="['非常不满意','不满意','一般','满意','非常满意']",allow-half=false | | 留言 | el-input | type="textarea",:rows=4,maxlength=500,show-word-limit,placeholder="请输入评价内容" | | 图片上传 | el-upload | action="/api/v1/files/upload",:limit=5,accept=".jpg,.jpeg,.png",list-type="picture-card",:on-preview预览 | | 取消按钮 | el-button | type="default",@click返回上一页 | | 提交评价按钮 | el-button | type="primary",:loading提交中 | ### 校验规则 | 字段 | 规则 | 错误提示 | |------|------|----------| | 评价类型 | required | 请选择评价类型 | | 关联物业公司 | required | 请选择关联物业公司 | | 关联服务 | required(非综合评价时) | 请选择关联服务 | | 评分 | required | 请选择评分 | | 留言 | maxlength=500 | 评价内容不能超过500个字符 | | 图片 | ≤5张 | 图片数量不能超过5张 | ### 响应式布局 | 断点 | 布局调整 | |------|----------| | ≥1280px(桌面端) | 表单居中展示,宽度800px,评分与文字描述水平排列 | | 1024-1279px(Pad横屏) | 表单宽度90%,评分与文字描述水平排列 | | 768-1023px(Pad竖屏) | 表单宽度100%,评分与文字描述纵向堆叠,图片上传区全宽 | --- ## 页面2:评价汇总查看页 **页面编号**:HO-EV-02-P01 **端侧归属**:Web专属 **页面路径**:/evaluation/dashboard ### 界面布局 ``` ┌──────────────────────────────────────────────────────────────────┐ │ [面包屑] 服务评价 > 评价汇总 │ ├──────────────────────────────────────────────────────────────────┤ │ [时间选择] 本月 / 本季度 / 本年 / 自定义 │ ├──────────────────────────────────────────────────────────────────┤ │ [统计卡片区] │ │ ┌──────┐ ┌──────┐ ┌──────┐ │ │ │总评价│ │平均分│ │待回复│ │ │ │ 45 │ │ 4.2 │ │ 3 │ │ │ └──────┘ └──────┘ └──────┘ │ ├──────────────────────────────────────────────────────────────────┤ │ [图表区] │ │ ┌────────────────────────┐ ┌────────────────────────┐ │ │ │ 评分趋势(折线图) │ │ 各物业公司评分对比(柱状图)│ │ │ └────────────────────────┘ └────────────────────────┘ │ │ ┌────────────────────────┐ │ │ │ 星级分布(饼图) │ │ │ └────────────────────────┘ │ └──────────────────────────────────────────────────────────────────┘ ``` ### API端点 | 页面操作 | API路径 | 方法 | 说明 | |----------|---------|------|------| | 汇总数据 | /api/v1/evaluations/summary | GET | 本医院发起的评价汇总 | ### 交互流程要求 1. **页面加载流程**:进入页面 → 默认加载本月数据 → 调用评价汇总API → 渲染统计卡片 + 图表 2. **查询/筛选交互流程**:选择时间范围(本月/本季度/本年/自定义)→ 刷新汇总数据和图表 3. **表单填写与提交流程**:不适用(只读页面) 4. **弹窗/抽屉交互流程**:不适用 5. **行内操作流程**:图表支持交互(折线图hover显示具体数据,柱状图点击可查看物业公司详情) 6. **异常与错误处理**:API请求失败显示el-message错误提示;无数据时图表显示"暂无数据" 7. **联动/级联交互**:时间范围选择后所有统计卡片和图表同步刷新 8. **权限控制交互表现**:仅医院账号可查看本医院发起的评价汇总 ### 组件规范 | 元素 | 组件 | 配置参数 | |------|------|----------| | 时间选择 | el-radio-group | 本月/本季度/本年/自定义,@change刷新数据 | | 自定义日期 | el-date-picker | type="daterange",v-if="自定义" | | 统计卡片 | el-card | shadow="hover",v-for遍历3个指标,含数字和标签 | | 评分趋势图 | echarts | 折线图,:xAxis=时间,:yAxis=平均分,tooltip,dataZoom | | 各物业公司评分对比图 | echarts | 柱状图,:xAxis=物业公司,:yAxis=平均分,tooltip | | 星级分布图 | echarts | 饼图,:data=各星级占比,tooltip,legend | ### 校验规则 | 字段 | 规则 | 错误提示 | |------|------|----------| | 自定义日期范围 | 结束日期≥开始日期 | 结束日期不能早于开始日期 | ### 响应式布局 | 断点 | 布局调整 | |------|----------| | ≥1280px(桌面端) | 统计卡片横排3列,折线图与柱状图左右并排,饼图全宽居中 | | 1024-1279px(Pad横屏) | 统计卡片横排3列,折线图与柱状图上下排列,饼图全宽 | | 768-1023px(Pad竖屏) | 统计卡片纵向堆叠,所有图表纵向堆叠,ECharts图表宽度100%自适应,高度300px | --- ## 页面3:评价列表查看页 **页面编号**:HO-EV-03-P01 **端侧归属**:Web专属 **页面路径**:/evaluation/list ### 查询条件 | 字段名 | 控件类型 | 必填 | 默认值 | 说明 | |--------|----------|------|--------|------| | 评价类型 | 下拉单选 | 否 | 全部 | — | | 评分 | 下拉单选 | 否 | 全部 | — | | 物业公司 | 下拉单选 | 否 | 全部 | — | | 日期范围 | 日期范围 | 否 | — | — | ### 列表字段 | 序号 | 字段名 | 列宽 | 支持排序 | 说明 | |------|--------|------|----------|------| | 1 | 评价类型 | 90px | 否 | — | | 2 | 关联服务 | 150px | 否 | — | | 3 | 物业公司 | 120px | 否 | — | | 4 | 评分 | 80px | 是 | 星级展示 | | 5 | 评价内容 | 200px | 否 | — | | 6 | 评价时间 | 140px | 是 | 默认倒序 | | 7 | 回复状态 | 80px | 否 | 已回复/未回复 | | 8 | 物业回复 | 200px | 否 | — | | 9 | 操作 | 80px | — | 查看详情 | ### 操作按钮 | 按钮 | 权限编码 | 位置 | 显示条件 | 说明 | |------|----------|------|----------|------| | 查看详情 | evaluation:list:view | 行操作 | 始终 | 只读 | ### 角色差异化视图 | 角色 | 可见按钮 | 数据范围 | 备注 | |------|----------|----------|------| | 医院账号 | 查看 | 本医院发起的所有评价 | — | ### API端点 | 页面操作 | API路径 | 方法 | 说明 | |----------|---------|------|------| | 列表查询 | /api/v1/evaluations | GET | 本医院发起的评价 | | 详情 | /api/v1/evaluations/{id} | GET | 含物业回复 | ### 交互流程要求 1. **页面加载流程**:进入页面 → 调用评价列表API → 渲染列表,默认按评价时间倒序 2. **查询/筛选交互流程**:选择评价类型/评分/物业公司/日期范围 → 点击"查询"按钮 → 刷新列表 3. **表单填写与提交流程**:不适用(只读页面) 4. **弹窗/抽屉交互流程**:点击"查看详情" → 弹出评价详情弹窗(含评价内容、图片、物业回复) 5. **行内操作流程**:点击"查看详情"弹出详情弹窗;评分列显示星级;回复状态列标签化 6. **异常与错误处理**:API请求失败显示el-message错误提示;列表为空显示el-empty 7. **联动/级联交互**:筛选条件变化后分页重置为第1页 8. **权限控制交互表现**:医院账号仅查看本医院发起的评价 ### 前端硬性约束 > 以下为本页面必须遵守的前端交互与体验硬性约束(H=Hard Constraint)。 | 编号 | 约束项 | 级别 | 本页要求 | |------|--------|------|----------| | **H1** | 防重复提交 | **强制** | 列表查询/翻页期间显示loading状态并禁用查询/分页控件;切换分页时abort上一页未完成请求;"查看详情"弹窗防重复弹出 | | **H2** | 请求超时 | **强制** | GET列表请求设置15s超时;GET详情请求设置15s超时 | | **H3** | 操作确认 | 强制(不适用) | 本页为只读列表查看页面,无删除/停用等危险操作,不涉及 | | **H4** | 脏数据保护 | 强制(不适用) | 本页无编辑表单,不涉及脏数据检测 | | **H5** | 权限隔离表现 | 建议 | 仅展示本医院发起的评价数据;无`evaluation:list:view`权限时隐藏列表区域;不同角色可见的数据范围通过后端过滤体现 | | **H6** | 批量操作限制 | 建议(不适用) | 本页为只读列表页面,无批量操作,不涉及 | | **H7** | 文件上传约束 | 建议(不适用) | 本页无文件上传功能,不涉及 | | **H8** | 反馈规范 | 建议 | 成功提示自动2s后消失(silent刷新);错误提示需手动关闭(duration=0);详情弹窗内图片预览成功/失败分别处理反馈 | ### 组件规范 | 元素 | 组件 | 配置参数 | |------|------|----------| | 评价类型选择 | el-select | placeholder="请选择评价类型",clearable | | 评分选择 | el-select | placeholder="请选择评分",clearable,options: 1-5分 | | 物业公司选择 | el-select | placeholder="请选择物业公司",clearable,filterable | | 日期范围 | el-date-picker | type="daterange",start-placeholder="开始日期",end-placeholder="结束日期" | | 查询按钮 | el-button | type="primary",icon="Search" | | 重置按钮 | el-button | type="default",icon="Refresh" | | 评价列表 | el-table | stripe,border,:default-sort="{prop: 'evaluationTime', order: 'descending'}" | | 评分列 | el-rate | :max=5,disabled,show-score | | 回复状态列 | el-tag | :type根据状态配色(已回复=success,未回复=warning) | | 查看详情按钮 | el-button | type="default",size="small",link样式,icon="View" | | 评价详情弹窗 | el-dialog | title="评价详情",width="600px" | | 评价内容展示 | el-descriptions | :column=1,border | | 评价图片 | el-image | v-for遍历,:preview-src-list预览 | | 物业回复展示 | el-card | shadow="never",含回复内容和回复时间 | | 分页 | el-pagination | layout="total, sizes, prev, pager, next",:page-sizes="[10,20,50]" | ### 校验规则 | 字段 | 规则 | 错误提示 | |------|------|----------| | (无表单校验,仅查询条件) | — | — | ### 响应式布局 | 断点 | 布局调整 | |------|----------| | ≥1280px(桌面端) | 查询条件区单行排列,列表全字段展示,详情弹窗600px | | 1024-1279px(Pad横屏) | 查询条件区双行排列,隐藏"评价内容""物业回复"列(查看详情),详情弹窗80%宽度 | | 768-1023px(Pad竖屏) | 查询条件区纵向堆叠(仅保留评价类型/评分/物业公司),列表显示核心字段(评价类型/物业公司/评分/回复状态/操作),详情弹窗全屏宽度 | --- ## 需求追溯 | 功能点编号 | 功能名称 | 文档来源 | 后续服务 | 关联功能 | |------------|----------|----------|----------|----------| | HO-EV-01 | 发起评价 | 02-医院 §4 / 03-医院 §4.1 | 评价→通知物业公司 | 物业服务评价(查看/回复) | | HO-EV-02 | 评价汇总查看 | 02-医院 §4 / 03-医院 §4.2 | — | 物业评价汇总看板(数据来源) | | HO-EV-03 | 评价列表查看 | 02-医院 §4 / 03-医院 §4.2 | — | 物业评价列表(数据来源) | ## 业务规则 1. **医院是评价发起方**:医院账号对物业服务发起评分与留言,物业公司查看和回复(来源:01 §6.1 / 03-医院 §4) 2. **评价类型**:报修服务/巡检服务/保洁服务/综合评价(来源:03-医院 §4.1) 3. **关联服务**:评价时需选择具体的工单/巡检任务/保洁任务(综合评价除外)(来源:03-医院 §4.1) 4. **低评分通知**:2分自动通知物业主管,1分通知主管+管理员且24h内必须回复(来源:03-医院 §4.1) 5. **评价数据来源**:物业公司业务数据为只读引用,不可修改(来源:03-医院 §4.1)