diff --git a/modules/EcommerceFinance/Repositories/InstallationDetailMirrorRepository.php b/modules/EcommerceFinance/Repositories/InstallationDetailMirrorRepository.php index 3b4d7b9a..2bba0cb2 100644 --- a/modules/EcommerceFinance/Repositories/InstallationDetailMirrorRepository.php +++ b/modules/EcommerceFinance/Repositories/InstallationDetailMirrorRepository.php @@ -128,7 +128,7 @@ class InstallationDetailMirrorRepository /** * 按客服审核时间汇总安装费;金额取安装明细子表的结算明细金额。 * - * @return array{ready:bool,total:float,rows:list} + * @return array{ready:bool,total:float,rows:list} */ public function feeDetails(array $filters = []): array { @@ -160,27 +160,43 @@ class InstallationDetailMirrorRepository ->where('i.kfshTime', '>=', $from) ->where('i.kfshTime', '<', \Illuminate\Support\Carbon::parse($to)->addDay()->toDateString()); + $platformSql = "CASE" + . " WHEN COALESCE(TRIM(install_main.shop_name), '') LIKE '%阿里巴巴%'" + . " OR COALESCE(TRIM(install_main.shop_name), '') LIKE '%天猫%'" + . " OR COALESCE(TRIM(install_main.shop_name), '') LIKE '%新佰广%'" + . " OR COALESCE(TRIM(install_main.shop_name), '') LIKE '%淘工厂%'" + . " OR COALESCE(TRIM(install_main.shop_name), '') LIKE '%淘宝%' THEN '淘系'" + . " WHEN COALESCE(TRIM(install_main.shop_name), '') LIKE '抖音-%' THEN '抖音'" + . " WHEN COALESCE(TRIM(install_main.shop_name), '') LIKE '拼多多-%' THEN '拼多多'" + . " WHEN COALESCE(TRIM(install_main.shop_name), '') LIKE '唯品会-%' THEN '唯品会'" + . " WHEN COALESCE(TRIM(install_main.shop_name), '') LIKE '京东-%' THEN '京东'" + . " WHEN COALESCE(TRIM(install_main.shop_name), '') LIKE '京喜-%' THEN '京喜'" + . " ELSE '其他' END"; + $rows = $query + ->selectRaw($platformSql . ' AS platform') ->selectRaw("COALESCE(NULLIF(TRIM(install_main.shop_name), ''), '未填写店铺') AS store_name") ->selectRaw("COALESCE(NULLIF(TRIM(install_main.installCompanyName), ''), '未填写安装公司') AS installation_company") ->selectRaw("CASE WHEN install_main.costWay IS NULL OR TRIM(install_main.costWay) = '' THEN '包安装' ELSE '不包安装' END AS payment_channel") ->selectRaw('ROUND(SUM(CAST(i.settleItemAmount AS DECIMAL(18,2))), 2) AS amount') ->groupByRaw( - "COALESCE(NULLIF(TRIM(install_main.shop_name), ''), '未填写店铺')," + $platformSql . ',' + . " COALESCE(NULLIF(TRIM(install_main.shop_name), ''), '未填写店铺')," . " COALESCE(NULLIF(TRIM(install_main.installCompanyName), ''), '未填写安装公司')," . " CASE WHEN install_main.costWay IS NULL OR TRIM(install_main.costWay) = '' THEN '包安装' ELSE '不包安装' END" ) ->havingRaw('ABS(SUM(CAST(i.settleItemAmount AS DECIMAL(18,2)))) > 0.004') ->get() ->map(static fn (object $row): array => [ + 'platform' => trim((string) ($row->platform ?? '其他')), 'store_name' => trim((string) ($row->store_name ?? '')), 'installation_company' => trim((string) ($row->installation_company ?? '')), 'payment_channel' => (string) ($row->payment_channel ?? '包安装'), 'amount' => round((float) ($row->amount ?? 0), 2), ]) ->sort(static fn (array $left, array $right): int => - [abs($right['amount']), $left['store_name'], $left['installation_company']] - <=> [abs($left['amount']), $right['store_name'], $right['installation_company']] + [abs($right['amount']), $left['platform'], $left['store_name'], $left['installation_company']] + <=> [abs($left['amount']), $right['platform'], $right['store_name'], $right['installation_company']] ) ->values() ->all(); diff --git a/resources/views/business/pages/partials/installation-fee-summary.blade.php b/resources/views/business/pages/partials/installation-fee-summary.blade.php index 9dcaecc6..583b3afe 100644 --- a/resources/views/business/pages/partials/installation-fee-summary.blade.php +++ b/resources/views/business/pages/partials/installation-fee-summary.blade.php @@ -164,7 +164,7 @@ .installation-fee-filters { display: grid; - grid-template-columns: repeat(3, minmax(10rem, 1fr)); + grid-template-columns: repeat(4, minmax(8.5rem, 1fr)); gap: 0.75rem; padding: 0.8rem 1.1rem; border-bottom: 1px solid #eee8dd; @@ -228,6 +228,42 @@ text-align: center; } + .installation-fee-platform-summary { + margin: 0.75rem 0 1rem; + padding-top: 0.75rem; + border-top: 1px solid #d8d2c7; + } + + .installation-fee-platform-summary h3 { + margin: 0 0 0.5rem; + color: #171717; + font-size: 0.75rem; + } + + .installation-fee-platform-summary table { + width: 100%; + border-collapse: collapse; + font-size: 0.75rem; + font-variant-numeric: tabular-nums; + } + + .installation-fee-platform-summary th, + .installation-fee-platform-summary td { + padding: 0.5rem; + border-bottom: 1px solid #eee8dd; + text-align: left; + } + + .installation-fee-platform-summary th { + background: #f7f0de; + color: #595959; + font-weight: 600; + } + + .installation-fee-platform-summary .is-number { + text-align: right; + } + .installation-fee-dialog__foot { padding: 0.65rem 1.1rem; border-top: 1px solid #eee8dd; @@ -235,6 +271,10 @@ font-size: 0.6875rem; } + @media (max-width: 900px) { + .installation-fee-filters { grid-template-columns: repeat(2, minmax(10rem, 1fr)); } + } + @media (max-width: 720px) { .installation-fee-filters { grid-template-columns: 1fr; } .installation-fee-dialog__head { flex-direction: column; } @@ -278,6 +318,12 @@
+