录入员工
登记新派遣员工信息
添加客户
新增用工企业信息
发起派遣
指派员工到客户单位
考勤录入
记录今日出勤情况
仓库管理
库存看板 / 出入库 / 物资管理
⚠ 云端未连接,新增/修改的员工数据将在刷新后丢失
| 姓名 | 性别 | 电话 | 客户 | 技能 | 底薪(元/月) | 时薪(元/h) | 状态 | 备注 | 操作 |
|---|---|---|---|---|---|---|---|---|---|
| {{ emp.name }} | {{ emp.gender }} | {{ emp.phone }} | {{ getClientName(emp.clientId) || '--' }} | {{ s }} | ¥{{ (emp.baseSalary||0).toLocaleString() }} | ¥{{ emp.hourlyRate }} | {{ emp.status }} |
|
暂无员工记录
| 公司名称 | 联系人 | 电话 | 地址 | 行业 | 在岗人数 | 操作 |
|---|---|---|---|---|---|---|
| {{ c.companyName }} | {{ c.contact }} | {{ c.phone }} | {{ c.address }} | {{ c.industry }} | {{ getClientActiveCount(c.id) }} |
|
暂无客户记录
| 员工 | 客户 | 岗位 | 开始日期 | 结束日期 | 底薪(元/月) | 时薪(元/h) | 状态 | 操作 |
|---|---|---|---|---|---|---|---|---|
| {{ getEmployeeName(d.employeeId) }} | {{ getClientName(d.clientId) }} | {{ d.position }} | {{ d.startDate }} | {{ d.endDate || '--' }} | ¥{{ (d.baseSalary||0).toLocaleString() }} | ¥{{ d.hourlyRate }} | {{ dispatchStatusLabel(d.status) }} |
|
暂无派遣记录
| 合同编号 | 员工 | 客户 | 类型 | 开始日期 | 结束日期 | 月薪(元) | 状态 | 操作 |
|---|---|---|---|---|---|---|---|---|
| {{ ct.contractNo }} | {{ getEmployeeName(ct.employeeId) }} | {{ getClientName(ct.clientId) }} | {{ ct.type }} | {{ ct.startDate }} | {{ ct.endDate }} | ¥{{ ct.salary }} | {{ getContractStatus(ct) }} |
|
暂无合同记录
| 日期 | 员工 | 出勤时间 | 工时 | 加班 | 备注 | 状态 | 操作 | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| {{ a.date.slice(5,7) }}月{{ a.date.slice(8) }}日 |
{{ getEmployeeName(a.employeeId).charAt(0) }}
{{ getEmployeeName(a.employeeId) }}
|
{{ a.checkIn }}-{{ a.checkOut }} — | {{ a.workHours||0 }}h — | {{ a.overtimeHours||0 }}h — |
+¥{{ a.expenseAmount }}
{{ a.notes || '—' }}
驳回:{{ a.leaveRejectReason }}
|
{{ getAttStatusLabel(a.status) }}
{{ a.leaveType }} · {{ a.halfDayType==='上午'?'上午上班':'下午上班' }}
{{ a.createdAt ? fmtDateTime(a.createdAt) : '' }}
审批:{{ a.leaveApprovedBy }} {{ a.leaveApprovedAt ? fmtDateTime(a.leaveApprovedAt) : '' }}
|
|
{{ getEmployeeName(a.employeeId).charAt(0) }}
{{ getEmployeeName(a.employeeId) }}
|
→
|
+¥{{ parseExpenseFromNotes(editAttForm.notes) }} |
|
暂无考勤记录
在上方快速录入栏添加考勤
{{ calYear }}年 {{ calMonth }}月
出勤
休假
{{ d }}
{{ cell.day }}
出勤 {{ cell.attCount + cell.halfCount }}人
休假 {{ cell.leaveCount }}人
{{ lt }}{{ cnt }}
{{ calDayDetail.date }}
👥 出勤 {{ calDayDetail.records.filter(r=>r.status==='上班'||r.status==='半天').length }} 人
🏖️ 休假 {{ calDayDetail.records.filter(r=>r.status==='休假').length }} 人
{{ getEmployeeName(r.employeeId) }} · {{ getClientByDispatch(r.dispatchId) }}
{{ r.status }} · {{ r.leaveType }} · {{ r.halfDayType==='上午'?'上午上班':'下午上班' }}
全天休假 · {{ r.leaveType }}
{{ r.halfDayType==='上午'?'上午上班':'下午上班' }} · {{ r.checkIn||'--' }}-{{ r.checkOut||'--' }} · {{ r.workHours||4 }}h
{{ r.checkIn }}-{{ r.checkOut }} · {{ r.workHours||0 }}h
· 📝{{ r.notes }}
统计员工数
{{ filteredDayStats.length }}
考勤总记录
{{ attStatsPieData.reduce((s,i)=>s+i.value,0) }}
累计休假(天)
{{ filteredDayStats.reduce((s,i)=>s+i.vacation,0).toFixed(1) }}
累计加班(h)
{{ filteredDayStats.reduce((s,i)=>s+i.overtimeTotal,0).toFixed(1) }}
📊 考勤状态分布
{{ item.label }}
{{ item.value }}
{{ item.pct }}%
🏖️ 休假天数排名
{{ i+1 }}
{{ item.name }}
{{ item.total }}天
暂无休假数据
📅 员工考勤明细汇总
| 月份 | 员工 | 上班(天) | 休假(天) | 可休(天) | 加班(h) |
|---|---|---|---|---|---|
| {{ s.month }} | {{ getEmployeeName(s.employeeId) }} | {{ s.workDays }} | {{ s.vacation }} | {{ formatLeaveQuota(s.leaveQuota) }} | {{ s.overtimeTotal }}h |
暂无统计数据
👥 系统账户管理
| 用户名 | 显示名称 | 角色 | 模块权限 | 绑定客户 | 创建时间 | 创建者 | 操作 |
|---|---|---|---|---|---|---|---|
| {{ u.username }} | {{ u.displayName || '--' }} | {{ getRoleLabel(u.role) }} | 全部权限 {{ getPermLabel(pid) }} 全部权限(默认) {{ getPermLabel(pid) }} -- | {{ getClientName(u.boundClientId) || '--' }} | {{ fmtDateTime(u.createdAt) }} | {{ u.createdBy || '系统' }} |
当前用户
|
暂无用户
| 时间 | 操作人 | 模块 | 操作 | 操作对象 | 详情 |
|---|---|---|---|---|---|
| {{ fmtDateTime(l.timestamp) }} | {{ l.displayName }} | {{ logModuleLabel(l.module) }} | {{ logActionLabel(l.action) }} |
暂无操作日志
第 {{ logPage }} / {{ logTotalPages }} 页
🏢 客户:
{{ procurementLockedClientName }}
🔒 {{ isClientRestricted ? '仅查看本客户开支' : '开支数据锁定至' }}{{ procurementLockedClientName }}
💰
备用金余额
¥{{ pettyCashBalance.toLocaleString() }}
本月充值
¥{{ pettyCashMonthTopUp.toLocaleString() }}
本月支出
¥{{ pettyCashMonthExpense.toLocaleString() }}
累计交易笔数
{{ pettyCashTransactions.length }}
{{ procurementStats.totalItems }}
开支记录
¥{{ procurementStats.pendingApprovalAmount.toLocaleString() }}
待审批金额
¥{{ procurementStats.approvedAmount.toLocaleString() }}
待结算金额
¥{{ procurementStats.salarySettled.toLocaleString() }}
工资结算
¥{{ procurementStats.pettyCashSettled.toLocaleString() }}
备用金结算
📋 备用金流水记录
📥 充值合计 ¥{{ pettyCashTotalTopUp.toLocaleString() }}
📤 支出合计 ¥{{ pettyCashTotalExpense.toLocaleString() }}
| 日期 | 类型 | 金额 | 说明 | 操作人 |
|---|---|---|---|---|
| {{ tx.date }} | {{ tx.type==='topup'?'充值':'支出' }} | {{ tx.type==='topup'?'+':'-' }}¥{{ tx.amount.toLocaleString() }} | {{ tx.description }} | {{ tx.operator }} |
| 📭 暂无备用金流水记录,请先充值或结算开支 | ||||
| 日期 | 物资名称 | 数量 | 单价 | 金额 | 支出人 | 结算权限 | 结算方式 | 票据 | 备注 | 状态 | 操作 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| {{ p.date }} | {{ p.itemName }} | {{ p.quantity }}{{ p.unit }} | ¥{{ p.unitPrice }} | ¥{{ (p.quantity * p.unitPrice).toLocaleString() }} | {{ getEmployeeName(p.purchaserEmployeeId) || '--' }} | {{ getEmployeeName(p.settlementAuthUserId) }} -- | 备用金 工资结算 |
|
{{ getProcurementStatusLabel(p) }} {{ p.status==='审批驳回'?'驳回':'审批' }}:{{ p.approvedBy || p.rejectedBy }} {{ fmtDateTime(p.approvedAt || p.rejectedAt) }} {{ fmtDateTime(p.settledAt) }} →{{ p.settleTargetMonth }}工资 |
|
🛒
暂无开支记录,点击"新增开支"开始
⚙️ 扣款与加班规则配置
{{ payrollConfig.excessDayEnabled ? '已开启' : '已关闭' }}
💡 标注上下班时间后,系统会自动判定迟到/早退
💡 加班费 = 加班小时 × 时薪 × 加班倍率;扣款在"生成薪酬表"后还可逐人手动调整
📐 工时≥12h计10.5h(扣1.5h),工时≥9h减1h午休,工时<9h按实际计
🔴 请假+旷工+休假总天数超过阈值时,每超1天扣X小时工资(半天扣一半)
🔵 其他扣款为每人固定扣款,可在薪酬调整弹窗中单独修改
💡 加班费 = 加班小时 × 时薪 × 加班倍率;扣款在"生成薪酬表"后还可逐人手动调整
📐 工时≥12h计10.5h(扣1.5h),工时≥9h减1h午休,工时<9h按实际计
🔴 请假+旷工+休假总天数超过阈值时,每超1天扣X小时工资(半天扣一半)
🔵 其他扣款为每人固定扣款,可在薪酬调整弹窗中单独修改
{{ payrollSummary.totalEmployees }}
发薪人数
{{ payrollSummary.totalHours }}h
总工时
¥{{ payrollSummary.totalOvertime.toLocaleString() }}
加班费总额
¥{{ payrollSummary.totalDeduction.toLocaleString() }}
扣款总额
¥{{ (payrollSummary.totalSettlement||0).toLocaleString() }}
开支结算(工资)
¥{{ payrollSummary.totalSalary.toLocaleString() }}
薪酬总额
| 员工 | 客户 | 岗位 | 工时 | 月薪 | 时薪 | 基本工资 | 加班费 | 扣款 | 开支结算 | 应发工资 | 实发工资 | 操作 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| {{ p.employeeName }} | {{ p.clientName }} | {{ p.position }} | {{ p.workHours }}h | ¥{{ (p.monthlyBaseSalary||0).toLocaleString() }}/月 | ¥{{ p.hourlyRate }}/h | ¥{{ p.baseSalary.toLocaleString() }} | ¥{{ p.overtimePay.toLocaleString() }} ¥0 {{ p.overtimeDetail }} | ¥{{ p.deductionTotal.toLocaleString() }} ¥0 {{ p.deductionBreakdown }} | +¥{{ p.settlementAmount.toLocaleString() }} ¥0 | ¥{{ p.netSalary.toLocaleString() }} | ¥{{ (p.actualSalary || p.netSalary).toLocaleString() }} |
暂无薪酬数据,切换月份自动生成薪酬表
💰 薪资计算规则
📐 计算方式
⏱ 计时工资:
📆 月薪制:
🔀 混合制:
基本工资 = 当月实际工时 × 时薪(多劳多得);月底额外发放底薪 + 加班 + 开支结算
基本工资 = 固定月薪(与工时无关);加班费、扣款、结算另计
基本工资 = 固定月薪 + 超出{{ systemRules.payroll.standardMonthlyHours }}h的超额工时 × 时薪;不足标准工时按固定月薪计
💪 加班规则
📉 扣款规则
{{ systemRules.payroll.excessDayEnabled ? '已开启' : '已关闭' }}
🏦 社保公积金
{{ systemRules.payroll.socialInsuranceEnabled ? '已开启' : '已关闭' }}
🧾 个税与发薪
💡 保存薪资规则后会自动同步到薪酬管理模块,重新生成薪酬表即可生效。
📅 考勤规则
⏰ 上下班时间
🍱 午休设置
📊 工时标准
{{ systemRules.attendance.remoteWorkEnabled ? '已开启' : '已关闭' }}
💡 工时≥9h自动扣除午休时间,工时<9h按实际计;半天按半天工时标准计。
⚠️ 预警规则
📄 合同与派遣预警
📦 库存预警
{{ systemRules.warehouse.lowStockAlertEnabled ? '已开启' : '已关闭' }}
💰 开支与缺勤预警
{{ systemRules.alert.absenceAlertEnabled ? '已开启' : '已关闭' }}
📤 派遣规则
基于派遣工资总额
💡 管理费比例用于计算客户账单中的服务费用;标准服务费适用于按人头计费模式。
📦 仓库规则
{{ systemRules.warehouse.highStockAlertEnabled ? '已开启' : '已关闭' }}
{{ systemRules.warehouse.batchManaged ? '已开启' : '已关闭' }}
💡 盘点周期用于提醒定期盘点;高/低库存预警在库存看板中触发颜色标记。
| 日期 | 人数 | 保洁区域 | 现场图片 | 备注 | 操作 |
|---|---|---|---|---|---|
| {{ wr.date }} | {{ wr.headCount }}人 | {{ wr.area }} |
|
|
📋
暂无工作记录,点击"新增记录"开始
🏢 客户:
🔒 {{ isClientRestricted ? '仅查看客户' : '仓库数据锁定至' }}{{ warehouseLockedClientName }}
库存明细
最近更新:{{ whRecentRecords.length>0 ? whRecentRecords[0].date : '--' }}
| SKU | 物资名称 | 分类 | 规格 | 库位 | 供应商 | 当前库存 | 单位 | 安全库存 | 最小库存 | 最近入库 | 最近出库 | 状态 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| {{ item.sku || '--' }} | {{ item.itemName }} | {{ item.catName }} | {{ item.spec || '--' }} | {{ item.locationName || '--' }} | {{ item.supplier }} |
{{ item.balance }}
|
{{ item.unit }} | {{ item.safetyStock || '--' }} | {{ item.minStock || '--' }} | {{ item.lastInDate }} | {{ item.lastOutDate }} | {{ item.status==='out'?'缺货':item.status==='danger'?'低于最小':item.status==='warning'?'低于安全':'正常' }} |
库存预警({{ whAlerts.length }} 项)
以下物资库存已低于安全线,建议尽快补货
{{ a.itemName }}
{{ a.balance }}
{{ a.reason }}
建议补货 {{ (a.safetyStock||0)*2 - a.balance > 0 ? (a.safetyStock||0)*2 - a.balance : 0 }} {{ a.unit }}
最近流水(20 条)
| 日期 | 类型 | 物资 | 数量 | 库位 | 经办人 |
|---|---|---|---|---|---|
| {{ r.date }} | 入库 出库 其他 | {{ r.itemName }} | {{ r.quantity }} | {{ r.locationName || '--' }} | {{ r.operator || '--' }} |
暂无流水记录
| SKU编码 | 物资名称 | 规格型号 | 分类 | 单位 | 安全库存 | 最小库存 | 常用库位 | 归属客户 | 操作 |
|---|---|---|---|---|---|---|---|---|---|
| {{ item.sku }} | {{ item.name }} | {{ item.spec || '--' }} | {{ getCategoryName(item.categoryId) || '--' }} | {{ item.unit }} | {{ item.safetyStock || '--' }} | {{ item.minStock || '--' }} | {{ getLocationName(item.defaultLocationId) }} | {{ item._clientName || '--' }} |
🏷️
暂无物资主数据,点击新增开始
| 库位编码 | 仓库 | 库区 | 货架 | 货位 | 状态 | 操作 |
|---|---|---|---|---|---|---|
| {{ loc.code }} | {{ loc.warehouse }} | {{ loc.zone }} | {{ loc.shelf }} | {{ loc.position || '--' }} | {{ loc.status || '启用' }} |
📍
暂无库位数据
| 供应商名称 | 联系人 | 联系电话 | 地址 | 操作 |
|---|---|---|---|---|
| {{ sup.name }} | {{ sup.contact || '--' }} | {{ sup.phone || '--' }} | {{ sup.address || '--' }} |
🏭
暂无供应商
| 日期 | SKU | 物资名称 | 数量 | 单位 | 库位 | 经办人 | 客户 | 备注 | 操作 |
|---|---|---|---|---|---|---|---|---|---|
| {{ r.date }} | {{ r.sku || '--' }} | {{ r.itemName }} | {{ r.quantity }} | {{ r.unit }} | {{ r.locationName || '--' }} | {{ r.operator || '--' }} | {{ r._clientName || '--' }} |
📥
暂无入库记录
| 日期 | SKU | 物资名称 | 数量 | 单位 | 库位 | 经办人 | 客户 | 备注 | 操作 |
|---|---|---|---|---|---|---|---|---|---|
| {{ r.date }} | {{ r.sku || '--' }} | {{ r.itemName }} | {{ r.quantity }} | {{ r.unit }} | {{ r.locationName || '--' }} | {{ r.operator || '--' }} | {{ r._clientName || '--' }} |
📤
暂无出库记录
| 调拨单号 | 日期 | 物资 | 数量 | 调出库位 | 调入库位 | 状态 | 操作 |
|---|---|---|---|---|---|---|---|
| {{ tr.transferNo }} | {{ tr.date }} | {{ tr.itemName }} | {{ tr.quantity }}{{ tr.unit }} | {{ tr.fromLocationName || '--' }} | {{ tr.toLocationName || '--' }} | {{ tr.status }} |
🔄
暂无调拨记录
| 盘点单号 | 盘点日期 | 物资 | 账面数 | 实盘数 | 差异 | 库位 | 状态 | 操作 |
|---|---|---|---|---|---|---|---|---|
| {{ ck.checkNo }} | {{ ck.checkDate }} | {{ ck.itemName }} | {{ ck.bookQty }} | {{ ck.status==='已完成' ? ck.actualQty : '--' }} | {{ ck.status==='已完成' ? (ck.variance>0?'+'+ck.variance:ck.variance) : '--' }} | {{ ck.locationName || '--' }} | {{ ck.status }} |
📋
暂无盘点记录
| 日期 | 类型 | SKU | 物资名称 | 数量 | 单位 | 库位 | 经办人 | 客户 | 备注 | 操作 |
|---|---|---|---|---|---|---|---|---|---|---|
| {{ r.date }} | {{ whTypeLabel(r.type) }} | {{ r.sku || '--' }} | {{ r.itemName }} | {{ r.quantity }} | {{ r.unit }} | {{ r.locationName || '--' }} | {{ r.operator || '--' }} | {{ r._clientName || '--' }} |
📈
暂无流水记录
📖 仓库管理 WMS 使用教程
本教程按业务流程逐步讲解各功能模块的使用方法,帮助您快速上手仓库管理系统。
{{ s.icon }}
{{ s.title }}
🎬 动画演示
{{ s.demoTitle || '交互演示' }}