年度总收入
¥ {{ 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) }} |
| {{ cat.displayName }} {{ cat.displayName }} | ¥{{ formatAmount(getCategoryAmountByDate(cat.name, '收入', date)) }} - | ¥{{ formatAmount(getCategoryTotalAmount(cat.name, '收入')) }} |
| 支出总计 | {{ reportExpenseTotalByDate[date] ? '¥' + formatAmount(reportExpenseTotalByDate[date]) : '-' }} | ¥{{ formatAmount(reportTotal.expense) }} |
| {{ cat.displayName }} {{ cat.displayName }} | ¥{{ formatAmount(getCategoryAmountByDate(cat.name, '支出', date)) }} - | ¥{{ formatAmount(getCategoryTotalAmount(cat.name, '支出')) }} |
| 总计 | ¥{{ 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) }}
主要成本费用
{{ cat.name }} ({{ profitTotal.expense > 0 ? ((cat.amount / profitTotal.expense * 100).toFixed(1)) : '0.0' }}%)
¥{{ formatAmount(cat.amount) }}
暂无支出数据
收入详情
| 科目名称 | 本期金额 | 占比 | 上期金额 | 同比增长金额 | 同比增长比例 |
|---|---|---|---|---|---|
| {{ cat.displayName }} {{ cat.displayName }} | ¥{{ formatAmount(cat.currentAmount) }} | {{ profitTotal.income > 0 ? ((cat.currentAmount / profitTotal.income * 100).toFixed(1)) : '0.0' }}% | ¥{{ formatAmount(cat.lastAmount) }} | {{ cat.growthAmount >= 0 ? '+' : '' }}¥{{ formatAmount(cat.growthAmount) }} | {{ cat.growthRate >= 0 ? '▲' : '▼' }}{{ Math.abs(cat.growthRate) }}% |
| 暂无收入数据 | |||||
| 序号 | 日期时间 | 类型 | 项目 | 科目 | 关联合同 | 摘要 | 账户 | 金额 | 最近编辑日期 | 编辑人员 | 操作 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| {{ (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 || '-' }} |
|
{{ 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 }} 个
账户列表
⚠️ 重要提示:数据存储风险警告
当前系统已统一为云端业务数据模式:项目、账户、合同、流水、员工借支等业务数据仅保存在服务器数据库中。
- 未登录时仅保留少量浏览器本地设置与登录凭证缓存,不再支持在本地浏览器录入或保存业务数据
- 退出登录、Token 失效或更换电脑后,如需继续处理业务数据,请重新登录云端账号
- 业务数据备份与恢复统一走云端数据库口径;未登录状态下不能导出或恢复业务备份
💡 建议登录后定期导出云端业务备份文件,并在需要时通过云端恢复入口进行回滚。
数据备份与恢复
{{ isLoggedIn ? '当前为云端模式:导出将备份数据库中的业务数据,并附带当前浏览器本地设置。' : '当前未登录:业务数据仅支持云端备份,请先登录后再导出或恢复。' }} 恢复备份会覆盖当前云端业务数据,请谨慎操作。
提示:建议登录后定期导出云端业务备份。{{ isLoggedIn ? '恢复云端备份将完全覆盖当前数据库业务数据。' : '未登录时不能恢复业务备份。' }} 请谨慎操作。
收入科目管理
{{ cat.name }}
└ {{ child.name }}
└ {{ grandchild.name }}
支出科目管理
{{ cat.name }}
└ {{ child.name }}
└ {{ grandchild.name }}
基础资料
账号与账套:
当前用户:
{{ 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 }}条/页