43 KiB
报修相关功能
模块编码:repair 端侧:小程序 关联文档:01-模块划分.md §3.1、02-功能清单-小程序端.md §2、03-业务流转逻辑-小程序端.md §2、05-接口规范.md §9.2、06-项目技术要求.md §4.4 强制规范遵循
07-前端界面开发规范.md
功能概览
| 项目 | 说明 |
|---|---|
| 菜单名称 | 报修相关功能 |
| 子菜单 | 扫码注册、一键报修、我的工单、催单、维修接单、维修完工、延期申请、延期审批、协助维修申请、工单分配、工单验收、评价 |
| 功能编号 | MP-R-01 ~ MP-R-12 |
| 权限编码 | repair:list:* / repair:detail:approve 等 |
页面清单
页面1:扫码注册页
- 页面路径:
/pages/repair/scan-register - 页面元素:
- 扫码区域(调用wx.scanCode)
- 项目信息展示(扫码后显示)
- 确认绑定按钮
- 界面布局:
- 顶部:扫码提示文字
- 中部:扫码框(居中,带边框提示)
- 底部:扫码结果展示 + 确认绑定按钮
- 操作按钮:
按钮 权限 说明 扫描二维码 — 调用wx.scanCode扫描项目二维码 确认绑定 — 绑定身份到对应项目
交互流程要求
- 页面加载流程:页面加载时自动调起wx.scanCode扫码→扫码成功后显示项目信息→等待用户确认绑定
- 查询/筛选交互流程:无筛选操作
- 表单填写与提交流程:点击扫描二维码→调用wx.scanCode→获取项目编码→查询项目信息→展示项目名称、地址→点击确认绑定→绑定成功跳转工作台
- 弹窗/弹层交互流程:扫码失败弹出提示"二维码无效,请重新扫描";绑定成功弹出成功提示
- 行内操作流程:点击扫码区域→调起扫码;点击确认绑定→提交绑定请求
- 异常与错误处理:扫码超时提示"扫码超时,请重试";二维码无效提示重扫;网络异常显示重试;相机权限被拒提示"请开启相机权限"
- 联动/级联交互:扫码结果与项目信息联动展示
- 权限控制交互表现:所有用户均可扫码注册;已绑定用户不显示此页面
组件规范
| 元素 | 组件 | 配置参数 |
|---|---|---|
| 扫码区域 | button |
@click="scanCode",type="primary",text="扫描二维码" |
| 项目信息展示 | uni-card |
mode="basic",展示项目名称、地址 |
| 确认绑定 | button |
type="primary",:loading="binding" |
| 提示弹窗 | uni-popup |
type="dialog",确认/取消 |
校验规则
| 字段 | 规则 | 错误提示 |
|---|---|---|
| 二维码 | 必须为系统有效项目二维码 | "二维码无效,请重新扫描" |
| 项目信息 | 扫码后必须返回有效项目数据 | "未找到项目信息" |
| 绑定状态 | 未绑定才可操作 | "您已绑定项目" |
响应式布局
- 适配机型:iPhone SE(375px)~ iPad mini(768px),扫码区域居中
- 横竖屏适配策略:竖屏垂直布局;横屏扫码区域与信息并排展示
- 手势交互规范:扫码按钮≥44px;确认绑定按钮≥44px
- 安全区域:底部按钮适配底部安全区
页面2:一键报修页
- 页面路径:
/pages/repair/create - 页面元素:
- 报修类型选择(下拉,数据来源:物业公司Web端配置的报修类型字典)
- 报修描述(多行文本,最多500字)
- 照片上传区域(最多9张,含水印时间定位)
- 报修位置(可选,手动选择或自动定位)
- 联系方式(默认当前用户手机号)
- 界面布局:
- 顶部:报修类型选择器
- 中部:报修描述输入框
- 下部:照片上传网格(3列,+号占位)
- 底部:提交按钮
- 操作按钮:
按钮 权限 说明 拍照上传 — 调用相机,自动添加水印(时间+位置) 从相册选择 — 选择相册照片,自动添加水印 提交报修 — 生成工单,等待分配
交互流程要求
-
页面加载流程:页面加载时获取报修类型字典→渲染类型选择器;获取当前位置信息预填位置
-
查询/筛选交互流程:无筛选操作
-
表单填写与提交流程:选择报修类型→输入报修描述→拍照/选择照片(自动添加时间+位置水印)→选择/确认报修位置→确认联系方式→点击提交报修→确认弹窗→提交成功跳转工单列表
-
弹窗/弹层交互流程:点击拍照/相册弹出选择弹窗(拍照/从相册选择);提交前弹出确认弹窗
-
行内操作流程:点击照片上传区域→调起相机/相册→选择照片→自动添加水印→显示缩略图;点击位置→打开地图选择位置
-
异常与错误处理:定位失败提示手动选择位置;图片上传失败提示重传;提交失败显示重试;离线时数据暂存本地草稿
-
联动/级联交互:报修类型与描述提示联动;位置自动获取与手动选择联动
-
权限控制交互表现:所有登录用户均可报修;相机/定位权限被拒时引导开启
-
H1 防重复请求(强制):提交报修按钮点击后:loading="submitting"且disabled;表单提交请求pending期间禁用提交和返回操作;使用requestTask管理提交请求生命周期
-
H2 超时配置(强制):报修类型字典GET请求超时15s;提交报修POST请求超时30s;图片上传超时60s;定位接口超时10s;>3s wx.showLoading("正在提交..."); 超时后提示"请求超时,请重试"+重试按钮
-
H3 操作确认(强制):提交前必须弹出uni-popup确认弹窗"确认提交报修单?提交后将生成工单等待分配",含后果说明
-
H4 脏数据检测(强制):进入页面对空表单做深拷贝快照;填写过程中任何字段变更标记isDirty=true;页面卸载/onBackPress时检测isDirty,若有已填写内容(描述/照片等)弹出uni-popup确认"有未提交的报修内容,确定离开吗?"
-
H7 文件上传(建议):照片上传使用wx.chooseMedia({count:9, mediaType:['image']})选择,单张≤10MB,格式白名单jpg/jpeg/png;自动添加水印(时间+位置)后再上传;上传过程显示进度回调(uni-file-picker);上传失败提示具体原因支持重传
-
H8 反馈(建议):报修提交成功wx.showToast({icon:'success', title:'报修成功'}); 提交失败wx.showToast({icon:'none', title:'提交失败原因'})可显示多文字;定位失败wx.showToast({icon:'none', title:'定位失败,请手动选择位置'}); 离线模式提示数据已存草稿
组件规范
| 元素 | 组件 | 配置参数 |
|---|---|---|
| 报修类型选择 | uni-data-select |
v-model="type",:localdata="typeList" |
| 报修描述 | uni-easyinput |
type="textarea",maxlength="500",:showWordLimit="true" |
| 照片上传 | uni-file-picker |
limit="9",file-mediatype="image",:auto-upload="true" |
| 报修位置 | uni-list-item |
:showArrow="true",@click="chooseLocation" |
| 联系方式 | uni-easyinput |
type="number",maxlength="11" |
| 提交按钮 | button |
type="primary",:loading="submitting" |
| 确认弹窗 | uni-popup |
type="dialog" |
| 位置选择 | map + button |
调用wx.chooseLocation |
校验规则
| 字段 | 规则 | 错误提示 |
|---|---|---|
| 报修类型 | 必选 | "请选择报修类型" |
| 报修描述 | 必填,最多500字 | "请填写报修描述" / "描述不能超过500字" |
| 照片 | 最多9张,必须含水印 | "照片最多上传9张" |
| 联系方式 | 必填,11位手机号 | "请输入联系方式" / "手机号格式不正确" |
响应式布局
- 适配机型:iPhone SE(375px)~ iPad mini(768px),表单宽度自适应
- 横竖屏适配策略:竖屏垂直布局;横屏照片上传区3~4列网格
- 手势交互规范:照片上传区域≥44px;提交按钮≥44px;位置选择≥44px
- 安全区域:底部提交按钮适配底部安全区
页面3:我的工单列表
- 页面路径:
/pages/repair/my-orders - 页面元素:
- 状态Tab筛选(全部/待分配/处理中/待验收/已完成/已关闭)
- 工单列表
- 下拉刷新 + 上拉加载
- 查询条件:
条件 类型 说明 状态筛选 Tab 全部/待分配/处理中/待验收/已完成/已关闭 关键词 搜索框 按工单号/描述搜索 - 列表字段:
字段 说明 工单编号 如 WO20260416001 报修类型 图标+文字 报修描述 截断显示 报修时间 相对时间 工单状态 状态标签(不同颜色) 维修人员 已分配时显示 催单标记 已催单显示红色标记 - 界面布局:
- 顶部:状态Tab + 搜索框
- 中部:工单卡片列表
- 卡片顶部:工单编号 + 状态标签
- 卡片中部:报修类型 + 描述
- 卡片底部:时间 + 维修人员 + 催单标记
- 底部:无更多数据提示
- 操作按钮:
按钮 权限 说明 查看详情 — 跳转工单详情页 催单 repair:list:view 处理中工单可催单
交互流程要求
-
页面加载流程:页面加载时请求工单列表→显示骨架屏→渲染Tab和工单卡片;默认显示"全部"状态
-
查询/筛选交互流程:点击状态Tab切换筛选条件→重新加载列表;输入关键词搜索工单号/描述;下拉刷新重新加载;上拉加载更多
-
表单填写与提交流程:无表单提交操作
-
弹窗/弹层交互流程:催单时弹出确认弹窗"确认催单?催单后维修人员和主管将收到通知"
-
行内操作流程:点击工单卡片→跳转工单详情;点击催单→确认催单→发送催单通知
-
异常与错误处理:列表加载失败显示重试;催单超过每日3次限制提示"今日已催单3次,请明日再试";网络异常显示错误提示
-
联动/级联交互:Tab切换与列表数据联动;催单后催单标记实时更新
-
权限控制交互表现:催单按钮仅处理中工单显示;无repair:list:view权限时隐藏催单按钮
-
H1 防重复请求(强制):催单按钮点击后loading态+disabled;Tab切换请求pending时不重复发列表请求;搜索输入防抖300ms;上拉加载更多时分页用requestTask管理,新请求abort前一次;下拉刷新abort进行中请求
-
H2 超时配置(强制):工单列表GET请求超时15s;催单POST请求超时30s;>3s保持骨架屏;超时后提示"请求超时,请下拉刷新"+重试按钮
-
H3 操作确认(强制):催单操作必须弹出uni-popup确认弹窗"确认催单?催单后维修人员和主管将收到通知(今日剩余X次)",含后果说明和次数限制提示
-
H6 批量限制(建议):催单每天最多3次(服务端校验),前端达到限制时直接禁用催单按钮并提示"今日已催单3次,请明日再试"
-
H8 反馈(建议):催单成功wx.showToast({icon:'success', title:'催单成功'}); 列表加载失败wx.showToast({icon:'none', title:'加载失败,请下拉刷新'}); 催单次数不足wx.showToast({icon:'none', title:'今日已催单3次,请明日再试'})
组件规范
| 元素 | 组件 | 配置参数 |
|---|---|---|
| 状态Tab | uni-segmented-control |
:values="['全部','待分配','处理中','待验收','已完成','已关闭']" |
| 搜索框 | uni-search-bar |
placeholder="搜索工单号/描述" |
| 工单列表 | uni-list + uni-list-item |
clickable=true |
| 状态标签 | uni-tag |
type: success(已完成)/warning(处理中)/error(异常)/default(待分配) |
| 催单标记 | uni-badge |
content="催",type="error" |
| 下拉刷新 | uni-refresher |
@onRefresh回调 |
| 上拉加载 | uni-load-more |
:status="loadingStatus" |
| 确认弹窗 | uni-popup |
type="dialog" |
校验规则
| 字段 | 规则 | 错误提示 |
|---|---|---|
| 工单列表 | 加载失败允许重试 | "加载失败,请下拉刷新" |
| 搜索关键词 | 最少2个字符 | "请输入至少2个字符" |
| 催单 | 每天最多3次 | "今日已催单3次,请明日再试" |
响应式布局
- 适配机型:iPhone SE(375px)~ iPad mini(768px),卡片宽度自适应,padding 16px
- 横竖屏适配策略:竖屏单列卡片;横屏双列卡片展示
- 手势交互规范:工单卡片可点击区域≥44px;催单按钮≥44px;支持下拉刷新和上拉加载
- 安全区域:底部列表适配底部安全区
页面4:待处理工单列表(维修人员)
- 页面路径:
/pages/repair/pending-orders - 页面元素:
- 待接单工单列表
- 下拉刷新 + 上拉加载
- 查询条件:无(自动加载分配给当前人员的待处理工单)
- 列表字段:
字段 说明 工单编号 如 WO20260416001 报修类型 图标+文字 报修描述 截断显示 报修时间 相对时间 优先级 高/中/低,不同颜色标记 报修照片缩略图 第一张照片 - 界面布局:
- 顶部:待处理工单数量统计
- 中部:工单卡片列表
- 卡片顶部:工单编号 + 优先级标签
- 卡片中部:报修类型 + 描述
- 卡片底部:报修时间 + 接单按钮
- 底部:无更多数据提示
- 操作按钮:
按钮 权限 说明 接单 repair:list:update 接单后工单状态变为"处理中"
交互流程要求
-
页面加载流程:页面加载时请求分配给当前维修人员的待处理工单→显示骨架屏→渲染待处理数量统计和工单列表
-
查询/筛选交互流程:无手动筛选,自动加载当前人员的待处理工单;下拉刷新重新加载
-
表单填写与提交流程:无表单提交操作
-
弹窗/弹层交互流程:点击接单→弹出确认弹窗"确认接单?"
-
行内操作流程:点击工单卡片→查看工单详情;点击接单→确认后工单状态变为处理中→通知报修人
-
异常与错误处理:列表加载失败显示重试;接单失败提示错误信息;工单已被他人接单提示"工单已被接单"
-
联动/级联交互:接单成功后列表数据更新,待处理数量减少
-
权限控制交互表现:仅维修人员角色可见此页面;无repair:list:update权限时接单按钮置灰
-
H1 防重复请求(强制):接单按钮点击后loading态+disabled;列表加载pending不重复发;上拉分页用requestTask管理,新请求abort旧请求;下拉刷新abort进行中请求
-
H2 超时配置(强制):待处理工单列表GET请求超时15s;接单POST请求超时30s;>3s保持骨架屏;超时后提示"请求超时,请下拉刷新"+重试按钮
-
H3 操作确认(强制):接单操作必须弹出uni-popup确认弹窗"确认接单?接单后请在规定时间内完成维修",含后果说明
-
H6 批量限制(建议):本页面主要为单个接单操作,无批量操作场景
-
H8 反馈(建议):接单成功wx.showToast({icon:'success', title:'接单成功'}); 工单已被他人接单wx.showToast({icon:'none', title:'工单已被接单,请刷新列表'}); 列表加载失败wx.showToast({icon:'none', title:'加载失败,请重试'})
组件规范
| 元素 | 组件 | 配置参数 |
|---|---|---|
| 待处理数量 | uni-badge |
:content="count",type="warning",size="large" |
| 工单列表 | uni-list + uni-list-item |
clickable=true |
| 优先级标签 | uni-tag |
type: error(高)/warning(中)/default(低) |
| 照片缩略图 | image |
mode="aspectFill",60px×60px圆角 |
| 接单按钮 | button |
type="primary",size="mini" |
| 下拉刷新 | uni-refresher |
@onRefresh回调 |
| 确认弹窗 | uni-popup |
type="dialog" |
校验规则
| 字段 | 规则 | 错误提示 |
|---|---|---|
| 工单列表 | 加载失败允许重试 | "加载失败,请下拉刷新" |
| 接单操作 | 工单必须为待分配/已分配状态 | "工单状态已变更,请刷新" |
响应式布局
- 适配机型:iPhone SE(375px)~ iPad mini(768px),卡片宽度自适应
- 横竖屏适配策略:竖屏单列卡片;横屏双列卡片展示
- 手势交互规范:工单卡片可点击区域≥44px;接单按钮≥44px;支持下拉刷新
- 安全区域:底部列表适配底部安全区
页面5:维修完工页
- 页面路径:
/pages/repair/complete - 页面元素:
- 工单基本信息(只读)
- 维修说明(多行文本,必填)
- 维修后照片上传(最多9张,含水印时间定位)
- 材料使用记录(可选)
- 界面布局:
- 顶部:工单信息摘要
- 中部:维修说明输入框
- 下部:照片上传网格
- 底部:提交完工按钮
- 操作按钮:
按钮 权限 说明 拍照上传 — 拍摄维修后照片 提交完工 repair:list:update 工单状态变为"待验收"
交互流程要求
- 页面加载流程:页面加载时获取工单基本信息→渲染工单信息摘要
- 查询/筛选交互流程:无筛选操作
- 表单填写与提交流程:输入维修说明→拍照上传维修后照片(自动添加水印)→可选填材料使用记录→点击提交完工→确认弹窗→提交成功跳转工单列表
- 弹窗/弹层交互流程:点击拍照弹出选择弹窗(拍照/从相册选择);提交前弹出确认弹窗
- 行内操作流程:点击照片上传区域→调起相机/相册;点击提交完工→确认提交
- 异常与错误处理:图片上传失败提示重传;提交失败显示重试;离线时数据暂存本地草稿
- 联动/级联交互:照片上传数量与限制联动(最多9张)
- 权限控制交互表现:仅维修人员可操作;无repair:list:update权限时提交按钮置灰
组件规范
| 元素 | 组件 | 配置参数 |
|---|---|---|
| 工单信息摘要 | uni-card |
mode="basic",只读展示 |
| 维修说明 | uni-easyinput |
type="textarea",maxlength="500",:showWordLimit="true" |
| 照片上传 | uni-file-picker |
limit="9",file-mediatype="image",:auto-upload="true" |
| 材料使用记录 | uni-list + uni-list-item |
可动态添加行 |
| 提交按钮 | button |
type="primary",:loading="submitting" |
| 确认弹窗 | uni-popup |
type="dialog" |
校验规则
| 字段 | 规则 | 错误提示 |
|---|---|---|
| 维修说明 | 必填,最多500字 | "请填写维修说明" / "维修说明不能超过500字" |
| 维修后照片 | 至少1张 | "请上传维修后照片" |
| 照片水印 | 自动添加时间+位置水印 | — |
响应式布局
- 适配机型:iPhone SE(375px)~ iPad mini(768px),表单宽度自适应
- 横竖屏适配策略:竖屏垂直布局;横屏照片区3~4列网格
- 手势交互规范:照片上传区域≥44px;提交按钮≥44px
- 安全区域:底部提交按钮适配底部安全区
页面6:延期申请页
- 页面路径:
/pages/repair/extension-apply - 页面元素:
- 工单基本信息(只读)
- 延期原因(多行文本,必填)
- 预计完成时间(日期时间选择器,必填)
- 界面布局:
- 顶部:工单信息摘要
- 中部:延期原因输入 + 预计完成时间
- 底部:提交申请按钮
- 操作按钮:
按钮 权限 说明 提交延期申请 repair:list:update 工单状态变为"延期中",等待主管审批
交互流程要求
- 页面加载流程:页面加载时获取工单基本信息→渲染工单信息摘要
- 查询/筛选交互流程:无筛选操作
- 表单填写与提交流程:输入延期原因→选择预计完成时间→点击提交延期申请→确认弹窗→提交成功跳转工单详情
- 弹窗/弹层交互流程:提交前弹出确认弹窗"确认申请延期?"
- 行内操作流程:点击预计完成时间→弹出日期时间选择器→选择时间;点击提交延期申请→确认提交
- 异常与错误处理:提交失败显示重试;预计完成时间不能早于当前时间
- 联动/级联交互:延期申请提交后工单状态变为"延期中"
- 权限控制交互表现:仅维修人员可操作;无repair:list:update权限时提交按钮置灰
组件规范
| 元素 | 组件 | 配置参数 |
|---|---|---|
| 工单信息摘要 | uni-card |
mode="basic",只读展示 |
| 延期原因 | uni-easyinput |
type="textarea",maxlength="500",:showWordLimit="true" |
| 预计完成时间 | uni-datetime-picker |
type="datetime",:start="minDate" |
| 提交按钮 | button |
type="primary",:loading="submitting" |
| 确认弹窗 | uni-popup |
type="dialog" |
校验规则
| 字段 | 规则 | 错误提示 |
|---|---|---|
| 延期原因 | 必填,最多500字 | "请填写延期原因" / "延期原因不能超过500字" |
| 预计完成时间 | 必选,必须晚于当前时间 | "请选择预计完成时间" / "预计完成时间不能早于当前时间" |
响应式布局
- 适配机型:iPhone SE(375px)~ iPad mini(768px),表单宽度自适应
- 横竖屏适配策略:竖屏垂直布局;横屏表单水平分组展示
- 手势交互规范:时间选择器≥44px;提交按钮≥44px
- 安全区域:底部提交按钮适配底部安全区
页面7:延期审批页(主管)
- 页面路径:
/pages/repair/extension-approve - 页面元素:
- 工单基本信息(只读)
- 延期申请详情(申请人、原因、预计完成时间)
- 审批意见输入(多行文本)
- 通过/驳回按钮
- 界面布局:
- 顶部:工单信息摘要
- 中部:延期申请详情 + 审批意见
- 底部:通过 + 驳回按钮(并排)
- 操作按钮:
按钮 权限 说明 通过 repair:detail:approve 延期生效,工单继续处理 驳回 repair:detail:approve 通知维修人员,工单恢复原状态
交互流程要求
- 页面加载流程:页面加载时获取工单基本信息和延期申请详情→渲染工单信息摘要和申请详情
- 查询/筛选交互流程:无筛选操作
- 表单填写与提交流程:查看延期申请详情→输入审批意见→点击通过/驳回→确认弹窗→操作成功跳转列表
- 弹窗/弹层交互流程:通过时弹出确认弹窗"确认通过延期申请?";驳回时弹出确认弹窗+必填驳回原因
- 行内操作流程:点击通过→确认→延期生效;点击驳回→填写驳回原因→确认→通知维修人员
- 异常与错误处理:审批操作失败显示重试;工单状态已变更提示"工单状态已更新,请刷新"
- 联动/级联交互:审批结果与工单状态联动更新
- 权限控制交互表现:仅主管可操作;无repair:detail:approve权限时按钮置灰
组件规范
| 元素 | 组件 | 配置参数 |
|---|---|---|
| 工单信息摘要 | uni-card |
mode="basic",只读展示 |
| 延期申请详情 | uni-list + uni-list-item |
:showArrow="false",展示申请人、原因、预计时间 |
| 审批意见 | uni-easyinput |
type="textarea",maxlength="200" |
| 通过按钮 | button |
type="primary",@click="approve" |
| 驳回按钮 | button |
type="warn",@click="reject" |
| 确认弹窗 | uni-popup |
type="dialog" |
校验规则
| 字段 | 规则 | 错误提示 |
|---|---|---|
| 审批意见 | 驳回时必填 | "请填写驳回原因" |
| 审批意见 | 最多200字 | "审批意见不能超过200字" |
响应式布局
- 适配机型:iPhone SE(375px)~ iPad mini(768px),表单宽度自适应
- 横竖屏适配策略:竖屏垂直布局;横屏按钮并排展示更宽
- 手势交互规范:通过/驳回按钮≥44px,间距≥16px
- 安全区域:底部按钮适配底部安全区
页面8:协助维修申请页
- 页面路径:
/pages/repair/assist-apply - 页面元素:
- 工单基本信息(只读)
- 协助班组选择(下拉选择其他班组)
- 协助原因(多行文本,必填)
- 界面布局:
- 顶部:工单信息摘要
- 中部:协助班组选择 + 协助原因
- 底部:提交申请按钮
- 操作按钮:
按钮 权限 说明 提交协助申请 repair:list:update 生成协助子工单,等待协助完成
交互流程要求
- 页面加载流程:页面加载时获取工单基本信息和班组列表→渲染工单信息摘要
- 查询/筛选交互流程:无筛选操作
- 表单填写与提交流程:选择协助班组→输入协助原因→点击提交协助申请→确认弹窗→提交成功跳转工单详情
- 弹窗/弹层交互流程:提交前弹出确认弹窗"确认申请协助维修?"
- 行内操作流程:选择协助班组→输入协助原因→确认提交
- 异常与错误处理:提交失败显示重试;无可用协助班组提示"暂无可协助的班组"
- 联动/级联交互:协助申请提交后生成协助子工单
- 权限控制交互表现:仅维修人员可操作;无repair:list:update权限时提交按钮置灰
组件规范
| 元素 | 组件 | 配置参数 |
|---|---|---|
| 工单信息摘要 | uni-card |
mode="basic",只读展示 |
| 协助班组选择 | uni-data-select |
v-model="team",:localdata="teamList" |
| 协助原因 | uni-easyinput |
type="textarea",maxlength="500",:showWordLimit="true" |
| 提交按钮 | button |
type="primary",:loading="submitting" |
| 确认弹窗 | uni-popup |
type="dialog" |
校验规则
| 字段 | 规则 | 错误提示 |
|---|---|---|
| 协助班组 | 必选 | "请选择协助班组" |
| 协助原因 | 必填,最多500字 | "请填写协助原因" / "协助原因不能超过500字" |
响应式布局
- 适配机型:iPhone SE(375px)~ iPad mini(768px),表单宽度自适应
- 横竖屏适配策略:竖屏垂直布局;横屏表单水平分组展示
- 手势交互规范:班组选择≥44px;提交按钮≥44px
- 安全区域:底部提交按钮适配底部安全区
页面9:工单分配页(主管)
- 页面路径:
/pages/repair/assign - 页面元素:
- 工单基本信息(只读)
- 分配班组选择(下拉选择)
- 分配人员选择(联动,根据班组筛选)
- 分配备注(可选)
- 界面布局:
- 顶部:工单信息摘要
- 中部:班组 + 人员级联选择
- 底部:确认分配按钮
- 操作按钮:
按钮 权限 说明 确认分配 repair:list:assign 分配成功后通知维修人员
交互流程要求
- 页面加载流程:页面加载时获取工单基本信息和班组列表→渲染工单信息摘要
- 查询/筛选交互流程:无筛选操作
- 表单填写与提交流程:选择分配班组→联动加载班组下人员列表→选择分配人员→可选填分配备注→点击确认分配→确认弹窗→分配成功通知维修人员
- 弹窗/弹层交互流程:提交前弹出确认弹窗"确认分配给XXX?"
- 行内操作流程:选择班组→人员列表联动刷新→选择人员→确认分配
- 异常与错误处理:班组下无人员提示"该班组暂无可用人员";分配失败显示重试
- 联动/级联交互:班组选择与人员列表联动,选择班组后动态加载该班组人员
- 权限控制交互表现:仅主管可操作;无repair:list:assign权限时提交按钮置灰
组件规范
| 元素 | 组件 | 配置参数 |
|---|---|---|
| 工单信息摘要 | uni-card |
mode="basic",只读展示 |
| 班组选择 | uni-data-select |
v-model="teamId",@change="loadMembers" |
| 人员选择 | uni-data-select |
v-model="memberId",:localdata="memberList" |
| 分配备注 | uni-easyinput |
type="textarea",maxlength="200" |
| 确认分配 | button |
type="primary",:loading="submitting" |
| 确认弹窗 | uni-popup |
type="dialog" |
校验规则
| 字段 | 规则 | 错误提示 |
|---|---|---|
| 分配班组 | 必选 | "请选择分配班组" |
| 分配人员 | 必选 | "请选择分配人员" |
| 分配备注 | 最多200字 | "备注不能超过200字" |
响应式布局
- 适配机型:iPhone SE(375px)~ iPad mini(768px),表单宽度自适应
- 横竖屏适配策略:竖屏垂直布局;横屏班组人员选择并排展示
- 手势交互规范:选择器≥44px;确认按钮≥44px
- 安全区域:底部按钮适配底部安全区
页面10:工单验收页
- 页面路径:
/pages/repair/accept - 页面元素:
- 工单基本信息(只读)
- 维修说明展示
- 维修前后照片对比
- 验收结果选择(通过/不通过)
- 验收意见(多行文本,不通过时必填)
- 界面布局:
- 顶部:工单信息摘要
- 中部:维修说明 + 照片对比
- 下部:验收结果选择 + 验收意见
- 底部:提交验收按钮
- 操作按钮:
按钮 权限 说明 提交验收 repair:detail:approve 通过→工单完成;不通过→退回维修
交互流程要求
- 页面加载流程:页面加载时获取工单信息→渲染工单摘要、维修说明、前后照片对比
- 查询/筛选交互流程:无筛选操作
- 表单填写与提交流程:查看维修前后照片对比→选择验收结果(通过/不通过)→不通过时填写验收意见→点击提交验收→确认弹窗→验收通过工单完成/不通过退回维修
- 弹窗/弹层交互流程:提交前弹出确认弹窗"确认验收结果?";点击照片弹出大图预览
- 行内操作流程:选择通过/不通过→不通过时展开验收意见输入→提交验收
- 异常与错误处理:验收操作失败显示重试;工单状态已变更提示刷新
- 联动/级联交互:验收结果选择与验收意见联动,不通过时验收意见必填
- 权限控制交互表现:仅主管/报修人可操作;无repair:detail:approve权限时按钮置灰
组件规范
| 元素 | 组件 | 配置参数 |
|---|---|---|
| 工单信息摘要 | uni-card |
mode="basic",只读展示 |
| 照片对比 | swiper |
左右滑动对比,:indicator-dots="true" |
| 照片大图 | uni-popup |
type="center",图片全屏预览 |
| 验收结果 | uni-data-checkbox |
:localdata="[{value:'pass',text:'通过'},{value:'fail',text:'不通过'}]" |
| 验收意见 | uni-easyinput |
type="textarea",maxlength="500" |
| 提交按钮 | button |
type="primary",:loading="submitting" |
| 确认弹窗 | uni-popup |
type="dialog" |
校验规则
| 字段 | 规则 | 错误提示 |
|---|---|---|
| 验收结果 | 必选 | "请选择验收结果" |
| 验收意见 | 不通过时必填,最多500字 | "不通过时请填写验收意见" / "验收意见不能超过500字" |
响应式布局
- 适配机型:iPhone SE(375px)~ iPad mini(768px),照片区域宽度自适应
- 横竖屏适配策略:竖屏照片上下对比;横屏照片左右对比
- 手势交互规范:照片可点击放大≥44px;提交按钮≥44px;左右滑动切换照片
- 安全区域:底部按钮适配底部安全区
页面11:工单评价页
- 页面路径:
/pages/repair/evaluate - 页面元素:
- 工单基本信息(只读)
- 评分组件(五分制星级评分)
- 评价内容(多行文本,最多200字)
- 图片上传(最多3张)
- 界面布局:
- 顶部:工单信息摘要
- 中部:评分星级 + 评价输入 + 图片上传
- 底部:提交评价按钮
- 操作按钮:
按钮 权限 说明 提交评价 — 评价提交后不可修改
交互流程要求
- 页面加载流程:页面加载时获取工单基本信息→渲染工单信息摘要
- 查询/筛选交互流程:无筛选操作
- 表单填写与提交流程:点击星级选择评分→输入评价内容→可选上传图片→点击提交评价→确认弹窗→评价提交成功跳转工单详情
- 弹窗/弹层交互流程:提交前弹出确认弹窗"确认提交评价?提交后不可修改";上传图片弹出选择(拍照/相册)
- 行内操作流程:点击星星评分→输入评价→上传图片→提交评价
- 异常与错误处理:图片上传失败提示重传;提交失败显示重试;评价已提交提示"已评价"
- 联动/级联交互:评分与评价提交联动,必须选择评分才能提交
- 权限控制交互表现:仅报修人可评价;已评价工单不显示评价入口
组件规范
| 元素 | 组件 | 配置参数 |
|---|---|---|
| 工单信息摘要 | uni-card |
mode="basic",只读展示 |
| 星级评分 | uni-rate |
:max="5",:value="score",:size="28" |
| 评价内容 | uni-easyinput |
type="textarea",maxlength="200",:showWordLimit="true" |
| 图片上传 | uni-file-picker |
limit="3",file-mediatype="image" |
| 提交按钮 | button |
type="primary",:loading="submitting" |
| 确认弹窗 | uni-popup |
type="dialog" |
校验规则
| 字段 | 规则 | 错误提示 |
|---|---|---|
| 评分 | 必选,1~5分 | "请选择评分" |
| 评价内容 | 最多200字 | "评价内容不能超过200字" |
| 图片 | 最多3张 | "评价图片最多上传3张" |
响应式布局
- 适配机型:iPhone SE(375px)~ iPad mini(768px),表单宽度自适应
- 横竖屏适配策略:竖屏垂直布局;横屏评分与输入并排展示
- 手势交互规范:星级评分每颗星≥44px;提交按钮≥44px
- 安全区域:底部提交按钮适配底部安全区
页面12:工单详情页
- 页面路径:
/pages/repair/detail - 页面元素:
- 工单基本信息
- 报修照片
- 维修人员信息(已分配时)
- 维修记录时间轴
- 维修后照片
- 操作按钮区(根据状态和角色动态显示)
- 界面布局:
- 顶部:工单编号 + 状态标签
- 信息区:报修类型、描述、位置、联系方式、报修时间
- 照片区:报修照片轮播
- 维修区:维修人员 + 维修说明 + 维修照片
- 时间轴:工单流转记录(提交→分配→接单→完工→验收)
- 底部:操作按钮区(动态)
- 操作按钮(根据角色和状态动态显示):
按钮 适用角色 工单状态 说明 催单 报修人 处理中 发起催单 接单 维修人员 待分配/已分配 接单 完工 维修人员 处理中 提交维修完工 延期申请 维修人员 处理中 申请延期 协助申请 维修人员 处理中 请求协助 分配 主管 待分配 分配工单 延期审批 主管 延期中 审批延期 验收 主管/报修人 待验收 验收工单 评价 报修人 已完成 评价工单
交互流程要求
-
页面加载流程:页面加载时获取工单详细信息→渲染工单编号、状态、基本信息、照片、维修记录、时间轴
-
查询/筛选交互流程:无筛选操作
-
表单填写与提交流程:本页面无表单提交操作,操作按钮跳转对应子页面
-
弹窗/弹层交互流程:点击照片→弹出大图预览;点击催单→弹出确认弹窗
-
行内操作流程:点击操作按钮→根据角色和状态跳转对应操作页面(接单→完工页、延期→延期申请页等);查看照片轮播;滚动查看时间轴
-
异常与错误处理:工单加载失败显示重试;照片加载失败显示占位图;网络异常显示错误提示
-
联动/级联交互:操作按钮根据工单状态和用户角色动态显示/隐藏
-
权限控制交互表现:不同角色看到不同操作按钮;无权限操作按钮不显示;催单按钮仅报修人可见
-
H1 防重复请求(强制):各操作按钮(催单/接单/完工等)点击后分别做loading+disabled防连击;操作跳转子页面由子页面负责防重;照片预览大图操作不做loading拦截;工单详情GET请求pending期间不重复发
-
H2 超时配置(强制):工单详情GET请求超时15s;>3s显示骨架屏;详情加载超时后提示"加载超时,请重试"+重试按钮
-
H3 操作确认(强制):催单操作在详情页弹出确认弹窗"确认催单?(今日剩余X次)";其他危险操作由各子页面确认
-
H7 文件上传(建议):本页面照片均为只读展示,不涉及上传操作
-
H8 反馈(建议):详情加载成功静默渲染无需toast;加载失败wx.showToast({icon:'none', title:'工单信息加载失败,请重试'}); 照片加载失败显示占位图;网络异常wx.getNetworkType检测+重试按钮
组件规范
| 元素 | 组件 | 配置参数 |
|---|---|---|
| 状态标签 | uni-tag |
type: success(已完成)/warning(处理中)/error(异常)/default(待分配) |
| 照片轮播 | swiper |
:indicator-dots="true",:autoplay="false" |
| 照片大图 | uni-popup |
type="center",图片全屏预览 |
| 维修记录 | uni-steps |
:options="timeLineData",direction="column" |
| 信息列表 | uni-list + uni-list-item |
:showArrow="false",展示各项信息 |
| 操作按钮区 | view + button |
固定底部,按钮根据角色动态渲染 |
| 催单确认弹窗 | uni-popup |
type="dialog" |
校验规则
| 字段 | 规则 | 错误提示 |
|---|---|---|
| 工单信息 | 必须返回有效工单数据 | "工单信息加载失败,请重试" |
| 照片 | 加载失败显示占位图 | — |
| 操作权限 | 根据角色和状态校验 | "您暂无此操作权限" |
响应式布局
- 适配机型:iPhone SE(375px)~ iPad mini(768px),信息区域宽度自适应
- 横竖屏适配策略:竖屏垂直布局;横屏信息区和照片区可并排展示
- 手势交互规范:操作按钮≥44px;照片可点击放大≥44px;左右滑动切换照片
- 安全区域:底部操作按钮区适配底部安全区,padding-bottom=env(safe-area-inset-bottom)
需求追溯
| 功能点编号 | 功能名称 | 文档来源 | 后续服务 | 关联功能 |
|---|---|---|---|---|
| MP-R-01 | 扫码注册 | 02-小程序端 §2 | 注册成功→绑定项目身份 | 通用功能(登录) |
| MP-R-02 | 一键报修 | 02-小程序端 §2 | 提交→生成工单→触发分配通知 | 物业Web端工单列表 |
| MP-R-03 | 我的工单 | 02-小程序端 §2 | 查看工单状态→催单/验收/评价 | 工单详情 |
| MP-R-04 | 催单 | 02-小程序端 §2 | 催单→触发通知服务→通知维修人员/主管 | 消息通知 |
| MP-R-05 | 维修接单 | 02-小程序端 §2 | 接单→工单状态变更→通知报修人 | 工单详情 |
| MP-R-06 | 维修完工 | 02-小程序端 §2 | 完工→工单状态变为"待验收"→触发验收通知 | 工单验收 |
| MP-R-07 | 延期申请 | 02-小程序端 §2 | 申请→工单状态变为"延期中"→通知主管审批 | 延期审批 |
| MP-R-08 | 延期审批 | 02-小程序端 §2 | 通过→延期生效;驳回→通知申请人 | 延期申请 |
| MP-R-09 | 协助维修申请 | 02-小程序端 §2 | 申请→生成协助子工单→通知协助班组 | 工单分配 |
| MP-R-10 | 工单分配 | 02-小程序端 §2 | 分配→通知维修人员 | 维修接单 |
| MP-R-11 | 工单验收 | 02-小程序端 §2 | 验收通过→工单完成→触发评价 | 服务评价 |
| MP-R-12 | 评价 | 02-小程序端 §2 | 评价→数据写入评价模块→物业可查看回复 | 服务评价 |
业务规则
-
照片上传规则(06-项目技术要求.md §4.4):
- 报修照片最多9张,必须含水印(时间+位置信息)
- 水印位置:图片右下角
- 上传时自动附带
bluetooth_connected标记(如蓝牙连接时)
-
工单状态流转(03-业务流转逻辑-小程序端 §2):
- 报修人提交 → 待分配 → 处理中(接单) → 待验收(完工) → 已完成(验收通过)
- 处理中可延期 → 延期中 → 主管审批 → 继续处理/驳回
- 处理中可申请协助 → 生成子工单
-
催单规则:
- 只有处理中的工单可以催单
- 催单后触发通知服务,通知维修人员和主管
- 同一工单每天最多催单3次
-
双端审批对照(02-功能清单-小程序端.md 附录):
- 工单延期审批:Web+小程序均可(物业主管)
- 工单分配:Web+小程序均可(物业主管)
- 工单验收:Web+小程序均可(物业主管/报修人)
-
数据权限(01-模块划分.md §1.3):
- 主管:本班组工单数据
- 员工:仅本人相关工单数据
状态流转
工单完整状态流转
待分配 ──[主管分配/自动分配]──▶ 已分配 ──[维修人员接单]──▶ 处理中
│ │
│ ┌───正常完工───┐───延期申请───┐───协助申请───┐
│ │ │ │
│ ▼ ▼ ▼
│ 待验收 延期中 协助处理中
│ │ │ │
│ │ 主管审批 协助完成
│ │ ┌通过┐┌驳回┐ │
│ │ ▼ ▼ │
│ │ 继续处理 通知员工 │
│ │ │
│ ┌───验收通过───┐───验收不通过───┐
│ │ │ │
│ ▼ ▼ │
│ 已完成 退回处理中 │
│ │ │
│ 可评价 │
│ │
└─────────────────────────────────────────────────────────────────────────┘