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.

560 lines
21 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 管理员小程序功能
> 模块编码property-manager
> 端侧:微信小程序
> 关联文档01-模块划分.mdv4.0、02-功能清单-小程序端.md§9、03-业务流转逻辑-小程序端.md§9、05-接口规范.md§9、06-项目技术要求.md
> 强制规范遵循 `07-前端界面开发规范.md`
## 功能概览
| 项目 | 说明 |
|------|------|
| 菜单名称 | 管理工作台 |
| 子菜单 | 报修管理 / 巡检管理 / 保洁管理 / 考勤管理 / 评价管理 / 组织架构查看 |
| 功能编号 | MP-PM-01 ~ MP-PM-06 |
| 权限编码 | repair:list:*、inspection:*:*、cleaning:*:*、attendance:*:*、evaluation:list:*、org:team:view |
> **说明**:管理员小程序功能是物业公司管理员/主管在小程序端的简化版管理功能与Web端功能对应但功能简化。所有数据与Web端同一数据源操作实时同步。
## 页面清单
### 页面1报修管理
- **页面路径**`/pages/manager/repair`
- **适用角色**:物业管理员/主管
- **页面元素**
- 工单统计卡片(待分配/处理中/待验收/已完成)
- 工单列表
- 工单分配操作
- 工单流转操作
- **查询条件**
- 状态筛选(全部/待分配/处理中/待验收/已完成)
- 日期筛选
- 类型筛选
- 关键词搜索
- **列表字段**
| 字段 | 类型 | 说明 |
|------|------|------|
| 工单编号 | 文本 | 报修工单号 |
| 报修类型 | 标签 | 报修分类 |
| 报修描述 | 文本 | 问题描述摘要 |
| 报修人 | 文本 | 提交人姓名 |
| 状态 | 标签 | 待分配/处理中/待验收/已完成 |
| 创建时间 | 时间 | 工单创建时间 |
- **界面布局**
- 顶部:统计数字横向排列
- 中部:筛选条件 + 工单卡片列表
- 底部:操作按钮
- **操作按钮**
- 「分配」→ 分配工单到班组/人员权限repair:list:assign
- 「查看详情」→ 查看工单详情
- 「审批延期」→ 审批维修人员延期申请权限repair:detail:approve
**需求追溯**
| 功能点编号 | 功能名称 | 文档来源 | 后续服务 | 关联功能 |
|------------|----------|----------|----------|----------|
| MP-PM-01 | 报修管理 | 02-小程序端 §9 | 通知维修人员 | 在线报修Web端 |
### 交互流程要求
1. **页面加载流程**:进入页面 → 并行调用:统计卡片数据 + 工单列表(默认全部状态)
2. **筛选交互**:选择状态/日期/类型 → 触发列表刷新;搜索框输入 → 回车或点击搜索
3. **分配操作**:点击"分配"→ 弹出人员选择弹窗(按班组筛选)→ 选择人员 → 确认 → 调用API → 成功提示 → 推送通知维修人员
4. **查看详情**:点击工单卡片 → 跳转工单详情页
5. **审批延期**:点击"审批延期"→ 弹窗展示延期原因 → 同意/拒绝 → API调用 → 通知申请人
6. **异常处理**:分配失败提示;网络离线提示
7. **权限控制**:无分配权限 → "分配"按钮不显示;无审批权限 → "审批延期"不显示
8. **[H1]防重复请求**
- 分配操作:点击"分配"后按钮 disabled + loading态API返回后恢复
- 审批延期操作:点击后弹窗底部确认按钮 disabled + loading
- 筛选切换:状态/日期切换时 abort 上一次列表请求再发新的
- 下拉刷新refreshing 标志位防止重复触发
9. **[H2]超时与加载反馈**
- 统计卡片+列表查询 timeout=15秒
- 分配/审批操作 timeout=30秒
- 超过3秒 wx.showLoading({ title: '加载中', mask: true })
- 超时 → wx.showToast({ icon: 'none', title: '请求超时' }) + 重试按钮
10. **[H3]操作确认机制**
- 分配确认:选择人员后 uni.showModal({ content: '确定将工单分配给{人员姓名}', success: res => { if(res.confirm) ... } })
- 审批延期同意uni.showModal({ content: '确定同意该延期申请?', ... })
- 审批延期拒绝:必须填写拒绝原因(弹窗内输入框)
11. **[H8]操作结果反馈**
- 分配成功wx.showToast({ icon: 'success', title: '分配成功' }) + 刷新列表
- 操作失败wx.showToast({ icon: 'none', title: errMsg })
- 网络异常wx.showModal({ title: '提示', content: '网络连接异常', confirmText: '重试' })
### 组件规范
| 元素 | 组件 | 配置参数 |
|------|------|----------|
| 页面容器 | scroll-view | scroll-y, refresher-enabled, @scrolltolower |
| 统计卡片 | view | class="stat-card", v-for, horizontal scroll |
| 状态筛选 | uni-segmented-control | :values="['全部','待分配','处理中','待验收','已完成']" |
| 工单列表 | view | v-for, class="order-card" |
| 状态标签 | uni-tag | :type按状态变化 |
| 分配按钮 | button | size="mini", type="primary" |
| 人员选择弹窗 | uni-popup | type="bottom" |
| 人员列表 | radio-group | v-for |
### 校验规则
无表单校验
### 响应式布局
- 适配机型iPhone SE ~ iPad mini
- 统计卡片:横向滚动
- 工单卡片:全宽
- 触摸区域按钮≥44px
---
### 页面2巡检管理
- **页面路径**`/pages/manager/inspection`
- **适用角色**:物业管理员/主管
- **页面元素**
- 巡检统计卡片(今日任务/已完成/异常)
- 巡检看板(人员执行状态)
- 巡检记录列表
- 异常记录查看
- **查询条件**
- 日期筛选
- 状态筛选
- 人员筛选
- **列表字段**
| 字段 | 类型 | 说明 |
|------|------|------|
| 计划名称 | 文本 | 巡检计划名称 |
| 执行人 | 文本 | 巡检人员姓名 |
| 区域 | 文本 | 巡检区域 |
| 状态 | 标签 | 待执行/进行中/已完成 |
| 异常数 | 数字 | 发现异常数量 |
- **界面布局**
- 顶部:统计数字 + 看板缩略
- 中部:巡检记录卡片列表
- 底部:无操作栏
- **操作按钮**
- 「查看详情」→ 查看巡检记录详情
- 「审核补录」→ 审核巡检补录申请权限inspection:supplement:approve
**需求追溯**
| 功能点编号 | 功能名称 | 文档来源 | 后续服务 | 关联功能 |
|------------|----------|----------|----------|----------|
| MP-PM-02 | 巡检管理 | 02-小程序端 §9 | 无 | 巡检管理Web端 |
### 交互流程要求
1. **页面加载流程**:进入页面 → 并行加载统计卡片 + 巡检记录列表
2. **筛选交互**:选择日期/状态/人员 → 触发列表刷新
3. **查看详情**:点击记录卡片 → 跳转巡检详情页
4. **审核补录**:点击"审核补录"→ 弹窗展示补录原因+证据 → 同意/拒绝 → API调用 → 通知申请人
5. **异常处理**:数据加载失败显示重试;网络离线提示
6. **权限控制**:无补录审核权限 → "审核补录"按钮不显示
7. **[H1]防重复请求**
- 筛选操作点击后 disabled + loading态API返回后恢复
- 审核补录操作点击后 disabled + loading态
- 使用 pending 标志位去重,页面卸载时 onUnload 必须 abort 未完成请求wx.requestTask.abort()
8. **[H2]超时与加载反馈**
- GET列表查询 timeout=15秒POST/PUT/DELETE写操作 timeout=30秒
- 超时 → wx.showToast({icon:'none', title:'请求超时,请检查网络后重试'})
- 加载>2秒显示 wx.showLoading
9. **[H3]操作确认机制**(有不可逆操作时)
- 审核补录: wx.showModal 确认
10. **[H8]操作结果反馈**
- 成功: wx.showToast({icon:'success', duration:2000})
- 失败: wx.showToast({icon:'none'}) 需手动关闭
- 网络/离线: 异常提示+重试按钮
### 组件规范
| 元素 | 组件 | 配置参数 |
|------|------|----------|
| 页面容器 | scroll-view | scroll-y, refresher-enabled |
| 统计卡片 | view | class="stat-card", v-for |
| 巡检记录列表 | view | v-for, class="inspection-card" |
| 状态标签 | uni-tag | 待执行:type="info", 进行中:type="primary", 已完成:type="success" |
| 审核补录弹窗 | uni-popup | type="bottom" |
| 同意/拒绝按钮 | button | 同意:type="primary", 拒绝:type="warn" |
### 校验规则
### 响应式布局
- 适配机型iPhone SE ~ iPad mini
- 统计卡片横向排列
- 记录卡片全宽
- 按钮触摸区≥44px
---
### 页面3保洁管理
- **页面路径**`/pages/manager/cleaning`
- **适用角色**:物业管理员/主管
- **页面元素**
- 保洁统计卡片(今日任务/已完成/超时)
- 保洁任务列表
- 排班查看
- 抽查操作
- **查询条件**
- 日期筛选
- 区域筛选
- 状态筛选
- **列表字段**
| 字段 | 类型 | 说明 |
|------|------|------|
| 任务名称 | 文本 | 保洁区域+类型 |
| 执行人 | 文本 | 保洁人员姓名 |
| 区域 | 文本 | 保洁区域 |
| 状态 | 标签 | 待执行/进行中/待抽查/已完成 |
| 抽查结果 | 标签 | 合格/不合格/待抽查 |
- **界面布局**
- 顶部:统计数字
- 中部:任务卡片列表
- 底部:抽查操作按钮
- **操作按钮**
- 「抽查」→ 标记抽查合格/不合格权限cleaning:spot-check:approve
- 「审核补录」→ 审核保洁补录申请权限cleaning:supplement:approve
- 「查看详情」→ 查看任务详情
**需求追溯**
| 功能点编号 | 功能名称 | 文档来源 | 后续服务 | 关联功能 |
|------------|----------|----------|----------|----------|
| MP-PM-03 | 保洁管理 | 02-小程序端 §9 | 不合格时重新生成任务 | 保洁管理Web端 |
### 交互流程要求
1. **页面加载**:进入页面 → 加载统计卡片 + 保洁任务列表
2. **抽查操作**:点击"抽查"→ 弹窗选择合格/不合格 → 提交 → 不合格时系统自动重新生成任务
3. **审核补录**:同巡检补录审核流程
4. **异常处理**:抽查提交失败提示;不合格重新生成任务失败提示
5. **[H1]防重复请求**
- 抽查操作:点击"抽查"后按钮 disabled + 弹窗确认按钮 loading
- 审核补录:同上
- 筛选切换时 abort 上次请求
6. **[H2]超时与加载反馈**
- 列表查询 timeout=15秒抽查/审核操作 timeout=30秒
- >3秒 wx.showLoading超时提示+重试
7. **[H3]操作确认机制**
- 抽查不合格uni.showModal({ content: '确定标记为不合格?系统将自动重新生成任务', ... })
- 抽查合格uni.showModal({ content: '确定标记为合格?', ... })
8. **[H8]操作结果反馈**
- 成功wx.showToast({ icon: 'success' }) + 刷新
- 失败wx.showToast({ icon: 'none', title: errMsg })
### 组件规范
| 元素 | 组件 | 配置参数 |
|------|------|----------|
| 抽查弹窗 | uni-popup | type="bottom" |
| 合格/不合格 | radio-group | 合格/不合格 |
| 抽查结果标签 | uni-tag | 合格:type="success", 不合格:type="error", 待抽查:type="info" |
### 校验规则
### 响应式布局
- 适配机型iPhone SE ~ iPad mini
- 触摸区域≥44px
---
### 页面4考勤管理
- **页面路径**`/pages/manager/attendance`
- **适用角色**:物业管理员/主管
- **页面元素**
- 今日出勤统计卡片(应到/实到/缺勤/异常)
- 考勤记录列表
- 异常申诉审核
- **查询条件**
- 日期筛选
- 班组筛选
- 状态筛选(正常/迟到/早退/缺卡/异常)
- **列表字段**
| 字段 | 类型 | 说明 |
|------|------|------|
| 姓名 | 文本 | 员工姓名 |
| 班组 | 文本 | 所属班组 |
| 上班时间 | 时间 | 上班打卡时间 |
| 下班时间 | 时间 | 下班打卡时间 |
| 状态 | 标签 | 正常/迟到/早退/缺卡 |
| 打卡方式 | 标签 | 蓝牙/手动/补录 |
- **界面布局**
- 顶部:统计数字
- 中部:考勤记录列表
- 底部:审核操作按钮
- **操作按钮**
- 「审核申诉」→ 审核打卡异常申诉权限attendance:appeal:approve
- 「审核补录」→ 审核考勤补录权限attendance:supplement:approve
**需求追溯**
| 功能点编号 | 功能名称 | 文档来源 | 后续服务 | 关联功能 |
|------------|----------|----------|----------|----------|
| MP-PM-04 | 考勤管理 | 02-小程序端 §9 | 补录打卡记录 | 考勤打卡Web端 |
### 交互流程要求
1. **页面加载**:进入页面 → 加载今日出勤统计 + 考勤记录列表
2. **审核申诉**:点击"审核申诉"→ 弹窗展示申诉原因+证据 → 同意/拒绝 → API调用
3. **审核补录**:同上补录审核流程
4. **异常处理**:审核失败提示
5. **[H1]防重复请求**
- 审核申诉/补录:操作按钮点击后 disabled + loading
- 筛选切换 abort 上次请求
6. **[H2]超时与加载反馈**
- 列表查询 timeout=15秒审核操作 timeout=30秒
- >3秒 wx.showLoading超时提示+重试
7. **[H3]操作确认机制**
- 审核通过uni.showModal({ content: '确定同意该申诉/补录?', ... })
- 审核拒绝uni.showModal + 必填拒绝原因
8. **[H8]操作结果反馈**
- 成功wx.showToast({ icon: 'success' }) + 刷新
- 失败wx.showToast({ icon: 'none', title: errMsg })
### 组件规范
| 元素 | 组件 | 配置参数 |
|------|------|----------|
| 统计卡片 | view | class="stat-card" |
| 状态标签 | uni-tag | 正常:type="success", 迟到:type="warning", 早退:type="warning", 缺卡:type="error" |
| 打卡方式标签 | uni-tag | 蓝牙:type="primary", 手动:type="info", 补录:type="warning" |
| 审核弹窗 | uni-popup | type="bottom" |
### 校验规则
### 响应式布局
- 适配机型iPhone SE ~ iPad mini
- 触摸区域≥44px
---
### 页面5评价管理
- **页面路径**`/pages/manager/evaluation`
- **适用角色**:物业管理员/主管
- **页面元素**
- 评价统计卡片(总评价数/平均分/待回复)
- 评价列表
- 回复操作
- **查询条件**
- 评分筛选(全部/好评/中评/差评)
- 回复状态筛选(全部/待回复/已回复)
- 时间筛选
- **列表字段**
| 字段 | 类型 | 说明 |
|------|------|------|
| 工单编号 | 文本 | 关联工单号 |
| 评分 | 数字 | 1~5分 |
| 评价内容 | 文本 | 留言摘要 |
| 评价时间 | 时间 | 提交评价时间 |
| 回复状态 | 标签 | 已回复/未回复 |
- **界面布局**
- 顶部:统计数字 + 平均分显示
- 中部:评价卡片列表
- 底部:回复操作
- **操作按钮**
- 「回复」→ 回复评价权限evaluation:list:update
- 「查看详情」→ 查看评价详情
**需求追溯**
| 功能点编号 | 功能名称 | 文档来源 | 后续服务 | 关联功能 |
|------------|----------|----------|----------|----------|
| MP-PM-05 | 评价管理 | 02-小程序端 §9 | 通知报修人 | 服务评价Web端 |
### 交互流程要求
1. **页面加载**:进入页面 → 加载评价统计 + 评价列表
2. **回复操作**:点击"回复"→ 弹窗输入回复内容 → 提交 → API调用 → 成功后通知报修人
3. **查看详情**:点击评价卡片 → 跳转评价详情页
4. **异常处理**:回复失败提示
5. **[H1]防重复请求**
- 回复操作:点击"回复"后按钮 disabled + 弹窗提交按钮 loading
- 筛选切换 abort 上次请求
6. **[H2]超时与加载反馈**
- 列表查询 timeout=15秒回复提交 timeout=30秒
- >3秒 wx.showLoading超时提示+重试
7. **[H8]操作结果反馈**
- 回复成功wx.showToast({ icon: 'success', title: '回复成功' }) + 刷新
- 回复失败wx.showToast({ icon: 'none', title: errMsg })
### 组件规范
| 元素 | 组件 | 配置参数 |
|------|------|----------|
| 评分展示 | uni-rate | :size=16, :readonly=true |
| 回复状态标签 | uni-tag | 已回复:type="success", 未回复:type="warning" |
| 回复弹窗 | uni-popup | type="bottom" |
| 回复输入 | uni-easyinput | type="textarea", maxlength=200 |
### 校验规则
| 字段 | 规则 | 错误提示 |
|------|------|----------|
| 回复内容 | 必填, 最大200字符 | "请输入回复内容" |
### 响应式布局
- 适配机型iPhone SE ~ iPad mini
- 触摸区域≥44px
---
### 页面6组织架构查看
- **页面路径**`/pages/manager/org`
- **适用角色**:物业管理员/主管
- **页面元素**
- 班组列表
- 班组成员查看
- 人员基本信息查看
- **查询条件**
- 班组筛选
- 关键词搜索(姓名/职位)
- **列表字段**
| 字段 | 类型 | 说明 |
|------|------|------|
| 班组名称 | 文本 | 班组名 |
| 班组长 | 文本 | 负责人姓名 |
| 人数 | 数字 | 班组人数 |
| 技能标签 | 标签组 | 班组主要技能 |
- **界面布局**
- 顶部:搜索框 + 筛选
- 中部:班组卡片列表 → 点击展开成员列表
- 底部:无操作栏
- **操作按钮**
- 「查看班组」→ 展开班组成员列表
- 「查看人员」→ 查看人员详情
- 「拨打电话」→ 调用手机拨号功能
**数据来源**与Web端组织架构同一数据源
**需求追溯**
| 功能点编号 | 功能名称 | 文档来源 | 后续服务 | 关联功能 |
|------------|----------|----------|----------|----------|
| MP-PM-06 | 组织架构查看 | 02-小程序端 §9 | 无 | 组织架构Web端 |
### 交互流程要求
1. **页面加载**:进入页面 → 调用API加载班组列表
2. **查看班组**:点击班组卡片 → 展开班组成员列表(手风琴模式,同时只展开一个)
3. **查看人员**:点击人员 → 跳转人员详情页(姓名、职位、电话、技能标签)
4. **拨打电话**:点击"拨打电话"→ 调用 `uni.makePhoneCall` → 拨号
5. **搜索**:输入关键词 → 实时筛选班组/人员
6. **异常处理**:拨号失败(无电话号码)→ 提示"该人员未设置联系电话"
### 前端硬性约束
> - **H1 防重复提交**
> - 搜索/筛选请求使用 pending 标志位去重,避免频繁触发 API 调用。
> - 页面卸载时(`onUnload`)必须 `abort` 未完成的请求。
> - **H2 超时处理**
> - 班组列表GET接口超时 **15秒**;超过 3 秒未响应展示 loading 动画。
> - 搜索防抖处理300ms避免高频输入触发过多请求。
> - **H8 操作反馈**
> - 数据加载成功 `uni.showToast({ icon: 'success', duration: 2000 })`,拨号失败 `icon: 'none'` 提示具体原因。
### 组件规范
| 元素 | 组件 | 配置参数 |
|------|------|----------|
| 搜索框 | uni-easyinput | placeholder="搜索姓名/职位", clearable |
| 班组卡片 | uni-card | :isFull=true, @click="toggleExpand" |
| 展开收起 | uni-icons | type="bottom"/"top" |
| 成员列表 | view | v-for, v-show="expanded" |
| 技能标签 | uni-tag | v-for, type="primary", size="mini" |
| 拨打电话按钮 | button | size="mini", type="primary", @click="makePhoneCall" |
### 校验规则
### 响应式布局
- 适配机型iPhone SE ~ iPad mini
- 班组卡片全宽
- 成员列表全宽
- 触摸区域≥44px
---
## 业务规则
1. **数据同步**管理员小程序端与Web端同一数据源操作实时同步
2. **功能简化**小程序端为简化版管理功能完整管理操作在Web端进行
3. **权限继承**管理员小程序端的权限与Web端角色权限一致通过四级权限体系控制
4. **双端审批**以下审批场景支持Web+小程序双端操作:
- 工单延期审批 ✅
- 工单分配 ✅
- 工单验收 ✅
- 打卡异常审核 ✅
- 数据补录审核 ✅
- 保洁抽查 ✅
5. **仅限物业端审批**合同审批、合同变更审批、合同续签审批、付款确认、定标审批仅Web端医院账号
6. **推送通知**:审批待办通过微信小程序推送通知管理员
7. **操作日志**:所有管理操作记录审计日志
## 状态流转
管理员小程序端的状态流转与Web端一致具体参见各模块文档
- 报修工单流转 → 参见02-功能清单-物业公司/01-在线报修.md
- 巡检任务流转 → 参见02-功能清单-物业公司/02-巡检管理.md
- 保洁任务流转 → 参见02-功能清单-物业公司/03-保洁管理.md
## 双端审批对照表
| 审批场景 | Web端 | 小程序端 | 审批角色 |
|----------|-------|----------|----------|
| 工单延期审批 | ✅ | ✅ | 物业(主管) |
| 工单分配 | ✅ | ✅ | 物业(主管) |
| 工单验收 | ✅ | ✅ | 物业(主管/报修人) |
| 合同审批 | ✅ | — | 医院账号仅Web端 |
| 合同变更审批 | ✅ | — | 医院账号仅Web端 |
| 合同续签审批 | ✅ | — | 医院账号仅Web端 |
| 付款确认 | ✅ | — | 医院账号仅Web端 |
| 定标审批 | ✅ | — | 医院账号仅Web端 |
| 打卡异常审核 | ✅ | ✅ | 物业(主管) |
| 数据补录审核 | ✅ | ✅ | 物业(主管) |
| 保洁抽查 | ✅ | ✅ | 物业(主管) |