main
panliang 2024-04-22 12:08:50 +08:00
parent 058b6b1e41
commit 287f709635
11 changed files with 54 additions and 47 deletions

View File

@ -57,3 +57,5 @@ VITE_PUSHER_HOST="${PUSHER_HOST}"
VITE_PUSHER_PORT="${PUSHER_PORT}"
VITE_PUSHER_SCHEME="${PUSHER_SCHEME}"
VITE_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
BAIDU_JS_SECRET=

View File

@ -53,6 +53,7 @@ class SignController extends AdminController
amisMake()->TableColumn()->name('remarks')->label(__('employee_sign.remarks')),
$this->rowActions([
$this->rowShowButton()->visible(Admin::user()->can('admin.hr.signs.view')),
$this->rowDeleteButton()->visible(Admin::user()->can('admin.hr.signs.delete')),
]),
]);
@ -80,13 +81,13 @@ class SignController extends AdminController
amisMake()->BaseApi()->method('get')->url(admin_url('api/employee-sign-logs'))->data(['date' => '${date}', 'employee_id' => '${employee_id}'])
)
->body(
amisMake()->Table()->columns([
amisMake()->Table()->columnsTogglable(false)->columns([
amisMake()->TableColumn()->name('sign_time')->label(__('employee_sign_log.sign_time'))->set('type', 'mapping')->map(SignTime::options()),
amisMake()->TableColumn()->name('time')->label(__('employee_sign_log.time')),
amisMake()->TableColumn()->name('sign_type')->label(__('employee_sign_log.sign_type'))->set('type', 'mapping')->map(SignType::options()),
amisMake()->TableColumn()->name('remarks')->label(__('employee_sign_log.remarks')),
amisMake()->TableColumn()->name('position.address')->label(__('employee_sign_log.position')),
amisMake()->TableColumn()->name('is_repair')->label(__('employee_sign_log.is_repair'))->set('type', 'status'),
amisMake()->TableColumn()->name('is_repair')->label(__('employee_sign_log.is_repair'))->set('type', 'mapping')->map(['否', '是']),
])
);

View File

@ -103,7 +103,7 @@ class StoreController extends AdminController
->valueField('key')
->required(),
amisMake()->InputCityControl()->name('region')->label(__('store.region'))->allowDistrict(false)->extractValue(false)->required(),
amisMake()->LocationControl()->name('location')->label(__('store.location'))->ak('xDTLJ15QG6zt3f6VQcaNBfN8q3MsWBsE')->autoSelectCurrentLoc(),
amisMake()->LocationControl()->name('location')->label(__('store.location'))->ak(config('baidu.js_secret'))->autoSelectCurrentLoc(),
]);
}

View File

@ -42,8 +42,10 @@ class EmployeeService extends BaseService
$model = $this->modelName::create($data);
if (isset($data['jobs']) && is_string($data['jobs'])) {
$this->resloveJob($model, explode(',', $data['jobs']));
// 职位修改
if (isset($data['jobs'])) {
$jobs = is_array($data['jobs']) ? $data['jobs'] : explode(',', $data['jobs']);
$model->jobs()->sync($jobs);
}
return true;
@ -66,8 +68,10 @@ class EmployeeService extends BaseService
return $this->setError($adminUserService->getError());
}
if (isset($data['jobs']) && is_string($data['jobs'])) {
$this->resloveJob($model, explode(',', $data['jobs']));
// 职位修改
if (isset($data['jobs'])) {
$jobs = is_array($data['jobs']) ? $data['jobs'] : explode(',', $data['jobs']);
$model->jobs()->sync($jobs);
}
return $model->update($data);
@ -98,41 +102,27 @@ class EmployeeService extends BaseService
return true;
}
/**
* 处理职位关联
*
* @param Employee $model
* @param array $jobs(字典表 key 组成的数组)
*/
public function resloveJob($model, $jobs)
{
$model->jobs()->sync($jobs);
}
public function preDelete(array $ids): void
{
if (in_array(1, $ids)) {
admin_abort('超级管理员不能删除');
}
// 无打卡记录
if (EmployeeSignLog::whereIn('employee_id', $ids)->exists()) {
admin_abort('请先删除员工打卡记录');
}
// 无请假申请
if (HolidayApply::whereIn('employee_id', $ids)->exists()) {
admin_abort('请先删除员工打卡记录');
admin_abort('请先删除员工请假申请');
}
// 无出差申请
if (OfficalBusiness::whereIn('employee_id', $ids)->exists()) {
admin_abort('请先删除员工打卡记录');
admin_abort('请先删除员工出差申请');
}
// 加班申请
if (OvertimeApply::whereIn('employee_id', $ids)->exists()) {
admin_abort('请先删除员工打卡记录');
admin_abort('请先删除员工加班申请');
}
// 店员关联
if (DB::table('store_employees')->whereIn('employee_id', $ids)->exists()) {
if (Employee::whereIn('id', $ids)->where('store_id', '>', 0)->exists()) {
admin_abort('员工已关联门店, 请先从门店中删除');
}
@ -149,7 +139,7 @@ class EmployeeService extends BaseService
{
$createRules = [
'name' => ['required'],
'phone' => ['required'],
'phone' => ['required', 'phone'],
'username' => ['required'],
'password' => ['required'],
];

View File

@ -3,13 +3,8 @@
namespace App\Admin\Services;
use App\Admin\Filters\EmployeeSignFilter;
use App\Enums\SignStatus;
use App\Enums\SignTime;
use App\Enums\SignType;
use App\Models\Employee;
use App\Models\EmployeeRest;
use App\Models\EmployeeSign;
use App\Models\EmployeeSignLog;
use App\Enums\{SignStatus, SignTime, SignType};
use App\Models\{Employee, EmployeeRest, EmployeeSign, EmployeeSignLog, EmployeeSignRepair};
use Carbon\Carbon;
class EmployeeSignService extends BaseService
@ -20,6 +15,14 @@ class EmployeeSignService extends BaseService
protected string $modelFilterName = EmployeeSignFilter::class;
public function preDelete(array $ids): void
{
// 删除打卡日志
EmployeeSignLog::whereIn('employee_id', $ids)->delete();
// 删除补卡申请
EmployeeSignRepair::whereIn('employee_id', $ids)->delete();
}
/**
* 整理昨天的打卡流水, 生成对应的打卡记录
*/

View File

@ -88,7 +88,7 @@ Route::group([
// 休息管理
$router->resource('rests', RestController::class)->only(['index', 'create', 'store', 'destroy']);
// 打卡情况
$router->resource('signs', SignController::class)->only(['index', 'show']);
$router->resource('signs', SignController::class)->only(['index', 'show', 'destroy']);
// 补卡申请
$router->resource('repairs', SignRepairController::class);
// 请假申请

View File

@ -5,6 +5,7 @@ namespace App\Providers;
use Illuminate\Database\Eloquent\Relations\Relation;
use Illuminate\Http\Resources\Json\JsonResource;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Validator;
class AppServiceProvider extends ServiceProvider
{
@ -24,6 +25,10 @@ class AppServiceProvider extends ServiceProvider
JsonResource::withoutWrapping();
$this->definePolymorphicTypes();
Validator::extend('phone', function ($attribute, $value, $parameters, $validator) {
return preg_match('/^1[\d]{10}$/', $value);
});
}
/**

5
config/baidu.php 100644
View File

@ -0,0 +1,5 @@
<?php
return [
'js_secret' => env('BAIDU_JS_SECRET', 'xDTLJ15QG6zt3f6VQcaNBfN8q3MsWBsE'),
];

View File

@ -135,7 +135,7 @@ class AdminPermissionSeeder extends Seeder
'name' => '考勤打卡',
'icon' => 'material-symbols:calendar-clock-outline',
'uri' => '/hr/signs',
'resource' => ['list', 'view'],
'resource' => ['list', 'view'. 'delete'],
'order' => 4,
],
'repairs' => [

View File

@ -22,15 +22,15 @@ class AdminSeeder extends Seeder
'password' => bcrypt('admin'),
'name' => 'Administrator',
]);
DB::table('employees')->truncate();
DB::table('employees')->insert([
'name' => 'admin',
'phone' => '12345678900',
'admin_user_id' => 1,
'join_at' => $now,
'created_at' => $now,
'updated_at' => $now,
]);
// DB::table('employees')->truncate();
// DB::table('employees')->insert([
// 'name' => 'admin',
// 'phone' => '12345678900',
// 'admin_user_id' => 1,
// 'join_at' => $now,
// 'created_at' => $now,
// 'updated_at' => $now,
// ]);
// 创建初始角色
DB::table('admin_roles')->truncate();

View File

@ -13,9 +13,10 @@ class WorkflowSeeder extends Seeder
public function run(): void
{
$now = now();
$config = json_encode([
['sort' => 1, 'type' => 'user', 'user' => 1, 'title' => '员工', 'value' => 1, 'subTitle' => 'Admin'],
]);
// $config = json_encode([
// ['sort' => 1, 'type' => 'user', 'user' => 1, 'title' => '员工', 'value' => 1, 'subTitle' => 'Admin'],
// ]);
$config = null;
Workflow::truncate();
Workflow::insert([
['key' => 'employee_sign_repair', 'name' => '补卡申请', 'config' => $config, 'created_at' => now(), 'updated_at' => now()],