只显示当月
printToolsAction(cmd)"
style="vertical-align:middle">
批量打印
不打印
本月不打印(顺延)
取消顺延
本月无需打印
statsToolsAction(cmd)">
月度统计
季度统计
发票明细
发票明细
importPrintedToolsAction(cmd)">
导入已打印确认
下载导入模板
reviewDropdownAction(cmd)"
style="margin-left:8px;vertical-align:middle">
复核 ▾
{{ onlyReview ? '✓ ' : '' }}只看待复核
批量通过复核
批量不通过(归档)
批量下载
下载发票
同步发票明细
生成资产卡片
生成摊销项目
已选 {{ selectedFiles.length }} 个文件
资料加载失败:{{ filesError }}
重试
onTableSort('files', p)"
@header-dragend="(w, o, col) => onColResize('files_invoice', col.columnKey || col.property || col.label || col.type, w)">
当前范围:{{ scopeCompanyText }} · {{ scopeMonthText }};如需其它月份或公司,可在上方切换后点「查询」。
{{ (scope.row.invoice_date || '').slice(0, 10) }}
{{ scope.row.goods_name }}({{ scope.row.detail_count }} 行)
—
{{ scope.row.amount }}
{{ scope.row.tax }}
{{ scope.row.total_amount }}
{{ statusText(scope.row.status) }}
打印{{ scope.row.print_count }}次
待同步
历史数据
待复核
本月不打印·顺延({{ (scope.row.defer_month || '').slice(0, 7) }})
顺延自 {{ (scope.row.defer_month || '').slice(0, 7) }}
原因:{{ scope.row.review_note }}
PDF
OFD
XML
原件
未关联
{{ scope.row.source || '用户上传' }} · {{ scope.row.uploaded_by }} · {{ (scope.row.uploaded_at || '').slice(0, 16) }}
上传
无文件
rowAction(cmd, scope.row)">
预览
打印PDF
不打印
本月不打印(顺延)
取消顺延
客户打印(标记已打印)
查看发票明细
重新标记
{{ t.tax_name }} {{ t.amount }}({{ t.documents }}张)
已确认合计 {{ taxStats.confirmed_amount }}
| 待确认 {{ taxStats.pending_amount }}
| 金额未识别 {{ taxStats.unknown_amount_count }} 条
完税证明加载失败:{{ taxError }}
重试
可切换公司/月份,或点右上角「上传文件」统一上传(按内容自动识别拆证)。
票面合计 {{ scope.row.face_total || '—' }}
明细合计 {{ scope.row.computed_total || '—' }}
差额 {{ scope.row.difference || '0.00' }}
归档月 {{ scope.row.archive_months || '待确定' }}
{{ scope.row.document_type_label }}
{{ scope.row.validation.warnings.join(';') }}
{{ s.row.period_start ? (s.row.period_start + ' ~ ' + (s.row.period_end || s.row.period_start)) : '未注明' }}
{{ s.row.treasury_date || '未注明' }}
{{ s.row.archive_month || '待确定' }}
{{ (s.row.source_file_name || '') + (s.row.page_no ? (' 第' + s.row.page_no + '页') : '') }}
{{ taxArchiveLabel(scope.row) }}
{{ (scope.row.created_at || '').slice(0, 10) || '—' }}
{{ scope.row.certificate_no_raw || scope.row.ticket_no || '未识别' }}
{{ taxTaxLabel(scope.row) }}
—
{{ scope.row.face_total || '—' }}
命中明细 {{ scope.row.hit_amount }}
{{ scope.row.issue_date || '—' }}
{{ taxReviewLabel(scope.row) }}
待归档
部分待归档
{{ taxMatchLabel(scope.row) }}
{{ scope.row.matched_amount }}
{{ scope.row.print_status === 'printed' ? '已打印' : '未打印' }}
{{ scope.row.print_count }}次
{{ taxSourceLabel(scope.row) }}
原件
明细
确认
匹配回单
回收
{{ taxDetailRow.company_name }}
{{ taxDetailRow.document_type_label }}
号码 {{ taxDetailRow.certificate_no_raw || taxDetailRow.ticket_no || '未识别' }}
归档月 {{ taxDetailRow.archive_months || '待确定' }}
{{ taxReviewLabel(taxDetailRow) }}
{{ taxMatchLabel(taxDetailRow) }}
顺延至 {{ taxDetailRow.defer_month }}
原件对照
下载原件
打印本证明
编辑复核
保存修订
取消编辑
重新识别
{{ taxDetailRow.defer_month ? '取消顺延' : '顺延打印' }}
确认
重新匹配
{{ taxDetailRow.certificate_no_raw || '未识别' }}
{{ taxDetailRow.taxpayer_name_raw || '—' }}
{{ taxDetailRow.taxpayer_id_raw || '—' }}
{{ taxDetailRow.issue_date || '—' }}
{{ taxDetailRow.face_total || '—' }}
v{{ taxDetailRow.current_revision }}(保存时校验版本)
{{ s.row.tax_name }}
{{ s.row.item_name_raw }}
{{ s.row.original_voucher_no }}
{{ s.row.period_start || '未注明' }}
{{ s.row.period_end || '未注明' }}
{{ s.row.treasury_date || '未注明' }}
{{ s.row.amount }}
{{ s.row.archive_month || '待确定' }}
{{ (s.row.source_file_name || '') + (s.row.page_no ? (' 第' + s.row.page_no + '页') : '') }}
税额合计 {{ taxDetailRow.face_total || '—' }}
明细合计 {{ taxDetailRow.computed_total || '—' }}
已匹配 {{ taxDetailRow.matched_amount || '0.00' }}
{{ s.row.receipt && (s.row.receipt.counterparty_name || s.row.receipt.summary)
? (s.row.receipt.counterparty_name || '') + ' ' + (s.row.receipt.summary || '')
: ('回单#' + s.row.receipt_id) }}
{{ s.row.amount }}
{{ s.row.confirm_mode === 'manual' ? '人工确认' : '自动确认' }}
待重核
撤销
候选回单 {{ (taxMatchInfo && taxMatchInfo.candidates && taxMatchInfo.candidates.length) || 0 }} 条
{{ [s.row.counterparty_name, s.row.summary].filter(Boolean).join(' / ')
|| ('回单#' + s.row.receipt_id) }}
关联
{{ s.row.blocked }}
采纳
丢弃
采纳=把候选内容写成该证明的新版本;丢弃=保留记录但不再提示。
{{ taxPrintRow.document_type_label || '完税证明' }}
公司:{{ taxPrintRow.company_name }}
号码:{{ taxPrintRow.certificate_no_raw || taxPrintRow.ticket_no || '未识别' }}
纳税人:{{ taxPrintRow.taxpayer_name_raw || '—' }}
填发日期:{{ taxPrintRow.issue_date || '—' }}
归档月:{{ taxPrintRow.archive_months || '待确定' }}
| # | 税费种类 | 品目 | 所属期 |
入库日期 | 金额 |
| {{ idx + 1 }} |
{{ item.tax_name }} |
{{ item.item_name_raw }} |
{{ item.period_start ? (item.period_start + ' ~ ' + (item.period_end || item.period_start)) : '未注明' }} |
{{ item.treasury_date || '未注明' }} |
{{ item.amount }} |
明细合计 {{ taxPrintRow.computed_total || '—' }} | 票面合计 {{ taxPrintRow.face_total || '—' }}
onTableSort('files', p)"
@header-dragend="(w, o, col) => onColResize('files_other', col.columnKey || col.property || col.label || col.type, w)">
当前范围:{{ scopeCompanyText }} · {{ scopeMonthText }}。可切换公司/所属期,或点「查询」刷新;也可以点右上角「上传文件」归档新资料。
{{ (scope.row.created_at || '').slice(0, 10) }}
{{ scope.row.uploaded_by }}
{{ scope.row.year }}年{{ String(scope.row.month).padStart(2,'0') }}月
{{ statusText(scope.row.status) }}
打印{{ scope.row.print_count }}次
历史数据
待复核
本月不打印·顺延({{ (scope.row.defer_month || '').slice(0, 7) }})
顺延自 {{ (scope.row.defer_month || '').slice(0, 7) }}
原件
{{ scope.row.source || '用户上传' }}
rowAction(cmd, scope.row)">
预览
打印PDF
不打印
本月不打印(顺延)
取消顺延
重新标记
仅显示该公司资产卡片
最近生成:{{ assetStats.last_generated || '—' }}
本月折旧{{ monthPrint.depreciation.printed ? '已打印' : '未打印·需打印' }}
本月摊销{{ monthPrint.amortization.printed ? '已打印' : '未打印·需打印' }}
本期无折旧/摊销数据,无需打印
打印资产卡片
已打印{{printCounts.asset_cards}}次
A5 横向
新增资产卡片
导入Excel
下载导入模板
资产卡片
{{ assetStats.count }} 张
在用 {{ assetStats.in_use }}
资产原值合计
¥{{ fmtMoney(assetStats.original) }}
累计折旧合计
¥{{ fmtMoney(assetStats.accumulated) }}
本月计提 ¥{{ fmtMoney(assetStats.month_amount) }}
期末净值合计
¥{{ fmtMoney(assetStats.net) }}
资产数据加载失败:{{ assetError }}
重试
{{ (s.row.quantity || 1) + (s.row.unit ? ' ' + s.row.unit : '') }}
{{ assetMethodText(s.row.method) }}
{{ fmtMoney(s.row.original_value) }}
{{ fmtMoney(s.row.current_accumulated) }}
{{ fmtMoney(s.row.current_net) }}
{{ s.row.status }}
{{ s.row.voucher_no }}—
{{ s.row.invoice_tax || '—' }}
编辑
处置
发票原件
删除
当前范围:{{ assetCompany || '未选择公司' }} · {{ assetPeriod }};资产卡片按公司管理。
仅显示该公司折旧记录(账期取该公司)
✓ {{ assetDeprAlert }}
{{ assetDeprRows.length ? (assetDeprPrintStatus.printed ? '已打印' : '未打印') : '本期无数据' }}
打印时间 {{ assetDeprPrintStatus.printed_at.slice(0,16) }}
本期有折旧数据,请打印存档
删除后可用「生成/补算」重新生成
{{ assetDeprPrintStatus.printed ? '取消已打印' : '标记已打印' }}
清空本期
生成/补算
打印本期明细
已打印{{printCounts.depreciation}}次
A5 横向
{{ fmtMoney(s.row.month_amount) }}
{{ fmtMoney(s.row.accumulated) }}
{{ fmtMoney(s.row.net_value) }}
{{ s.row.voucher_no || '填写' }}
{{ (s.row.created_at || '').slice(0, 16) }}
删除
当前范围:{{ assetCompany || '未选择公司' }} · {{ assetPeriod }}(取该公司账期)。
仅显示该公司摊销项目;摊销包含房租、装修等费用,与固定资产分开管理
最近生成:{{ prepayStats.last_generated || '—' }}
新增摊销项目
导入Excel
下载导入模板
打印摊销卡片
已打印{{printCounts.prepaid_cards}}次
摊销中项目
{{ prepayStats.active }}
已摊完 {{ prepayStats.done }} · 已终止 {{ prepayStats.terminated }}
本月摊销额
¥{{ fmtMoney(prepayStats.month_amount) }}
{{ assetPeriod }} 期间
累计已摊销
¥{{ fmtMoney(prepayStats.accumulated) }}
剩余待摊合计
¥{{ fmtMoney(prepayStats.remaining) }}
{{ assetMethodText(s.row.method) }}
{{ fmtMoney(s.row.total_amount) }}
{{ (s.row.quantity || 1) + (s.row.unit ? ' ' + s.row.unit : '') }}
{{ fmtMoney(s.row.monthly_amount) }}
{{ fmtMoney(s.row.current_accumulated) }}
{{ fmtMoney(s.row.current_remaining) }}
{{ s.row.voucher_no }}—
{{ s.row.invoice_tax || '—' }}
{{ s.row.status }}
编辑
终止
发票原件
删除
当前范围:{{ assetCompany || '未选择公司' }} · {{ assetPeriod }};摊销项目与固定资产分开管理。
仅显示该公司摊销记录(账期取该公司)
✓ {{ amortAlert }}
{{ amortRows.length ? (amortPrintStatus.printed ? '已打印' : '未打印') : '本期无数据' }}
打印时间 {{ amortPrintStatus.printed_at.slice(0,16) }}
本期有摊销数据,请打印存档
删除后可用「生成/补算」重新生成
{{ amortPrintStatus.printed ? '取消已打印' : '标记已打印' }}
清空本期
生成/补算
打印本期明细
已打印{{printCounts.amortization}}次
A5 横向
{{ fmtMoney(s.row.amount) }}
{{ fmtMoney(s.row.accumulated) }}
{{ fmtMoney(s.row.remaining) }}
{{ s.row.voucher_no || '填写' }}
{{ (s.row.created_at || '').slice(0, 16) }}
删除
当前范围:{{ assetCompany || '未选择公司' }} · {{ assetPeriod }}(取该公司账期)。
处置损益 = 处置收入 − 处置时净值
报表数据来自资产处置记录,随处置操作自动更新
刷新报表
本期处置
{{ disposalStats.count }} 笔
收益 {{ disposalStats.gain }} · 损失 {{ disposalStats.loss }}
处置收入合计
¥{{ fmtMoney(disposalStats.income) }}
处置损益合计
¥{{ fmtMoney(disposalStats.pnl) }}
损失资产净值合计
¥{{ fmtMoney(disposalStats.loss_net) }}
{{ fmtMoney(s.row.dispose_amount) }}
{{ fmtMoney(s.row.dispose_net) }}
{{ fmtMoney(s.row.dispose_pnl) }}
收益
损失
查询
新增员工
新增员工
上传证件识别
导入员工花名册
下载导入模板
批量设置部门
已选 {{ payrollEmpSelection.length }} 人
按个税申报员工信息导出
按系统格式导出花名册
税局模板适配(管理员)
员工总数
{{ payrollEmpStats.total }} 人
在职 {{ payrollEmpStats.active }} · 离职 {{ payrollEmpStats.left }}
本月应发合计
¥{{ payrollMoney(payrollEmpStats.gross) }}
{{ payrollEmpStats.month_count }} 人有工资记录
本月代扣个税
¥{{ payrollMoney(payrollEmpStats.tax) }}
本月实发合计
¥{{ payrollMoney(payrollEmpStats.net) }}
未参保人数
{{ payrollEmpStats.no_base }} 人
社保未参保 {{ payrollEmpStats.no_ssi }} · 公积金未参保 {{ payrollEmpStats.no_hf }}
{{ payrollMoney(s.row.ssi_base) }}
{{ payrollMoney(s.row.hf_base) }}
社保{{ Number(s.row.ssi_base) > 0 ? '' : '未缴' }}
公积金{{ Number(s.row.hf_base) > 0 ? '' : '未缴' }}
单独比例
{{ s.row.employment_status }}
编辑
期初
停用
当前范围:{{ payrollCompany || '未选择公司' }};员工档案按公司维护。
{ payrollEmpPage = p; loadPayrollEmployees(); }"
@size-change="sz => { payrollEmpPageSize = sz; payrollEmpPage = 1; loadPayrollEmployees(); }">
上传证件可一次多选:身份证正反面、银行卡可混在一起,也支持多人的证件
先做文字识别(百度高精度 OCR,PDF 直传不转图),再由 AI 整理成员工信息;确认后才会建档,未确认的文件按现有规则自动清理。
⬆
把证件拖到这里,或点击选择文件
支持 JPG / PNG / BMP / WebP / PDF,可一次多选
PDF 直接送百度识别(不转图片);单文件 ≤20MB,单次 ≤12 个文件
待识别文件共 {{ payrollOcrFiles.length }} 个,可逐个移除
{{ payrollOcrSize(s.row.size) }}
移除
核对识别结果已核对 {{ payrollOcrVerifiedCount() }} / 共 {{ payrollOcrEmployees.length }} 条 · 对照左侧原图逐项核对;确认建档后证件图片会永久留档到该员工名下
请对照左侧原图核对右侧识别结果(AI 可能识别错字)。确认建档后证件图片会永久留档到该员工名下。
(本次为缓存结果)
AI 提示:{{ payrollOcrWarnings.join(';') }}
员工 {{ i + 1 }} · {{ e.name || '未识别姓名' }}
{{ e.skip ? '已跳过' : (e.verified ? '✓ 已核对' : '待核对') }}
· {{ (e.pages || []).length }} 页证件
· 身份证号校验未通过
· 未选归属员工
未识别到员工,请核对图片后重新上传
原始证件共 {{ payrollOcrShownPages.length }} 页 · 确认后永久留档
AI 未返回该员工的页码,这里展示本次上传的全部证件页,请人工核对归属
第 {{ idx }} 页 · {{ (payrollOcrPages.find(p => p.index === idx) || {}).name || '' }}
原图加载中…
识别结果可直接修改;带 ★ 为必填
该证件没有姓名信息(只有银行卡),必须手工选择要关联的员工后才能建档。
选「新建员工档案」按识别结果建档;选已有员工则只把证件归档到他名下(不改其身份证号)。
{{ (payrollOcrEmployees[payrollOcrCurrent].checks || {}).id_number ?
payrollOcrEmployees[payrollOcrCurrent].checks.id_number.message : '' }}
户籍地址
发薪信息(工资卡)
{{ (payrollOcrEmployees[payrollOcrCurrent].checks || {}).bank_account ?
payrollOcrEmployees[payrollOcrCurrent].checks.bank_account.message : '' }}
建档后补充
我已核对本员工的原图与信息
已建档
{{ payrollOcrResult.count }} 人
归档证件
{{ payrollOcrResult.files }} 个
已跳过
{{ payrollOcrResult.skipped }} 条
证件已永久归档到对应员工名下;未确认的暂存文件已按现有规则清理。
取消
开始识别({{ payrollOcrFiles.length }} 项)
放弃并清理
跳过当前
全部标记已核对
确认并批量建档({{ payrollOcrEmployees.filter(e => !e.skip).length }})
关闭
按公司缴费比例测算个人与单位缴纳,个人三险一金计入个税专项扣除
比例设置
重新测算
按当前比例确认
打开比例设置
个人三险一金合计
¥{{ payrollMoney(payrollSocialStats.p_total) }}
{{ payrollSocialStats.n }} 人参保
单位五险一金合计
¥{{ payrollMoney(payrollSocialStats.c_total) }}
计入用工成本
单位合计用工成本
¥{{ payrollMoney(payrollSocialStats.total_cost) }}
社保基数合计
¥{{ payrollMoney(payrollSocialStats.ssi_base) }}
公积金基数合计
¥{{ payrollMoney(payrollSocialStats.hf_base) }}
{{ payrollMoney(s.row.ssi_base) }}
{{ payrollMoney(s.row.hf_base) }}
{{ payrollMoney(s.row.p_pension) }}
{{ payrollMoney(s.row.p_medical) }}
{{ payrollMoney(s.row.p_unemploy) }}
{{ payrollMoney(s.row.p_hf) }}
{{ payrollMoney(s.row.p_total) }}
{{ payrollMoney(s.row.c_pension) }}
{{ payrollMoney(s.row.c_medical) }}
{{ payrollMoney(s.row.c_unemploy) }}
{{ payrollMoney(s.row.c_injury) }}
{{ payrollMoney(s.row.c_maternity) }}
{{ payrollMoney(s.row.c_hf) }}
{{ payrollMoney(s.row.c_total) }}
{{ s.row.emp_social_rates ? '单独设置' : '公司默认' }}
{{ s.row.status }}
复制上月工资
导入工资单
下载导入模板
导入期初累计(接账前)
清空本月工资
计算个税并生成工资单
{{ payrollPeriodLocked ? '取消确认工资单' : '确认工资单' }}
打印工资单
导出 Excel(不含五险一金汇总)
导出 Excel(含五险一金汇总)
导出 PDF(不含五险一金汇总)
导出工资单
本期工资单:{{ payrollPeriod.payroll_status }}
本期个税:{{ payrollPeriod.tax_status }}
待计算个税:{{ payrollPeriod.tax_pending }} 人
{{ payrollPeriodLocked ? '数据已锁定:如需修改请先「取消确认工资单」;打印、导出与申报已开放。' : (payrollPeriod.tax_pending > 0 ? ('还有 ' + payrollPeriod.tax_pending + ' 人未计算个税:请先执行「计算个税并生成工资单」,通过后才能确认工资单。') : '确认工资单后才会锁定本月数据,确认后才能打印、导出工资单与个税申报数据。') }}
应发工资合计
¥{{ payrollMoney(payrollRecordStats.gross) }}
{{ payrollRecordStats.n }} 人
个人三险一金
¥{{ payrollMoney(payrollRecordStats.ssi) }}
专项附加扣除
¥{{ payrollMoney(payrollRecordStats.sp) }}
代扣个税
¥{{ payrollMoney(payrollRecordStats.tax) }}
实发合计
¥{{ payrollMoney(payrollRecordStats.net) }}
双击工资格可直接修改并自动保存;双击「实发工资」填写目标值,会自动反推基本工资与个税。
{{ payrollMoney(s.row.base_salary) }}
{{ payrollMoney(Number(s.row.post_salary) + Number(s.row.perform_salary)) }}
{{ payrollMoney(s.row.overtime) }}
{{ payrollMoney(s.row.bonus) }}
{{ payrollMoney(s.row.allowance) }}
{{ payrollMoney(s.row.other_income) }}
{{ payrollMoney(s.row.gross_salary) }}
{{ payrollMoney(Number(s.row.ssi_pension) + Number(s.row.ssi_medical) + Number(s.row.ssi_unemploy)) }}
{{ payrollMoney(s.row.hf_personal) }}
{{ payrollMoney(s.row.sp_total) }}
{{ payrollMoney(Number(s.row.income_tax) + Number(s.row.annual_bonus_tax)) }}
{{ payrollMoney(s.row.net_salary) }}
{{ s.row.status }}
编辑
当前范围:{{ payrollCompany || '未选择公司' }} · {{ payrollMonth }}。
查询
列名与《正常工资薪金所得》税局模板一致,可直接导入扣缴端
{{ payrollPeriod.tax_status === '已确认申报' ? '取消确认申报' : '确认申报' }}
导出个税申报数据
本期工资单:{{ payrollPeriod.payroll_status }}
本期个税:{{ payrollPeriod.tax_status }}
{{ !payrollPeriodLocked ? '工资单确认后才会显示申报数据;未确认时本页为空。' : (payrollPeriod.tax_status === '已确认申报' ? '本所属期申报已确认:现在可以导出个税申报数据。如需修改:先取消确认申报 → 再取消确认工资单 → 改数据后重新确认。' : '请先点「确认申报」;确认之后才能导出个税申报数据。') }}
申报人数
{{ payrollTaxStats.count }} 人
待申报 {{ payrollTaxStats.pending }}
本期收入合计
¥{{ payrollMoney(payrollTaxStats.income) }}
三险一金合计
¥{{ payrollMoney(payrollTaxStats.ssi) }}
本期专项扣除
累计专项附加
¥{{ payrollMoney(payrollTaxStats.sp) }}
本期应扣缴税额
¥{{ payrollMoney(payrollTaxStats.tax) }}
{{ payrollMoney(s.row.income) }}
{{ payrollMoney(s.row.tax_free_income) }}
{{ payrollMoney(s.row.p_pension) }}
{{ payrollMoney(s.row.p_medical) }}
{{ payrollMoney(s.row.p_unemploy) }}
{{ payrollMoney(s.row.p_hf) }}
{{ payrollMoney(s.row.cum_children) }}
{{ payrollMoney(s.row.cum_parents) }}
{{ payrollMoney(s.row.cum_baby) }}
{{ payrollMoney(s.row.other) }}
{{ payrollMoney(s.row.taxable_income) }}
{{ (Number(s.row.rate) * 100).toFixed(0) }}%
{{ payrollMoney(s.row.income_tax) }}
{{ s.row.status }}
回单加载失败:{{ receiptError }}
重试
重新匹配发票
批量打印({{ receiptPickedCount }})
批量下载
银行账号管理
重算账号归属
交易明细
onTableSort('receipts', p)">
{{ s.row.counterparty_name }}
未识别({{ s.row.payee_name || '—' }})
{{ s.row.direction || '待确认' }}
{{ fmtMoney(s.row.amount) }}
{{ receiptStatusLabel(s.row) }}
×{{ s.row.files_print_count }}
{{ s.row.match_label }}
· {{ s.row.links.length }} 张
查重重复
{{ s.row.deleted_reason }}
—
receiptRowAction(s.row, cmd)">
详情
回单原件
单张回单(裁剪后)
不打印
恢复打印
移入回收站
恢复到台账
当前筛选:{{ receiptFilterText }};这个条件下没有回单。
当前范围:{{ scopeCompanyText }} · {{ scopeMonthText }}。可切换公司/所属期,或点右上角「上传文件」归档新回单。
清除筛选
AI 管理中心加载失败:{{ aiCenterError }}
重试
AI 管理中心
统一管理 AI 调用:概览 · 任务与提示词 · 分类规则模板 · 调用账本
刷新概览
Key 状态
{{ aiHealth && aiHealth.key_configured ? '已配置' : '未配置' }}
{{ aiHealth ? aiHealth.model : '' }}
今日调用
{{ aiHealth ? aiHealth.today_calls : 0 }}
上限 {{ aiHealth && aiHealth.daily_limit ? aiHealth.daily_limit : '不限' }}
7 天调用 / 缓存命中
{{ aiStats && aiStats.total ? aiStats.total.calls : 0 }} /
{{ aiStats && aiStats.total ? aiStats.total.cached : 0 }}
命中缓存不花钱
失败次数
{{ aiStats && aiStats.total ? aiStats.total.failed : 0 }}
超时 / 额度 / 解析失败
token 合计
{{ aiStats && aiStats.total ? aiStats.total.tokens : 0 }}
OCR 引擎
{{ AI_OCR_LABELS[aiOcrForm.provider] || '百度优先 + 本地兜底' }}
{{ aiOcr ? (aiOcr.accounts || []).length + ' 个百度账号' : '未读取' }}
· 最近有本地兜底
预算与限额
月 / 周 / 日三级预算,任一触顶即完全停止 AI 调用并降级(规则 → 本地 OCR → 人工)
本月预算
¥ {{ aiBudget.monthly_limit || '不限' }}
已用 ¥ {{ (aiBudgetUsage.month || {}).cost || 0 }}
本周预算
¥ {{ aiBudget.weekly_limit || '不限' }}
已用 ¥ {{ (aiBudgetUsage.week || {}).cost || 0 }}
今日预算
¥ {{ aiBudget.daily_limit || '不限' }}
已用 ¥ {{ (aiBudgetUsage.day || {}).cost || 0 }}
当前状态
{{ aiBudgetCheck.allowed ? '可调用' : '已停止' }}
{{ aiBudgetCheck.allowed ? '按单价表计费,缓存命中不计费' : ('触顶周期:' + (aiBudgetCheck.period || '')) }}
月预算
周预算
日预算
告警比例
保存预算
填 0 表示该周期不限制
识别引擎(OCR)
改了立即生效、不用重启;「百度优先 + 本地兜底」时掉到本地会提示人工检查百度额度
OCR 引擎
保存引擎设置
百度账号:{{ (aiOcr.accounts || []).join('、') || '未配置' }}
· 冷却中:{{ Object.keys(aiOcr.cooldown).join('、') }}
最近一次本地兜底:{{ aiOcr.fallback_at }} · {{ aiOcr.fallback_note || '百度识别失败' }}
标记已处理
文件文本缓存 / 切割结果缓存
按文件内容 sha256 关联:同一份文件再上传,跳过 OCR、跳过 PDFCut 切割识别
文件文本缓存:共 {{ aiTextCache.total || 0 }} 份 · 占用 {{ aiTextCache.mb || 0 }} MB · 命中 {{ aiTextCache.hits || 0 }} 次
({{ (aiTextCache.by_provider || []).map(p => p.provider + ' ' + p.count).join('、') }})
清理 30 天前
全部清理
切割缓存:共 {{ aiPdfcutCache.total || 0 }} 份 · 占用 {{ aiPdfcutCache.mb || 0 }} MB · 处理版本 {{ aiPdfcutCache.pipeline_version || '—' }}
清空切割缓存
切割缓存默认一直保留、不自动清理;改了切割 / 裁白 / 字段口径后,把处理版本号 +1 旧缓存就自动失效(也可在这里手工清空)。
共 {{ aiCache.total || 0 }} 条 · 占用 {{ aiCache.kb || 0 }} KB。
缓存不自动过期;改了提示词或模型后旧缓存会自动失效。
{{ aiTaskName(s.row.task_key) }}
{{ s.row.c }}
{{ ((s.row.bytes || 0) / 1024).toFixed(1) }} KB
{{ s.row.first_at }} ~ {{ s.row.last_at }}
清理该任务
状态读取失败:{{ tencentOcrError }}
回单识别
saveTencentOcrSwitch('receipt', v)" />
明细表格
saveTencentOcrSwitch('statement', v)" />
回单纯切割
saveTencentOcrSwitch('receipt_split_only', v)" />
未配置时默认开启(腾讯优先)
saveTencentOcrSwitch('default_on', v)" />
强制云优先(回单)
saveTencentOcrSwitch('force_receipt', v)" />
强制云优先(明细)
saveTencentOcrSwitch('force_statement', v)" />
云失败回落本地
saveTencentOcrSwitch('force_fallback', v)" />
改完立即生效并写入 .env,重启后沿用;「强制云优先」只改识别顺序(先走腾讯云),
白名单/凭据/预算闸门不变,关闭即回现状;「未配置时默认开启」关掉后,上面三个识别开关没显式配置的一律按关闭
日用量上限
0 = 不限(仍记当日用量)
月用量上限
自然月严格上限,超限停止云调用转待人工
保存用量上限
今日已用 {{ tencentOcr.budget.day_used }}/{{ tencentOcr.budget.day_unlimited ? '不限' : tencentOcr.budget.day_limit }} ·
本月已用 {{ tencentOcr.budget.month_used }}/{{ tencentOcr.budget.month_limit }}
(剩余 {{ tencentOcr.budget.month_remaining }})
凭据 {{ tencentOcr.credentials_configured ? '已配置' : '缺失' }}
SDK {{ tencentOcr.sdk_installed ? '已安装' : '未安装' }}
回单实际可用 {{ tencentFlagText(tencentOcr.receipt.available) }}
明细实际可用 {{ tencentFlagText(tencentOcr.statement.available) }}
灰度白名单:{{ (tencentOcr.bank_whitelist || []).join('、') || '全部' }} ·
版式白名单:{{ (tencentOcr.layout_whitelist || []).join('、') || '全部' }} ·
调用 {{ tencentOcr.stats.calls }}(缓存命中 {{ tencentOcr.stats.cache_hits }},
失败 {{ tencentOcr.stats.errors }},退避 {{ tencentOcr.stats.retries }})·
页号基准 {{ tencentOcr.page_base }} · 映射版本 {{ tencentOcr.mapping_version }}
{{ tencentOcr.receipt.reason || tencentOcr.statement.reason }}
提示词 / 模型 / 缓存 / 启停:改完立即生效,可回滚。
{{ s.row.cache ? '开' : '关' }}
{{ s.row.calls }} / {{ s.row.cached }} /
{{ s.row.failed }}
token {{ s.row.tokens }}
v{{ s.row.version }}
编辑
历史
如 deepseek-flash
开=同一内容第二次进来不花钱(分类/抽字段建议开;与当期台账相关的任务建议关)
停用后调用直接返回 TASK_DISABLED,不花钱
取消
保存(升版本 v{{ (aiTaskForm.version || 1) + 1 }})
v{{ s.row.version }}
回滚
关闭
按银行 / 按票种 / 按公司 / 全局匹配;命中即不调 AI(0 成本)。
{{ s.row.scope }}
{{ s.row.match_bank || s.row.match_company || '—' }}
{{ (s.row.keywords_list || []).join('、') }}
({{ s.row.match_all === 1 ? '全部' : (s.row.match_all > 1 ? '至少' + s.row.match_all + '个' : '任一') }})
{{ s.row.action_kind }}
{{ s.row.hit_count || 0 }} / {{ s.row.miss_count || 0 }}
({{ (s.row.miss_rate * 100).toFixed(0) }}%)
编辑
删除
规则命中就不调用 AI(0 成本);判不出来才走 AI 兜底。人工在复核台改判时会累加“误判”,
这里能直接看到哪条规则需要优化。Key 在平台 .env 里配置(DEEPSEEK_API_KEY),界面永不显示明文。
AI 自学习:命中即 0 次 AI,同类文件直接套用。
健康度:共 {{ aiTemplateHealth.total }} 条 ·
命中 {{ aiTemplateHealth.hits }} ·
失效 {{ aiTemplateHealth.misses }} ·
需关注 {{ aiTemplateHealth.risky }} 条 ·
连续失效已自动停用 {{ aiTemplateHealth.autoDisabled }} 条 ·
停用候选(需管理员补字段并人工启用,不再按次数自动启用) {{ aiTemplateHealth.learning }} 条
{{ unifiedKindLabel(s.row.kind) }}
{{ s.row.auto_created ? 'AI 自学习' : '人工' }}
{{ s.row.samples || 0 }}
{{ s.row.hits || 0 }} / {{ s.row.misses || 0 }}
({{ (s.row.health * 100).toFixed(0) }}%)
{{ s.row.fail_streak || 0 }}
已自动停用
测试
编辑
重学
删除
命中与失效都会留样(文本截断保存)。重学时会用这些历史样本回放校验,
所以不用等新文件凑数。
{{ s.row.source === 'hit' ? '命中' : '失效' }}
{{ Object.keys(s.row.fields_obj || {}).map(k => k + '=' + s.row.fields_obj[k]).join(';') }}
关闭
草稿试跑(不保存、不计命中/样本)
试跑草稿
{{ aiTemplateEdit.testResult }}
版本(改动前自动留存,可回滚)
回滚
取消
保存
拖入或点击选择样本(PDF/图像/可解析的明细 Excel/CSV;
单份 ≤ 20MB,单次 ≤ 20 份)
上传样本
已保存 {{ (ttWizard.uploadResult.saved || []).length }} 份 ·
跳过 {{ (ttWizard.uploadResult.skipped || []).length }} 份
可从多个有权限的公司分别上传;同一「银行×类型×版式」自动汇聚为一个池,
公司只作来源审计与权限,不参与版式身份与匹配范围。
样本分桶(按银行 → 资料类型 → 版式;跨公司汇聚,阶段只提示不自动启用)
{{ g.bank }}
样本来自 {{ g.companies }} 家公司(可跨公司汇聚)
{{ ttKindLabel(t.type) }}
({{ t.buckets.length }} 个版式)
{{ ttBucketLayout(s.row) }}
{{ s.row.format }}
训练 {{ s.row.train }} · 验证 {{ s.row.validation }}
· 未分组 {{ s.row.ungrouped }}
来源 {{ s.row.source_companies }} 家
{{ s.row.stage }}
{{ ttBucketGaps(s.row) || '先完成回放' }}
达到受控试用门槛(仍需管理员批准)
{{ ttBucketStatusLabel(s.row.workflow_status) }}
v{{ s.row.template_revision }} · 命中 {{ s.row.hits }}
/ 失效 {{ s.row.misses }} ·
{{ s.row.last_replay_errors
? ('回放错误 ' + s.row.last_replay_errors)
: (s.row.last_replay_at ? '已回放' : '未回放') }}
生成草稿
回放
{{ s.row.workflow_status === 'trial' ? '申请扩大' : '批准试用' }}
停用
模板详情
池样本
本版式暂无样本
回放:训练 {{ ttWizard.replay.summary.train }}
(通过率 {{ (ttWizard.replay.summary.train_pass_rate * 100).toFixed(0) }}%)·
验证 {{ ttWizard.replay.summary.validation }}
({{ (ttWizard.replay.summary.validation_pass_rate * 100).toFixed(0) }}%)·
关键错误 {{ ttWizard.replay.summary.critical_errors }}
· 训练/验证重复 {{ ttWizard.replay.summary.duplicates.length }}
· 已因关键错误自动停用,请核查已影响的新资料
{{ s.row.group === 'validation' ? '验证'
: (s.row.group === 'train' ? '训练' : '未分组') }}
{{ s.row.status === 'pass' ? '通过' : '不通过' }}
{{ (s.row.issues || []).join(';') }}
样本明细(脱敏;可校准类型/银行/训练或验证分组与真值)
{{ ttWizard.samplesScope === 'pool'
? '版式池全部来源公司样本(管理员视图)' : '本公司样本' }}
来源公司仅作审计,不参与版式身份与匹配范围
返回本公司样本
{{ ttKindLabel(s.row.doc_type) }}
{{ s.row.sample_group === 'train' ? '训练'
: (s.row.sample_group === 'validation' ? '验证' : '未分组') }}
校准
删除
老模板盘点(只读;停用后再启用/编辑/扩大范围走新门禁)
共 {{ (ttWizard.inventory || []).length }} 条 ·
老启用模板 {{ ttWizard.legacyCount || 0 }} 条(保持原行为,可逐条复核)
刷新
{{ ttKindLabel(s.row.kind) }}
{{ s.row.enabled ? '启用' : '停用' }}
{{ s.row.governance_state === 'legacy_active' ? '老模板(原行为)'
: (s.row.governance_state === 'trial' ? '受控试用' : '扩大使用') }}
{{ s.row.hits }} / {{ s.row.misses }}
{{ s.row.approval_scope || '—' }}
({{ s.row.approver }})
详情
取消
保存校准
开始试跑
试跑只在本机跑模板规则,不调用 AI、不影响数据
抽到的字段
未抽到:{{ aiTemplateTest.missing.join('、') }}
关闭
取消
保存(立即生效)
同一家公司可以有多个银行账号;账号维护后,回单按账号自动关联到对应公司(支持"分账号显示")。
{{ receiptAccountForm.id ? '保存修改' : '新增账号' }}
清空
编辑
删除
关闭
{{ statementMonthsSummary }}
{{ statementMonthStatus(s.row).text }}
{{ s.row.initial ? fmtMoney(s.row.initial) : '—' }}
{{ s.row.final ? fmtMoney(s.row.final) : '—' }}
{{ initialSourceText(s.row.initial_source) }}
关闭
公司:{{ receiptCompany || '—' }} · 月份:{{ receiptStatementMonth || '全部' }}
· 共 {{ (receiptStatementRows || []).length }} 个明细文件。
「打印版」是平台处理过(裁白)的版本,PDF 可在线看;「原件」是银行导出的原样文件(Excel / OFD 直接下载)。
显示回收站
当前为准
仅留档
以此份为准
{{ (s.row.file_type || '').toUpperCase() }}
{{ receiptStatusLabel(s.row.status) }}
查看
下载
查看
下载
—
移入回收站
恢复
关闭
{{ receiptDetail.trade_date }}
{{ receiptDetail.direction }}
{{ fmtMoney(receiptDetail.amount) }}
{{ receiptDetail.payer_name || '—' }}
{{ receiptDetail.payee_name || '—' }}
{{ receiptDetail.counterparty_name || '—' }}
{{ receiptDetail.receipt_no || '—' }}
{{ receiptDetail.serial_no || '—' }}
{{ receiptDetail.voucher_no || '—' }}
{{ receiptDetail.summary || '—' }}
{{ receiptDetail.provider || '—' }}(置信度 {{ receiptDetail.confidence || 0 }})
{{ receiptDetail.batch_id }}
{{ receiptDetail.payer_bank || '—' }}
{{ receiptDetail.payee_bank || '—' }}
{{ receiptDetail.notes }}
查看回单原件
|
下载回单
· 本批次共 {{ receiptDetail.files.length }} 个文件(含切割前原件)
完税证明占用 {{ receiptDetail.tax_allocations.length }} 条 | 合计
{{ ((receiptDetail.tax_allocated_minor || 0) / 100).toFixed(2) }}
{{ s.row.document.certificate_no_raw || s.row.document.ticket_no
|| ('ID ' + s.row.document_id) }}
{{ (s.row.item && s.row.item.tax_name) || '—' }}
{{ s.row.amount }}
{{ s.row.confirm_mode === 'manual' ? '人工' : '自动' }}{{ s.row.status === 'recheck' ? '·待重核' : '' }}
匹配候选(对方名称 + 金额,不加日期容差)
{{ s.row.counterparty_name || s.row.sales_name || s.row.buyer_name || '—' }}
{{ fmtMoney(s.row.total_amount) }}
{{ s.row.matched_name ? '名称一致' : '名称近似' }}
关闭
标记无需匹配
保存匹配
onPageChange('files', p)"
@size-change="s => onPageSizeChange('files', s)">
{{ (payrollEmpForm.name || '新').slice(0, 1) }}
{{ payrollEmpForm.name || '新员工' }}{{ payrollEmpForm.emp_code }}
{{ payrollEmpForm.department || '未填部门' }} · {{ payrollEmpForm.position || '未填职务' }} · 入职 {{ payrollEmpForm.hire_date || '—' }}
{{ payrollEmpForm.employment_status || '在职' }}
社会保险{{ Number(payrollEmpForm.ssi_base) > 0 ? '已参保' : '未参保' }}
公积金{{ Number(payrollEmpForm.hf_base) > 0 ? '已参保' : '未参保' }}
单独比例
基本信息带 * 为个税申报必填(必填项加粗);性别与出生日期按身份证自动带出
身份证号码与本公司已有员工重复:{{ payrollDupText(payrollEmpDup.id_number) }} —— 同一公司不能重复建档,请直接编辑已有档案。
本公司已有同名员工:{{ payrollDupText(payrollEmpDup.name) }}(身份证号不同可以继续保存)
本公司已有同手机号员工:{{ payrollDupText(payrollEmpDup.phone) }}
任职信息
户籍与发薪(工资卡)
社保与公积金
填 0 或留空 = 未参加社保
默认 5000,按实际情况调整
与社保基数一致
填 0 或留空 = 未参加公积金
社保公积金比例(选填)
默认全公司按「比例设置」计算;只给个别员工单独设置时再填这里,填了以这里为准,填 0 = 该险种不缴(例如只缴医保就把养老、失业填 0)。
恢复公司默认
专项附加扣除金额(按月)
证件资料身份证、银行卡、学历证书等图片 / PDF,直接关联到该员工名下
新员工请先保存,保存后回到这里即可上传并关联资料。
上传资料 / 证件
支持 JPG / PNG / BMP / WebP / PDF,单文件 ≤20MB
{{ (f.ext || '').toUpperCase() || '文件' }}
{{ f.file_name }}
{{ f.created_at }}
下载
还没有资料,点上面按钮上传身份证 / 银行卡 / 证书等,上传后自动关联到该员工。
取消
保存
应发工资
{{ payrollMoney(payrollRecordForm.gross_salary) }}
个人三险一金
{{ payrollMoney(payrollRecordForm.ssi_total) }}
本期个税
{{ payrollMoney(Number(payrollRecordForm.income_tax) + Number(payrollRecordForm.annual_bonus_tax)) }}
实发工资
{{ payrollMoney(payrollRecordForm.net_salary) }}
收入项
全年一次性奖金
扣除项
自动测算(保存后重算)
个人三险一金
{{ payrollMoney(payrollRecordForm.ssi_total) }}
专项附加扣除
{{ payrollMoney(payrollRecordForm.sp_total) }}
累计应纳税所得额
{{ payrollMoney(payrollRecordForm.taxable_income) }}
应发工资
{{ payrollMoney(payrollRecordForm.gross_salary) }}
本期个税
{{ payrollMoney(Number(payrollRecordForm.income_tax) + Number(payrollRecordForm.annual_bonus_tax)) }}
实发工资
{{ payrollMoney(payrollRecordForm.net_salary) }}
取消
保存并重算
这里是公司默认比例:员工档案里单独填过比例的,按员工自己的比例计算;基数填 0 表示该项未参保,允许社保或公积金只参一项。
按当前比例确认
确认人:{{ payrollRateConfirm.confirmed_by || '(尚未确认)' }}
| 险种 | 单位比例(%) | 个人比例(%) |
| 基本养老保险养老待遇 |
|
|
| 基本医疗保险不含生育 |
|
|
| 失业保险 |
|
|
| 工伤保险单位承担 |
|
— |
| 生育保险单位承担 |
|
— |
| 住房公积金单位与个人同比例 |
|
|
单位比例合计
{{ payrollMoney(payrollSettingsTotalCompany) }}%
个人比例合计
{{ payrollMoney(payrollSettingsTotalPersonal) }}%
基本减除费用(每月 5000 或按实际情况)在「编辑员工」里按人维护;保存后对新测算生效,已申报月份的工资记录不会被改动。
取消
保存
选择文件支持 .xlsx;税局模板与系统模板都能识别
金额只填「姓名 + 应发工资」也能导入(按基本工资入账);只填「姓名 + 实发工资」会自动反推基本工资与个税;其余列留空即按档案自动计算;
逐行校验并回读核对,失败行不写库;失败原因会写回原表,可下载修改后重传。
⬆
把 Excel 拖到这里,或点击选择文件
一次一个文件;选好后点右下角「开始导入」
已选择:{{ payrollImportFile.name }}
清除
导入结果
成功 {{ payrollFailResult.ok }} 条(新增 {{ payrollFailResult.created }} · 更新 {{ payrollFailResult.updated }})
失败 {{ payrollFailResult.failed }} 条
忽略 {{ payrollFailResult.skipped }} 条
下载带结果的原表
{{ s.row.status === 'failed' ? '失败' : (s.row.status === 'skipped' ? '忽略' : '成功') }}
关闭
开始导入
把自然人电子税务局最新的模板上传并确认一次映射,之后导入与导出都按这套列名执行:税局改列名、加列、调顺序都不用改程序。
上传税局模板
已映射 {{ payrollTplMappedCount }} / {{ payrollTplColumns.length }} 列
{{ payrollTplWarning }}
{{ s.row.field ? '已映射' : '忽略' }}
已保存的模板
{{ s.row.kind === 'employee' ? '人员信息采集' : '工资薪金所得' }}
{{ s.row.scope_company || '全部公司' }}
{{ s.row.enabled ? '启用' : '停用' }}
删除
关闭
所属年度与截止期跨年自动重置,期初按年度分开保存
这里填「进入本系统之前」的累计数,用于累计预扣法:本期个税 =(期初累计 + 本系统各月)× 税率 − 速算扣除数 − 期初已缴 − 系统内已扣。留空按 0 处理。
备注
保存后会重算该员工当年度全部月份的个税;若该年度有已确认期间,会自动退回「未确认」,需要重新确认。
取消
保存并重算
成功 {{ payrollFailResult.ok }} 条(新增 {{ payrollFailResult.created }} · 更新 {{ payrollFailResult.updated }})
失败 {{ payrollFailResult.failed }} 条
忽略空行/示例行 {{ payrollFailResult.skipped }} 条
下载带结果的原表
没有任何数据写入数据库。请按每行「失败原因」修改后重新导入。
未识别的列(已忽略):{{ payrollFailResult.unmatched.join('、') }}
{{ s.row.status === 'failed' ? '失败' : (s.row.status === 'skipped' ? '忽略' : '成功') }}
失败的行不会写入系统。「下载带结果的原表」会保留你的原始数据并追加一列「导入结果」:成功行标绿、失败行标红并写明原因,改完直接重新导入即可(已成功的行会按身份证号/工号识别并更新,不会重复建档)。
知道了
只改「部门」一个字段,其他档案信息、工资、社保、期初都不动;新部门保存后会自动进入常用部门列表。
取消
确定设置({{ payrollEmpSelection.length }} 人)
查询
查看原件
已关联:{{ assetInvoiceInfo.ticket_type || assetInvoiceInfo.invoice_type || '发票' }}
· 项目名称 {{ assetInvoiceInfo.item_name || '—' }}
· 开票日期 {{ (assetInvoiceInfo.invoice_date || '').slice(0,10) }}
· 金额 {{ assetInvoiceInfo.amount || '—' }}
· 税额 {{ assetInvoiceInfo.tax || '—' }}
· 价税合计 {{ assetInvoiceInfo.total_amount || '—' }}
· 销售方 {{ assetInvoiceInfo.sales_name || assetInvoiceInfo.counterparty_name || '—' }}
· 原件:{{ assetInvoiceInfo.file_name }}
· 未找到原件文件
折旧年限按税法最低标准预填:房屋建筑物 240 月、机器设备 120 月、运输工具 48 月、电子设备 36 月;残值率默认 5%;折旧方法可选“基于原值和预计使用月份”或“基于净值和剩余使用月份”;资产编号由系统自动生成(公司内 6 位顺序号);开始计提月份默认购置次月,保存后按公司所属期自动计提;填写发票号可关联平台发票并带出税额。
取消
保存
处置资产:{{ assetDispose.asset_name }}
处置当月照常计提折旧,次月起停止;处置损益 = 处置收入 − 处置时净值。
取消
确认处置
按代码/号码查询
查看发票原件
查询后自动带出金额、税额、收款方、日期与原件 PDF
已关联:{{ prepayInvoiceInfo.ticket_type || prepayInvoiceInfo.invoice_type || '发票' }}
· 项目名称 {{ prepayInvoiceInfo.item_name || '—' }}
· 开票日期 {{ (prepayInvoiceInfo.invoice_date || '').slice(0,10) }}
· 金额 {{ prepayInvoiceInfo.amount || '—' }}
· 税额 {{ prepayInvoiceInfo.tax || '—' }}
· 价税合计 {{ prepayInvoiceInfo.total_amount || '—' }}
· 收款方 {{ prepayInvoiceInfo.sales_name || prepayInvoiceInfo.counterparty_name || '—' }}
· 原件:{{ prepayInvoiceInfo.file_name }}
· 未找到原件文件
摊销月数建议:年付房租 12 个月、装修费用按受益期(如 36 个月);摊销方法可选“基于原值和预计使用月份”或“基于净值和剩余使用月份”;每月摊销 = 总金额 ÷ 月数(或按剩余金额 ÷ 剩余月数),最后一期自动结清,保存后按公司所属期自动生成摊销记录。
取消
保存
项目:{{ prepayTerminate.item_name }}
终止当月正常摊销,剩余金额不再摊销。
取消
确认终止
发票号码{{ invoiceDetailMaster.invoice_no || invoiceDetailMaster.digital_invoice_no || '—' }}
发票代码{{ invoiceDetailMaster.invoice_code || '—(数电票无)' }}
开票日期{{ (invoiceDetailMaster.invoice_date || '').slice(0,19) || '—' }}
发票来源{{ invoiceDetailMaster.source_db || '—' }}
销售方{{ invoiceDetailMaster.sales_name || invoiceDetailMaster.counterparty_name || '—' }} {{ invoiceDetailMaster.sales_tax_no || invoiceDetailMaster.counterparty_tax_no || '' }}
开票人{{ invoiceDetailMaster.drawer || '—' }}
购买方{{ invoiceDetailMaster.buyer_name || '—' }} {{ invoiceDetailMaster.buyer_tax_no || '' }}
销方开户{{ invoiceDetailMaster.seller_addr }} {{ invoiceDetailMaster.seller_tel }} {{ invoiceDetailMaster.seller_bank }} {{ invoiceDetailMaster.seller_account }}
金额合计(不含税)
¥{{ fmtMoney(invoiceDetailStats.amount) }}
税额合计
¥{{ fmtMoney(invoiceDetailStats.tax) }}
价税合计
¥{{ fmtMoney(invoiceDetailStats.total_amount) }}
明细行数
{{ invoiceDetailStats.count }} 行
来源:{{ invoiceDetailMaster.detail_source === 'xml' ? '数电票 XML' : (invoiceDetailMaster.detail_source === 'xlsx' ? '下载明细 Excel' : '未导入') }}
发票原件:
{{ f.file_type.toUpperCase() }}
未关联原件文件
{{ s.row.quantity }}
{{ fmtMoney(s.row.unit_price) }}
{{ fmtMoney(s.row.amount) }}
{{ fmtMoney(s.row.tax_amount) }}
{{ fmtMoney(s.row.total_amount) }}
资产卡片 / 摊销项目的默认名称 = 明细第一行去掉 *分类* 前缀(本票 → {{ invoiceDetailItems.length ? invoiceDetailItems[0].goods_short : '—' }})。
关闭
共选择 {{ assetFromInvoiceRows.length }} 张发票;发票号码、金额、销售方、原件会自动关联到卡片,同一发票已建卡片的会自动跳过。
查看
无
取消
生成卡片
共选择 {{ prepayFromInvoiceRows.length }} 张发票;金额、税额、收款方、发票原件会自动关联到项目,同一发票已生成过项目的会自动跳过。适合房租、装修等待摊费用。
查看
无
取消
生成摊销项目
关闭
打印