middleware('permission:user-list|user-create|user-edit|user-delete', ['only' => ['UserManager', 'show', 'index']]); $this->middleware('permission:user-create', ['only' => ['storeUser']]); $this->middleware('permission:user-edit', ['only' => ['updateUser']]); $this->middleware('permission:user-delete', ['only' => ['deleteUser']]); } #region 使用者管理 public function UserManager() { $permissions = Permission::all(); $roles = Role::where('id', '!=', 1)->get(); $equipments = [ // "violationparking" => ViolationParkingEquipment::all(), "multisys" => MultisysEquipment::all(), "overspeedred" => OverSpeedRedEquipment::all(), "interval"=> IntervalEquipment::all(), ]; $equipments_title = [ "multisys" => "路口多功能系統", "overspeedred" => "闖紅燈超速", "interval" => "區間測速", ]; $allow = explode(",", auth()->user()->device); // dd($roles->toArray()); return view('system.setting.UserManager') ->with('permissions', $permissions) ->with('roles', $roles) ->with('equipments_title', $equipments_title) ->with('equipments', $equipments) ->with('allow', $allow); } public function index(Request $request) { #region DataTable 搜尋屬性 $draw = $request->get('draw'); $start = $request->get("start"); $rowperpage = $request->get("length"); // Rows display per page $columnIndex_arr = $request->get('order'); $columnName_arr = $request->get('columns'); $order_arr = $request->get('order'); $search_arr = $request->get('search'); $columnIndex = $columnIndex_arr[0]['column']; // Column index $columnName = $columnName_arr[$columnIndex]['data']; // Column name $columnSortOrder = $order_arr[0]['dir']; // asc or desc $searchValue = $search_arr['value']; // Search value #endregion // Role with permissions $records = User::query(); $records = $records->with('roles'); $records = $records->whereNotIn('id', [1]); $totalRecords = $records->count(); if (isset($columnName)) $records->orderBy($columnName, $columnSortOrder); if (isset($searchValue)) { $records->where(function ($query) use ($searchValue) { // $query->where('outlet_id', 'like', '%' . $searchValue . '%') // ->orwhere('name', 'like', '%' . $searchValue . '%') // ->orwhere('serialnumber', 'like', '%' . $searchValue . '%') // ->orwhere('creator_id', 'like', '%' . $searchValue . '%'); }); } $totalRecordswithFilter = $records->count(); $data_arr = $records->get(); $response = array( "draw" => intval($draw), "iTotalRecords" => $totalRecords, "iTotalDisplayRecords" => $totalRecordswithFilter, "aaData" => $data_arr ); return response()->json($response); } // 新增使用者 public function store(Request $request) { if(isset($request->device)){ $device = []; foreach ($request->device as $key => $value) { // $device[] = explode("-", $value)[1]; $device[] = $value; } $request->merge(['device' => implode(",", $device)]); }else{ $request->merge(['device' => ""]); } DB::beginTransaction(); try { $data = $request->all(); $data['password'] = Hash::make("Aa@123456789"); $user = User::create($data); $user->syncRoles($request->role); $logData = [ 'action' => 'create', 'action_detail' => '新增使用者', 'ip' => request()->ip(), 'remark' => "新增使用者:$user->name", ]; LogWriter::writeLog($logData, 'api'); DB::commit(); return response()->json(['success' => '新增成功']); } catch (\Exception $e) { DB::rollback(); Log::error("新增使用者錯誤訊息: " . $e->getMessage()); return response()->json(['error' => '新增失敗']); } } public function show(Request $request, $id) { $user = User::with('roles')->find($id); $role = Role::where('id', '!=', 1)->get(); return response()->json(['user' => $user, 'role' => $role]); } public function update(Request $request, $id) { if ($id == 1) { return response()->json(['error' => '此使用者不可編輯']); } if (isset($request->password_reset)){ $user = User::find($id); $user->update(['password'=> Hash::make("Aa@123456789")]); $logData = [ 'action' => 'edit', 'action_detail' => '使用者密碼重設', 'ip' => request()->ip(), 'remark' => "重設使用者密碼: $user->name", ]; LogWriter::writeLog($logData, 'api'); return response()->json(['success' => '重設成功']); } if(isset($request->device)){ $device = []; foreach ($request->device as $key => $value) { // $device[] = explode("-", $value)[1]; $device[] = $value; } $request->merge(['device' => implode(",", $device)]); }else{ $request->merge(['device' => ""]); } DB::beginTransaction(); try { $user = User::find($id); $user->update($request->all()); $user->syncRoles($request->role); $logData = [ 'action' => 'edit', 'action_detail' => '編輯使用者', 'ip' => request()->ip(), 'remark' => "編輯使用者:$user->name", ]; LogWriter::writeLog($logData, 'api'); DB::commit(); return response()->json(['success' => '編輯成功']); } catch (\Exception $e) { DB::rollback(); Log::error("編輯使用者錯誤訊息: " . $e->getMessage()); return response()->json(['error' => '編輯失敗']); } } // 刪除使用者 public function destory(Request $request, $id) { if ($id == 1) { return response()->json(['error' => '此使用者不可刪除']); } DB::beginTransaction(); try { $user = User::find($id); $user->update(['deleted_at' => now()]); $logData = [ 'action' => 'delete', 'action_detail' => '刪除使用者', 'ip' => request()->ip(), 'remark' => "刪除使用者:$user->name", ]; LogWriter::writeLog($logData, 'api'); DB::commit(); return response()->json(['success' => '刪除成功']); } catch (\Exception $e) { DB::rollback(); return response()->json(['error' => '刪除失敗']); } } public function exportUserData() { $data_arr = User::whereNotIn('id',[1])->OrderBy('id', 'asc')->get()->toArray(); $columns = ['id', 'station', 'unit', 'class', 'name', 'account', 'role_name', 'deleted_at']; $columnTitle = [ ['編號', '分局', '使用單位', '職稱', '姓名', '帳號', '使用者權限', '備註'] ]; $data = array_map(function ($row) use ($columns) { return array_merge(array_flip($columns), array_intersect_key($row, array_flip($columns))); }, $data_arr); // 修改data中編號id 從1開始 foreach ($data as $key => $value) { $data[$key]['id'] = $key + 1; } $fileName = 'userData-' . Str::random(10) . '.xlsx'; ExportFiles::create([ 'name' => $fileName, 'path' => 'public/exports_user', 'type' => 'xlsx', 'status' => '1', 'remark' => '使用者匯出', 'user_id' => 1, ]); Excel::store(new ArrayExport($data, $columnTitle), 'public/exports_user/' . $fileName, 'local', \Maatwebsite\Excel\Excel::XLSX); // 直接跳轉下載 return response()->json(['success' => '匯出成功', 'file' => 'storage/exports_user/'.$fileName]); } #endregion }