我的工作台
{{ workbenchGreeting }},{{ currentUser.name || '同事' }}
{{ currentUser.dept || '未设置部门' }} · {{ currentUser.role || '未设置角色' }} · {{ workbenchDateText }}
⌕
没有找到可访问的功能
审批中心
集中处理合同、开票、付款和行政人事审批。
暂无符合条件的审批事项
审批内容
审批过程
完整审批环节及耗时{{step.title}}{{step.status}} 处理人:{{step.owner}}环节用时 {{approvalDetailStepDuration(step)}}
开始:{{step.started_at || '-'}}结束:{{step.ended_at || (step.status==='已关闭' && approvalCenterDetail.completed_at ? approvalCenterDetail.completed_at : '进行中')}}意见:{{step.note}}
暂无审批详情
个人待办
优先处理和你直接相关的消息、任务与审批。
我的付款申请
最近 5 条我发起的付款申请及审批进度。
暂无付款申请
待我审批
需要我审批的付款申请。
暂无待审批付款申请
我的便签
记录临时事项,按账号保存在本机。
{{ note.text }}
{{ note.created_at }}
暂无便签
常用入口
把高频工作放在手边,按账号保存。
最近打开
像浏览器一样回到刚才的页面。
暂无最近打开页面
选择你最常用的功能,保存后只显示在当前账号的“我的工作台”。
选择要显示在“我的工作台”的模块,配置会跟随当前账号云端保存。
审批中心
集中处理与我相关的合同、开票、付款和行政人事审批。
{{card.label}}
{{card.value}}
部门工作台
{{ canEnterDept('marketing') ? '可用' : '无权限' }}
市场部
报价、合同、进度追踪与客户管理
智能报价
合同审批 · 签订 · 归档
合同下单 · 合同管理
进度查询(合同·采样·报告全流程)
CRM 客户关系管理未上线
{{ canEnterDept('sampling') ? '可用' : '无权限' }}
采样室
任务派发、排期派单、现场执行、资源台账
任务派发 · 主管视图
排期时间线 · 智能排期
任务单生成 · 现场记录
现场踏勘 · 采样统计
仪器台账 · 车辆管理
{{ canEnterDept('lab') ? '可用' : '无权限' }}
实验室
样品流转、检测任务、耗材/设备台账
流转单管理 · 样品管理
检测任务 · 我的任务
超时任务 · SLA 规则
提交原始记录 · 实验室统计
耗材管理 · 设备台账
{{ canEnterDept('report') ? '可用' : '无权限' }}
报告室
AI 智能生成检测报告、报告审核归档
智能生成报告(数据库 / OCR)
待生成报告队列
任务流转看板
报告任务流(编制·三审·签发·归档)
规划中
行政部
员工、考勤、办公用品与会议室
员工档案未上线
考勤管理未上线
办公用品未上线
会议室预定未上线
{{ canEnterDept('finance') ? '可用' : '无权限' }}
财务部
银行流水、科目归类、财务看板
财务总览看板
银行流水 · 收支查询
待归类点审 · 智能分类
供应商白名单
发票管理
未收款合同
{{ canEnterDept('knowledge') ? '可用' : '无权限' }}
企业知识库
标准、制度、SOP、培训、模板与案例
标准规范 · 作业指导书
管理制度 · 培训资料
表单模板 · 历史案例
上传 / 搜索 / 下载
{{ canEnterDept('bizDashboard') ? '可用' : '无权限' }}
CEO驾驶舱
业务 / 生产 / 财务多维度数据分析
业务看板(合同·签约金额)
生产看板(采样·检测·报告)
财务看板(收支·成本)
⓵UI 已上线,部分指标占位中
{{ (rtEdit.mode === 'view' ? '👁 在线查看 - ' : '✏️ 在线编辑 - ') + (rtEdit.name || '') }}
关闭
📌 我的报告任务
刷新
只显示状态机轮到您处理的报告 · 共 {{ myDraftingTasks.length }} 条
| 报告编号 | 委托方 | 受检方 | 状态 | 采样室提交 | 实验室提交 | 报告室收纸质 | 操作 |
|---|---|---|---|---|---|---|---|
| {{ rt.task_no }} | {{ rt.client_unit || '—' }} | {{ rt.company_name_full || rt.company_name }} |
|
|
|
采样 |
|
| 暂无轮到您处理的报告任务 | |||||||
报告编号: {{ workspaceData.task.task_no }}
委托方: {{ workspaceData.sampling_task.client_unit || '—' }}
受检方: {{ workspaceData.sampling_task.company_name || '—' }}
编制人: {{ workspaceData.task.drafter_name || '—' }}
📋 采样信息
{{ workspaceData.sampling_passed_count||0 }} / {{ workspaceData.sampling_file_count||0 }} 已审
采样点位 ({{ workspaceData.sampling_points.length }} 个) ·
现场照片 {{ workspaceData.sampling_photo_count }} 张
📦 下载现场照片 zip
| 点位 | 样品类型 | 检测项目 | 点数 | 天数 | 频次 | 执行标准 |
|---|---|---|---|---|---|---|
| {{ p.point_name || '—' }} | {{ p.sample_type || '—' }} | {{ p.test_items || '—' }} | {{ p.point_count }} | {{ p.days }} | {{ p.frequency }} | {{ p.standard || '—' }} |
采样表格 ({{ workspaceData.sampling_files.length }} 张) — 编制人只读 + 审核
| 文件名 | 主管审核 | 操作 | 编制人审核时间 |
|---|---|---|---|
| {{ f.filename }} |
|
|
{{ f.drafter_audited_at || '—' }} |
采样室还未生成任何表格
现场照片 (按点位)
📍 {{ grp.point_name }}
· {{ grp.photos.length }} 张
异常: {{ grp.abnormal_reason || '—' }}
现场暂无上传照片
🧪 实验室检测信息
{{ workspaceData.lab_passed_count||0 }} / {{ workspaceData.lab_file_count||0 }} 已审
实验室原始记录表 ({{ workspaceData.lab_files.length }} 张) — 编制人只读 + 审核
| 文件名 | 实验室三级审核 | 操作 | 编制人审核时间 |
|---|---|---|---|
| {{ f.filename }} |
分析: {{ f.supervisor_audit.analyst.join('/') }}
校核: {{ f.supervisor_audit.reviewer.join('/') }}
审核: {{ f.supervisor_audit.approver.join('/') }}
|
|
{{ f.drafter_audited_at || '—' }} |
实验室还未生成原始记录表
✅ 报告室审核(编制人确认前置条件)
进度: {{ workspaceReviewedCount }} / {{ (workspaceData.review_items||[]).length }} 已勾选
🤖 全部审核通过,可进入智能生成报告环节
点击下方按钮跳转到「智能编制报告」页面,任务号已自动带入,你可以选择对应的报告模板后一键生成.
⏳ 还不能进入生成报告环节: {{ workspaceGateReason }}。
所有采样表格 + 实验室原始记录表都点「已审」+ 6 项前置条件全部勾选后,才能开启「一键生成报告」按钮。
📋 待生成报告
刷新
扫描所有「采样已完成」的任务,按齐全度分类
{{ genQueue.stats.ready_count || 0 }}
✅ 可生成
{{ genQueue.stats.pending_receive_count || 0 }}
📦 等收纸质
{{ genQueue.stats.waiting_lab_count || 0 }}
🧪 缺实验室上交
{{ genQueue.stats.waiting_sampling_count || 0 }}
📝 缺采样上交
| 任务号 | 受检单位 | 项目 | 采样收到 | 实验室收到 | 操作 |
|---|---|---|---|---|---|
| {{ t.task_no }}
⚠ {{ t.data_quality.warnings.join(';') }}
|
{{ t.company_name }} | {{ t.project_name }} | {{ t.received_sampling_at || '—' }} | {{ t.received_lab_at || '—' }} |
|
| 暂无可生成的任务 | |||||
💡 这些任务前两个部门已在系统点了"上交",但纸质版还没送到报告室。延迟时长用于度量前面部门的工作质量。
| 任务号 | 受检单位 | 采样:线上提交 | 实验室:线上提交 | 接收纸质(点击记录时间) |
|---|---|---|---|---|
| {{ t.task_no }} | {{ t.company_name }} |
{{ t.sampling_records_submitted_at || '—' }}
⏱ 滞后 {{ formatPendingDelay(t.sampling_pending_minutes) }}
|
{{ t.lab_records_submitted_at || '—' }}
⏱ 滞后 {{ formatPendingDelay(t.lab_pending_minutes) }}
|
✓ 采样:{{ t.received_sampling_at }}
✓ 实验室:{{ t.received_lab_at }}
|
| 无等收纸质的任务 | ||||
| 任务号 | 受检单位 | 项目 | 采样收到 | 检测进度 | 操作 |
|---|---|---|---|---|---|
| {{ t.task_no }} | {{ t.company_name }} | {{ t.project_name }} | {{ t.received_sampling_at || '—' }} |
|
|
| 无 | |||||
| 任务号 | 受检单位 | 项目 | 采样完成时间 | 说明 |
|---|---|---|---|---|
| {{ t.task_no }} | {{ t.company_name }} | {{ t.project_name }} | {{ t.sampling_completed_at || '—' }} | 需采样室上交原始记录 |
| 无 | ||||
💡 不等整单提交,只要采样/实验室逐条审核通过,报告室就能实时看到。点击任务行可展开看「已审核明细」。
{{ auditRealtime.stats.all_passed || 0 }}
✅ 全部审核通过
{{ auditRealtime.stats.in_progress || 0 }}
⏳ 部分通过
{{ auditRealtime.stats.no_audit_yet || 0 }}
⌛ 尚未审核
| 任务号 | 受检单位 | 项目 | 采样审核 (已通过/总数) | 实验室审核 (已通过/总数) | 总进度 | 操作 | ||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| {{ auditExpanded[t.task_no] ? '▼' : '▶' }}{{ t.task_no }} | {{ t.company_name }} | {{ t.project_name }} |
|
|
{{ t.overall_passed }}/{{ t.overall_total }} |
|
||||||||||||||||||
|
📝 采样审核明细 ({{ t.sampling.passed }}/{{ t.sampling.total }})
尚无审核表格
🧪 实验室检测审核明细 ({{ t.lab.passed }}/{{ t.lab.total }})
尚无检测任务
|
||||||||||||||||||||||||
| 暂无任务,等待采样/实验室录入 | ||||||||||||||||||||||||
受检单位: {{ auditDetailTask.company_name }}
项目: {{ auditDetailTask.project_name }}
采样状态: {{ auditDetailTask.sampling_status }}
采样完成日: {{ auditDetailTask.sampling_completed_at || '—' }}
{{ auditDetailTask.sampling.passed }} / {{ auditDetailTask.sampling.total }}
📝 采样审核通过
{{ auditDetailTask.lab.passed }} / {{ auditDetailTask.lab.total }}
🧪 实验室检测通过
📝 采样表格审核明细
无
🧪 实验室检测审核明细
无
🔄 任务流转看板
刷新
每张任务当前阶段 + 停留时长 + 负责人
卡 > 小时飘红
{{ kanban.stats.total || 0 }}
总任务
{{ kanban.stats.stuck || 0 }}
⚠ 卡住
{{ kanban.stats.completed || 0 }}
✅ 已完成
{{ dept }}:{{ c }}
按部门分布
| 任务号 | 受检单位 | 项目 | 当前阶段 | 部门 | 负责人 | 停留时长 | 最近完成节点 |
|---|---|---|---|---|---|---|---|
| {{ t.task_no }} | {{ t.company_name }} | {{ t.project_name }} |
|
{{ t.current_dept || '—' }} | {{ t.owner || '—' }} | {{ t.stuck_hours }} h | {{ t.last_done_at || '—' }} |
| 暂无任务 | |||||||
报告室管理 · 报告运营中心
资料齐套、风险预警、人员负荷和工作量统一管理,不改变原报告状态机。
{{ x.t }}
{{ x.v || 0 }}
节点时效预警当前节点超过对应时效阈值
{{ reportOperations.sla.items.slice(0,3).map(x=>x.task_no+' '+x.status+' 已停留 '+x.hours+'h').join(';') }}
暂无节点超时任务
数据质量中心重复编号与历史台账完整性
重复报告号 {{(reportOperations.quality||{}).duplicate_report_no?.length||0}} · 重复任务号 {{(reportOperations.quality||{}).duplicate_task_no?.length||0}} · 历史缺字段 {{(reportOperations.quality||{}).incomplete_historical?.length||0}}
风险与缺件任务
| 任务号 | 当前状态 | 优先级 | 承诺日 | 待补资料 |
|---|---|---|---|---|
| {{r.task_no}} | {{r.status}} | {{r.priority}} | {{r.due_date||'—'}} | {{(r.gaps||[]).join('、')||'交付超期'}} |
| 暂无风险任务 | ||||
编制人负荷建议
{{p.name}}{{p.pending_score}} 分
{{p.suggestion_reason}}
暂无可用负荷数据
月度工作量结算生成待结算快照 确认本月结算 生成后锁定任务及分数快照;已结算不被后续任务编辑覆盖。
📊 报告室看板
刷新
进度 · 产能 · 产值 · 绩效(钻取明细见右侧入口)
→ 报告任务
→ 智能编制
→ 报告室管理
📋 报告任务总数
{{ reportDashboard.kpi.total }}
⏳ 编制 + 审核中
{{ (reportDashboard.kpi.drafting||0) + (reportDashboard.kpi.reviewing||0) }}
编制 {{ reportDashboard.kpi.drafting||0 }} · 审核 {{ reportDashboard.kpi.reviewing||0 }}
✅ 累计已签发
{{ reportDashboard.kpi.issued_total }}
本月 {{ reportDashboard.kpi.issued_this_month }} · 本年 {{ reportDashboard.kpi.issued_this_year }}
⌛ 平均出报告天数
{{ reportDashboard.kpi.avg_days_to_issue }}天
样本数 {{ reportDashboard.kpi.timed_sample_size }}
💰 累计签发产值
¥{{ formatMoney(reportDashboard.kpi.revenue_issued_total) }}
📅 本年签发产值
¥{{ formatMoney(reportDashboard.kpi.revenue_issued_year) }}
📆 本月签发产值
¥{{ formatMoney(reportDashboard.kpi.revenue_issued_month) }}
📊 状态分布
| 状态 | 数量 | 占比 |
|---|---|---|
| {{ s.name }} | {{ s.value }} | {{ ((s.value/(reportDashboard.kpi.total||1))*100).toFixed(1) }}% |
📈 月度签发趋势(最近12月)
| 月份 | 签发数 | 条形 |
|---|---|---|
| {{ m.month }} | {{ m.cnt }} |
👤 编制人产能排行
| 名次 | 编制人 | 承接总数 | 已编制 | 已签发 | 在编中 |
|---|---|---|---|---|---|
| {{ i+1 }} | {{ d.name }} | {{ d.total }} | {{ d.drafted }} | {{ d.issued }} | {{ d.in_progress }} |
| 暂无编制人数据 | |||||
🏅 编制人工作量统计(绩效)
按月
按年
查询
| 名次 | 编制人 | 本期已签发 | 计分总分 | 当前在制 |
|---|---|---|---|---|
| {{ i+1 }} | {{ d.name }} | {{ d.issued }} | {{ d.score_total }} | {{ d.in_progress }} |
| 本期暂无编制人工作量数据 | ||||
统计口径:状态为已签发/待签收/已签收的报告,期间按 签发时间→报告日期→创建时间 依次兜底(历史报告补录签发时间后自动归入正确月份);计分取快照(有人工调整分时取调整分);「当前在制」为待编制+编制中,与期间无关
🔍 审核环节产能
{{ g.role }} (top 10)
| {{ it.name }} | {{ it.cnt }} |
| 无 | |
{{ reportTaskStats[s] || 0 }}
{{ s }}
{{ reportTaskStats['合同编号缺失'] || 0 }}
合同编号缺失
| 报告编号 | 委托方 | 受检方 | 采样日期 | 分析日期 | 样品类型 | 点位/样品 | 合同编号 | 状态 | 签发时间 | 已签收时间 | 编制人 | 采样室提交 | 实验室提交 | 报告室接收记录 | 来源 | 操作 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| {{ rt.point_count || 0 }} / {{ rt.sample_count || 0 }} | — | — | {{ rt.drafter_name }} 未指派 |
|
|
|
|
|||||||||
| 暂无报告任务 | ||||||||||||||||
支持 .xlsx/.xls 格式。导入后只建立报告任务记录,不补全采样/检测明细。
已存在于系统中的历史报告默认会更新;若取消勾选覆盖,则跳过已存在的非历史记录。
已存在于系统中的历史报告默认会更新;若取消勾选覆盖,则跳过已存在的非历史记录。
预检:解析 {{reportTaskImportDlg.inspect.total}} 条,唯一任务 {{reportTaskImportDlg.inspect.unique_task_count}} 条;重复任务 {{(reportTaskImportDlg.inspect.duplicate_task_nos||[]).length}} 条;异常 {{(reportTaskImportDlg.inspect.issues||[]).length}} 条。
异常 = 台账里缺「采样/送样日期」或「编制人员」的行,不影响导入,导入后这些字段留空可后续补。
异常明细({{(reportTaskImportDlg.inspect.issues||[]).length}} 条):
{{x.task_no}}
{{x.issue}}
重复任务号({{(reportTaskImportDlg.inspect.duplicate_task_nos||[]).length}} 个,导入时同号只保留最后一条):
{{reportTaskImportDlg.inspect.duplicate_task_nos.join('、')}}
报告编号: {{ assignDrafterDlg.task_no }}
当前编制人: {{ assignDrafterDlg.current_drafter || '未指派' }}
当前编制人: {{ assignDrafterDlg.current_drafter || '未指派' }}
选择编制人 *
计分核实
加载中...
已人工调整为 {{ assignScore.adjusted_score }} 分({{ assignScore.adjustment_reason }})
| 介质 | 项目数 | 点位数 | 分项得分 |
|---|---|---|---|
| {{ row.label }} | {{ scoreItem(assignScore.preview, row.label) }} |
类别系数 ×{{ (assignScore.preview && assignScore.preview.business_factor) || 1 }} 规则总分 {{ (assignScore.preview && assignScore.preview.score) || 0 }} 分
保存计分修正
计分规则:废水/废气 = 点位数 ×(1 + 项目数每满 5 项加 0.5 档,废气上限 +1.5、废水上限 +3);无组织废气 = 项目数 ≤5 得 3 分、6~10 得 4 分、>10 得 5 分;噪声 = 项目数 ≤5 得 1 分、6~10 得 1.5 分、>10 得 2 分;类别系数:委托/送样 ×1,环评/比对 ×1.2,验收/比对验收 ×2
加载中...
签发前必填,建议现在填写
签发前必填,建议现在填写
| 介质 | 项目数 | 点位数 | 分项得分 |
|---|---|---|---|
| {{ row.label }} | {{ scoreItem(reportTaskEditForm.scorePreview, row.label) }} |
类别系数 ×{{ (reportTaskEditForm.scorePreview && reportTaskEditForm.scorePreview.business_factor) || 1 }} 总分 {{ (reportTaskEditForm.scorePreview && reportTaskEditForm.scorePreview.score) || 0 }} 分导入任务单自动识别,有误直接改项目数/点位数,保存时随报告写入
计分规则:废水/废气 = 点位数 ×(1 + 项目数每满 5 项加 0.5 档,废气上限 +1.5、废水上限 +3);无组织废气 = 项目数 ≤5 得 3 分、6~10 得 4 分、>10 得 5 分;噪声 = 项目数 ≤5 得 1 分、6~10 得 1.5 分、>10 得 2 分;类别系数:委托/送样 ×1,环评/比对 ×1.2,验收/比对验收 ×2
| 项目 | 仪器名称 | 型号 | 原理 | 制造单位 | |
|---|---|---|---|---|---|
| 项目 | 仪器名称 | 型号/编号 | 原理 | 方法依据 | |
|---|---|---|---|---|---|
| 时段 | CEMS 值 | 参比值 | |
|---|---|---|---|
时段可留空;全空行保存时自动忽略;分段限值与评定按 HJ 75-2017 由系统自动计算
| 项目 | CEMS均值 | 参比均值 | 比对结果 | 限值 | 评定 |
|---|---|---|---|---|---|
| {{ b.key }} | {{ b.cems_avg }} | {{ b.ref_avg }} | {{ b.result }} | {{ b.limit }} | {{ b.verdict }} |
智能生成检测报告
报告模板:
有组织废气:
智能生成前请先选择模板
● 在线编辑:WPS WebOffice{{ onlyofficeAvailable ? '(OnlyOffice 兜底)' : '' }}
● 在线编辑:OnlyOffice
第一步:选择任务(采样完成即可提前编制,签发前都可编辑)
🔄 刷新
| 任务号 | 受检单位 | 项目 | 采样记录 | 实验记录 | 数据检查 | 操作 | |
|---|---|---|---|---|---|---|---|
| {{ t.task_no }}
报告状态:{{ t.report_status }}
|
{{ t.company_name }} | {{ t.project_name }} | — 送样免采样 | {{ sideStatus(t.received_sampling_at, t.sampling_records_submitted_at).t }} | {{ sideStatus(t.received_lab_at, t.lab_records_submitted_at).t }} | ⚠ {{ t.data_quality.warnings.join(';') }} ✓ 无异常 |
|
| 暂无采样已完成的任务 | |||||||
🤖 智能生成 {{ smartGen.task_no }} 进行中…
失败
已预填,待核对
{{ log }}
✅ 数据已预填到下方「第二步:核对数据」,可手工调整;确认无误后点击底部「一键生成报告」输出 Word。
不在列表的历史任务:
拉取数据(人工核对模式)
第二步:核对数据(可编辑)
{{ reportDbStats.sampleCount }}
样品数
{{ reportDbStats.itemCount }}
检测项目
{{ reportDbStats.ndCount }}
未检出 (ND)
{{ reportDbStats.wastewaterCount }}
废水数据
{{ reportDbStats.gasCount }}
废气数据
封面信息
检测概况
气象参数
检测内容
| 样品类型 | 采样点位 | 检测项目 | 样品状态 | |
|---|---|---|---|---|
{{ wt.title || '废水检测结果 ' + (wi+1) }}
| 采样点位 | 检测项目 | 单位 | 检测结果 | 标准限值 | |
|---|---|---|---|---|---|
有组织废气检测结果{{ reportData.organized_gas.length > 1 ? ' ' + (ogi+1) : '' }}
| 采样点位 | 检测项目 | 标干流量 | 实测浓度 | 排放速率 | 标准限值 | 最高允许排放速率 | |
|---|---|---|---|---|---|---|---|
锅炉废气检测结果
| 采样点位 | 检测项目 | 标干流量 | 实测浓度 | 折算浓度 | 排放速率 | 标准限值 | |
|---|---|---|---|---|---|---|---|
无组织废气检测结果
| 检测项目 | 参照点1# | 监控点2# | 监控点3# | 监控点4# | 标准限值 | |
|---|---|---|---|---|---|---|
厂区内无组织废气
| 采样点位 | 检测项目 | 检测结果 | 标准限值 | |
|---|---|---|---|---|
噪声检测结果
| 采样点位 | 主要声源 | 昼间结果 | 夜间结果 | 昼间标准 | 夜间标准 | |
|---|---|---|---|---|---|---|
附表1:检测方法、分析仪器、检出限
| 样品类型 | 检测项目 | 检测方法 | 分析仪器 | 检出限 | |
|---|---|---|---|---|---|
✅
报告生成成功!
{{ resultFilename }}
📈 业务数据
🏭 生产数据
💰 财务数据
👥 人力资源
🧮 产值统计
💬 智能问数
¥{{ formatMoney(b.balance) }}
{{ b.bank }}
¥{{ formatMoney(ceoZoom.aging.b0_30) }}
账龄 30 天内
¥{{ formatMoney(ceoZoom.aging.b31_60) }}
账龄 31-60 天
¥{{ formatMoney(ceoZoom.aging.b61_90) }}
账龄 61-90 天
¥{{ formatMoney(ceoZoom.aging.b90_plus) }}
账龄 90 天以上
¥{{ formatMoney(ceoZoom.broker.amount) }}
{{ ceoZoom.broker.label }}
占签约额 {{ (ceoZoom.broker.ratio * 100).toFixed(1) }}% · 居间费是检测行业主要成本,建议控制在签约额的合理比例内
暂无数据
📈 业务维度 · CEO 决策看板
刷新
按月
按季度
按年
Q{{ q }}
¥{{ formatMoney(bizDash.overview.signed_net) }}
{{ bizDash.period_label }}签约额(实收)
{{ bizDash.overview.signed_count }}
{{ bizDash.period_label }}签约合同数
¥{{ formatMoney(bizDash.overview.avg_amount) }}
平均单合同金额
{{ bizDash.overview.new_clients }}
{{ bizDash.period_label }}新增客户
首签落在本期间
{{ bizDash.overview.active_clients }}
{{ bizDash.period_label }}活跃客户
期间内有签约
📊 {{ bizDash.window_label }}签约趋势(签约额 + 合同数)
🥧 {{ bizDash.period_label }}业务结构(按合同类型·金额)
🏆 TOP10 客户({{ bizDash.period_label }}签约额)
TOP1 集中度 {{ bizDash.customers.top1_ratio }}%
👥 新客 / 老客签约金额({{ bizDash.period_label }})
🧑💼 客户经理业绩榜(按{{ bizDash.period_label }}签约额排序)
⚠️ 任务风险(实时)
{{ bizDash.risk.open_tasks }}
进行中采样任务
待排期+待采样+采样中
{{ bizDash.risk.urgent_open }}
加急未完成任务
priority=加急
🏭 生产数据
刷新
(数据尚未接入,以下为占位)
—
本月采样任务
—
完成率
—
超期率
—
样品总数
—
检测条目
👷 采样员工作量排行
ECharts 横向柱状图占位
🧪 样品类型分布
ECharts 饼图占位(废水/有组织/无组织/噪声/土壤)
📅 日任务完成趋势(近30天)
ECharts 折线图占位
💰 财务维度 · CEO 决策看板
刷新
按月
按季度
按年
Q{{ q }}
¥{{ formatMoney(ceoDash.overview.signed_month) }}
{{ ceoDash.period_label }}签约额(实收)
¥{{ formatMoney(ceoDash.overview.income_month) }}
{{ ceoDash.period_label }}回款(流水收入)
¥{{ formatMoney(ceoDash.overview.expense_month) }}
{{ ceoDash.period_label }}支出(流水支出)
{{ ceoDash.overview.net_flow_month >= 0 ? '+' : '-' }}¥{{ formatMoney(Math.abs(ceoDash.overview.net_flow_month)) }}
{{ ceoDash.period_label }}净现金流
¥{{ formatMoney(ceoDash.overview.total_balance) }}
账户总余额
{{ b.bank }} ¥{{ formatMoney(b.balance) }}
¥{{ formatMoney(ceoDash.overview.receivable_total) }}
应收账款总额
¥{{ formatMoney(ceoDash.overview.invoiced_total) }}
已开票总额
¥{{ formatMoney(ceoDash.overview.invoiced_unpaid) }}
已开票未收款
¥{{ formatMoney(ceoDash.overview.received_uninvoiced) }}
已收款未开票
{{ ceoDashLoading ? '驾驶舱数据加载中...' : '暂无驾驶舱数据' }}
📈 {{ ceoDash.window_label }} 签约 / 回款 / 支出
💧 账户余额走势(月末)
⚠️ 付款压力:待支付 vs 账户余额
付款申请待付¥{{ formatMoney(ceoDash.risk.payment_pressure.requests) }}
应付款台账待付¥{{ formatMoney(ceoDash.risk.payment_pressure.payables) }}
待支付合计¥{{ formatMoney(ceoDash.risk.payment_pressure.total) }}
账户总余额¥{{ formatMoney(ceoDash.risk.payment_pressure.balance) }}
支付后预计结余¥{{ formatMoney(ceoDash.risk.payment_pressure.gap) }}
资金缺口预警:余额不足以覆盖待支付,请优先催收应收
🏆 Top10 欠款客户(按未收金额)
| 合同编号 | 客户 | 客户经理 | 笔数 | 欠款金额 |
|---|---|---|---|---|
| {{ d.contract_no }} | {{ nameOnly(d.account_manager) || '-' }} | {{ d.plans }} | ¥{{ formatMoney(d.owed) }} | |
| 暂无欠款客户 | ||||
🍰 {{ ceoDash.period_label }}支出结构(按已付金额)
¥{{ formatMoney(ceoDash.cost.broker_month) }}
{{ ceoDash.period_label }}居间费支出
占{{ ceoDash.period_label }}签约额 {{ (ceoDash.cost.broker_ratio * 100).toFixed(1) }}%
居间费是检测行业主要成本,建议控制在签约额的合理比例内
📊 {{ ceoDash.window_label }}成本趋势 · 按财务科目(前 5 大科目 + 其他)
🍰 {{ ceoDash.period_label }}成本占比 · 按一级科目
🧾 {{ ceoDash.period_label }}科目成本明细详情 (流水支出合计 ¥{{ formatMoney(ceoDash.cost.by_account.total) }})
📌 应收账款的判定规则与流程 SOP
应收账款 = 满足下列任一条件 + 未收款
① 已开发票:财务"发票管理"录入发票后,对应回款计划立即列为应收
② 回款计划月已到 + 报告已交付:客户经理点"接收报告"后自动联动
回款计划月未到 / 报告未交付 → 不计入应收(视为正常履约中)
谁该做什么动作
📥 客户付款 → 财务在"回款销账"勾"已收"
🧾 开票 → 财务在"发票管理"新增发票(绑回款计划)
📦 报告交付 → 客户经理在报告任务流程点"接收报告"
兜底:合同详情→回款计划→"标记交付"按钮
兜底:合同详情→回款计划→"标记交付"按钮
¥{{ formatMoney(receivableStats.total_amount) }}
应收账款总额
{{ receivableStats.total_contracts || 0 }}家客户 · {{ receivableStats.total_plans || 0 }}笔回款
¥{{ formatMoney(receivableStats.bucket_0_30) }}
0-30 天
正常账期
¥{{ formatMoney(receivableStats.bucket_31_60) }}
31-60 天
需要催款
¥{{ formatMoney(receivableStats.bucket_61_90) }}
61-90 天
明显逾期
¥{{ formatMoney(receivableStats.bucket_90_plus) }}
90+ 天
高风险 / 坏账
📋 应收账款明细
账龄: {{ receivableBucket }} 天
查询
重置
共 {{ receivableTotal }} 笔
| 合同编号 | 委托单位 | 受检单位 | 期次 | 计划月 | 应收金额 | 原因 | 起算日 | 账龄(天) | 客户经理 |
|---|---|---|---|---|---|---|---|---|---|
| {{ r.contract_no }} | {{ r.seq }} | {{ r.plan_month || '-' }} | ¥{{ formatMoney(r.amount) }} | {{ r.reason }} | {{ r.aging_since || '-' }} | {{ r.aging_days }} | {{ nameOnly(r.account_manager) || '-' }} | ||
| {{ receivableLoading ? '加载中...' : '暂无应收账款' }} | |||||||||
👥 人力资源 · 人工成本分析
刷新
按月
按季度
按年
Q{{ q }}
¥{{ formatMoney(hrDash.latest.total) }}
{{ hrDash.period_label || hrDash.latest.month }} 人工成本(应发)
{{ hrDash.latest.headcount }}
{{ hrGranularity==='month' ? '发薪人数' : '月均发薪人数' }}
¥{{ formatMoney(hrDash.latest.per_capita) }}
人均工资(月均)
{{ hrDash.latest.cost_rate == null ? '—' : (hrDash.latest.cost_rate * 100).toFixed(1) + '%' }}
人工成本率
¥{{ formatMoney(hrDash.trend.reduce((a, t) => a + t.total, 0)) }}
{{ hrDash.trend.length ? hrDash.trend[0].month + ' 起累计人工成本' : '累计人工成本' }}
{{ hrDashLoading ? '人力资源数据加载中...' : (hrDash && !hrDash.latest ? '该期间暂无薪酬数据' : '暂无薪酬数据(请先运行历史灌库脚本导入工资表)') }}
📈 人工成本趋势与人工成本率
🥧 {{ hrDash.period_label || hrDash.latest.month }} 工资结构(基本/绩效/补贴)
🏢 {{ hrDash.period_label || hrDash.latest.month }} 部门人工成本分布
📊 部门 × 月份 人工成本对比
🧮 产值统计 · 报告清单回填合同金额
上传《报告完成清单》xlsx,系统按任务号匹配合同,回填「合同金额 / 实收金额」后输出新文件
📊 匹配结果(文件已自动下载)
{{ pvStats.task_matched }} / {{ pvStats.task_rows }}
明细行匹配(含总表/各月)
{{ pvStats.summary_matched }} / {{ pvStats.summary_rows }}
汇总表合同匹配
{{ pvStats.task_unmatched.length }}
未匹配合同号(明细,去重前100)
{{ pvStats.summary_unmatched.length }}
未匹配合同号(汇总)
未匹配合同号(系统合同库中不存在,需补录合同):{{ pvStats.summary_unmatched.join('、') }}
📋 任务单产值(完成采样即算)
检测费基数×当次工作量/全年总工作量 + 采样费/N + 报告费/N;平台上传费单列,不进采样室产值;采样提成按《采样室绩效方案》提成标准逐已采点位计算(单列,不计入产值)
{{ pvTvNote }}
¥{{ formatMoney(pvTvSummary.total_value) }}
采样室产值合计
¥{{ formatMoney(pvTvSummary.detection_value) }}
其中·检测费产值
¥{{ formatMoney(pvTvSummary.sampling_share) }}
其中·采样费分摊
¥{{ formatMoney(pvTvSummary.report_share) }}
其中·报告费分摊
¥{{ formatMoney(pvTvSummary.platform_share) }}
平台上传费(单列)
¥{{ formatMoney(pvTvSummary.commission) }}
采样提成(单列)
{{ pvTvSummary.no_quote_count }} / {{ pvTvTotal }}
无报价单 / 总场次
产值公式全链路:
① 报价单原价 ¥{{ formatMoney(row.formula.quote_total) }}
→ 成交价 ¥{{ formatMoney(row.formula.deal_price) }}
({{ row.formula.source_file.split('/').pop() }})
→ 签约 ¥{{ formatMoney(row.formula.total_amount) }} − 居间费 ¥{{ formatMoney(row.formula.broker_fee) }} − 分包费 ¥{{ formatMoney(row.formula.subcontract_fee) }}
= 合同实收净值 ¥{{ formatMoney(row.formula.net_amount) }}
(折扣率 {{ (row.formula.deal_price || row.formula.quote_total) ? (Math.round(row.formula.net_amount / (row.formula.deal_price || row.formula.quote_total) * 1000) / 10) + '%' : '—' }})
② 检测费基数 = 净值 ¥{{ formatMoney(row.formula.net_amount) }} − 附加费面值(采样费 ¥{{ formatMoney(row.formula.sampling_fee) }} + 报告费 ¥{{ formatMoney(row.formula.report_fee) }} + 平台费 ¥{{ formatMoney(row.formula.platform_fee) }})= ¥{{ formatMoney(row.detection_base) }}
③ 当次检测费产值 = 基数 ¥{{ formatMoney(row.detection_base) }} × 当次工作量 ¥{{ formatMoney(row.workload_now) }} ÷ 全年总工作量 ¥{{ formatMoney(row.workload_year) }} = ¥{{ formatMoney(row.detection_value) }}
④ 按次分摊(N = {{ row.formula.times_per_year }} 次/年):采样费 ¥{{ formatMoney(row.formula.sampling_fee) }}÷N = ¥{{ formatMoney(row.sampling_share) }};报告费 ¥{{ formatMoney(row.formula.report_fee) }}÷N = ¥{{ formatMoney(row.report_share) }};平台费 ¥{{ formatMoney(row.formula.platform_fee) }}÷N = ¥{{ formatMoney(row.platform_share) }}(单列,不进采样室产值)
⑤ 采样室产值 = ¥{{ formatMoney(row.detection_value) }} + ¥{{ formatMoney(row.sampling_share) }} + ¥{{ formatMoney(row.report_share) }} = ¥{{ formatMoney(row.total_value) }}
报价行挂接明细:
报价第{{ d.row_no }}行「{{ d.point_name }} · {{ d.test_items }}」单次价 ¥{{ d.per_session }} × 点位份额 {{ Math.round(d.share*100) }}% = ¥{{ d.amount }}
(点位:{{ (d.points||[]).join('、') }})
提成计算过程(采样室绩效方案):
「{{ cd.point_name }}」{{ cd.category }} {{ cd.rule }} = ¥{{ formatMoney(cd.amount) }}
采样提成合计 = ¥{{ formatMoney(row.commission) }}(单列,不计入采样室产值)
未挂接报价行(本任务点位未覆盖):第 {{ row.unmatched.join('、') }} 行
无明细({{ pvTvStatusText(row) }})
📏 执行标准查询
查询
新增标准
共 {{ kbStandards.length }} 条
📊 标准限值查询
执行标准 {{ kbLimStandards.length }} 份
标准限值 {{ kbLimTotalRows.toLocaleString() }} 条
共 {{ kbLimResults.length }} 条结果
(已达上限 2000 条,请收窄条件)
· 标准 {{ kbLimFilter.standard }}
· 项目 {{ kbLimFilter.test_item }}
🔍
请选择标准号或输入检测项目开始查询
数据库共 {{ kbLimTotalRows.toLocaleString() }} 条限值记录,覆盖国标、行标、广东地标
🎓 CMA 资质查询
资质 {{ (kbCmaStats.total || 0).toLocaleString() }} 条
检测项目 {{ kbCmaStats.unique_items || 0 }} 项
标准方法 {{ kbCmaStats.unique_standards || 0 }} 份
数据源:资质附表汇总(报告专用)变更.xlsx(1113+59 项)
共 {{ kbCmaTotal.toLocaleString() }} 条资质
(仅显示前 {{ kbCmaResults.length }} 条,请收窄条件)
📋 记录表查询
查询
清空
输入检测项目(如 pH值、非甲烷总烃)查询对应的原始记录表
未找到完全匹配的项目,你可能想查:
{{ it }}
🔍
未查询到对应的原始记录表,请调整检测项目或样品类型后重试
🧭 采样室 · 现场记录表({{ kbRtSampling.length }})
🧪 实验室 · 分析原始记录表({{ kbRtLab.length }})
💰 指导价查询
指导价 {{ (kbGpStats.total || 0).toLocaleString() }} 条
产品类别 {{ kbGpStats.categories || 0 }} 类
检测项目 {{ kbGpStats.unique_items || 0 }} 项
数据源:{{ kbGpSource || '广东省环境监测行业指导价(2021年修订稿)' }}
共 {{ kbGpTotal.toLocaleString() }} 条指导价
(仅显示前 {{ kbGpResults.length }} 条,请收窄条件)
📌 附加说明(计价口径)
{{ i + 1 }}. {{ n }}
🤖 基于企业知识库的AI问答
· AI 仅基于知识库已入库文件回答,不使用训练数据或常识补充
· 未收录的内容会如实告知"知识库无相关资料"
· 支持文档格式:Word / PDF / Excel / TXT / Markdown(图片类文件无法进入检索)
· 未收录的内容会如实告知"知识库无相关资料"
· 支持文档格式:Word / PDF / Excel / TXT / Markdown(图片类文件无法进入检索)
💬
输入问题开始对话。例如:"颗粒物采样的空白样规则是什么?"
"HJ836 对无组织废气监测有什么要求?"
{{ m.role==='user' ? '我' : (m.model_name || 'AI') }}
{{ m.content }}
📎 参考资料:
{{ s.category }} · {{ s.title }}
📋 企业 SOP(标准操作流程)
· 以下流程基于本系统的实际功能整理,每条 SOP 对应一个可在系统里执行的闭环动作。
· 同事入职 / 角色转换时,按所在部门对应的 SOP 列表通读一遍即可上手。
· 流程有调整时,先在系统里做改动,本页 SOP 同步更新。
· 同事入职 / 角色转换时,按所在部门对应的 SOP 列表通读一遍即可上手。
· 流程有调整时,先在系统里做改动,本页 SOP 同步更新。
分类筛选:
{{ cat }}
{{ s.title }}
{{ s.category }}
👤 {{ s.actor }}
{{ s.steps.length }} 步
📌 适用场景:{{ s.scenario }}
🎯 操作步骤:
- {{ step }}
🔗 系统入口:{{ s.entry }}
✅ 完成标志:{{ s.done }}
💡 {{ s.tip }}
没有匹配的 SOP
{{ kbStats.total || 0 }}
文件总数
{{ kbFormatSize(kbStats.total_size) }}
总大小
{{ kbCategoryList.length }}
分类数
{{ kbLatestTime || '—' }}
最近上传
{{ kbCategory || '全部文件' }}
搜索
+ 上传文件
{{ row.filename }}
📂
该分类下暂无文件,点击右上角「上传文件」上传
📄 {{ kbUploadForm.file.name }} · {{ kbFormatSize(kbUploadForm.file.size) }}
▣ 采样室看板
刷新
任务进度 · 人员工作量 · 资源预警 · 采样统计
→ 任务派发
→ 仪器台账
→ 车辆管理
📋 任务总数
{{ samplingBoard.taskStats.total || 0 }}
🚀 进行中
{{ (samplingBoard.taskStats['待采样']||0) + (samplingBoard.taskStats['采样中']||0) + (samplingBoard.taskStats['部分完成']||0) }}
待采样 {{ samplingBoard.taskStats['待采样']||0 }} · 采样中 {{ samplingBoard.taskStats['采样中']||0 }} · 部分完成 {{ samplingBoard.taskStats['部分完成']||0 }}
✅ 已完成
{{ samplingBoard.taskStats['已完成'] || 0 }}
⚠️ 异常任务
{{ samplingBoard.taskStats['异常'] || 0 }}
📅 今日任务
{{ samplingBoard.taskStats.today_completed || 0 }} / {{ samplingBoard.taskStats.today_count || 0 }}
已完成 / 总数
⏰ 超期未完成
{{ samplingBoard.taskStats.overdue_count || 0 }}
本月任务
{{ samplingBoard.summary.total_tasks || 0 }}
完成率
{{ samplingBoard.summary.completion_rate || 0 }}%
及时率
{{ samplingBoard.summary.on_time_rate || 0 }}%
点位数
{{ samplingBoard.summary.total_points || 0 }}
样品数
{{ samplingBoard.summary.total_samples || 0 }}
出车次数 / 出勤天数
{{ samplingBoard.summary.vehicle_trips || 0 }} / {{ samplingBoard.summary.field_days || 0 }}
🔬 仪器资源
总数 {{ samplingBoard.instStats.total || 0 }}
在用 {{ samplingBoard.instStats.in_use || 0 }}
出库中 {{ samplingBoard.instStats.checked_out || 0 }}
30天内到期 {{ samplingBoard.instStats.expiring_30 || 0 }}
已超期 {{ samplingBoard.instStats.overdue || 0 }}
🚗 车辆资源
总数 {{ samplingBoard.vehicleStats.total || 0 }}
在用 {{ samplingBoard.vehicleStats.in_use || 0 }}
维修/保养 {{ (samplingBoard.vehicleStats.repair||0) + (samplingBoard.vehicleStats.maintenance||0) }}
年检临期 {{ samplingBoard.vehicleStats.inspection_soon || 0 }}
保险临期 {{ samplingBoard.vehicleStats.insurance_soon || 0 }}
无车辆管理权限,暂不显示
👤 人员工作量(本月,按完成数排序)
| 名次 | 姓名 | 任务 | 完成 | 点位 | 样品 | 完成率 | 及时率 |
|---|---|---|---|---|---|---|---|
| {{ i+1 }} | {{ p.name }} | {{ p.total_tasks }} | {{ p.completed }} | {{ p.points }} | {{ p.samples }} | {{ p.completion_rate }}% | {{ p.on_time_rate }}% |
| 本月暂无人员工作量数据 | |||||||
完整周期/自定义筛选见下方「采样统计」
👥 小组工作量(本月)
| 小组 | 任务 | 完成 | 完成率 |
|---|---|---|---|
| {{ g.group }} | {{ g.total_tasks }} | {{ g.completed }} | {{ g.completion_rate }}% |
| 本月暂无小组数据 | |||
📊 采样统计
周期:
今日
本周
本月
本季度
本年
自定义
~
查询
导出Excel
{{ statsSummary.total_tasks || 0 }}
总任务
{{ statsSummary.completed || 0 }}
已完成
{{ statsSummary.completion_rate || 0 }}%
完成率
{{ statsSummary.on_time_rate || 0 }}%
及时率
{{ statsSummary.total_points || 0 }}
点位数
{{ statsSummary.total_samples || 0 }}
样品数
{{ statsSummary.vehicle_trips || 0 }}
出车次数
{{ statsSummary.field_days || 0 }}
外勤天数
{{ (statsSummary.abnormal||0)+(statsSummary.cancelled||0) }}
异常+取消
任务状态分布
每日任务趋势
人员工作量排行
| 姓名 | 任务数 | 完成 | 及时 | 点位数 | 样品数 | 外勤天 | 完成率 | 及时率 |
|---|---|---|---|---|---|---|---|---|
| {{ p.name }} | {{ p.total_tasks }} | {{ p.completed }} | {{ p.on_time }} | {{ p.points }} | {{ p.samples }} | {{ p.field_days }} | {{ p.completion_rate }}% | {{ p.on_time_rate }}% |
| 暂无数据 | ||||||||
🗂️ 采样室管理
🔬 仪器台账
👥 小组管理
🚗 车辆管理
💹 产值及提成
{{ instStats.total }}
总数
{{ instStats.in_use }}
在用
{{ instStats.expiring_30 || 0 }}
30天内到期
{{ instStats.overdue }}
已超期
{{ instStats.checked_out }}
已领用
| 编号 | 名称 | 型号 | 分组 | 类别 | 有效期至 | 检验机构 | 状态 | 存放 | 操作 |
|---|---|---|---|---|---|---|---|---|---|
| {{ inst.instrument_name }} | {{ inst.model || '—' }} |
|
{{ inst.category || '—' }} | {{ inst.calibration_due || '—' }} | {{ inst.check_agency || '—' }} | {{ inst.location || '—' }} |
|
||
| 暂无仪器数据 | |||||||||
提前天数:
刷新
已超期 {{ overdueList.length }} 台
❗ 已超期
| 编号 | 名称 | 有效期至 | 超期天数 | 保管人 |
|---|---|---|---|---|
| {{ inst.instrument_name }} | {{ inst.calibration_due }} | {{ -inst.days_until_due }} | {{ inst.custodian }} {{ inst.custodian_phone }} |
⚠ 即将到期({{ expiringDays }}天内)
| 编号 | 名称 | 有效期至 | 剩余天数 | 保管人 |
|---|---|---|---|---|
| {{ inst.instrument_name }} | {{ inst.calibration_due }} | {{ inst.days_until_due }} | {{ inst.custodian }} {{ inst.custodian_phone }} | |
| 暂无即将到期仪器 | ||||
时间窗口:
天(包含已过期 + 未来 N 天内到期)
刷新
共 {{ maintData.total_items }} 台待送检
(过期 {{ maintData.total_overdue }}
+ 未来 {{ maintData.total_upcoming }})
分布在 {{ maintData.total_groups }} 个检验机构
当前窗口无待送检仪器
| 仪器 | 故障 | 报修人 | 维修方 | 状态 | 操作 |
|---|---|---|---|---|---|
| {{ r.instrument_code }} {{ r.instrument_name }} | {{ r.fault_type }}:{{ r.fault_description }} | {{ r.reported_by }} | {{ r.repair_vendor || '—' }} |
|
|
| 暂无维修记录 | |||||
使用日期:
~
可用 {{ checkoutAvailable.length }} 台 / 已出库 {{ checkoutList.reduce((s,c)=>s+c.instrument_count,0) }} 台
📦 可用仪器(多选后出库)
📋 出库单列表
{{ ck.checkout_no }}
{{ ck.status }}
日期:{{ ck.checkout_date }} ~ {{ ck.checkout_date_end }}
小组长:{{ ck.group_leader_name }}({{ ck.group_leader_phone }})
仪器数:{{ ck.instrument_count }} 台
暂无出库记录
出库单:{{ retDlg.checkoutNo }} 勾选本次要归还的仪器(默认全选;只还部分时,剩余仪器仍属本出库单,已归还的即刻可被其他小组领用)
单号:{{ checkoutDetail.checkout_no }}
状态:{{ checkoutDetail.status }}
日期:{{ checkoutDetail.checkout_date }} ~ {{ checkoutDetail.checkout_date_end }}
小组长:{{ checkoutDetail.group_leader_name }}({{ checkoutDetail.group_leader_phone }})
仪器清单({{ checkoutDetail.instrument_count }} 台):
日期:
~
查询
共 {{ ckrTotal }} 条
提示:每件仪器 4 通道(Ⅰ/Ⅱ/Ⅲ/Ⅳ) × 采样前 / 采样后 = 8 列读数。无对应通道留空即可。
| 仪器 | 参数 | 采样前校准 | 采样后校准 | 备注 | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| 通道Ⅰ | 通道Ⅱ | 通道Ⅲ | 通道Ⅳ | 通道Ⅰ | 通道Ⅱ | 通道Ⅲ | 通道Ⅳ | |||
|
{{ rec.instrument_code }}
{{ rec.instrument_name }}
|
标称流量 L/min |
|
||||||||
| 实际流量 L/min | ||||||||||
| 相对误差 % | ||||||||||
| 无仪器待校准 | ||||||||||
✍ 小组长签名
签名将自动嵌入《流量校准记录表》docx
清除
✓ 已有保存过的签名
{{ calibForm.signer_name || '—' }}{{ calibForm.signed_at ? ' · ' + calibForm.signed_at : '' }}
如需重新签,左侧画板写完即可覆盖
👥 采样小组管理
每组 = 组长 + 组员 + 车辆 + 固定仪器,按时间生效
共 {{ groupsList.length }} 组
+ 新增小组
🔄 刷新
暂无小组,点击右上角"+ 新增小组"添加
跟着小组走,不需要每次出库借还。共享不占用类(如流量校准器)不要勾这里。
{{ vehicleStats.total || 0 }}
车辆总数
{{ vehicleStats.in_use || 0 }}
在用
{{ vehicleStats.repair || 0 }}
维修中
{{ vehicleStats.maintenance || 0 }}
保养中
{{ vehicleStats.inspection_soon || 0 }}
年检30天内到期
{{ vehicleStats.insurance_soon || 0 }}
保险30天内到期
📋 任务单产值及采样提成(完成采样即算)
检测费基数×当次工作量/全年总工作量 + 采样费/N + 报告费/N;平台上传费单列,不进采样室产值;采样提成按《采样室绩效方案》提成标准逐已采点位计算(单列,不计入产值)
{{ pvTvNote }}
¥{{ formatMoney(pvTvSummary.total_value) }}
采样室产值合计
¥{{ formatMoney(pvTvSummary.detection_value) }}
其中·检测费产值
¥{{ formatMoney(pvTvSummary.sampling_share) }}
其中·采样费分摊
¥{{ formatMoney(pvTvSummary.report_share) }}
其中·报告费分摊
¥{{ formatMoney(pvTvSummary.platform_share) }}
平台上传费(单列)
¥{{ formatMoney(pvTvSummary.commission) }}
采样提成(单列)
{{ pvTvSummary.no_quote_count }} / {{ pvTvTotal }}
无报价单 / 总场次
产值公式全链路:
① 报价单原价 ¥{{ formatMoney(row.formula.quote_total) }}
→ 成交价 ¥{{ formatMoney(row.formula.deal_price) }}
({{ row.formula.source_file.split('/').pop() }})
→ 签约 ¥{{ formatMoney(row.formula.total_amount) }} − 居间费 ¥{{ formatMoney(row.formula.broker_fee) }} − 分包费 ¥{{ formatMoney(row.formula.subcontract_fee) }}
= 合同实收净值 ¥{{ formatMoney(row.formula.net_amount) }}
(折扣率 {{ (row.formula.deal_price || row.formula.quote_total) ? (Math.round(row.formula.net_amount / (row.formula.deal_price || row.formula.quote_total) * 1000) / 10) + '%' : '—' }})
② 检测费基数 = 净值 ¥{{ formatMoney(row.formula.net_amount) }} − 附加费面值(采样费 ¥{{ formatMoney(row.formula.sampling_fee) }} + 报告费 ¥{{ formatMoney(row.formula.report_fee) }} + 平台费 ¥{{ formatMoney(row.formula.platform_fee) }})= ¥{{ formatMoney(row.detection_base) }}
③ 当次检测费产值 = 基数 ¥{{ formatMoney(row.detection_base) }} × 当次工作量 ¥{{ formatMoney(row.workload_now) }} ÷ 全年总工作量 ¥{{ formatMoney(row.workload_year) }} = ¥{{ formatMoney(row.detection_value) }}
④ 按次分摊(N = {{ row.formula.times_per_year }} 次/年):采样费 ¥{{ formatMoney(row.formula.sampling_fee) }}÷N = ¥{{ formatMoney(row.sampling_share) }};报告费 ¥{{ formatMoney(row.formula.report_fee) }}÷N = ¥{{ formatMoney(row.report_share) }};平台费 ¥{{ formatMoney(row.formula.platform_fee) }}÷N = ¥{{ formatMoney(row.platform_share) }}(单列,不进采样室产值)
⑤ 采样室产值 = ¥{{ formatMoney(row.detection_value) }} + ¥{{ formatMoney(row.sampling_share) }} + ¥{{ formatMoney(row.report_share) }} = ¥{{ formatMoney(row.total_value) }}
报价行挂接明细:
报价第{{ d.row_no }}行「{{ d.point_name }} · {{ d.test_items }}」单次价 ¥{{ d.per_session }} × 点位份额 {{ Math.round(d.share*100) }}% = ¥{{ d.amount }}
(点位:{{ (d.points||[]).join('、') }})
提成计算过程(采样室绩效方案):
「{{ cd.point_name }}」{{ cd.category }} {{ cd.rule }} = ¥{{ formatMoney(cd.amount) }}
采样提成合计 = ¥{{ formatMoney(row.commission) }}(单列,不计入采样室产值)
未挂接报价行(本任务点位未覆盖):第 {{ row.unmatched.join('、') }} 行
无明细({{ pvTvStatusText(row) }})
① 任务
{{ samplingTaskData.task_number }}
{{ samplingTaskData.inspected_unit }}
📋 选择派单任务
载入任务数据
载入后核对点位、确认样品编号即可生成表格
点击「载入」直接载入任务
刷新
暂无派给您的任务单
② 任务信息:{{ samplingTaskData.task_number }}
💾 更新并保存
✕ 切换任务
↩ 返回工作台
受检单位:{{ samplingTaskData.inspected_unit || samplingTaskData.company || '—' }}
计划日期:{{ samplingTaskData.sampling_date || '—' }}
点位数:{{ (samplingTaskData.points || []).length }}
样品数:{{ samplingSampleTotal }}
编号已固化
编号未固化
基本信息
监测点位({{ samplingTaskData.points ? samplingTaskData.points.length : 0 }} 个)
| 点位序号 | 样品类型 | 监测点位 | 检测项目 | 执行标准 | 点位数 | 天数 | 频次 | |
|---|---|---|---|---|---|---|---|---|
| {{ samplingPointIndexes[i] }} |
|
|
解析出 {{ splitStdDlg.standards.length }} 个标准:
{{ s.label }}
{{ a.name }}
{{ s.label }}(库中也有)
不用标准
没有可归组的检测项目
样品编号预览(共 {{ samplingPreview.reduce((s,sr)=>s+(sr.sample_ids?sr.sample_ids.length:0),0) }} 个编号,{{ samplingPreviewGrouped.length }} 个点位)
🧹 更新监测点位
📄 上传样品交接表识别
🖼️ 上传图片AI识别
🔄 刷新编号预览
🛠 质控样人工调整
系统自动生成的质控样有偏差时可在此手动增减;调整后必须点"💾 保存调整"才生效
+ 增加质控样
💾 保存调整
暂无质控样
⚠ 已有人工调整未保存,点"💾 保存调整"后调整结果才会写入数据库
质控类型
空白(K)
平行(A)
穿透(C)
挂载到
{{ (addQcHostOptions.find(o => o.idx === addQcForm.host_idx) || {}).label }}
样品编号
系统自动算下一个可用编号;如果不满意可以手动改成你想要的
已自动预填(按该行最后一个编号顺延;空行则参考同点位编号族,同点位没有时按点位序号推导本点位编号族,取最小空号填断号),可手动改成你想要的
{{ s.sub }}{{ s.sid }}
各子点位分别顺延一个编号;要调整可在添加后双击编号改名
{{ editItemDialog.nameError }}
下拉列出任务单里本点位原有但预览中还没有的检测项目,可一次多选;点位没有的新项目直接输入名称后回车创建。新增后按本点位的检测天数×频次自动生成样品编号(顺延现有编号族、自动填断号);水温/pH/烟气直读类项目自动识别为现场测量/仪器直读(不占编号)。有子点位的点位会给每个子点位各加一列。
改名只改项目名称,样品编号不动;有子点位时所有子点位的同名项目会一起改。删除整列会连带删掉该列所有编号。
识别方式:{{ handoverDlg.parser === 'image_ai' ? '图片 AI 识别' : '文件解析' }} ·
共 {{ handoverDlg.rows.length }} 行。请核对/修正样品编号(点位名称可下拉选择;先手工选几行作为线索,再点「智能填充点位名称」按编号规则+线索外推剩余行)。
确认后编号预览以交接表为最终版整体重建:预览现有编号全部清空,按交接表逐行落位(对不上的追加新行,重复导入不叠加)。核对预览无误后点「✅ 确认并生成样品编号」才正式入库。
确认后编号预览以交接表为最终版整体重建:预览现有编号全部清空,按交接表逐行落位(对不上的追加新行,重复导入不叠加)。核对预览无误后点「✅ 确认并生成样品编号」才正式入库。
📌 样品编号
{{ samplesConfirmed ? '✓ 已确认 ('+ samplesConfirmedCount +' 个) · 按点位重算编号' : '✅ 确认并生成样品编号' }}
🏷 生成样品标签
已固化到数据库 · 现场录数/报告生成都用这一份
点确认后,样品编号写入数据库,后续模块(项目录数、报告生成)都用同一份
↺ 恢复出厂
🏷 {{ sampleLabelDoc.name }}
{{ formatMtime(sampleLabelDoc.mtime) }}
在线编辑
查看
下载
删除
④ 生成表格
💧 废水排口({{ surveyForm.wastewater_outlets.length }})
+ 添加
从任务点位预填
💨 废气排口({{ surveyForm.exhaust_outlets.length }})
+ 添加
✍ 采样员签字({{ currentUser.name }})
✍ 客户签字
本机直签
二维码
✓
客户已签字
{{ surveyState.client_signer }} · {{ surveyState.client_signed_at }}
客户用手机扫二维码签字
先点下面"保存调查 + 生成客户签字链接"
之后即可让客户当场签或扫码远程签
之后即可让客户当场签或扫码远程签
⑤ 表格清单({{ workbenchDocs.length }} 张)
🔄 刷新清单
尚未生成表格 — 请先在 ③ 确认样品编号,再点 ④「🗂 预生成全部表格」
{{ row.template_code }}
⚠ 待人工核对:该表已通过审核锁定或自动生成失败,系统不擅自覆盖,请人工核对后处理
✏️ 在线编辑 - {{ wbEdit.name || '' }}
关闭
📷 现场采样照片
共 {{ samplingPhotos.length }} 张 · {{ samplingPhotosByPoint.length }} 个点位
对现场采样照片进行审核:
驳回原因:{{ samplingPhotoAudit.reject_reason }}
⚠ 该任务尚无现场采样照片,请采样员在 APP 端按点位上传
📍 {{ grp.point }} ({{ grp.photos.length }} 张)
✕ 已驳回 — {{ samplingPhotoAudit.reject_reason }}
上传人:{{ samplingPhotoPreview.uploaded_by_name }} · {{ (samplingPhotoPreview.created_at || '').slice(0, 16) }}
💰 我的绩效
日
月
季
年
刷新
采样提成 · 按采样日期统计 · 分配确认后生效
✅ 已定提成
¥{{ fmtAmt(perfOverview.summary.confirmed_amount) }}
⏳ 待确认提成
¥{{ fmtAmt(perfOverview.summary.pending_amount) }}
💰 合计
¥{{ fmtAmt(perfOverview.summary.total_amount) }}
📋 提成场次
{{ perfOverview.summary.session_count || 0 }}
⏳ 待我确认({{ perfConfirmFiltered.length }})确认后分配生效;驳回需填原因,整张分配单回炉重分
📋 我的提成明细({{ perfOverview.rows.length }} 条)
✏️ 待我分配({{ perfAllocFiltered.length }})第1~3轮小组长/主管可分配,第4轮仅主管且直接定案
🛠️ 分配管理({{ perfManageFiltered.length }} 场)
重置分配(已选 {{ perfManageSelection.length }})
{{ perfTodos.is_supervisor ? '重置后该场次当前分配单作废,回到「待我分配」重新分配;历史记录保留可查' : '小组长可查看自己带队场次的分配状态;重置分配仅主管可用' }}
📋 任务单产值及采样提成(完成采样即算)
检测费基数×当次工作量/全年总工作量 + 采样费/N + 报告费/N;平台上传费单列,不进采样室产值;采样提成按《采样室绩效方案》提成标准逐已采点位计算(单列,不计入产值)
{{ pvTvNote }}
¥{{ formatMoney(pvTvSummary.total_value) }}
采样室产值合计
¥{{ formatMoney(pvTvSummary.detection_value) }}
其中·检测费产值
¥{{ formatMoney(pvTvSummary.sampling_share) }}
其中·采样费分摊
¥{{ formatMoney(pvTvSummary.report_share) }}
其中·报告费分摊
¥{{ formatMoney(pvTvSummary.platform_share) }}
平台上传费(单列)
¥{{ formatMoney(pvTvSummary.commission) }}
采样提成(单列)
{{ pvTvSummary.no_quote_count }} / {{ pvTvTotal }}
无报价单 / 总场次
产值公式全链路:
① 报价单原价 ¥{{ formatMoney(row.formula.quote_total) }}
→ 成交价 ¥{{ formatMoney(row.formula.deal_price) }}
({{ row.formula.source_file.split('/').pop() }})
→ 签约 ¥{{ formatMoney(row.formula.total_amount) }} − 居间费 ¥{{ formatMoney(row.formula.broker_fee) }} − 分包费 ¥{{ formatMoney(row.formula.subcontract_fee) }}
= 合同实收净值 ¥{{ formatMoney(row.formula.net_amount) }}
(折扣率 {{ (row.formula.deal_price || row.formula.quote_total) ? (Math.round(row.formula.net_amount / (row.formula.deal_price || row.formula.quote_total) * 1000) / 10) + '%' : '—' }})
② 检测费基数 = 净值 ¥{{ formatMoney(row.formula.net_amount) }} − 附加费面值(采样费 ¥{{ formatMoney(row.formula.sampling_fee) }} + 报告费 ¥{{ formatMoney(row.formula.report_fee) }} + 平台费 ¥{{ formatMoney(row.formula.platform_fee) }})= ¥{{ formatMoney(row.detection_base) }}
③ 当次检测费产值 = 基数 ¥{{ formatMoney(row.detection_base) }} × 当次工作量 ¥{{ formatMoney(row.workload_now) }} ÷ 全年总工作量 ¥{{ formatMoney(row.workload_year) }} = ¥{{ formatMoney(row.detection_value) }}
④ 按次分摊(N = {{ row.formula.times_per_year }} 次/年):采样费 ¥{{ formatMoney(row.formula.sampling_fee) }}÷N = ¥{{ formatMoney(row.sampling_share) }};报告费 ¥{{ formatMoney(row.formula.report_fee) }}÷N = ¥{{ formatMoney(row.report_share) }};平台费 ¥{{ formatMoney(row.formula.platform_fee) }}÷N = ¥{{ formatMoney(row.platform_share) }}(单列,不进采样室产值)
⑤ 采样室产值 = ¥{{ formatMoney(row.detection_value) }} + ¥{{ formatMoney(row.sampling_share) }} + ¥{{ formatMoney(row.report_share) }} = ¥{{ formatMoney(row.total_value) }}
报价行挂接明细:
报价第{{ d.row_no }}行「{{ d.point_name }} · {{ d.test_items }}」单次价 ¥{{ d.per_session }} × 点位份额 {{ Math.round(d.share*100) }}% = ¥{{ d.amount }}
(点位:{{ (d.points||[]).join('、') }})
提成计算过程(采样室绩效方案):
「{{ cd.point_name }}」{{ cd.category }} {{ cd.rule }} = ¥{{ formatMoney(cd.amount) }}
采样提成合计 = ¥{{ formatMoney(row.commission) }}(单列,不计入采样室产值)
未挂接报价行(本任务点位未覆盖):第 {{ row.unmatched.join('、') }} 行
无明细({{ pvTvStatusText(row) }})
{{ perfSession.task.task_no }} · 第{{ perfSession.record ? perfSession.record.session_no : perfSession.session_no }}场 · {{ perfSession.task.company_name }}
采样日期:{{ perfSession.record ? perfSession.record.sampled_date : '—' }}
本场提成:¥{{ fmtAmt(perfSession.record ? perfSession.record.commission : 0) }}
✅ 计入提成的点位({{ perfSession.commission_detail.length }})
🚫 不计提成的点位({{ perfSession.excluded_points.length }})异常/未采点位不计算提成
📝 分配记录({{ perfSession.batches.length }} 轮)
尚未分配
第{{ b.round_no }}轮
{{ {pending:'待确认',confirmed:'已生效',final: b.is_legacy ? '历史均分' : '终审生效',rejected:'已驳回',superseded:'已失效(提成变动)'}[b.status] }}
分配人:{{ b.allocator_name }} · {{ b.created_at }}
驳回原因:{{ b.reject_by }}:{{ b.reject_reason }}
{{ a.member_name }} ¥{{ fmtAmt(a.amount) }}
✓
✗
…
{{ perfAllocForm.task_no }} · 第{{ perfAllocForm.session_no }}场 · 第{{ perfAllocForm.round_no }}轮分配
终审轮:提交即生效,不可驳回
本场待分提成:¥{{ fmtAmt(perfAllocForm.total) }}
均分
合计:¥{{ fmtAmt(perfAllocSum) }} / 应为 ¥{{ fmtAmt(perfAllocForm.total) }}
(差额 ¥{{ fmtAmt(Math.round((perfAllocForm.total - perfAllocSum) * 100) / 100) }})
✓
你本人的份额提交后自动确认;其他成员需逐个确认,任何人驳回(必填原因)则整张回炉重分。
⚙ 管理员运维:
清空原来数据
计划月:
批量导入新单(选择文件夹)
批量导入新单(选多个文件)
批量导入历史单·已完成(选择文件夹)
批量导入历史单·已完成(选多个文件)
⚠ 仅支持 .docx
{{ bulkImportProgress }}
共 {{ bulkDupDlg.rows.length }} 条重号(另有 {{ bulkDupDlg.newCount }} 条新单将正常导入)
全部覆盖并更新
全部跳过
{{ bulkDupDlg.failed.length }} 个文件未导入(非任务单或解析失败):{{ bulkDupDlg.failed.map(f => f.file).join('、') }}
覆盖并更新:只刷新任务单内容(单位/地址/联系人/点位/检测项目/计划月等),不动状态、排期、派单和执行数据,操作留痕。
{{ dispatchStats[label] || 0 }}
{{ label }}
检测项目({{ pointsOf(row).length }} 项)
暂无点位数据
| # | 检测类型 | 点位 | 检测项目 | 点位数 | 天数 | 频次 |
|---|---|---|---|---|---|---|
| {{ i+1 }} | {{ cnSampleType(p.sample_type || p.sample_type_code) }} | {{ p.point_name || '—' }} | {{ p.test_items || p.items || '—' }} | {{ p.point_count || 1 }} | {{ p.days || 1 }} | {{ p.frequency || 1 }} |
{{ w }}
{{ cell.day }}
{{ cell.tasks.length }}单
{{ t.task_no }}
{{ t.address || t.company_name || '-' }}
{{ t.task_no }}
{{ t.status }}
{{ t.priority }}
受检单位{{ t.company_name || '-' }}
受检地址{{ t.address || '-' }}
联系人{{ t.contact || '-' }}
采样内容{{ t.sample_types || '-' }}
点位数{{ t.point_count || 0 }}
采样日期{{ t.plan_date || '-' }}截止 {{ t.deadline }}
采样员{{ t.assigned_names || '未派发' }}
车辆{{ t.vehicle || '未派车' }}
检测项目明细
{{ t.test_items || '(无明细)' }}
{{ p.sample_type || '-' }}
{{ p.point_name || '未命名点位' }}
×{{ p.point_count }}
{{ p.test_items || '-' }}
执行标准:{{ p.standard }}
{{ supervisorStatusCount(label) }}
{{ label }}
共 {{ supervisorRows.length }} 单(当前显示 {{ supervisorDisplayRows.length }}),{{ supervisorDirtyCount }} 个待保存
{{ supervisorFullscreen ? '退出全屏(F1/Esc)' : '全屏编辑(F1)' }}
📤 批量导出
📥 批量导入
批量保存({{ supervisorDirtyCount }})
|
任务编号
无匹配项
|
受检单位
无匹配项
|
地市
无匹配项
|
区/镇
无匹配项
|
受检地址
无匹配项
|
计划月
无匹配项
|
优先级
无匹配项
|
检测项目 |
采样日期
无匹配项
|
小组长 | 采样员 | 备注 | 操作 | ||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| {{ supervisorFilter.status ? '当前筛选下无任务' : '当月暂无任务' }} | ||||||||||||||||||||||||||||||||||||||||
|
{{ row.task_no }}
{{ row.status }}
加载中...
暂无历史任务单
合同:{{ (historyCache[row.contract_id]||{}).contract_no || '-' }}
受检单位:{{ row.company_name || '-' }}
共 {{ ((historyCache[row.contract_id]||{}).tasks||[]).length }} 份任务单
|
{{ row.company_name }} | {{ row.city || '-' }} | {{ row.district || '-' }} | {{ row.address || '-' }} |
|
|
暂无点位
|
|
|
|
|
|
||||||||||||||||||||||||||||
📅
当日暂无任务
📋 现场调查记录表(LDG-XC-017)
采样员到达现场后填写工况调查;支持手机/平板
💧 废水排口
共 {{ fieldSurvey.wastewater_outlets.length }} 个
+ 添加排口
💨 废气排口
共 {{ fieldSurvey.exhaust_outlets.length }} 个
+ 添加排口
{{ fieldStats.total || 0 }}
总任务
{{ fieldStats.pending || 0 }}
待接收
{{ fieldStats.in_progress || 0 }}
进行中
{{ fieldStats.completed || 0 }}
已完成
{{ fieldStats.completion_rate || 0 }}%
完成率
我的采样任务
刷新
暂无任务
{{ t.company_name }}
{{ t.sample_types }} · {{ t.point_count }}个点位 · {{ t.address }}
受检单位:{{ fieldDetail.company_name }}
状态:{{ fieldDetail.status }}
样品类型:{{ fieldDetail.sample_types }}
点位数:{{ fieldDetail.point_count }}
地址:{{ fieldDetail.address }}
联系人:{{ fieldDetail.contact }} {{ fieldDetail.contact_phone }}
采样日期:{{ fieldDetail.plan_date }}
✓ 已绑定出库单:{{ fieldDisplayCheckout.checkout_no }}已归还
日期:{{ fieldDisplayCheckout.checkout_date }} ~ {{ fieldDisplayCheckout.checkout_date_end }}
仪器数:{{ fieldDisplayCheckout.instrument_count != null ? fieldDisplayCheckout.instrument_count : (fieldDisplayCheckout.items || []).length }} 台
暂无样品数据 — 请先在采样室"表格工作台"中确认并保存样品编号
暂无现场记录
{{ r.point_name || '记录' }}
{{ r.recorded_at }} · {{ r.recorded_by_name }}
天气:{{ r.weather }}
气温:{{ r.temperature }}
湿度:{{ r.humidity }}
风速:{{ r.wind_speed }}
风向:{{ r.wind_direction }}
气压:{{ r.pressure }}
工况:{{ r.work_condition }}
备注:{{ r.field_notes }}
GPS:{{ r.longitude }}, {{ r.latitude }}
暂无照片
暂无签名
{{ s.signer_name }}({{ s.signer_role }})
{{ s.signed_at }}
{{ log.action }} — {{ log.operator_name }}
{{ log.detail }}
加载中...
📦 出库单绑定
✓ 已绑定出库单:{{ fieldDisplayCheckout.checkout_no }}已归还
日期:{{ fieldDisplayCheckout.checkout_date }} ~ {{ fieldDisplayCheckout.checkout_date_end }}
小组长:{{ fieldDisplayCheckout.group_leader_name }} · 仪器数:{{ fieldDisplayCheckout.instrument_count }}台
暂无绑定出库单
📋 现场仪器使用记录表(31项)
导出Word
🧪 样品仪器记录
📸 拍小票对象:
{{ c }}
📊 {{ fieldItemReadingForm.category }} 字段
= {{ (parseFloat(fieldItemReadingForm.readings.conductivity) * 10).toFixed(2) }} μS/cm(入库时自动换算)
📸 拍仪器小票自动填
已匹配「{{ fieldStripOcrModel }}」({{ fieldCurrentInstrumentModel }})
{{ fieldCurrentInstrumentModel }} 暂无 OCR 模板
先选采样仪器
⏳ 识别中...
{{ s.parsed.report_type || '?' }} · 文件号 {{ s.parsed.file_no || '-' }} · {{ s.parsed.start_time || '' }}
删除
O₂ {{ s.parsed.o2 ?? '-' }}% · SO₂ {{ s.parsed.so2 ?? '-' }} · NO {{ s.parsed.no_conc ?? '-' }} · NO₂ {{ s.parsed.no2_conc ?? '-' }} · NOx {{ s.parsed.nox_conc ?? '-' }}(连打 {{ s.parsed.gas_runs.length }} 张)
烟温 {{ s.parsed.smoke_temp ?? '-' }}℃ · 标干流量 {{ s.parsed.std_flow ?? '-' }} m³/h · 流速 {{ s.parsed.flow_velocity ?? '-' }} m/s
🧾 连打小票待录入 {{ fieldSmokeRunQueue.length }} 张(保存当前条后自动填入下一张)
第 {{ q.seq || (qi + 2) }} 次 · 文件号 {{ q.file_no || '-' }} · {{ (q.start_time || '').slice(11) || '—' }} · O₂ {{ q.o2 ?? '-' }}% · NOx {{ q.nox_conc ?? '-' }}
填入此张
🔀 同小票分发:这张小票还有其他直读项目的数据,勾选后保存时一并各录一条(共用时段/仪器/文件号,因子各取各的)
字段对应 XC-012 表数据列;烟尘工况区填「烟尘工况」时段,烟气区填「烟气」起/止,两区不串。
📸 拍仪器小票自动填
已匹配「{{ fieldStripOcrModel }}」({{ fieldCurrentInstrumentModel }})
{{ fieldCurrentInstrumentModel }} 暂无 OCR 模板
先选采样仪器
吸附管采样:大机/小机小票分开拍,各填各的字段
→ 烟温/含湿量/流速/标干流量 {{ fieldVocsBigMachineCode }}先勾选大机仪器
→ 采样流量/采样时间/采样体积/标况体积/打印条编号 {{ fieldVocsSmallMachineCode }}先勾选小机仪器
⏳ 识别中...
{{ s.parsed.report_type || '?' }} · 文件号 {{ s.parsed.file_no || '-' }} · {{ s.parsed.start_time || '' }}
删除
烟温 {{ s.parsed.smoke_temp ?? '-' }}℃ · 含湿量 {{ s.parsed.humidity ?? '-' }}% · 标干流量 {{ s.parsed.std_flow ?? '-' }} m³/h
O₂ {{ s.parsed.o2 ?? '-' }}% · SO₂ {{ s.parsed.so2 ?? '-' }} · NO {{ s.parsed.no_conc ?? '-' }} · NO₂ {{ s.parsed.no2_conc ?? '-' }} · NOx {{ s.parsed.nox_conc ?? '-' }}(连打 {{ s.parsed.gas_runs.length }} 张)
环温 {{ s.parsed.ambient_temp ?? '-' }}℃ · 大气压 {{ s.parsed.atm_pressure ?? '-' }}kPa · 流量 {{ s.parsed.flow_rate ?? '-' }}L/min · 工/标/参体 {{ s.parsed.working_volume ?? '-' }}/{{ s.parsed.standard_volume ?? '-' }}/{{ s.parsed.reference_volume ?? '-' }} {{ s.parsed.volume_unit || '' }}
🌬️ 综合采样器附加数据(MH1205 等)
🌬️ 小机采样(MH1205 票)
🔥 大机工况(烟尘票)
🧪 烟气 {{ fieldItemReadingForm.readings.flue_gas_runs.length }} 次原始(写入记录表时按多行展开)
| # | 时段 | O₂ | SO₂ | NO | NO₂ | NOx |
|---|---|---|---|---|---|---|
| {{ idx+1 }} | {{ (rr.start_time||'').slice(11) }}-{{ (rr.end_time||'').slice(11) }} | {{ rr.o2 ?? '-' }} | {{ rr.so2 ?? '-' }} | {{ rr.no_conc ?? '-' }} | {{ rr.no2_conc ?? '-' }} | {{ rr.nox_conc ?? '-' }} |
📸 拍仪器小票自动填
已匹配「{{ fieldStripOcrModel }}」({{ fieldCurrentInstrumentModel }})
{{ fieldCurrentInstrumentModel }} 暂无 OCR 模板
先选采样仪器
⏳ 识别中...
{{ s.parsed.report_type || '?' }} · 文件号 {{ s.parsed.file_no || '-' }} · 通道 {{ s.parsed.channel || '-' }} · {{ s.parsed.start_time || '' }}
删除
环温 {{ s.parsed.ambient_temp ?? '-' }}℃ · 大气压 {{ s.parsed.atm_pressure ?? '-' }}kPa · 流量 {{ s.parsed.flow_rate ?? '-' }}L/min · 工/标/参体 {{ s.parsed.working_volume ?? '-' }}/{{ s.parsed.standard_volume ?? '-' }}/{{ s.parsed.reference_volume ?? '-' }} {{ s.parsed.volume_unit || '' }}
🌬️ 综合采样器数据(MH1205 等)
📸 拍噪声计小票自动填
已匹配「{{ fieldStripOcrModel }}」({{ fieldCurrentInstrumentModel }})
{{ fieldCurrentInstrumentModel }} 暂无 OCR 模板
先选噪声计
⏳ 识别中...
噪声 · {{ (s.parsed.points||[]).length }} 个测点删除
{{ pp.point_name }}:Leq {{ pp.leq ?? '-' }} · Lmax {{ pp.lmax ?? '-' }} · L10 {{ pp.l10 ?? '-' }} · L90 {{ pp.l90 ?? '-' }}
🔊 噪声 {{ fieldItemReadingForm.readings.noise_points.length }} 个测点原始(写入 LDG-XC-007 时按测点展开)
| 测点 | Leq | Lmax | Lmin | L5 | L10 | L50 | L90 | L95 |
|---|---|---|---|---|---|---|---|---|
| {{ np.point_name }} | {{ np.leq ?? '-' }} | {{ np.lmax ?? '-' }} | {{ np.lmin ?? '-' }} | {{ np.l5 ?? '-' }} | {{ np.l10 ?? '-' }} | {{ np.l50 ?? '-' }} | {{ np.l90 ?? '-' }} | {{ np.l95 ?? '-' }} |
将给以下样品都创建一条相同录数:{{ fieldItemReadingSiblingNos.join('、') }}(采样开始/结束时间不复制,各样品单独填写)
该点位「{{ fieldItemReadingForm.test_item }}」的历史采样/检测/报告数据
该任务尚未绑定出库单,请先在「仪器管理」Tab 绑定本组出库单
勾选本点位实际采集项目对应的保存方式,同点位所有样品共用,无需逐样品录入。
容器:G=棕色玻璃瓶 · P=透明聚乙烯瓶 · Pz=棕色聚乙烯瓶 · 溶解氧瓶=棕色玻璃瓶 · 无菌袋=透明聚乙烯袋
容器:G=棕色玻璃瓶 · P=透明聚乙烯瓶 · Pz=棕色聚乙烯瓶 · 溶解氧瓶=棕色玻璃瓶 · 无菌袋=透明聚乙烯袋
{{ g.note }}
把现场采集的所有样品送到实验室样品室,建议拍至少 1 张留底照片(与实验室交接画面 / 样品归置画面),然后点「确认交接」(未拍照也可交接,系统只提醒不拦截)。流转单会在实验室点「接收样品」时自动产出。
请在 {{ fieldDispoData.deadline || '完成采样 3 天内' }} 前处置每个异常点位({{ fieldDispoRemainText(fieldDispoData.deadline) }});逾期将每天提醒主管处置,不自动改期。
✓ 没有待处置的异常点位
整张任务都没法采时用(如:下雨、客户整体取消、现场不具备条件)。
整单内的所有点位会一起按你选的方式处理。
整单内的所有点位会一起按你选的方式处理。
① 整张任务怎么处理?
② 改期怎么安排?
⚠ 无可归并的后续任务,请改选「保留本任务编号」
对应 LDG-XC-001 表头需手填项,整个任务的水样共用一份。任务单号 / 单位 / 采样日期 / 天气 / 仪器编号由系统自动带入,无需在此填写。
※ 校准值相差大于 0.05 则需重新校准
请对每个点位勾选 ✓已采 或 ⚠未采。未采必须填写原因 + 详细说明。
{{ i+1 }}. {{ p.point_name || ('点位'+(i+1)) }}
{{ p.items || '' }}
本小组名下未查到出库单,已列出当天全部出库中的单,请确认小组后再绑定:
选择本任务采样人员名下、日期包含任务日期的出库单:
{{ ck.checkout_no }}
小组长:{{ ck.group_leader_name || ck.group_leader_phone || '—' }}
・日期:{{ ck.checkout_date }} ~ {{ ck.checkout_date_end }}
仪器数:{{ ck.instrument_count }}台
没有包含任务日期({{ fieldDetail.plan_date }})且「出库中」的出库单。
若确定已出库,请检查出库单的小组长和日期范围;或在「仪器台账-出入库管理」中创建对应日期范围的出库单。
若确定已出库,请检查出库单的小组长和日期范围;或在「仪器台账-出入库管理」中创建对应日期范围的出库单。
✓ 仪器齐备({{ bindFit.satisfied }}/{{ bindFit.required_total }} 项)
缺 {{ bindFit.missing.length }} 项(已满足 {{ bindFit.satisfied }}/{{ bindFit.required_total }} 项)
{{ bindFitExpanded ? '▲ 收起候选仪器' : '▼ 展开候选仪器(可勾选追加)' }}
{{ m.name }}
库内暂无空闲仪器
提示:该出库单缺 {{ bindFit.missing.length }} 项仪器,不影响绑定和开始采样;如需可展开勾选后「追加缺失仪器并绑定」。
追加到出库单:{{ fieldDisplayCheckout ? fieldDisplayCheckout.checkout_no : '' }}(追加后生成新出库单,原单视为归还;本组今天任务自动改绑新单)
{{ fieldAppendCk.expanded[cat.name] ? '▾' : '▸' }}
{{ cat.name }}
总{{ cat.total }}台
已出库{{ cat.checkedOut }}台
已选{{ cat.selectedCount }}台
{{ inst.instrument_code }}
{{ inst.instrument_name }}
{{ inst.model }}
没有可追加的仪器
任务:{{ smartCk.taskNo }} 小组长:{{ smartCk.leaderName }}({{ smartCk.groupName }})
借出日期
归还日期
默认任务计划日期,可调整
已按小组固定仪器智能预选({{ smartCk.selected.length }} 台),可手工调整;已被其他小组出库的仪器不可选
{{ smartCk.expanded[cat.name] ? '▾' : '▸' }}
{{ cat.name }}
总{{ cat.total }}台
已出库{{ cat.checkedOut }}台
已选{{ cat.selectedCount }}台
| 样品类型 | 监测点位 | 检测项目 | 点数 | 天数 | 频次 | 执行标准 | |
|---|---|---|---|---|---|---|---|
|
|
|||||||
| 暂无点位 | |||||||
任务编号:{{ dispatchDetail.task_no }}
状态:{{ dispatchDetail.status }}
受检单位:{{ dispatchDetail.company_name }}
优先级:{{ dispatchDetail.priority || '常规' }}
地址:{{ dispatchDetail.address }}
联系人:{{ dispatchDetail.contact }} {{ dispatchDetail.contact_phone }}
样品类型:{{ dispatchDetail.sample_types }}
点位数:{{ dispatchDetail.point_count }}
检测项目:{{ dispatchDetail.test_items }}
计划日期:{{ dispatchDetail.plan_date }}
截止日期:{{ dispatchDetail.deadline }}
采样员:{{ dispatchDetail.assigned_names }}
车辆:{{ dispatchDetail.vehicle }}
创建人:{{ dispatchDetail.created_by_name }}
创建时间:{{ dispatchDetail.created_at }}
接收时间:{{ dispatchDetail.received_at }}
接收人:{{ dispatchDetail.received_by }}
出发时间:{{ dispatchDetail.started_at }}
完成时间:{{ dispatchDetail.completed_at }}
取消原因:{{ dispatchDetail.cancel_reason }}
异常原因:{{ dispatchDetail.abnormal_reason }}
备注:{{ dispatchDetail.notes }}
采样原始记录上交:{{ dispatchDetail.milestone.sampling_records_submitted_at }}
必备表格清单
({{ requiredDocs.done }}/{{ requiredDocs.total }})
必备表格已全部完成
现场采样已完成,请将原始记录上交给报告室
重新派发
操作日志
{{ log.action }} — {{ log.operator_name || log.operator_phone }}
{{ log.detail }}
已上传文件:{{ taskOrderPreviewFilename }}
{{ siteMapDialog.error || '该任务暂无点位图' }}
任务编号:{{ quickDispatchTarget.task_no }}
受检单位:{{ quickDispatchTarget.company_name }}
地址:{{ quickDispatchTarget.address }}
计划日期:{{ planRangeText(quickDispatchTarget) }}
当前状态:{{ quickDispatchTarget.status }}
✓ 已应用「第{{ quickDispatchAppliedGroup.group_no }}组」配置(组员 {{ (quickDispatchAppliedGroup.members||[]).length }} 人 + 车辆 {{ quickDispatchAppliedGroup.vehicle_plate || '无' }}),可手动调整 ↓
任务编号:{{ partialAuditTask.task_no }}
受检单位:{{ partialAuditTask.company_name }}
小组长:{{ partialAuditTask.group_leader_name }}
采样员:{{ partialAuditTask.assigned_names }}
计划日期:{{ partialAuditTask.plan_date }}
场次总数:{{ partialAuditTask.session_count || 1 }}
点位采样情况({{ partialAuditPoints.length }} 个点位)
{{ i+1 }}. {{ p.point_name || '—' }}
{{ p.sampling_status || '未采' }}
第 {{ p.completed_session_no }} 场次完成
{{ p.items || '' }}
未采原因:
{{ p.reschedule_reason_category || '—' }}
{{ p.reschedule_reason_detail || '—' }}
上报人:{{ p.reschedule_by_name }} · {{ p.reschedule_at }}
· GPS {{ p.reschedule_gps[0].toFixed(4) }},{{ p.reschedule_gps[1].toFixed(4) }}
无照片
本次将生成 {{ samplingPreview.reduce((s,sr)=>s+(sr.sample_ids?sr.sample_ids.length:0),0) }} 个样品的二维码
{{ sr.point_name }}({{ sr.sample_type }})
{{ typeof sid === 'string' ? sid : sid.id }}
{{ item.sample_id }}
🧭 智能排单中心
月度分析 · 智能预排 · 日级派单 · 任务地图
起始月份
分析月数
开始分析
{{ m.plan_month }}
完成 {{ m.done_rate }}%
任务 {{ m.task_count }} 单 · 点位 {{ m.point_count }} 个
预估工时 {{ m.est_hours }} h · 已完成 {{ m.done_count }} 单
预测新增:{{ m.predicted_new >= 0 ? m.predicted_new + ' 单' : '数据不足' }}
预估工时 {{ m.est_hours }} h · 已完成 {{ m.done_count }} 单
预测新增:{{ m.predicted_new >= 0 ? m.predicted_new + ' 单' : '数据不足' }}
📊 状态分布({{ smartActiveMonthData.plan_month }})
🚀 优先级分布
🗺️ 区域分布
📅 每日负载({{ smartActiveMonthData.plan_month }})
≤3 单
4-6 单
≥7 单
{{ cell.date.slice(5) }} · {{ cell.tasks }}单
当月暂无已排期任务
⏳ 未排期任务({{ smartActiveMonthData.unscheduled_list.length }})
预排月份
每日容量
工时/日(留空=自动:小组数×6.5h,按可采样时段 9:00-12:00 / 14:00-17:30)
生成预排方案
📅 同步节假日
{{ w }}
预排后每日负载(容量 {{ smartSchedule.preSchedule.result.daily_cap || smartSchedule.preSchedule.dailyCap }} 工时/日)
{{ d.date.slice(5) }} · {{ d.hours }}h
派单日期
生成派单方案
规则基线 + AI 增强:技能匹配 · 工作量均衡 · 休假避让 · 仪器车辆匹配
📋 待排任务 {{ smartSchedule.dispatch.result.context_summary.task_count }}
👷 可用采样员 {{ smartSchedule.dispatch.result.context_summary.sampler_count }}
🔬 可用仪器 {{ smartSchedule.dispatch.result.context_summary.instrument_count }}
📅 派单日期 {{ smartSchedule.dispatch.result.context_summary.plan_date }}
{{ w }}
📍 企业点位库
签订合同时自动归户建档;点位默认检测项目用于现场录数参照
合并客户
🔄 刷新
暂无点位库数据。签订合同(受检方为公司需填统一社会信用代码)后系统会自动归户建档。
该客户暂无厂区/点位
暂无照片,可点击下方按钮上传
{{ ph.uploaded_by }} {{ (ph.created_at||'').slice(0,10) }}
📊 市场部仪表盘
数据范围:已签约合同(排除草稿/待签约)
合同总数 {{ mktDash.total_contracts }}
🔄 刷新
经营分析导出导出经营分析
{{ card.label }}缺失
{{ card.value }}
占 {{ ((card.value / mktDash.total_contracts) * 100).toFixed(1) }}%
经营转化与合同预警刷新预警
草稿{{ mktOps.stages['草稿']||0 }}
审批中{{ mktOps.stages['审批中']||0 }}
待签约{{ mktOps.stages['待签约']||0 }}
已签约{{ (mktOps.stages['待下单']||0)+(mktOps.stages['履约中']||0)+(mktOps.stages['已完成']||0) }}
合同健康待办{{row.alert}} ¥{{formatMoney(row.paid_amount)}} / {{formatMoney(row.total_amount)}}
客户经理待跟进
客户历史经营(报价次数、签约、开票、回款)
📊 自然月累计实收金额(按签订日期)
总条数:{{ importMissingResult.total }}
更新条数:{{ importMissingResult.updated }}
跳过条数:{{ importMissingResult.skipped }}
失败条数:{{ importMissingResult.failed }}
🧾 开票申请
我的 / 协作合同流程
+ 新增申请
刷新
开票申请必须关联合同,系统自动拦截超额开票(框架合同除外)和逾期未归档合同。
暂无开票申请
暂无草稿
| 合同编号 | 类型 | 委托方 | 受检方 | 状态 | 发起人 | 发起时间 | 操作 |
|---|---|---|---|---|---|---|---|
| {{ d.contract_no }} | {{ d.contract_type || '-' }} | {{ d.client || '-' }} | {{ d.testee_unit || '-' }} |
|
{{ d.reserved_by || '-' }} | {{ (d.reserved_at || '').slice(0, 16) || '-' }} |
|
第一步:录入检测需求
📎
点击或拖拽上传检测需求文件
支持 Excel / Word / 图片(PNG/JPG)/ TXT
📎 已选择:{{ quotFile.name }}
📝 草稿编号
下一个草稿号:
{{ nextContractNos.draft || '—' }}
|
签订后正式合同号:
常规单 {{ nextContractNos.regular || '—' }}
年度单 {{ nextContractNos.annual || '—' }}
🔄 刷新
· 进入"核对项目"步骤时系统自动领取下一个可用草稿号
· 报价/审批阶段使用草稿号(CG{年}{月}{4位流水}),签订合同时自动转为正式合同号
· 常规单:按月流水编号(非年度检测) · 年度单:按年流水 + 字母N(排污许可证年度检测)
· 报价/审批阶段使用草稿号(CG{年}{月}{4位流水}),签订合同时自动转为正式合同号
· 常规单:按月流水编号(非年度检测) · 年度单:按年流水 + 字母N(排污许可证年度检测)
第二步:AI 智能解析检测项目
🔍 {{ quotStreamMsg || '正在 OCR 识别图片...' }}
✓ OCR 识别完成
{{ quotOcrPreview }}
✨ {{ quotStreamMsg || 'AI 正在解析检测项目' }} ▊
{{ quotAiStream }}
✅
解析成功!共识别 {{ quotItems.length }} 项检测项目
第三步:核对检测项目(共 {{ quotItems.length }} 项)
草稿编号:{{ quotContractNo }} ({{ quotContractType }})
🔒 合同已归档 / 签订,报价只读不可修改
📋 报价单头部信息(写入 Excel)
🟢 库内参数(加盖 CMA 标识)
共 {{ quotInnerItems.length }} 项
| 检测类型 | 点位名称 | 检测项目 | 点位数 | 天数 | 频次 | 次/年 | 单价 | 小计 | |
|---|---|---|---|---|---|---|---|---|---|
| 暂无库内参数 | |||||||||
|
|
未匹配:{{ quotItems[it._idx].guidance_missed.join('、') }},请人工核价
阶梯计价:{{ quotItems[it._idx].guidance_tiered.join('、') }},请人工核价
|
{{ (Number(quotItems[it._idx].point_count||0)*Number(quotItems[it._idx].days||0)*Number(quotItems[it._idx].frequency||0)*Number(quotItems[it._idx].times_per_year||0)*Number(quotItems[it._idx].unit_price||0)).toLocaleString() }} | |||||||
🟠 库外参数(不加 CMA 标识)
共 {{ quotOuterItems.length }} 项
检测类型
点位名称
检测项目(可多选)
| 检测类型 | 点位名称 | 检测项目 | 点位数 | 天数 | 频次 | 次/年 | 单价 | 小计 | |
|---|---|---|---|---|---|---|---|---|---|
| 暂无库外参数 | |||||||||
|
|
未匹配:{{ quotItems[it._idx].guidance_missed.join('、') }},请人工核价
阶梯计价:{{ quotItems[it._idx].guidance_tiered.join('、') }},请人工核价
|
{{ (Number(quotItems[it._idx].point_count||0)*Number(quotItems[it._idx].days||0)*Number(quotItems[it._idx].frequency||0)*Number(quotItems[it._idx].times_per_year||0)*Number(quotItems[it._idx].unit_price||0)).toLocaleString() }} | |||||||
📜 服务条款(写入报价单末尾,最多 15 条)
重置条款
+ 添加条款
暂无条款,点击"+ 添加条款"或上传带条款的 Excel 自动识别。
{{ ci + 1 }}.
删
🏦 开户信息
开户名:
开户银行:
开户账号:
💰 费用预估
检测费:¥ {{ quotEstimate.detection.toLocaleString() }}
采样费:
重置
原¥{{ quotEstimate.autoSampling.toLocaleString() }}
检测报告编制费:
重置
原¥{{ quotEstimate.autoReportFee.toLocaleString() }}
税费(6%):¥ {{ quotEstimate.tax.toFixed(2) }}
合计:¥ {{ quotEstimate.total.toFixed(2) }}
✅
报价单生成成功!
共 {{ quotResult.item_count }} 项 · 总计 ¥ {{ quotResult.total.toLocaleString() }}
在线编辑保存后系统会自动回写,此处下载的即最新版(库外示例行可在在线编辑里自行保留或删除)。
非检测业务合同报价
录入合同基础信息和合同正文后,直接进入合同审批流程。
非检测业务合同不需要填写检测方案、点位或采样计划;审批通过后按非检测业务合同继续归档、回款和开票管理。
编号规则
{{ nonTestingQuoteForm.contract_no_mode === 'custom' ? '签订时手工填写并校验是否重复。' : `签订时自动获取下一个可用${nonTestingQuoteForm.testing_contract_type}检测业务合同编号。` }}
合同主体
履约与金额
签约金额 - 居间费 - 分包费,系统自动计算
经办信息
报价阶段可选填;发起审批时为必填项。
第 {{ index + 1 }} 期
%
¥ {{ nonTestingPlanAmount(plan).toLocaleString() }}
删除
支持 PDF、Word、JPG、PNG,单个文件不超过 30MB。
已上传:{{ nonTestingQuoteForm.contract_file_name }}
{{ approvalStats.pending || 0 }}
待审批
{{ approvalStats.approved || 0 }}
已通过
{{ approvalStats.rejected || 0 }}
已驳回
{{ approvalStats.total_pending_sign || 0 }}
待签约
{{ approvalStats.total_pending_archive || 0 }}
待归档
{{ row.client || '—' }}
{{ row.testee_unit || '—' }}
暂无数据
校验中…
{{ manualNoCheck.msg }}
· {{ r.label }}:{{ r.count }} 条({{ r.plans.join('、') }})(记录ID:{{ r.ids.join('、') }})
请到对应模块清理/解除以上引用后,编号即可自动释放复用
报价方式
智能报价
手工报价(Excel/图片)
合同类型 *
报价模版(Excel)*
选择文件
仅支持 .xlsx/.xls;上传后自动识别并回填表单空字段,提交时作为审批依据
盖章版合同
选择文件
选传,支持 .pdf/.jpg/.jpeg/.png,可多选
其他附件
选择文件
选传,不限格式,可多选
请先输入合同编号,再上传附件
审批方式
或签 · 任一人通过
并行会签 · 全部通过
逐级会签 · 按序逐个审
{{ approvalSubmitForm.sign_mode_ui==='and_sequence' ? '审批级数' : '审批人数' }}
{{ approvalSubmitForm.sign_mode_ui==='or' ? '至少选择 1 名审批人' : '会签至少 2 人' }}
{{ approvalSubmitForm.sign_mode_ui==='and_sequence' ? ('第 '+(i+1)+' 级') : ('审批人 '+(i+1)) }}
逐级顺序:{{ approverSlotNames.join(' → ') }}
✅ 免费单:应收 0 元,无需填写回款计划,提交后视为已结清。报告生成、交付、客户签收等履约流程仍需正常完成。
💰 回款计划 *
必填,未填写无法提交审批
次数:
比例合计必须 = 100%,当前
{{ approvalRatioSum }}%
均分比例
| 期数 | 回款计划编号 | 回款年月 | 支付比例(%) | 对应金额(元) |
|---|---|---|---|---|
| 第 {{ i+1 }} 期 |
{{ approvalSubmitForm.contract_no || '???' }}({{ i+1 }})
|
|
|
|
🧾 发票计划
开票次数:
合计 ¥{{ invoicePlanSum.toLocaleString() }}{{ Number(approvalSubmitForm.total_amount)>0 ? (' / 签约 ¥'+Number(approvalSubmitForm.total_amount).toLocaleString()) : '' }}
| 期数 | 开票截止日期(此日前须开) | 开票金额(元) |
|---|---|---|
| 第 {{ i+1 }} 期 |
|
|
该合同无需开票。需要开票时打开开关,并填写每期"最迟开票日 + 金额",审批通过后会自动推送给财务部开票。
合同编号:{{ approvalDetail.contract_no }}
状态:{{ approvalStatusLabel(approvalDetail.status) }}
委托单位:{{ approvalDetail.client || '-' }}
受检方:{{ approvalDetail.testee_unit || '-' }}
发起人:{{ approvalDetail.initiator_name }}
审批人:{{ approvalDetail.approver_name }}
发起时间:{{ approvalDetail.submitted_at }}
审批时间:{{ approvalDetail.decided_at }}
审批方式:
{{ approvalDetail.sign_mode==='and' ? (approvalDetail.sequential ? '逐级会签(按序逐个审,全部通过)' : '并行会签(同时审,全部通过)') : '或签(任一人通过即可)' }}
{{ approvalDetail.sequential ? (i+1)+'. ' : '' }}{{ s.approver_name }} ·
{{ s.status==='approved'?'✓ 已通过':(s.status==='rejected'?'✗ 已驳回':'… 待审批') }} · {{ String(s.decided_at).slice(5,16) }}
合同信息
合同类型:{{ approvalContract.contract_type || '-' }}
业务合同名称:{{ (approvalContract.quotation_data_parsed && approvalContract.quotation_data_parsed.business_title) || '-' }}
检测类别:{{ (approvalContract.quotation_data_parsed && approvalContract.quotation_data_parsed.header && approvalContract.quotation_data_parsed.header.test_category) || approvalContract.test_category || '-' }}
项目地址:{{ (approvalContract.quotation_data_parsed && approvalContract.quotation_data_parsed.header && approvalContract.quotation_data_parsed.header.project_location) || approvalContract.testee_address || '-' }}
客户联系人:{{ (approvalContract.quotation_data_parsed && approvalContract.quotation_data_parsed.header && approvalContract.quotation_data_parsed.header.contact) || approvalContract.contact || '-' }}
客户经理:{{ (approvalContract.quotation_data_parsed && approvalContract.quotation_data_parsed.header && approvalContract.quotation_data_parsed.header.account_manager) || approvalContract.account_manager || '-' }}
客服:{{ (approvalContract.quotation_data_parsed && approvalContract.quotation_data_parsed.header && approvalContract.quotation_data_parsed.header.customer_service) || approvalContract.customer_service || '-' }}
框架合同:
是
否
手工报价文件({{ approvalManualQuoteAttachments.length }})
📄 {{ a.filename }}
({{ (a.size / 1024).toFixed(1) }} KB)
{{ a.uploaded_at }}
在线预览
下载
检测项目({{ approvalContract.quotation_data_parsed.items.length }} 项)
| # | 检测类型 | 点位 | 检测项目 | 点位数 | 天数 | 频次 | 次/年 | 单价 | 小计 |
|---|---|---|---|---|---|---|---|---|---|
| {{ idx + 1 }} | {{ it.detect_type || '-' }} | {{ it.point_name || '-' }} | {{ it.items || '-' }} | {{ it.point_count || 1 }} | {{ it.days || 1 }} | {{ it.frequency || 1 }} | {{ it.times_per_year || 1 }} | ¥ {{ Number(it.unit_price||0).toLocaleString() }} | ¥ {{ (Number(it.point_count||0)*Number(it.days||0)*Number(it.frequency||0)*Number(it.times_per_year||0)*Number(it.unit_price||0)).toLocaleString() }} |
检测费:¥ {{ Number(approvalContract.quotation_data_parsed.result.detection_fee||approvalContract.quotation_data_parsed.result.detection||0).toLocaleString() }}
采样费:¥ {{ Number(approvalContract.quotation_data_parsed.result.sampling_fee||approvalContract.quotation_data_parsed.result.sampling||0).toLocaleString() }}
报告费:¥ {{ Number(approvalContract.quotation_data_parsed.result.report_fee||approvalContract.quotation_data_parsed.result.reportFee||0).toLocaleString() }}
税费:¥ {{ Number(approvalContract.quotation_data_parsed.result.tax||0).toFixed(2) }}
合计:¥ {{ Number(approvalContract.quotation_data_parsed.result.total||0).toFixed(2) }}
🆓 免费单(0元):本单为特殊申请免费做,应收 0 元、无回款计划。通过即视为已结清;报告/交付/签收等履约流程仍需正常完成。
📋 框架合同:金额 / 采样频次不固定,先生产再对账再回款。开票前需先对账确定实际收款金额。
① 合同签约金额:
{{ approvalDetail.is_free ? '免费单(0元)' : (Number(approvalDetail.total_amount||0) > 0 ? ('¥' + Number(approvalDetail.total_amount||0).toLocaleString()) : '待定(需审批人填写)') }}
✓ 通过
✗ 驳回
② 居间费(实付):¥{{ Number(approvalDetail.broker_fee||0).toLocaleString() }}
✓ 通过
✗ 驳回
实收金额:¥{{ Number(approvalDetail.net_amount||0).toLocaleString() }}
折扣:{{ approvalDiscountPercent }}%
(报价合计 ¥{{ approvalQuotationTotal.toLocaleString() }})
③ 回款计划({{ approvalDetailPaymentPlan.length }} 期)
✓ 通过
✗ 驳回
| 期数 | 回款计划编号 | 回款年月 | 比例 | 金额 |
|---|---|---|---|---|
| 第 {{ i+1 }} 期 | {{ approvalDetail.contract_no }}({{ i+1 }}) |
{{ p.month }} | {{ p.ratio }}% | ¥{{ Math.round(Number(approvalDetail.total_amount||0) * (Number(p.ratio)||0) / 100 * 100) / 100 }} |
审批人重新编排(比例合计须 = 100%,当前
{{ reviewPaymentRatioSum }}%)
| 第 {{ i+1 }} 期 | {{ approvalDetail.contract_no }}({{ i+1 }}) |
签约金额:¥{{ Number(approvalDetail.total_amount||0).toLocaleString() }}
居间费(实付):¥{{ Number(approvalDetail.broker_fee||0).toLocaleString() }}
实收金额:¥{{ Number(approvalDetail.net_amount||0).toLocaleString() }}
折扣:{{ approvalDiscountPercent }}%
回款计划:
| 期数 | 回款年月 | 比例 | 金额 |
|---|---|---|---|
| 第 {{ i+1 }} 期 | {{ p.month }} | {{ p.ratio }}% | ¥{{ Math.round(Number(approvalDetail.total_amount||0) * (Number(p.ratio)||0) / 100 * 100) / 100 }} |
驳回明细:
· {{ ({amount:'签约金额',broker:'居间费',payment:'回款计划'})[k] }}:
建议 {{ v.value }}
({{ v.comment }})
审批意见:{{ approvalDetail.approve_comment }}
请输入合同编号
确定
刷新
下一个可用常规单编号:{{ nextContractNos.regular }}
下一个可用年度单编号:{{ nextContractNos.annual }}
📋 我的合同
{{ c.contract_no }}
{{ c.status }}
委托:{{ c.client || '-' }}
受检:{{ c.testee_unit || '-' }}
步骤 1:上传合同文件
📎
点击或拖拽上传合同 PDF / 图片 / Excel / Word
AI 自动识别客户信息、点位、项目、频次
📎 {{ f.name }}
{{ contractEditorMode === 'signing' ? '补充合同信息(签订前)' : '编辑合同信息' }}
当前状态:{{ contractStatusLabel(contractDraft) }}
· 所有字段可编辑;点击"签订合同"后进入"待下单",此后主体不可再改
· 合同已签订,请尽快"一键生成任务单"(生成后状态自动变为"履约中")
· 有全字段编辑权限:已签订合同的任何字段都可修改
· 合同已签订:已有内容的字段锁定,仅可补充空白字段(金额类除外)
· 手工调整状态会记录操作日志,请仅用于纠正历史数据。
草稿号:{{ contractDraft.draft_no }}
归档状态
待归档
去归档
保存后撤销归档:清空归档日期并重新进入待归档清单,历史附件仍保留。
修改合同编号不会自动联动类别,请手动核对
框架合同按实际支付自动累计,无需填写总额
回款计划
(审批已确认,不可修改)
合计 ¥ {{ paymentsTotal.toLocaleString() }}
⚠ 与签约金额 ¥{{ Number(contractDraft.total_amount).toLocaleString() }} 不一致
| 序号 | 回款计划编号 | 回款月份 | 回款金额(元) |
|---|---|---|---|
| 第 {{ i+1 }} 笔 |
{{ contractDraft.contract_no || contractDraft.draft_no || '???' }}({{ i+1 }})
|
|
元 |
采样点位
| # | 点位名 | 检测类型 | 执行标准 | 操作 |
|---|---|---|---|---|
| {{ i+1 }} | ||||
| 暂无点位,点击下方"添加点位" | ||||
每次采样检测项目配置
每个点位独立增减采样次数(右侧 + / − 按钮);"雨水"属送样检测,不在此处配置
请先在上方添加点位
({{ samplingVisibleNum(pi) }})
{{ p.point_name || '(未命名)' }}
{{ p.sample_type }}
项目组 {{ groupsOfPoint(pi).length }}
项目组 {{ g }}
共 {{ itemsOfGroup(pi, g).length }} 次/年
检测项目(本组通用,顿号分隔):
检测点位:
检测天数:
检测频次:
执行标准:
{{ std }}
×
(请先在上方点位表填写执行标准)
各次月份:
第{{ idx+1 }}次
{{ contractApprovalStatus==='pending' ? '⏳' : (contractApprovalStatus==='rejected' ? '⛔' : '⚠') }}
{{
contractApprovalStatus==='pending' ? '待审批' :
contractApprovalStatus==='rejected' ? '审批已驳回' : '尚未发起审批'
}}:
{{
contractApprovalStatus==='pending' ? '审批通过后才能"签订合同"或"一键生成任务单"。' :
contractApprovalStatus==='rejected' ? '请前往"合同审批"页查看驳回原因,修改后重新发起审批。' :
'该合同尚未发起审批,请先前往"合同审批"页发起审批并通过。'
}}
✍
该合同尚未签订
请先补充合同信息并签订,签订后才能生成任务单
{{ contractDraft.contract_no }}
{{ contractDraft.status }}
委托方:{{ contractDraft.client || '-' }}
受检方:{{ contractDraft.testee_unit || '-' }}
客户经理:{{ contractDraft.account_manager || '-' }}
现任客户经理:{{ contractDraft.current_account_manager || '-' }}
客服:{{ contractDraft.customer_service || '-' }}
现任客服:{{ contractDraft.current_customer_service || '-' }}
履约期间:{{ contractDraft.start_date || '-' }} ~ {{ contractDraft.end_date || '-' }}
首次采样:{{ contractDraft.first_sampling_month || '-' }}
采样次数:{{ contractDraft.total_rounds || 0 }} 次/年
签订日期:{{ contractDraft.signed_date || '-' }}
采样点位
| # | 点位名 | 检测类型 | 执行标准 | 操作 |
|---|---|---|---|---|
| {{ i+1 }} | ||||
| 暂无点位,点击下方"添加点位" | ||||
每次采样检测项目配置
每个点位独立增减采样次数(右侧 + / − 按钮);"雨水"属送样检测,不在此处配置
请先在上方添加点位
({{ samplingVisibleNum(pi) }})
{{ p.point_name || '(未命名)' }}
{{ p.sample_type }}
项目组 {{ groupsOfPoint(pi).length }}
项目组 {{ g }}
共 {{ itemsOfGroup(pi, g).length }} 次/年
检测项目(本组通用,顿号分隔):
检测点位:
检测天数:
检测频次:
执行标准:
{{ std }}
×
(请先在上方点位表填写执行标准)
各次月份:
第{{ idx+1 }}次
任务单操作
📋
当前状态:{{ contractDraft.status }}
该合同还未发起(或驳回后重新)审批。请前往"合同审批"页发起审批并通过。
审批进行中,请等待审批人处理。
📋 已生成任务单({{ contractExistingTasks.length }})
📦 一键下载全部任务单(ZIP)
| 任务号 | 第几次 | 计划月份 | 具体日期 | 状态 | 优先级 | 操作 |
|---|---|---|---|---|---|---|
| {{ t.task_no }} | 第{{ t.round_no }}次 | {{ t.plan_month || '-' }} | {{ t.plan_date || '待排期' }} | {{ t.status }} {{ t.status }} |
|
|
审批节点预览
{{line}}
合同:{{contractChangeContract.contract_no}} 甲方:{{contractChangeContract.client||'-'}} 签约金额:¥{{formatMoney(contractChangeContract.total_amount||0)}} 状态:{{contractChangeContract.status}}
{{contractChangeFieldLabel(key)}}
变更前:{{contractChangeFieldText(key, contractChangeContract?.[key])}}
合同终止通过后将冻结该合同后续业务操作,历史审批、发票和流水记录仍保留。履行到一半终止合作(中途终止)可在下方同步调整签约金额 / 居间费 / 分包费并重排回款计划;留空表示保持原值。签了未履行的,金额填 0 整单全止。终态分流:金额大于 0 落为「已终止」(有过交付,继续参与业绩、提成、应收统计,剩余款项照收);金额填 0 落为「已作废」(视作未发生,不计入统计)。
新签约金额
原值 ¥{{formatMoney(contractChangeContract?.total_amount||0)}} · 已回款 ¥{{formatMoney(contractChangeContract?.paid_amount||0)}}(下限)
新居间费
原值 ¥{{formatMoney(contractChangeContract?.broker_fee||0)}} · 已付 ¥{{formatMoney(contractChangeContract?.broker_fee_paid||0)}}(下限,另含在途申请)
新分包费
原值 ¥{{formatMoney(contractChangeContract?.subcontract_fee||0)}} · 已付 ¥{{formatMoney(contractChangeContract?.subcontract_fee_paid||0)}}(下限,另含在途申请)
回款计划变更:签约金额不变,只调整期数、回款年月和每期金额。审批通过后整体替换未收款的计划;已收款/已销账/已开票的期会自动锁定保留。
必须上传补充协议({{isVoidChangeType()?'合同终止': '签约金额 / 甲方 / 乙方变更'}})
支持 pdf / word / 图片,提交时随表单一起上传
回款计划编辑
{{ (contractChangeForm.fields.includes('total_amount') || voidAmountEntered()) ? ('新签约金额:¥'+formatMoney(contractChangeEffectiveAmount())) : ('签约金额(不变):¥'+formatMoney(contractChangeContract?.total_amount||0)) }} 当前合计:¥{{formatMoney(contractChangePaymentTotal())}} 已收款/已销账的期锁定不动;已开票未收款的期金额不得低于已开票(发票即应收,不收了请先作废发票)
变更差异
{{contractChangeFieldLabel(key)}}:{{contractChangeFieldText(key, row.before[key])}} → {{contractChangeFieldText(key, value)}}
变更后回款计划
第{{pi+1}}期:{{p.plan_month||'-'}} ¥{{formatMoney(p.amount||0)}}已关联开票/流水
审批过程{{a.seq}}. {{a.approver_name}}({{a.status}})
{{ contractOverview.draft_reserved || 0 }}
预占 / 草稿
已领号未签订
{{ contractOverview.total || 0 }}
合同总数
已签订合同累计
{{ contractOverview.done || 0 }}
已完成
{{ contractOverview.active || 0 }}
履约中
{{ contractOverview.pending || 0 }}
待下单
{{ contractOverview.terminated || 0 }}
已终止
{{ contractOverview.cancelled || 0 }}
已作废
{{ contractOverview.ending_soon || 0 }}
60天内到期
年度单签订日+1年临近
| 纸质序号 | 合同编号 | 签订日期 | 归档日期 | 委托单位 | 受检单位 | 合同签约金额 | 已收款 | 已销账金额 | 未销账金额 | 应收余额 | 到期应收 | 未到期 | 实收金额 | 居间费 实付 |
居间费 已付 |
居间费 待付 |
分包费 实付 |
分包费 已付 |
分包费 未付 |
已开票 金额 |
未开票 金额 |
客户经理 | 现任客户经理 | 客服 | 现任客服 | 所属渠道 | 履约进度 | 状态 | 对应发票 | 对应回款计划 | 对应任务 | 关联报告 | 操作 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| {{ c.contract_serial || '-' }} |
{{ c.contract_no }}
|
{{ c.signed_date || '-' }} | {{ c.archive_date }} 待归档 - | {{ (c.total_amount||0).toLocaleString() }} | {{ (c.paid_amount||0).toLocaleString() }} | {{ (c.cleared_amount||0).toLocaleString() }} | {{ Math.max(0,Number(c.paid_amount||0)-Number(c.cleared_amount||0)).toLocaleString() }} | {{ (c.unpaid_amount||0).toLocaleString() }} | {{ (c.receivable_due_amount||0).toLocaleString() }} | {{ (c.not_due_amount||0).toLocaleString() }} | {{ ((c.total_amount||0) - (c.broker_fee||0) - (c.subcontract_fee||0)).toLocaleString() }} | 按实支付{{ (c.broker_fee||0).toLocaleString() }} | {{ (c.broker_fee_paid||0).toLocaleString() }} | 按实支付{{ (c.broker_fee_pending||0).toLocaleString() }} | {{ (c.subcontract_fee||0).toLocaleString() }} | {{ (c.subcontract_fee_paid||0).toLocaleString() }} | {{ (c.subcontract_fee_pending||0).toLocaleString() }} | {{ (c.invoiced_amount||0).toLocaleString() }} | {{ Math.max(0,(Number(c.total_amount)||0)-(Number(c.invoiced_amount)||0)).toLocaleString() }} | {{ nameOnly(c.account_manager) || '-' }} | {{ nameOnly(c.current_account_manager) || '-' }} | {{ nameOnly(c.customer_service) || '-' }} | {{ nameOnly(c.current_customer_service) || '-' }} |
{{ (c.task_stats && c.task_stats.completed) || 0 }}/{{ c.total_rounds || 0 }}
|
|
{{ iv.invoice_no }} · {{ iv.issue_date || '-' }}
{{ (iv.amount||0).toLocaleString() }}
|
已回{{ c.payments_brief.filter(p => p.received).length }}期
未回{{ c.payments_brief.filter(p => !p.received).length }}期
第{{ p.seq }}期
{{ p.plan_month || '-' }}
{{ (p.amount||0).toLocaleString() }}
|
共{{ c.tasks_brief.length }}:
已{{ c.tasks_brief.filter(t => t.status === '已完成').length }}
未{{ c.tasks_brief.filter(t => t.status !== '已完成').length }}
{{ t.task_no }}
第{{ t.round_no }}次
{{ t.plan_month || '-' }}
|
共{{ c.reports_brief.length }}:
已签发{{ c.reports_brief.filter(r => r.status === '已签发').length }}
未签发{{ c.reports_brief.filter(r => r.status !== '已签发').length }}
{{ r.task_no }}
|
|
||||
| 暂无合同 | ||||||||||||||||||||||||||||||||||
合同编号:{{ contractReportAttachmentsDialog.contract_no }}
暂无报告附件
报告编号:{{ group.report_no }}({{ group.status }})
{{ att.kind === 'check_version' ? '核对版' : (att.kind === 'qc_report' ? '质控报告' : '盖章版') }}:{{ att.filename }}
上传人:{{ att.uploaded_by_name }} {{ att.uploaded_at }}
下载
统计口径
查询
重置
导出对账单
对账周期:{{ reconciliationResult.period.start ? reconciliationResult.period.start + ' ~ ' + reconciliationResult.period.end : '历史以来 ~ ' + reconciliationResult.period.end }} · {{ basisLabel(reconciliationResult.basis || reconciliationFilter.basis) }}
请选择条件并点击查询
🔎
没有找到匹配的合同或任务
{{ contractEditorDialogTitle }}
✕
基本信息
合同编号:{{ contractDetail.contract_no }}
草稿编号:{{ contractDetail.draft_no }}
合同类型:
{{ contractDetail.contract_type || '-' }}
修改
保存
取消
状态:
{{ contractDetail.status }}
业务合同名称:{{ (contractDetail.quotation_data_parsed && contractDetail.quotation_data_parsed.business_title) || '-' }}
合同正文:查看 / 下载 未上传
业务闭环:{{ contractDetail.archived ? '已归档,可进行财务关联' : '签订后待归档' }}
是否框架合同:
是
否
检测类别:{{ contractDetail.test_category || '-' }}
委托单位:{{ contractDetail.client || '-' }}
受检单位:{{ contractDetail.testee_unit || '-' }}
统一社会信用代码:{{ contractDetail.testee_credit_code || '-' }}
受检地址:{{ contractDetail.testee_address || '-' }}
客户经理:{{ contractDetail.account_manager || '-' }} {{ contractDetail.manager_phone }}
现任客户经理:{{ contractDetail.current_account_manager || '-' }}
客服:{{ contractDetail.customer_service || '-' }}
现任客服:{{ contractDetail.current_customer_service || '-' }}
联系人:{{ contractDetail.contact || '-' }} {{ contractDetail.contact_phone }}
签订日期:{{ contractDetail.signed_date || '-' }}
起止:{{ contractDetail.start_date || '-' }} ~ {{ contractDetail.end_date || '-' }}
合同序号:{{ contractDetail.contract_serial || '-' }}
归档日期:
{{ contractDetail.archive_date || '-' }}
待归档
-
归档人:{{ contractDetail.archived_by || '-' }}
频次:{{ contractDetail.frequency || '-' }}
采样次数:{{ contractDetail.total_rounds || 0 }} 次/年
首次月份:{{ contractDetail.first_sampling_month || '-' }}
合同金额:¥ {{ (contractDetail.total_amount||0).toLocaleString() }}
居间费:按实支付(已付 ¥ {{ (contractDetail.broker_fee_paid||0).toLocaleString() }})¥ {{ (contractDetail.broker_fee||0).toLocaleString() }}
分包费:¥ {{ (contractDetail.subcontract_fee||0).toLocaleString() }}
实收金额:¥ {{ (contractDetail.net_amount||0).toLocaleString() }}
创建时间:{{ contractDetail.created_at || '-' }}
更新时间:{{ contractDetail.updated_at || '-' }}
备注:{{ contractDetail.notes }}
💰 金额构成(签约金额 = 已收款 + 应收未收 + 未到期)
¥{{ formatMoney(contractDetail.total_amount || 0) }}
合同签约金额
¥{{ formatMoney(contractDetail.paid_amount || 0) }}
已收款
¥{{ formatMoney(contractDetail.cleared_amount || 0) }}
已销账金额
财务销账流水累计
¥{{ formatMoney(contractDetail.receivable_due_amount || 0) }}
应收未收
已开票 / 到期已交付
¥{{ formatMoney(contractDetail.not_due_amount || 0) }}
未到期
计划月未到 / 报告未交付
审批信息
审批状态:
{{ {pending:'待审批',approved:'已通过',rejected:'已驳回',withdrawn:'已撤回',cancelled:'已取消'}[contractDetail.latest_approval.status] || contractDetail.latest_approval.status }}
审批人:{{ contractDetail.latest_approval.approver_name || '-' }}
发起人:{{ contractDetail.latest_approval.initiator_name || '-' }}
发起时间:{{ contractDetail.latest_approval.submitted_at || '-' }}
审批时间:{{ contractDetail.latest_approval.decided_at || '-' }}
提交说明:{{ contractDetail.latest_approval.submit_comment }}
审批意见:{{ contractDetail.latest_approval.approve_comment }}
采样点位({{ contractDetail.points.length }})
| 序号 | 点位名称 | 检测类型 | 执行标准 | 备注 |
|---|---|---|---|---|
| {{ pi + 1 }} | {{ p.point_name }} | {{ p.sample_type }} | {{ p.standard || '-' }} | {{ p.notes || '-' }} |
检测项目明细({{ contractDetail.items.length }})
| 点位# | 项目组 | 第几次 | 检测项目 | 执行标准 | 计划月份 | 点位数 |
|---|---|---|---|---|---|---|
| {{ (it.point_index ?? 0) + 1 }} | {{ it.group_no }} | 第{{ it.round_no }}次 | {{ it.test_items }} | {{ it.standards || '-' }} | {{ it.plan_month || '-' }} | {{ it.point_count || 1 }} |
回款计划({{ contractDetailPayments.length }})
· 来自审批通过记录
| 序号 | 回款计划编号 | 计划月份 | 金额 | 到账 | 到账日期 | 开票 | 开票日期 | 报告交付 | 操作 |
|---|---|---|---|---|---|---|---|---|---|
| 第 {{ pi + 1 }} 笔 |
{{ contractDetail.contract_no }}({{ pi + 1 }})
|
{{ pay.plan_month || '-' }} | ¥ {{ (pay.amount||0).toLocaleString() }} | 已到账 未到账 | {{ pay.received_tx_date }} - | 已开票 未开票 | {{ pay.invoiced_date }} - | 已交付 {{ pay.delivered_at || '' }} 未交付 |
合同资料({{ contractDetailAttachments.length }})
盖章版合同({{ contractDetailStampedAttachments.length }})
📄 {{ a.filename }}
({{ (a.size / 1024).toFixed(1) }} KB)
{{ a.uploaded_at }}
其他资料({{ contractDetailOtherAttachments.length }})
📄 {{ a.filename }}
({{ (a.size / 1024).toFixed(1) }} KB)
{{ a.uploaded_at }}
暂无附件
任务单列表({{ (contractDetailTasks || []).length }})
| 任务号 | 第几次 | 计划月份 | 具体日期 | 状态 | 优先级 | 操作 |
|---|---|---|---|---|---|---|
| {{ t.task_no }} | 第{{ t.round_no }}次 | {{ t.plan_month }} | {{ t.plan_date || '待排期' }} | {{ t.status }} {{ t.status }} |
|
|
| 尚未生成任务单 |
该合同暂无上传的资料
盖章版合同({{ contractFilesDialog.stampedFiles.length }})
+ 补充
📄 {{ a.filename }}
({{ (a.size/1024).toFixed(1) }} KB)
{{ a.uploaded_at }}
查看
下载
删除
报价单({{ contractFilesDialog.quoteFiles.length }})
+ 上传报价单
📄 {{ a.filename }}
({{ (a.size/1024).toFixed(1) }} KB)
{{ a.uploaded_at }}
查看
下载
删除
其他资料({{ contractFilesDialog.otherFiles.length }})
+ 补充
📄 {{ a.filename }}
({{ (a.size/1024).toFixed(1) }} KB)
{{ a.uploaded_at }}
查看
下载
删除
已关联开票合计:¥{{ contractInvoiceDialog.invoicedTotal.toLocaleString() }}
签约金额:¥{{ (contractInvoiceDialog.totalAmount||0).toLocaleString() }}
未开票:¥{{ Math.max(0,(contractInvoiceDialog.totalAmount||0)-contractInvoiceDialog.invoicedTotal).toLocaleString() }}
该合同暂无已关联发票
已选 {{ batchArchiveDialog.rows.length }} 份可归档合同,系统从当前最大纸质序号 +1 开始自动递增,可单独修改。
没有符合归档条件的合同(需为待下单/履约中/已完成且未归档)。
请上传盖章版合同扫描件(将应用到本次向导所有合同)
⬆
拖拽或点击上传
合同编号:{{ archiveForm.contract_no }}
委托单位:{{ archiveForm.client || '-' }}
当前状态:{{ archiveForm.current_status || '-' }}
必须上传至少一份盖章版合同,归档才算正式生效
⬆
拖拽或点击上传盖章版合同扫描件(可多选)
⬆
拖拽或点击上传其他资料(报价单、补充协议等,可选)
流转记录
{{ h.actor }}:{{ ncActionLabel(h.action) }}({{ ncStatusLabels[h.from] || h.from }} → {{ ncStatusLabels[h.to] || h.to }})
原因:{{ h.detail.root_cause }}
措施:{{ h.detail.corrective_action }}
结论:{{ h.detail.verify_result }}|{{ h.detail.verify_note }}
备注:{{ h.detail.note }}
暂无流转记录
已按样品类型给建议值(水 7 天 / 土壤 30 天 / 气 3 天 / 其他 7 天),可修改
审批人不能与申请人为同一人;通过后记录处置时间,驳回后回到在留/到期可重新申请。
子样编号 = 母样编号 + “-序号”(如 {{ slcSplitForm.sample_code }}-1),继承项目/点位/类型/检测项目,可单独流转
变更历史
样品:{{ slcReturnForm.sample_code }}
退样记录
仅针对未转入留样的普通样品;已转留样的请在「留样管理」走处置审批。登记后样品状态变为「已处置」。
新建时只能选已在该组的成员,需先创建再加成员再设组长
共 {{ labGroupCandidates.length }} 名候选(已在组的员工不显示,先从原组移除)
原样品编号:
{{ labAppendSource.sample_id }}受检单位:{{ labAppendSource.company_name }}
检测项目:{{ labAppendSource.test_items }}
{{ labAppendPreviewSid }}
将驳回已勾选的 {{ labTaskChecked.length }} 条任务(逐条处理,失败不影响其他)
受检单位:{{ labTaskDetail.company_name || '—' }} · 检测员:{{ labTaskDetail.assigned_to || '—' }} · 样品类型:{{ labTaskDetail.sample_type || '—' }} · 采样日期:{{ labTaskDetail.sampling_date || '—' }}
数据录入
检测日期:
~
{{ desc }}({{ key }}):
检测值:
{{ labCalcResult.display }}
原始值: {{ labCalcResult.calc_result }} · 修约(GB/T 8170): {{ labCalcResult.rounded_result }}
{{ labCalcResult.warning.message || labCalcResult.warning }}
⚠ 数据关联性预警(不拦截,请复核)
· {{ w.message }}({{ w.item_a }}={{ w.value_a }},{{ w.item_b }}={{ w.value_b }})
📋 原始记录数据
{{ recordLabel(k) }}:
{{ v }}
{{ recordLabel(rk) }}:
{{ rv }}
二氯甲烷浓度计算公式
M={{labTaskDetail.raw_data.molar_mass||'—'}}(g/mol) × D={{labTaskDetail.raw_data.dilution_d||'—'}} × φ={{labTaskDetail.raw_data.target_conc||'—'}}(μmol/mol) ÷ [(1-XSW{{labTaskDetail.raw_data.xsw||'—'}}%)×22.4] = {{labTaskDetail.raw_data.rho||'—'}} mg/m³
{{ labTaskDetail.is_nd ? 'ND' : labTaskDetail.rounded_result }}
原始值: {{ labTaskDetail.calc_result || '—' }} · 修约规则: GB/T 8170
操作记录
{{ t.action }} — {{ t.operator }}
{{ t.time }}
✔ {{ r.filename }} — {{ r.template_name || r.template_code }} · 匹配:{{ r.match_way || '人工指定' }} · 样品行数:{{ r.rows_n }}
📝 打开核实(在线编辑)
✘ {{ r.filename }} — {{ r.error }}
⚠ {{ r.warning }}
暂无识别记录
{{ it.test_item || '未指定项目' }}
{{ it.status }}
{{ it.template_name || it.template_code || '未识别模版' }}
请选择左侧记录
该文件类型不支持预览
{{ h.label }}:
{{ h.label }}:
子项({{ labRecogSubitems.length }} 项)
{{ si.name }}
检出限:{{ si.detection_limit }}
检测方法/标准号:{{ si.method_std }}
仪器:{{ si.instrument }}
暂无启用的检测员,请先在系统管理 · 用户岗位中配置
| 批次号 | 批次名 | 检测项目 | 检测员 | 任务数 | 创建人 | 创建时间 | 操作 |
|---|---|---|---|---|---|---|---|
| {{ b.batch_no }} | {{ b.batch_name }} | {{ b.test_item || '—' }} | {{ b.detector || '—' }} | {{ b.task_count || 0 }} | {{ b.created_by || '—' }} | {{ b.created_at }} | |
| 暂无批次 | |||||||
{{ batchDetail.batch_no }} · {{ batchDetail.batch_name }} (已进入流转的任务不可移出)
| 任务# | 样品编号 | 检测项目 | 检测员 | 状态 | 操作 |
|---|---|---|---|---|---|
| {{ t.id }} | {{ t.sample_no || '—' }} | {{ t.test_item }} | {{ t.assigned_to || '—' }} |
|
|
| 批次内暂无任务 | |||||
{{ labQrcodeLabel }}
共 {{ notifList.length }} 条通知
全部已读
暂无通知
{{ n.title }}
{{ n.created_at }}
{{ n.content }}
🔗 合同、发票、流水三方关联工作台
按金额覆盖核对销项发票、业务收入流水和合同回款计划,优先处理尚未闭环的缺口。
有效合同金额
¥{{ formatMoney(financeRelationship.summary.contracts.amount) }}
{{ financeRelationship.summary.contracts.count || 0 }} 份合同
销项发票金额
¥{{ formatMoney(financeRelationship.summary.out_invoices.amount) }}
{{ financeRelationship.summary.out_invoices.count || 0 }} 张有效销项发票
业务收入流水
¥{{ formatMoney(financeRelationship.summary.business_income.amount) }}
{{ financeRelationship.summary.business_income.count || 0 }} 笔需关联合同
合同 ↔ 发票已关联
¥{{ formatMoney(financeRelationship.summary.contract_invoice.amount) }}
{{ financeRelationship.summary.contract_invoice.count || 0 }} 条分摊
合同 ↔ 流水已关联
¥{{ formatMoney(financeRelationship.summary.contract_tx.amount) }}
{{ financeRelationship.summary.contract_tx.count || 0 }} 条回款
发票 ↔ 流水已核对
¥{{ formatMoney(financeRelationship.summary.invoice_tx.amount) }}
{{ financeRelationship.summary.invoice_tx.count || 0 }} 条核对
优先处理事项
发票待分摊合同 {{ financeRelationship.risk_counts.invoice_contract_gap || 0 }}
发票待核流水 {{ financeRelationship.risk_counts.invoice_tx_gap || 0 }}
业务收入待分摊 {{ financeRelationship.risk_counts.tx_contract_gap || 0 }}
历史超额 {{ financeRelationship.risk_counts.contract_invoice_over }}
显示全部
处理后自动刷新金额缺口
当前筛选范围内没有需要处理的三方关联风险
🤖 智能推荐待办(需人工确认)
全部
高置信
中置信
刷新推荐
高置信 {{ linkRecommendations.high }} 条 / 中置信 {{ linkRecommendations.medium }} 条
确认关联选中
当前没有智能推荐待办
🛡️ 财务数据质量中心
集中检查重复发票、零金额关联、回款计划金额不平,以及三方关联操作轨迹。
合同财务一体化查询查看合同-期次-开票-回款 高风险应收 {{ receivableRisk.high_count || 0 }} 项
重复发票号
{{ financeQuality.duplicate_invoices.length }}
重复流水
{{ financeQuality.duplicate_transactions.length }}
零金额关联
{{ financeQualityZeroLinkCount }}
回款计划金额不平
{{ financeQuality.plan_mismatch.length }}
回款计划金额不平
重复发票号
重复流水
最近关联操作
月结快照
高风险应收预测
对账导出记录
月结后调整记录
经营筛选:
🔄 刷新
导出财务对账
🤖 全量重跑归类
财务闭环工作台
按“申请审批 → 开票 → 流水关联 → 应收回款”排序处理,避免单据停留在中间环节。
当前没有待处理的财务闭环事项
当月确认收入¥{{formatMoney(financeDashboard.business_kpi.recognized_revenue)}}口径:{{ {receipt:'按回款',issued:'按开票',delivery:'按交付',signed:'按签约'}[financeDashboard.business_kpi.recognition_basis] }}月结将同时锁定签约、开票、回款、收支与该月快照
本月应收
¥{{ formatMoney(financeDashboard.business_kpi.month_receivable) }}
{{ financeDashboard.business_kpi.month }}
本月已收
¥{{ formatMoney(financeDashboard.business_kpi.month_received) }}
已关联业务收入流水
审批后待开票
{{ financeDashboard.business_kpi.pending_issue_count || 0 }} 笔
¥{{ formatMoney(financeDashboard.business_kpi.pending_issue_amount) }}
逾期回款
¥{{ formatMoney(financeDashboard.business_kpi.overdue_receivable) }}
未回款计划金额
异常关联
{{ financeDashboard.business_kpi.relation_exception_count || 0 }} 项
发票或业务收入未覆盖
总收入
¥ {{ formatMoney(financeDashboard.kpi?.total_income) }}
总支出
¥ {{ formatMoney(financeDashboard.kpi?.total_expense) }}
净流入
¥ {{ formatMoney(financeDashboard.kpi?.net_cashflow) }}
流水笔数
{{ financeDashboard.kpi?.tx_count ?? 0 }}
归类覆盖率
{{ financeDashboard.coverage?.covered_amount_rate ?? 0 }}%
按金额 · 待归类 ¥{{ formatMoney(financeDashboard.coverage?.uncovered_amount) }}
🏦 银行账户
上月 {{ financeDashboard.bank_stats.last_ym }} · 当月 {{ financeDashboard.bank_stats.this_ym }}
{{ b.name }}
实时余额
截止{{ Number(b.as_of_date.split('-')[1]) }}月{{ Number(b.as_of_date.split('-')[2]) }}日
¥{{ formatMoney(b.balance) }}
上月收入
¥{{ formatMoney(b.last_month_income) }}
上月支出
¥{{ formatMoney(b.last_month_expense) }}
当月收入
¥{{ formatMoney(b.this_month_income) }}
当月支出
¥{{ formatMoney(b.this_month_expense) }}
📊 回款计划预览(未来现金流)
按 plan_month 聚合所有未收回款 → 看老板未来每月该收多少钱
未来应收 ¥{{ formatMoney(forecastStats.future_total) }}
已逾期 ¥{{ formatMoney(forecastStats.overdue_total) }}
📈 月度收支趋势
🥧 支出结构(一级科目)
📊 二级科目 Top 15(支出金额)
💰 收入结构(一级科目)
{{ bankTxProgress || (bankTxExporting ? '导出中...' : '导入中...') }}
批量导出银行流水(Excel)
导出已关联发票、合同的流水
导出未关联合同流水({{ unlinkedTxStats.count }} 条 · 共 ¥{{ formatMoney(unlinkedTxStats.amount) }})
导入农行流水(保留关联)
导入华兴流水(保留关联)
批量删除(按银行+年月)
⚠ 将删除该银行该年月的全部流水;已关联(合同/发票/付款/销账)的流水会自动跳过。删除后不可恢复,适用于删除后重新导入官网流水的场景。
已选 {{ bankTxSelected.length }} 条
批量删除流水
{{ planStats.total_count }}
回款计划总数
{{ formatMoney(planStats.received_amount) }}
已收款金额
{{ formatMoney(planStats.pending_amount) }}
未收款金额
{{ formatMoney(planStats.invoiced_amount) }}
已开票金额
{{ planImporting ? '导入中...' : '导出中...' }}
批量导出回款计划(Excel)
批量导入回款计划(Excel)
{{ row.contract_no }}({{ row.seq }})
暂无自定义白名单。在"待归类点审"或"银行流水"页勾选"加入白名单"即可添加。
左侧选流水 → 右侧选合同 → 把回款计划加入分配清单 → 编辑金额 → 提交销账
¥ {{ formatMoney(receivableStats.bucket_0_30) }}
账龄 1-30 天
¥ {{ formatMoney(receivableStats.bucket_31_60) }}
账龄 31-60 天
¥ {{ formatMoney((receivableStats.bucket_61_90 || 0) + (receivableStats.bucket_90_plus || 0)) }}
账龄 60 天以上
{{ unreceivedStats.unreceived_contract_count ?? 0 }}
未收款合同数量
¥ {{ formatMoney(unreceivedStats.unreceived_total_amount) }}
未收款总金额
应收未收 + 未到期
¥ {{ formatMoney(unreceivedStats.receivable_due_total) }}
应收未收金额
已开票 / 到期已交付
¥ {{ formatMoney(unreceivedStats.not_due_total) }}
未到期金额
计划月未到 / 未交付
已回{{ row.payments_brief.filter(p => p.received).length }}期
未回{{ row.payments_brief.filter(p => !p.received).length }}期
第{{ p.seq }}期
{{ p.plan_month || '-' }}
{{ formatMoney(p.amount) }}
已收
未收
已开票
已交付
驳回原因:{{ row.review_comment || row.comment || '请联系财务补充资料' }}
发票附件已可下载
付款管理发起付款申请 流水分摊核销 导出对账 配置付款审批模板 收款方花名册管理 一笔支出流水可分摊多张申请;一张申请也可分次付款。
我的申请待我审批财务待付款全部申请
原应付款台账
供应商应付
居间费应付
工资绩效应付
{{ payableTypeLabel }}
共 {{ payableTotal }} 笔 · 应付 ¥{{ payableTypeStat.total.toLocaleString() }} · 已付 ¥{{ payableTypeStat.paid.toLocaleString() }} · 未付 ¥{{ payableTypeStat.unpaid.toLocaleString() }}
刷新
+ 新增
批量导出
导入Excel
全新导入
清理重复
暂无记录。可点「导入Excel」导入《应付款明细》,或「+ 新增」。
🗂️ 财务科目管理
新增一级科目
刷新
共 {{ finAccountsManage.length }} 个科目 · 被流水/归类规则引用的科目不可删除,只能停用;停用后不再出现在打标选项中。
{{ payDialog.payee }}:应付 ¥{{ Number(payDialog.amount||0).toLocaleString() }},已付 ¥{{ Number(payDialog.paid_amount||0).toLocaleString() }},
尚欠 ¥{{ Math.max(0,Number(payDialog.amount||0)-Number(payDialog.paid_amount||0)).toLocaleString() }}
🧾 发票管理
发票台账
待开发票{{ invoicePlanPending>0 ? '('+invoicePlanPending+')' : '' }}
开票申请{{ invoiceApplicationPending>0 ? '('+invoiceApplicationPending+')' : '' }}
开票项目管理
⏰ 待开发票
刷新
合同审批通过且需开票的,会自动出现在这里。待开 {{ invoicePlanPending }} 期
暂无待开发票
🧾 开票申请
刷新
审批通过后可登记发票号和附件,发票会进入台账并关联申请中的合同。
暂无开票申请
当前筛选
{{ tag.label }}:{{ tag.summary }}
清空全部筛选
{{ row.tx_serial_no }} · {{ row.tx_date }}
一张发票可拆分到多份合同的多个回款计划,分配总额必须等于发票金额
① 上传发票文件
② 票面信息
③ 关联合同 + 回款计划
分配总额:
¥{{ formatMoney(invoiceAllocSum) }}
/ 发票总额 ¥{{ formatMoney(invoiceForm.total_amount) }}
⚠️ 不一致
最近合同:
{{ c.contract_no }} · {{ c.client }} · 剩余可开¥{{ formatMoney(c.remain_invoice) }}
{{ c.contract_no }}
{{ c.client }}
未开票 {{ c.plans.length }} 期
从上方候选合同里点回款计划加入分配
按建议自动填充
📎 上传发票文件(PDF / 图片)→ 自动识别填表
⚠ {{ simpleInvoiceOcrError }}(部分字段未识别,请手动补全)
即发票上"价税合计(小写)"金额,是实际付款金额
{{ t.serial_no }} {{ t.tx_date }} {{ t.bank }}
¥{{ formatMoney(t.income + t.expense) }} {{ t.summary }}
⚠ 暂未关联流水:发票登记后会显示在"未挂流水"列表,提醒后续补登
原发票号:{{ redFlushForm.row.invoice_no }}
购买方:{{ redFlushForm.row.buyer_name || '—' }}
价税合计:¥{{ formatMoney(redFlushForm.row.amount) }}
将开具一张金额为负的红字发票冲抵原票,两张票都留档,不可作废/删除。
日期:{{ financeEditor.row.tx_date }} · 银行:{{ financeEditor.row.bank }}
摘要:{{ financeEditor.row.summary }}
{{ financeEditor.row.op_type }}:
¥{{ formatMoney(financeEditor.row.income + financeEditor.row.expense) }}
备注:{{ financeEditor.row.remark }}
农行 NY-XXXX / 华兴 HX-XXXX;唯一,保存后不可修改
余额将根据该账号历史流水自动计算
已关联 {{ txLinkedInvoices.length }} 张发票:
+ 新增并关联发票({{ txFullEditorForm.op_type === '收入' ? '销项' : '进项' }})
{{ inv.invoice_no }}
(¥{{ formatMoney(inv.amount) }})
暂无关联发票
提示:保存后可在「发票管理」里登记发票并关联本流水
不选则进入"待归类"。最终归属:{{ txFinalAccountLabel || '待归类' }}
可简化为对方名的一部分(模糊匹配)
我的行政
我的部门
{{adminhrMe.profile.dept||'-'}}
待审批申请
{{adminhrMe.requests.filter(x=>x.status==='待审批').length}}
本月考勤
{{adminhrMe.attendance.length}} 天
领用资产
{{adminhrMe.assets.length}}
我的申请
我的培训与资质
行政人事工作台
{{k.v||0}}
{{k.n}}
待处理行政人事申请
本月人事与行政运行指标
本月入职 {{adminhrDashboard.monthly_hires||0}}
本月离职 {{adminhrDashboard.monthly_leavers||0}}
请假时长 {{adminhrDashboard.monthly_leave_hours||0}}h
考勤异常 {{adminhrDashboard.monthly_abnormal_days||0}}
劳动合同、试用转正与离职交接新建劳动合同
离职交接任务
{{attMonthly.data.company.headcount}}
考勤人数
{{attMonthly.data.company.attendance_rate}}%
出勤率({{attMonthly.data.company.actual_days}} / {{attMonthly.data.company.plan_days}} 天)
{{attMonthly.data.company.full_attend}}
全勤人数
{{attMonthly.data.company.confirmed}}
已签字确认
{{attMonthly.data.company.late_count}}
迟到人次({{attMonthly.data.company.late_minutes}} 分钟)
{{attMonthly.data.company.leave_days}}
请假合计(天)
{{attMonthly.data.company.ot_hours}}
加班总时长(小时)
{{attMonthly.data.company.abnormal_days}}
异常天数
手工日考勤登记汇总(旧)
¥{{perfMonthly.data.company.perf_total}}
绩效总额(各部门绩效统计)
¥{{perfMonthly.data.company.commission_total}}
业务提成总额
¥{{perfMonthly.data.company.retention_total}}
留存工资
{{perfMonthly.data.company.headcount}}
涉及人数
{{perfMonthly.data.company.dept_count}}
涉及部门
{{perfMonthly.data.company.confirmed_depts}}
已确认部门
绩效表(在线编辑 / 下载 / 上传覆盖)
同步生成 {{adminhrMonth}} 绩效表
上传绩效表
绩效源表(各部门原表留档)
刷新
批量上传自动分流时留档的原始表格(各部门绩效统计 / 业务提成 / 个人绩效登记 / 报告核算 / 样品交接 / 现场补贴)。「详情」原样查看;「在线编辑」保存后自动按类型重新解析回库,绩效总表再点「同步生成」刷新。
人数 {{perfSheetDetail.data.summary.headcount}}
绩效合计 ¥{{perfSheetDetail.data.summary.perf_total}}
提成合计 ¥{{perfSheetDetail.data.summary.commission_total}}
总合计 ¥{{perfSheetDetail.data.summary.grand_total}}
状态 {{perfSheetDetail.data.summary.status}}
计算方法
{{perfMonthly.deptDetail.data.method}}
共 {{perfMonthly.deptDetail.data.headcount}} 人,合计 ¥{{perfMonthly.deptDetail.data.total}}
{{perfMonthly.deptDetail.data.confirmed?'已确认':'未确认'}}
点开每行左侧箭头可看到该成员绩效的逐笔构成与来源文件;「登记小计」为个人绩效登记原始量,供核对,不计入合计。
{{socialMonthly.data.company.headcount}}
在册人数
{{socialMonthly.data.company.insured}}
缴纳人数
¥{{socialMonthly.data.company.social_total}}
社保合计(个人扣款)
¥{{socialMonthly.data.company.avg}}
人均(按缴纳人数)
薪资档案
绩效周期
工资表(在线编辑 / 下载 / 上传覆盖)预生成下一月 上传新月表 重传工资表(修正数据) 批量上传(选文件夹)
人数 {{payrollDetail.data.summary.headcount}}
应发合计 ¥{{payrollDetail.data.summary.gross_total}}
实发合计 ¥{{payrollDetail.data.summary.net_total}}
应出勤 {{payrollDetail.data.summary.work_days}} 天
经营系数 {{payrollDetail.data.summary.biz_coef}}
状态 {{payrollDetail.data.summary.status}}
资产与办公用品台账{{adminhrLowStockAssets.length}} 项库存预警
会议室、访客与行政资源预约新建预约
车辆协同台账预约用车
招聘、培训与资质台账新增记录
人事分析(近12个月)
在职人员部门分布
人员异动汇总
60天内到期资质
追加任职不会清除成员既有部门。
将对已选 {{orgSelection.length}} 人生效,变更后每人仅保留目标部门(单部门)。
改名会级联员工职别与「部门-职别」组合角色;删除时仍被员工使用会被拒绝。
归属变更留痕
{{templateFlowPreview(((adminhrApprovalTemplates.find(t=>t.id===adminhrRequestDialog.form.template_id)||{}).nodes)||[]).join(' → ')}}
{{index+1}}删除
{{f.name}}({{sealFileSizeText(f.size)}})移除
{{sealTemplatePreview}}
申请附件
无
回传盖章件已同步为合同盖章版附件
无
审批流程
{{sealNodeLabel(a)}}{{a.approver_name}}{{a.status}}
意见:{{a.comment}}
操作日志
回传盖章件
{{f.name}}({{sealFileSizeText(f.size)}})移除
已有模板新建
{{i+1}}
删除
系统管理
{{ dbTables.length || '' }}
数据库管理
查看、搜索、编辑、删除数据表记录,导出CSV
AI 管理
AI模型切换、API Key配置与管理
用户岗位管理
用户岗位分配、岗位增删管理
系统有效期
系统授权到期控制,过期后普通账号无法登录
飞书推送配置
配置飞书Webhook机器人,采样完成自动推送通知
任务分配规则
配置检测项目与负责人对应关系,自动派发任务
操作日志
全流程操作记录(含财务删改),不可篡改,可追溯
审计日志
统一审计追踪:合同/财务/检测/报告/权限关键写操作前后快照,只读
点位库管理
监测点位档案、经纬度、历史记录、Excel导入
权限管理
按账号/部门细粒度配置功能权限,支持 Excel 导入
{{ accountList.length || '' }}
用户账号管理
新增、编辑、删除登录账号,重置密码、停启用
系统更新
一键拉取最新代码并重启服务,升级到最新版本
系统配置
编码规则前缀、数据字典维护(样品处置方式等)
当前版本
{{ sysUpdate.currentVersion || sysVersion.version || '—' }}
服务器分支
{{ sysUpdate.branch || 'master' }}
gitee 上最新提交
{{ sysUpdate.latestCommit }}
{{ sysUpdate.latestTime }}
{{ sysUpdate.hint }}
上次更新
{{ sysUpdate.lastLogTime }}
成功
失败
进行中
中断/未完成
{{ sysUpdate.showLastLog ? '收起日志' : '查看完整日志' }}
{{ sysUpdate.lastLog }}
{{ sysUpdate.runLog }}
说明:服务器为 Mac,更新动作 = 备份数据库 → 从 gitee 拉取最新代码 → 安装新依赖 →
导入新标准限值 → launchctl 重启服务 → 健康检查(即 mac_setup/upgrade.sh)。
该操作受「权限管理 · 系统运维 · 一键系统更新」权限管控,仅授权账号可执行。
若网络异常或本地代码冲突,脚本会中止并在上方日志说明,数据库已自动备份可回滚。
该操作受「权限管理 · 系统运维 · 一键系统更新」权限管控,仅授权账号可执行。
若网络异常或本地代码冲突,脚本会中止并在上方日志说明,数据库已自动备份可回滚。
| 手机号(账号) | 姓名 | 部门 | 岗位 | 状态 | 密码 | 飞书 ID | 创建时间 | 操作 |
|---|---|---|---|---|---|---|---|---|
| {{ u.phone }} |
{{ u.name }} | {{ u.dept || '—' }} | {{ u.role || '—' }} | {{ u.password || '—' }} | {{ u.feishu_id || '—' }} | {{ u.created_at || '—' }} |
|
|
| 暂无匹配账号 | ||||||||
手机号*
姓名*
初始密码*
部门
岗位*
⚠ 岗位将从「{{ accountForm.origRole }}」改为「{{ accountForm.role }}」,已配置的权限会自动迁移到新岗位。
状态
启用
停用
飞书 ID
目标账号:{{ accountResetPwdTarget.name }}({{ accountResetPwdTarget.phone }})
{{ accountResetPwdTarget.role }}
选择表:
查询
导出CSV
刷新
| {{ c.name }} {{ dbSortDir === 'ASC' ? '↑' : '↓' }} PK | 操作 |
|---|---|
|
|
暂无数据
共 {{ dbTotal }} 条,当前第 {{ Math.floor(dbOffset / dbLimit) + 1 }} / {{ Math.ceil(dbTotal / dbLimit) }} 页
上一页
下一页
AI 模型管理
{{ m.name }}
当前使用
{{ (m.protocol||'openai')==='anthropic' ? 'Anthropic 协议' : 'OpenAI 协议' }}
模型ID: {{ m.id }}
API: {{ m.api_url }}
Key 变量: {{ m.api_key_env || '未设置' }}
WPS 在线编辑(WebOffice)
启用后,报价单/记录表的在线编辑走 WPS WebOffice(金山云编辑器,单实例 HTTPS 即可);
不启用走 OnlyOffice(仅 8100 实例)。回调网关填:
{{ wpsCfg.public_base || 'https://公网域名' }}/wps
API Key 管理
{{ keyName }}
{{ val || '(未设置)' }}
修改
用户岗位分配
| 姓名 | 手机号 | 部门 | 岗位 | 飞书ID | 状态 | 密码 |
|---|---|---|---|---|---|---|
| {{ u.name }} | {{ u.phone }} | {{ u.dept }} |
|
|
{{ u.status }} |
|
| 暂无用户 | ||||||
岗位管理
岗位名称:
岗位说明:
| 序号 | 岗位名称 | 说明 | 操作 |
|---|---|---|---|
| {{ idx + 1 }} | {{ r.name }} | {{ r.description }} |
|
| 暂无岗位 | |||
快捷设置:
+30天
+90天
+半年
+1年
过期后所有普通账号将无法登录,仅管理员(18928105500)可正常进入系统。
按类别一键开关各类飞书推送,关闭后该类消息不再发送(站内通知不受影响)
{{ c.label }}
{{ feishuBindStatus.unbound.map(u => u.name + '(' + u.phone + ')').join('、') }}
已绑定 {{ feishuBoundUsers.length }} 个账号,点「测试」给该账号点对点发一张测试卡片,验证系统与该账号飞书是否联通
{{ u.name }}
{{ u.phone }}
{{ u.feishu_id_masked }}
✓ 已送达
✗ {{ feishuUserTestState[u.phone] }}
测试
暂无已绑定账号,先点「立即同步绑定」
使用步骤:
1. App ID 和 Secret 已预填,一般不需要改
2. 在飞书中把机器人添加到目标群
3. 点"获取群列表",选择要推送通知的群
4. 保存配置,点"发送测试"验证
5. 启用后,样品提交/流转单接收会自动推送到群
1. App ID 和 Secret 已预填,一般不需要改
2. 在飞书中把机器人添加到目标群
3. 点"获取群列表",选择要推送通知的群
4. 保存配置,点"发送测试"验证
5. 启用后,样品提交/流转单接收会自动推送到群
添加分配规则
已有规则
| 样品类型 | 检测项目 | 负责人 | 手机号 | 操作 |
|---|---|---|---|---|
| {{ a.sample_type }} | {{ a.test_item }} | {{ a.assigned_name }} | {{ a.assigned_phone }} |
|
| 暂无规则(未配置时,通知将发给所有检测员) | ||||
⚠️ 此页记录所有财务关键操作(流水/发票/销账/回款计划的增删改),用于防止误删/误改重要财务数据
| 时间 | 分类 | 操作 | 操作人 | 详情 |
|---|---|---|---|---|
| {{ l.created_at }} | {{ scopeLabel(l.target_type) }} | {{ l.action }} |
{{ l.operator_name }}
{{ l.operator_phone }}
|
{{ l.detail }} |
| 暂无日志 | ||||
改前 before
{{ trailPretty(row.before_json) }}
改后 after
{{ trailPretty(row.after_json) }}
{{ row.actor_name }}
{{ row.actor_phone }}
| 编码 | 点位名称 | 受检单位 | 样品类型 | 经度 | 纬度 | 操作 |
|---|---|---|---|---|---|---|
| {{ p.point_code }} | {{ p.point_name }} | {{ p.company_name }} | {{ p.sample_type }} | {{ p.longitude || '—' }} | {{ p.latitude || '—' }} | |
| 暂无点位数据 | ||||||
名称:{{ instDetail.instrument_name }}
型号:{{ instDetail.model }}
生产厂家:{{ instDetail.manufacturer }}
出厂编号:{{ instDetail.serial_number }}
类别:{{ instDetail.category }}
状态:{{ instDetail.status }}
购入日期:{{ instDetail.purchase_date || '—' }}
检定日期:{{ instDetail.calibration_date || '—' }}
有效期至:{{ instDetail.calibration_due || '—' }} (已超期)
检定证书:{{ instDetail.calibration_cert || '—' }}
保管人:{{ instDetail.custodian }} {{ instDetail.custodian_phone }}
存放位置:{{ instDetail.location }}
领用人:{{ instDetail.current_holder || '—' }}
领用时间:{{ instDetail.checkout_time || '—' }}
扫码查看仪器信息
| 时间 | 操作 | 操作人 | 详情 |
|---|---|---|---|
| {{ l.created_at }} | {{ l.action }} | {{ l.operator }} | {{ l.detail }} |
| 暂无操作日志 | |||
| 报修时间 | 故障 | 状态 | 维修方 | 费用 |
|---|---|---|---|---|
| {{ r.reported_at }} | {{ r.fault_type }}:{{ r.fault_description }} | {{ r.status }} | {{ r.repair_vendor || '—' }} | {{ r.repair_cost || 0 }} |
| 暂无维修记录 | ||||
仪器:{{ repairTarget.instrument_code }} {{ repairTarget.instrument_name }}
合同编号:{{ samplingPlanData.contract_no || '(未保存)' }}
采样频次:{{ samplingPlanData.frequency || '-' }}
履约期间:{{ samplingPlanData.start_date || '-' }} ~ {{ samplingPlanData.end_date || '-' }}
首次采样:{{ samplingPlanData.first_sampling_month || '-' }}
委托单位:{{ samplingPlanData.client || '-' }}
受检单位:{{ samplingPlanData.testee_unit || '-' }}
联系人:{{ samplingPlanData.contact || '-' }} {{ samplingPlanData.contact_phone }}
地址:{{ samplingPlanData.testee_address || '-' }}
共 {{ samplingPlanData.rows.length }} 条采样配置 × {{ samplingPlanData.months.length }} 个月份,✓ 表示该月有采样计划
| 第几次 | {{ samplingPlanMonthRoundMap[m] || '' }} | ||
|---|---|---|---|
| 点位 | 检测类型 | 检测项目 | {{ m }} |
| {{ row.point_name }} | {{ row.sample_type }} | {{ row.test_items }} | ✓ · |
| 尚未配置任何项目组或月份 |
⚠ 有 {{ samplingPlanData.unscheduled }} 次采样未指定月份,请返回配置页补齐
任务:{{ scheduleTarget.task_no }} / {{ scheduleTarget.company_name }}
计划月份:{{ scheduleTarget.plan_month || '未指定' }}
计划月份:{{ scheduleTarget.plan_month || '未指定' }}
📌 本次为补采排期,仅涉及以下 {{ schedulePartialPoints.length }} 个改期点位:
· {{ p.point_name }}({{ p.reschedule_reason_category }})
当天暂无任务
👥 {{ grp.name }}
{{ grp.tasks.length }} 单
{{ t.task_no }}
受检单位:{{ t.company_name || '-' }}
采样员:{{ t.assigned_names || '未派发' }}
车辆:{{ formatTaskVehicle(t) }}
采样内容:{{ t.sample_types || '-' }}
渲染中...
⚠ {{ previewError }}
如要继续工作,请下载原文件用 WPS / Office 打开
该文件类型暂不支持网页预览,请下载原文件查看
⚠ 拍一张移交照片上传, 提交后无法撤回
任务号: {{ paperHandDlg.task_no }}
仅显示已收到采样室和实验室纸质记录、当前尚未分配的“待编制”任务。
目标编制人 已选 {{reportBulkAssign.selected.length}} 条
{{ reportOperationsProfile.task.task_no }} · {{ reportOperationsProfile.task.testee_unit || reportOperationsProfile.task.company_name || '—' }}
工作量 {{ reportOperationsProfile.workload.score || 0 }} 分
项目工作量
资料齐套检查{{g.gap_label}} · {{g.owner_stage}} 资料已齐套
报告编号: {{ reportFull.header.report_no || reportTaskCurrent.task.task_no }}
报告状态: {{ reportFull.header.status || reportTaskCurrent.task.status }}
编制人:
{{ reportFull.header.drafter_name }}
未指派
委托方: {{ reportFull.header.client_unit || '—' }}
受检方: {{ reportFull.header.testee_unit || '—' }}
客户经理:
{{ reportFull.header.account_manager }} ({{ reportFull.header.account_manager_phone }})
—
客服:
{{ reportFull.header.customer_service }} ({{ reportFull.header.customer_service_phone }})
—
⏱
编制报告历时{{ reportFull.duration.end_is_now ? '(进行中)' : '(已完成)' }}
{{ reportFull.duration.display }}
起算: {{ reportFull.duration.start_at }} (报告室收到采样/实验室纸质中最晚的) → 截止: {{ reportFull.duration.end_at }}{{ reportFull.duration.end_is_now ? ' (当前时间)' : ' (客户经理已签收)' }}
⌛ 编制历时未开始: 必须采样室+实验室两边纸质原始记录都已接收,才会开始计时。
⚠ 数据关联性预警({{ reportFull.logic_warnings.length }} 条,只提醒不拦截)
· 样品 {{ w.sample_no }}:{{ w.message }}({{ w.item_a }}={{ w.value_a }},{{ w.item_b }}={{ w.value_b }})
🛤 生产进度(从下单到客户经理接收)
{{ (reportFull.timeline[i-1]||{}).done ? '✓' : '◷' }} {{ (reportFull.timeline[i-1]||{}).label || '' }}
{{ (reportFull.timeline[i-1]||{}).time || '—' }}
{{ (reportFull.timeline[i+7]||{}).done ? '✓' : '◷' }} {{ (reportFull.timeline[i+7]||{}).label || '' }}
{{ (reportFull.timeline[i+7]||{}).time || '—' }}
📑 同一合同其他报告 ({{ reportFull.other_reports.length }} 份)
- 合同 {{ reportFull.contract.contract_no }}
| 报告编号 | 受检方 | 状态 | 编制人 | 签发时间 | 客户经理接收 |
|---|---|---|---|---|---|
| {{ o.task_no }} | {{ o.testee || '—' }} | {{ o.drafter_name || '—' }} | {{ o.issued_at || '—' }} | {{ o.client_received_at || '—' }} |
📜 报告版本
当前 v{{ reportFull.current_version || 1 }}
申请变更
暂无变更记录
| 版本 | 变更原因 | 申请人/时间 | 审批人/时间 | 签发人/时间 | 状态 | 操作 |
|---|---|---|---|---|---|---|
| v{{ v.version }} | {{ v.change_reason || '—' }} | {{ v.change_apply_by || '—' }} {{ v.change_apply_at || '' }} |
{{ v.approve_by || '—' }} {{ v.approve_at || '' }} |
{{ v.issued_by || '—' }} {{ v.issued_at || '' }} |
|
🔐 报告防伪
防伪码: {{ reportFull.verify.code }}
生成时间: {{ reportFull.verify.created_at || '—' }}
验证链接: {{ reportFull.verify.verify_url }}
客户可在公开验证页输入报告编号+防伪码,或扫码核验报告真伪。
最近驳回原因: {{ reportTaskCurrent.task.reject_reason }}
⏳ 等待报告室收到采样/实验室原始记录纸质后,主管在「编制报告任务」点「指派编制」选定编制人.
📌 已具备编制条件,请等主管在「编制报告任务」点「指派编制」, 或被指派的编制人到「我的报告任务」点「开始编制」.
✍ 编制中(编制人: {{ reportTaskCurrent.task.drafter_name || '—' }}),编制人请到「我的报告任务」点「提交初审」.
🔎 等待初审人复核.
🔎 等待二审人复核.
🔎 等待终审人复核.
✒ 等待法人/技术负责人签发.
📦 已签发,等待客户经理「{{ reportTaskCurrent.task.account_manager_name || '—' }}」接收纸质报告.
✅ 报告已签收,流程闭环.
操作日志
暂无日志
{{ log.created_at }}
·
{{ log.action }}
{{ log.from_status }} → {{ log.to_status }}
{{ log.operator_name }}
· {{ log.comment }}
合同状态
签约金额
¥{{ formatMoney(contractLifecycleDialog.contract.total_amount) }}
已开票
¥{{ formatMoney(contractLifecycleDialog.contract.invoiced_amount) }}
已收款 / 已销账
¥{{ formatMoney(contractLifecycleDialog.contract.paid_amount) }}
销账 ¥{{ formatMoney(contractLifecycleDialog.contract.cleared_amount) }}
归档 / 财务闭环
{{ contractLifecycleDialog.contract.archived ? '已归档' : '待归档' }}
归档后关联发票与业务收入流水
履约 / 报告
{{ (contractLifecycleDialog.contract.task_stats||{}).completed || 0 }}/{{ contractLifecycleDialog.contract.total_rounds || 0 }}
报告 {{ (contractLifecycleDialog.contract.reports_brief||[]).length }} 份
签订状态
已签订
合同归档
{{ contractLifecycleDialog.contract.archived ? '已完成' : '待处理' }}
审批回款计划
{{ ((contractLifecycleDialog.contract.payments||[]).length || (contractLifecycleDialog.contract.approved_payments||[]).length) ? '已落实' : '待补齐' }}
财务关联
发票 {{ contractLifecycleDialog.invoices.length }} 笔 · 流水 {{ contractLifecycleDialog.txs.length }} 笔
🧾 已关联发票({{ contractLifecycleDialog.invoices.length }})
暂无关联发票
🏦 已关联回款流水({{ contractLifecycleDialog.txs.length }})
暂无关联回款流水
「已收款」列为历史数据,可与「已销账金额」对比校验真假。
交易日期:{{ linksDialog.ctx.tx_date || '-' }} 金额:¥{{ Number(linksDialog.ctx.tx_amount || 0).toLocaleString() }}
暂无关联记录
新增关联:
¥
剩余 ¥{{ Number(invoiceRemainingFor(slot)).toLocaleString() }}
添加
编辑回款计划:{{ planEditorContract.contract_no || '' }}
×
合同号:{{ planEditorContract.contract_no }}
委托方:{{ planEditorContract.client }}
签约金额:¥{{ formatMoney(planEditorContract.total_amount) }}
已收款:¥{{ formatMoney(planEditorContract.paid_amount) }}
回款计划合计:
¥{{ formatMoney(planEditorPlanSum) }}
✓ 等于签约金额
⚠️ 与签约金额差 ¥{{ formatMoney(planEditorPlanSum - (planEditorContract.total_amount||0)) }}
| 期次 | 回款计划编号 | 计划月份 | 金额 | 状态 | 操作 |
|---|---|---|---|---|---|
| 第{{ p.seq }}期 | {{ p.plan_no || '-' }} |
|
|
|
|
| 暂无回款计划 | |||||
💡 已收款 / 已销账的期不可改;未收期可改月份/金额、可删;可增加新期。保存时强制校验:回款计划合计必须等于签约金额。
加载中...
签约金额:¥{{ formatMoney(contractFinanceDialog.contract.total_amount) }}
已开票:¥{{ formatMoney(contractFinanceDialog.contract.invoiced_amount) }}
已收款:¥{{ formatMoney(contractFinanceDialog.contract.paid_amount) }}
应收余额:¥{{ formatMoney(Math.max(0,(contractFinanceDialog.contract.total_amount||0)-(contractFinanceDialog.contract.paid_amount||0))) }}
历史跟进
选择合同后需为每个合同填写分摊金额,合计须等于申请金额。
框架合同居间费按实支付,不限额度 · 已付 ¥{{ formatMoney(paymentRequestDialog.brokerQuota.broker_fee_paid) }}
居间费总额 ¥{{ formatMoney(paymentRequestDialog.brokerQuota.broker_fee) }} · 已付 ¥{{ formatMoney(paymentRequestDialog.brokerQuota.broker_fee_paid) }} · 待审批 ¥{{ formatMoney(paymentRequestDialog.brokerQuota.broker_fee_pending_requests) }} · 剩余可申请 ¥{{ formatMoney(paymentRequestDialog.brokerQuota.broker_fee_remaining) }}
{{line}}
已有模板新建
{{i+1}}删除
已有模板新建
{{i+1}}删除
已有模板新建
{{i+1}}删除
审批结果:已通过 · 通过时间:{{paymentPayDialog.row.approved_at||'-'}} · 审批人:{{(paymentPayDialog.row.approvals||[]).map(a=>a.approver_name).filter(Boolean).join('、')||'-'}}
{{item.operator_name || item.operator_phone}}
暂无操作日志
申请单号
{{paymentRequestDetailDialog.data.request.request_no}}
状态
{{paymentRequestDetailDialog.data.request.status}}
付款类型
{{paymentRequestDetailDialog.data.request.payment_type || '-'}}
申请金额 / 已付
¥{{formatMoney(paymentRequestDetailDialog.data.request.amount)}} / ¥{{formatMoney(paymentRequestDetailDialog.data.request.paid_amount)}}
收款方
{{paymentRequestDetailDialog.data.request.payee}}
开户行 / 账号
{{paymentRequestDetailDialog.data.request.bank_name || '-'}} / {{paymentRequestDetailDialog.data.request.bank_account || '-'}}
开户分行
{{paymentRequestDetailDialog.data.request.bank_branch || '-'}}
付款方式 / 账户类型
{{paymentRequestDetailDialog.data.request.payment_method || '-'}} / {{paymentRequestDetailDialog.data.request.payee_account_type || '-'}}
申请部门 / 申请人
{{paymentRequestDetailDialog.data.request.dept || '-'}} / {{paymentRequestDetailDialog.data.request.initiator_name}}
申请时间
{{paymentRequestDetailDialog.data.request.submitted_at || paymentRequestDetailDialog.data.request.created_at || '-'}}
付款用途
{{paymentRequestDetailDialog.data.request.purpose || '-'}}
部门全路径
{{paymentRequestDetailDialog.data.request.dept_path || paymentRequestDetailDialog.data.request.dept || '-'}}
抄送人
{{(paymentRequestDetailDialog.data.cc||[]).map(c=>c.name).join('、') || '-'}}
关联合同
{{cc.contract_no}} · {{cc.client || '(合同不存在)'}}分摊 ¥{{formatMoney(cc.amount)}}合同详情
{{paymentRequestDetailDialog.data.contract.contract_no}} · {{paymentRequestDetailDialog.data.contract.client}}合同详情
原应付款
{{paymentRequestDetailDialog.data.payable.payable_type}} · ¥{{formatMoney(paymentRequestDetailDialog.data.payable.amount)}}
关联进项发票
{{paymentRequestDetailDialog.data.invoice.invoice_no}} · ¥{{formatMoney(paymentRequestDetailDialog.data.invoice.amount)}}
申请附件
后补上传
PDF
{{isImageAttachment(file)?'查看/下载':'下载'}}
PDF
审批流
暂无审批节点
分摊付款记录
¥{{formatMoney(row.amount)}}
操作日志
{{item.action}}{{item.detail}}
{{item.operator_name || item.operator_phone}}
暂无操作日志
评论
发表评论
系统按收款方、合同号、金额及日期评分;只展示评分达到阈值的候选申请。
已批准付款申请本次分摊:¥{{formatMoney(paymentLinkTotal)}};流水可用:¥{{formatMoney(paymentLinkRemaining)}}
版本按保存顺序留痕,可直接比较金额、居间费、分包费及条款备注变化。
{{ invoiceApplicationIssueDialog.buyer_name }} · ¥{{ formatMoney(invoiceApplicationIssueDialog.amount) }}
购买方:{{ invoiceAppContractDetailDialog.buyerName }} · 开票金额:¥{{ formatMoney(invoiceAppContractDetailDialog.amount) }}
{{templateFlowPreview(invoiceApplySelectedTemplate.nodes).join(' → ')}}
智能推荐合同:
分摊合计:¥{{ formatMoney(invoiceApplyAllocSum) }}
合同:{{ createPaymentPlanDialog.contract_no }} · {{ createPaymentPlanDialog.client }}
已收完款,签约金额:¥{{ formatMoney(createPaymentPlanDialog.remain_amount) }} 剩余未收款:¥{{ formatMoney(createPaymentPlanDialog.remain_amount) }}
已收完款,签约金额:¥{{ formatMoney(createPaymentPlanDialog.remain_amount) }} 剩余未收款:¥{{ formatMoney(createPaymentPlanDialog.remain_amount) }}
期数:
(修改期数自动刷新,默认平均分配)
合计:¥{{ formatMoney(createPaymentPlanSum) }}
{{ (createPaymentPlanDialog.paid_amount || 0) >= (createPaymentPlanDialog.total_amount || 0) ? '(已收完款,需等于签约金额)' : '(需等于剩余未收款)' }}
签发后,系统会推送消息到指定的客户经理,提示其接收纸质报告。
签发前必填字段缺失:{{ reportIssueForm.missingFields.join('、') }}
{{ reportIssueForm.sample_periods_text || '未填写' }}
{{ reportIssueForm.analysis_periods_text || '未填写' }}
报告编号:{{ reportUploadForm.report_no }}
附件类型:{{ reportUploadForm.kind === 'check_version' ? '核对版' : '盖章版' }}
暂无需要您确认或签收的报告。