兼职=当日排班「班次时长 × 时薪」合计(计划口径,与实际出勤无关);全职=当日已排班的去重人数。
暂无人员打卡在岗
手动排班
| 员工 \ 日期 | {{ d.label }} {{ d.date.slice(5) }} |
|---|---|
| {{ staffName(oid) }} | {{ schedCell(shop._id, oid, d.date).shiftName }} + |
| 本周无排班 |
导入排班
| 员工 \ 日期 | {{ d.label }} {{ d.date.slice(5) }} |
|---|---|
| {{ staffName(oid) }} | {{ c.shiftName }} + |
| 本周无排班 |
班次列表
班次列表
| 名称 | 开始 | 结束 | 操作 |
|---|---|---|---|
| {{ t.name }} | {{ t.start }} | {{ t.end }} | |
| 暂无班次 | |||
员工报班库
员工在小程序「我的」-「可上班时间」上报班;此处按 员工 / 日期 分行,如实展示该员工当天可上的门店与班次(有即显示店名/班名,无则留空)。
| 姓名 | 日期 / 周 | 门店 | 班次 | 操作 |
|---|---|---|---|---|
| {{ g.name }} | {{ dateLabel(row.date) }} | {{ s }} — | {{ t }} — | |
| 暂无报班记录 | ||||
排班需求
每个门店一行,点击某天弹出所有班次填写人数;每门店填好后点「保存本周需求」。
{{ d.date.slice(5) }}
自动排班 / 一键补人
基于「排班需求」+ 员工报班,整周所有门店一键排班,无需逐个选择
排班结果
| 员工 \ 日期 | {{ d.label }} {{ d.date.slice(5) }} |
|---|---|
| {{ staffName(oid) }} | {{ schedCell(shop._id, oid, d.date).shiftName }} + |
| 本周无排班 |
考勤统计
{{ attStatsMonth }}({{ attMonthStats.startDate }} ~ {{ attMonthStats.endDate }})| 日期 | 状态 | 姓名 | 门店 | 上班 | 下班 | 工时 | 迟到/早退 | 缺卡提示 |
|---|---|---|---|---|---|---|---|---|
| {{ p.date }} |
{{ t.text }}
|
{{ p.name }} | {{ p.shopName || '-' }} |
{{ s.in || '-' }}
-
|
{{ s.out || '-' }}
-
|
{{ p.approvalText }} {{ fmtHour(p.hours) }}h - | 迟到 {{ p.lateMin }} 分 早退 {{ p.earlyMin }} 分 - | — 缺下班卡 缺上班卡 — |
| 暂无数据 | ||||||||
选择年月后点击「刷新」加载考勤统计
| 姓名 | 日期 | 上班时间 | 下班时间 | 上班门店 | 状态 | 理由 | 审批人 | 审批时间 | 操作 |
|---|---|---|---|---|---|---|---|---|---|
| {{ r.name }} | {{ r.date }} |
{{ s.in || '-' }}
--
|
{{ s.out || '-' }}
--
|
{{ r.shopName }} | 待审 通过 拒绝 {{ r.status }} | {{ r.reason || '-' }} | {{ r.auditName || r.approvedBy || '-' }} | {{ fmtDT(r.approvedAt) }} | 已通过 已拒绝 已审批 |
| 当日暂无异常打卡 | |||||||||
说明:定位异常(与排班门店不符/超围栏/无坐标)需审批通过后才计入正常工时;已审批的记录会保留在此列表,便于追溯。
- {{ u.name }} {{ u.phone || '' }}
| 日期 | 姓名 | 类型 | 状态 | 班次 | 上班门店 | 上班卡时间 | 下班卡时间 | 工时 | 操作 |
|---|---|---|---|---|---|---|---|---|---|
| {{ r.date }} | {{ r.name }} | {{ r.type }} |
{{ t.text }}
手动
|
{{ r.shiftName ? r.shiftName + ' ' : '' }}{{ r.shiftTime }} - | {{ r.shopName || '-' }} |
{{ s.in || '-' }}
--
|
{{ s.out || '-' }}
--
|
{{ r.approvalText }} {{ fmtHour(r.hours) }}h - | |
| {{ attDetailRecords.length ? '该状态下暂无记录' : '暂无打卡记录' }} | |||||||||
手动补卡
- {{ u.name }} {{ u.phone || '' }}
手动补卡记录
共 {{ manualRecovers.length }} 条| 员工 | 打卡日期 | 打卡类型 | 打卡时间 | 门店 | 补卡人 | 补卡时间 | 原因 |
|---|---|---|---|---|---|---|---|
| {{ r.name || '未知' }} | {{ r.date }} | {{ r.type }} | {{ r.time }} | {{ r.shopName || '-' }} | {{ r.manualBy || '-' }} | {{ fmtDT(r.createdAt) }} | {{ r.reason || '' }} |
| 暂无手动补卡记录(如无数据,说明该月尚未做手动补卡) | |||||||
| 员工 | 类型 | 日期 | 上班时间 | 下班时间 | 门店 | 原因 | 申请时间 | 审批人 | 审批时间 | 状态 | 操作 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| {{ r.name || '未知' }} | {{ recoverTypeText(r) }} |
{{ r.date }} | {{ r.inTime || '-' }} | {{ r.outTime || '-' }} | {{ r.shopName || '-' }} | {{ r.reason || '' }} | {{ fmtDT(r.createdAt) }} | {{ r.auditName || '-' }} | {{ fmtDT(r.auditAt) }} | 待审 通过 拒绝 | - | |
| 暂无补卡申请 | ||||||||||||
| 员工 | 日期 | 门店 | 类型 | 排班下班 | 实际打卡 | 实际工时(h) | 加班时长(h) | 审批人 | 审批时间 | 状态 | 操作 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| {{ o.name || '未知' }} | {{ o.date }} | {{ o.shopName || '-' }} | 超时待核 加班 | {{ o.category==='verify' ? ((o.schedEnd||'').slice(0,5) || '-') : '-' }} | {{ o.category==='verify' ? ((o.outTime||'').slice(0,5) || '-') : '-' }} | {{ o.totalHours != null ? fmtHourVal(o.totalHours) : '-' }} | {{ o.overtimeHours != null ? fmtHourVal(o.overtimeHours) : '-' }} | {{ o.auditName || '-' }} | {{ fmtDT(o.auditAt) }} | 待审 通过 拒绝 | - | |
| {{ overtimesName ? '没有匹配的加班申请' : '暂无加班申请' }} | ||||||||||||
| 日期 | 姓名 | 门店 | 上班 | 下班 | 实际工时(h) | 缺口(h) | 状态 | 操作 |
|---|---|---|---|---|---|---|---|---|
| {{ w.date }} | {{ w.name }} | {{ w.shopName || '--' }} | {{ w.inTime }} | {{ w.outTime }} | {{ fmtHourVal(w.hours) }} | {{ fmtHourVal(w.deficit) }} | {{ w.status }} |
| 员工 | 加班工时(h) | 操作 |
|---|---|---|
| {{ o.name || '未知' }} | {{ fmtHourVal(o.total) }} | |
| 暂无数据 | ||
| 姓名 | 角色 | 类型 | 状态 | 手机 | 时薪/月薪 | 员工类型 | 所属门店 | 操作 |
|---|---|---|---|---|---|---|---|---|
| {{ u.name }} | 超管 管理员 店长 店员 | 全职 兼职 | 在职 禁用 | {{ u.phone || '-' }} | {{ u.salaryType==='monthly' ? ('¥' + (u.monthlySalary || 0)) : ('¥' + (u.hourlyRate || 0) + '/h') }} | 总部 门店 | {{ (u.shopIds || []).map(id => shopName(id)).join(', ') || '全门店' }} | |
| {{ empSearch ? '没有匹配的员工' : '暂无员工,请让员工扫码加入' }} | ||||||||
员工加入二维码
把码发给员工,员工扫码后会跳到小程序填写姓名和手机,自动加入员工库
二维码文件ID:{{ qrFileID }}(新窗口已打开)
也可以去云开发「云存储」容器 staff-qr 下载
门店管理
| 门店名称 | 归属分组 | 地址 | GPS | 熨烫工艺 | 顾客提示 | 状态 | 操作 |
|---|---|---|---|---|---|---|---|
| {{ s.name }} | {{ groupName(s.groupId) || '未分组' }} | {{ s.address || '-' }} | {{ s.lat ? s.lat + ', ' + s.lng : '未定位' }} | {{ (s.craftOptions && s.craftOptions.length) ? s.craftOptions.join(' / ') : '默认' }} | {{ s.customerNotice || '-' }} | {{ s.enabled !== false ? '启用' : '停用' }} | |
| 暂无门店,点「新增门店」添加 |
桌台计时
门店ID:{{ tableShopId }}暂无桌台,选择门店后点「+ 加桌」创建
排队叫号
等待队列
| 号码 | 桌号 | 工艺 | 操作 |
|---|---|---|---|
| {{ q.number }} | {{ q.tableNo || '-' }} | {{ q.craftType || '-' }} | |
| 暂无等待队列 | |||
今日已完成 / 已跳过
| 号码 | 桌号 | 工艺 | 状态 |
|---|---|---|---|
| {{ q.number }} | {{ q.tableNo || '-' }} | {{ q.craftType || '-' }} | {{ q.status === 'done' ? '已完成' : '已跳过' }} |
| 暂无 | |||
选择门店后查看排队队列
操作记录
| 桌台 | 操作人 | 动作 | 详情 | 开始时间 | 结束时间 | 时长 |
|---|---|---|---|---|---|---|
| {{ s.tableName || '—' }} | {{ s.userName || '—' }} | {{ s.actionText || s.type }} | {{ s.detail || '' }} | {{ s.startTime || '' }} | {{ s.endTime || '' }} | {{ s.duration ? s.duration + ' 分钟' : '—' }} |
| 暂无记录 | ||||||
兼职工资
年 月 {{ attSumText(parttimeRows) }}| 姓名 | 考勤确认 | 员工类型 | 类别 | 时薪 | 工时 | 应发工资 | 电话客服 | 其他奖励 | 罚款 | 其他扣除 | 其他 | 实发工资 | 各门店分摊工资 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| {{ p.name }} | {{ p._att && p._att.text }} | 总部 门店 | {{ p.category || '兼职' }} | {{ p.hourlyRate }} | {{ fmtHour(p.hours) }} | {{ p.salary }} | {{ finalOf(p) }} | {{ p.shopAllocation }} | |||||
| 该月暂无兼职员工数据 |
时薪、工时、应发工资、各门店分摊按打卡自动计算;电话客服、其他奖励、罚款、其他扣除、其他由财务手工填写后点保存。「考勤确认」只表示员工是否确认了本月工时,与这些工资项无关;点标签可撤销或代为确认。
全职工资
年 月 {{ attSumText(fulltimeRows) }}| 姓名 | 考勤确认 | 员工类型 | 基本工资 | 所属门店 | 业绩达标 | 日常 | 验卷后台客服 | 电话客服 | 新媒体运营 | 美团客服/排班/管理/采购 | 微信客服/团建/管理 | 超业绩奖金 | 奖励 | 应发工资 | 罚款 | 其他应加 | 其他应扣 | 实发工资 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| {{ p.name }} | {{ p._att && p._att.text }} | 总部 门店 | {{ p.monthlySalary }} | {{ fulltimePayable(p) }} | {{ fulltimeReal(p) }} | |||||||||||||
| 该月暂无全职员工数据 |
基本工资取自员工月薪(只读);其余项目由管理员手工填写后点保存,按月存储。美团/微信两组为合并输入(填写总值,保存后自动归入首项)。应发工资=基本工资+各加项合计;实发工资=应发−罚款−其他应扣项+其他应加项。「考勤确认」只表示员工是否确认了本月工时,与这些工资项无关;点标签可撤销或代为确认。
门店支出
年 月| 门店 | {{ c }} | 合计 |
|---|---|---|
| {{ r.shop }} | {{ fmtYuan(r.cats[c] || 0) }} | {{ fmtYuan(r.total) }} |
| 合计 | {{ fmtYuan(finStatByCat[c] || 0) }} | {{ fmtYuan(finStatExpense) }} |
列随当月实际出现的用途分类自动增减。
老板分组管理
分组用于"两套账":门店、员工、收支、工资都归属某个分组(A/B),各自独立核算。
收支记账
年 月¥{{ fmtYuan(finGroupStat(g._id).income) }} 支出
¥{{ fmtYuan(finGroupStat(g._id).expense) }} 净额
¥{{ fmtYuan(finGroupStat(g._id).income - finGroupStat(g._id).expense) }}
| 日期 | 类型 | 归属分组 | 渠道 | 用途 | 门店分配 | 金额 | 收款人/经手人 | 明细 | 备注 | 操作 |
|---|---|---|---|---|---|---|---|---|---|---|
| {{ r.date }} | 收入 支出 | {{ r.groupName || '未分组' }} / {{ r.ownerMember }} | {{ r.channelName || '-' }} | {{ r.categoryName || '-' }} | {{ finShopsText(r) }} | ¥{{ fmtYuan(r.amount) }} | {{ r.staff || '-' }} | {{ r.detail || '-' }} | {{ r.note || '-' }} | |
| {{ finLoading ? '加载中…' : '该月暂无记录' }} | ||||||||||
报销管理
当前审批人:{{ rbAuditor.auditorName || '未设置' }}| 日期 | 报销人 | 门店 | 分类 | 金额 | 事由 | 凭证 | 状态 | 审批 | 操作 | 支付时间 |
|---|---|---|---|---|---|---|---|---|---|---|
| {{ r.date }} | {{ r.staffName }} | {{ r.shopName }} | {{ r.category }} | ¥{{ fmtYuan(r.amount) }} | {{ r.detail }} | 待审 已通过 | {{ rbAuditText(r) }} | 仅「{{ r.auditorName }}」可审 仅「{{ r.auditorName }}」可标付 | {{ rbPaidText(r) }} | |
| 暂无待办 | ||||||||||
| 日期 | 报销人 | 门店 | 分类 | 金额 | 事由 | 凭证 | 状态 | 审批留痕 | 操作 | 支付时间 |
|---|---|---|---|---|---|---|---|---|---|---|
| {{ r.date }} | {{ r.staffName }} | {{ r.shopName }} | {{ r.category }} | ¥{{ fmtYuan(r.amount) }} | {{ r.detail }} | {{ rbStatusText(r) }} | {{ rbAuditText(r) }} | 仅「{{ r.auditorName }}」可操作 - | {{ rbPaidText(r) }} | |
| 本月暂无完结记录 | ||||||||||
账号管理
| 用户名 | 所属租户 | 可访问模块 | 关联员工 | 操作 |
|---|---|---|---|---|
| {{ a.username }} | {{ a.tenantName }} 平台超管 | 全部模块 {{ moduleName(p) }} | {{ a.bindName }} - | |
| 暂无账号,点击右上角「新增账号」创建 | ||||
租户管理
共 {{ tenants.length }} 个租户 · 顶栏可切换查看各租户数据操作日志
| 时间 | 操作人 | 操作 | 关键参数 | 结果 |
|---|---|---|---|---|
| {{ opLogTime(log.time) }} | {{ log.username }} | {{ opActionName(log.action) }} | {{ opLogParamText(log) }} | {{ log.ok ? '成功' : '失败' }} |
| 暂无操作日志 | ||||
京公网安备11011302008390号