年度总收入
¥ {{ 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 }}% |
| 暂无数据 | ||
报表当前账套
账套:{{ currentBooksetDisplayName }}
切换上方“账号与账套”中的当前账套后,这里的报表与利润表会同步刷新到对应账套。
📅 科目日报表(透视表)
项目/合同沿用顶部筛选
{{ reportFilterProjectLabel }}
{{ reportFilterContractLabel }}
正在准备科目日报表
当前账套的日报透视表正在刷新,请稍候…
日报表加载失败
{{ reportDashboardError }}
当前筛选条件下暂无日报表数据
可以调整年份、月份、顶部项目或合同筛选后再查看。
| 科目 | {{ 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 }}
收支利润情况
正在整理利润汇总
当前账套的收入、支出与盈亏汇总正在刷新,请稍候…
利润汇总加载失败
{{ reportDashboardError }}
收入
¥{{ formatAmount(profitTotal.income) }}
支出
¥{{ formatAmount(profitTotal.expense) }}
盈亏
{{ profitTotal.profit >= 0 ? '+' : '' }}¥{{ formatAmount(profitTotal.profit) }}
主要成本费用
正在整理主要成本费用
当前账套的支出排名正在刷新,请稍候…
主要成本费用加载失败
{{ reportDashboardError }}
当前筛选条件下暂无支出数据
待本期有支出发生后,这里会自动展示主要成本费用排行。
{{ cat.name }} ({{ profitTotal.expense > 0 ? ((cat.amount / profitTotal.expense * 100).toFixed(1)) : '0.0' }}%)
¥{{ formatAmount(cat.amount) }}
收入详情
正在整理收入详情
当前账套的收入结构与同比对比正在刷新,请稍候…
收入详情加载失败
{{ reportDashboardError }}
| 科目名称 | 本期金额 | 占比 | 上期金额 | 同比增长金额 | 同比增长比例 |
|---|---|---|---|---|---|
| {{ 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 ? '当前未登录:业务数据仅支持云端备份,请先登录后再导出或恢复。' : (canExportCloudBackups ? '当前为云端模式:导出将备份数据库中的业务数据,并附带当前浏览器本地设置。' : (isTenantAdmin ? exportBackupPermissionHint : '当前账号为普通成员:仅当前公司管理员可导出或恢复云端业务备份。')) }} 恢复备份会覆盖当前云端业务数据,请谨慎操作。
提示:建议登录后定期导出云端业务备份。{{ isLoggedIn ? '恢复云端备份将完全覆盖当前数据库业务数据。' : '未登录时不能恢复业务备份。' }} 请谨慎操作。
最近云端备份记录
登录后可查看当前公司最近的云端备份记录。
仅当前公司管理员可查看云端备份记录。
{{ record.fileName || '未命名备份文件' }}
账套:{{ record.booksetName || '未命名账套' }}
当前账套
默认账套
{{ record.backupTypeLabel }}
{{ formatBackupTimestamp(record.createdAt) }}
{{ formatBackupSize(record.fileSize) }}
当前公司还没有可展示的云端备份记录。
收入科目管理
{{ cat.name }}
└ {{ child.name }}
└ {{ grandchild.name }}
支出科目管理
{{ cat.name }}
└ {{ child.name }}
└ {{ grandchild.name }}
基础资料
账号与账套:
当前用户:
{{ currentUser?.username || '-' }}
账套:
{{ currentBookset?.name || '默认账套' }}
默认
点击下方账套名称即可切换当前会话账套
{{ booksetMutationMessage || '多人协作公司暂不支持删除账套。' }}
全部账套:
共 {{ booksets.length }} 个
{{ item.name || `账套${item.id}` }}
默认
当前
系统标题:
当前标题:{{ systemTitle }}
(双击标题也可修改)
项目列表:
{{ proj.name }}
×
团队管理
登录后可查看当前公司成员、邀请同事加入并管理角色。
当前公司
{{ currentUser?.tenantName || '未命名公司' }}
我的角色
{{ currentUser?.memberRole === 'owner' ? '拥有者' : currentUser?.memberRole === 'admin' ? '管理员' : '普通成员' }}
成员数量
{{ tenantMembers.length }}
{{ isTenantAdmin ? tenantMemberManagementHint : '当前账号可查看团队成员信息;如需邀请成员或调整角色,请联系本公司管理员。' }}
| 成员账号 | 邮箱 / 企业 | 角色 | 加入时间 | 状态 | 操作 |
|---|---|---|---|---|---|
|
{{ member.username || '-' }}
ID: {{ member.user_id || '-' }}
|
{{ member.email || '-' }}
{{ member.company_name || '未填写企业名称' }}
|
{{ member.role === 'owner' ? '拥有者' : member.role === 'admin' ? '管理员' : '普通成员' }}
|
{{ member.joined_at ? String(member.joined_at).slice(0, 10) : '-' }} | {{ member.status === 'active' ? '正常' : member.status || '-' }} | - - |
| 当前公司暂无成员数据,点击上方“刷新成员”可重新拉取。 | |||||
权限管理
按角色管理当前公司的模块访问、编辑、修改和删除权限,保存后立即生效。
{{ currentUser?.tenantName || '当前公司' }}
{{ currentUser?.memberRole === 'owner' ? '拥有者' : '管理员' }}
当前账号没有权限管理权限。
角色权限模板
当前正在编辑 {{ permissionEditRole === 'admin' ? '管理员' : '普通成员' }} 权限模板。拥有者始终保留完整权限;普通成员是否显示菜单,取决于“可查看”开关。
| 模块 | 可查看 | 可录入/编辑 | 可修改 | 可删除 |
|---|---|---|---|---|
|
{{ mod.label }}
模块标识:{{ mod.key }}
|
员工借支
统一登记员工借支、归还进度和剩余待收金额。
借支总额
¥ {{ 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 }}条/页