mirror of
				https://github.com/continew-org/continew-admin.git
				synced 2025-10-31 22:57:17 +08:00 
			
		
		
		
	feat(system/config): 移除系统管理,新增存储配置
This commit is contained in:
		| @@ -25,7 +25,6 @@ import com.github.xiaoymin.knife4j.spring.configuration.Knife4jProperties; | ||||
| import io.swagger.v3.oas.annotations.Hidden; | ||||
| import lombok.RequiredArgsConstructor; | ||||
| import lombok.extern.slf4j.Slf4j; | ||||
| import org.dromara.x.file.storage.spring.EnableFileStorage; | ||||
| import org.springframework.boot.ApplicationArguments; | ||||
| import org.springframework.boot.ApplicationRunner; | ||||
| import org.springframework.boot.SpringApplication; | ||||
| @@ -45,7 +44,6 @@ import top.continew.starter.web.model.R; | ||||
|  * @since 2022/12/8 23:15 | ||||
|  */ | ||||
| @Slf4j | ||||
| @EnableFileStorage | ||||
| @EnableMethodCache(basePackages = "top.continew.admin") | ||||
| @EnableGlobalResponse | ||||
| @EnableCrudRestController | ||||
|   | ||||
| @@ -26,7 +26,6 @@ import io.swagger.v3.oas.annotations.enums.ParameterIn; | ||||
| import io.swagger.v3.oas.annotations.tags.Tag; | ||||
| import jakarta.validation.constraints.NotNull; | ||||
| import lombok.RequiredArgsConstructor; | ||||
| import org.dromara.x.file.storage.core.FileInfo; | ||||
| import org.springframework.validation.annotation.Validated; | ||||
| import org.springframework.web.bind.annotation.*; | ||||
| import org.springframework.web.multipart.MultipartFile; | ||||
| @@ -66,9 +65,9 @@ public class CommonController { | ||||
|  | ||||
|     @Operation(summary = "上传文件", description = "上传文件") | ||||
|     @PostMapping("/file") | ||||
|     public FileUploadResp upload(@NotNull(message = "文件不能为空") MultipartFile file) { | ||||
|     public FileUploadResp upload(@NotNull(message = "文件不能为空") @RequestPart("file") MultipartFile file) { | ||||
|         ValidationUtils.throwIf(file::isEmpty, "文件不能为空"); | ||||
|         FileInfo fileInfo = fileService.upload(file); | ||||
|         FileUploadResp fileInfo = fileService.upload(file); | ||||
|         return FileUploadResp.builder().url(fileInfo.getUrl()).build(); | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -47,7 +47,6 @@ public class DemoEnvironmentJob { | ||||
|  | ||||
|     private final DictItemMapper dictItemMapper; | ||||
|     private final DictMapper dictMapper; | ||||
|     private final StorageMapper storageMapper; | ||||
|     private final NoticeMapper noticeMapper; | ||||
|     private final MessageMapper messageMapper; | ||||
|     private final MessageUserMapper messageUserMapper; | ||||
| @@ -84,8 +83,6 @@ public class DemoEnvironmentJob { | ||||
|             this.log(dictItemCount, "字典项"); | ||||
|             Long dictCount = dictMapper.lambdaQuery().gt(DictDO::getId, DELETE_FLAG).count(); | ||||
|             this.log(dictCount, "字典"); | ||||
|             Long storageCount = storageMapper.lambdaQuery().gt(StorageDO::getId, DELETE_FLAG).count(); | ||||
|             this.log(storageCount, "存储"); | ||||
|             Long noticeCount = noticeMapper.lambdaQuery().gt(NoticeDO::getId, DELETE_FLAG).count(); | ||||
|             this.log(noticeCount, "公告"); | ||||
|             Long messageCount = messageMapper.lambdaQuery().count(); | ||||
| @@ -111,9 +108,6 @@ public class DemoEnvironmentJob { | ||||
|             this.clean(dictCount, "字典", CacheConstants.DICT_KEY_PREFIX, () -> dictMapper.lambdaUpdate() | ||||
|                 .gt(DictDO::getId, DELETE_FLAG) | ||||
|                 .remove()); | ||||
|             this.clean(storageCount, "存储", null, () -> storageMapper.lambdaUpdate() | ||||
|                 .gt(StorageDO::getId, DELETE_FLAG) | ||||
|                 .remove()); | ||||
|             this.clean(noticeCount, "公告", null, () -> noticeMapper.lambdaUpdate() | ||||
|                 .gt(NoticeDO::getId, DELETE_FLAG) | ||||
|                 .remove()); | ||||
|   | ||||
| @@ -1,39 +0,0 @@ | ||||
| /* | ||||
|  * Copyright (c) 2022-present Charles7c Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
|  * you may not use this file except in compliance with the License. | ||||
|  * You may obtain a copy of the License at | ||||
|  * | ||||
|  *     http://www.apache.org/licenses/LICENSE-2.0 | ||||
|  * | ||||
|  * Unless required by applicable law or agreed to in writing, software | ||||
|  * distributed under the License is distributed on an "AS IS" BASIS, | ||||
|  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
|  * See the License for the specific language governing permissions and | ||||
|  * limitations under the License. | ||||
|  */ | ||||
|  | ||||
| package top.continew.admin.controller.system; | ||||
|  | ||||
| import io.swagger.v3.oas.annotations.tags.Tag; | ||||
| import org.springframework.web.bind.annotation.RestController; | ||||
| import top.continew.admin.common.controller.BaseController; | ||||
| import top.continew.admin.system.model.query.StorageQuery; | ||||
| import top.continew.admin.system.model.req.StorageReq; | ||||
| import top.continew.admin.system.model.resp.StorageResp; | ||||
| import top.continew.admin.system.service.StorageService; | ||||
| import top.continew.starter.extension.crud.annotation.CrudRequestMapping; | ||||
| import top.continew.starter.extension.crud.enums.Api; | ||||
|  | ||||
| /** | ||||
|  * 存储管理 API | ||||
|  * | ||||
|  * @author Charles7c | ||||
|  * @since 2023/12/26 22:09 | ||||
|  */ | ||||
| @Tag(name = "存储管理 API") | ||||
| @RestController | ||||
| @CrudRequestMapping(value = "/system/storage", api = {Api.PAGE, Api.DETAIL, Api.ADD, Api.UPDATE, Api.DELETE}) | ||||
| public class StorageController extends BaseController<StorageService, StorageResp, StorageResp, StorageQuery, StorageReq> { | ||||
| } | ||||
| @@ -71,13 +71,6 @@ VALUES | ||||
| (1105, '删除', 1100, 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'system:file:delete', 5, 1, 1, NOW()), | ||||
| (1106, '下载', 1100, 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'system:file:download', 6, 1, 1, NOW()), | ||||
|  | ||||
| (1110, '存储管理', 1000, 2, '/system/storage', 'SystemStorage', 'system/storage/index', NULL, 'storage', b'0', b'0', b'0', NULL, 8, 1, 1, NOW()), | ||||
| (1111, '列表', 1110, 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'system:storage:list', 1, 1, 1, NOW()), | ||||
| (1112, '详情', 1110, 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'system:storage:detail', 2, 1, 1, NOW()), | ||||
| (1113, '新增', 1110, 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'system:storage:add', 3, 1, 1, NOW()), | ||||
| (1114, '修改', 1110, 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'system:storage:update', 4, 1, 1, NOW()), | ||||
| (1115, '删除', 1110, 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'system:storage:delete', 5, 1, 1, NOW()), | ||||
|  | ||||
| ( 1180, '客户端管理', 1000, 2, '/system/client', 'SystemClient', 'system/client/index', NULL, 'mobile', b'0', b'0', b'0', NULL, 9, 1, 1, NOW()), | ||||
| (1181, '列表', 1180, 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'system:client:list', 1, 1, 1, NOW()), | ||||
| (1182, '详情', 1180, 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'system:client:detail', 2, 1, 1, NOW()), | ||||
| @@ -161,28 +154,37 @@ VALUES | ||||
| INSERT INTO `sys_option` | ||||
| (`id`, `category`, `name`, `code`, `value`, `default_value`, `description`) | ||||
| VALUES | ||||
| (1, 'SITE', '系统标题', 'SITE_TITLE', NULL, 'ContiNew Admin', '用于显示登录页面的系统标题。'), | ||||
| (2, 'SITE', '系统描述', 'SITE_DESCRIPTION', NULL, '持续迭代优化的前后端分离中后台管理系统框架', NULL), | ||||
| (3, 'SITE', '版权信息', 'SITE_COPYRIGHT', NULL, 'Copyright © 2022 - present ContiNew Admin 版权所有', '用于显示登录页面的底部版权信息。'), | ||||
| (4, 'SITE', '备案号', 'SITE_BEIAN', NULL, NULL, 'ICP备案号'), | ||||
| (5, 'SITE', 'favicon', 'SITE_FAVICON', NULL, '/favicon.ico', '用于显示浏览器地址栏的系统LOGO。'), | ||||
| (6, 'SITE', '系统LOGO', 'SITE_LOGO', NULL, '/logo.svg', '用于显示登录页面的系统LOGO。'), | ||||
| (7, 'PASSWORD', '登录密码错误锁定账号的次数', 'PASSWORD_ERROR_LOCK_COUNT', NULL, '5', '取值范围为 0-10(0 表示不锁定)。'), | ||||
| (8, 'PASSWORD', '登录密码错误锁定账号的时间(min)', 'PASSWORD_ERROR_LOCK_MINUTES', NULL, '5', '取值范围为 1-1440(一天)。'), | ||||
| (9, 'PASSWORD', '密码有效期(天)', 'PASSWORD_EXPIRATION_DAYS', NULL, '0', '取值范围为 0-999(0 表示永久有效)。'), | ||||
| (10, 'PASSWORD', '密码到期提前提示(天)', 'PASSWORD_EXPIRATION_WARNING_DAYS', NULL, '0', '密码到期 N 天前进行提示(0 表示不提示)。'), | ||||
| (11, 'PASSWORD', '密码重复使用次数', 'PASSWORD_REPETITION_TIMES', NULL, '3', '不允许使用最近 N 次密码,取值范围为 3-32。'), | ||||
| (12, 'PASSWORD', '密码最小长度', 'PASSWORD_MIN_LENGTH', NULL, '8', '取值范围为 8-32。'), | ||||
| (13, 'PASSWORD', '密码是否允许包含正反序账号名', 'PASSWORD_ALLOW_CONTAIN_USERNAME', NULL, '1', NULL), | ||||
| (14, 'PASSWORD', '密码是否必须包含特殊字符', 'PASSWORD_REQUIRE_SYMBOLS', NULL, '0', NULL), | ||||
| (15, 'MAIL', '发送协议', 'MAIL_PROTOCOL', NULL, 'smtp', NULL), | ||||
| (16, 'MAIL', '服务器地址', 'MAIL_HOST', NULL, 'smtp.126.com', NULL), | ||||
| (17, 'MAIL', '服务器端口', 'MAIL_PORT', NULL, '465', NULL), | ||||
| (18, 'MAIL', '用户名', 'MAIL_USERNAME', NULL, 'charles7c@126.com', NULL), | ||||
| (19, 'MAIL', '密码', 'MAIL_PASSWORD', NULL, NULL, NULL), | ||||
| (20, 'MAIL', '是否启用SSL', 'MAIL_SSL_ENABLED', NULL, '1', NULL), | ||||
| (21, 'MAIL', 'SSL端口', 'MAIL_SSL_PORT', NULL, '465', NULL), | ||||
| (22, 'LOGIN', '是否启用验证码', 'LOGIN_CAPTCHA_ENABLED', NULL, '1', '是否启用验证码(1:是;0:否)'); | ||||
| (1, 'SITE', '网站名称', 'SITE_TITLE', NULL, 'ContiNew Admin', '显示在浏览器标题栏和登录界面的系统名称'), | ||||
| (2, 'SITE', '网站描述', 'SITE_DESCRIPTION', NULL, '持续迭代优化的前后端分离中后台管理系统框架', '用于 SEO 的网站元描述'), | ||||
| (3, 'SITE', '版权声明', 'SITE_COPYRIGHT', NULL, 'Copyright © 2022 - present ContiNew Admin 版权所有', '显示在页面底部的版权声明文本'), | ||||
| (4, 'SITE', '网站域名', 'SITE_DOMAIN', NULL, 'https://admin.continew.top', '系统主域名,用于生成绝对链接和 CORS 配置'), | ||||
| (5, 'SITE', '网站备案号', 'SITE_BEIAN', NULL, NULL, '工信部 ICP 备案编号(如:京ICP备12345678号)'), | ||||
| (6, 'SITE', '网站图标', 'SITE_FAVICON', NULL, '/favicon.ico', '浏览器标签页显示的网站图标(建议 .ico 格式)'), | ||||
| (7, 'SITE', '网站LOGO', 'SITE_LOGO', NULL, '/logo.svg', '显示在登录页面和系统导航栏的网站图标(建议 .svg 格式)'), | ||||
| (10, 'PASSWORD', '密码错误锁定阈值', 'PASSWORD_ERROR_LOCK_COUNT', NULL, '5', '连续登录失败次数达到该值将锁定账号(0-10次,0表示禁用锁定)'), | ||||
| (11, 'PASSWORD', '账号锁定时长(分钟)', 'PASSWORD_ERROR_LOCK_MINUTES', NULL, '5', '账号锁定后自动解锁的时间(1-1440分钟,即24小时)'), | ||||
| (12, 'PASSWORD', '密码有效期(天)', 'PASSWORD_EXPIRATION_DAYS', NULL, '0', '密码强制修改周期(0-999天,0表示永不过期)'), | ||||
| (13, 'PASSWORD', '密码到期提醒(天)', 'PASSWORD_EXPIRATION_WARNING_DAYS', NULL, '0', '密码过期前的提前提醒天数(0表示不提醒)'), | ||||
| (14, 'PASSWORD', '历史密码重复校验次数', 'PASSWORD_REPETITION_TIMES', NULL, '3', '禁止使用最近 N 次的历史密码(3-32次)'), | ||||
| (15, 'PASSWORD', '密码最小长度', 'PASSWORD_MIN_LENGTH', NULL, '8', '密码最小字符长度要求(8-32个字符)'), | ||||
| (16, 'PASSWORD', '是否允许密码包含用户名', 'PASSWORD_ALLOW_CONTAIN_USERNAME', NULL, '1', '是否允许密码包含正序或倒序的用户名字符'), | ||||
| (17, 'PASSWORD', '密码是否必须包含特殊字符', 'PASSWORD_REQUIRE_SYMBOLS', NULL, '0', '是否要求密码必须包含特殊字符(如:!@#$%)'), | ||||
| (20, 'MAIL', '邮件协议', 'MAIL_PROTOCOL', NULL, 'smtp', '邮件发送协议类型'), | ||||
| (21, 'MAIL', '服务器地址', 'MAIL_HOST', NULL, 'smtp.126.com', '邮件服务器地址'), | ||||
| (22, 'MAIL', '服务器端口', 'MAIL_PORT', NULL, '465', '邮件服务器连接端口'), | ||||
| (23, 'MAIL', '邮箱账号', 'MAIL_USERNAME', NULL, 'charles7c@126.com', '发件人邮箱地址'), | ||||
| (24, 'MAIL', '邮箱密码', 'MAIL_PASSWORD', NULL, NULL, '服务授权密码/客户端专用密码'), | ||||
| (25, 'MAIL', '启用SSL加密', 'MAIL_SSL_ENABLED', NULL, '1', '是否启用SSL/TLS加密连接'), | ||||
| (26, 'MAIL', 'SSL端口号', 'MAIL_SSL_PORT', NULL, '465', 'SSL加密连接的备用端口(通常与主端口一致)'), | ||||
| (30, 'STORAGE', '默认存储类型', 'STORAGE_DEFAULT', NULL, 'LOCAL', '系统文件存储方式(LOCAL:本地存储;OSS:对象存储)'), | ||||
| (31, 'STORAGE', '本地存储路径', 'STORAGE_LOCAL_BUCKET', NULL, 'C:/continew-admin/data/file/', '本地存储目录绝对路径(需以斜杠结尾,如:/data/uploads/)'), | ||||
| (32, 'STORAGE', '本地资源访问地址', 'STORAGE_LOCAL_ENDPOINT', NULL, 'localhost:8000/file', '通过 URL 访问本地文件的映射地址'), | ||||
| (33, 'STORAGE', 'Access Key', 'STORAGE_OSS_ACCESS_KEY', NULL, NULL, '对象存储访问密钥'), | ||||
| (34, 'STORAGE', 'Secret Key', 'STORAGE_OSS_SECRET_KEY', NULL, NULL, '对象存储私有密钥'), | ||||
| (35, 'STORAGE', '对象存储桶名称', 'STORAGE_OSS_BUCKET', NULL, 'continew', '对象存储 Bucket 名称(需预先创建)'), | ||||
| (36, 'STORAGE', '对象存储终端节点', 'STORAGE_OSS_ENDPOINT', NULL, NULL, '对象存储访问地址'), | ||||
| (37, 'STORAGE', '对象存储区域代码', 'STORAGE_OSS_REGION', NULL, 'cn-hangzhou', '对象存储数据中心区域标识(如:cn-hangzhou)'), | ||||
| (40, 'LOGIN', '是否启用验证码', 'LOGIN_CAPTCHA_ENABLED', NULL, '1', NULL); | ||||
|  | ||||
| -- 初始化默认字典 | ||||
| INSERT INTO `sys_dict` | ||||
| @@ -240,13 +242,6 @@ VALUES | ||||
| -- 初始化默认角色和部门关联数据 | ||||
| INSERT INTO `sys_role_dept` (`role_id`, `dept_id`) VALUES (547888897925840927, 547887852587843593); | ||||
|  | ||||
| -- 初始化默认存储 | ||||
| INSERT INTO `sys_storage` | ||||
| (`id`, `name`, `code`, `type`, `access_key`, `secret_key`, `endpoint`, `bucket_name`, `domain`, `description`, `is_default`, `sort`, `status`, `create_user`, `create_time`) | ||||
| VALUES | ||||
| (1, '开发环境', 'local_dev', 2, NULL, NULL, NULL, 'C:/continew-admin/data/file/', 'http://localhost:8000/file', '本地存储', b'1', 1, 1, 1, NOW()), | ||||
| (2, '生产环境', 'local_prod', 2, NULL, NULL, NULL, '../data/file/', 'http://api.continew.top/file', '本地存储', b'0', 2, 2, 1, NOW()); | ||||
|  | ||||
| -- 初始化客户端数据 | ||||
| INSERT INTO `sys_client` | ||||
| (`id`, `client_id`, `client_key`, `client_secret`, `auth_type`, `client_type`, `active_timeout`, `timeout`, `status`, `create_user`, `create_time`) | ||||
|   | ||||
| @@ -191,7 +191,7 @@ CREATE TABLE IF NOT EXISTS `sys_log` ( | ||||
|     `id`               bigint(20)   NOT NULL AUTO_INCREMENT     COMMENT 'ID', | ||||
|     `trace_id`         varchar(255) DEFAULT NULL                COMMENT '链路ID', | ||||
|     `description`      varchar(255) NOT NULL                    COMMENT '日志描述', | ||||
|     `module`           varchar(50)  NOT NULL                    COMMENT '所属模块', | ||||
|     `module`           varchar(100) NOT NULL                    COMMENT '所属模块', | ||||
|     `request_url`      varchar(512) NOT NULL                    COMMENT '请求URL', | ||||
|     `request_method`   varchar(10)  NOT NULL                    COMMENT '请求方式', | ||||
|     `request_headers`  text         DEFAULT NULL                COMMENT '请求头', | ||||
| @@ -252,40 +252,19 @@ CREATE TABLE IF NOT EXISTS `sys_notice` ( | ||||
|     INDEX `idx_update_user`(`update_user`) | ||||
| ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='公告表'; | ||||
|  | ||||
| CREATE TABLE IF NOT EXISTS `sys_storage` ( | ||||
|     `id`          bigint(20)   NOT NULL AUTO_INCREMENT     COMMENT 'ID', | ||||
|     `name`        varchar(100) NOT NULL                    COMMENT '名称', | ||||
|     `code`        varchar(30)  NOT NULL                    COMMENT '编码', | ||||
|     `type`        tinyint(1)   UNSIGNED NOT NULL DEFAULT 1 COMMENT '类型(1:兼容S3协议存储;2:本地存储)', | ||||
|     `access_key`  varchar(255) DEFAULT NULL                COMMENT 'Access Key(访问密钥)', | ||||
|     `secret_key`  varchar(255) DEFAULT NULL                COMMENT 'Secret Key(私有密钥)', | ||||
|     `endpoint`    varchar(255) DEFAULT NULL                COMMENT 'Endpoint(终端节点)', | ||||
|     `bucket_name` varchar(255) DEFAULT NULL                COMMENT '桶名称', | ||||
|     `domain`      varchar(255) NOT NULL DEFAULT ''         COMMENT '域名', | ||||
|     `description` varchar(200) DEFAULT NULL                COMMENT '描述', | ||||
|     `is_default`  bit(1)       NOT NULL DEFAULT b'0'       COMMENT '是否为默认存储', | ||||
|     `sort`        int          NOT NULL DEFAULT 999        COMMENT '排序', | ||||
|     `status`      tinyint(1)   UNSIGNED NOT NULL DEFAULT 1 COMMENT '状态(1:启用;2:禁用)', | ||||
|     `create_user` bigint(20)   NOT NULL                    COMMENT '创建人', | ||||
|     `create_time` datetime     NOT NULL                    COMMENT '创建时间', | ||||
|     `update_user` bigint(20)   DEFAULT NULL                COMMENT '修改人', | ||||
|     `update_time` datetime     DEFAULT NULL                COMMENT '修改时间', | ||||
|     PRIMARY KEY (`id`), | ||||
|     UNIQUE INDEX `uk_code`(`code`), | ||||
|     INDEX `idx_create_user`(`create_user`), | ||||
|     INDEX `idx_update_user`(`update_user`) | ||||
| ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='存储表'; | ||||
|  | ||||
| CREATE TABLE IF NOT EXISTS `sys_file` ( | ||||
|     `id`             bigint(20)   NOT NULL AUTO_INCREMENT     COMMENT 'ID', | ||||
|     `name`           varchar(255) NOT NULL                    COMMENT '名称', | ||||
|     `size`           bigint(20)   NOT NULL                    COMMENT '大小(字节)', | ||||
|     `url`            varchar(512) NOT NULL                    COMMENT 'URL', | ||||
|     `extension`      varchar(100) DEFAULT NULL                COMMENT '扩展名', | ||||
|     `e_tag`          varchar(100) DEFAULT NULL                COMMENT '文件唯一标识', | ||||
|     `thumbnail_size` bigint(20)   DEFAULT NULL                COMMENT '缩略图大小(字节)', | ||||
|     `thumbnail_url`  varchar(512) DEFAULT NULL                COMMENT '缩略图URL', | ||||
|     `type`           tinyint(1)   UNSIGNED NOT NULL DEFAULT 1 COMMENT '类型(1:其他;2:图片;3:文档;4:视频;5:音频)', | ||||
|     `storage_id`     bigint(20)   NOT NULL                    COMMENT '存储ID', | ||||
|     `storage_code`   varchar(255) DEFAULT NULL                COMMENT '存储唯一标识', | ||||
|     `bucket_name`    varchar(255) DEFAULT NULL                COMMENT '存储桶名称', | ||||
|     `path`           varchar(512) DEFAULT NULL                COMMENT '基础路径', | ||||
|     `create_user`    bigint(20)   NOT NULL                    COMMENT '创建人', | ||||
|     `create_time`    datetime     NOT NULL                    COMMENT '创建时间', | ||||
|     `update_user`    bigint(20)   NOT NULL                    COMMENT '修改人', | ||||
| @@ -293,6 +272,7 @@ CREATE TABLE IF NOT EXISTS `sys_file` ( | ||||
|     PRIMARY KEY (`id`), | ||||
|     INDEX `idx_url`(`url`), | ||||
|     INDEX `idx_type`(`type`), | ||||
|     INDEX `idx_storage_code`(`storage_code`), | ||||
|     INDEX `idx_create_user`(`create_user`), | ||||
|     INDEX `idx_update_user`(`update_user`) | ||||
| ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='文件表'; | ||||
|   | ||||
| @@ -71,13 +71,6 @@ VALUES | ||||
| (1105, '删除', 1100, 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'system:file:delete', 5, 1, 1, NOW()), | ||||
| (1106, '下载', 1100, 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'system:file:download', 6, 1, 1, NOW()), | ||||
|  | ||||
| (1110, '存储管理', 1000, 2, '/system/storage', 'SystemStorage', 'system/storage/index', NULL, 'storage', false, false, false, NULL, 8, 1, 1, NOW()), | ||||
| (1111, '列表', 1110, 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'system:storage:list', 1, 1, 1, NOW()), | ||||
| (1112, '详情', 1110, 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'system:storage:detail', 2, 1, 1, NOW()), | ||||
| (1113, '新增', 1110, 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'system:storage:add', 3, 1, 1, NOW()), | ||||
| (1114, '修改', 1110, 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'system:storage:update', 4, 1, 1, NOW()), | ||||
| (1115, '删除', 1110, 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'system:storage:delete', 5, 1, 1, NOW()), | ||||
|  | ||||
| ( 1180, '客户端管理', 1000, 2, '/system/client', 'SystemClient', 'system/client/index', NULL, 'mobile', false, false, false, NULL, 9, 1, 1, NOW()), | ||||
| (1181, '列表', 1180, 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'system:client:list', 1, 1, 1, NOW()), | ||||
| (1182, '详情', 1180, 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'system:client:detail', 2, 1, 1, NOW()), | ||||
| @@ -161,28 +154,37 @@ VALUES | ||||
| INSERT INTO "sys_option" | ||||
| ("id", "category", "name", "code", "value", "default_value", "description") | ||||
| VALUES | ||||
| (1, 'SITE', '系统标题', 'SITE_TITLE', NULL, 'ContiNew Admin', '用于显示登录页面的系统标题。'), | ||||
| (2, 'SITE', '系统描述', 'SITE_DESCRIPTION', NULL, '持续迭代优化的前后端分离中后台管理系统框架', NULL), | ||||
| (3, 'SITE', '版权信息', 'SITE_COPYRIGHT', NULL, 'Copyright © 2022 - present ContiNew Admin 版权所有', '用于显示登录页面的底部版权信息。'), | ||||
| (4, 'SITE', '备案号', 'SITE_BEIAN', NULL, '津ICP备2022005864号-3', 'ICP备案号'), | ||||
| (5, 'SITE', 'favicon', 'SITE_FAVICON', NULL, '/favicon.ico', '用于显示浏览器地址栏的系统LOGO。'), | ||||
| (6, 'SITE', '系统LOGO', 'SITE_LOGO', NULL, '/logo.svg', '用于显示登录页面的系统LOGO。'), | ||||
| (7, 'PASSWORD', '登录密码错误锁定账号的次数', 'PASSWORD_ERROR_LOCK_COUNT', NULL, '5', '取值范围为 0-10(0 表示不锁定)。'), | ||||
| (8, 'PASSWORD', '登录密码错误锁定账号的时间(min)', 'PASSWORD_ERROR_LOCK_MINUTES', NULL, '5', '取值范围为 1-1440(一天)。'), | ||||
| (9, 'PASSWORD', '密码有效期(天)', 'PASSWORD_EXPIRATION_DAYS', NULL, '0', '取值范围为 0-999(0 表示永久有效)。'), | ||||
| (10, 'PASSWORD', '密码到期提前提示(天)', 'PASSWORD_EXPIRATION_WARNING_DAYS', NULL, '0', '密码到期 N 天前进行提示(0 表示不提示)。'), | ||||
| (11, 'PASSWORD', '密码重复使用次数', 'PASSWORD_REPETITION_TIMES', NULL, '3', '不允许使用最近 N 次密码,取值范围为 3-32。'), | ||||
| (12, 'PASSWORD', '密码最小长度', 'PASSWORD_MIN_LENGTH', NULL, '8', '取值范围为 8-32。'), | ||||
| (13, 'PASSWORD', '密码是否允许包含正反序账号名', 'PASSWORD_ALLOW_CONTAIN_USERNAME', NULL, '1', NULL), | ||||
| (14, 'PASSWORD', '密码是否必须包含特殊字符', 'PASSWORD_REQUIRE_SYMBOLS', NULL, '0', NULL), | ||||
| (15, 'MAIL', '发送协议', 'MAIL_PROTOCOL', NULL, 'smtp', NULL), | ||||
| (16, 'MAIL', '服务器地址', 'MAIL_HOST', NULL, 'smtp.126.com', NULL), | ||||
| (17, 'MAIL', '服务器端口', 'MAIL_PORT', NULL, '465', NULL), | ||||
| (18, 'MAIL', '用户名', 'MAIL_USERNAME', NULL, 'charles7c@126.com', NULL), | ||||
| (19, 'MAIL', '密码', 'MAIL_PASSWORD', NULL, NULL, NULL), | ||||
| (20, 'MAIL', '是否启用SSL', 'MAIL_SSL_ENABLED', NULL, '1', NULL), | ||||
| (21, 'MAIL', 'SSL端口', 'MAIL_SSL_PORT', NULL, '465', NULL), | ||||
| (22, 'LOGIN', '是否启用验证码', 'LOGIN_CAPTCHA_ENABLED', NULL, '1', '是否启用验证码(1:是;0:否)'); | ||||
| (1, 'SITE', '网站名称', 'SITE_TITLE', NULL, 'ContiNew Admin', '显示在浏览器标题栏和登录界面的系统名称'), | ||||
| (2, 'SITE', '网站描述', 'SITE_DESCRIPTION', NULL, '持续迭代优化的前后端分离中后台管理系统框架', '用于 SEO 的网站元描述'), | ||||
| (3, 'SITE', '版权声明', 'SITE_COPYRIGHT', NULL, 'Copyright © 2022 - present ContiNew Admin 版权所有', '显示在页面底部的版权声明文本'), | ||||
| (4, 'SITE', '网站域名', 'SITE_DOMAIN', NULL, 'https://admin.continew.top', '系统主域名,用于生成绝对链接和 CORS 配置'), | ||||
| (5, 'SITE', '网站备案号', 'SITE_BEIAN', NULL, NULL, '工信部 ICP 备案编号(如:京ICP备12345678号)'), | ||||
| (6, 'SITE', '网站图标', 'SITE_FAVICON', NULL, '/favicon.ico', '浏览器标签页显示的网站图标(建议 .ico 格式)'), | ||||
| (7, 'SITE', '网站LOGO', 'SITE_LOGO', NULL, '/logo.svg', '显示在登录页面和系统导航栏的网站图标(建议 .svg 格式)'), | ||||
| (10, 'PASSWORD', '密码错误锁定阈值', 'PASSWORD_ERROR_LOCK_COUNT', NULL, '5', '连续登录失败次数达到该值将锁定账号(0-10次,0表示禁用锁定)'), | ||||
| (11, 'PASSWORD', '账号锁定时长(分钟)', 'PASSWORD_ERROR_LOCK_MINUTES', NULL, '5', '账号锁定后自动解锁的时间(1-1440分钟,即24小时)'), | ||||
| (12, 'PASSWORD', '密码有效期(天)', 'PASSWORD_EXPIRATION_DAYS', NULL, '0', '密码强制修改周期(0-999天,0表示永不过期)'), | ||||
| (13, 'PASSWORD', '密码到期提醒(天)', 'PASSWORD_EXPIRATION_WARNING_DAYS', NULL, '0', '密码过期前的提前提醒天数(0表示不提醒)'), | ||||
| (14, 'PASSWORD', '历史密码重复校验次数', 'PASSWORD_REPETITION_TIMES', NULL, '3', '禁止使用最近 N 次的历史密码(3-32次)'), | ||||
| (15, 'PASSWORD', '密码最小长度', 'PASSWORD_MIN_LENGTH', NULL, '8', '密码最小字符长度要求(8-32个字符)'), | ||||
| (16, 'PASSWORD', '是否允许密码包含用户名', 'PASSWORD_ALLOW_CONTAIN_USERNAME', NULL, '1', '是否允许密码包含正序或倒序的用户名字符'), | ||||
| (17, 'PASSWORD', '密码是否必须包含特殊字符', 'PASSWORD_REQUIRE_SYMBOLS', NULL, '0', '是否要求密码必须包含特殊字符(如:!@#$%)'), | ||||
| (20, 'MAIL', '邮件协议', 'MAIL_PROTOCOL', NULL, 'smtp', '邮件发送协议类型'), | ||||
| (21, 'MAIL', '服务器地址', 'MAIL_HOST', NULL, 'smtp.126.com', '邮件服务器地址'), | ||||
| (22, 'MAIL', '服务器端口', 'MAIL_PORT', NULL, '465', '邮件服务器连接端口'), | ||||
| (23, 'MAIL', '邮箱账号', 'MAIL_USERNAME', NULL, 'charles7c@126.com', '发件人邮箱地址'), | ||||
| (24, 'MAIL', '邮箱密码', 'MAIL_PASSWORD', NULL, NULL, '服务授权密码/客户端专用密码'), | ||||
| (25, 'MAIL', '启用SSL加密', 'MAIL_SSL_ENABLED', NULL, '1', '是否启用SSL/TLS加密连接'), | ||||
| (26, 'MAIL', 'SSL端口号', 'MAIL_SSL_PORT', NULL, '465', 'SSL加密连接的备用端口(通常与主端口一致)'), | ||||
| (30, 'STORAGE', '默认存储类型', 'STORAGE_DEFAULT', NULL, 'LOCAL', '系统文件存储方式(LOCAL:本地存储;OSS:对象存储)'), | ||||
| (31, 'STORAGE', '本地存储路径', 'STORAGE_LOCAL_BUCKET', NULL, 'C:/continew-admin/data/file/', '本地存储目录绝对路径(需以斜杠结尾,如:/data/uploads/)'), | ||||
| (32, 'STORAGE', '本地资源访问地址', 'STORAGE_LOCAL_ENDPOINT', NULL, 'localhost:8000/file', '通过 URL 访问本地文件的映射地址'), | ||||
| (33, 'STORAGE', 'Access Key', 'STORAGE_OSS_ACCESS_KEY', NULL, NULL, '对象存储访问密钥'), | ||||
| (34, 'STORAGE', 'Secret Key', 'STORAGE_OSS_SECRET_KEY', NULL, NULL, '对象存储私有密钥'), | ||||
| (35, 'STORAGE', '对象存储桶名称', 'STORAGE_OSS_BUCKET', NULL, 'continew', '对象存储 Bucket 名称(需预先创建)'), | ||||
| (36, 'STORAGE', '对象存储终端节点', 'STORAGE_OSS_ENDPOINT', NULL, NULL, '对象存储访问地址'), | ||||
| (37, 'STORAGE', '对象存储区域代码', 'STORAGE_OSS_REGION', NULL, 'cn-hangzhou', '对象存储数据中心区域标识(如:cn-hangzhou)'), | ||||
| (40, 'LOGIN', '是否启用验证码', 'LOGIN_CAPTCHA_ENABLED', NULL, '1', NULL); | ||||
|  | ||||
| -- 初始化默认字典 | ||||
| INSERT INTO "sys_dict" | ||||
| @@ -240,13 +242,6 @@ VALUES | ||||
| -- 初始化默认角色和部门关联数据 | ||||
| INSERT INTO "sys_role_dept" ("role_id", "dept_id") VALUES (547888897925840927, 547887852587843593); | ||||
|  | ||||
| -- 初始化默认存储 | ||||
| INSERT INTO "sys_storage" | ||||
| ("id", "name", "code", "type", "access_key", "secret_key", "endpoint", "bucket_name", "domain", "description", "is_default", "sort", "status", "create_user", "create_time") | ||||
| VALUES | ||||
| (1, '开发环境', 'local_dev', 2, NULL, NULL, NULL, 'C:/continew-admin/data/file/', 'http://localhost:8000/file', '本地存储', true, 1, 1, 1, NOW()), | ||||
| (2, '生产环境', 'local_prod', 2, NULL, NULL, NULL, '../data/file/', 'http://api.continew.top/file', '本地存储', false, 2, 2, 1, NOW()); | ||||
|  | ||||
| -- 初始化客户端数据 | ||||
| INSERT INTO "sys_client" | ||||
| ("id", "client_id", "client_key", "client_secret", "auth_type", "client_type", "active_timeout", "timeout", "status", "create_user", "create_time") | ||||
|   | ||||
| @@ -312,7 +312,7 @@ CREATE TABLE IF NOT EXISTS "sys_log" ( | ||||
|     "id"               int8         NOT NULL, | ||||
|     "trace_id"         varchar(255) DEFAULT NULL, | ||||
|     "description"      varchar(255) NOT NULL, | ||||
|     "module"           varchar(50)  NOT NULL, | ||||
|     "module"           varchar(100) NOT NULL, | ||||
|     "request_url"      varchar(512) NOT NULL, | ||||
|     "request_method"   varchar(10)  NOT NULL, | ||||
|     "request_headers"  text         DEFAULT NULL, | ||||
| @@ -420,47 +420,6 @@ COMMENT ON COLUMN "sys_notice"."update_user"    IS '修改人'; | ||||
| COMMENT ON COLUMN "sys_notice"."update_time"    IS '修改时间'; | ||||
| COMMENT ON TABLE  "sys_notice"                  IS '公告表'; | ||||
|  | ||||
| CREATE TABLE IF NOT EXISTS "sys_storage" ( | ||||
|     "id"          int8         NOT NULL, | ||||
|     "name"        varchar(100) NOT NULL, | ||||
|     "code"        varchar(30)  NOT NULL, | ||||
|     "type"        int2         NOT NULL DEFAULT 1, | ||||
|     "access_key"  varchar(255) DEFAULT NULL, | ||||
|     "secret_key"  varchar(255) DEFAULT NULL, | ||||
|     "endpoint"    varchar(255) DEFAULT NULL, | ||||
|     "bucket_name" varchar(255) DEFAULT NULL, | ||||
|     "domain"      varchar(255) NOT NULL DEFAULT '', | ||||
|     "description" varchar(200) DEFAULT NULL, | ||||
|     "is_default"  bool         NOT NULL DEFAULT false, | ||||
|     "sort"        int4         NOT NULL DEFAULT 999, | ||||
|     "status"      int2         NOT NULL DEFAULT 1, | ||||
|     "create_user" int8         NOT NULL, | ||||
|     "create_time" timestamp    NOT NULL, | ||||
|     "update_user" int8         DEFAULT NULL, | ||||
|     "update_time" timestamp    DEFAULT NULL, | ||||
|     PRIMARY KEY ("id") | ||||
| ); | ||||
| CREATE UNIQUE INDEX "uk_storage_code"  ON "sys_storage" ("code"); | ||||
| CREATE INDEX "idx_storage_create_user" ON "sys_storage" ("create_user"); | ||||
| CREATE INDEX "idx_storage_update_user" ON "sys_storage" ("update_user"); | ||||
| COMMENT ON COLUMN "sys_storage"."id"          IS 'ID'; | ||||
| COMMENT ON COLUMN "sys_storage"."name"        IS '名称'; | ||||
| COMMENT ON COLUMN "sys_storage"."code"        IS '编码'; | ||||
| COMMENT ON COLUMN "sys_storage"."type"        IS '类型(1:兼容S3协议存储;2:本地存储)'; | ||||
| COMMENT ON COLUMN "sys_storage"."access_key"  IS 'Access Key(访问密钥)'; | ||||
| COMMENT ON COLUMN "sys_storage"."secret_key"  IS 'Secret Key(私有密钥)'; | ||||
| COMMENT ON COLUMN "sys_storage"."endpoint"    IS 'Endpoint(终端节点)'; | ||||
| COMMENT ON COLUMN "sys_storage"."bucket_name" IS '桶名称'; | ||||
| COMMENT ON COLUMN "sys_storage"."domain"      IS '域名'; | ||||
| COMMENT ON COLUMN "sys_storage"."description" IS '描述'; | ||||
| COMMENT ON COLUMN "sys_storage"."is_default"  IS '是否为默认存储'; | ||||
| COMMENT ON COLUMN "sys_storage"."sort"        IS '排序'; | ||||
| COMMENT ON COLUMN "sys_storage"."status"      IS '状态(1:启用;2:禁用)'; | ||||
| COMMENT ON COLUMN "sys_storage"."create_user" IS '创建人'; | ||||
| COMMENT ON COLUMN "sys_storage"."create_time" IS '创建时间'; | ||||
| COMMENT ON COLUMN "sys_storage"."update_user" IS '修改人'; | ||||
| COMMENT ON COLUMN "sys_storage"."update_time" IS '修改时间'; | ||||
| COMMENT ON TABLE  "sys_storage"               IS '存储表'; | ||||
|  | ||||
| CREATE TABLE IF NOT EXISTS "sys_file" ( | ||||
|     "id"             int8         NOT NULL, | ||||
| @@ -471,15 +430,19 @@ CREATE TABLE IF NOT EXISTS "sys_file" ( | ||||
|     "thumbnail_size" int8         DEFAULT NULL, | ||||
|     "thumbnail_url"  varchar(512) DEFAULT NULL, | ||||
|     "type"           int2         NOT NULL DEFAULT 1, | ||||
|     "storage_id"     int8         NOT NULL, | ||||
|     "create_user"    int8         NOT NULL, | ||||
|     "create_time"    timestamp    NOT NULL, | ||||
|     "update_user"    int8         NOT NULL, | ||||
|     "update_time"    timestamp    NOT NULL, | ||||
|     "e_tag"          varchar(100) DEFAULT NULL, | ||||
|     "storage_code"   varchar(255) DEFAULT NULL, | ||||
|     "bucket_name"    varchar(255) DEFAULT NULL, | ||||
|     "path"           varchar(512) DEFAULT NULL, | ||||
|     PRIMARY KEY ("id") | ||||
| ); | ||||
| CREATE INDEX "idx_file_url"  ON "sys_file" ("url"); | ||||
| CREATE INDEX "idx_file_type" ON "sys_file" ("type"); | ||||
| CREATE INDEX "idx_file_storage_code" ON "sys_file" ("storage_code"); | ||||
| CREATE INDEX "idx_file_create_user" ON "sys_file" ("create_user"); | ||||
| CREATE INDEX "idx_file_update_user" ON "sys_file" ("update_user"); | ||||
| COMMENT ON COLUMN "sys_file"."id"             IS 'ID'; | ||||
| @@ -490,11 +453,14 @@ COMMENT ON COLUMN "sys_file"."extension"      IS '扩展名'; | ||||
| COMMENT ON COLUMN "sys_file"."thumbnail_size" IS '缩略图大小(字节)'; | ||||
| COMMENT ON COLUMN "sys_file"."thumbnail_url"  IS '缩略图URL'; | ||||
| COMMENT ON COLUMN "sys_file"."type"           IS '类型(1:其他;2:图片;3:文档;4:视频;5:音频)'; | ||||
| COMMENT ON COLUMN "sys_file"."storage_id"     IS '存储ID'; | ||||
| COMMENT ON COLUMN "sys_file"."create_user"    IS '创建人'; | ||||
| COMMENT ON COLUMN "sys_file"."create_time"    IS '创建时间'; | ||||
| COMMENT ON COLUMN "sys_file"."update_user"    IS '修改人'; | ||||
| COMMENT ON COLUMN "sys_file"."update_time"    IS '修改时间'; | ||||
| COMMENT ON COLUMN "sys_file"."e_tag"          IS '文件唯一标识'; | ||||
| COMMENT ON COLUMN "sys_file"."storage_code"   IS '存储唯一标识'; | ||||
| COMMENT ON COLUMN "sys_file"."bucket_name"    IS '存储桶名称'; | ||||
| COMMENT ON COLUMN "sys_file"."path"           IS '基础路径'; | ||||
| COMMENT ON TABLE  "sys_file"                  IS '文件表'; | ||||
|  | ||||
| CREATE TABLE IF NOT EXISTS "sys_client" ( | ||||
|   | ||||
		Reference in New Issue
	
	Block a user