diff --git a/README.en.md b/README.en.md index cc6c45a3fc5e7e49cec18f416e71a0dc7b116035..888b122e17514202d4a4f12965b62a971f83d41d 100644 --- a/README.en.md +++ b/README.en.md @@ -8,9 +8,11 @@ Software architecture description #### Installation -1. xxxx -2. xxxx -3. xxxx +1. composer install +2. cp .env.example .env +3. 生成 APP_KEY:php artisan key:generate +4. JWT的key:php artisan jwt:secret +5. 导入sql:laravel-vue-admin #### Instructions diff --git a/README.md b/README.md index 21689a17b943addc03efe28eccc1d768520be5c6..19385307a5a5805bd662f46731813f1aa2d66dbe 100644 --- a/README.md +++ b/README.md @@ -13,9 +13,11 @@ Gitee 是 OSCHINA 推出的基于 Git 的代码托管平台(同时支持 SVN #### 安装教程 -1. 生成 APP_KEY:php artisan key:generate -2. JWT的key:php artisan jwt:secret -3. xxxx +1. composer install +2. cp .env.example .env +3. 生成 APP_KEY:php artisan key:generate +4. JWT的key:php artisan jwt:secret +5. 导入sql:laravel-vue-admin #### 使用说明 diff --git a/app/Exceptions/AuthException.php b/app/Exceptions/Admin/AuthException.php similarity index 49% rename from app/Exceptions/AuthException.php rename to app/Exceptions/Admin/AuthException.php index 3d886d3193975cad36b353b70342ed1635da6c9d..dbac6721ffc7a1e95df533459f90000c3fd07f9a 100644 --- a/app/Exceptions/AuthException.php +++ b/app/Exceptions/Admin/AuthException.php @@ -1,21 +1,28 @@ admin_id = $admin_id; } public function render(Request $request) { if ($request->expectsJson()) { + // 登录日志 + AdminLoginLog::getInstance()->add($this->admin_id, 0, $this->msg); + $this->setHttpCode(401); - return $this->errorJson($this->msg, -1); + return $this->errorJson($this->msg); } } } diff --git a/app/Exceptions/Admin/AuthTokenException.php b/app/Exceptions/Admin/AuthTokenException.php new file mode 100644 index 0000000000000000000000000000000000000000..70d58bd884c87a069ae4d13581f598532192e3cd --- /dev/null +++ b/app/Exceptions/Admin/AuthTokenException.php @@ -0,0 +1,28 @@ +admin_id = $admin_id; + } + + public function render(Request $request) + { + if ($request->expectsJson()) { + // 登录日志 + AdminLoginLog::getInstance()->add($this->admin_id, 0, $this->msg); + + $this->setHttpCode(401); + return $this->errorJson($this->msg); + } + } +} diff --git a/app/Modules/Admin/Entities/Log/AdminLog.php b/app/Modules/Admin/Entities/Log/AdminLog.php index e5befa0e12aacb660f415c01386cf36ab4c85f8f..eca099a1a61f067a4db2bcb305c47cd55fbe46c0 100644 --- a/app/Modules/Admin/Entities/Log/AdminLog.php +++ b/app/Modules/Admin/Entities/Log/AdminLog.php @@ -14,4 +14,9 @@ class AdminLog extends MonthModel { return $this->belongsTo(Admin::class, 'admin_id', 'admin_id'); } + + public function getLogDurationAttribute($key) + { + return floatval($key); + } } diff --git a/app/Modules/Admin/Entities/Log/AdminLoginLog.php b/app/Modules/Admin/Entities/Log/AdminLoginLog.php index 8a17a8eb62ee29ee85118e385be89f7815dd1d85..063c8d0e253fbc551454f62d4f5e708e9f15029d 100644 --- a/app/Modules/Admin/Entities/Log/AdminLoginLog.php +++ b/app/Modules/Admin/Entities/Log/AdminLoginLog.php @@ -14,4 +14,25 @@ class AdminLoginLog extends MonthModel { return $this->belongsTo(Admin::class, 'admin_id', 'admin_id'); } + + public function getLogDurationAttribute($key) + { + return floatval($key); + } + + public function add(int $admin_id = 0, int $log_status = 1, $description = '登录成功') + { + $ip_agent = get_client_info(); + return $this->setMonthTable()->create([ + 'admin_id' => $admin_id, + 'created_ip' => $ip_agent['ip'] ?? get_ip(), + 'browser_type' => $ip_agent['agent'] ?? $_SERVER['HTTP_USER_AGENT'], + 'log_status' => $log_status, + 'description' => $description, + 'log_action' => request()->route()->getActionName(), + 'log_method' => request()->getMethod(), + 'log_duration' => microtime(true) - LARAVEL_START, + 'request_data' => json_encode(request()->all()), + ]); + } } diff --git a/app/Modules/Admin/Http/Controllers/AuthController.php b/app/Modules/Admin/Http/Controllers/AuthController.php index 0b765b6aa61f1ec0b49f469043601e595e7cae21..2e63e0d286c254dfb2d35daef1bc76f1619e9be2 100644 --- a/app/Modules/Admin/Http/Controllers/AuthController.php +++ b/app/Modules/Admin/Http/Controllers/AuthController.php @@ -18,7 +18,7 @@ class AuthController extends BaseController * * @param LoginRequest $request * @return \Illuminate\Http\JsonResponse - * @throws \App\Exceptions\AuthException + * @throws \App\Exceptions\Admin\AuthException * @throws \App\Exceptions\InvalidRequestException */ public function login(LoginRequest $request) @@ -35,7 +35,7 @@ class AuthController extends BaseController * 获取登录管理员信息 * * @return \Illuminate\Http\JsonResponse - * @throws \App\Exceptions\AuthException + * @throws \App\Exceptions\Admin\AuthException */ public function me() { diff --git a/app/Modules/Admin/Http/Controllers/IndexController.php b/app/Modules/Admin/Http/Controllers/IndexController.php index a936e00b2505b7a32f58ff04d0c51647aa62d13b..2ba5bd679d4be120d486c7e28eb18768d0d4f72b 100644 --- a/app/Modules/Admin/Http/Controllers/IndexController.php +++ b/app/Modules/Admin/Http/Controllers/IndexController.php @@ -2,6 +2,7 @@ namespace App\Modules\Admin\Http\Controllers; +use App\Models\MonthModel; use Illuminate\Http\Request; class IndexController extends BaseController @@ -10,4 +11,14 @@ class IndexController extends BaseController { return $this->successJson([]); } + + /** + * 月份表列表 + * + * @return \Illuminate\Http\JsonResponse + */ + public function getMonthList() + { + return $this->successJson(MonthModel::getInstance()->getAllMonthes()); + } } diff --git a/app/Modules/Admin/Http/Middleware/AdminLog.php b/app/Modules/Admin/Http/Middleware/AdminLog.php index 5093e5b355b91fea1d4fd35da308f43d151ae646..fe78bdcd1322562cb01d0a35aa70e07bcfd3712e 100644 --- a/app/Modules/Admin/Http/Middleware/AdminLog.php +++ b/app/Modules/Admin/Http/Middleware/AdminLog.php @@ -22,6 +22,7 @@ class AdminLog $resource = $next($request); if (strtoupper($request->getMethod()) != 'GET'){ + $ip_agent = get_client_info(); \App\Modules\Admin\Entities\Log\AdminLog::getInstance()->create([ 'request_data' => json_encode($request->all()), 'admin_id' => !empty(auth($guard)->user()) ? auth($guard)->user()->admin_id : 0, diff --git a/app/Modules/Admin/Http/Requests/Rabc/AdminMenuRequest.php b/app/Modules/Admin/Http/Requests/Rabc/AdminMenuRequest.php index 4ae6689fda5b88f9a9151c0f11df952f4f514b8f..0be8cf4dd85d78f4d4c31380869c05375fb8888a 100644 --- a/app/Modules/Admin/Http/Requests/Rabc/AdminMenuRequest.php +++ b/app/Modules/Admin/Http/Requests/Rabc/AdminMenuRequest.php @@ -24,9 +24,6 @@ class AdminMenuRequest extends BaseRequest 'max:256', 'unique:' . $instance->getTable() . ',menu_name' . $validate_id ], - 'is_check' => [ - 'required', - ] ]; } diff --git a/app/Modules/Admin/Resources/views/admin.blade.php b/app/Modules/Admin/Resources/views/admin.blade.php index 34989bc3e349e84c0efec8d12712d50e2ddd3b96..1ff0628a33ee6ce2bcfd9a333e22bffeaa73923d 100644 --- a/app/Modules/Admin/Resources/views/admin.blade.php +++ b/app/Modules/Admin/Resources/views/admin.blade.php @@ -6,10 +6,12 @@ Title - +
- + + + diff --git a/app/Modules/Admin/Resources/vue-element-admin/api/adminloginlogs.js b/app/Modules/Admin/Resources/vue-element-admin/api/adminloginlogs.js new file mode 100644 index 0000000000000000000000000000000000000000..79d6ed6f875f7b7315368e615ae26838300b3931 --- /dev/null +++ b/app/Modules/Admin/Resources/vue-element-admin/api/adminloginlogs.js @@ -0,0 +1,17 @@ +import request from '@/utils/request' + +export function getList(params) { + return request({ + url: 'adminloginlogs', + method: 'get', + params + }) +} + +export function setDel(data) { + return request({ + url: `/adminloginlogs`, + method: 'delete', + data + }) +} diff --git a/app/Modules/Admin/Resources/vue-element-admin/api/adminlogs.js b/app/Modules/Admin/Resources/vue-element-admin/api/adminlogs.js new file mode 100644 index 0000000000000000000000000000000000000000..5b0062f5955617803f193d73cc9ede1259cfbfd4 --- /dev/null +++ b/app/Modules/Admin/Resources/vue-element-admin/api/adminlogs.js @@ -0,0 +1,17 @@ +import request from '@/utils/request' + +export function getList(params) { + return request({ + url: 'adminlogs', + method: 'get', + params + }) +} + +export function setDel(data) { + return request({ + url: `/adminlogs`, + method: 'delete', + data + }) +} diff --git a/app/Modules/Admin/Resources/vue-element-admin/api/common.js b/app/Modules/Admin/Resources/vue-element-admin/api/common.js index 7345fe2a665214e883a25432fb76b54b7ca3e3e4..7f287edce0f7eff0f3a14c7a4a4486b256e459d9 100644 --- a/app/Modules/Admin/Resources/vue-element-admin/api/common.js +++ b/app/Modules/Admin/Resources/vue-element-admin/api/common.js @@ -1,3 +1,5 @@ +import request from '@/utils/request' + export function getUploadUrl() { return process.env.VUE_APP_BASE_API + '/upload_file' } @@ -5,3 +7,10 @@ export function getUploadUrl() { export function getBatchUploadUrl() { return process.env.VUE_APP_BASE_API + '/upload_files' } + +export function getMonthLists() { + return request({ + url: '/get_month_lists', + method: 'get' + }) +} diff --git a/app/Modules/Admin/Resources/vue-element-admin/icons/svg/admin.svg b/app/Modules/Admin/Resources/vue-element-admin/icons/svg/admin.svg new file mode 100644 index 0000000000000000000000000000000000000000..66b718bb60446ff15c3a2c0285f81d6b648bd226 --- /dev/null +++ b/app/Modules/Admin/Resources/vue-element-admin/icons/svg/admin.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/Modules/Admin/Resources/vue-element-admin/icons/svg/comment.svg b/app/Modules/Admin/Resources/vue-element-admin/icons/svg/comment.svg new file mode 100644 index 0000000000000000000000000000000000000000..0443bc36db6a9f749913b7c54a898816592cb0e0 --- /dev/null +++ b/app/Modules/Admin/Resources/vue-element-admin/icons/svg/comment.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/Modules/Admin/Resources/vue-element-admin/icons/svg/create-user.svg b/app/Modules/Admin/Resources/vue-element-admin/icons/svg/create-user.svg new file mode 100644 index 0000000000000000000000000000000000000000..e3335669d51b515f2348003ed96c2204e0a716b7 --- /dev/null +++ b/app/Modules/Admin/Resources/vue-element-admin/icons/svg/create-user.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/Modules/Admin/Resources/vue-element-admin/icons/svg/dollar.svg b/app/Modules/Admin/Resources/vue-element-admin/icons/svg/dollar.svg new file mode 100644 index 0000000000000000000000000000000000000000..33f56f7167170fa93e100396461aa655da841c50 --- /dev/null +++ b/app/Modules/Admin/Resources/vue-element-admin/icons/svg/dollar.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/Modules/Admin/Resources/vue-element-admin/icons/svg/education.svg b/app/Modules/Admin/Resources/vue-element-admin/icons/svg/education.svg index 7bfb01d180f9ac9cf45429412129a7b7be4d8daf..6b38510f07528ad2a723720fdd96f4dae93a4c42 100644 --- a/app/Modules/Admin/Resources/vue-element-admin/icons/svg/education.svg +++ b/app/Modules/Admin/Resources/vue-element-admin/icons/svg/education.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/Modules/Admin/Resources/vue-element-admin/icons/svg/guide 2.svg b/app/Modules/Admin/Resources/vue-element-admin/icons/svg/guide 2.svg new file mode 100644 index 0000000000000000000000000000000000000000..d053bd73000b95c9c3242ab79396082625abebfc --- /dev/null +++ b/app/Modules/Admin/Resources/vue-element-admin/icons/svg/guide 2.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/Modules/Admin/Resources/vue-element-admin/icons/svg/layout.svg b/app/Modules/Admin/Resources/vue-element-admin/icons/svg/layout.svg new file mode 100644 index 0000000000000000000000000000000000000000..fcc966d4d573c792a05a1019726f2300f595d788 --- /dev/null +++ b/app/Modules/Admin/Resources/vue-element-admin/icons/svg/layout.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/Modules/Admin/Resources/vue-element-admin/icons/svg/like.svg b/app/Modules/Admin/Resources/vue-element-admin/icons/svg/like.svg new file mode 100644 index 0000000000000000000000000000000000000000..cf172a4572ade04da9a77f9ac598aa3b0c493cd0 --- /dev/null +++ b/app/Modules/Admin/Resources/vue-element-admin/icons/svg/like.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/Modules/Admin/Resources/vue-element-admin/icons/svg/role.svg b/app/Modules/Admin/Resources/vue-element-admin/icons/svg/role.svg new file mode 100644 index 0000000000000000000000000000000000000000..3a6d5296d021edb38f71daef50f5b1f90c1c6458 --- /dev/null +++ b/app/Modules/Admin/Resources/vue-element-admin/icons/svg/role.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/Modules/Admin/Resources/vue-element-admin/icons/svg/skill.svg b/app/Modules/Admin/Resources/vue-element-admin/icons/svg/skill.svg index a3b7312186fbd305a0c0ab902e2cc01e2f804f32..db1f4e9127783b89b752fbc09206744f42220d84 100644 --- a/app/Modules/Admin/Resources/vue-element-admin/icons/svg/skill.svg +++ b/app/Modules/Admin/Resources/vue-element-admin/icons/svg/skill.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/Modules/Admin/Resources/vue-element-admin/layout/components/Navbar.vue b/app/Modules/Admin/Resources/vue-element-admin/layout/components/Navbar.vue index 8beb27f829a11a80a18d327255fac01fcb977ab5..0ec8f525c77757f3d69ee4f851863c35074bee77 100644 --- a/app/Modules/Admin/Resources/vue-element-admin/layout/components/Navbar.vue +++ b/app/Modules/Admin/Resources/vue-element-admin/layout/components/Navbar.vue @@ -1,177 +1,170 @@ diff --git a/app/Modules/Admin/Resources/vue-element-admin/router/index.js b/app/Modules/Admin/Resources/vue-element-admin/router/index.js index 29575728c45bec3c7150938bc8e47db6a2ec1dc5..4dca1434420bc25f25c478187206096ec0cb37a8 100644 --- a/app/Modules/Admin/Resources/vue-element-admin/router/index.js +++ b/app/Modules/Admin/Resources/vue-element-admin/router/index.js @@ -93,10 +93,22 @@ export const constantRoutes = [ path: 'index', component: () => import('@/views/profile/index'), name: 'Profile', - meta: {title: 'profile', icon: 'user', noCache: true} + meta: {title: 'profile', icon: 'el-icon-user', noCache: true} } ] - } + }, + { + path: '/icon', + component: Layout, + children: [ + { + path: 'index', + component: () => import('@/views/icons/index'), + name: 'Icons', + meta: { title: 'icons', icon: 'icon', noCache: true } + } + ] + }, ] /** @@ -134,19 +146,6 @@ export const asyncRoutes = [ } ] }, - - { - path: '/error-log', - component: Layout, - children: [ - { - path: 'log', - component: () => import('@/views/error-log/index'), - name: 'ErrorLog', - meta: {title: 'errorLog', icon: 'bug'} - } - ] - }, // { // path: 'external-link', // component: Layout, diff --git a/app/Modules/Admin/Resources/vue-element-admin/styles/common.scss b/app/Modules/Admin/Resources/vue-element-admin/styles/common.scss index 02db6974e0d2118869a4a34ea540aa5039b2dd7b..04ff3a03203ae2327ca3c87d2109c227a83eb597 100644 --- a/app/Modules/Admin/Resources/vue-element-admin/styles/common.scss +++ b/app/Modules/Admin/Resources/vue-element-admin/styles/common.scss @@ -5,3 +5,9 @@ .danger-text{ color: #ff4949!important; } +.width-200-px{ + width: 200px!important; +} +.margin-buttom-10{ + margin-bottom: 10px!important; +} diff --git a/app/Modules/Admin/Resources/vue-element-admin/views/admin_menus/index.vue b/app/Modules/Admin/Resources/vue-element-admin/views/admin_menus/index.vue index a41206697783f6bb700fcce0e6e1a52c26802106..733054cddeae652c1e34cf03b521938081d1d1cb 100644 --- a/app/Modules/Admin/Resources/vue-element-admin/views/admin_menus/index.vue +++ b/app/Modules/Admin/Resources/vue-element-admin/views/admin_menus/index.vue @@ -38,8 +38,9 @@ show-overflow-tooltip prop="api_url" label="API路由" + align="center" > - +