Gogs преди 6 месеца
родител
ревизия
b465c940cb

+ 0 - 1
backend/ruoyi-modules/ruoyi-crm/src/main/java/org/dromara/crm/controller/CrmSupplierInfoController.java

@@ -56,7 +56,6 @@ public class CrmSupplierInfoController extends BaseController {
     /**
      * 获取详细信息
      */
-    @SaCheckPermission("crm:supplierInfo:query")
     @GetMapping("/{id}")
     public R<CrmSupplierInfoVo> getInfo(@NotNull(message = "主键不能为空") @PathVariable Long id) {
         return R.ok(supplierInfoService.queryById(id));

+ 12 - 5
web/src/views/crm/contract/index.vue

@@ -3072,6 +3072,7 @@ const replacePlaceholders = (htmlContent: string, contractData: ContractVO | und
     const typeDict = crm_contract_type.value?.find((item: any) => item.value === contractData.contractType);
     return typeDict?.label || '销售合同';
   };
+  const isFrameworkContract = getContractTypeName() === '框架合同';
 
   // 计算产品相关数据
   const productTotal = parseFloat(String(contractData.amount || 0));
@@ -3116,16 +3117,21 @@ const replacePlaceholders = (htmlContent: string, contractData: ContractVO | und
         const taxAmount = parseFloat(String(product.taxAmount || 0));
         const beforeTax = subtotal - taxAmount;
 
+        const pricingCells = isFrameworkContract
+          ? '<td colspan="4" style="padding: 4px 6px; border: 0.3px solid #000; text-align: center; font-size: 12px;">随行就市</td>'
+          : `
+      <td style="padding: 4px 6px; border: 0.3px solid #000; text-align: center; font-size: 12px;">${formatNumber(product.price)}</td>
+      <td style="padding: 4px 6px; border: 0.3px solid #000; text-align: right; font-size: 12px;">${formatNumber(beforeTax)}</td>
+      <td style="padding: 4px 6px; border: 0.3px solid #000; text-align: right; font-size: 12px;">${formatNumber(taxAmount)}</td>
+      <td style="padding: 4px 6px; border: 0.3px solid #000; text-align: right; font-weight: bold; font-size: 12px;">${formatNumber(subtotal)}</td>`;
+
         return `
     <tr>
       <td style="padding: 4px 6px; border: 0.3px solid #000; text-align: center; font-size: 12px;">${product.productName || ''}</td>
       <td style="padding: 4px 6px; border: 0.3px solid #000; text-align: center; font-size: 12px;">${product.model || product.productModel || ''}</td>
       <td style="padding: 4px 6px; border: 0.3px solid #000; text-align: center; font-size: 12px;">${getUnitLabel(product.unit)}</td>
       <td style="padding: 4px 6px; border: 0.3px solid #000; text-align: center; font-size: 12px;">${product.quantity || 0}</td>
-      <td style="padding: 4px 6px; border: 0.3px solid #000; text-align: center; font-size: 12px;">${formatNumber(product.price)}</td>
-      <td style="padding: 4px 6px; border: 0.3px solid #000; text-align: right; font-size: 12px;">${formatNumber(beforeTax)}</td>
-      <td style="padding: 4px 6px; border: 0.3px solid #000; text-align: right; font-size: 12px;">${formatNumber(taxAmount)}</td>
-      <td style="padding: 4px 6px; border: 0.3px solid #000; text-align: right; font-weight: bold; font-size: 12px;">${formatNumber(subtotal)}</td>
+      ${pricingCells}
       <td style="padding: 4px 6px; border: 0.3px solid #000; text-align: center; font-size: 12px;">${product.packageSpec || ''}</td>
       <td style="padding: 4px 6px; border: 0.3px solid #000; text-align: center; font-size: 12px;">${product.remark || ''}</td>
     </tr>`;
@@ -3193,10 +3199,11 @@ const replacePlaceholders = (htmlContent: string, contractData: ContractVO | und
   result = result.replace(/\{\{productTable\}\}/gi, productRows);
 
   // 替换产品合计行
+  const totalAmountText = isFrameworkContract ? '随行就市' : `${productTotalChinese}(¥${formatNumber(productTotal)})`;
   const productTotalRow = `
             <tr style="background-color: #fff; font-weight: bold;">
               <td colspan="4" style="padding: 5px 6px; border: 0.3px solid #000; text-align: center; font-size: 12px;">合计(人民币)</td>
-              <td colspan="6" style="padding: 5px 6px; border: 0.3px solid #000; text-align: center; font-size: 12px;">${productTotalChinese}(¥${formatNumber(productTotal)})</td>
+              <td colspan="6" style="padding: 5px 6px; border: 0.3px solid #000; text-align: center; font-size: 12px;">${totalAmountText}</td>
             </tr>
             <tr>
               <td colspan="10" style="padding: 5px 6px; border: 0.3px solid #000; text-align: center; font-size: 11px; background-color: #fff;">

+ 42 - 0
报销业务/00-原型导航.html

@@ -0,0 +1,42 @@
+<!doctype html>
+<html lang="zh-CN">
+<head>
+  <meta charset="UTF-8" />
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <title>报销系统角色导航</title>
+  <script src="https://cdn.tailwindcss.com"></script>
+</head>
+<body class="bg-slate-50 text-slate-800">
+  <div class="max-w-6xl mx-auto py-10 px-6">
+    <h1 class="text-3xl font-bold">报销系统原型首页(按角色)</h1>
+    <p class="mt-2 text-slate-600">请按角色进入对应原型,页面中仅展示该角色相关界面和可执行功能。</p>
+
+    <div class="grid md:grid-cols-3 gap-5 mt-8">
+      <a href="20-角色入口-员工.html" class="bg-white rounded-2xl p-6 shadow hover:shadow-md border border-slate-100">
+        <div class="text-sm text-slate-500">Role</div>
+        <h2 class="text-xl font-bold mt-1">员工入口</h2>
+        <p class="text-sm text-slate-600 mt-3">申请备用金、申请报销、查看本人进度与状态。</p>
+        <div class="mt-4 text-indigo-600 text-sm">进入员工原型 →</div>
+      </a>
+
+      <a href="21-角色入口-财务.html" class="bg-white rounded-2xl p-6 shadow hover:shadow-md border border-slate-100">
+        <div class="text-sm text-slate-500">Role</div>
+        <h2 class="text-xl font-bold mt-1">财务入口</h2>
+        <p class="text-sm text-slate-600 mt-3">处理审批、发放、报销支付与冲抵备用金。</p>
+        <div class="mt-4 text-indigo-600 text-sm">进入财务原型 →</div>
+      </a>
+
+      <a href="22-角色入口-总经理.html" class="bg-white rounded-2xl p-6 shadow hover:shadow-md border border-slate-100">
+        <div class="text-sm text-slate-500">Role</div>
+        <h2 class="text-xl font-bold mt-1">总经理入口</h2>
+        <p class="text-sm text-slate-600 mt-3">查看全量申请统计,并执行高层审批(命中节点时)。</p>
+        <div class="mt-4 text-indigo-600 text-sm">进入总经理原型 →</div>
+      </a>
+    </div>
+
+    <div class="mt-8 text-sm text-slate-500">
+      说明:如需查看全量页面,可直接访问原页面文件(01-14)。
+    </div>
+  </div>
+</body>
+</html>

+ 7 - 0
报销业务/01-登录页.html

@@ -0,0 +1,7 @@
+<!doctype html><html lang="zh-CN"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><title>登录页</title><script src="https://cdn.tailwindcss.com"></script></head>
+<body class="min-h-screen bg-gradient-to-br from-blue-100 to-indigo-200 flex items-center justify-center p-4">
+  <div class="w-full max-w-5xl grid md:grid-cols-2 bg-white rounded-2xl shadow-2xl overflow-hidden">
+    <div class="hidden md:flex flex-col justify-center p-10 bg-indigo-600 text-white"><h2 class="text-3xl font-bold">杭州第一技师学院</h2><p class="mt-3 text-indigo-100">智慧校园报销系统</p><ul class="mt-8 space-y-2 text-sm text-indigo-100"><li>• 备用金申请与审批</li><li>• 报销申请与冲抵处理</li><li>• 全流程工作流配置</li></ul></div>
+    <div class="p-8 md:p-10"><h1 class="text-2xl font-bold">账号登录</h1><p class="text-slate-500 mt-1">使用 CRM 统一账号登录</p><form class="mt-8 space-y-4"><input class="w-full border rounded-lg px-3 py-2" placeholder="用户名"/><input type="password" class="w-full border rounded-lg px-3 py-2" placeholder="密码"/><div class="flex items-center justify-between text-sm"><label class="flex items-center gap-2"><input type="checkbox"/>记住我</label><a class="text-indigo-600" href="#">忘记密码</a></div><button type="button" class="w-full bg-indigo-600 text-white rounded-lg py-2">登录</button></form></div>
+  </div>
+</body></html>

+ 16 - 0
报销业务/02-费用项目管理.html

@@ -0,0 +1,16 @@
+<!doctype html><html lang="zh-CN"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><script src="https://cdn.tailwindcss.com"></script><title>费用项目管理</title></head><body class='bg-slate-100 text-slate-800'><div class='max-w-7xl mx-auto p-6 space-y-4'><div class='flex items-center justify-between'><h1 class='text-2xl font-bold'>费用项目管理</h1><a href='00-原型导航.html' class='text-indigo-600'>返回导航</a></div>
+<div class='bg-white p-4 rounded-xl shadow grid md:grid-cols-4 gap-3'>
+  <input class='border rounded px-3 py-2' placeholder='项目名称关键字'>
+  <select class='border rounded px-3 py-2'><option>项目级别</option><option>一级</option><option>二级</option></select>
+  <select class='border rounded px-3 py-2'><option>状态</option><option>启用</option><option>停用</option></select>
+  <button class='bg-indigo-600 text-white rounded px-3 py-2'>搜索</button>
+</div>
+<div class='bg-white p-4 rounded-xl shadow'>
+  <div class='mb-3 flex gap-2'><button class='bg-indigo-600 text-white px-3 py-2 rounded'>新增一级项目</button><button class='bg-emerald-600 text-white px-3 py-2 rounded'>新增二级项目</button></div>
+  <table class='w-full text-sm'><thead><tr class='text-left border-b'><th class='py-2'>项目编码</th><th>项目名称</th><th>级别</th><th>上级项目</th><th>状态</th><th>排序</th><th>操作</th></tr></thead>
+  <tbody>
+    <tr class='border-b'><td class='py-2'>TRAVEL</td><td>差旅费</td><td>一级</td><td>-</td><td><span class='text-emerald-600'>启用</span></td><td>1</td><td class='text-indigo-600'>编辑 停用</td></tr>
+    <tr><td class='py-2 pl-6'>TRAVEL-TRAIN</td><td>火车票</td><td>二级</td><td>差旅费</td><td><span class='text-emerald-600'>启用</span></td><td>1</td><td class='text-indigo-600'>编辑 删除</td></tr>
+  </tbody></table>
+</div>
+</div></body></html>

+ 19 - 0
报销业务/03-工作流配置.html

@@ -0,0 +1,19 @@
+<!doctype html><html lang="zh-CN"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><script src="https://cdn.tailwindcss.com"></script><title>工作流配置(公共)</title></head><body class='bg-slate-100 text-slate-800'><div class='max-w-7xl mx-auto p-6 space-y-4'><div class='flex items-center justify-between'><h1 class='text-2xl font-bold'>工作流配置(公共)</h1><a href='00-原型导航.html' class='text-indigo-600'>返回导航</a></div>
+<div class='grid lg:grid-cols-3 gap-4'>
+  <div class='bg-white rounded-xl shadow p-4'><h2 class='font-semibold'>流程列表</h2><ul class='mt-3 space-y-2 text-sm'><li class='p-2 bg-indigo-50 rounded border border-indigo-200'>备用金审批流程 V3(启用)</li><li class='p-2 bg-slate-50 rounded'>报销审批流程 V2(启用)</li></ul><button class='mt-3 w-full bg-indigo-600 text-white rounded py-2'>新建流程</button></div>
+  <div class='lg:col-span-2 bg-white rounded-xl shadow p-4'>
+    <div class='grid md:grid-cols-3 gap-3'>
+      <select class='border rounded px-3 py-2'><option>业务类型:备用金</option><option>报销单</option></select>
+      <input class='border rounded px-3 py-2' value='备用金审批流程 V3'>
+      <select class='border rounded px-3 py-2'><option>状态:启用</option><option>停用</option></select>
+    </div>
+    <h3 class='mt-4 font-semibold'>节点配置(顺序审批)</h3>
+    <div class='mt-3 space-y-2'>
+      <div class='border rounded-lg p-3 flex items-center gap-3'><span class='font-semibold'>节点1</span><input class='border rounded px-2 py-1 flex-1' value='部门负责人审批'><input class='border rounded px-2 py-1 flex-1' value='张主任(可选人)'></div>
+      <div class='border rounded-lg p-3 flex items-center gap-3'><span class='font-semibold'>节点2</span><input class='border rounded px-2 py-1 flex-1' value='财务审批'><input class='border rounded px-2 py-1 flex-1' value='李会计(可选人)'></div>
+      <div class='border rounded-lg p-3 flex items-center gap-3'><span class='font-semibold'>节点3</span><input class='border rounded px-2 py-1 flex-1' value='总经理审批'><input class='border rounded px-2 py-1 flex-1' value='王总(可选人)'></div>
+    </div>
+    <div class='mt-4 flex gap-2'><button class='bg-slate-700 text-white px-3 py-2 rounded'>新增节点</button><button class='bg-indigo-600 text-white px-3 py-2 rounded'>保存并启用</button></div>
+  </div>
+</div>
+</div></body></html>

+ 4 - 0
报销业务/04-备用金申请列表.html

@@ -0,0 +1,4 @@
+<!doctype html><html lang="zh-CN"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><script src="https://cdn.tailwindcss.com"></script><title>备用金申请列表</title></head><body class='bg-slate-100 text-slate-800'><div class='max-w-7xl mx-auto p-6 space-y-4'><div class='flex items-center justify-between'><h1 class='text-2xl font-bold'>备用金申请列表</h1><a href='00-原型导航.html' class='text-indigo-600'>返回导航</a></div>
+<div class='bg-white rounded-xl shadow p-4 grid md:grid-cols-5 gap-3'><input class='border rounded px-3 py-2' placeholder='申请单号'><select class='border rounded px-3 py-2'><option>状态</option></select><input class='border rounded px-3 py-2' placeholder='申请人'><input class='border rounded px-3 py-2' placeholder='申请日期'><button class='bg-indigo-600 text-white rounded px-3 py-2'>查询</button></div>
+<div class='bg-white rounded-xl shadow p-4'><div class='mb-3'><a href='05-备用金申请表单.html' class='inline-block bg-indigo-600 text-white rounded px-3 py-2'>新建备用金申请</a></div><table class='w-full text-sm'><thead><tr class='border-b text-left'><th class='py-2'>单号</th><th>申请人</th><th>金额</th><th>状态</th><th>当前审批人</th><th>操作</th></tr></thead><tbody><tr class='border-b'><td class='py-2'>ADV20260421001</td><td>张三</td><td>5,000.00</td><td>审批中</td><td>李会计</td><td class='text-indigo-600'>详情 撤回</td></tr><tr><td class='py-2'>ADV20260420009</td><td>张三</td><td>1,200.00</td><td>已发放</td><td>-</td><td class='text-indigo-600'>详情</td></tr></tbody></table></div>
+</div></body></html>

+ 9 - 0
报销业务/05-备用金申请表单.html

@@ -0,0 +1,9 @@
+<!doctype html><html lang="zh-CN"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><script src="https://cdn.tailwindcss.com"></script><title>备用金申请表单</title></head><body class='bg-slate-100 text-slate-800'><div class='max-w-7xl mx-auto p-6 space-y-4'><div class='flex items-center justify-between'><h1 class='text-2xl font-bold'>备用金申请表单</h1><a href='00-原型导航.html' class='text-indigo-600'>返回导航</a></div>
+<div class='bg-white rounded-xl shadow p-6 space-y-4'>
+  <div class='grid md:grid-cols-2 gap-4'><input class='border rounded px-3 py-2' placeholder='申请原因'><input class='border rounded px-3 py-2' placeholder='申请目的'></div>
+  <div class='grid md:grid-cols-2 gap-4'><input class='border rounded px-3 py-2' placeholder='申请金额(元)'><input class='border rounded px-3 py-2' placeholder='期望使用日期'></div>
+  <textarea class='w-full border rounded px-3 py-2' rows='4' placeholder='补充说明'></textarea>
+  <div class='border-2 border-dashed rounded-lg p-6 text-center text-slate-500'>上传附件(图片/文件)</div>
+  <div class='flex gap-2'><button class='bg-slate-500 text-white rounded px-4 py-2'>保存草稿</button><button class='bg-indigo-600 text-white rounded px-4 py-2'>提交审批</button></div>
+</div>
+</div></body></html>

+ 6 - 0
报销业务/06-备用金审批.html

@@ -0,0 +1,6 @@
+<!doctype html><html lang="zh-CN"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><script src="https://cdn.tailwindcss.com"></script><title>备用金审批中心(我的待办)</title></head><body class='bg-slate-100 text-slate-800'><div class='max-w-7xl mx-auto p-6 space-y-4'><div class='flex items-center justify-between'><h1 class='text-2xl font-bold'>备用金审批中心(我的待办)</h1><a href='00-原型导航.html' class='text-indigo-600'>返回导航</a></div>
+<div class='grid lg:grid-cols-3 gap-4'>
+  <div class='lg:col-span-2 bg-white rounded-xl shadow p-4'><h2 class='font-semibold mb-3'>待我审批</h2><table class='w-full text-sm'><thead><tr class='border-b text-left'><th class='py-2'>单号</th><th>申请人</th><th>金额</th><th>当前节点</th><th>提交时间</th><th>操作</th></tr></thead><tbody><tr><td class='py-2'>ADV20260421001</td><td>张三</td><td>5000</td><td>财务审批</td><td>2026-04-21 10:20</td><td class='text-indigo-600'>处理</td></tr></tbody></table></div>
+  <div class='bg-white rounded-xl shadow p-4 space-y-3'><h2 class='font-semibold'>审批处理</h2><textarea class='w-full border rounded px-3 py-2' rows='5' placeholder='审批意见'></textarea><div class='flex gap-2'><button class='flex-1 bg-emerald-600 text-white rounded py-2'>同意</button><button class='flex-1 bg-rose-600 text-white rounded py-2'>驳回</button></div></div>
+</div>
+</div></body></html>

+ 4 - 0
报销业务/07-备用金发放管理.html

@@ -0,0 +1,4 @@
+<!doctype html><html lang="zh-CN"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><script src="https://cdn.tailwindcss.com"></script><title>备用金发放管理</title></head><body class='bg-slate-100 text-slate-800'><div class='max-w-7xl mx-auto p-6 space-y-4'><div class='flex items-center justify-between'><h1 class='text-2xl font-bold'>备用金发放管理</h1><a href='00-原型导航.html' class='text-indigo-600'>返回导航</a></div>
+<div class='bg-white rounded-xl shadow p-4'><h2 class='font-semibold mb-3'>审批通过待发放</h2><table class='w-full text-sm'><thead><tr class='border-b text-left'><th class='py-2'>单号</th><th>申请人</th><th>审批通过金额</th><th>审批完成时间</th><th>操作</th></tr></thead><tbody><tr><td class='py-2'>ADV20260419007</td><td>李四</td><td>8000.00</td><td>2026-04-20 17:00</td><td><button class='bg-indigo-600 text-white rounded px-3 py-1'>标记已发放</button></td></tr></tbody></table></div>
+<div class='bg-white rounded-xl shadow p-4'><h3 class='font-semibold mb-3'>发放登记</h3><div class='grid md:grid-cols-3 gap-3'><input class='border rounded px-3 py-2' placeholder='发放金额'><input class='border rounded px-3 py-2' placeholder='发放时间'><input class='border rounded px-3 py-2' placeholder='操作人'></div><div class='mt-3 border-2 border-dashed rounded-lg p-5 text-center text-slate-500'>上传发放截图</div><button class='mt-3 bg-emerald-600 text-white rounded px-4 py-2'>提交</button></div>
+</div></body></html>

+ 4 - 0
报销业务/08-报销申请列表.html

@@ -0,0 +1,4 @@
+<!doctype html><html lang="zh-CN"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><script src="https://cdn.tailwindcss.com"></script><title>报销申请列表</title></head><body class='bg-slate-100 text-slate-800'><div class='max-w-7xl mx-auto p-6 space-y-4'><div class='flex items-center justify-between'><h1 class='text-2xl font-bold'>报销申请列表</h1><a href='00-原型导航.html' class='text-indigo-600'>返回导航</a></div>
+<div class='bg-white rounded-xl shadow p-4 grid md:grid-cols-6 gap-3'><input class='border rounded px-3 py-2' placeholder='报销单号'><select class='border rounded px-3 py-2'><option>费用项目</option></select><select class='border rounded px-3 py-2'><option>状态</option></select><input class='border rounded px-3 py-2' placeholder='申请人'><input class='border rounded px-3 py-2' placeholder='申请日期'><button class='bg-indigo-600 text-white rounded px-3 py-2'>查询</button></div>
+<div class='bg-white rounded-xl shadow p-4'><div class='mb-3'><a href='09-报销申请表单.html' class='inline-block bg-indigo-600 text-white rounded px-3 py-2'>新建报销单</a></div><table class='w-full text-sm'><thead><tr class='border-b text-left'><th class='py-2'>单号</th><th>申请人</th><th>费用项目</th><th>报销金额</th><th>状态</th><th>当前审批人</th><th>操作</th></tr></thead><tbody><tr><td class='py-2'>REI20260421003</td><td>王五</td><td>差旅费/火车票</td><td>920.00</td><td>审批中</td><td>张主任</td><td class='text-indigo-600'>详情 撤回</td></tr></tbody></table></div>
+</div></body></html>

+ 9 - 0
报销业务/09-报销申请表单.html

@@ -0,0 +1,9 @@
+<!doctype html><html lang="zh-CN"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><script src="https://cdn.tailwindcss.com"></script><title>报销申请表单</title></head><body class='bg-slate-100 text-slate-800'><div class='max-w-7xl mx-auto p-6 space-y-4'><div class='flex items-center justify-between'><h1 class='text-2xl font-bold'>报销申请表单</h1><a href='00-原型导航.html' class='text-indigo-600'>返回导航</a></div>
+<div class='bg-white rounded-xl shadow p-6 space-y-4'>
+  <div class='grid md:grid-cols-3 gap-4'><select class='border rounded px-3 py-2'><option>一级费用项目</option></select><select class='border rounded px-3 py-2'><option>二级费用项目</option></select><input class='border rounded px-3 py-2' placeholder='报销金额'></div>
+  <input class='w-full border rounded px-3 py-2' placeholder='发票金额'>
+  <textarea class='w-full border rounded px-3 py-2' rows='4' placeholder='报销说明'></textarea>
+  <div class='grid md:grid-cols-2 gap-4'><div class='border-2 border-dashed rounded-lg p-6 text-center text-slate-500'>上传发票(图片/文件)</div><div class='border-2 border-dashed rounded-lg p-6 text-center text-slate-500'>上传附件(可选)</div></div>
+  <div class='flex gap-2'><button class='bg-slate-500 text-white rounded px-4 py-2'>保存草稿</button><button class='bg-indigo-600 text-white rounded px-4 py-2'>提交审批</button></div>
+</div>
+</div></body></html>

+ 6 - 0
报销业务/10-报销审批.html

@@ -0,0 +1,6 @@
+<!doctype html><html lang="zh-CN"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><script src="https://cdn.tailwindcss.com"></script><title>报销审批中心(我的待办)</title></head><body class='bg-slate-100 text-slate-800'><div class='max-w-7xl mx-auto p-6 space-y-4'><div class='flex items-center justify-between'><h1 class='text-2xl font-bold'>报销审批中心(我的待办)</h1><a href='00-原型导航.html' class='text-indigo-600'>返回导航</a></div>
+<div class='grid lg:grid-cols-3 gap-4'>
+  <div class='lg:col-span-2 bg-white rounded-xl shadow p-4'><h2 class='font-semibold mb-3'>待我审批报销单</h2><table class='w-full text-sm'><thead><tr class='border-b text-left'><th class='py-2'>单号</th><th>申请人</th><th>金额</th><th>费用项目</th><th>当前节点</th><th>操作</th></tr></thead><tbody><tr><td class='py-2'>REI20260421003</td><td>王五</td><td>920</td><td>差旅费/火车票</td><td>部门负责人审批</td><td class='text-indigo-600'>处理</td></tr></tbody></table></div>
+  <div class='bg-white rounded-xl shadow p-4 space-y-3'><h2 class='font-semibold'>审批处理</h2><textarea class='w-full border rounded px-3 py-2' rows='5' placeholder='审批意见'></textarea><div class='flex gap-2'><button class='flex-1 bg-emerald-600 text-white rounded py-2'>同意</button><button class='flex-1 bg-rose-600 text-white rounded py-2'>驳回</button></div></div>
+</div>
+</div></body></html>

+ 7 - 0
报销业务/11-报销支付处理.html

@@ -0,0 +1,7 @@
+<!doctype html><html lang="zh-CN"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><script src="https://cdn.tailwindcss.com"></script><title>报销支付处理(已通过)</title></head><body class='bg-slate-100 text-slate-800'><div class='max-w-7xl mx-auto p-6 space-y-4'><div class='flex items-center justify-between'><h1 class='text-2xl font-bold'>报销支付处理(已通过)</h1><a href='00-原型导航.html' class='text-indigo-600'>返回导航</a></div>
+<div class='bg-white rounded-xl shadow p-4'><h2 class='font-semibold mb-3'>审批通过待处理</h2><table class='w-full text-sm'><thead><tr class='border-b text-left'><th class='py-2'>单号</th><th>申请人</th><th>金额</th><th>通过时间</th><th>处理方式</th><th>操作</th></tr></thead><tbody><tr><td class='py-2'>REI20260419011</td><td>赵六</td><td>2600.00</td><td>2026-04-20 09:30</td><td><select class='border rounded px-2 py-1'><option>已发放</option><option>冲抵备用金</option></select></td><td><button class='bg-indigo-600 text-white rounded px-3 py-1'>去处理</button></td></tr></tbody></table></div>
+<div class='grid lg:grid-cols-2 gap-4'>
+  <div class='bg-white rounded-xl shadow p-4 space-y-3'><h3 class='font-semibold'>方式1:标记已发放</h3><input class='w-full border rounded px-3 py-2' placeholder='支付金额'><div class='border-2 border-dashed rounded-lg p-5 text-center text-slate-500'>上传支付截图</div><button class='bg-emerald-600 text-white rounded px-4 py-2'>确认已发放</button></div>
+  <div class='bg-white rounded-xl shadow p-4 space-y-3'><h3 class='font-semibold'>方式2:冲抵备用金</h3><select class='w-full border rounded px-3 py-2'><option>选择可冲抵的备用金单</option><option>ADV20260418005(剩余 3000)</option></select><input class='w-full border rounded px-3 py-2' placeholder='冲抵金额'><textarea class='w-full border rounded px-3 py-2' rows='3' placeholder='冲抵说明'></textarea><button class='bg-indigo-600 text-white rounded px-4 py-2'>确认冲抵</button></div>
+</div>
+</div></body></html>

+ 9 - 0
报销业务/12-我的申请单.html

@@ -0,0 +1,9 @@
+<!doctype html><html lang="zh-CN"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><script src="https://cdn.tailwindcss.com"></script><title>我的申请单(员工视角)</title></head><body class='bg-slate-100 text-slate-800'><div class='max-w-7xl mx-auto p-6 space-y-4'><div class='flex items-center justify-between'><h1 class='text-2xl font-bold'>我的申请单(员工视角)</h1><a href='00-原型导航.html' class='text-indigo-600'>返回导航</a></div>
+<div class='grid md:grid-cols-4 gap-4'>
+  <div class='bg-white rounded-xl shadow p-4'><p class='text-slate-500 text-sm'>本月申请总数</p><p class='text-2xl font-bold mt-2'>18</p></div>
+  <div class='bg-white rounded-xl shadow p-4'><p class='text-slate-500 text-sm'>审批中</p><p class='text-2xl font-bold mt-2 text-amber-600'>5</p></div>
+  <div class='bg-white rounded-xl shadow p-4'><p class='text-slate-500 text-sm'>已通过</p><p class='text-2xl font-bold mt-2 text-emerald-600'>10</p></div>
+  <div class='bg-white rounded-xl shadow p-4'><p class='text-slate-500 text-sm'>已驳回</p><p class='text-2xl font-bold mt-2 text-rose-600'>3</p></div>
+</div>
+<div class='bg-white rounded-xl shadow p-4'><table class='w-full text-sm'><thead><tr class='border-b text-left'><th class='py-2'>类型</th><th>单号</th><th>金额</th><th>状态</th><th>当前节点</th><th>审批进度</th></tr></thead><tbody><tr class='border-b'><td class='py-2'>备用金</td><td>ADV20260421001</td><td>5000</td><td>审批中</td><td>财务审批</td><td>2/3</td></tr><tr><td class='py-2'>报销</td><td>REI20260420008</td><td>320</td><td>已通过</td><td>-</td><td>3/3</td></tr></tbody></table></div>
+</div></body></html>

+ 3 - 0
报销业务/13-我的待审批.html

@@ -0,0 +1,3 @@
+<!doctype html><html lang="zh-CN"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><script src="https://cdn.tailwindcss.com"></script><title>我的待审批(审批人视角)</title></head><body class='bg-slate-100 text-slate-800'><div class='max-w-7xl mx-auto p-6 space-y-4'><div class='flex items-center justify-between'><h1 class='text-2xl font-bold'>我的待审批(审批人视角)</h1><a href='00-原型导航.html' class='text-indigo-600'>返回导航</a></div>
+<div class='bg-white rounded-xl shadow p-4'><div class='flex gap-2 mb-3'><button class='bg-indigo-600 text-white rounded px-3 py-2'>全部</button><button class='bg-white border rounded px-3 py-2'>备用金</button><button class='bg-white border rounded px-3 py-2'>报销</button></div><table class='w-full text-sm'><thead><tr class='border-b text-left'><th class='py-2'>业务类型</th><th>单号</th><th>申请人</th><th>金额</th><th>节点</th><th>到达时间</th><th>操作</th></tr></thead><tbody><tr class='border-b'><td class='py-2'>备用金</td><td>ADV20260421001</td><td>张三</td><td>5000</td><td>财务审批</td><td>10:20</td><td class='text-indigo-600'>审批</td></tr><tr><td class='py-2'>报销</td><td>REI20260421003</td><td>王五</td><td>920</td><td>部门负责人审批</td><td>11:15</td><td class='text-indigo-600'>审批</td></tr></tbody></table></div>
+</div></body></html>

+ 10 - 0
报销业务/14-全部申请总览.html

@@ -0,0 +1,10 @@
+<!doctype html><html lang="zh-CN"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><script src="https://cdn.tailwindcss.com"></script><title>全部申请总览(总经理视角)</title></head><body class='bg-slate-100 text-slate-800'><div class='max-w-7xl mx-auto p-6 space-y-4'><div class='flex items-center justify-between'><h1 class='text-2xl font-bold'>全部申请总览(总经理视角)</h1><a href='00-原型导航.html' class='text-indigo-600'>返回导航</a></div>
+<div class='grid md:grid-cols-5 gap-4'>
+  <div class='bg-white rounded-xl shadow p-4'><p class='text-sm text-slate-500'>申请总额</p><p class='text-xl font-bold mt-2'>286,400</p></div>
+  <div class='bg-white rounded-xl shadow p-4'><p class='text-sm text-slate-500'>备用金已发放</p><p class='text-xl font-bold mt-2'>92,000</p></div>
+  <div class='bg-white rounded-xl shadow p-4'><p class='text-sm text-slate-500'>备用金被冲抵</p><p class='text-xl font-bold mt-2'>24,500</p></div>
+  <div class='bg-white rounded-xl shadow p-4'><p class='text-sm text-slate-500'>备用金剩余</p><p class='text-xl font-bold mt-2 text-emerald-600'>67,500</p></div>
+  <div class='bg-white rounded-xl shadow p-4'><p class='text-sm text-slate-500'>报销已支付</p><p class='text-xl font-bold mt-2'>138,200</p></div>
+</div>
+<div class='bg-white rounded-xl shadow p-4'><table class='w-full text-sm'><thead><tr class='border-b text-left'><th class='py-2'>业务类型</th><th>单号</th><th>申请人</th><th>金额</th><th>状态</th><th>结算类型</th><th>关联备用金</th></tr></thead><tbody><tr class='border-b'><td class='py-2'>报销</td><td>REI20260418002</td><td>孙七</td><td>1800</td><td>冲抵完成</td><td>冲抵备用金</td><td>ADV20260415001</td></tr><tr><td class='py-2'>备用金</td><td>ADV20260419007</td><td>李四</td><td>8000</td><td>已发放</td><td>-</td><td>-</td></tr></tbody></table></div>
+</div></body></html>

+ 45 - 0
报销业务/20-角色入口-员工.html

@@ -0,0 +1,45 @@
+<!doctype html>
+<html lang="zh-CN">
+<head>
+  <meta charset="UTF-8" />
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <title>员工入口</title>
+  <script src="https://cdn.tailwindcss.com"></script>
+</head>
+<body class="bg-slate-100 text-slate-800">
+  <div class="max-w-6xl mx-auto p-6 space-y-5">
+    <div class="flex items-center justify-between">
+      <h1 class="text-2xl font-bold">员工角色原型导航</h1>
+      <a href="00-原型导航.html" class="text-indigo-600">返回角色首页</a>
+    </div>
+
+    <div class="bg-white rounded-xl shadow p-5">
+      <h2 class="text-lg font-semibold">角色功能范围</h2>
+      <div class="mt-3 flex flex-wrap gap-2 text-sm">
+        <span class="px-2 py-1 bg-indigo-50 text-indigo-700 rounded">新增</span>
+        <span class="px-2 py-1 bg-indigo-50 text-indigo-700 rounded">保存草稿</span>
+        <span class="px-2 py-1 bg-indigo-50 text-indigo-700 rounded">提交审批</span>
+        <span class="px-2 py-1 bg-indigo-50 text-indigo-700 rounded">上传附件/发票</span>
+        <span class="px-2 py-1 bg-indigo-50 text-indigo-700 rounded">撤回</span>
+        <span class="px-2 py-1 bg-indigo-50 text-indigo-700 rounded">查看进度</span>
+      </div>
+    </div>
+
+    <div class="bg-white rounded-xl shadow p-5">
+      <h2 class="text-lg font-semibold">推荐操作路径</h2>
+      <ol class="mt-3 space-y-2 text-sm text-slate-700 list-decimal list-inside">
+        <li>备用金:进入备用金申请列表 -> 新建申请 -> 填写并上传附件 -> 提交审批 -> 在我的申请单查看进度。</li>
+        <li>报销:进入报销申请列表 -> 新建报销单 -> 选择费用项目并上传发票 -> 提交审批 -> 在我的申请单跟踪状态。</li>
+      </ol>
+    </div>
+
+    <div class="grid md:grid-cols-2 gap-4">
+      <a href="04-备用金申请列表.html" class="bg-white rounded-xl shadow p-4 hover:shadow-md"><h3 class="font-semibold">备用金申请列表</h3><p class="text-sm text-slate-600 mt-1">查看本人备用金单,发起新增、详情、撤回。</p></a>
+      <a href="05-备用金申请表单.html" class="bg-white rounded-xl shadow p-4 hover:shadow-md"><h3 class="font-semibold">备用金申请表单</h3><p class="text-sm text-slate-600 mt-1">填写原因、目的、金额并上传附件后提交。</p></a>
+      <a href="08-报销申请列表.html" class="bg-white rounded-xl shadow p-4 hover:shadow-md"><h3 class="font-semibold">报销申请列表</h3><p class="text-sm text-slate-600 mt-1">查看本人报销单,发起新增、详情、撤回。</p></a>
+      <a href="09-报销申请表单.html" class="bg-white rounded-xl shadow p-4 hover:shadow-md"><h3 class="font-semibold">报销申请表单</h3><p class="text-sm text-slate-600 mt-1">选择费用项目,上传发票和附件,提交审批。</p></a>
+      <a href="12-我的申请单.html" class="bg-white rounded-xl shadow p-4 hover:shadow-md md:col-span-2"><h3 class="font-semibold">我的申请单</h3><p class="text-sm text-slate-600 mt-1">查看备用金/报销申请的状态、当前节点、审批进度。</p></a>
+    </div>
+  </div>
+</body>
+</html>

+ 48 - 0
报销业务/21-角色入口-财务.html

@@ -0,0 +1,48 @@
+<!doctype html>
+<html lang="zh-CN">
+<head>
+  <meta charset="UTF-8" />
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <title>财务入口</title>
+  <script src="https://cdn.tailwindcss.com"></script>
+</head>
+<body class="bg-slate-100 text-slate-800">
+  <div class="max-w-6xl mx-auto p-6 space-y-5">
+    <div class="flex items-center justify-between">
+      <h1 class="text-2xl font-bold">财务角色原型导航</h1>
+      <a href="00-原型导航.html" class="text-indigo-600">返回角色首页</a>
+    </div>
+
+    <div class="bg-white rounded-xl shadow p-5">
+      <h2 class="text-lg font-semibold">角色功能范围</h2>
+      <div class="mt-3 flex flex-wrap gap-2 text-sm">
+        <span class="px-2 py-1 bg-emerald-50 text-emerald-700 rounded">审批(同意/驳回)</span>
+        <span class="px-2 py-1 bg-emerald-50 text-emerald-700 rounded">查看待办</span>
+        <span class="px-2 py-1 bg-emerald-50 text-emerald-700 rounded">标记已发放</span>
+        <span class="px-2 py-1 bg-emerald-50 text-emerald-700 rounded">上传支付截图</span>
+        <span class="px-2 py-1 bg-emerald-50 text-emerald-700 rounded">冲抵备用金</span>
+        <span class="px-2 py-1 bg-emerald-50 text-emerald-700 rounded">配置管理(可选授权)</span>
+      </div>
+    </div>
+
+    <div class="bg-white rounded-xl shadow p-5">
+      <h2 class="text-lg font-semibold">推荐操作路径</h2>
+      <ol class="mt-3 space-y-2 text-sm text-slate-700 list-decimal list-inside">
+        <li>审批:进入我的待审批 -> 打开单据详情 -> 填写审批意见 -> 同意或驳回。</li>
+        <li>备用金发放:进入备用金发放管理 -> 选择已通过单据 -> 标记已发放 -> 上传发放截图。</li>
+        <li>报销结算:进入报销支付处理 -> 选择已发放或冲抵备用金 -> 关联备用金单(冲抵时)-> 确认处理。</li>
+      </ol>
+    </div>
+
+    <div class="grid md:grid-cols-2 gap-4">
+      <a href="13-我的待审批.html" class="bg-white rounded-xl shadow p-4 hover:shadow-md"><h3 class="font-semibold">我的待审批</h3><p class="text-sm text-slate-600 mt-1">集中处理本人节点的备用金/报销待办。</p></a>
+      <a href="06-备用金审批.html" class="bg-white rounded-xl shadow p-4 hover:shadow-md"><h3 class="font-semibold">备用金审批中心</h3><p class="text-sm text-slate-600 mt-1">查看并处理备用金申请审批。</p></a>
+      <a href="10-报销审批.html" class="bg-white rounded-xl shadow p-4 hover:shadow-md"><h3 class="font-semibold">报销审批中心</h3><p class="text-sm text-slate-600 mt-1">查看并处理报销申请审批。</p></a>
+      <a href="07-备用金发放管理.html" class="bg-white rounded-xl shadow p-4 hover:shadow-md"><h3 class="font-semibold">备用金发放管理</h3><p class="text-sm text-slate-600 mt-1">审批通过后执行发放并上传截图凭证。</p></a>
+      <a href="11-报销支付处理.html" class="bg-white rounded-xl shadow p-4 hover:shadow-md"><h3 class="font-semibold">报销支付处理</h3><p class="text-sm text-slate-600 mt-1">已发放或冲抵备用金,建立关联关系。</p></a>
+      <a href="02-费用项目管理.html" class="bg-white rounded-xl shadow p-4 hover:shadow-md"><h3 class="font-semibold">费用项目管理(可选)</h3><p class="text-sm text-slate-600 mt-1">新增、修改、启停用、删除(二级)费用项目。</p></a>
+      <a href="03-工作流配置.html" class="bg-white rounded-xl shadow p-4 hover:shadow-md md:col-span-2"><h3 class="font-semibold">工作流配置(可选)</h3><p class="text-sm text-slate-600 mt-1">维护备用金/报销顺序审批流程与节点选人。</p></a>
+    </div>
+  </div>
+</body>
+</html>

+ 40 - 0
报销业务/22-角色入口-总经理.html

@@ -0,0 +1,40 @@
+<!doctype html>
+<html lang="zh-CN">
+<head>
+  <meta charset="UTF-8" />
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <title>总经理入口</title>
+  <script src="https://cdn.tailwindcss.com"></script>
+</head>
+<body class="bg-slate-100 text-slate-800">
+  <div class="max-w-6xl mx-auto p-6 space-y-5">
+    <div class="flex items-center justify-between">
+      <h1 class="text-2xl font-bold">总经理角色原型导航</h1>
+      <a href="00-原型导航.html" class="text-indigo-600">返回角色首页</a>
+    </div>
+
+    <div class="bg-white rounded-xl shadow p-5">
+      <h2 class="text-lg font-semibold">角色功能范围</h2>
+      <div class="mt-3 flex flex-wrap gap-2 text-sm">
+        <span class="px-2 py-1 bg-amber-50 text-amber-700 rounded">查看全部申请</span>
+        <span class="px-2 py-1 bg-amber-50 text-amber-700 rounded">查看统计指标</span>
+        <span class="px-2 py-1 bg-amber-50 text-amber-700 rounded">审批(命中节点时)</span>
+      </div>
+    </div>
+
+    <div class="bg-white rounded-xl shadow p-5">
+      <h2 class="text-lg font-semibold">推荐操作路径</h2>
+      <ol class="mt-3 space-y-2 text-sm text-slate-700 list-decimal list-inside">
+        <li>经营查看:进入全部申请总览 -> 查看申请总额、发放总额、冲抵与剩余情况 -> 下钻到重点单据。</li>
+        <li>高层审批:当流程命中总经理节点时 -> 进入对应审批中心 -> 查看审批历史与附件 -> 同意或驳回。</li>
+      </ol>
+    </div>
+
+    <div class="grid md:grid-cols-2 gap-4">
+      <a href="14-全部申请总览.html" class="bg-white rounded-xl shadow p-4 hover:shadow-md md:col-span-2"><h3 class="font-semibold">全部申请总览</h3><p class="text-sm text-slate-600 mt-1">查看全量申请、状态、结算类型、冲抵关联及关键统计。</p></a>
+      <a href="06-备用金审批.html" class="bg-white rounded-xl shadow p-4 hover:shadow-md"><h3 class="font-semibold">备用金审批中心(可选)</h3><p class="text-sm text-slate-600 mt-1">当流程节点配置为总经理审批时使用。</p></a>
+      <a href="10-报销审批.html" class="bg-white rounded-xl shadow p-4 hover:shadow-md"><h3 class="font-semibold">报销审批中心(可选)</h3><p class="text-sm text-slate-600 mt-1">当流程节点配置为总经理审批时使用。</p></a>
+    </div>
+  </div>
+</body>
+</html>

+ 310 - 0
报销业务/报销数据模型设计.md

@@ -0,0 +1,310 @@
+# 报销系统数据模型设计(V1)
+
+## 1. 设计范围
+
+- 严格对应已确认需求:
+  - 费用项目管理(一级/二级)
+  - 公共工作流配置(备用金、报销)
+  - 备用金申请/审批/发放
+  - 报销申请/审批/发放或冲抵备用金
+  - 申请人/审批人/总经理查询视图
+- 表名前缀统一为 `bx_`
+- 字段规范尽量沿用现有 CRM(创建人、创建时间、更新人、更新时间、删除标记、租户等)
+
+---
+
+## 2. 核心表清单
+
+1. `bx_expense_category`:费用项目(支持一级/二级)
+2. `bx_workflow_def`:工作流定义(业务维度)
+3. `bx_workflow_node`:工作流节点(顺序审批)
+4. `bx_advance_request`:备用金申请单
+5. `bx_reimburse_request`:报销申请单
+6. `bx_approval_record`:审批记录(两类单据共用)
+7. `bx_payment_record`:发放/支付记录(两类单据共用)
+8. `bx_offset_record`:报销冲抵备用金关联记录
+9. `bx_file_ref`:附件关联表(两类单据及支付截图)
+
+---
+
+## 3. 表结构设计
+
+## 3.1 费用项目:`bx_expense_category`
+
+用途:维护一级/二级费用项目树。
+
+关键字段:
+- `id` bigint PK
+- `tenant_id` varchar(20)
+- `parent_id` bigint(0 表示一级)
+- `category_code` varchar(64)
+- `category_name` varchar(128)
+- `level_no` tinyint(1/2)
+- `status` char(1)(0启用 1停用)
+- `sort_no` int
+- `remark` varchar(500)
+- `del_flag` char(1)
+- `create_by` bigint
+- `create_time` datetime(3)
+- `update_by` bigint
+- `update_time` datetime(3)
+
+索引建议:
+- `idx_bx_exp_cat_parent(parent_id)`
+- `uk_bx_exp_cat_code_tenant(tenant_id, category_code)`
+
+---
+
+## 3.2 工作流定义:`bx_workflow_def`
+
+用途:配置“备用金/报销”两类业务的审批流程主信息。
+
+关键字段:
+- `id` bigint PK
+- `tenant_id` varchar(20)
+- `biz_type` varchar(32)(`advance` / `reimburse`)
+- `flow_name` varchar(128)
+- `status` char(1)(0启用 1停用)
+- `version_no` int
+- `remark` varchar(500)
+- `del_flag` char(1)
+- `create_by` bigint
+- `create_time` datetime(3)
+- `update_by` bigint
+- `update_time` datetime(3)
+
+约束建议:
+- 同一租户同一业务仅允许一个启用版本(逻辑控制)
+
+---
+
+## 3.3 工作流节点:`bx_workflow_node`
+
+用途:顺序审批节点定义,支持节点选人。
+
+关键字段:
+- `id` bigint PK
+- `tenant_id` varchar(20)
+- `flow_def_id` bigint FK -> `bx_workflow_def.id`
+- `node_no` int(顺序号)
+- `node_name` varchar(128)
+- `approver_user_id` bigint(固定审批人)
+- `required_flag` char(1)(默认1)
+- `remark` varchar(500)
+- `del_flag` char(1)
+- `create_by` bigint
+- `create_time` datetime(3)
+- `update_by` bigint
+- `update_time` datetime(3)
+
+索引建议:
+- `idx_bx_flow_node_def(flow_def_id, node_no)`
+
+---
+
+## 3.4 备用金申请单:`bx_advance_request`
+
+用途:员工发起备用金申请,审批通过后进入发放。
+
+关键字段:
+- `id` bigint PK
+- `tenant_id` varchar(20)
+- `request_no` varchar(64)
+- `applicant_user_id` bigint
+- `dept_id` bigint
+- `amount` decimal(16,2)
+- `reason` varchar(500)
+- `purpose` varchar(500)
+- `status` varchar(32)
+  - `draft` / `submitted` / `approving` / `approved` / `rejected` / `paid`
+- `current_node_no` int
+- `current_approver_user_id` bigint
+- `paid_flag` char(1)(0未发放 1已发放)
+- `paid_time` datetime(3)
+- `remark` varchar(500)
+- `del_flag` char(1)
+- `create_by` bigint
+- `create_time` datetime(3)
+- `update_by` bigint
+- `update_time` datetime(3)
+
+索引建议:
+- `uk_bx_adv_req_no(request_no)`
+- `idx_bx_adv_req_applicant(applicant_user_id, create_time)`
+- `idx_bx_adv_req_status(status, current_approver_user_id)`
+
+---
+
+## 3.5 报销申请单:`bx_reimburse_request`
+
+用途:员工提交报销单,审批通过后可“已发放”或“冲抵备用金”。
+
+关键字段:
+- `id` bigint PK
+- `tenant_id` varchar(20)
+- `request_no` varchar(64)
+- `applicant_user_id` bigint
+- `dept_id` bigint
+- `expense_category_id` bigint FK -> `bx_expense_category.id`(二级项目)
+- `amount` decimal(16,2)
+- `invoice_amount` decimal(16,2)
+- `description` varchar(500)
+- `status` varchar(32)
+  - `draft` / `submitted` / `approving` / `approved` / `rejected` / `paid` / `offset_done`
+- `current_node_no` int
+- `current_approver_user_id` bigint
+- `settle_type` varchar(32)(`pay` / `offset`)
+- `settled_flag` char(1)(0未处理 1已处理)
+- `settled_time` datetime(3)
+- `remark` varchar(500)
+- `del_flag` char(1)
+- `create_by` bigint
+- `create_time` datetime(3)
+- `update_by` bigint
+- `update_time` datetime(3)
+
+索引建议:
+- `uk_bx_reim_req_no(request_no)`
+- `idx_bx_reim_req_applicant(applicant_user_id, create_time)`
+- `idx_bx_reim_req_status(status, current_approver_user_id)`
+
+---
+
+## 3.6 审批记录:`bx_approval_record`
+
+用途:记录每个单据在每个节点的审批动作。
+
+关键字段:
+- `id` bigint PK
+- `tenant_id` varchar(20)
+- `biz_type` varchar(32)(`advance` / `reimburse`)
+- `biz_id` bigint(对应申请单ID)
+- `flow_def_id` bigint
+- `node_no` int
+- `node_name` varchar(128)
+- `approver_user_id` bigint
+- `action` varchar(32)(`submit` / `approve` / `reject`)
+- `action_time` datetime(3)
+- `opinion` varchar(500)
+- `create_by` bigint
+- `create_time` datetime(3)
+
+索引建议:
+- `idx_bx_appr_biz(biz_type, biz_id, node_no)`
+- `idx_bx_appr_todo(approver_user_id, action_time)`
+
+---
+
+## 3.7 发放记录:`bx_payment_record`
+
+用途:记录备用金发放与报销支付动作及截图。
+
+关键字段:
+- `id` bigint PK
+- `tenant_id` varchar(20)
+- `biz_type` varchar(32)(`advance` / `reimburse`)
+- `biz_id` bigint
+- `pay_amount` decimal(16,2)
+- `operator_user_id` bigint
+- `pay_time` datetime(3)
+- `voucher_file_id` bigint(发放/支付截图文件ID)
+- `remark` varchar(500)
+- `create_by` bigint
+- `create_time` datetime(3)
+
+索引建议:
+- `idx_bx_pay_biz(biz_type, biz_id)`
+
+---
+
+## 3.8 冲抵记录:`bx_offset_record`
+
+用途:记录“报销单冲抵备用金”的关联与金额。
+
+关键字段:
+- `id` bigint PK
+- `tenant_id` varchar(20)
+- `reimburse_id` bigint FK -> `bx_reimburse_request.id`
+- `advance_id` bigint FK -> `bx_advance_request.id`
+- `offset_amount` decimal(16,2)
+- `operator_user_id` bigint
+- `offset_time` datetime(3)
+- `remark` varchar(500)
+- `create_by` bigint
+- `create_time` datetime(3)
+
+索引建议:
+- `idx_bx_offset_reim(reimburse_id)`
+- `idx_bx_offset_adv(advance_id)`
+
+---
+
+## 3.9 附件关联:`bx_file_ref`
+
+用途:统一管理申请单附件、发票、发放截图等关联关系。
+
+关键字段:
+- `id` bigint PK
+- `tenant_id` varchar(20)
+- `biz_type` varchar(32)(`advance` / `reimburse` / `payment`)
+- `biz_id` bigint
+- `file_id` bigint(关联现有文件存储表主键)
+- `file_role` varchar(32)(`attachment` / `invoice` / `payment_voucher`)
+- `create_by` bigint
+- `create_time` datetime(3)
+
+索引建议:
+- `idx_bx_file_ref_biz(biz_type, biz_id)`
+
+---
+
+## 4. 状态流转(最小闭环)
+
+## 4.1 备用金
+
+- 草稿 `draft`
+- 提交 `submitted`
+- 审批中 `approving`
+- 审批通过 `approved` / 驳回 `rejected`
+- 发放后 `paid`
+
+## 4.2 报销
+
+- 草稿 `draft`
+- 提交 `submitted`
+- 审批中 `approving`
+- 审批通过 `approved` / 驳回 `rejected`
+- 结算为支付 `paid` 或 冲抵完成 `offset_done`
+
+---
+
+## 5. 关键关系说明
+
+- `bx_workflow_def(1) -> bx_workflow_node(N)`
+- `bx_advance_request(1) -> bx_approval_record(N)`(`biz_type=advance`)
+- `bx_reimburse_request(1) -> bx_approval_record(N)`(`biz_type=reimburse`)
+- `bx_advance_request(1) -> bx_payment_record(N)`(`biz_type=advance`)
+- `bx_reimburse_request(1) -> bx_payment_record(N)`(`biz_type=reimburse`)
+- `bx_reimburse_request(1) -> bx_offset_record(N)`
+- `bx_advance_request(1) -> bx_offset_record(N)`
+- 两类申请单均可通过 `bx_file_ref` 关联多附件
+
+---
+
+## 6. 统计口径(按现需求)
+
+- 备用金统计:
+  - 申请总额、审批通过总额、已发放总额
+  - 被冲抵总额(来自 `bx_offset_record`)
+  - 剩余金额 = 已发放总额 - 被冲抵总额
+- 报销统计:
+  - 申请总额、审批通过总额
+  - 已支付总额、冲抵总额
+
+---
+
+## 7. 本稿边界
+
+- 不包含会签、条件分支、抄送等复杂流程模型。
+- 不包含移动端、消息中心、预算控制等扩展能力。
+- 仅服务当前确认需求与首期研发落地。

+ 22 - 0
报销业务/报销需求.md

@@ -0,0 +1,22 @@
+# 客户背景
+
+- 以前已经开发了crm系统,代码在`backend`和`web` 中,这个crm系统中已经有目前公司的人员信息
+- 客户希望基于CRM系统这套数据结构,继续开发一套报销系统
+
+# 报销系统需求
+
+- **特别注意:不要蔓延需求,就按照客户的需求来**
+- 支持费用项目管理,费用项目分一级项目,二级项目
+- 附件的上传功能可以参考CRM系统中的逻辑实现
+- 有个工作流的配置界面,支持备用金和审批两个业务的工作流配置,这个工作流配置希望做成类似钉钉工作那种配置就好。功能不用复杂,支持顺序工作流审批就可以了,工作流节点支持选人
+- 有个备用金申请、审批模块。 支持大家申请备用金,填写备用金申请的原因,目的,支持上传附件(附件包括图片或者文件等等),填写提交后,进入审批流程,流程成功后。 有个专门的页面,统计这些审批通过的备用金,相应的人员可以操作点击已发放,上传发放的截图。
+- 有个报销模块,支持公司员工填写报销单,提交报销单,报销单支持上传发票,上传附件。 报销单也经过审批流程后,审核成功了。有个专门的界面,展示这些报销单审批成功的数据,由相应的人员操作点击已发放,或者冲抵备用金。如果是冲抵备用金,就要将备用金跟这个报销单关联。这就方便统计备用金使用情况,剩余多少
+- 有个公共的工作流配置界面。
+- 针对备用金、针对报销单,都有相应的申请界面,审批界面。申请界面各个员工看各自的申请单及审批情况。审批界面中各个节点的审批人查看待自己审批的单子。 还有一个界面单独展示所有的申请单的地方,方便总经理查看的
+- 我们先开发web端,咱不开发移动端。
+- 这次报销系统的表模型建议表名 用bx\_开头,好与其他业务系统的表模型区分。同时表模型字段这块还是遵循跟CRM系统一样的规范
+
+# 框架
+
+- `bx-backend` 报销系统的后端框架
+- `bx-web` 报销系统的web前端

+ 90 - 0
报销业务/报销需求单.md

@@ -0,0 +1,90 @@
+# 报销系统需求单(V1)
+
+## 1. 项目目标
+
+- 基于现有 CRM 的组织与人员数据,建设一套独立的报销系统。
+- 本期仅开发 Web 端,不开发移动端。
+- 严格按现有需求实现,不扩展额外功能。
+
+## 2. 建设范围
+
+- 后端工程:`bx-backend`
+- 前端工程:`bx-web`
+- 数据库表:统一使用 `bx_` 前缀,字段规范沿用 CRM 现有规范。
+- 前端 UI 风格:整体界面与 `web`(CRM)保持一致,包含登录页视觉风格。
+
+## 3. 业务模块
+
+### 3.1 费用项目管理
+
+- 支持费用项目的两级结构:
+  - 一级项目
+  - 二级项目(归属一级项目)
+
+### 3.2 工作流配置(公共)
+
+- 提供一个公共工作流配置界面。
+- 配置对象:`备用金`、`报销单` 两类业务。
+- 工作流能力要求:
+  - 顺序审批(串行)
+  - 节点支持选人
+- 交互形态参考钉钉工作流配置,但保持功能简化。
+
+### 3.3 备用金申请与审批
+
+- 员工可发起备用金申请,填写:
+  - 申请原因
+  - 申请目的
+  - 附件(图片/文件)
+- 提交后进入审批流程。
+- 审批通过后,进入“发放管理”页面,由指定人员:
+  - 标记“已发放”
+  - 上传发放截图
+
+### 3.4 报销申请与审批
+
+- 员工可发起报销单,填写并上传:
+  - 发票
+  - 附件
+- 提交后进入审批流程。
+- 审批通过后,进入“支付处理”页面,由指定人员操作:
+  - 标记“已发放”,或
+  - “冲抵备用金”
+- 若选择“冲抵备用金”,需将报销单与备用金单关联,用于统计:
+  - 备用金已使用金额
+  - 备用金剩余金额
+
+### 3.5 申请与审批视图
+
+- 申请端(员工):
+  - 查看本人申请单
+  - 查看各自审批进度/状态
+- 审批端(节点审批人):
+  - 查看待本人审批单据
+- 全量查看端(总经理):
+  - 单独页面查看所有申请单
+
+## 4. 附件能力要求
+
+- 附件上传逻辑复用/参考 CRM 现有实现能力。
+- 支持图片及常见文件类型上传。
+
+## 5. 角色与操作边界(按需求最小化)
+
+- 员工:发起申请、查看本人单据状态。
+- 审批人:处理分配到自己节点的待审批单据。
+- 发放/支付处理人员:处理审批通过后的发放与冲抵动作。
+- 总经理:查看所有申请单。
+
+## 6. 非目标(本期不做)
+
+- 不开发移动端。
+- 不做超出“顺序审批 + 节点选人”的复杂流程能力(如会签、条件分支等)。
+- 不新增与报销主流程无关的扩展业务。
+
+## 7. 验收要点
+
+- 两类业务(备用金、报销)均可完成“申请 -> 审批 -> 发放/处理”的闭环。
+- 工作流可分别配置并生效到两类业务。
+- 报销冲抵备用金时,能建立关联并可统计使用与剩余情况。
+- 申请人、审批人、总经理三类视图可按职责正确查看数据。