6
0
Fork 0
jiqu-library-server/app/Admin/Controllers/Store/DeviceController.php

100 lines
3.7 KiB
PHP

<?php
namespace App\Admin\Controllers\Store;
use Dcat\Admin\{Form, Grid, Admin, Show};
use Dcat\Admin\Http\Controllers\AdminController;
use App\Models\Store\{Store, Device, DeviceRecord};
use Illuminate\Validation\Rule;
class DeviceController extends AdminController
{
protected $translation = 'store-device';
protected function grid()
{
return Grid::make(Device::with(['store']), function (Grid $grid) {
$grid->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')->as(fn() => data_get($this->store, 'title'));
$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;
});
});
}
}