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.
保洁相关功能
模块编码:cleaning
端侧:微信小程序
关联文档:01-模块划分.md(v4.0)、02-功能清单-小程序端.md(§4)、03-业务流转逻辑-小程序端.md(§4)、05-接口规范.md(§9)、06-项目技术要求.md
强制规范遵循 07-前端界面开发规范.md
功能概览
| 项目 |
说明 |
| 菜单名称 |
保洁管理 |
| 子菜单 |
今日保洁任务 / 保洁执行 / 保洁历史 |
| 功能编号 |
MP-CL-01 ~ MP-CL-07 |
| 权限编码 |
cleaning:task:、cleaning:spot-check:、cleaning:supplement:* |
页面清单
页面1:今日保洁任务
- 页面路径:
/pages/cleaning/today
- 适用角色:保洁人员
- 页面元素:
- 日期显示(当天日期)
- 任务统计卡片(待执行/进行中/已完成)
- 任务列表
- 查询条件:无(自动按当天+本人过滤)
- 列表字段:
| 字段 |
类型 |
说明 |
| 任务名称 |
文本 |
保洁区域+任务类型 |
| 保洁区域 |
标签 |
关联区域名称 |
| 计划时间 |
时间 |
预计开始时间 |
| 状态 |
标签 |
待执行/进行中/已完成/超时 |
| 蓝牙状态 |
图标 |
是否需蓝牙打卡 |
- 界面布局:
- 顶部:日期 + 统计数字横向排列
- 中部:任务卡片列表,每张卡片显示区域、时间、状态
- 底部:无操作栏
- 操作按钮:
- 「开始执行」→ 进入保洁执行页(权限:cleaning:task:update)
- 「查看详情」→ 查看任务详情
交互流程要求
- 页面加载流程:页面加载时获取当日保洁任务列表→显示骨架屏→渲染统计卡片和任务列表
- 查询/筛选交互流程:无手动筛选,自动按当天+本人过滤;支持下拉刷新
- 表单填写与提交流程:无表单提交操作
- 弹窗/弹层交互流程:无弹窗
- 行内操作流程:点击「开始执行」→校验蓝牙打卡状态→跳转保洁执行页;点击「查看详情」→查看任务详情
- 异常与错误处理:任务加载失败显示重试;无任务显示空状态插图和文案
- 联动/级联交互:统计卡片数字与列表数据联动更新
- 权限控制交互表现:无cleaning:task:update权限时隐藏「开始执行」按钮
- H1 防重复提交:「开始执行」「查看详情」按钮点击时须设置
:loading + :disabled 双重锁定;下拉刷新期间禁止重复触发;使用 pending Promise 去重
- H2 超时控制:获取保洁任务列表 GET 请求超时 15s;页面加载 >3s 时须调用
wx.showLoading({title:'加载中...', mask:true});请求超时时提示"网络请求超时,请下拉刷新重试"
- H3 操作确认:点击「开始执行」前若存在进行中任务,须通过
wx.showModal 二次确认,内容含后果说明
- H8 反馈规范:任务加载成功使用静默渲染;加载失败使用
wx.showToast({icon:'none', title:'加载失败,请重试'});网络异常通过 wx.getNetworkType 判断后提供重试入口
组件规范
| 元素 |
组件 |
配置参数 |
| 统计卡片 |
uni-card |
mode="center",三列等宽布局 |
| 任务列表 |
uni-list + uni-list-item |
clickable=true,showArrow=true |
| 状态标签 |
uni-tag |
type: success(已完成)/warning(进行中)/error(超时)/default(待执行) |
| 蓝牙状态图标 |
uni-icons |
type="bluetooth",size="22" |
| 下拉刷新 |
uni-refresher |
@onRefresh回调,threshold=45px |
| 空状态 |
uni-section |
插槽自定义空状态插图与文案 |
校验规则
| 字段 |
规则 |
错误提示 |
| 任务列表 |
加载失败时允许重试 |
"加载失败,请下拉刷新重试" |
| 统计数据 |
数据为空时显示0 |
— |
响应式布局
- 适配机型:iPhone SE(375px)~ iPad mini(768px),卡片宽度自适应,padding 16px
- 横竖屏适配策略:竖屏单列卡片;横屏统计卡片横向平铺,任务列表双列卡片
- 手势交互规范:任务项可点击区域≥44px;下拉刷新触发区域≥50px
- 安全区域:底部适配底部安全区
需求追溯:
| 功能点编号 |
功能名称 |
文档来源 |
后续服务 |
关联功能 |
| MP-CL-01 |
今日保洁任务 |
02-小程序端 §4 |
蓝牙打卡确认 |
保洁执行 |
页面2:蓝牙强制打卡确认
- 页面路径:
/pages/cleaning/check-in(从今日任务页面跳转)
- 适用角色:保洁人员
- 页面元素:
- 蓝牙扫描状态指示器(扫描中/已连接/未检测到)
- 当前打卡点名称
- 蓝牙信号强度显示
- 重试按钮
- 补录入口(蓝牙未连接时显示)
- 查询条件:无
- 列表字段:无
- 界面布局:
- 顶部:打卡点名称 + 蓝牙状态大图标
- 中部:蓝牙连接动画(扫描→连接→成功)
- 底部:操作按钮区
- 操作按钮:
- 「重新扫描」→ 重新搜索蓝牙Beacon
- 「进入补录模式」→ 跳转补录申请页(蓝牙策略=REQUIRED且扫描失败时显示)
- 「确认打卡」→ 记录蓝牙打卡成功(check_type=BLUETOOTH)
蓝牙策略判断逻辑:
- 调用
GET /system/bluetooth-policy → cleaning_check_in
- 策略=REQUIRED:必须蓝牙连接后才能打卡
- 策略=OPTIONAL:可选蓝牙或手动打卡
需求追溯:
| 功能点编号 |
功能名称 |
文档来源 |
后续服务 |
关联功能 |
| MP-CL-02 |
蓝牙强制打卡确认 |
02-小程序端 §4 |
保洁执行 |
保洁补录、系统蓝牙配置 |
交互流程要求
- 页面加载流程:页面加载时查询蓝牙策略→策略=REQUIRED自动启动蓝牙扫描→显示扫描动画;策略=OPTIONAL显示打卡方式选择
- 查询/筛选交互流程:无筛选操作
- 表单填写与提交流程:自动扫描蓝牙Beacon→检测到→连接→打卡成功(check_type=BLUETOOTH);扫描失败→重试/进入补录模式
- 弹窗/弹层交互流程:打卡成功弹出成功提示;扫描超时弹出重试提示
- 行内操作流程:点击重新扫描→重新搜索蓝牙;点击进入补录模式→跳转补录申请页;点击确认打卡→记录蓝牙打卡
- 异常与错误处理:蓝牙未开启提示"请开启手机蓝牙";扫描超时3次显示补录入口;连接失败提示重试
- 联动/级联交互:蓝牙策略与扫描行为联动
- 权限控制交互表现:所有保洁人员可访问
- H1 防重复提交:「重新扫描」「确认打卡」「进入补录模式」按钮点击时均须设置
:loading + :disabled 双重锁定;扫描期间使用 pending 标志位防止重复发起蓝牙扫描
- H2 超时控制:蓝牙策略查询 GET 请求超时 15s;蓝牙扫描超时 3s;>3s 时须显示
wx.showLoading({title:'正在扫描...', mask:true});超时或连接失败均提示并提供重试/补录选项
- H3 操作确认:点击「进入补录模式」前须通过
wx.showModal 确认,内容说明"进入补录后将记录为手动打卡,是否继续?";点击「确认打卡」前提示"确认在此位置打卡?"
- H4 脏数据检测:本页面以自动操作为主,若用户手动修改过任何信息则标记 isDirty;
onUnload 中检测到 isDirty 且未完成打卡时弹出 wx.showModal({content:"未完成的打卡将丢失,确定离开?"})
- H7 上传约束:本页面无上传功能,此项不适用
- H8 反馈规范:打卡成功使用
wx.showToast({icon:'success', title:'打卡成功'});扫描失败使用 wx.showToast({icon:'none', title:'未检测到蓝牙信号'});网络异常提供重试入口
组件规范
| 元素 |
组件 |
配置参数 |
| 扫描动画 |
view + CSS动画 |
旋转动画,size=80px |
| 蓝牙状态图标 |
uni-icons |
type="bluetooth",size=40 |
| 打卡点名称 |
text |
font-size="18px",font-weight="bold" |
| 信号强度 |
text |
font-size="14px",动态显示RSSI |
| 重新扫描 |
button |
type="default",:loading="scanning" |
| 进入补录模式 |
button |
type="warn" |
| 确认打卡 |
button |
type="primary" |
| 打卡结果 |
uni-popup |
type="dialog" |
校验规则
| 字段 |
规则 |
错误提示 |
| 蓝牙状态 |
必须开启蓝牙 |
"请开启手机蓝牙" |
| Beacon信号 |
RSSI > -70dBm |
"蓝牙信号弱,请靠近打卡点" |
| 扫描超时 |
3秒超时,最多重试3次 |
"蓝牙扫描超时" |
响应式布局
- 适配机型:iPhone SE(375px)~ iPad mini(768px),扫描动画居中
- 横竖屏适配策略:竖屏垂直布局;横屏动画与信息并排展示
- 手势交互规范:按钮可点击区域≥44px
- 安全区域:底部按钮适配底部安全区
页面3:保洁执行
- 页面路径:
/pages/cleaning/execute
- 适用角色:保洁人员
- 页面元素:
- 任务信息卡片(区域、类型、时间)
- 保洁清单(逐项检查列表)
- 每项操作按钮(完成/标记异常)
- 完成后照片上传区(≤9张,含水印时间定位)
- 蓝牙拍照提示(策略=REQUIRED时显示)
- 查询条件:无
- 列表字段:
| 字段 |
类型 |
说明 |
| 检查项名称 |
文本 |
保洁清单项目 |
| 状态 |
标签 |
待完成/已完成/异常 |
| 备注 |
文本 |
异常时填写说明 |
- 界面布局:
- 顶部:任务信息摘要卡片
- 中部:保洁清单列表(逐项勾选)
- 底部:照片上传区 + 提交按钮
- 操作按钮:
- 「完成该项」→ 标记该项完成
- 「标记异常」→ 跳转异常反馈页
- 「拍照」→ 调用相机拍照(蓝牙策略=REQUIRED时须在蓝牙连接状态下进行)
- 「提交完成」→ 提交整个保洁任务
需求追溯:
| 功能点编号 |
功能名称 |
文档来源 |
后续服务 |
关联功能 |
| MP-CL-03 |
保洁执行 |
02-小程序端 §4 |
主管抽查 |
保洁异常反馈 |
交互流程要求
- 页面加载流程:页面加载时获取保洁任务详情和清单→渲染任务信息和检查项列表;查询蓝牙拍照策略
- 查询/筛选交互流程:无筛选操作
- 表单填写与提交流程:逐项点击「完成该项」→标记异常项点击「标记异常」→跳转异常反馈页→完成后拍照上传→点击「提交完成」→确认弹窗→提交成功
- 弹窗/弹层交互流程:点击拍照弹出选择(拍照/相册);提交前弹出确认弹窗
- 行内操作流程:点击完成该项→该项标记完成;点击标记异常→跳转异常反馈页;点击拍照→调起相机(蓝牙策略=REQUIRED须蓝牙连接下拍照)
- 异常与错误处理:蓝牙断连时拍照提示"请连接蓝牙后拍照";提交失败显示重试
- 联动/级联交互:检查项完成进度与任务状态联动
- 权限控制交互表现:无cleaning:task:update权限时按钮置灰
- H1 防重复提交:「完成该项」「标记异常」「提交完成」按钮点击时均须设置
:loading + :disabled 双重锁定;提交期间禁止重复操作;拍照调用同样需要防抖处理
- H2 超时控制:获取任务详情和清单 GET 请求超时 15s;提交完成 POST 请求超时 30s;照片上传超时 60s;>3s 时须
wx.showLoading({mask:true});超时后提示具体原因及重试选项
- H3 操作确认:点击「提交完成」前须通过
wx.showModal 二次确认,内容包括已完成项数、异常项数及"确认提交后将进入待抽查状态"的后果说明
- H4 脏数据检测:页面加载时对初始清单数据进行快照(深拷贝);每次点击完成/标记异常或上传照片时对比快照检测 isDirty;
onUnload 中检测到 isDirty 且未提交时弹出 wx.showModal({content:"保洁数据尚未保存,确定离开?"})
- H7 上传约束:完成照片上传单个文件 ≤10MB,最多 ≤9 张;使用
uni-file-picker 的 @progress 回调实时展示上传进度百分比;蓝牙策略=REQUIRED 时拍照前校验蓝牙连接状态
- H8 反馈规范:提交成功使用
wx.showToast({icon:'success', title:'保洁任务已提交'});校验失败使用 wx.showToast({icon:'none', title:'请完成所有保洁项目'}) 多文字提示;网络异常判断并提供重试
组件规范
| 元素 |
组件 |
配置参数 |
| 任务信息卡片 |
uni-card |
mode="basic",只读展示 |
| 保洁清单列表 |
uni-list + uni-list-item |
:showArrow="false",可勾选 |
| 完成该项 |
button |
type="default",size="mini",@click="completeItem" |
| 标记异常 |
button |
type="warn",size="mini",@click="reportAbnormal" |
| 照片上传 |
uni-file-picker |
limit="9",file-mediatype="image" |
| 提交完成 |
button |
type="primary",:loading="submitting" |
| 确认弹窗 |
uni-popup |
type="dialog" |
校验规则
| 字段 |
规则 |
错误提示 |
| 保洁清单 |
必须逐项完成或标记异常 |
"请完成所有保洁项目" |
| 完成照片 |
至少1张 |
"请上传完成照片" |
| 蓝牙状态 |
策略=REQUIRED拍照时须蓝牙连接 |
"请连接蓝牙后拍照" |
响应式布局
- 适配机型:iPhone SE(375px)~ iPad mini(768px),列表宽度自适应
- 横竖屏适配策略:竖屏垂直列表;横屏清单与照片区并排
- 手势交互规范:列表项可点击区域≥44px;按钮≥44px
- 安全区域:底部提交按钮适配底部安全区
页面4:异常反馈
- 页面路径:
/pages/cleaning/abnormal
- 适用角色:保洁人员
- 页面元素:
- 异常描述输入框(多行文本)
- 拍照上传区(≤9张,含水印时间定位)
- 严重程度选择(一般/严重/紧急)
- 提交按钮
- 查询条件:无
- 列表字段:无
- 界面布局:
- 顶部:异常类型提示
- 中部:照片上传 + 描述填写
- 底部:提交按钮
- 操作按钮:
- 「拍照」→ 调用相机
- 「提交反馈」→ 提交异常反馈
需求追溯:
| 功能点编号 |
功能名称 |
文档来源 |
后续服务 |
关联功能 |
| MP-CL-04 |
异常反馈 |
02-小程序端 §4 |
通知主管 |
保洁管理(Web端) |
交互流程要求
- 页面加载流程:页面加载时初始化表单
- 查询/筛选交互流程:无筛选操作
- 表单填写与提交流程:输入异常描述→选择严重程度→拍照上传→点击提交反馈→确认弹窗→提交成功通知主管
- 弹窗/弹层交互流程:点击拍照弹出选择(拍照/相册);提交前弹出确认弹窗
- 行内操作流程:输入描述→选择严重程度→上传照片→提交
- 异常与错误处理:图片上传失败提示重传;提交失败显示重试
- 联动/级联交互:无强联动
- 权限控制交互表现:所有保洁人员可操作
组件规范
| 元素 |
组件 |
配置参数 |
| 异常描述 |
uni-easyinput |
type="textarea",maxlength="500",:showWordLimit="true" |
| 严重程度 |
uni-data-select |
:localdata="[{value:'minor',text:'一般'},{value:'major',text:'严重'},{value:'critical',text:'紧急'}]" |
| 照片上传 |
uni-file-picker |
limit="9",file-mediatype="image",:auto-upload="true" |
| 提交按钮 |
button |
type="primary",:loading="submitting" |
| 确认弹窗 |
uni-popup |
type="dialog" |
校验规则
| 字段 |
规则 |
错误提示 |
| 异常描述 |
必填,最多500字 |
"请填写异常描述" / "描述不能超过500字" |
| 严重程度 |
必选 |
"请选择严重程度" |
| 照片 |
最多9张,含水印 |
"照片最多上传9张" |
响应式布局
- 适配机型:iPhone SE(375px)~ iPad mini(768px),表单宽度自适应
- 横竖屏适配策略:竖屏垂直布局;横屏照片区3~4列网格
- 手势交互规范:选择器≥44px;提交按钮≥44px;上传区域≥44px
- 安全区域:底部提交按钮适配底部安全区
页面5:保洁抽查
- 页面路径:
/pages/cleaning/spot-check
- 适用角色:主管
- 页面元素:
- 待抽查任务列表
- 任务详情查看
- 抽查结果标记(合格/不合格)
- 不合格原因输入框
- 不合格照片上传
- 查询条件:
- 日期筛选
- 区域筛选
- 状态筛选(待抽查/合格/不合格)
- 列表字段:
| 字段 |
类型 |
说明 |
| 区域 |
文本 |
保洁区域名称 |
| 执行人 |
文本 |
保洁人员姓名 |
| 完成时间 |
时间 |
实际完成时间 |
| 抽查状态 |
标签 |
待抽查/合格/不合格 |
- 界面布局:
- 顶部:筛选条件横向滑动
- 中部:任务卡片列表
- 弹窗:抽查结果标记弹窗
- 操作按钮:
- 「合格」→ 确认完成(权限:cleaning:spot-check:approve)
- 「不合格」→ 填写原因后重新生成任务
需求追溯:
| 功能点编号 |
功能名称 |
文档来源 |
后续服务 |
关联功能 |
| MP-CL-05 |
保洁抽查 |
02-小程序端 §4 |
不合格时重新生成任务 |
保洁管理(Web端) |
交互流程要求
- 页面加载流程:页面加载时获取待抽查任务列表→显示骨架屏→渲染筛选条件和任务列表
- 查询/筛选交互流程:日期/区域/状态筛选条件→切换筛选重新加载列表;下拉刷新
- 表单填写与提交流程:点击任务→弹出抽查结果标记弹窗→选择合格/不合格→不合格时填写原因+上传照片→确认提交
- 弹窗/弹层交互流程:点击抽查→弹出抽查标记弹窗(合格/不合格选择+原因输入)
- 行内操作流程:点击合格→确认完成;点击不合格→填写原因→确认→系统自动重新生成任务
- 异常与错误处理:列表加载失败显示重试;抽查操作失败显示重试
- 联动/级联交互:不合格标记与任务重新生成联动
- 权限控制交互表现:仅主管可操作;无cleaning:spot-check:approve权限时按钮置灰
组件规范
| 元素 |
组件 |
配置参数 |
| 筛选条件 |
uni-data-select |
日期/区域/状态三个选择器 |
| 任务列表 |
uni-list + uni-list-item |
clickable=true |
| 抽查标记弹窗 |
uni-popup |
type="bottom",弹出抽查操作面板 |
| 合格按钮 |
button |
type="primary",@click="markQualified" |
| 不合格按钮 |
button |
type="warn",@click="markUnqualified" |
| 不合格原因 |
uni-easyinput |
type="textarea",maxlength="200" |
| 不合格照片 |
uni-file-picker |
limit="9",file-mediatype="image" |
| 下拉刷新 |
uni-refresher |
@onRefresh回调 |
校验规则
| 字段 |
规则 |
错误提示 |
| 抽查结果 |
必选(合格/不合格) |
"请选择抽查结果" |
| 不合格原因 |
不合格时必填 |
"请填写不合格原因" |
| 不合格照片 |
不合格时至少1张 |
"请上传不合格照片" |
响应式布局
- 适配机型:iPhone SE(375px)~ iPad mini(768px),列表宽度自适应
- 横竖屏适配策略:竖屏单列卡片;横屏双列卡片+底部弹窗更宽
- 手势交互规范:任务项可点击区域≥44px;按钮≥44px
- 安全区域:底部弹窗适配底部安全区
页面6:保洁历史
- 页面路径:
/pages/cleaning/history
- 适用角色:保洁人员
- 页面元素:
- 查询条件:
- 列表字段:
| 字段 |
类型 |
说明 |
| 日期 |
日期 |
执行日期 |
| 区域 |
文本 |
保洁区域 |
| 状态 |
标签 |
正常/异常/补录 |
| 打卡方式 |
标签 |
蓝牙/手动/补录 |
- 界面布局:
- 顶部:月份选择器 + 统计数字
- 中部:按日期分组的任务列表
- 底部:无操作栏
- 操作按钮:
需求追溯:
| 功能点编号 |
功能名称 |
文档来源 |
后续服务 |
关联功能 |
| MP-CL-06 |
保洁历史 |
02-小程序端 §4 |
无 |
保洁执行 |
交互流程要求
- 页面加载流程:页面加载时默认加载当月保洁记录→显示骨架屏→渲染月份选择器和记录列表
- 查询/筛选交互流程:切换月份→重新加载;状态筛选(全部/正常/异常/补录)→过滤记录;下拉刷新
- 表单填写与提交流程:无表单提交操作
- 弹窗/弹层交互流程:无弹窗
- 行内操作流程:点击查看详情→查看历史任务详情
- 异常与错误处理:记录加载失败显示重试;无记录显示空状态
- 联动/级联交互:月份和状态筛选与列表数据联动
- 权限控制交互表现:仅保洁人员可访问本人数据
- H1 防重复提交:「查看详情」按钮设置防重复标记;下拉刷新期间禁止重复触发;切换月份/状态筛选时 abort 未完成的上一次请求
- H2 超时控制:获取历史记录 GET 请求超时 15s;切换月份加载 >3s 时须
wx.showLoading({mask:true});超时提示"加载超时,请重试"
- H3 操作确认:本页面主要为列表查看,无需操作确认
- H8 反馈规范:记录加载成功静默渲染;加载失败使用
wx.showToast({icon:'none', title:'记录加载失败,请重试'});空数据显示空状态插图;网络异常提供重试
组件规范
| 元素 |
组件 |
配置参数 |
| 月份选择器 |
uni-datetime-picker |
type="date",fields="month" |
| 状态筛选 |
uni-segmented-control |
:values="['全部','正常','异常','补录']" |
| 记录列表 |
uni-list + uni-list-item |
clickable=true,showArrow=true |
| 状态标签 |
uni-tag |
type: success(正常)/error(异常)/primary(补录) |
| 下拉刷新 |
uni-refresher |
@onRefresh回调 |
| 空状态 |
uni-section |
插槽自定义空状态插图与文案 |
校验规则
| 字段 |
规则 |
错误提示 |
| 记录列表 |
加载失败允许重试 |
"加载失败,请下拉刷新重试" |
响应式布局
- 适配机型:iPhone SE(375px)~ iPad mini(768px),卡片宽度自适应
- 横竖屏适配策略:竖屏单列卡片;横屏双列卡片展示
- 手势交互规范:记录项可点击区域≥44px;支持下拉刷新
- 安全区域:底部适配底部安全区
页面7:异常数据补录
- 页面路径:
/pages/cleaning/supplement
- 适用角色:保洁人员(蓝牙失灵/定位失败时)
- 页面元素:
- 补录原因选择(蓝牙故障/手机异常/系统异常/其他)
- 补录说明输入框
- 手动填写保洁记录
- 照片上传区(补录证据)
- 提交按钮
- 查询条件:无
- 列表字段:无
- 界面布局:
- 顶部:补录模式提示(红色警示条)
- 中部:原因选择 + 说明填写 + 保洁记录
- 底部:提交按钮
- 操作按钮:
补录数据标记:
- 所有补录数据标记
is_supplement=true
supplement_reason:补录原因
check_type=MANUAL
需求追溯:
| 功能点编号 |
功能名称 |
文档来源 |
后续服务 |
关联功能 |
| MP-CL-07 |
异常数据补录 |
02-小程序端 §4 |
主管审核补录 |
操作日志、考勤补录审核 |
交互流程要求
- 页面加载流程:页面加载时显示补录模式提示(红色警示条)→获取保洁区域和检查项数据
- 查询/筛选交互流程:无筛选操作
- 表单填写与提交流程:选择补录原因→填写补录说明→上传证明材料→手动填写保洁记录(时间/区域/检查项)→点击提交补录→确认弹窗→提交成功等待审核
- 弹窗/弹层交互流程:点击上传弹出选择(拍照/相册);提交前弹出确认弹窗
- 行内操作流程:选择原因→填写说明→上传照片→填写保洁记录→提交
- 异常与错误处理:图片上传失败提示重传;提交失败显示重试;离线暂存本地
- 联动/级联交互:补录原因与表单无强联动
- 权限控制交互表现:仅保洁人员可操作;补录数据标记is_supplement=true
- H1 防重复提交:「提交补录」按钮点击时须设置
:loading="submitting" + :disabled 双重锁定;提交期间禁止重复点击
- H2 超时控制:获取区域和检查项 GET 请求超时 15s;提交补录 POST 请求超时 30s;证明材料上传超时 60s;>3s 时须
wx.showLoading({mask:true});超时后提示并提供重试
- H3 操作确认:点击「提交补录」前须通过
wx.showModal 二次确认,内容包括补录原因摘要及"提交后需等待主管审核"的后果说明
- H4 脏数据检测:页面初始化时保存空白表单快照;选择原因、填写说明、上传材料、填写记录等任一操作触发 isDirty=true;
onUnload 中检测 isDirty 时弹出 wx.showModal({content:"补录信息尚未提交,确定离开?"})
- H7 上传约束:证明材料上传单个文件 ≤10MB,最多 ≤3 张(业务限制);使用
uni-file-picker 的 @progress 回调显示上传进度;超出限制时前端拦截并提示
- H8 反馈规范:提交成功使用
wx.showToast({icon:'success', title:'补录申请已提交,待审核'});校验失败使用 wx.showToast({icon:'none', title:'具体错误信息'});离线暂存本地时提示"已暂存至本地"
组件规范
| 元素 |
组件 |
配置参数 |
| 补录原因 |
uni-data-select |
:localdata="[{value:'bluetooth',text:'蓝牙故障'},{value:'phone',text:'手机异常'},{value:'system',text:'系统异常'},{value:'other',text:'其他'}]" |
| 补录说明 |
uni-easyinput |
type="textarea",maxlength="200",:showWordLimit="true" |
| 证明材料上传 |
uni-file-picker |
limit="3",file-mediatype="image" |
| 保洁时间 |
uni-datetime-picker |
type="datetime" |
| 保洁区域 |
uni-data-select |
v-model="areaId",:localdata="areaList" |
| 检查项结果 |
uni-data-checkbox |
逐项渲染 |
| 提交按钮 |
button |
type="primary",:loading="submitting" |
| 确认弹窗 |
uni-popup |
type="dialog" |
校验规则
| 字段 |
规则 |
错误提示 |
| 补录原因 |
必选 |
"请选择补录原因" |
| 补录说明 |
必填,最多200字 |
"请填写补录说明" |
| 证明材料 |
最多3张 |
"证明材料最多上传3张" |
| 保洁时间 |
必选 |
"请选择保洁时间" |
| 保洁区域 |
必选 |
"请选择保洁区域" |
响应式布局
- 适配机型:iPhone SE(375px)~ iPad mini(768px),表单宽度自适应
- 横竖屏适配策略:竖屏垂直布局;横屏表单水平分组
- 手势交互规范:选择器≥44px;提交按钮≥44px
- 安全区域:底部提交按钮适配底部安全区
业务规则
- 蓝牙策略:保洁打卡和拍照均受蓝牙策略控制(
GET /system/bluetooth-policy → cleaning_check_in / cleaning_photo)
- 蓝牙强制打卡:策略=REQUIRED时,必须连接蓝牙Beacon后才可确认完成,拍照也须在蓝牙连接状态下进行
- 非强制蓝牙:策略=OPTIONAL时,可选蓝牙打卡(check_type=BLUETOOTH)或手动打卡(check_type=MANUAL)
- 补录审核:所有蓝牙失灵的补录数据需主管在Web端或小程序端审核
- 补录标记:补录数据必须标记
is_supplement=true,并在操作日志中记录
- 照片水印:所有照片自动添加时间+位置水印,蓝牙场景标记
bluetooth_connected
- 抽查不合格:主管标记不合格后,系统自动重新生成保洁任务
- 照片数量:单次上传最多9张照片
状态流转
保洁任务状态
待执行 → 进行中 → 待抽查 → 已完成
↓
异常反馈 → 待处理
↓
主管抽查 → 合格 → 已完成
→ 不合格 → 重新生成任务
补录流程
蓝牙失灵/定位失败
│
进入补录模式
│
选择补录原因 + 手动填写记录
│
提交补录申请(is_supplement=true)
│
主管审核(Web/小程序均可)
│
┌─审核通过─┐ ┌─审核驳回─┐
补录生效 通知员工
记录审核日志 记录审核日志