<template> 
 | 
  <div class="app-container"> 
 | 
    <el-row :gutter="16" class="mb-16"> 
 | 
      <el-col :span="12"> 
 | 
        <el-card shadow="hover"> 
 | 
          <div class="section-title">统一会计科目体系</div> 
 | 
          <el-tree 
 | 
            :data="accountTree" 
 | 
            node-key="code" 
 | 
            :props="{ label: 'label', children: 'children' }" 
 | 
            highlight-current 
 | 
            default-expand-all 
 | 
          /> 
 | 
        </el-card> 
 | 
      </el-col> 
 | 
      <el-col :span="12"> 
 | 
        <el-card shadow="hover"> 
 | 
          <div class="section-title">凭证模板</div> 
 | 
          <el-table :data="voucherTemplates" border size="small"> 
 | 
            <el-table-column prop="name" label="模板名称" min-width="140" /> 
 | 
            <el-table-column prop="bizScene" label="业务场景" min-width="140" /> 
 | 
            <el-table-column prop="debit" label="借方科目" min-width="160" /> 
 | 
            <el-table-column prop="credit" label="贷方科目" min-width="160" /> 
 | 
            <el-table-column prop="auxDims" label="辅助核算维度" min-width="180"> 
 | 
              <template #default="scope"> 
 | 
                <el-space wrap> 
 | 
                  <el-tag v-for="dim in scope.row.auxDims" :key="dim" size="small" type="info">{{ dim }}</el-tag> 
 | 
                </el-space> 
 | 
              </template> 
 | 
            </el-table-column> 
 | 
          </el-table> 
 | 
        </el-card> 
 | 
      </el-col> 
 | 
    </el-row> 
 | 
  
 | 
    <el-row :gutter="16" class="mb-16"> 
 | 
      <el-col :span="12"> 
 | 
        <el-card shadow="hover"> 
 | 
          <div class="section-title">业务流程 → 凭证自动生成</div> 
 | 
          <div class="toolbar"> 
 | 
            <el-text type="info">演示数据仅用于展示结构与字段</el-text> 
 | 
          </div> 
 | 
          <el-table :data="generatedVouchers" border size="small"> 
 | 
            <el-table-column prop="date" label="日期" width="110" /> 
 | 
            <el-table-column prop="bizScene" label="业务场景" min-width="120" /> 
 | 
            <el-table-column prop="summary" label="摘要" min-width="160" /> 
 | 
            <el-table-column prop="amount" label="金额(¥)" width="110" /> 
 | 
            <el-table-column prop="status" label="状态" width="100"> 
 | 
              <template #default="scope"> 
 | 
                <el-tag :type="scope.row.status === '已生成' ? 'success' : 'warning'">{{ scope.row.status }}</el-tag> 
 | 
              </template> 
 | 
            </el-table-column> 
 | 
          </el-table> 
 | 
        </el-card> 
 | 
      </el-col> 
 | 
      <el-col :span="12"> 
 | 
        <el-card shadow="hover"> 
 | 
          <div class="section-title">多维辅助核算</div> 
 | 
          <div class="dims"> 
 | 
            <el-tag type="success">客户</el-tag> 
 | 
            <el-tag type="warning">项目</el-tag> 
 | 
            <el-tag type="info">部门</el-tag> 
 | 
            <el-tag type="primary">管理员</el-tag> 
 | 
          </div> 
 | 
          <el-table :data="auxSummary" size="small" border> 
 | 
            <el-table-column prop="dimension" label="维度" width="100" /> 
 | 
            <el-table-column prop="category" label="类别" min-width="140" /> 
 | 
            <el-table-column prop="debit" label="借方(本期)" width="110" /> 
 | 
            <el-table-column prop="credit" label="贷方(本期)" width="110" /> 
 | 
            <el-table-column prop="balance" label="余额" width="100" /> 
 | 
          </el-table> 
 | 
        </el-card> 
 | 
      </el-col> 
 | 
    </el-row> 
 | 
  
 | 
    <el-row :gutter="16" class="mb-16"> 
 | 
      <el-col :span="12"> 
 | 
        <el-card shadow="hover"> 
 | 
          <div class="section-title">结账任务(月/季/年)</div> 
 | 
          <div class="toolbar"> 
 | 
            <el-space> 
 | 
              <el-button size="small" @click="runClose('月结')">执行月结</el-button> 
 | 
              <el-button size="small" @click="runClose('季报')">执行季报</el-button> 
 | 
              <el-button size="small" @click="runClose('年度结账')">执行年度结账</el-button> 
 | 
            </el-space> 
 | 
          </div> 
 | 
          <el-timeline style="margin-top: 6px;"> 
 | 
            <el-timeline-item 
 | 
              v-for="item in closingTasks" 
 | 
              :key="item.id" 
 | 
              :type="item.type" 
 | 
              :timestamp="item.time" 
 | 
              placement="top" 
 | 
            > 
 | 
              <div class="close-item"> 
 | 
                <div class="title">{{ item.name }}</div> 
 | 
                <el-tag :type="item.status === '完成' ? 'success' : 'info'" size="small">{{ item.status }}</el-tag> 
 | 
              </div> 
 | 
            </el-timeline-item> 
 | 
          </el-timeline> 
 | 
        </el-card> 
 | 
      </el-col> 
 | 
      <el-col :span="12"> 
 | 
        <el-card shadow="hover"> 
 | 
          <div class="section-title">审计留痕与审批权限</div> 
 | 
          <el-table :data="auditTrail" border size="small"> 
 | 
            <el-table-column prop="time" label="时间" width="160" /> 
 | 
            <el-table-column prop="action" label="动作" min-width="160" /> 
 | 
            <el-table-column prop="bizScene" label="关联业务" min-width="140" /> 
 | 
            <el-table-column prop="role" label="执行角色" width="120" /> 
 | 
            <el-table-column prop="result" label="结果" width="100"> 
 | 
              <template #default="scope"> 
 | 
                <el-tag :type="scope.row.result === '通过' ? 'success' : (scope.row.result === '驳回' ? 'danger' : 'info')"> 
 | 
                  {{ scope.row.result }} 
 | 
                </el-tag> 
 | 
              </template> 
 | 
            </el-table-column> 
 | 
          </el-table> 
 | 
        </el-card> 
 | 
      </el-col> 
 | 
    </el-row> 
 | 
  </div> 
 | 
   
 | 
</template> 
 | 
  
 | 
<script setup> 
 | 
import { ref } from 'vue' 
 | 
  
 | 
// 科目树(示例) 
 | 
const accountTree = ref([ 
 | 
  { code: '1001', label: '资产', children: [ 
 | 
    { code: '100101', label: '库存现金' }, 
 | 
    { code: '100102', label: '银行存款' }, 
 | 
    { code: '1122', label: '应收账款' }, 
 | 
    { code: '1601', label: '固定资产' }, 
 | 
  ]}, 
 | 
  { code: '2001', label: '负债', children: [ 
 | 
    { code: '2202', label: '应付账款' }, 
 | 
    { code: '2241', label: '其他应付款' }, 
 | 
  ]}, 
 | 
  { code: '3001', label: '所有者权益', children: [ 
 | 
    { code: '3103', label: '本年利润' }, 
 | 
  ]}, 
 | 
  { code: '4001', label: '成本费用', children: [ 
 | 
    { code: '5601', label: '制造费用' }, 
 | 
    { code: '6602', label: '管理费用' }, 
 | 
  ]}, 
 | 
]) 
 | 
  
 | 
// 凭证模板(示例) 
 | 
const voucherTemplates = ref([ 
 | 
  { name: '销售收入确认', bizScene: '销售出库', debit: '1122 应收账款', credit: '6001 主营业务收入', auxDims: ['客户','项目'] }, 
 | 
  { name: '采购应付确认', bizScene: '采购入库', debit: '1403 在途物资', credit: '2202 应付账款', auxDims: ['项目','部门'] }, 
 | 
  { name: '费用报销', bizScene: '费用单', debit: '6602 管理费用', credit: '1002 银行存款', auxDims: ['部门'] }, 
 | 
  { name: '固定资产折旧', bizScene: '月末折旧', debit: '6602 管理费用', credit: '1602 累计折旧', auxDims: ['部门'] }, 
 | 
]) 
 | 
  
 | 
// 自动生成的凭证(示例) 
 | 
const generatedVouchers = ref([ 
 | 
  { date: '2025-10-01', bizScene: '销售出库', summary: '确认应收与收入', amount: 128000, status: '已生成' }, 
 | 
  { date: '2025-10-03', bizScene: '采购入库', summary: '确认到货应付', amount: 56000, status: '已生成' }, 
 | 
  { date: '2025-10-05', bizScene: '费用单', summary: '办公费用报销', amount: 3200, status: '已生成' }, 
 | 
]) 
 | 
  
 | 
// 无模拟生成操作,仅展示静态示例数据 
 | 
  
 | 
// 辅助核算示例汇总(无个人姓名,仅维度类别) 
 | 
const auxSummary = ref([ 
 | 
  { dimension: '客户', category: '重点客户集合', debit: 320000, credit: 210000, balance: 110000 }, 
 | 
  { dimension: '项目', category: '项目A', debit: 150000, credit: 120000, balance: 30000 }, 
 | 
  { dimension: '部门', category: '运营中心', debit: 42000, credit: 18000, balance: 24000 }, 
 | 
  { dimension: '管理员', category: '系统角色', debit: 0, credit: 0, balance: 0 }, 
 | 
]) 
 | 
  
 | 
// 结账任务 
 | 
const closingTasks = ref([ 
 | 
  { id: 1, name: '2025年10月 月结', time: '2025-10-31 18:00', status: '完成', type: 'success' }, 
 | 
  { id: 2, name: '2025年Q4 季报', time: '2025-12-31 18:00', status: '计划', type: 'info' }, 
 | 
  { id: 3, name: '2025年度 年度结账', time: '2025-12-31 23:00', status: '计划', type: 'info' }, 
 | 
]) 
 | 
  
 | 
function runClose(kind) { 
 | 
  closingTasks.value.unshift({ 
 | 
    id: Date.now(), 
 | 
    name: `${new Date().getFullYear()}年${kind}`, 
 | 
    time: new Date().toISOString().replace('T',' ').slice(0,16), 
 | 
    status: '完成', 
 | 
    type: 'success', 
 | 
  }) 
 | 
} 
 | 
  
 | 
// 审计留痕(不含个人姓名,仅角色/机制) 
 | 
const auditTrail = ref([ 
 | 
  { time: '2025-10-01 09:12', action: '销售出库触发凭证生成', bizScene: '销售出库', role: '系统自动化', result: '通过' }, 
 | 
  { time: '2025-10-03 14:20', action: '采购入库触发应付确认', bizScene: '采购入库', role: '系统自动化', result: '通过' }, 
 | 
  { time: '2025-10-05 10:03', action: '费用单审批', bizScene: '费用单', role: '财务审批', result: '通过' }, 
 | 
  { time: '2025-10-08 16:45', action: '凭证过账', bizScene: '总账', role: '会计审核', result: '通过' }, 
 | 
  { time: '2025-10-31 18:05', action: '月结完成并锁账', bizScene: '总账', role: '系统自动化', result: '通过' }, 
 | 
]) 
 | 
</script> 
 | 
  
 | 
<style scoped lang="scss"> 
 | 
.app-container { 
 | 
  padding: 16px; 
 | 
} 
 | 
.page-header { 
 | 
  margin-bottom: 12px; 
 | 
  h2 { margin: 0 0 6px 0; font-weight: 600; } 
 | 
  p { margin: 0; color: #666; } 
 | 
} 
 | 
.section-title { 
 | 
  position: relative; 
 | 
  padding-left: 10px; 
 | 
  margin-bottom: 10px; 
 | 
  font-weight: 700; 
 | 
} 
 | 
.section-title::before { 
 | 
  content: ''; 
 | 
  position: absolute; 
 | 
  left: 0; top: 0.2em; 
 | 
  width: 4px; height: 1.2em; 
 | 
  background: #002FA7; 
 | 
  border-radius: 2px; 
 | 
} 
 | 
.mb-16 { margin-bottom: 16px; } 
 | 
.toolbar { display: flex; align-items: center; gap: 10px; margin-bottom: 8px; } 
 | 
.dims { display: flex; gap: 8px; margin-bottom: 10px; } 
 | 
.close-item { display: flex; align-items: center; gap: 8px; } 
 | 
</style> 
 |