# 管理员小程序功能 > 模块编码:property-manager > 端侧:微信小程序 > 关联文档:01-模块划分.md(v4.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端) | | 打卡异常审核 | ✅ | ✅ | 物业(主管) | | 数据补录审核 | ✅ | ✅ | 物业(主管) | | 保洁抽查 | ✅ | ✅ | 物业(主管) |