{{ authMode === 'login' ? '欢迎登录' : '注册账号' }}

工程收支管理系统 V3.0 云端版

{{ authMode === 'login' ? '没有账号?点击注册' : '已有账号?点击登录' }}

设备未授权

当前设备未绑定卡密,或卡密已过期

{{ activationMessage }}
退出登录
{{ toastType === 'success' ? '✓' : toastType === 'error' ? '✕' : toastType === 'warning' ? '⚠' : 'ℹ' }} {{ toastMessage }}
处理中...

{{ currentTabLabel }}

登录设备: {{ currentLicenseDeviceCount }} 台 / 1台
☁️
{{ currentUser?.username || '已登录' }}
当前账套: {{ currentBookset?.name || '默认账套' }} 默认
年份 项目 合同
{{ reportFilterPeriodLabel }} {{ reportFilterProjectLabel }} {{ reportFilterContractLabel }}
年度总收入
¥ {{ formatAmount(yearStats.income) }}
年度总支出
¥ {{ formatAmount(yearStats.expense) }}
年度净利润
¥ {{ formatAmount(yearStats.income - yearStats.expense) }}
当前资金余额
¥ {{ formatAmount(balance) }}
{{ currentYear }}年 收支走势图
📊
该筛选条件下暂无数据
收入科目占比
科目 金额 占比
{{ item.label }} ¥{{ formatAmount(item.value) }} {{ item.percent }}%
暂无数据
💸 支出科目占比
科目 金额 占比
{{ item.label }} ¥{{ formatAmount(item.value) }} {{ item.percent }}%
暂无数据
📅 科目日报表(透视表)
项目/合同沿用顶部筛选 {{ reportFilterProjectLabel }} {{ reportFilterContractLabel }}
科目 {{ date.slice(5) }} 合计
收入总计 {{ reportIncomeTotalByDate[date] ? '¥' + formatAmount(reportIncomeTotalByDate[date]) : '-' }} ¥{{ formatAmount(reportTotal.income) }}
支出总计 {{ reportExpenseTotalByDate[date] ? '¥' + formatAmount(reportExpenseTotalByDate[date]) : '-' }} ¥{{ formatAmount(reportTotal.expense) }}
总计 ¥{{ formatAmount((reportIncomeTotalByDate[date] || 0) - (reportExpenseTotalByDate[date] || 0)) }} ¥{{ formatAmount(reportTotal.income - reportTotal.expense) }}
暂无数据,请调整筛选条件
利润表
统计维度
快捷区间
{{ reportFilterPeriodLabel }} {{ reportPeriodStart }} ~ {{ reportPeriodEnd }}
收支利润情况
收入
¥{{ formatAmount(profitTotal.income) }}
支出
¥{{ formatAmount(profitTotal.expense) }}
盈亏
{{ profitTotal.profit >= 0 ? '+' : '' }}¥{{ formatAmount(profitTotal.profit) }}
主要成本费用
暂无支出数据
收入详情
科目名称 本期金额 占比 上期金额 同比增长金额 同比增长比例
暂无收入数据
序号 日期时间 类型 项目 科目 关联合同 摘要 账户 金额 最近编辑日期 编辑人员 操作
{{ (ledgerCurrentPage - 1) * ledgerPageSize + index + 1 }} {{ formatDateTime(t.createdAt || t.date) }} {{ t.type }} {{ t.project }} {{ t.category }} {{ getContractById(t.contractId)?.name || '-' }} - {{ t.remark || '-' }} {{ t.account }} {{ t.type === '支出' ? '-' : '+' }}{{ formatAmount(t.amount) }} {{ formatDateTime(t.updatedAt) }} {{ t.updatedBy || t.createdBy || '-' }}
{{ (isLoggedIn && !showActivationModal) ? cloudLedgerTotalCount : ledgerFilteredTransactions.length }} 条记录, 第 {{ ledgerCurrentPage }} / {{ ledgerTotalPages }}
{{ ledgerPageSize }}条/页
销售合同总额
¥ {{ formatAmount(contractStats.salesTotal) }}
已回款: ¥{{ formatAmount(contractStats.salesDone) }} ({{ contractStats.salesRate }}%)
已开票: ¥{{ formatAmount(contractStats.salesInvoiced) }} 未开票: ¥{{ formatAmount(contractStats.salesUninvoiced) }}
采购合同总额
¥ {{ formatAmount(contractStats.purchaseTotal) }}
已付款: ¥{{ formatAmount(contractStats.purchaseDone) }} ({{ contractStats.purchaseRate }}%)
已开票: ¥{{ formatAmount(contractStats.purchaseInvoiced) }} 未开票: ¥{{ formatAmount(contractStats.purchaseUninvoiced) }}
{{ c.name }} ({{ Math.min(100, Math.round(getContractExecAmount(c.id) / c.amount * 100)) }}%) {{ c.project }}
{{ c.no }}
合同额: {{ formatAmount(c.amount) }} 已{{ contractView === 'sales' ? '收' : '付' }}: {{ formatAmount(getContractExecAmount(c.id)) }}
已开票: {{ formatAmount(getContractInvoicedAmount(c.id)) }} 未开票: {{ formatAmount(getContractUninvoicedAmount(c.id)) }}
销售合同已开票
¥ {{ formatAmount(contractStats.salesInvoiced) }}
未开票: ¥{{ formatAmount(contractStats.salesUninvoiced) }}
采购合同已开票
¥ {{ formatAmount(contractStats.purchaseInvoiced) }}
未开票: ¥{{ formatAmount(contractStats.purchaseUninvoiced) }}
提示
{{ invoiceLoadError }}
序号 创建时间 合同名称 项目 合同类型 本次开票 累计已开票 未开票 发票号 附件 最近编辑时间 编辑人员 备注 操作
当前后端尚未启用发票接口
请重启本地后端服务后再使用发票管理。
暂无发票记录
你可以先录入一张发票,系统会自动按销售/采购合同统计已开票与未开票金额。
{{ index + 1 }} {{ formatDateTime(invoice.created_at || invoice.createdAt) }} {{ getInvoiceContractName(invoice) }} ¥ {{ formatAmount(getInvoiceContractAmount(invoice)) }} {{ getInvoiceProjectName(invoice) }} {{ getInvoiceContractType(invoice) === 'sales' ? '销售合同' : '采购合同' }} ¥ {{ formatAmount(invoice.amount) }} ¥ {{ formatAmount(getContractInvoicedAmount(getInvoiceContractId(invoice))) }} ¥ {{ formatAmount(getContractUninvoicedAmount(getInvoiceContractId(invoice))) }} {{ invoice.invoice_no || invoice.invoiceNo || '-' }}
{{ invoice.attachments.length }} 张
-
{{ formatDateTime(invoice.updated_at || invoice.updatedAt || invoice.created_at || invoice.createdAt) }} {{ invoice.updated_by || invoice.updatedBy || invoice.created_by || invoice.createdBy || '-' }} {{ invoice.remark || '-' }}
应收应付数据存在异常记录,页面已自动兜底避免白屏。{{ arapRenderError }}
{{ arapView === 'sales' ? '应收总额' : '应付总额' }}
¥ {{ formatAmount(arapStats.totalAmount) }}
共 {{ arapStats.count }} 份合同
{{ arapView === 'sales' ? '已收金额' : '已付金额' }}
¥ {{ formatAmount(arapStats.settledAmount) }}
已完成 {{ arapStats.completedCount }} 份
{{ arapView === 'sales' ? '待收金额' : '待付金额' }}
¥ {{ formatAmount(arapStats.pendingAmount) }}
部分完成 {{ arapStats.partialCount }} 份
逾期待处理
¥ {{ formatAmount(arapStats.overdueAmount) }}
逾期 {{ arapStats.overdueCount }} 份,7 天内到期 {{ arapStats.soonCount }} 份
合同名称 合同编号 项目 类型 到期日期 提醒 合同金额 {{ arapView === 'sales' ? '已收金额' : '已付金额' }} {{ arapView === 'sales' ? '待收金额' : '待付金额' }} 已开票 未开票 状态 操作
暂无{{ arapView === 'sales' ? '应收' : '应付' }}记录
当前页基于合同金额、流水回款/付款和发票数据自动汇总。
{{ row.contractName }} {{ row.contractNo }} {{ row.projectName }} {{ row.typeLabel }} {{ formatDateOnlyDisplay(row.dueDate) }} {{ row.reminderLabel }} ¥ {{ formatAmount(row.totalAmount) }} ¥ {{ formatAmount(row.settledAmount) }} ¥ {{ formatAmount(row.pendingAmount) }} ¥ {{ formatAmount(row.invoicedAmount) }} ¥ {{ formatAmount(row.uninvoicedAmount) }} {{ row.statusLabel }}
总收入
¥ {{ formatAmount(accountStats.totalIncome) }}
总支出
¥ {{ formatAmount(accountStats.totalExpense) }}
总余额
¥ {{ formatAmount(accountStats.totalBalance) }}
账户数量
{{ accountsList.length }} 个
账户列表
账户名称 收入 支出 余额 记录数 操作
{{ acc.name }} + {{ formatAmount(accountBalances[acc.id]?.income || 0) }} - {{ formatAmount(accountBalances[acc.id]?.expense || 0) }} ¥ {{ formatAmount(accountBalances[acc.id]?.balance || 0) }} {{ accountBalances[acc.id]?.count || 0 }} 0 有记录 删除
暂无账户,请点击"新增账户"添加
⚠️ 重要提示:数据存储风险警告

当前系统已统一为云端业务数据模式:项目、账户、合同、流水、员工借支等业务数据仅保存在服务器数据库中。

  • 未登录时仅保留少量浏览器本地设置与登录凭证缓存,不再支持在本地浏览器录入或保存业务数据
  • 退出登录、Token 失效或更换电脑后,如需继续处理业务数据,请重新登录云端账号
  • 业务数据备份与恢复统一走云端数据库口径;未登录状态下不能导出或恢复业务备份

💡 建议登录后定期导出云端业务备份文件,并在需要时通过云端恢复入口进行回滚。

数据备份与恢复

{{ isLoggedIn ? '当前为云端模式:导出将备份数据库中的业务数据,并附带当前浏览器本地设置。' : '当前未登录:业务数据仅支持云端备份,请先登录后再导出或恢复。' }} 恢复备份会覆盖当前云端业务数据,请谨慎操作。

提示:建议登录后定期导出云端业务备份。{{ isLoggedIn ? '恢复云端备份将完全覆盖当前数据库业务数据。' : '未登录时不能恢复业务备份。' }} 请谨慎操作。
收入科目管理
支出科目管理
基础资料
账号与账套:
当前用户: {{ currentUser?.username || '-' }} 账套: {{ currentBookset?.name || '默认账套' }} 默认 切换账套请先退出后重新登录选择
系统标题:
当前标题:{{ systemTitle }} (双击标题也可修改)
项目列表:
{{ proj.name }} ×

员工借支

统一登记员工借支、归还进度和剩余待收金额。
借支总额
¥ {{ formatAmount(employeeLoanOverview.totalAmount) }}
共 {{ employeeLoanOverview.totalCount }} 笔
待收回金额
¥ {{ formatAmount(employeeLoanOverview.outstandingAmount) }}
未结清 {{ employeeLoanOverview.openCount }} 笔
已归还金额
¥ {{ formatAmount(employeeLoanOverview.totalReturned) }}
已结清 {{ employeeLoanOverview.returnedCount }} 笔
部分归还待收
¥ {{ formatAmount(employeeLoanOverview.partialRemaining) }}
部分归还 {{ employeeLoanOverview.partialCount }} 笔
当前显示 {{ paginatedEmployeeLoans.length }} / {{ filteredEmployeeLoans.length }} 条
加载失败
{{ employeeLoanLoadError }}
序号 借支日期 员工姓名 借支金额 已归还 归还记录 待收回 状态 借支原因 备注 操作
员工借支数据加载中...
暂无员工借支记录
你可以先新增一笔借支,后续在这里登记归还和查看待收回金额。
{{ (employeeLoanCurrentPage - 1) * employeeLoanPageSize + index + 1 }} {{ formatDate(loan.loan_date) }} {{ loan.employee_name || '-' }} ¥ {{ formatAmount(loan.amount) }} ¥ {{ formatAmount(loan.returned_amount || 0) }} {{ getEmployeeLoanRepaymentSummary(loan) }} ¥ {{ formatAmount(getEmployeeLoanOutstanding(loan)) }} {{ getEmployeeLoanStatusLabel(loan.status) }} {{ loan.reason || '-' }} {{ loan.remark || '-' }}
{{ filteredEmployeeLoans.length }} 条记录, 第 {{ employeeLoanCurrentPage }} / {{ employeeLoanTotalPages }}
{{ employeeLoanPageSize }}条/页