diff --git a/app/Exports/OperationLogExport.php b/app/Exports/OperationLogExport.php new file mode 100644 index 0000000..412db1d --- /dev/null +++ b/app/Exports/OperationLogExport.php @@ -0,0 +1,81 @@ +each( + function ($item) use (&$data, &$index, $actionArr) { + $username = AdminUsers::getUsername($item['user_id']); + $item['operation_name'] = $username ?? ''; + $item['action_str'] = $actionArr[$item['action']] ?? + $item['action']; + $description = __('log.' . $item['description']); + if (strpos($description, 'log.') === false) { + $item['description'] = $description; + } + $item['main_directory'] = ''; + if ($item['sub_directory']) { + $item['main_directory'] + = AdminMenu::getLastParentTitle( + $item['sub_directory'] + ); + $item['sub_directory'] = AdminMenu::getParentTitle( + $item['sub_directory'] + ); + } else { + $item['sub_directory'] = ''; + } + $data[] = [ + 'id' => $index, + 'created_at' => $item['created_at'], + 'operation_name' => $item['operation_name'], + 'main_directory' => $item['main_directory'], + 'sub_directory' => $item['sub_directory'], + 'action' => $item['action'], + 'action_str' => $item['action_str'], + 'description' => $item['description'], + ]; + $index += 1; + } + ); + return $data; + } + + /** + * @return array + */ + public function headings(): array + { + return [ + __('exports.global.index'), + __('exports.operation_log.created_at'), + __('exports.operation_log.operation_name'), + __('exports.operation_log.main_directory'), + __('exports.operation_log.sub_directory'), + __('exports.operation_log.action'), + __('exports.operation_log.action_str'), + __('exports.operation_log.description') + ]; + } + +} diff --git a/app/Http/Controllers/Admin/OperationLogController.php b/app/Http/Controllers/Admin/OperationLogController.php index 133a1d6..95884a3 100644 --- a/app/Http/Controllers/Admin/OperationLogController.php +++ b/app/Http/Controllers/Admin/OperationLogController.php @@ -2,6 +2,7 @@ namespace App\Http\Controllers\Admin; +use App\Exports\OperationLogExport; use App\Http\Controllers\Controller; use App\Models\AdminMenu; use App\Models\AdminOperationLog; @@ -12,6 +13,8 @@ use Exception; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; +use Maatwebsite\Excel\Facades\Excel; +use Symfony\Component\HttpFoundation\BinaryFileResponse; class OperationLogController extends Controller { @@ -186,4 +189,15 @@ class OperationLogController extends Controller ); } } + + /** + * @return BinaryFileResponse + */ + public function export(): BinaryFileResponse + { + return Excel::download( + new OperationLogExport(), + __('exports.operation_log.list') . time() . '.xlsx' + ); + } } diff --git a/resources/lang/zh-CN/log.php b/resources/lang/zh-CN/log.php index c016c6d..3b7cad0 100644 --- a/resources/lang/zh-CN/log.php +++ b/resources/lang/zh-CN/log.php @@ -1,31 +1,31 @@ '登录平台', - 'logout' => '注销', - 'config' => [ + 'login' => '登录平台', + 'logout' => '注销', + 'config' => [ 'update' => '系统配置更新' ], - 'admin_floor' => [ + 'admin_floor' => [ 'create' => '创建楼层', 'update' => '更新楼层', 'delete' => '删除楼层', 'region_create' => '创建楼层关联区域', 'region_delete' => '删除角色关联菜单', ], - 'role' => [ + 'role' => [ 'create' => '创建角色', 'update' => '更新角色', 'delete' => '删除角色', 'menu_delete' => '删除角色关联菜单', 'menu_create' => '创建角色关联菜单' ], - 'translation' => [ + 'translation' => [ 'create' => '创建翻译', 'update' => '更新翻译', 'delete' => '删除翻译' ], - 'admin_user' => [ + 'admin_user' => [ 'create' => '创建用户', 'update' => '更新用户', 'delete' => '更新用户', @@ -33,42 +33,52 @@ return [ 'role_update' => '更新用户关联角色', 'role_delete' => '删除用户关联角色' ], - 'license_plate' => [ + 'license_plate' => [ 'create' => '创建车牌号码', 'update' => '更新车牌号码', 'delete' => '删除车牌号码' ], - 'space_attributes' => [ + 'space_attributes' => [ 'create' => '创建车位属性', 'update' => '更新车位属性', 'delete' => '删除车位属性' ], - 'space_type' => [ + 'space_type' => [ 'create' => '创建车位类型', 'update' => '更新车位类型', 'delete' => '删除车位类型' ], - 'vip_list' => [ + 'vip_list' => [ 'create' => '创建VIP名单', 'update' => '更新VIP名单', 'delete' => '删除VIP名单' ], - 'map' => [ + 'map' => [ 'save' => '绘制电子地图保存' ], - 'parking_information' => [ + 'parking_information' => [ 'create' => '创建车位资讯', 'delete' => '更新车位资讯', 'clear' => '清除车位资讯' ], - 'parking_camera' => [ + 'parking_camera' => [ 'create' => '创建车位相机', 'update' => '更新车位相机', 'delete' => '删除车位相机', 'create_space_camera' => '创建车位控灯相机', 'delete_space_camera' => '删除车位控灯相机' ], - 'parking_space' => [ + 'parking_space' => [ 'create' => '创建车位', + ], + 'parking_pattern' => [ + 'create' => '创建活动模式', + 'update' => '更新活动模式', + 'delete' => '删除活动模式' + ], + 'parking_pattern_space' => [ + 'create' => '创建活动模式关联车位', + 'update' => '更新活动模式关联车位', + 'delete' => '删除活动模式关联车位' ] ];