generated from liutk/owl-admin-base
admin 门店-彩票机管理
parent
75d2ced90a
commit
48b88953f3
|
|
@ -35,22 +35,21 @@ class EmployeeController extends AdminController
|
|||
amisMake()->TableColumn()->name('id')->label(__('employee.id')),
|
||||
amisMake()->TableColumn()->name('name')->label(__('employee.name')),
|
||||
amisMake()->TableColumn()->name('phone')->label(__('employee.phone')),
|
||||
amisMake()->TableColumn()->name('employee_status')->label(__('employee.employee_status'))
|
||||
->type('switch')
|
||||
->trueValue(EmployeeStatus::Online)
|
||||
->falseValue(EmployeeStatus::Offline),
|
||||
amisMake()->TableColumn()->name('created_at')->label(__('employee.created_at')),
|
||||
amisMake()->TableColumn()->name('employee_status_text')->label(__('employee.employee_status'))->set('type', 'tag')->set('color', '${employee_status_color}'),
|
||||
amisMake()->TableColumn()->name('join_at')->label(__('employee.join_at')),
|
||||
amisMake()->TableColumn()->name('remarks')->label(__('employee.remarks')),
|
||||
$this->rowActions([
|
||||
$this->rowShowButton()->visible(Admin::user()->can('admin.hr.employees.view')),
|
||||
$this->rowEditButton(true)->visible(Admin::user()->can('admin.hr.employees.update')),
|
||||
$this->rowDeleteButton()->visible(Admin::user()->can('admin.hr.employees.delete')),
|
||||
// amisMake()->AjaxAction()
|
||||
// ->label(__('employee.leave'))
|
||||
// ->level('link')
|
||||
// ->icon('fa fa-sign-out')
|
||||
// ->confirmText(__('employee.leave_confirm'))
|
||||
// ->api('post:'.admin_url('hr/employees/${id}/leave'))
|
||||
// ->visible(Admin::user()->can('admin.hr.employees.leave')),
|
||||
amisMake()->AjaxAction()
|
||||
->label(__('employee.leave'))
|
||||
->level('link')
|
||||
->icon('fa fa-sign-out')
|
||||
->confirmText(__('employee.leave_confirm'))
|
||||
->api('post:'.admin_url('hr/employees/${id}/leave'))
|
||||
->visible(Admin::user()->can('admin.hr.employees.leave'))
|
||||
->visibleOn('${employee_status == '.EmployeeStatus::Online->value.'}'),
|
||||
]),
|
||||
]);
|
||||
|
||||
|
|
@ -63,13 +62,14 @@ class EmployeeController extends AdminController
|
|||
amisMake()->TextControl()->name('name')->label(__('employee.name'))->required(),
|
||||
amisMake()->TextControl()->name('phone')->label(__('employee.phone'))->required(),
|
||||
|
||||
amisMake()->SelectControl()->name('employee_status')->label(__('employee.employee_status'))->options(EmployeeStatus::options())->required(),
|
||||
// amisMake()->SelectControl()->name('employee_status')->label(__('employee.employee_status'))->options(EmployeeStatus::options())->required(),
|
||||
amisMake()->TagControl()->name('jobs')->label(__('employee.jobs'))
|
||||
->source(admin_url('api/keywords/tree-list').'?parent_key='.Employee::JOB_KEY)
|
||||
->labelField('name')
|
||||
->valueField('key')
|
||||
->joinValues(),
|
||||
amisMake()->DateControl()->name('join_at')->label(__('employee.join_at'))->format('YYYY-MM-DD'),
|
||||
amisMake()->TextControl()->name('remarks')->label(__('employee.remarks')),
|
||||
amisMake()->ImageControl()->name('prize_images')->label(__('employee.prize_images'))
|
||||
->multiple()
|
||||
->receiver($this->uploadImagePath() . '?full-url=1')
|
||||
|
|
@ -96,9 +96,22 @@ class EmployeeController extends AdminController
|
|||
['label' => __('employee.employee_status'), 'content' => amisMake()->Tag()->label('${employee_status_text}')->color('${employee_status_color}')],
|
||||
['label' => __('employee.join_at'), 'content' => '${join_at}'],
|
||||
['label' => __('employee.leave_at'), 'content' => '${leave_at}'],
|
||||
['label' => __('employee.remarks'), 'content' => '${remarks}', 'span' => 3],
|
||||
['label' => __('admin.username'), 'content' => '${admin_user.username}', 'span' => 3],
|
||||
['label' => __('employee.prize_images'), 'content' => amisMake()->Images()->source('${prize_images}')->enlargeAble(), 'span' => 3],
|
||||
['label' => __('employee.skill_images'), 'content' => amisMake()->Images()->source('${skill_images}')->enlargeAble(), 'span' => 3],
|
||||
]));
|
||||
}
|
||||
|
||||
// 员工离职
|
||||
public function leave($id, Request $request)
|
||||
{
|
||||
$user = Employee::findOrFail($id);
|
||||
$user->update([
|
||||
'leave_at' => $request->input('leave_at', now()),
|
||||
'employee_status' => EmployeeStatus::Offline,
|
||||
]);
|
||||
|
||||
return $this->response()->success(null, '操作成功');
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,61 @@
|
|||
<?php
|
||||
|
||||
namespace App\Admin\Controllers\Store;
|
||||
|
||||
use Slowlyo\OwlAdmin\Admin;
|
||||
use Slowlyo\OwlAdmin\Renderers\Form;
|
||||
use Slowlyo\OwlAdmin\Renderers\Page;
|
||||
use App\Admin\Controllers\AdminController;
|
||||
use App\Admin\Services\StoreDeviceService;
|
||||
|
||||
/**
|
||||
* 彩票机管理
|
||||
*/
|
||||
class DeviceController extends AdminController
|
||||
{
|
||||
protected string $serviceName = StoreDeviceService::class;
|
||||
|
||||
public function list(): Page
|
||||
{
|
||||
$crud = $this->baseCRUD()
|
||||
->tableLayout('fixed')
|
||||
->headerToolbar([
|
||||
$this->createButton(true)->visible(Admin::user()->can('admin.store.devices.create')),
|
||||
...$this->baseHeaderToolBar(),
|
||||
])
|
||||
->bulkActions([])
|
||||
->filter($this->baseFilter()->body([
|
||||
amis()->GroupControl()->mode('horizontal')->body([
|
||||
amisMake()->TextControl()->name('name')->label(__('store_device.name'))->columnRatio(3)->clearable(),
|
||||
]),
|
||||
]))
|
||||
->columns([
|
||||
amisMake()->TableColumn()->name('id')->label(__('store_device.id')),
|
||||
amisMake()->TableColumn()->name('store.title')->label(__('store_device.store_id')),
|
||||
amisMake()->TableColumn()->name('name')->label(__('store_device.name')),
|
||||
amisMake()->TableColumn()->name('code')->label(__('store_device.code')),
|
||||
amisMake()->TableColumn()->name('remarks')->label(__('store_device.remarks')),
|
||||
amisMake()->TableColumn()->name('created_at')->label(__('store_device.created_at')),
|
||||
$this->rowActions([
|
||||
$this->rowEditButton(true)->visible(Admin::user()->can('admin.store.devices.update')),
|
||||
$this->rowDeleteButton()->visible(Admin::user()->can('admin.store.devices.delete')),
|
||||
]),
|
||||
]);
|
||||
|
||||
return $this->baseList($crud);
|
||||
}
|
||||
|
||||
public function form($edit): Form
|
||||
{
|
||||
return $this->baseForm()->title('')->body([
|
||||
amisMake()->SelectControl()->name('store_id')->label(__('store_device.store_id'))
|
||||
->source(admin_url('store/stores?_action=getData'))
|
||||
->labelField('title')
|
||||
->valueField('id')
|
||||
->required(),
|
||||
amisMake()->TextControl()->name('name')->label(__('store_device.name'))->required(),
|
||||
amisMake()->TextControl()->name('code')->label(__('store_device.code'))->required(),
|
||||
amisMake()->TextControl()->name('remarks')->label(__('store_device.remarks')),
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
|
@ -4,9 +4,9 @@ namespace App\Admin\Controllers\Store;
|
|||
|
||||
use App\Models\{Store, Employee};
|
||||
use Illuminate\Http\Request;
|
||||
use Slowlyo\OwlAdmin\Admin;
|
||||
use App\Enums\{BusinessStatus, StoreRole};
|
||||
use App\Admin\Services\StoreService;
|
||||
use Slowlyo\OwlAdmin\Admin;
|
||||
use Slowlyo\OwlAdmin\Renderers\Form;
|
||||
use Slowlyo\OwlAdmin\Renderers\Page;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
|
|
|||
|
|
@ -14,14 +14,12 @@ class EmployeeFilter extends ModelFilter
|
|||
|
||||
public function name($key)
|
||||
{
|
||||
$condition = '%'.$key.'%';
|
||||
$this->whereLike('name', $condition);
|
||||
$this->whereLike('name', $key);
|
||||
}
|
||||
|
||||
public function phone($key)
|
||||
{
|
||||
$condition = '%'.$key.'%';
|
||||
$this->whereLike('phone', $condition);
|
||||
$this->whereLike('phone', $key);
|
||||
}
|
||||
|
||||
public function employeeStatus($key)
|
||||
|
|
|
|||
|
|
@ -0,0 +1,14 @@
|
|||
<?php
|
||||
|
||||
namespace App\Admin\Filters;
|
||||
|
||||
use EloquentFilter\ModelFilter;
|
||||
|
||||
class StoreDeviceFilter extends ModelFilter
|
||||
{
|
||||
public function search($key)
|
||||
{
|
||||
$condition = '%'.$key.'%';
|
||||
$this->where(fn ($q) => $q->where('name', 'like', $condition)->orWhere('code', 'like', $condition));
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,34 @@
|
|||
<?php
|
||||
|
||||
namespace App\Admin\Services;
|
||||
|
||||
use App\Models\StoreDevice;
|
||||
use App\Admin\Filters\StoreDeviceFilter;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
|
||||
class StoreDeviceService extends BaseService
|
||||
{
|
||||
protected array $withRelationships = ['store'];
|
||||
|
||||
protected string $modelName = StoreDevice::class;
|
||||
|
||||
protected string $modelFilterName = StoreDeviceFilter::class;
|
||||
|
||||
public function validate($data, $model = null)
|
||||
{
|
||||
$createRules = [
|
||||
'name' => ['required'],
|
||||
'code' => ['required'],
|
||||
];
|
||||
$updateRules = [];
|
||||
$validator = Validator::make($data, $model ? $updateRules : $createRules, [
|
||||
'name.required' => __('store_device.name').'必填',
|
||||
'code.required' => __('store_device.phone').'必填',
|
||||
]);
|
||||
if ($validator->fails()) {
|
||||
return $validator->errors()->first();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
use App\Admin\Controllers\Hr\EmployeeController;
|
||||
use App\Admin\Controllers\Store\StoreController;
|
||||
use App\Admin\Controllers\Store\DeviceController;
|
||||
use App\Admin\Controllers\System\AdminMenuController;
|
||||
use App\Admin\Controllers\System\AdminPermissionController;
|
||||
use App\Admin\Controllers\System\AdminRoleController;
|
||||
|
|
@ -39,6 +40,8 @@ Route::group([
|
|||
$router->delete('stores/{id}/employees', [StoreController::class, 'employeeDestroy']);
|
||||
// 门店管理
|
||||
$router->resource('stores', StoreController::class);
|
||||
// 彩票机管理
|
||||
$router->resource('devices', DeviceController::class);
|
||||
});
|
||||
|
||||
|
||||
|
|
@ -51,8 +54,9 @@ Route::group([
|
|||
'prefix' => 'hr',
|
||||
'as' => 'hr.',
|
||||
], function (Router $router) {
|
||||
// 人事管理
|
||||
// 员工管理
|
||||
$router->resource('employees', EmployeeController::class);
|
||||
// 员工离职
|
||||
$router->post('employees/{id}/leave', [EmployeeController::class, 'leave'])->name('employees.leave');
|
||||
});
|
||||
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ class Employee extends Model
|
|||
|
||||
const JOB_KEY = 'job';
|
||||
|
||||
protected $fillable = ['name', 'phone', 'prize_images', 'skill_images', 'employee_status', 'admin_user_id', 'leave_at', 'join_at'];
|
||||
protected $fillable = ['name', 'phone', 'prize_images', 'skill_images', 'employee_status', 'admin_user_id', 'leave_at', 'join_at', 'remarks'];
|
||||
|
||||
protected $casts = [
|
||||
'employee_status' => EmployeeStatus::class,
|
||||
|
|
|
|||
|
|
@ -0,0 +1,24 @@
|
|||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use EloquentFilter\Filterable;
|
||||
use App\Traits\HasDateTimeFormatter;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
/**
|
||||
* 设备
|
||||
*/
|
||||
class StoreDevice extends Model
|
||||
{
|
||||
use Filterable;
|
||||
use HasDateTimeFormatter;
|
||||
|
||||
protected $fillable = ['store_id', 'name', 'code', 'remarks'];
|
||||
|
||||
public function store()
|
||||
{
|
||||
return $this->belongsTo(Store::class, 'store_id');
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -21,6 +21,7 @@ return new class extends Migration
|
|||
$table->foreignId('admin_user_id')->comment('登录信息, 关联 admin_users.id');
|
||||
$table->timestamp('join_at')->nullable()->comment('入职时间');
|
||||
$table->timestamp('leave_at')->nullable()->comment('离职时间');
|
||||
$table->string('remarks')->nullable()->comment('备注');
|
||||
|
||||
$table->timestamps();
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,32 @@
|
|||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('store_devices', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->foreignId('store_id')->comment('关联门店, stores.id');
|
||||
$table->string('name')->comment('设备名称');
|
||||
$table->string('code')->comment('编号');
|
||||
$table->string('remarks')->nullable()->comment('备注');
|
||||
$table->timestamps();
|
||||
$table->comment('设备管理');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('store_devices');
|
||||
}
|
||||
};
|
||||
|
|
@ -44,6 +44,12 @@ class AdminPermissionSeeder extends Seeder
|
|||
'uri' => '/store/stores',
|
||||
'resource' => true,
|
||||
],
|
||||
'devices' => [
|
||||
'name' => '彩票机管理',
|
||||
'icon' => 'material-symbols:store-rounded',
|
||||
'uri' => '/store/devices',
|
||||
'resource' => true,
|
||||
]
|
||||
],
|
||||
],
|
||||
|
||||
|
|
|
|||
|
|
@ -14,6 +14,8 @@ return [
|
|||
'jobs' => '职位',
|
||||
'leave_at' => '离职时间',
|
||||
'leave' => '离职',
|
||||
'reback' => '重新入职',
|
||||
'join_at' => '入职时间',
|
||||
'leave_confirm' => '是否确定?',
|
||||
'remarks' => '备注',
|
||||
];
|
||||
|
|
|
|||
|
|
@ -0,0 +1,11 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
'id' => 'ID',
|
||||
'created_at' => '创建时间',
|
||||
'updated_at' => '更新时间',
|
||||
'remarks' => '备注',
|
||||
'store_id' => '门店',
|
||||
'name' => '名称',
|
||||
'code' => '编号',
|
||||
];
|
||||
Loading…
Reference in New Issue