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('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->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()->title('上报数据')->column(2)->items([ ['label' => __('finance.ledger.date'), 'content' => '${date}'], ['label' => __('finance.ledger.store'), 'content' => '${store.title}'], ['label' => __('finance.ledger.sales'), 'content' => '${sales}'], ['label' => __('finance.ledger.expenditure'), 'content' => '${expenditure}'], ['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' => __('finance.ledger.photos'), 'content' => amis()->Images()->enlargeAble()->source('${photos}')->enlargeWithGallary(), 'span' => 2], ['label' => __('finance.ledger.ledger_status'), 'content' => amis()->Mapping()->map(LedgerStatus::labelMap())->value('${ledger_status}'), 'span' => 2], ]), ]); } /** * 审核 */ 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, '操作成功'); } 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') ); } }