diff --git a/.env.example b/.env.example index 35c727ed288c897ec40686a011ee03ac30a7f5f5..7492cb47c4d4eecd3dd2f38e62725384d20ef4e1 100644 --- a/.env.example +++ b/.env.example @@ -51,6 +51,8 @@ PUSHER_APP_CLUSTER=mt1 MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}" MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}" +#filesystem +FILESYSTEM_DRIVER=public APP_TIMEZONE=Asia/Shanghai APP_LOCALE=zh-CN diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index 69914e9937839b2a0fa23ec9142ca20fd7ab7a8d..fe7c1b5f34d2f6f4d89930284d9353bbe77cc8dd 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -36,6 +36,17 @@ class Kernel extends ConsoleKernel { $this->load(__DIR__.'/Commands'); + /** + * 自动加载多模块的自定义命令行 + */ + $modules_path = config('modules.paths.modules'); + if ($dirs = get_dir_files($modules_path)){ + foreach ($dirs as $dir){ + if (is_dir($console_path = $modules_path . '/' . $dir . '/Console')) + $this->load($console_path = $modules_path . '/' . $dir . '/Console'); + } + } + require base_path('routes/console.php'); } } diff --git a/app/Models/Model.php b/app/Models/Model.php index 80ad5f68d4de973485c8f12df3661cbbadd58ea8..e62ea7984ac43e5695e8ec32609564b4cf538c78 100644 --- a/app/Models/Model.php +++ b/app/Models/Model.php @@ -3,14 +3,15 @@ namespace App\Models; use App\Scopes\DeleteScope; -use App\Traits\Error; use App\Traits\Instance; +use App\Traits\MysqlTable; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model as EloquentModel; +use Illuminate\Support\Facades\Schema; class Model extends EloquentModel { - use Error; + use MysqlTable; use Instance; use HasFactory; @@ -94,4 +95,32 @@ class Model extends EloquentModel { return self::where($where)->first(); } + + public function detail(int $id, string $filed = '*', bool $lock = false, array $with = [], array $withCount = []) + { + return $this->field($filed) + ->lock($lock) + ->with($with) + ->withCount($withCount) + ->find($id); + } + + /** + * 过滤移除非当前表的字段参数 + * + * @param array $params + * + * @return array + */ + public function setFilterFields(array $params) : array + { + $fields = Schema::getColumnListing($this->getTable()); + foreach ($params as $key => $param) { + if ( !in_array($key, $fields) ) unset($params[$key]); + } + // 同时过滤时间戳字段【时间戳只允许自动更改,不允许手动设置】 + if ( $this->timestamps === true && isset($params[self::CREATED_AT]) ) unset($params[self::CREATED_AT]); + if ( $this->timestamps === true && isset($params[self::UPDATED_AT]) ) unset($params[self::UPDATED_AT]); + return $params; + } } diff --git a/app/Models/MonthModel.php b/app/Models/MonthModel.php index cb974328afb7162b813c78ac408e5f526b5dbab0..e79223fbda4572d33770bb9c6b73e617fe9ef780 100644 --- a/app/Models/MonthModel.php +++ b/app/Models/MonthModel.php @@ -4,5 +4,97 @@ namespace App\Models; class MonthModel extends Model { + const MIN_TABLE = '2020_12';// 表名最小的月份 + const MONTH_FORMAT = 'Y_m'; + /** + * @var 当前指定表的月份 + */ + protected $month; + + public function __construct(array $attributes = []) + { + parent::__construct($attributes); + + // 自动设置当月表名 + $this->setMonthTable(); + } + + public function getMonth(): string + { + return $this->month; + } + + + /** + * 设置按月分表 + * + * @param string $month + * + * @return $this + */ + public function setMonthTable(string $month = '') + { + $month = empty($month) ? date(self::MONTH_FORMAT) : date(self::MONTH_FORMAT, strtotime($month)); + // 替换为日期格式,否则将无法转化为时间戳(有效的日期格式 - 拼接才可以) + $month = str_replace('_', '-', $month); + + // 当表名大于最小表名时,设置表名。 + if ( $month >= str_replace('_', '-', self::MIN_TABLE) ) { + $this->month = date(self::MONTH_FORMAT, strtotime($month)); + $this->table = $this->getOldTableName() . '_' . $this->month; + } + + return $this; + } + + /** + * 获取从开始分表到今天为止,所有的月份 + * + * @return array + */ + public function getAllMonthes() : array + { + $monthes = get_month_range(str_replace('_', '-', self::MIN_TABLE), date('Y-m')); + krsort($monthes); + return $monthes; + } + + /** + * 获取原始表名(移除月份表的后缀)【包含前缀】 + * + * @return string + */ + public function getOldTableName():string + { + $table_name = $this->getTable(); + $suffix_len = strlen(self::MIN_TABLE); + $suffix = substr($table_name, -$suffix_len, $suffix_len); + // 检测当前表名是否为按月分表的表名 + if (preg_match ("/^([0-9]{4})_([0-9]{2})$/", $suffix, $parts)){ + // 减1是因为默认还有一个下划线 + $table_name = substr($table_name, 0, -$suffix_len - 1); + } + return $table_name; + } + + /** + * 生成新表 + * + * @param string $new_table + * @param string $time + * @param string $format + * @param string $old_table + * + * @return bool + */ + public function createMonthTable(string $new_table = '', $time = '', $format = self::MONTH_FORMAT, string $old_table = '') + { + $new_table = empty($new_table) ? $this->getOldTableName() . '_' . date($format, empty($time) ? time() : $time) : $new_table; + + // 数据表前缀 + $db_prefix = env('DB_PREFIX'); + + return $this->setCopyTable($db_prefix . $new_table, $db_prefix . $this->getOldTableName()); + } } diff --git a/app/Modules/Admin/Console/AutoTableBuild.php b/app/Modules/Admin/Console/AutoTableBuild.php new file mode 100644 index 0000000000000000000000000000000000000000..7d47e733472c04bfb6a7d5e3c965d85ad31bac09 --- /dev/null +++ b/app/Modules/Admin/Console/AutoTableBuild.php @@ -0,0 +1,77 @@ +model_lists as $model){ + (new $model)->createMonthTable('', strtotime('+0 month')); + } + } + + /** + * Get the console command arguments. + * + * @return array + */ + protected function getArguments() + { + return [ + ['example', InputArgument::REQUIRED, 'An example argument.'], + ]; + } + + /** + * Get the console command options. + * + * @return array + */ + protected function getOptions() + { + return [ + ['example', null, InputOption::VALUE_OPTIONAL, 'An example option.', null], + ]; + } +} diff --git a/app/Modules/Admin/Entities/Log/AdminLog.php b/app/Modules/Admin/Entities/Log/AdminLog.php index a3e1aa18c36b72e3d7179c4f536c716e5124e501..6c42c48c376804f5ae0275324397adff537d4426 100644 --- a/app/Modules/Admin/Entities/Log/AdminLog.php +++ b/app/Modules/Admin/Entities/Log/AdminLog.php @@ -6,4 +6,6 @@ use App\Models\MonthModel; class AdminLog extends MonthModel { + protected $primaryKey = 'log_id'; + protected $is_delete = 0; } diff --git a/app/Modules/Admin/Entities/Log/AdminLoginLog.php b/app/Modules/Admin/Entities/Log/AdminLoginLog.php index 224e7ebc5c3311a96f3e95e4b9f3b9381032f85a..0b2285a97d7f2efd39d954c46a4d68366e43594c 100644 --- a/app/Modules/Admin/Entities/Log/AdminLoginLog.php +++ b/app/Modules/Admin/Entities/Log/AdminLoginLog.php @@ -6,5 +6,6 @@ use App\Models\MonthModel; class AdminLoginLog extends MonthModel { - + protected $primaryKey = 'log_id'; + protected $is_delete = 0; } diff --git a/app/Modules/Admin/Entities/Rabc/AdminMenu.php b/app/Modules/Admin/Entities/Rabc/AdminMenu.php index 5e38c19a3bf25d053bdb3884137b871eba5191c1..411599dc3fc7198d1608f5f13efeb8fe8d84c2a1 100644 --- a/app/Modules/Admin/Entities/Rabc/AdminMenu.php +++ b/app/Modules/Admin/Entities/Rabc/AdminMenu.php @@ -8,4 +8,9 @@ class AdminMenu extends Model { protected $primaryKey = 'menu_id'; protected $is_delete = 0; + + public static function getAllMenus() + { + return self::orderBy('menu_sort', 'ASC')->get(); + } } diff --git a/app/Modules/Admin/Http/Controllers/AuthController.php b/app/Modules/Admin/Http/Controllers/AuthController.php index e46b84b099e85ac4525515aa68dd9df1b25aa9f3..0b765b6aa61f1ec0b49f469043601e595e7cae21 100644 --- a/app/Modules/Admin/Http/Controllers/AuthController.php +++ b/app/Modules/Admin/Http/Controllers/AuthController.php @@ -2,10 +2,11 @@ namespace App\Modules\Admin\Http\Controllers; +use App\Modules\Admin\Entities\Rabc\AdminMenu; use App\Modules\Admin\Http\Requests\LoginRequest; use App\Modules\Admin\Services\AuthService; -class AuthController extends AdminController +class AuthController extends BaseController { public function __construct(AuthService $authService) { @@ -54,4 +55,10 @@ class AuthController extends AdminController { return $this->successJson($this->service->logout()); } + + public function getRabcList() + { + // 临时测试数据 + return $this->successJson(list_to_tree(AdminMenu::getAllMenus()->toArray())); + } } diff --git a/app/Modules/Admin/Http/Controllers/BaseController.php b/app/Modules/Admin/Http/Controllers/BaseController.php index cdd57c73d6fbc245db93c23bb4a9a4ae14fa5770..d39a0aadb4b48f8d4d295fa80f88d3a27b6d3367 100644 --- a/app/Modules/Admin/Http/Controllers/BaseController.php +++ b/app/Modules/Admin/Http/Controllers/BaseController.php @@ -21,17 +21,18 @@ class BaseController extends Controller */ public function index(Request $request) { + if (!isset($this->service)){ + return $this->successJson([], '请先设置Service或者重写方法!'); + } return $this->successJson($this->service->lists($request->all())); } - /** - * Show the specified resource. - * @param int $id - * @return Renderable - */ - public function show($id) + public function detail($id = 0) { - return $this->successJson(); + if (!isset($this->service)){ + return $this->successJson([], '请先设置Service或者重写方法!'); + } + return $this->successJson(empty($id) ? [] : $this->service->detail($id)); } public function createService($request) @@ -40,6 +41,9 @@ class BaseController extends Controller $request->validated(); } + if (!isset($this->service)){ + return $this->successJson([], '请先设置Service或者重写方法!'); + } if ($this->service->create($request->all())){ return $this->successJson([], $this->service->getError()); }else{ @@ -53,6 +57,9 @@ class BaseController extends Controller $request->validated(); } + if (!isset($this->service)){ + return $this->successJson([], '请先设置Service或者重写方法!'); + } if ($this->service->update($request->all())){ return $this->successJson([], $this->service->getError()); }else{ @@ -62,6 +69,9 @@ class BaseController extends Controller public function delete(Request $request) { + if (!isset($this->service)){ + return $this->successJson([], '请先设置Service或者重写方法!'); + } if ($this->service->delete($request->all())){ return $this->successJson([], $this->service->getError()); }else{ @@ -69,34 +79,16 @@ class BaseController extends Controller } } - /** - * Store a newly created resource in storage. - * @param Request $request - * @return Renderable - */ - public function store(BaseRequest $request) - { - // - } - - - /** - * Show the form for editing the specified resource. - * @param int $id - * @return Renderable - */ - public function edit($id) + public function changeFiledStatus(Request $request) { - return view('admin::edit'); - } + if (!isset($this->service)){ + return $this->successJson([], '请先设置Service或者重写方法!'); + } - /** - * Remove the specified resource from storage. - * @param int $id - * @return Renderable - */ - public function destroy($id) - { - // + if ($this->service->changeFiledStatus($request->all())){ + return $this->successJson([], $this->service->getError()); + }else{ + return $this->errorJson($this->service->getError()); + } } } diff --git a/app/Modules/Admin/Http/Controllers/IndexController.php b/app/Modules/Admin/Http/Controllers/IndexController.php new file mode 100644 index 0000000000000000000000000000000000000000..a936e00b2505b7a32f58ff04d0c51647aa62d13b --- /dev/null +++ b/app/Modules/Admin/Http/Controllers/IndexController.php @@ -0,0 +1,13 @@ +successJson([]); + } +} diff --git a/app/Modules/Admin/Http/Controllers/UploadController.php b/app/Modules/Admin/Http/Controllers/UploadController.php new file mode 100644 index 0000000000000000000000000000000000000000..5277dc1110d46c53bb99f80ce692b5aa81b8ebc9 --- /dev/null +++ b/app/Modules/Admin/Http/Controllers/UploadController.php @@ -0,0 +1,31 @@ +file($file))){ + return $this->errorJson('请上传文件!'); + } + + $path = $request->file($file)->storePublicly( + date('Ym'), + config('filesystems') + ); + + return $this->successJson($path, '上传成功', ['path_url' => Storage::url($path)]); + } +} diff --git a/app/Modules/Admin/Http/Middleware/AdminLog.php b/app/Modules/Admin/Http/Middleware/AdminLog.php new file mode 100644 index 0000000000000000000000000000000000000000..5093e5b355b91fea1d4fd35da308f43d151ae646 --- /dev/null +++ b/app/Modules/Admin/Http/Middleware/AdminLog.php @@ -0,0 +1,40 @@ +getMethod()) != 'GET'){ + \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, + 'created_ip' => $ip_agent['ip'] ?? get_ip(), + 'browser_type' => $ip_agent['agent'] ?? $_SERVER['HTTP_USER_AGENT'], + 'created_time' => time(), + 'log_action' => request()->route()->getActionName(), + 'log_method' => request()->getMethod(), + 'log_duration' => microtime(true) - LARAVEL_START, + 'request_url' => URL::full() ?? get_this_url(), + ]); + } + + return $resource; + } +} diff --git a/app/Modules/Admin/Http/Middleware/CheckAuth.php b/app/Modules/Admin/Http/Middleware/CheckAuth.php new file mode 100644 index 0000000000000000000000000000000000000000..55b67d336890d6c86e8398737995fe5221c57108 --- /dev/null +++ b/app/Modules/Admin/Http/Middleware/CheckAuth.php @@ -0,0 +1,45 @@ +guard = 'admin'; + + try { + if ( !Auth()->guard($this->guard)->check() ) { //未登录踢回,给予错误返回提示 + return $this->errorJson('认证失败,请重新登录!'); + } + } catch (TokenExpiredException $e) { + return $this->errorJson($e->getMessage()); + } catch (TokenInvalidException $e) { + return $this->errorJson($e->getMessage()); + } catch (JWTException $e) { + return $this->errorJson($e->getMessage()); + } + + return $next($request); + } +} diff --git a/app/Modules/Admin/Http/Requests/Rabc/AdminMenuRequest.php b/app/Modules/Admin/Http/Requests/Rabc/AdminMenuRequest.php index 3f6b457e2f7eb102e7652e204488c945983177f5..4ae6689fda5b88f9a9151c0f11df952f4f514b8f 100644 --- a/app/Modules/Admin/Http/Requests/Rabc/AdminMenuRequest.php +++ b/app/Modules/Admin/Http/Requests/Rabc/AdminMenuRequest.php @@ -2,9 +2,7 @@ namespace App\Modules\Admin\Http\Requests\Rabc; -use App\Modules\Admin\Entities\Rabc\Admin; use App\Modules\Admin\Entities\Rabc\AdminMenu; -use App\Modules\Admin\Entities\Rabc\AdminRole; use App\Modules\Admin\Http\Requests\BaseRequest; class AdminMenuRequest extends BaseRequest @@ -16,14 +14,15 @@ class AdminMenuRequest extends BaseRequest */ public function rules() { - $primarykey = AdminMenu::getInstance()->getKeyName(); - $validate_id = ',' . request()->input($primarykey, 0) . ',' . $primarykey; + $instance = AdminMenu::getInstance(); + $primarykey = $instance->getKeyName(); + $validate_id = ',' . request()->input($primarykey, 0) . ',' . $primarykey; return [ 'menu_name' => [ 'required', 'max:256', - 'unique:admin_menus,menu_name' . $validate_id + 'unique:' . $instance->getTable() . ',menu_name' . $validate_id ], 'is_check' => [ 'required', diff --git a/app/Modules/Admin/Http/Requests/Rabc/AdminRequest.php b/app/Modules/Admin/Http/Requests/Rabc/AdminRequest.php index 04bab90ac3386c1873344321e5aa3b2dadd7ae73..8affc4e3daab1cd895cb3da4a0e524e359f219e9 100644 --- a/app/Modules/Admin/Http/Requests/Rabc/AdminRequest.php +++ b/app/Modules/Admin/Http/Requests/Rabc/AdminRequest.php @@ -14,14 +14,15 @@ class AdminRequest extends BaseRequest */ public function rules() { - $primarykey = Admin::getInstance()->getKeyName(); - $validate_id = ',' . request()->input($primarykey, 0) . ',' . $primarykey; + $instance = Admin::getInstance(); + $primarykey = $instance->getKeyName(); + $validate_id = ',' . request()->input($primarykey, 0) . ',' . $primarykey; return [ 'admin_name' => [ 'required', 'max:256', - 'unique:admins,admin_name' . $validate_id + 'unique:' . $instance->getTable() . ',admin_name' . $validate_id ], 'admin_email' => [ 'required', diff --git a/app/Modules/Admin/Http/Requests/Rabc/AdminRoleRequest.php b/app/Modules/Admin/Http/Requests/Rabc/AdminRoleRequest.php index 9024904815ce6ab936a263506558e29d6b0872e6..9d191f3225f38059f4022b0d3df38da63781cd48 100644 --- a/app/Modules/Admin/Http/Requests/Rabc/AdminRoleRequest.php +++ b/app/Modules/Admin/Http/Requests/Rabc/AdminRoleRequest.php @@ -2,7 +2,6 @@ namespace App\Modules\Admin\Http\Requests\Rabc; -use App\Modules\Admin\Entities\Rabc\Admin; use App\Modules\Admin\Entities\Rabc\AdminRole; use App\Modules\Admin\Http\Requests\BaseRequest; @@ -15,14 +14,15 @@ class AdminRoleRequest extends BaseRequest */ public function rules() { - $primarykey = AdminRole::getInstance()->getKeyName(); - $validate_id = ',' . request()->input($primarykey, 0) . ',' . $primarykey; + $instance = AdminRole::getInstance(); + $primarykey = $instance->getKeyName(); + $validate_id = ',' . request()->input($primarykey, 0) . ',' . $primarykey; return [ 'role_name' => [ 'required', 'max:256', - 'unique:admin_roles,role_name' . $validate_id + 'unique:' . $instance->getTable() . ',role_name' . $validate_id ], 'is_check' => [ 'required', diff --git a/app/Modules/Admin/Http/Requests/System/BannerRequest.php b/app/Modules/Admin/Http/Requests/System/BannerRequest.php index dad6e1bedf03bae5fb0a6fe034a5cc5d5aedba1a..e89679f4797294ccc864753d8bda8548bcf179a0 100644 --- a/app/Modules/Admin/Http/Requests/System/BannerRequest.php +++ b/app/Modules/Admin/Http/Requests/System/BannerRequest.php @@ -14,14 +14,15 @@ class BannerRequest extends BaseRequest */ public function rules() { - $primarykey = Banner::getInstance()->getKeyName(); + $instance = Banner::getInstance(); + $primarykey = $instance->getKeyName(); $validate_id = ',' . request()->input($primarykey, 0) . ',' . $primarykey; return [ 'banner_title' => [ 'required', 'max:256', - 'unique:banners,banner_title' . $validate_id + 'unique:' . $instance->getTable() . ',banner_title' . $validate_id ], 'banner_cover' => [ 'required', diff --git a/app/Modules/Admin/Http/Requests/System/ConfigRequest.php b/app/Modules/Admin/Http/Requests/System/ConfigRequest.php index 5cb7d0d8450b0b9e8b1eb11be69b8c1f0d57282c..7a0387df07b212d4c78a588e058a71208927f1cf 100644 --- a/app/Modules/Admin/Http/Requests/System/ConfigRequest.php +++ b/app/Modules/Admin/Http/Requests/System/ConfigRequest.php @@ -2,7 +2,6 @@ namespace App\Modules\Admin\Http\Requests\System; -use App\Modules\Admin\Entities\System\Banner; use App\Modules\Admin\Entities\System\Config; use App\Modules\Admin\Http\Requests\BaseRequest; @@ -15,7 +14,8 @@ class ConfigRequest extends BaseRequest */ public function rules() { - $primarykey = Config::getInstance()->getKeyName(); + $instance = Config::getInstance(); + $primarykey = $instance->getKeyName(); $validate_id = ',' . request()->input($primarykey, 0) . ',' . $primarykey; return [ @@ -26,7 +26,7 @@ class ConfigRequest extends BaseRequest 'config_name' => [ 'required', 'max:256', - 'unique:configs,config_name' . $validate_id + 'unique:' . $instance->getTable() . ',config_name' . $validate_id ] ]; } diff --git a/app/Modules/Admin/Http/Requests/System/FriendlinkRequest.php b/app/Modules/Admin/Http/Requests/System/FriendlinkRequest.php index 065bc4162b316a8b00a81c94ec27330bc642f441..fb09d2b6e0a0aff97003c463cf42401b15c94dd9 100644 --- a/app/Modules/Admin/Http/Requests/System/FriendlinkRequest.php +++ b/app/Modules/Admin/Http/Requests/System/FriendlinkRequest.php @@ -2,7 +2,6 @@ namespace App\Modules\Admin\Http\Requests\System; -use App\Modules\Admin\Entities\System\Banner; use App\Modules\Admin\Entities\System\Friendlink; use App\Modules\Admin\Http\Requests\BaseRequest; @@ -15,14 +14,15 @@ class FriendlinkRequest extends BaseRequest */ public function rules() { - $primarykey = Friendlink::getInstance()->getKeyName(); + $instance = Friendlink::getInstance(); + $primarykey = $instance->getKeyName(); $validate_id = ',' . request()->input($primarykey, 0) . ',' . $primarykey; return [ 'link_name' => [ 'required', 'max:256', - 'unique:friendlinks,link_name' . $validate_id + 'unique:' . $instance->getTable() . ',link_name' . $validate_id ], 'link_url' => [ 'url', diff --git a/app/Modules/Admin/Http/Requests/System/ProtocolRequest.php b/app/Modules/Admin/Http/Requests/System/ProtocolRequest.php index a9e98fa0af4a58d0bac1664e8b7345e2bdf68dce..324cd543975542820d927ab069f3e4137f20db68 100644 --- a/app/Modules/Admin/Http/Requests/System/ProtocolRequest.php +++ b/app/Modules/Admin/Http/Requests/System/ProtocolRequest.php @@ -2,10 +2,7 @@ namespace App\Modules\Admin\Http\Requests\System; -use App\Modules\Admin\Entities\System\Banner; -use App\Modules\Admin\Entities\System\Friendlink; use App\Modules\Admin\Entities\System\Protocol; -use App\Modules\Admin\Entities\System\Version; use App\Modules\Admin\Http\Requests\BaseRequest; class ProtocolRequest extends BaseRequest @@ -17,14 +14,15 @@ class ProtocolRequest extends BaseRequest */ public function rules() { - $primarykey = Protocol::getInstance()->getKeyName(); + $instance = Protocol::getInstance(); + $primarykey = $instance->getKeyName(); $validate_id = ',' . request()->input($primarykey, 0) . ',' . $primarykey; return [ 'protocol_name' => [ 'required', 'max:256', - 'unique:protocols,protocol_name' . $validate_id + 'unique:' . $instance->getTable() . ',protocol_name' . $validate_id ], 'protocol_type' => [ 'required', diff --git a/app/Modules/Admin/Http/Requests/System/VersionRequest.php b/app/Modules/Admin/Http/Requests/System/VersionRequest.php index 14a2cc906500852b0fad8fbb5e7d10a1951be452..25fdc379a7bb72a71173a7d2522464ca4b3494e9 100644 --- a/app/Modules/Admin/Http/Requests/System/VersionRequest.php +++ b/app/Modules/Admin/Http/Requests/System/VersionRequest.php @@ -2,8 +2,6 @@ namespace App\Modules\Admin\Http\Requests\System; -use App\Modules\Admin\Entities\System\Banner; -use App\Modules\Admin\Entities\System\Friendlink; use App\Modules\Admin\Entities\System\Version; use App\Modules\Admin\Http\Requests\BaseRequest; @@ -16,14 +14,15 @@ class VersionRequest extends BaseRequest */ public function rules() { - $primarykey = Version::getInstance()->getKeyName(); + $instance = Version::getInstance(); + $primarykey = $instance->getKeyName(); $validate_id = ',' . request()->input($primarykey, 0) . ',' . $primarykey; return [ 'version_name' => [ 'required', 'max:256', - 'unique:versions,version_name' . $validate_id + 'unique:' . $instance->getTable() . ',version_name' . $validate_id ], 'version_number' => [ 'required', diff --git a/app/Modules/Admin/Routes/web.php b/app/Modules/Admin/Routes/web.php index 369be7de856b3b58503b9ad20e9615011dd99730..79c4d6b88a54093f0991c7ab0ba5e4800531efc9 100644 --- a/app/Modules/Admin/Routes/web.php +++ b/app/Modules/Admin/Routes/web.php @@ -11,6 +11,10 @@ | */ +use Illuminate\Support\Facades\Route; +use App\Modules\Admin\Http\Middleware\CheckAuth; +use App\Modules\Admin\Http\Middleware\AdminLog; + Route::prefix('admin')->group(function() { // Route::get('/', 'AdminController@index'); //后台管理路由 @@ -20,77 +24,84 @@ Route::prefix('admin')->group(function() { Route::prefix('auth')->group(function() { Route::any('login', 'AuthController@login'); - Route::any('me', 'AuthController@me'); - Route::any('logout', 'AuthController@logout'); + Route::any('me', 'AuthController@me')->middleware(CheckAuth::class); + Route::any('logout', 'AuthController@logout')->middleware(CheckAuth::class); + Route::any('getRabcList', 'AuthController@getRabcList')->middleware(CheckAuth::class); }); - Route::prefix('banners')->group(function() { - Route::any('/', 'System\BannerController@index'); - Route::any('/create', 'System\BannerController@create'); - Route::any('/update', 'System\BannerController@update'); - Route::any('/delete', 'System\BannerController@delete'); - }); + Route::middleware([CheckAuth::class, AdminLog::class])->group(function () { - Route::prefix('configs')->group(function() { - Route::any('/', 'System\ConfigController@index'); - Route::any('/create', 'System\ConfigController@create'); - Route::any('/update', 'System\ConfigController@update'); - Route::any('/delete', 'System\ConfigController@delete'); - }); + // 首页 + Route::post('indexs', 'IndexController@index'); - Route::prefix('friendlinks')->group(function() { - Route::any('/', 'System\FriendlinkController@index'); - Route::any('/create', 'System\FriendlinkController@create'); - Route::any('/update', 'System\FriendlinkController@update'); - Route::any('/delete', 'System\FriendlinkController@delete'); - }); + // 文件上传 + Route::post('upload_file', 'UploadController@file'); - Route::prefix('protocols')->group(function() { - Route::any('/', 'System\ProtocolController@index'); - Route::any('/create', 'System\ProtocolController@create'); - Route::any('/update', 'System\ProtocolController@update'); - Route::any('/delete', 'System\ProtocolController@delete'); - }); + Route::prefix('banners')->group(function() { + Route::any('/', 'System\BannerController@index'); + Route::any('/create', 'System\BannerController@create'); + Route::any('/create', 'System\BannerController@create'); + Route::any('/update', 'System\BannerController@update'); + Route::any('/delete', 'System\BannerController@delete'); + }); - Route::prefix('versions')->group(function() { - Route::any('/', 'System\VersionController@index'); - Route::any('/create', 'System\VersionController@create'); - Route::any('/update', 'System\VersionController@update'); - Route::any('/delete', 'System\VersionController@delete'); - }); + Route::prefix('configs')->group(function() { + Route::any('/', 'System\ConfigController@index'); + Route::any('/create', 'System\ConfigController@create'); + Route::any('/update', 'System\ConfigController@update'); + Route::any('/delete', 'System\ConfigController@delete'); + }); - Route::prefix('admins')->group(function() { - Route::any('/', 'Rabc\AdminController@index'); - Route::any('/create', 'Rabc\AdminController@create'); - Route::any('/update', 'Rabc\AdminController@update'); - Route::any('/delete', 'Rabc\AdminController@delete'); - }); + Route::prefix('friendlinks')->group(function() { + Route::any('/', 'System\FriendlinkController@index'); + Route::any('/create', 'System\FriendlinkController@create'); + Route::any('/update', 'System\FriendlinkController@update'); + Route::any('/delete', 'System\FriendlinkController@delete'); + }); - Route::prefix('roles')->group(function() { - Route::any('/', 'Rabc\AdminRoleController@index'); - Route::any('/create', 'Rabc\AdminRoleController@create'); - Route::any('/update', 'Rabc\AdminRoleController@update'); - Route::any('/delete', 'Rabc\AdminRoleController@delete'); - }); + Route::prefix('protocols')->group(function() { + Route::any('/', 'System\ProtocolController@index'); + Route::any('/create', 'System\ProtocolController@create'); + Route::any('/update', 'System\ProtocolController@update'); + Route::any('/delete', 'System\ProtocolController@delete'); + }); - Route::prefix('menus')->group(function() { - Route::any('/', 'Rabc\AdminMenuController@index'); - Route::any('/create', 'Rabc\AdminMenuController@create'); - Route::any('/update', 'Rabc\AdminMenuController@update'); - Route::any('/delete', 'Rabc\AdminMenuController@delete'); - }); + Route::prefix('versions')->group(function() { + Route::any('/', 'System\VersionController@index'); + Route::any('/create', 'System\VersionController@create'); + Route::any('/update', 'System\VersionController@update'); + Route::any('/delete', 'System\VersionController@delete'); + }); - Route::prefix('adminlogs')->group(function() { - Route::any('/', 'Log\AdminLogController@index'); - Route::any('/create', 'System\AdminLogController@create'); - Route::any('/update', 'System\AdminLogController@update'); - Route::any('/delete', 'System\AdminLogController@delete'); - }); + Route::prefix('admins')->group(function() { + Route::any('/', 'Rabc\AdminController@index'); + Route::any('/create', 'Rabc\AdminController@create'); + Route::any('/update', 'Rabc\AdminController@update'); + Route::any('/delete', 'Rabc\AdminController@delete'); + }); + + Route::prefix('roles')->group(function() { + Route::any('/', 'Rabc\AdminRoleController@index'); + Route::any('/create', 'Rabc\AdminRoleController@create'); + Route::any('/update', 'Rabc\AdminRoleController@update'); + Route::any('/delete', 'Rabc\AdminRoleController@delete'); + }); + + Route::prefix('menus')->group(function() { + Route::any('/', 'Rabc\AdminMenuController@index'); + Route::any('/create', 'Rabc\AdminMenuController@create'); + Route::any('/update', 'Rabc\AdminMenuController@update'); + Route::any('/delete', 'Rabc\AdminMenuController@delete'); + }); + + Route::prefix('adminlogs')->group(function() { + Route::any('/', 'Log\AdminLogController@index'); + Route::any('/delete', 'System\AdminLogController@delete'); + }); - Route::prefix('adminloginlogs')->group(function() { - Route::any('/', 'Log\AdminLoginLogController@index'); - Route::any('/create', 'System\AdminLoginLogController@create'); - Route::any('/update', 'System\AdminLoginLogController@update'); - Route::any('/delete', 'System\AdminLoginLogController@delete'); + Route::prefix('adminloginlogs')->group(function() { + Route::any('/', 'Log\AdminLoginLogController@index'); + Route::any('/delete', 'System\AdminLoginLogController@delete'); + }); }); }); diff --git a/app/Modules/Admin/Services/BaseService.php b/app/Modules/Admin/Services/BaseService.php index 7829864bc00d2cd97ca139a35f7045f27263987e..8589eb94b8c34d6197829bbfa2e85c1f79583d1a 100644 --- a/app/Modules/Admin/Services/BaseService.php +++ b/app/Modules/Admin/Services/BaseService.php @@ -2,14 +2,19 @@ namespace App\Modules\Admin\Services; +use App\Models\MonthModel; use App\Services\Service; class BaseService extends Service { protected $model; - public function lists(array $params) + public function lists(array $params): array { + // 如果是按月分表的模型,设置按月份查询的月份表 + if ($this->model instanceof MonthModel){ + $this->model = $this->model->setMonthTable(request()->input('search_month', '')); + } $lists = $this->model->orderBy($this->model->getKeyName(), 'DESC')->paginate($this->getLimit($params['limit'] ?? 10)); return [ @@ -21,24 +26,61 @@ class BaseService extends Service ]; } + public function detail($id) + { + return $this->model->detail($id); + } + public function create(array $params) { - return $this->model->create($params); + return $this->model->create($this->model->setFilterFields($params)); } public function update(array $params) { $primaryKey = $this->model->getKeyName(); - return $this->model->where($primaryKey, $params[$primaryKey])->update($params); + return $this->model->where($primaryKey, $params[$primaryKey])->update($this->model->setFilterFields($params)); } public function delete(array $params) { $primaryKey = $this->model->getKeyName(); + if ( empty($params[$primaryKey]) && empty($params['is_batch'])) { + $this->setError('请指定删除标识!'); + return false; + } + // 是否为批量删除 + if (isset($params['is_batch']) && $params['is_batch'] == 1){ + $ids = $params['ids'] ?? $params[$primaryKey]; + }else{ + $ids = [$params[$primaryKey]]; + } + /** + * 如果是月份表进行删除的话,那么需要指定表名 + */ + if ($this->model instanceof MonthModel && isset($params['month'])){ + $this->model = $this->model->setMonthTable($params['month']); + } if ($this->model->getIsDelete() == 0){ - return $this->model->where($primaryKey, $params[$primaryKey])->update([$this->model->getDeleteField() => 1]); + return $this->model->where($primaryKey, 'IN', $ids)->update([$this->model->getDeleteField() => 1]); }else{ - return $this->model->where($primaryKey, $params[$primaryKey])->delete(); + return $this->model->where($primaryKey, 'IN', $ids)->delete(); + } + } + + public function changeFiledStatus(array $params) + { + $primaryKey = $this->model->getKeyName(); + if (empty($params[$primaryKey])) { + $this->setError('请指定删除标识!'); + return false; + } + if ( $this->model->where([$primaryKey => $params[$primaryKey]])->update([$params['change_field'] => $params['change_value']]) ) { + $this->setError('设置成功!'); + return true; + } else { + $this->setError('设置失败!'); + return false; } } } diff --git a/app/Traits/MysqlTable.php b/app/Traits/MysqlTable.php new file mode 100644 index 0000000000000000000000000000000000000000..914e4396ded45010b323cc4b9f0f883117b66513 --- /dev/null +++ b/app/Traits/MysqlTable.php @@ -0,0 +1,29 @@ +setError('请先设置要生成的新表名'); + return false; + } + return DB::select("CREATE TABLE IF NOT EXISTS `{$new_table}` LIKE `{$old_table}`"); + } +} diff --git a/config/filesystems.php b/config/filesystems.php index 10c9d9be2ab62d8ed4eb10d2071d7a1f4863a8e8..207714b45bf3804cc74c13b13b11e7bac20a0e71 100644 --- a/config/filesystems.php +++ b/config/filesystems.php @@ -29,10 +29,19 @@ return [ */ 'disks' => [ - 'local' => [ 'driver' => 'local', 'root' => storage_path('app'), + 'permissions' => [ + 'file' => [ + 'public' => 0664, + 'private' => 0600, + ], + 'dir' => [ + 'public' => 0775, + 'private' => 0700, + ], + ], ], 'public' => [