'=', 'category_id' => '=', ]; protected array $quickSearchField = ['name', 'contact_name', 'contact_mobile']; #[GetRoute(authorize: 'query')] public function query(Request $request): JsonResponse { $params = $request->all(); $pageSize = $params['pageSize'] ?? 10; $query = MerchantStoreModel::query(); $data = $this->buildSearch($params, $query) ->paginate($pageSize) ->toArray(); return $this->success($data); } #[PostRoute(authorize: 'create')] public function create(MerchantStoreFormRequest $request): JsonResponse { $data = $request->validated(); // 检查用户名是否已存在 $username = $data['username']; if (SysUserModel::where('username', $username)->exists()) { return $this->error('用户名已存在'); } DB::beginTransaction(); try { // 创建管理员用户 $user = SysUserModel::create([ 'username' => $username, 'password' => Hash::make($data['password']), 'nickname' => $data['name'] ?? $username, 'status' => 1, ]); // 分配"商户"角色 $merchantRole = DB::table('sys_role')->where('name', '商户')->first(); if ($merchantRole) { DB::table('sys_user_role')->insert([ 'user_id' => $user->id, 'role_id' => $merchantRole->id, ]); } // 创建商户,关联用户 $data['user_id'] = $user->id; unset($data['username'], $data['password']); MerchantStoreModel::create($data); DB::commit(); return $this->success(); } catch (\Exception $e) { DB::rollBack(); return $this->error('创建商户失败:' . $e->getMessage()); } } #[PutRoute( route: '/{id}', authorize: 'update', where: ['id' => '[0-9]+'] )] public function update(int $id, MerchantStoreFormRequest $request): JsonResponse { $model = MerchantStoreModel::find($id); if (empty($model)) { return $this->error('商户不存在'); } $data = $request->validated(); // 更新时不允许通过此接口修改 username/password/user_id unset($data['username'], $data['password'], $data['user_id']); $model->update($data); return $this->success(); } #[DeleteRoute( route: '/{id}', authorize: 'delete', where: ['id' => '[0-9]+'] )] public function delete(int $id): JsonResponse { $model = MerchantStoreModel::find($id); if (empty($model)) { return $this->error('商户不存在'); } $model->delete(); return $this->success(); } }