baseCRUD() ->headerToolbar( collect($this->baseHeaderToolBar()) ->when(Admin::user()->can('admin.finance.store_master_commissions.create'), fn ($collection) => $collection->push($this->createTypeButton('drawer', 'lg'))) ->when(Admin::user()->can('admin.finance.store_master_commissions.export'), fn ($collection) => $collection->push($this->exportAction(true))) ) ->bulkActions([]) ->filter($this->baseFilter()->body([ amis()->GroupControl()->mode('horizontal')->body([ amis()->MonthControl() ->name('month') ->label(__('finance.store_master_commission.month')) ->valueFormat('YYYY-MM'), amis()->SelectControl('store_id', __('finance.ledger.store')) ->source(admin_url('api/stores')) ->labelField('title') ->valueField('id') ->clearable(), amis()->SelectControl()->name('check_status')->label(__('workflow_log.check_status')) ->multiple() ->options(Arr::except(CheckStatus::options(), [CheckStatus::Cancel->value])) ->clearable(), ]), ])) ->filterDefaultVisible() ->columns([ amis()->TableColumn('id', __('finance.store_master_commission.id')), amis()->TableColumn('month', __('finance.store_master_commission.month')), amis()->TableColumn('store.title', __('finance.store_master_commission.store')), amis()->TableColumn('master.name', __('finance.store_master_commission.store_master')), amis()->TableColumn('commission', __('finance.store_master_commission.commission')), amis()->TableColumn('daily_expenses', __('finance.store_master_commission.daily_expenses')), amis()->TableColumn('employee_expenses', __('finance.store_master_commission.employee_expenses')), amis()->TableColumn('other_expenses', __('finance.store_master_commission.other_expenses')), amis()->TableColumn('workflow.check_status', __('workflow_log.check_status'))->set('type', 'mapping')->map(CheckStatus::labelMap()), amis()->TableColumn('created_at', __('finance.store_master_commission.created_at')), $this->rowActions([ $this->applyAction() ->api( amis()->BaseApi() ->url(admin_url('api/workflow/apply')) ->method('post') ->data(['id' => '${workflow.id}']) ), $this->rowEditTypeButton('drawer', 'lg') ->visible(Admin::user()->can('admin.finance.store_master_commissions.update')) ->visibleOn('${OR(workflow.check_status == '.CheckStatus::None->value.', workflow.check_status == '.CheckStatus::Cancel->value.', workflow.check_status == '.CheckStatus::Fail->value.')}'), $this->rowShowButton() ->visible(Admin::user()->can('admin.finance.store_master_commissions.view')), $this->rowDeleteButton() ->visible(Admin::user()->can('admin.finance.store_master_commissions.delete')) ->visibleOn('${OR(workflow.check_status == '.CheckStatus::None->value.', workflow.check_status == '.CheckStatus::Cancel->value.', workflow.check_status == '.CheckStatus::Fail->value.')}'), ]), ]); return $this->baseList($crud); } public function form(): Form { return $this->baseForm()->title('')->body([ amis()->MonthControl() ->name('month') ->label(__('finance.store_master_commission.month')) ->required() ->valueFormat('YYYY-MM'), amis()->SelectControl('store_id', __('finance.store_master_commission.store')) ->source(admin_url('api/stores')) ->labelField('title') ->valueField('id') ->required() ->clearable(), amis()->NumberControl() ->name('commission') ->label(__('finance.store_master_commission.commission')) ->precision(2) ->showSteps(false) ->required(), amis()->NumberControl() ->name('daily_expenses') ->label(__('finance.store_master_commission.daily_expenses')) ->precision(2) ->showSteps(false) ->required(), amis()->NumberControl() ->name('employee_expenses') ->label(__('finance.store_master_commission.employee_expenses')) ->precision(2) ->showSteps(false) ->required(), amis()->NumberControl() ->name('other_expenses') ->label(__('finance.store_master_commission.other_expenses')) ->precision(2) ->showSteps(false) ->required(), ]); } public function detail(): Form { $detailId = 'store-master-commission-detail'; $serviceId = 'store-master-commission-workflow-service'; return $this->baseDetail()->id($detailId)->title('')->onEvent([ 'inited' => [ 'actions' => [ ['actionType' => 'reload', 'componentId' => $serviceId], ], ], ])->body([ amis()->Property()->items([ ['label' => __('finance.store_master_commission.month'), 'content' => '${month}'], ['label' => __('finance.store_master_commission.store'), 'content' => '${store.title}'], ['label' => __('finance.store_master_commission.store_master'), 'content' => '${master.name}'], ['label' => __('finance.store_master_commission.commission'), 'content' => '${commission}'], ['label' => __('finance.store_master_commission.daily_expenses'), 'content' => '${daily_expenses}'], ['label' => __('finance.store_master_commission.employee_expenses'), 'content' => '${employee_expenses}'], ['label' => __('finance.store_master_commission.other_expenses'), 'content' => '${other_expenses}'], ['label' => __('finance.store_master_commission.created_at'), 'content' => '${created_at}'], ['label' => __('workflow_log.check_status'), 'content' => amis()->Mapping()->name('workflow.check_status')->map(CheckStatus::labelMap())], ['label' => __('workflow_log.checked_at'), 'content' => '${workflow.checked_at}'], ['label' => __('workflow_log.remarks'), 'content' => '${workflow.check_remarks}', 'span' => 2], ]), amis()->Divider(), $this->baseWorkflowLogList($detailId)->id($serviceId), ]); } protected function exportFileName() { return '店长提成'; } protected function exportMap($row) { return [ __('finance.store_master_commission.id') => $row['id'], __('finance.store_master_commission.month') => $row['month'], __('finance.store_master_commission.store') => Arr::get($row, 'store.title'), __('finance.store_master_commission.store_master') => Arr::get($row, 'master.name'), __('finance.store_master_commission.commission') => $row['commission'], __('finance.store_master_commission.daily_expenses') => $row['daily_expenses'], __('finance.store_master_commission.employee_expenses') => $row['employee_expenses'], __('finance.store_master_commission.other_expenses') => $row['other_expenses'], __('workflow_log.check_status') => CheckStatus::tryFrom(Arr::get($row, 'workflow.check_status'))?->text(), __('finance.store_master_commission.created_at') => $row['created_at'], ]; } }