actionOfGetData()) { /** @var \App\Models\Ledger */ $ledger = Ledger::findOrFail($id); $ledger->load(['store', 'items.type']); return $this->response()->success( array_merge($ledger->toArray(), [ 'items_property' => collect($ledger->items)->map(fn ($item) => [ ['label' => '类型', 'content' => $item->type?->name ?? '-'], ['label' => '销售', 'content' => $item->sales], ['label' => $item->ledger_item_type_id === 'ledger_item_type_other' ? '支出' : '兑奖', 'content' => $item->expenditure], ])->collapse()->all() ]) ); } $detail = amis() ->Card() ->className('base-form') ->header(['title' => __('admin.detail')]) ->body($this->detail()) ->toolbar([$this->backButton()]); $page = $this->basePage()->body($detail); return $this->response()->success($page); } /** * 审核 */ public function approval($id, Request $request) { $validator = Validator::make( data: $request->all(), rules: [ 'approval_result' => ['bail', 'required', Rule::in([1, 2])], 'failed_reason' => ['bail', 'required_if:approval_result,2'], ], attributes: [ 'approval_result' => __('finance.ledger.approval_result'), 'failed_reason' => __('finance.ledger.failed_reason'), ], ); if ($validator->fails()) { return $this->response()->fail($validator->errors()->first()); } $ledger = Ledger::findOrFail($id); if ($ledger->ledger_status !== LedgerStatus::Processing) { return $this->response()->fail('上报数据不是待审核状态'); } if ($request->input('approval_result') == 1) { $ledger->ledger_status = LedgerStatus::Passed; } else { $ledger->ledger_status = LedgerStatus::Rejected; } $ledger->save(); return $this->response()->success(null, '审核成功'); } public function updateLedgerAmount($id, Request $request) { $validator = Validator::make( data: $request->all(), rules: [ 'ledger_amount' => ['bail', 'required', 'numeric'], ], attributes: [ 'ledger_amount' => __('finance.ledger.ledger_amount'), ], ); if ($validator->fails()) { return $this->response()->fail($validator->errors()->first()); } $ledger = Ledger::findOrFail($id); $ledger->update([ 'ledger_amount' => $request->input('ledger_amount'), ]); return $this->response()->success(null, '修改成功'); } public function list(): Page { $crud = $this->baseCRUD() ->tableLayout('fixed') ->headerToolbar([ ...$this->baseHeaderToolBar(), ]) ->bulkActions([]) ->filter($this->baseFilter()->body([ amis()->GroupControl()->mode('horizontal')->body([ amis()->SelectControl('store_id', __('finance.ledger.store')) ->source(admin_url('api/stores')) ->labelField('title') ->valueField('id') ->clearable() ->columnRatio(3), amis()->SelectControl('status', __('finance.ledger.ledger_status')) ->multiple() ->options(LedgerStatus::options()) ->columnRatio(3), amis()->DateRangeControl('date_range', __('finance.ledger.date')) ->valueFormat('YYYY-MM-DD'), ]), ])) ->columns([ // amis()->TableColumn()->name('id')->label(__('finance.ledger.id')), amis()->TableColumn()->name('date')->label(__('finance.ledger.date')), amis()->TableColumn()->name('store.title')->label(__('finance.ledger.store')), amis()->TableColumn()->name('sales')->label(__('finance.ledger.sales')), amis()->TableColumn()->name('expenditure')->label(__('finance.ledger.expenditure')), amis()->TableColumn()->name('new_customers')->label(__('finance.ledger.new_customers')), amis()->TableColumn()->name('handover_amount')->label(__('finance.ledger.handover_amount')), amis()->TableColumn()->name('ledger_amount')->label(__('finance.ledger.ledger_amount')), amis()->TableColumn()->name('ledger_difference')->label(__('finance.ledger.ledger_difference')), amis()->TableColumn()->name('expected_commission')->label(__('finance.ledger.expected_commission')), amis()->TableColumn()->name('actual_commission')->label(__('finance.ledger.actual_commission')), amis()->TableColumn()->name('expected_income')->label(__('finance.ledger.expected_income')), amis()->TableColumn()->name('actual_income')->label(__('finance.ledger.actual_income')), amis()->TableColumn() ->name('ledger_status') ->label(__('finance.ledger.ledger_status')) ->type('mapping') ->map(LedgerStatus::labelMap()), amis()->TableColumn()->name('created_at')->label(__('finance.ledger.created_at')), $this->rowActions([ $this->rowApprovalButton() ->visibleOn('${ledger_status == 2}'), $this->rowEditLedgerAmountButton() ->visible(Admin::user()->can('admin.finance.ledgers.update_ledger_amount')), $this->rowEditButton(true) ->visible(Admin::user()->can('admin.finance.ledgers.update')) ->visibleOn('${ledger_status == 1 || ledger_status == 4}'), $this->rowShowButton() ->visible(Admin::user()->can('admin.finance.ledgers.view')), ]), ]); return $this->baseList($crud); } public function form(): Form { return $this->baseForm()->title('')->body([ amis()->NumberControl() ->name('actual_commission') ->label(__('finance.ledger.actual_commission')) ->precision(2) ->showSteps(false) ->required(), amis()->NumberControl() ->name('actual_income') ->label(__('finance.ledger.actual_income')) ->precision(2) ->showSteps(false) ->required(), ]); } public function detail(): Form { return $this->baseDetail()->title()->body([ amis()->Property()->items([ ['label' => __('finance.ledger.date'), 'content' => '${date}'], ['label' => __('finance.ledger.store'), 'content' => '${store.title}'], ['label' => __('finance.ledger.new_customers'), 'content' => '${new_customers}'], ['label' => __('finance.ledger.sales'), 'content' => '${sales}'], ['label' => __('finance.ledger.expenditure'), 'content' => '${expenditure}'], ['label' => __('finance.ledger.handover_amount'), 'content' => '${handover_amount}'], ['label' => __('finance.ledger.ledger_amount'), 'content' => '${ledger_amount}'], ['label' => __('finance.ledger.ledger_difference'), 'content' => '${ledger_difference}'], ['label' => __('finance.ledger.expected_commission'), 'content' => '${expected_commission}'], ['label' => __('finance.ledger.actual_commission'), 'content' => '${actual_commission}'], ['label' => __('finance.ledger.expected_income'), 'content' => '${expected_income}'], ['label' => __('finance.ledger.actual_income'), 'content' => '${actual_income}'], [ 'label' => '上报数据', 'content' => amis()->Property()->source('${items_property}'), 'span' => 3 ], ['label' => __('finance.ledger.photos'), 'content' => amis()->Images()->enlargeAble()->source('${photos}')->enlargeWithGallary(), 'span' => 3], ['label' => __('finance.ledger.ledger_status'), 'content' => amis()->Mapping()->map(LedgerStatus::labelMap())->value('${ledger_status}'), 'span' => 3], ]), ]); } protected function rowApprovalButton() { return amis()->DialogAction()->icon('fa-regular fa-check-circle')->label(__('finance.ledger.approval'))->level('link')->dialog( amis()->Dialog()->title(__('finance.ledger.approval'))->body([ amis()->Form()->title('') ->api('post:'.admin_url('finance/ledgers/${id}/approval')) ->body([ amis()->RadiosControl('approval_result', __('finance.ledger.approval_result')) ->options([ ['label' => '通过', 'value' => 1], ['label' => '驳回', 'value' => 2], ]) ->selectFirst() ->required(), amis()->TextareaControl('failed_reason', __('finance.ledger.failed_reason')) ->visibleOn('${approval_result == 2}') ->required(), ]), ])->size('md') ); } protected function rowEditLedgerAmountButton() { return amis()->DialogAction() ->icon('fa-regular fa-pen-to-square') ->label(__('finance.ledger.ledger_amount')) ->level('link') ->dialog( amis()->Dialog()->title(__('finance.ledger.ledger_amount'))->body([ amis()->Form()->title('') ->api('post:'.admin_url('finance/ledgers/${id}/ledger-amount')) ->body([ amis()->NumberControl() ->name('ledger_amount') ->label(__('finance.ledger.ledger_amount')) ->precision(2) ->showSteps(false) ->required(), ]), ]) ); } }