按「账单抬头.xlsx」各子表(微信/拼多多/京东网银钱包/京东流水/抖音/得物)设计对应 tab 页: - 新增通用表 ec_account_bills(bill_type + 通用列 + payload JSON) - AccountBill 模型 + AccountBillColumns 配置类(6类型列定义,单一数据源,sheet名↔tab↔列不乱) - AccountBills 控制器(admin 路由组,按 bill_type 筛选/排序/分页+汇总+下发列配置) - admin 路由登记 account-bills - 通用前端组件 AccountBills.vue(按后端下发 columns 动态渲染表头/单元格,含筛选/汇总/分页) - pages.js:store-receiving-bills 页按 tab 路由(taobao-alipay→独立组件;其余6个→AccountBills) - 修正 pages.js/Blade 的 section/page/tab 解析(按真实URL billing-transactions/store-receiving-bills/<tab>) - 种子:6类型各6行演示数据 淘系支付宝账户保持独立实现不变。
237 lines
11 KiB
PHP
237 lines
11 KiB
PHP
<?php
|
||
|
||
namespace Modules\EcommerceFinance;
|
||
|
||
/**
|
||
* 店铺收款账户账单 - 各账户类型的列配置(单一数据源)。
|
||
*
|
||
* 列定义来自「账单抬头.xlsx」的各子表(sheet 名 = 账户类型)。
|
||
* sheet 名 ↔ tab slug ↔ 列 三者在此一一对应,避免错乱。
|
||
*
|
||
* 每列: [label, field, kind]
|
||
* field: 真实列名(如 record_code / income / occurred_at / updated_at),
|
||
* 或 'payload.xxx' 表示存在 payload JSON 中。
|
||
* kind: text | num | money | money_in | money_out | balance | date | tag
|
||
*
|
||
* 淘系支付宝账户(taobao-alipay)已有独立实现,不在此处定义。
|
||
*/
|
||
class AccountBillColumns
|
||
{
|
||
/**
|
||
* @return array<string,array{title:string,columns:array<int,array{0:string,1:string,2:string}>}>
|
||
*/
|
||
public static function map(): array
|
||
{
|
||
return [
|
||
'taobao-wechat' => [
|
||
'title' => '淘系微信账户',
|
||
'columns' => [
|
||
['记录编码', 'record_code', 'num'],
|
||
['店铺', 'store_name', 'text'],
|
||
['财务备注', 'finance_remark', 'text'],
|
||
['订单号', 'order_no', 'num'],
|
||
['金额', 'amount', 'money'],
|
||
['自定义备注', 'custom_remark', 'text'],
|
||
['账单项目', 'bill_item', 'tag'],
|
||
['线上单号', 'payload.online_order_no', 'num'],
|
||
['淘宝订单编号', 'payload.taobao_order_no', 'num'],
|
||
['支付流水号', 'payload.pay_serial_no', 'num'],
|
||
['入账时间', 'occurred_at', 'date'],
|
||
['入账类型', 'payload.entry_type', 'text'],
|
||
['收入金额', 'income', 'money_in'],
|
||
['支出金额', 'expense', 'money_out'],
|
||
['业务描述', 'payload.business_desc', 'text'],
|
||
['备注', 'remark', 'text'],
|
||
['JST拉取时间', 'payload.jst_pulled_at', 'date'],
|
||
['修改人', 'modifier', 'text'],
|
||
],
|
||
],
|
||
|
||
'pinduoduo' => [
|
||
'title' => '拼多多账户',
|
||
'columns' => [
|
||
['记录编码', 'record_code', 'num'],
|
||
['店铺', 'store_name', 'text'],
|
||
['财务备注', 'finance_remark', 'text'],
|
||
['订单', 'order_no', 'num'],
|
||
['金额', 'amount', 'money'],
|
||
['自定义备注', 'custom_remark', 'text'],
|
||
['账单项目', 'bill_item', 'tag'],
|
||
['商户订单号', 'payload.merchant_order_no', 'num'],
|
||
['线上单号', 'payload.online_order_no', 'num'],
|
||
['财务类型', 'payload.finance_type', 'text'],
|
||
['类型', 'payload.type', 'text'],
|
||
['发生时间', 'occurred_at', 'date'],
|
||
['收入金额', 'income', 'money_in'],
|
||
['支出金额', 'expense', 'money_out'],
|
||
['备注', 'remark', 'text'],
|
||
['修改时间', 'updated_at', 'date'],
|
||
['修改人', 'modifier', 'text'],
|
||
],
|
||
],
|
||
|
||
'jd-wallet' => [
|
||
'title' => '京东网银钱包账户',
|
||
'columns' => [
|
||
['记录编码', 'record_code', 'num'],
|
||
['店铺', 'store_name', 'text'],
|
||
['财务备注', 'finance_remark', 'text'],
|
||
['订单', 'order_no', 'num'],
|
||
['金额', 'amount', 'money'],
|
||
['自定义备注', 'custom_remark', 'text'],
|
||
['账单项目', 'bill_item', 'tag'],
|
||
['线上单号', 'payload.online_order_no', 'num'],
|
||
['单据编号', 'payload.doc_no', 'num'],
|
||
['订单编号', 'payload.order_no_2', 'num'],
|
||
['商户订单号', 'payload.merchant_order_no', 'num'],
|
||
['单据类型', 'payload.doc_type', 'text'],
|
||
['商品编码', 'payload.goods_code', 'num'],
|
||
['商品名称', 'payload.goods_name', 'text'],
|
||
['费用结算时间', 'occurred_at', 'date'],
|
||
['费用发生时间', 'payload.fee_occurred_at', 'date'],
|
||
['费用项', 'payload.fee_item', 'text'],
|
||
['收入金额', 'income', 'money_in'],
|
||
['支出金额', 'expense', 'money_out'],
|
||
['币种', 'payload.currency', 'text'],
|
||
['钱包结算备注', 'payload.wallet_remark', 'text'],
|
||
['备注', 'remark', 'text'],
|
||
['店铺号', 'payload.store_no', 'num'],
|
||
['京东门店编码', 'payload.jd_store_code', 'num'],
|
||
['品牌门店编号', 'payload.brand_store_no', 'num'],
|
||
['门店名称', 'payload.store_name_2', 'text'],
|
||
['账户代码', 'payload.account_code', 'num'],
|
||
['修改时间', 'updated_at', 'date'],
|
||
['修改人', 'modifier', 'text'],
|
||
],
|
||
],
|
||
|
||
'jd-transactions' => [
|
||
'title' => '京东流水',
|
||
'columns' => [
|
||
['记录编码', 'record_code', 'num'],
|
||
['店铺', 'store_name', 'text'],
|
||
['财务备注', 'finance_remark', 'text'],
|
||
['订单', 'order_no', 'num'],
|
||
['金额', 'amount', 'money'],
|
||
['自定义备注', 'custom_remark', 'text'],
|
||
['账单项目', 'bill_item', 'tag'],
|
||
['线上单号', 'payload.online_order_no', 'num'],
|
||
['流水号', 'payload.serial_no', 'num'],
|
||
['交易订单号', 'payload.tx_order_no', 'num'],
|
||
['账户名称', 'payload.account_name', 'text'],
|
||
['费用结算时间', 'occurred_at', 'date'],
|
||
['账单日期', 'payload.bill_date', 'date'],
|
||
['商户订单号', 'payload.merchant_order_no', 'num'],
|
||
['交易备注', 'payload.tx_remark', 'text'],
|
||
['交易类型', 'payload.tx_type', 'text'],
|
||
['收入金额', 'income', 'money_in'],
|
||
['支出金额', 'expense', 'money_out'],
|
||
['账户余额', 'balance', 'balance'],
|
||
['币种', 'payload.currency', 'text'],
|
||
['记账请求号', 'payload.book_request_no', 'num'],
|
||
['业务订单号', 'payload.business_order_no', 'num'],
|
||
['修改时间', 'updated_at', 'date'],
|
||
['修改人', 'modifier', 'text'],
|
||
],
|
||
],
|
||
|
||
'douyin' => [
|
||
'title' => '抖音账户',
|
||
'columns' => [
|
||
['记录编码', 'record_code', 'num'],
|
||
['店铺', 'store_name', 'text'],
|
||
['财务备注', 'finance_remark', 'text'],
|
||
['订单', 'order_no', 'num'],
|
||
['金额', 'amount', 'money'],
|
||
['自定义备注', 'custom_remark', 'text'],
|
||
['商户主体名称', 'payload.merchant_name', 'text'],
|
||
['账单项目', 'bill_item', 'tag'],
|
||
['动账流水号', 'payload.move_serial_no', 'num'],
|
||
['订单号', 'payload.order_no_2', 'num'],
|
||
['线上单号', 'payload.online_order_no', 'num'],
|
||
['子订单号', 'payload.sub_order_no', 'num'],
|
||
['商品ID', 'payload.goods_id', 'num'],
|
||
['账务类型', 'payload.account_type', 'text'],
|
||
['结算时间', 'occurred_at', 'date'],
|
||
['动账摘要', 'payload.move_summary', 'text'],
|
||
['下单时间', 'payload.order_placed_at', 'date'],
|
||
['业务类型', 'payload.business_type', 'text'],
|
||
['结算账户', 'payload.settle_account', 'text'],
|
||
['动账场景', 'payload.move_scene', 'text'],
|
||
['达人ID', 'payload.talent_id', 'num'],
|
||
['达人名称', 'payload.talent_name', 'text'],
|
||
['备注', 'remark', 'text'],
|
||
['收入', 'income', 'money_in'],
|
||
['支出', 'expense', 'money_out'],
|
||
['创建时间', 'created_at', 'date'],
|
||
['修改时间', 'updated_at', 'date'],
|
||
['修改人', 'modifier', 'text'],
|
||
],
|
||
],
|
||
|
||
'dewu' => [
|
||
'title' => '得物账户',
|
||
'columns' => [
|
||
['记录编码', 'record_code', 'num'],
|
||
['店铺', 'store_name', 'text'],
|
||
['财务备注', 'finance_remark', 'text'],
|
||
['金额', 'amount', 'money'],
|
||
['订单号', 'order_no', 'num'],
|
||
['线上单号', 'payload.online_order_no', 'num'],
|
||
['自定义备注', 'custom_remark', 'text'],
|
||
['账单项目', 'bill_item', 'tag'],
|
||
['店铺', 'payload.store_2', 'text'],
|
||
['订单类型', 'payload.order_type', 'text'],
|
||
['商品名称', 'payload.goods_name', 'text'],
|
||
['商品货号', 'payload.goods_no', 'num'],
|
||
['数量', 'payload.quantity', 'num'],
|
||
['渠道', 'payload.channel', 'text'],
|
||
['业务类型', 'payload.business_type', 'text'],
|
||
['收入金额', 'income', 'money_in'],
|
||
['支出金额', 'expense', 'money_out'],
|
||
['线上单号对应实际店铺', 'payload.online_real_store', 'text'],
|
||
['订单创建时间', 'payload.order_created_at', 'date'],
|
||
['支付/退款时间', 'occurred_at', 'date'],
|
||
['发货/退货时间', 'payload.ship_return_at', 'date'],
|
||
['结算状态', 'payload.settle_status', 'text'],
|
||
['收款账期', 'payload.pay_period', 'text'],
|
||
['拉取时间', 'payload.pulled_at', 'date'],
|
||
['修改时间', 'updated_at', 'date'],
|
||
['修改人', 'modifier', 'text'],
|
||
],
|
||
],
|
||
];
|
||
}
|
||
|
||
public static function types(): array
|
||
{
|
||
return array_keys(self::map());
|
||
}
|
||
|
||
public static function has(string $type): bool
|
||
{
|
||
return isset(self::map()[$type]);
|
||
}
|
||
|
||
/**
|
||
* @return array{title:string,columns:array<int,array{label:string,field:string,kind:string}>}
|
||
*/
|
||
public static function for(string $type): ?array
|
||
{
|
||
$map = self::map();
|
||
|
||
if (! isset($map[$type])) {
|
||
return null;
|
||
}
|
||
|
||
$columns = array_map(function ($c) {
|
||
return ['label' => $c[0], 'field' => $c[1], 'kind' => $c[2]];
|
||
}, $map[$type]['columns']);
|
||
|
||
return [
|
||
'title' => $map[$type]['title'],
|
||
'columns' => $columns,
|
||
];
|
||
}
|
||
}
|