修复编码格式

dev
Jing Li 2022-10-19 10:30:40 +08:00
parent 7a0b6e3b17
commit 1032ab2633
45 changed files with 284 additions and 231 deletions

View File

@ -2,22 +2,22 @@
namespace App\Http\Controllers;
use App\Helpers\Paginator;
use Illuminate\Http\Request;
use App\Models\AdminPermission;
use Illuminate\Http\Request;
class AdminPermissionController extends Controller
{
public function index(Request $request)
{
$permissions = (new AdminPermission())->toTree(AdminPermission::endPoint()->get());
return $this->json($this->formatPermissionsTreeToArray($permissions));
}
/**
* 格式化树
*
* @param array $permissions
* @param array $permissions
* @return void
*/
protected function formatPermissionsTreeToArray(array $permissions)
@ -25,11 +25,12 @@ class AdminPermissionController extends Controller
$res = [];
foreach ($permissions as $permission) {
$res[] = [
'id' => $permission->id,
'label' => $permission->name,
'children' => $this->formatPermissionsTreeToArray($permission->children ?? []),
'id' => $permission->id,
'label' => $permission->name,
'children' => $this->formatPermissionsTreeToArray($permission->children ?? []),
];
}
return $res;
}
}

View File

@ -2,12 +2,12 @@
namespace App\Http\Controllers;
use App\Models\AdminRole;
use App\Helpers\Paginator;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use App\Http\Requestes\AdminRoleRequest;
use App\Http\Resources\AdminRoleResource;
use App\Models\AdminRole;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class AdminRoleController extends Controller
{
@ -15,6 +15,7 @@ class AdminRoleController extends Controller
{
$query = AdminRole::filter($request->input())->where('id', '>', '1');
$list = $query->simplePaginate(Paginator::resolvePerPage('per_page', 20, 50));
return $this->json(AdminRoleResource::collection($list));
}
@ -22,26 +23,30 @@ class AdminRoleController extends Controller
{
$permissionIds = $request->input('permission_ids', []);
//验证slug唯一
if(AdminRole::where('slug', $request->input('slug'))->exists()){
if (AdminRole::where('slug', $request->input('slug'))->exists()) {
return $this->error('该角色编码已存在');
}
try{
try {
DB::beginTransaction();
//添加角色信息
$role = AdminRole::create($request->input());
//添加角色权限
$role->permissions()->sync($permissionIds);
DB::commit();
}catch(\Throwable $th){
} catch(\Throwable $th) {
DB::rollBack();
report($th);
return $this->error('添加失败,请稍后再试');
}
return $this->success('添加成功');
}
public function show(AdminRole $adminRole){
public function show(AdminRole $adminRole)
{
$adminRole->load('permissions');
return $this->json(AdminRoleResource::make($adminRole));
}
@ -49,35 +54,40 @@ class AdminRoleController extends Controller
{
$permissionIds = $request->input('permission_ids', []);
//验证slug唯一
if(AdminRole::where('slug', $request->input('slug'))->where('id', '<>', $adminRole->id)->exists()){
if (AdminRole::where('slug', $request->input('slug'))->where('id', '<>', $adminRole->id)->exists()) {
return $this->error('该角色编码已存在');
}
try{
try {
DB::beginTransaction();
//添加角色信息
$adminRole->update($request->input());
//添加角色权限
$adminRole->permissions()->sync($permissionIds);
DB::commit();
}catch(\Throwable $th){
} catch(\Throwable $th) {
DB::rollBack();
report($th);
return $this->error('添加失败,请稍后再试');
}
return $this->success('添加成功');
}
public function destroy(AdminRole $adminRole){
try{
public function destroy(AdminRole $adminRole)
{
try {
DB::beginTransaction();
$adminRole->permissions()->sync([]);
$adminRole->delete();
DB::commit();
}catch(\Throwable $th){
} catch(\Throwable $th) {
DB::rollBack();
report($th);
return $this->error('删除失败,请稍后再试');
}
return $this->success('删除成功!');
}
}

View File

@ -2,31 +2,32 @@
namespace App\Http\Controllers;
use App\Models\AdminUser;
use App\Helpers\Paginator;
use App\Http\Requestes\AdminUserRequest;
use App\Http\Requestes\AdminUserUpdateRequest;
use App\Http\Requestes\RestPasswordRequest;
use App\Http\Resources\AdminUserResource;
use App\Models\AdminUser;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use App\Http\Requestes\AdminUserRequest;
use App\Http\Resources\AdminUserResource;
use App\Http\Requestes\RestPasswordRequest;
use App\Http\Requestes\AdminUserUpdateRequest;
class AdminUserController extends Controller
{
public function index(Request $request)
{
$query = AdminUser::filter($request->all())->where('id', '>', 1);
$list = $query->simplePaginate(Paginator::resolvePerPage('per_page', 20, 50)) ;
$list = $query->simplePaginate(Paginator::resolvePerPage('per_page', 20, 50));
return $this->json(AdminUserResource::collection($list));
}
public function store(AdminUserRequest $request)
{
$baseIds = $request->input('base_ids', []);
if(AdminUser::where('username', $request->input('username'))->exists()){
if (AdminUser::where('username', $request->input('username'))->exists()) {
return $this->error('该登录名已存在');
}
try{
try {
DB::beginTransaction();
//添加管理员信息
$input = $request->input();
@ -37,25 +38,28 @@ class AdminUserController extends Controller
//添加管理员角色关联;
$user->roles()->sync($request->input('role_id'));
DB::commit();
}catch(\Throwable $th){
} catch(\Throwable $th) {
DB::rollBack();
report($th);
return $this->error('添加失败,请稍后再试');
}
return $this->success('添加成功');
}
public function show(AdminUser $adminUser){
public function show(AdminUser $adminUser)
{
return $this->json(AdminUserResource::make($adminUser));
}
public function update(AdminUser $adminUser, AdminUserUpdateRequest $request)
{
$baseIds = $request->input('base_ids', []);
if(AdminUser::where('username', $request->input('username'))->where('id', '<>', $adminUser->id)->exists()){
if (AdminUser::where('username', $request->input('username'))->where('id', '<>', $adminUser->id)->exists()) {
return $this->error('该登录名已存在');
}
try{
try {
DB::beginTransaction();
//添加管理员信息
$adminUser->update($request->input());
@ -64,56 +68,64 @@ class AdminUserController extends Controller
//添加管理员角色关联;
$adminUser->roles()->sync($request->input('role_id'));
DB::commit();
}catch(\Throwable $th){
} catch(\Throwable $th) {
DB::rollBack();
report($th);
return $this->error('修改失败,请稍后再试');
}
return $this->success('修改成功!');
}
public function destroy(AdminUser $adminUser){
if($adminUser->id == 1){
public function destroy(AdminUser $adminUser)
{
if ($adminUser->id == 1) {
return $this->error('删除失败,请稍后再试');
}
try{
try {
DB::beginTransaction();
$adminUser->crops()->sync([]);
$adminUser->roles()->sync([]);
$adminUser->delete();
DB::commit();
}catch(\Throwable $th){
} catch(\Throwable $th) {
DB::rollBack();
report($th);
return $this->error('删除失败,请稍后再试');
}
return $this->success('删除成功!');
}
/**
* 启用/禁用
*
* @param AdminUser $adminUser
* @param AdminUser $adminUser
* @return void
*/
public function endable(AdminUser $adminUser){
if($adminUser->id == 1){
public function endable(AdminUser $adminUser)
{
if ($adminUser->id == 1) {
return $this->error('操作失败,请稍后再试');
}
$adminUser->update([
'is_enable' => (int) !$adminUser->is_enable
'is_enable' => (int) ! $adminUser->is_enable,
]);
return $this->success('操作成功!');
}
public function editPassword(AdminUser $adminUser, RestPasswordRequest $request){
if($adminUser->id == 1){
public function editPassword(AdminUser $adminUser, RestPasswordRequest $request)
{
if ($adminUser->id == 1) {
return $this->error('操作失败,请稍后再试');
}
$adminUser->update([
'password' => bcrypt($request->input('password'))
'password' => bcrypt($request->input('password')),
]);
return $this->success('修改成功!');
}
}

View File

@ -3,75 +3,87 @@
namespace App\Http\Controllers;
use App\Helpers\Paginator;
use Illuminate\Http\Request;
use App\Models\AgriculturalBase;
use Illuminate\Support\Facades\DB;
use App\Http\Requestes\AgriculturalBaseRequest;
use App\Http\Resources\AgriculturalBaseResource;
use App\Models\AgriculturalBase;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class AgriculturalBaseController extends Controller
{
/**
* 基地数据列表
*
* @param Request $request
* @param Request $request
* @return void
*/
public function index(Request $request){
public function index(Request $request)
{
$query = AgriculturalBase::with('crops')->filter($request->all())->sort();
$list = $query->simplePaginate(Paginator::resolvePerPage('per_page', 20, 50)) ;
$list = $query->simplePaginate(Paginator::resolvePerPage('per_page', 20, 50));
return AgriculturalBaseResource::collection($list);
}
public function store(AgriculturalBaseRequest $request){
public function store(AgriculturalBaseRequest $request)
{
$cropsIds = $request->input('crops_ids', []);
try{
try {
DB::beginTransaction();
//添加基地信息
$base = AgriculturalBase::create($request->input());
//添加基地农作物
$base->crops()->sync($cropsIds);
DB::commit();
}catch(\Throwable $th){
} catch(\Throwable $th) {
DB::rollBack();
report($th);
return $this->error('添加失败,请稍后再试');
}
return $this->success('添加成功!');
}
public function show(AgriculturalBase $agriculturalBasic){
public function show(AgriculturalBase $agriculturalBasic)
{
return $this->json(AgriculturalBaseResource::make($agriculturalBasic));
}
public function update(AgriculturalBase $agriculturalBasic, AgriculturalBaseRequest $request){
public function update(AgriculturalBase $agriculturalBasic, AgriculturalBaseRequest $request)
{
$cropsIds = $request->input('crops_ids', []);
try{
try {
DB::beginTransaction();
//添加基地信息
$agriculturalBasic->update($request->input());
//添加基地农作物
$agriculturalBasic->crops()->sync($cropsIds);
DB::commit();
}catch(\Throwable $th){
} catch(\Throwable $th) {
DB::rollBack();
report($th);
return $this->error('修改失败,请稍后再试');
}
return $this->success('修改成功!');
}
public function destroy(AgriculturalBase $agriculturalBasic){
try{
public function destroy(AgriculturalBase $agriculturalBasic)
{
try {
DB::beginTransaction();
$agriculturalBasic->crops()->sync([]);
$agriculturalBasic->delete();
DB::commit();
}catch(\Throwable $th){
} catch(\Throwable $th) {
DB::rollBack();
report($th);
return $this->error('删除失败,请稍后再试');
}
return $this->success('删除成功!');
}
}

View File

@ -23,7 +23,7 @@ class AuthController extends Controller
return $this->error('用户名或密码错误');
}
if($user->is_enable !== 1){
if ($user->is_enable !== 1) {
return $this->error('用户状态异常请联系管理员');
}
@ -33,6 +33,7 @@ class AuthController extends Controller
protected function attemptUser(AdminUser $user, $name = 'api')
{
$token = $user->createToken($name)->plainTextToken;
return $this->json(['token' => $token, 'info' => $user, 'permissions' => $user->permissionIds()]);
}
}

View File

@ -2,21 +2,22 @@
namespace App\Http\Controllers;
use App\Models\CropFlow;
use App\Helpers\Paginator;
use Illuminate\Http\Request;
use App\Http\Requestes\CropFlowRequest;
use App\Http\Resources\CropFlowResource;
use App\Http\Requestes\CropFlowUpdateRequest;
use App\Http\Resources\CropFlowResource;
use App\Models\CropFlow;
use Illuminate\Http\Request;
class CropFlowController extends Controller
{
public function index(Request $request)
{
$query = CropFlow::filter($request->input());
$totalNum = $query->sum('sale');//总产量
$totalNum = $query->sum('sale'); //总产量
$list = $query->simplePaginate(Paginator::resolvePerPage('per_page', 20, 50));
$list->load(['createdBy']);
return $this->json([
'total' => $totalNum,
'list' => CropFlowResource::collection($list),
@ -26,7 +27,7 @@ class CropFlowController extends Controller
public function store(CropFlowRequest $request)
{
$flows = $request->input('flows');
CropFlow::insert(array_map(function($item) use ($request){
CropFlow::insert(array_map(function ($item) use ($request) {
return array_merge($item, [
'time_year' => $request->input('time_year'),
'crop_id' => $request->input('crop_id'),
@ -36,26 +37,30 @@ class CropFlowController extends Controller
'updated_at' => now(),
]);
}, $flows));
return $this->success('添加成功');
}
public function show(CropFlow $cropFlow)
{
$cropFlow->load(['crop', 'user']);
return $this->json(CropFlowResource::make($cropFlow));
}
public function update(CropFlow $cropFlow, CropFlowUpdateRequest $request)
{
$cropFlow->update(array_merge($request->input(),
['updated_by'=>auth('api')->user()?->id ?? 0,]
['updated_by' => auth('api')->user()?->id ?? 0]
));
return $this->success('修改成功');
}
public function destroy(CropFlow $cropFlow)
{
$cropFlow->delete();
return $this->success('删除成功');
}
}

View File

@ -2,11 +2,11 @@
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\CropStructure;
use App\Http\Requestes\CropStructureRequest;
use App\Http\Resources\CropStructureResource;
use App\Http\Requestes\CropStructureUpdateRequest;
use App\Http\Resources\CropStructureResource;
use App\Models\CropStructure;
use Illuminate\Http\Request;
class CropStructureController extends Controller
{
@ -14,24 +14,25 @@ class CropStructureController extends Controller
{
$list = CropStructure::with('cropsCate')->filter($request->input())->get();
$totalOutput = $list->sum('crops_output');
return $this->json([
'totalOutput' => $totalOutput,
'list' => array_map(function($item) use ($totalOutput){
'list' => array_map(function ($item) use ($totalOutput) {
return [
'id'=> $item['id'],
'id' => $item['id'],
'cate_name' => $item['crops_cate']['name'] ?? '',
'cate_rate' => $totalOutput ? bcdiv($item['crops_output'],$totalOutput, 4) * 100 : 0,
'cate_rate' => $totalOutput ? bcdiv($item['crops_output'], $totalOutput, 4) * 100 : 0,
'year' => $item['time_year'],
'crops_output' => number_format($item['crops_output']),
];
}, $list->toArray())
}, $list->toArray()),
]);
}
public function store(CropStructureRequest $request)
{
$structures = $request->input('structures');
CropStructure::insert(array_map(function($item) use ($request){
CropStructure::insert(array_map(function ($item) use ($request) {
return array_merge($item, [
'time_year' => $request->input('time_year'),
'created_at' => now(),
@ -42,8 +43,10 @@ class CropStructureController extends Controller
return $this->success('添加成功');
}
public function show(CropStructure $cropStructure){
public function show(CropStructure $cropStructure)
{
$cropStructure->load('cropsCate');
return $this->json(CropStructureResource::make($cropStructure));
}

View File

@ -2,31 +2,32 @@
namespace App\Http\Controllers;
use App\Models\CropYield;
use App\Helpers\Paginator;
use Illuminate\Http\Request;
use App\Http\Requestes\CropYieldRequest;
use App\Http\Resources\CropYieldResource;
use App\Http\Requestes\CropYieldUpdateRequest;
use App\Http\Resources\CropYieldResource;
use App\Models\CropYield;
use Illuminate\Http\Request;
class CropYieldController extends Controller
{
public function index(Request $request)
{
$query = CropYield::filter($request->all());
$totalNum = $query->sum('yield');//总产量
$totalNum = $query->sum('yield'); //总产量
$list = $query->simplePaginate(Paginator::resolvePerPage('per_page', 20, 50));
$list->load(['base', 'createdBy']);
return $this->json([
'total' => $totalNum,
'list' => CropYieldResource::collection($list)
'list' => CropYieldResource::collection($list),
]);
}
public function store(CropYieldRequest $request)
{
$yields = $request->input('yields');
CropYield::insert(array_map(function($item) use ($request){
CropYield::insert(array_map(function ($item) use ($request) {
return array_merge($item, [
'time_year' => $request->input('time_year'),
'crop_id' => $request->input('crop_id'),
@ -36,26 +37,30 @@ class CropYieldController extends Controller
'updated_at' => now(),
]);
}, $yields));
return $this->success('添加成功');
}
public function show(CropYield $cropYield)
{
$cropYield->load(['base', 'crop', 'createdBy']);
return $this->json(CropYieldResource::make($cropYield));
}
public function update(CropYield $cropYield, CropYieldUpdateRequest $request)
{
$cropYield->update(array_merge($request->input(),
['updated_by'=>auth('api')->user()?->id ?? 0,]
['updated_by' => auth('api')->user()?->id ?? 0]
));
return $this->success('修改成功');
}
public function destroy(CropYield $cropYield)
{
$cropYield->delete();
return $this->success('删除成功');
}
}

View File

@ -2,12 +2,12 @@
namespace App\Http\Controllers;
use App\Models\Device;
use App\Enums\DeviceType;
use App\Helpers\Paginator;
use Illuminate\Http\Request;
use App\Http\Requestes\DeviceRequest;
use App\Http\Resources\DeviceResource;
use App\Models\Device;
use Illuminate\Http\Request;
class DeviceController extends Controller
{
@ -15,6 +15,7 @@ class DeviceController extends Controller
{
$query = Device::with('base')->filter($request->input());
$list = $query->simplePaginate(Paginator::resolvePerPage('per_page', 20, 50));
return $this->json(DeviceResource::collection($list));
}
@ -22,13 +23,14 @@ class DeviceController extends Controller
{
$input = $request->input();
//如果不是监控设备移除extends
if($input['type'] != DeviceType::Monitor->value){
if ($input['type'] != DeviceType::Monitor->value) {
unset($input['extends']);
}
Device::create(array_merge($input, [
'created_by' => auth('api')->user()?->id ?? 0,
'updated_by' => auth('api')->user()?->id ?? 0,
]));
return $this->success('添加成功');
}
@ -41,22 +43,25 @@ class DeviceController extends Controller
{
$input = $request->input();
//如果不是监控设备移除extends
if($input['type'] != DeviceType::Monitor->value){
if ($input['type'] != DeviceType::Monitor->value) {
$input['extends'] = null;
}
$device->update(array_merge($input, [
'updated_by' => auth('api')->user()?->id ?? 0,
]));
return $this->success('修改成功');
}
public function destroy(Device $device)
{
$device->delete();
return $this->success('删除成功');
}
public function types(){
public function types()
{
return $this->json(DeviceType::types());
}
}

View File

@ -9,6 +9,7 @@ class UserController extends Controller
public function info()
{
$user = auth('api')->user();
return $this->json(['info' => $user, 'permissions' => $user->permissionIds()]);
}

View File

@ -35,14 +35,14 @@ class AdminUserRequest extends FormRequest
'username.alpha_num' => '用户名只能由字母和数字组成',
'username.max' => '用户名最长100位',
'password.required' => '请填写登录密码',
'password.string'=> '请正确填写密码',
'password.string' => '请正确填写密码',
'password.min' => '密码长度不能低于6位',
'password.max' => '密码长度不能超过32位',
'name.required' => '请填写名称',
'name.string' =>'请正确填写名称',
'name.string' => '请正确填写名称',
'name.max' => '名称长度不能超过100位',
'status' => '请选择用户状态',
'role_id' => "请选择角色"
'role_id' => '请选择角色',
];
return $messages;

View File

@ -34,10 +34,10 @@ class AdminUserUpdateRequest extends FormRequest
'username.alpha_num' => '用户名只能由字母和数字组成',
'username.max' => '用户名最长100位',
'name.required' => '请填写名称',
'name.string' =>'请正确填写名称',
'name.string' => '请正确填写名称',
'name.max' => '名称长度不能超过100位',
'status' => '请选择用户状态',
'role_id' => "请选择角色"
'role_id' => '请选择角色',
];
return $messages;

View File

@ -19,7 +19,7 @@ class AgriculturalBaseRequest extends FormRequest
'name' => 'required|string|max:100',
'description' => 'nullable|string',
'person' => 'required|string|max:100',
'crops_ids'=> 'required|array|min:1',
'crops_ids' => 'required|array|min:1',
'areas' => 'required|regex:/^\d+(\.\d{1,2})?$/',
'workforce' => 'required|integer|min:0',
'address' => 'nullable|string',
@ -33,16 +33,16 @@ class AgriculturalBaseRequest extends FormRequest
$messages = [
'name.required' => '请填写基地名称',
'name.max' => '基地名称不能超过100字',
'description.string'=>'请正确填写基地介绍',
'description.string' => '请正确填写基地介绍',
'person.required' => '请填写基地负责人名称',
'person.max' => '基地负责人名称不能超过100字',
'crops_ids.required' => '请选择农作物',
'crops_ids.min'=>'至少选择一种农作物',
'crops_ids.min' => '至少选择一种农作物',
'areas.required' => '请填写基地面积',
'areas.regex' => '请正确填写基地面积',
'workforce.required' => '请填写就业人数',
'workforce.min' => '就业人数最小为0',
'address.string'=>'请正确填写基地地址',
'address.string' => '请正确填写基地地址',
'address_lat.regex' => '请正确填写经度',
'address_lng.regex' => '请正确填写纬度',
];

View File

@ -17,9 +17,9 @@ class CropFlowRequest extends FormRequest
{
return [
'time_year' => 'required|date_format:Y',
'crop_id' => 'required|integer|min:0',
'crop_id' => 'required|integer|min:0',
'flows' => 'required|array|min:1',
'flows.*'=>'required_array_keys:flow_name,sale'
'flows.*' => 'required_array_keys:flow_name,sale',
];
}

View File

@ -17,9 +17,9 @@ class CropFlowUpdateRequest extends FormRequest
{
return [
'time_year' => 'required|date_format:Y',
'crop_id' => 'required|integer|min:0',
'sale' => 'required|regex:/^\d+(\.\d{1,2})?$/',
'flow_name'=> 'required|string|max:100',
'crop_id' => 'required|integer|min:0',
'sale' => 'required|regex:/^\d+(\.\d{1,2})?$/',
'flow_name' => 'required|string|max:100',
];
}

View File

@ -18,7 +18,7 @@ class CropStructureRequest extends FormRequest
return [
'time_year' => 'required|date_format:Y',
'structures' => 'required|array|min:1',
'structures.*'=>'required_array_keys:crops_cate_id,crops_output'
'structures.*' => 'required_array_keys:crops_cate_id,crops_output',
];
}
@ -26,7 +26,7 @@ class CropStructureRequest extends FormRequest
{
$messages = [
'time_year' => '请选择年份',
'structures' => '请填写产业及产值'
'structures' => '请填写产业及产值',
];
return $messages;

View File

@ -17,8 +17,8 @@ class CropStructureUpdateRequest extends FormRequest
{
return [
'time_year' => 'required|date_format:Y',
'crops_cate_id' =>'required|integer|min:1',
'crops_output' => 'required|regex:/^\d+(\.\d{1,2})?$/'
'crops_cate_id' => 'required|integer|min:1',
'crops_output' => 'required|regex:/^\d+(\.\d{1,2})?$/',
];
}
@ -27,7 +27,7 @@ class CropStructureUpdateRequest extends FormRequest
$messages = [
'time_year' => '请选择年份',
'crops_cate_id' => '请选择产业',
'crops_output' => '请填写产值'
'crops_output' => '请填写产值',
];
return $messages;

View File

@ -17,9 +17,9 @@ class CropYieldRequest extends FormRequest
{
return [
'time_year' => 'required|date_format:Y',
'crop_id' => 'required|integer|min:0',
'crop_id' => 'required|integer|min:0',
'yields' => 'required|array|min:1',
'yields.*'=>'required_array_keys:base_id,yield,cultivated,output'
'yields.*' => 'required_array_keys:base_id,yield,cultivated,output',
];
}

View File

@ -17,11 +17,11 @@ class CropYieldUpdateRequest extends FormRequest
{
return [
'time_year' => 'required|date_format:Y',
'crop_id' => 'required|integer|min:0',
'base_id' => 'required|integer|min:0',
'yield' => 'required|regex:/^\d+(\.\d{1,2})?$/',
'cultivated'=> 'required|regex:/^\d+(\.\d{1,2})?$/',
'output' => 'required|regex:/^\d+(\.\d{1,2})?$/'
'crop_id' => 'required|integer|min:0',
'base_id' => 'required|integer|min:0',
'yield' => 'required|regex:/^\d+(\.\d{1,2})?$/',
'cultivated' => 'required|regex:/^\d+(\.\d{1,2})?$/',
'output' => 'required|regex:/^\d+(\.\d{1,2})?$/',
];
}

View File

@ -3,10 +3,10 @@
namespace App\Http\Requestes;
use App\Enums\DeviceType;
use Illuminate\Validation\Rules\Enum;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Contracts\Validation\Validator;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Http\Exceptions\HttpResponseException;
use Illuminate\Validation\Rules\Enum;
class DeviceRequest extends FormRequest
{
@ -18,17 +18,17 @@ class DeviceRequest extends FormRequest
public function rules()
{
return [
'type' => ['required', new Enum(DeviceType::class)],
'agricultural_base_id' => 'required|integer|min:0',
'sn' => 'required|string|max:64',
'monitoring_point' => 'required|string|max:100',
'extends' => 'required_if:type,1',
'extends.ip'=> 'required_if:type,1|string',
'extends.port'=> 'required_if:type,1|string',
'extends.rtsp_url'=> 'required_if:type,1|string',
'extends.username'=> 'required_if:type,1|string',
'extends.password'=> 'required_if:type,1|string',
'extends.passage'=> 'required_if:type,1|string',
'type' => ['required', new Enum(DeviceType::class)],
'agricultural_base_id' => 'required|integer|min:0',
'sn' => 'required|string|max:64',
'monitoring_point' => 'required|string|max:100',
'extends' => 'required_if:type,1',
'extends.ip' => 'required_if:type,1|string',
'extends.port' => 'required_if:type,1|string',
'extends.rtsp_url' => 'required_if:type,1|string',
'extends.username' => 'required_if:type,1|string',
'extends.password' => 'required_if:type,1|string',
'extends.passage' => 'required_if:type,1|string',
];
}
@ -36,16 +36,16 @@ class DeviceRequest extends FormRequest
{
$messages = [
'type' => '请选择设备类型',
'agricultural_base_id' => '请选择基地',
'sn' => '请填写设备编号',
'agricultural_base_id' => '请选择基地',
'sn' => '请填写设备编号',
'monitoring_point' => '请填写监控点',
'extends.required_if' =>'请填写监控设备信息',
'extends.ip.required_if' =>'请填写监控设备IP',
'extends.port.required_if' =>'请填写监控设备端口',
'extends.rtsp_url.required_if' =>'请填写监控设备RTSP地址',
'extends.username.required_if' =>'请填写监控设备登录名',
'extends.password.required_if' =>'请填写监控设备登录密码',
'extends.passage.required_if' =>'请填写监控设备播放通道',
'extends.required_if' => '请填写监控设备信息',
'extends.ip.required_if' => '请填写监控设备IP',
'extends.port.required_if' => '请填写监控设备端口',
'extends.rtsp_url.required_if' => '请填写监控设备RTSP地址',
'extends.username.required_if' => '请填写监控设备登录名',
'extends.password.required_if' => '请填写监控设备登录密码',
'extends.passage.required_if' => '请填写监控设备播放通道',
];
return $messages;

View File

@ -25,7 +25,7 @@ class RestPasswordRequest extends FormRequest
{
$messages = [
'password.required' => '请填写登录密码',
'password.string'=> '请正确填写密码',
'password.string' => '请正确填写密码',
'password.min' => '密码长度不能低于6位',
'password.max' => '密码长度不能超过32位',
'password.confirmed' => '两次密码不一致',

View File

@ -3,22 +3,21 @@
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
use Peidikeji\Keywords\Http\Resources\KeywordResource;
class AdminRoleResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @param \Illuminate\Http\Request $request
* @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable
*/
public function toArray($request)
{
return [
'id' => $this->id,
'id' => $this->id,
'name' => $this->name,
'slug'=> $this->slug,
'slug' => $this->slug,
'permissions' => $this->whenLoaded('permissions', function () {
return $this->permissions->pluck('id');
}, ''),

View File

@ -3,27 +3,26 @@
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
use Peidikeji\Keywords\Http\Resources\KeywordResource;
class AdminUserResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @param \Illuminate\Http\Request $request
* @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable
*/
public function toArray($request)
{
return [
'id' => $this->id,
'id' => $this->id,
'username' => $this->username,
'name' => $this->name,
'avatar'=> $this->avatar,
'avatar' => $this->avatar,
'department' => $this->department,
'phone' => $this->phone,
'status' => $this->status,
'is_enable'=> $this->is_enable,
'is_enable' => $this->is_enable,
'bases' => AgriculturalBaseResource::collection($this->whenloaded('bases')),
];
}

View File

@ -10,22 +10,22 @@ class AgriculturalBaseResource extends JsonResource
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @param \Illuminate\Http\Request $request
* @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable
*/
public function toArray($request)
{
return [
'id' => $this->id,
'id' => $this->id,
'name' => $this->name,
'address' => $this->address ?? '',
'address_lat' => $this->address_lat ?? '',
'address_lng' => $this->address_lng ?? '',
'description' => $this->description ?? '',
'map' => $this->map ?? '',
'areas' => ($this->areas ?? 0.00).' 亩',
'workforce' => $this->workforce ?? 0,
'crops' => KeywordResource::collection($this->whenLoaded('crops'))
'map' => $this->map ?? '',
'areas' => ($this->areas ?? 0.00).' 亩',
'workforce' => $this->workforce ?? 0,
'crops' => KeywordResource::collection($this->whenLoaded('crops')),
];
}
}

View File

@ -9,7 +9,7 @@ class CropFlowResource extends JsonResource
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @param \Illuminate\Http\Request $request
* @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable
*/
public function toArray($request)
@ -17,16 +17,16 @@ class CropFlowResource extends JsonResource
return [
'id' => $this->id,
'flow_name' => $this->flow_name,
'crop_name' => $this->whenLoaded('crop', function (){
'crop_name' => $this->whenLoaded('crop', function () {
return $this->crop?->name;
}, ''),
'crop_id' => $this->crop_id,
'time_year' => $this->time_year,
'sale' => $this->sale,
'created_by' => $this->whenLoaded('createdBy', function (){
'created_by' => $this->whenLoaded('createdBy', function () {
return $this->createdBy?->name;
}, ''),//录入人
'created_at' => strtotime($this->created_at) ?? 0,//录入时间
}, ''), //录入人
'created_at' => strtotime($this->created_at) ?? 0, //录入时间
];
}
}

View File

@ -9,7 +9,7 @@ class CropStructureResource extends JsonResource
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @param \Illuminate\Http\Request $request
* @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable
*/
public function toArray($request)

View File

@ -9,7 +9,7 @@ class CropYieldResource extends JsonResource
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @param \Illuminate\Http\Request $request
* @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable
*/
public function toArray($request)
@ -20,7 +20,7 @@ class CropYieldResource extends JsonResource
return $this->base?->name;
}, ''),
'base_id' => $this->base_id,
'crop_name' => $this->whenLoaded('crop', function (){
'crop_name' => $this->whenLoaded('crop', function () {
return $this->crop?->name;
}, ''),
'crop_id' => $this->crop_id,
@ -28,10 +28,10 @@ class CropYieldResource extends JsonResource
'yield' => $this->yield,
'output' => $this->output,
'cultivated' => $this->cultivated,
'created_by' => $this->whenLoaded('createdBy', function (){
'created_by' => $this->whenLoaded('createdBy', function () {
return $this->createdBy?->name;
}, ''),//录入人
'created_at' => strtotime($this->created_at) ?? 0,//录入时间
}, ''), //录入人
'created_at' => strtotime($this->created_at) ?? 0, //录入时间
];
}
}

View File

@ -9,26 +9,26 @@ class DeviceResource extends JsonResource
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @param \Illuminate\Http\Request $request
* @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable
*/
public function toArray($request)
{
return [
'id' => $this->id,
'type' => $this->type?->typeName() ?? '未知',
'sn' => $this->sn,
'base_name' => $this->whenLoaded('base', function (){
'type' => $this->type?->typeName() ?? '未知',
'sn' => $this->sn,
'base_name' => $this->whenLoaded('base', function () {
return $this->base?->name ?? '';
}, ''),
'base_id' => $this->agricultural_base_id,
'monitoring_point' => $this->monitoring_point ?? '',
'status' => $this->status?->value,
'extends' => $this->extends ?? [],
'created_by' => $this->whenLoaded('createdBy', function (){
'created_by' => $this->whenLoaded('createdBy', function () {
return $this->createdBy?->name;
}, ''),//录入人
'created_at' => strtotime($this->created_at) ?? 0,//录入时间
}, ''), //录入人
'created_at' => strtotime($this->created_at) ?? 0, //录入时间
];
}
}

View File

@ -2,10 +2,8 @@
namespace App\ModelFilters;
use Carbon\Carbon;
use EloquentFilter\ModelFilter;
class AdminRoleFilter extends ModelFilter
{
}

View File

@ -2,10 +2,8 @@
namespace App\ModelFilters;
use Carbon\Carbon;
use EloquentFilter\ModelFilter;
class AdminUserFilter extends ModelFilter
{
}

View File

@ -2,10 +2,8 @@
namespace App\ModelFilters;
use Carbon\Carbon;
use EloquentFilter\ModelFilter;
class AgriculturalBaseFilter extends ModelFilter
{
}

View File

@ -2,14 +2,14 @@
namespace App\ModelFilters;
use Carbon\Carbon;
use EloquentFilter\ModelFilter;
class CropFlowFilter extends ModelFilter
{
public function year($y)
{
$y = $y ?? date('Y');//默认当前年份
$y = $y ?? date('Y'); //默认当前年份
return $this->where('time_year', $y);
}

View File

@ -2,14 +2,14 @@
namespace App\ModelFilters;
use Carbon\Carbon;
use EloquentFilter\ModelFilter;
class CropStructureFilter extends ModelFilter
{
public function year($y)
{
$y = $y ?? date('Y');//默认当前年份
$y = $y ?? date('Y'); //默认当前年份
return $this->where('time_year', $y);
}
}

View File

@ -2,14 +2,14 @@
namespace App\ModelFilters;
use Carbon\Carbon;
use EloquentFilter\ModelFilter;
class CropYieldFilter extends ModelFilter
{
public function year($y)
{
$y = $y ?? date('Y');//默认当前年份
$y = $y ?? date('Y'); //默认当前年份
return $this->where('time_year', $y);
}

View File

@ -2,20 +2,22 @@
namespace App\ModelFilters;
use Carbon\Carbon;
use EloquentFilter\ModelFilter;
class DeviceFilter extends ModelFilter
{
public function point($point){
public function point($point)
{
return $this->where('monitoring_point', 'like', $point.'%');
}
public function base($base){
public function base($base)
{
return $this->where('agricultural_base_id', $base);
}
public function type($type){
public function type($type)
{
return $this->where('type', $type);
}
}

View File

@ -2,14 +2,15 @@
namespace App\Models;
use EloquentFilter\Filterable;
use Dcat\Admin\Models\Permission as BaseAdminModel;
use EloquentFilter\Filterable;
class AdminPermission extends BaseAdminModel
{
use Filterable;
public function scopeEndPoint($q){
public function scopeEndPoint($q)
{
return $q->where('slug', 'like', 'endpoint%');
}
}

View File

@ -2,8 +2,8 @@
namespace App\Models;
use EloquentFilter\Filterable;
use Dcat\Admin\Models\Role as BaseAdminModel;
use EloquentFilter\Filterable;
class AdminRole extends BaseAdminModel
{

View File

@ -2,9 +2,9 @@
namespace App\Models;
use Dcat\Admin\Models\Administrator as BaseAdminModel;
use EloquentFilter\Filterable;
use Laravel\Sanctum\HasApiTokens;
use Dcat\Admin\Models\Administrator as BaseAdminModel;
class AdminUser extends BaseAdminModel
{
@ -22,11 +22,13 @@ class AdminUser extends BaseAdminModel
'password', 'remember_token',
];
public function bases(){
public function bases()
{
return $this->belongsToMany(AgriculturalBase::class, 'admin_user_bases', 'user_id', 'base_id');
}
public function permissionIds(){
public function permissionIds()
{
return $this->getCachePermissions()->pluck('id');
}
}

View File

@ -8,12 +8,11 @@ use Peidikeji\Keywords\Models\Keywords;
class AgriculturalBase extends Model
{
use Filterable;
protected $fillable = [
'name', 'person', 'address', 'address_lat', 'address_lng',
'description', 'map', 'areas', 'workforce'
'description', 'map', 'areas', 'workforce',
];
public function scopeSort($q)
@ -21,7 +20,8 @@ class AgriculturalBase extends Model
return $q->orderBy('created_at', 'desc');
}
public function crops(){
public function crops()
{
return $this->belongsToMany(Keywords::class, 'base_crops', 'base_id', 'crop_id');
}
}

View File

@ -12,7 +12,7 @@ class CropFlow extends Model
protected $fillable = [
'crop_id', 'flow_name', 'time_year', 'sale', 'user_id',
'created_by', 'updated_by'
'created_by', 'updated_by',
];
/**
@ -20,7 +20,8 @@ class CropFlow extends Model
*
* @return void
*/
public function crop(){
public function crop()
{
return $this->belongsTo(Keywords::class, 'crop_id');
}

View File

@ -12,7 +12,7 @@ class CropYield extends Model
protected $fillable = [
'base_id', 'crop_id', 'time_year', 'yield', 'cultivated', 'output', 'user_id',
'created_by', 'updated_by'
'created_by', 'updated_by',
];
/**
@ -20,7 +20,8 @@ class CropYield extends Model
*
* @return void
*/
public function base(){
public function base()
{
return $this->belongsTo(AgriculturalBase::class, 'base_id');
}
@ -29,7 +30,8 @@ class CropYield extends Model
*
* @return void
*/
public function crop(){
public function crop()
{
return $this->belongsTo(Keywords::class, 'crop_id');
}
@ -42,5 +44,4 @@ class CropYield extends Model
{
return $this->belongsTo(AdminUser::class, 'updated_by');
}
}

View File

@ -2,12 +2,12 @@
namespace App\Models;
use App\Enums\DeviceType;
use App\Enums\DeviceStatus;
use App\Enums\DeviceType;
use EloquentFilter\Filterable;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Factories\HasFactory;
class Device extends Model
{
@ -20,7 +20,7 @@ class Device extends Model
protected $casts = [
'type' => DeviceType::class,
'status' => DeviceStatus::class,
'extends' => 'array'
'extends' => 'array',
];
protected $fillable = [
@ -36,7 +36,8 @@ class Device extends Model
'updated_by',
];
public function base(){
public function base()
{
return $this->belongsTo(AgriculturalBase::class, 'agricultural_base_id');
}

View File

@ -30,7 +30,7 @@ return new class extends Migration
$table->comment('基地数据表');
});
Schema::create('base_crops', function (Blueprint $table){
Schema::create('base_crops', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('base_id')->comment('基地ID');
$table->unsignedBigInteger('crop_id')->comment('农作物ID');

View File

@ -4,7 +4,6 @@ namespace Database\Seeders;
use Dcat\Admin\Models\Permission;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
class EndpointPermissionSeeder extends Seeder
{
@ -16,32 +15,32 @@ class EndpointPermissionSeeder extends Seeder
public function run()
{
$permissions = [
'endpoint' =>['name' => '系统权限', 'curd'=>false, 'in_path'=> true, 'children' => [
'monitor_data' => ['name' =>'监测数据管理', 'curd' => false, 'children'=> [
'weather' =>['name' =>'气象管理', 'curd'=>['index']],
'camera' => ['name' =>'智能监控', 'curd'=>['index']],
'soil' => ['name' =>'土壤监控', 'curd'=>['index'], 'children'=> ['setting'=>'设置']],
'water' => ['name' =>'水质监控', 'curd'=>['index'], 'children'=> ['setting'=>'设置']]
'endpoint' => ['name' => '系统权限', 'curd' => false, 'in_path' => true, 'children' => [
'monitor_data' => ['name' => '监测数据管理', 'curd' => false, 'children' => [
'weather' => ['name' => '气象管理', 'curd' => ['index']],
'camera' => ['name' => '智能监控', 'curd' => ['index']],
'soil' => ['name' => '土壤监控', 'curd' => ['index'], 'children' => ['setting' => '设置']],
'water' => ['name' => '水质监控', 'curd' => ['index'], 'children' => ['setting' => '设置']],
]],
'base_data' => ['name' => '基础数据管理', 'curd' => false, 'children'=>[
'citydata_statistics' => ['name'=>'全市基础数据', 'curd'=> ['index', 'edit']],
'agricultural_basic' =>['name'=>'基地数据', 'curd'=>true],
'crops_build' => ['name' =>'农业产业结构', 'curd'=>true],
'crops_output'=> ['name' =>'产量排行榜','curd'=>true],
'crops_flow' => ['name' =>'农产品流向', 'curd'=>true],
'crops_price' => ['name' =>'农产品价格走势', 'curd'=>['index'], 'children'=> ['is_enable'=>'自动监测开关']],
'base_data' => ['name' => '基础数据管理', 'curd' => false, 'children' => [
'citydata_statistics' => ['name' => '全市基础数据', 'curd' => ['index', 'edit']],
'agricultural_basic' => ['name' => '基地数据', 'curd' => true],
'crops_build' => ['name' => '农业产业结构', 'curd' => true],
'crops_output' => ['name' => '产量排行榜', 'curd' => true],
'crops_flow' => ['name' => '农产品流向', 'curd' => true],
'crops_price' => ['name' => '农产品价格走势', 'curd' => ['index'], 'children' => ['is_enable' => '自动监测开关']],
]],
'device_data' => ['name' => '设备管理', 'curd'=>false,'children'=>[
'device' => ['name' =>'设备管理', 'curd'=>true],
'device_data' => ['name' => '设备管理', 'curd' => false, 'children' => [
'device' => ['name' => '设备管理', 'curd' => true],
]],
'manage'=>['name' =>'系统管理', 'curd'=>false, 'children'=>[
'admin_users' => ['name' =>'管理员管理', 'curd'=>true, 'children'=>[
'edit_password'=>'修改密码', 'enable'=>'启用/禁用'
'manage' => ['name' => '系统管理', 'curd' => false, 'children' => [
'admin_users' => ['name' => '管理员管理', 'curd' => true, 'children' => [
'edit_password' => '修改密码', 'enable' => '启用/禁用',
]],
'admin_roles' =>['name'=>'角色管理', 'curd' =>true],
'operation_log' => ['name' =>'操作日志', 'curd'=>['index']]
]]
]]
'admin_roles' => ['name' => '角色管理', 'curd' => true],
'operation_log' => ['name' => '操作日志', 'curd' => ['index']],
]],
]],
];
$this->createPermissionData($permissions);
}

View File

@ -23,8 +23,7 @@ Route::group(['middleware' => 'auth:sanctum'], function () {
Route::get('permissions', [AdminPermissionController::class, 'index']);
Route::get('device-types', [DeviceController::class, 'types']);
Route::group(['as'=>'endpoint.'], function (){
Route::group(['as' => 'endpoint.'], function () {
//全市基础数据
Route::get('citydata-statistics', [CityDataController::class, 'statistics'])->name('citydata_statistics.index');
//基地数据