100 lines
3.7 KiB
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');
|
|
$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;
|
|
});
|
|
});
|
|
}
|
|
}
|