model()->orderBy('id', 'desc'); $grid->column('store_id')->display(fn () => data_get($this->store, 'title')); $grid->column('name'); $grid->column('device_no'); $grid->column('status')->switch(); $grid->column('remarks')->editable(); $user = Admin::user(); $grid->showViewButton($user->can('dcat.admin.store.device.show')); $grid->showCreateButton($user->can('dcat.admin.store.device.create')); $grid->showEditButton($user->can('dcat.admin.store.device.edit')); $grid->showDeleteButton($user->can('dcat.admin.store.device.destroy')); $grid->filter(function (Grid\Filter $filter) { $filter->panel(); $filter->equal('store_id')->select('api/store')->width(3); $filter->where('name', function ($q) { $input = $this->input; $q->where(fn($q1) => $q1->where('name', 'like', '%'.$input.'%')->orWhere('device_no', 'like', '%'.$input.'%')); })->placeholder('名称或者设备编号')->width(3); }); }); } protected function form() { return Form::make(new Device(), function (Form $form) { $unique = Rule::unique('store_devices', 'device_no'); if ($form->isEditing()) { $unique->ignore($form->getKey()); } $form->select('store_id')->options(Store::pluck('title', 'id'))->required(); $form->text('name')->required(); $form->text('device_no')->rules([$unique])->required(); $form->switch('status')->default(1); $form->text('remarks'); $form->disableCreatingCheck(); $form->disableEditingCheck(); $form->disableDeleteButton(); $form->disableResetButton(); $form->deleted(function (Form $form, $result) { $data = array_column($form->model()->toArray(), 'id'); // 删除设备记录 DeviceRecord::whereIn('device_id', $data)->delete(); }); }); } protected function detail($id) { return Show::make($id, Device::with(['store']), function (Show $show) { $show->field('id'); $show->field('store_id'); $show->field('name'); $show->field('device_no'); $show->field('status')->bool(); $show->field('remarks'); $show->disableEditButton(); $show->disableDeleteButton(); $show->relation('records', function ($model) { $grid = new Grid(new DeviceRecord()); $grid->model()->where('device_id', $model->id)->orderBy('created_at', 'desc'); $grid->column('status')->using(DeviceRecord::$statusMap)->label(DeviceRecord::$statusColor); $grid->column('data')->display(fn($v) => json_encode($v, JSON_UNESCAPED_UNICODE)); // $grid->column('result')->display(fn($v) => json_encode($v, JSON_UNESCAPED_UNICODE)); $grid->column('created_at'); $grid->disableActions(); $grid->disableCreateButton(); return $grid; }); }); } }