From de143b04bcb77205fc0fd20bd8802476a811f74c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Mon, 20 Nov 2023 21:55:28 +0800 Subject: [PATCH] =?UTF-8?q?:sparkles:=E6=96=B0=E5=A2=9E=E9=82=AE=E4=BB=B6?= =?UTF-8?q?=E5=8F=91=E9=80=81=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Infrastructure/Model/SendEmailDto.cs | 4 + .../Controllers/CommonController.cs | 34 -- .../Controllers/Email/EmailLogController.cs | 142 +++++++ .../{System => Email}/EmailTplController.cs | 6 +- ZR.Admin.WebApi/wwwroot/data.xlsx | Bin 38616 -> 38934 bytes ZR.ServiceCore/Model/Dto/EmailLogDto.cs | 44 ++ ZR.ServiceCore/Model/EmailLog.cs | 51 +++ ZR.ServiceCore/Model/SysMenu.cs | 4 +- ZR.ServiceCore/Services/EmailLogService.cs | 74 ++++ .../Services/IService/IEmailLogService.cs | 21 + ZR.ServiceCore/SqlSugar/InitTable.cs | 3 +- ZR.Vue/src/views/monitor/SmsLog.vue | 3 + ZR.Vue/src/views/tool/email/emailLog.vue | 3 + ZR.Vue/src/views/tool/email/emailTpl.vue | 3 + ZR.Vue/src/views/tool/email/sendEmail.vue | 4 +- document/mysql/admin-mysql-初始化数据.sql | 349 ---------------- document/mysql/必看.txt | 2 + .../sqlserver/admin-sqlserver-初始化数据.sql | 375 ------------------ document/sqlserver/必看.txt | 2 +- 19 files changed, 357 insertions(+), 767 deletions(-) create mode 100644 ZR.Admin.WebApi/Controllers/Email/EmailLogController.cs rename ZR.Admin.WebApi/Controllers/{System => Email}/EmailTplController.cs (97%) create mode 100644 ZR.ServiceCore/Model/Dto/EmailLogDto.cs create mode 100644 ZR.ServiceCore/Model/EmailLog.cs create mode 100644 ZR.ServiceCore/Services/EmailLogService.cs create mode 100644 ZR.ServiceCore/Services/IService/IEmailLogService.cs create mode 100644 ZR.Vue/src/views/monitor/SmsLog.vue create mode 100644 ZR.Vue/src/views/tool/email/emailLog.vue create mode 100644 ZR.Vue/src/views/tool/email/emailTpl.vue delete mode 100644 document/mysql/admin-mysql-初始化数据.sql create mode 100644 document/mysql/必看.txt delete mode 100644 document/sqlserver/admin-sqlserver-初始化数据.sql diff --git a/Infrastructure/Model/SendEmailDto.cs b/Infrastructure/Model/SendEmailDto.cs index 6674ec4..6ea536c 100644 --- a/Infrastructure/Model/SendEmailDto.cs +++ b/Infrastructure/Model/SendEmailDto.cs @@ -23,5 +23,9 @@ namespace Infrastructure.Model /// public bool SendMe { get; set; } public DateTime AddTime { get; set; } + /// + /// 是否发送 + /// + public bool IsSend { get; set; } } } diff --git a/ZR.Admin.WebApi/Controllers/CommonController.cs b/ZR.Admin.WebApi/Controllers/CommonController.cs index b568eb6..a1ced9d 100644 --- a/ZR.Admin.WebApi/Controllers/CommonController.cs +++ b/ZR.Admin.WebApi/Controllers/CommonController.cs @@ -1,6 +1,5 @@ using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Options; -using Newtonsoft.Json; using ZR.Admin.WebApi.Filters; using ZR.Model.System; using ZR.Service.IService; @@ -75,39 +74,6 @@ namespace ZR.Admin.WebApi.Controllers return SUCCESS(msg); } - /// - /// 发送邮件 - /// - /// 请求参数接收实体 - /// - [ActionPermissionFilter(Permission = "tool:email:send")] - [Log(Title = "发送邮件")] - [HttpPost] - public IActionResult SendEmail([FromBody] SendEmailDto sendEmailVo) - { - if (sendEmailVo == null) - { - return ToResponse(ApiResult.Error($"请求参数不完整")); - } - if (string.IsNullOrEmpty(OptionsSetting.MailOptions.FromEmail) || string.IsNullOrEmpty(OptionsSetting.MailOptions.Password)) - { - return ToResponse(ApiResult.Error($"请配置邮箱信息")); - } - - MailHelper mailHelper = new(); - - string[] toUsers = sendEmailVo.ToUser.Split(",", StringSplitOptions.RemoveEmptyEntries); - if (sendEmailVo.SendMe) - { - toUsers.Append(mailHelper.FromEmail); - } - string result = mailHelper.SendMail(toUsers, sendEmailVo.Subject, sendEmailVo.Content, sendEmailVo.FileUrl, sendEmailVo.HtmlContent); - - logger.Info($"发送邮件{JsonConvert.SerializeObject(sendEmailVo)}, 结果{result}"); - - return SUCCESS(result); - } - #region 上传 /// diff --git a/ZR.Admin.WebApi/Controllers/Email/EmailLogController.cs b/ZR.Admin.WebApi/Controllers/Email/EmailLogController.cs new file mode 100644 index 0000000..be62b1c --- /dev/null +++ b/ZR.Admin.WebApi/Controllers/Email/EmailLogController.cs @@ -0,0 +1,142 @@ +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Options; +using ZR.Admin.WebApi.Filters; +using ZR.Model.Dto; +using ZR.ServiceCore.Model; +using ZR.ServiceCore.Services; + +//创建时间:2023-11-20 +namespace ZR.Admin.WebApi.Controllers.Email +{ + /// + /// 邮件发送记录 + /// + [Verify] + [Route("system/EmailLog")] + [ApiExplorerSettings(GroupName = "sys")] + public class EmailLogController : BaseController + { + /// + /// 邮件发送记录接口 + /// + private readonly IEmailLogService _EmailLogService; + private OptionsSetting OptionsSetting; + public EmailLogController( + IEmailLogService EmailLogService, + IOptions options) + { + _EmailLogService = EmailLogService; + OptionsSetting = options.Value; + } + + /// + /// 查询邮件发送记录列表 + /// + /// + /// + [HttpGet("list")] + [ActionPermissionFilter(Permission = "emaillog:list")] + public IActionResult QueryEmailLog([FromQuery] EmailLogQueryDto parm) + { + var response = _EmailLogService.GetList(parm); + return SUCCESS(response); + } + + /// + /// 查询邮件发送记录详情 + /// + /// + /// + [HttpGet("{Id}")] + [ActionPermissionFilter(Permission = "emaillog:query")] + public IActionResult GetEmailLog(long Id) + { + var response = _EmailLogService.GetInfo(Id); + + var info = response.Adapt(); + return SUCCESS(info); + } + + /// + /// 添加邮件发送记录 + /// + /// + [HttpPost("sendEmail")] + [ActionPermissionFilter(Permission = "tool:email:send")] + [Log(Title = "邮件发送", BusinessType = BusinessType.INSERT)] + public IActionResult SendEmail([FromBody] EmailLogDto dto) + { + if (dto.IdArr.Length <= 0) { return ToResponse(ApiResult.Error($"发送失败Id 不能为空")); } + int count = 0; + foreach (var item in dto.IdArr) + { + var response = _EmailLogService.GetInfo(item); + if (response?.IsSend == 0) + { + MailHelper mailHelper = new(); + string[] toUsers = response.ToEmails.Split(",", StringSplitOptions.RemoveEmptyEntries); + + string result = mailHelper.SendMail(toUsers, response.Subject, "", response.FileUrl, response.EmailContent); + count += _EmailLogService.Update(x => x.Id == item, x => new EmailLog() + { + IsSend = 1, + SendTime = DateTime.Now, + SendResult = result + }); + } + } + return SUCCESS(count); + } + + /// + /// 删除邮件发送记录 + /// + /// + [HttpDelete("{ids}")] + [ActionPermissionFilter(Permission = "emaillog:delete")] + [Log(Title = "邮件发送记录", BusinessType = BusinessType.DELETE)] + public IActionResult DeleteEmailLog(string ids) + { + long[] idsArr = Tools.SpitLongArrary(ids); + if (idsArr.Length <= 0) { return ToResponse(ApiResult.Error($"删除失败Id 不能为空")); } + + var response = _EmailLogService.Delete(idsArr); + + return ToResponse(response); + } + + /// + /// 发送邮件 + /// + /// 请求参数接收实体 + /// + [ActionPermissionFilter(Permission = "tool:email:send")] + [Log(Title = "发送邮件")] + [HttpPost("/common/SendEmail")] + public IActionResult SendEmail([FromBody] SendEmailDto sendEmailVo) + { + if (sendEmailVo == null) + { + return ToResponse(ApiResult.Error($"请求参数不完整")); + } + if (string.IsNullOrEmpty(OptionsSetting.MailOptions.FromEmail) || string.IsNullOrEmpty(OptionsSetting.MailOptions.Password)) + { + return ToResponse(ApiResult.Error($"请配置邮箱信息")); + } + + MailHelper mailHelper = new(); + + string[] toUsers = sendEmailVo.ToUser.Split(",", StringSplitOptions.RemoveEmptyEntries); + string result = string.Empty; + if (sendEmailVo.IsSend) + { + result = mailHelper.SendMail(toUsers, sendEmailVo.Subject, sendEmailVo.Content, sendEmailVo.FileUrl, sendEmailVo.HtmlContent); + } + _EmailLogService.AddEmailLog(new EmailLog() { EmailContent = sendEmailVo.HtmlContent, Subject = sendEmailVo.Subject, ToEmails = sendEmailVo.ToUser, AddTime = DateTime.Now, FromEmail = OptionsSetting.MailOptions.FromEmail, IsSend = sendEmailVo.IsSend ? 1 : 0, SendResult = result }); + //logger.Info($"发送邮件{JsonConvert.SerializeObject(sendEmailVo)}, 结果{result}"); + + return SUCCESS(result); + } + + } +} \ No newline at end of file diff --git a/ZR.Admin.WebApi/Controllers/System/EmailTplController.cs b/ZR.Admin.WebApi/Controllers/Email/EmailTplController.cs similarity index 97% rename from ZR.Admin.WebApi/Controllers/System/EmailTplController.cs rename to ZR.Admin.WebApi/Controllers/Email/EmailTplController.cs index 2b3f2b1..10dea80 100644 --- a/ZR.Admin.WebApi/Controllers/System/EmailTplController.cs +++ b/ZR.Admin.WebApi/Controllers/Email/EmailTplController.cs @@ -5,13 +5,14 @@ using ZR.Service.System.ISystemService; using ZR.ServiceCore.Model; //创建时间:2023-11-12 -namespace ZR.Admin.WebApi.Controllers +namespace ZR.Admin.WebApi.Controllers.Email { /// /// 邮件模板 /// [Verify] [Route("system/EmailTpl")] + [ApiExplorerSettings(GroupName = "sys")] public class EmailTplController : BaseController { /// @@ -37,7 +38,6 @@ namespace ZR.Admin.WebApi.Controllers return SUCCESS(response); } - /// /// 查询邮件模板详情 /// @@ -47,7 +47,7 @@ namespace ZR.Admin.WebApi.Controllers public IActionResult GetEmailTpl(int Id) { var response = _EmailTplService.GetInfo(Id); - + var info = response.Adapt(); return SUCCESS(info); } diff --git a/ZR.Admin.WebApi/wwwroot/data.xlsx b/ZR.Admin.WebApi/wwwroot/data.xlsx index 8fca81c6272cbf05668ed0a0feeb6a2c0c5ac7d3..8e7f9ab8e0e7442cf43d0b6a6f5c18c4bcfef249 100644 GIT binary patch delta 24816 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 diff --git a/ZR.ServiceCore/Model/Dto/EmailLogDto.cs b/ZR.ServiceCore/Model/Dto/EmailLogDto.cs new file mode 100644 index 0000000..e2e154c --- /dev/null +++ b/ZR.ServiceCore/Model/Dto/EmailLogDto.cs @@ -0,0 +1,44 @@ +using System.ComponentModel.DataAnnotations; + +namespace ZR.Model.Dto +{ + /// + /// 邮件发送记录查询对象 + /// + public class EmailLogQueryDto : PagerInfo + { + public string FromEmail { get; set; } + public string Subject { get; set; } + public DateTime? BeginAddTime { get; set; } + public DateTime? EndAddTime { get; set; } + } + + /// + /// 邮件发送记录输入输出对象 + /// + public class EmailLogDto + { + //[Required(ErrorMessage = "Id不能为空")] + [JsonConverter(typeof(ValueToStringConverter))] + public long Id { get; set; } + + public string FromEmail { get; set; } + + public string Subject { get; set; } + + public string ToEmails { get; set; } + + public string EmailContent { get; set; } + + public DateTime? AddTime { get; set; } + /// + /// 是否已发送 + /// + public int IsSend { get; set; } + /// + /// 发送结果 + /// + public string SendResult { get; set; } + public long[] IdArr { get; set; } + } +} \ No newline at end of file diff --git a/ZR.ServiceCore/Model/EmailLog.cs b/ZR.ServiceCore/Model/EmailLog.cs new file mode 100644 index 0000000..57d7a77 --- /dev/null +++ b/ZR.ServiceCore/Model/EmailLog.cs @@ -0,0 +1,51 @@ +namespace ZR.ServiceCore.Model +{ + /// + /// 邮件发送记录 + /// + [SugarTable("email_log")] + public class EmailLog + { + [JsonConverter(typeof(ValueToStringConverter))] + [SugarColumn(IsPrimaryKey = true, IsIdentity = false)] + public long Id { get; set; } + /// + /// 发送邮箱 + /// + public string FromEmail { get; set; } + /// + /// 邮件主题 + /// + public string Subject { get; set; } + /// + /// 接收邮箱 + /// + [SugarColumn(ColumnDataType = StaticConfig.CodeFirst_BigString)] + public string ToEmails{ get; set; } + /// + /// 邮件内容 + /// + [SugarColumn(ColumnDataType = StaticConfig.CodeFirst_BigString)] + public string EmailContent { get; set; } + /// + /// 发送时间 + /// + public DateTime AddTime { get; set; } = DateTime.Now; + /// + /// 是否已发送 + /// + public int IsSend { get; set; } + /// + /// 发送结果 + /// + public string SendResult { get; set; } + /// + /// 附件地址 + /// + public string FileUrl { get; set; } + /// + /// 发送时间 + /// + public DateTime SendTime { get; set; } + } +} diff --git a/ZR.ServiceCore/Model/SysMenu.cs b/ZR.ServiceCore/Model/SysMenu.cs index 59f590f..6e1e1e2 100644 --- a/ZR.ServiceCore/Model/SysMenu.cs +++ b/ZR.ServiceCore/Model/SysMenu.cs @@ -44,10 +44,10 @@ namespace ZR.Model.System public string Component { get; set; } /// - /// 是否缓存(1缓存 0不缓存) + /// 是否缓存(1不缓存 0缓存) /// [SugarColumn(DefaultValue = "0", ColumnDataType = "int")] - public string IsCache { get; set; } + public string IsCache { get; set; } = "0"; /// /// 是否外链 1、是 0、否 /// diff --git a/ZR.ServiceCore/Services/EmailLogService.cs b/ZR.ServiceCore/Services/EmailLogService.cs new file mode 100644 index 0000000..56ecd6e --- /dev/null +++ b/ZR.ServiceCore/Services/EmailLogService.cs @@ -0,0 +1,74 @@ +using Infrastructure.Attribute; +using ZR.Model; +using ZR.Model.Dto; +using ZR.Repository; +using ZR.Service; +using ZR.ServiceCore.Model; +using ZR.ServiceCore.Services; + +namespace ZR.ServiceCore +{ + /// + /// 邮件发送记录Service业务层处理 + /// + [AppService(ServiceType = typeof(IEmailLogService), ServiceLifetime = LifeTime.Transient)] + public class EmailLogService : BaseService, IEmailLogService + { + /// + /// 查询邮件发送记录列表 + /// + /// + /// + public PagedInfo GetList(EmailLogQueryDto parm) + { + var predicate = Expressionable.Create(); + + predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.FromEmail), it => it.FromEmail == parm.FromEmail); + predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.Subject), it => it.Subject.Contains(parm.Subject)); + predicate = predicate.AndIF(parm.BeginAddTime == null, it => it.AddTime >= DateTime.Now.AddDays(-7).ToShortDateString().ParseToDateTime()); + predicate = predicate.AndIF(parm.BeginAddTime != null, it => it.AddTime >= parm.BeginAddTime); + predicate = predicate.AndIF(parm.EndAddTime != null, it => it.AddTime <= parm.EndAddTime); + var response = Queryable() + .Where(predicate.ToExpression()) + .ToPage(parm); + + return response; + } + + + /// + /// 获取详情 + /// + /// + /// + public EmailLog GetInfo(long Id) + { + var response = Queryable() + .Where(x => x.Id == Id) + .First(); + + return response; + } + + /// + /// 添加邮件发送记录 + /// + /// + /// + public EmailLog AddEmailLog(EmailLog model) + { + model.Id = Insertable(model).ExecuteReturnSnowflakeId(); + return model; + } + + /// + /// 修改邮件发送记录 + /// + /// + /// + public int UpdateEmailLog(EmailLog model) + { + return Update(model, true); + } + } +} \ No newline at end of file diff --git a/ZR.ServiceCore/Services/IService/IEmailLogService.cs b/ZR.ServiceCore/Services/IService/IEmailLogService.cs new file mode 100644 index 0000000..6b02431 --- /dev/null +++ b/ZR.ServiceCore/Services/IService/IEmailLogService.cs @@ -0,0 +1,21 @@ +using ZR.Model; +using ZR.Model.Dto; +using ZR.Service; +using ZR.ServiceCore.Model; + +namespace ZR.ServiceCore.Services +{ + /// + /// 邮件发送记录service接口 + /// + public interface IEmailLogService : IBaseService + { + PagedInfo GetList(EmailLogQueryDto parm); + + EmailLog GetInfo(long Id); + + EmailLog AddEmailLog(EmailLog parm); + + int UpdateEmailLog(EmailLog parm); + } +} diff --git a/ZR.ServiceCore/SqlSugar/InitTable.cs b/ZR.ServiceCore/SqlSugar/InitTable.cs index 15e3c64..47c07bf 100644 --- a/ZR.ServiceCore/SqlSugar/InitTable.cs +++ b/ZR.ServiceCore/SqlSugar/InitTable.cs @@ -24,7 +24,7 @@ namespace ZR.ServiceCore.SqlSugar //var entityes = AssemblyUtils.GetAllTypes().Where(p => !p.IsAbstract && p != baseType && p.GetCustomAttribute() != null).ToArray(); //db.CodeFirst.InitTables(entityes); - //24个表,建议先使用下面方法初始化表,方便排查问题 + //27个表,建议先使用下面方法初始化表,方便排查问题 db.CodeFirst.InitTables(typeof(SysUser)); db.CodeFirst.InitTables(typeof(SysRole)); db.CodeFirst.InitTables(typeof(SysDept)); @@ -51,6 +51,7 @@ namespace ZR.ServiceCore.SqlSugar db.CodeFirst.InitTables(typeof(SqlDiffLog)); db.CodeFirst.InitTables(typeof(EmailTpl)); db.CodeFirst.InitTables(typeof(SmsCodeLog)); + db.CodeFirst.InitTables(typeof(EmailLog)); } } } diff --git a/ZR.Vue/src/views/monitor/SmsLog.vue b/ZR.Vue/src/views/monitor/SmsLog.vue new file mode 100644 index 0000000..45c24cc --- /dev/null +++ b/ZR.Vue/src/views/monitor/SmsLog.vue @@ -0,0 +1,3 @@ + diff --git a/ZR.Vue/src/views/tool/email/emailLog.vue b/ZR.Vue/src/views/tool/email/emailLog.vue new file mode 100644 index 0000000..45c24cc --- /dev/null +++ b/ZR.Vue/src/views/tool/email/emailLog.vue @@ -0,0 +1,3 @@ + diff --git a/ZR.Vue/src/views/tool/email/emailTpl.vue b/ZR.Vue/src/views/tool/email/emailTpl.vue new file mode 100644 index 0000000..45c24cc --- /dev/null +++ b/ZR.Vue/src/views/tool/email/emailTpl.vue @@ -0,0 +1,3 @@ + diff --git a/ZR.Vue/src/views/tool/email/sendEmail.vue b/ZR.Vue/src/views/tool/email/sendEmail.vue index b5b4ce8..fdec3d3 100644 --- a/ZR.Vue/src/views/tool/email/sendEmail.vue +++ b/ZR.Vue/src/views/tool/email/sendEmail.vue @@ -14,9 +14,9 @@ - + diff --git a/document/mysql/admin-mysql-初始化数据.sql b/document/mysql/admin-mysql-初始化数据.sql deleted file mode 100644 index 15595be..0000000 --- a/document/mysql/admin-mysql-初始化数据.sql +++ /dev/null @@ -1,349 +0,0 @@ - --- ---------------------------- --- Records of sys_dept --- ---------------------------- -INSERT INTO `sys_dept` VALUES (100, 0, '0', 'A公司', 0, 'zr', '', '', 0, 0, 'admin', NULL, '', NULL, NULL); -INSERT INTO `sys_dept` VALUES (101, 100, '0,100', '研发部门', 1, 'zr', '', '', 0, 0, 'admin', NULL, '', NULL, NULL); -INSERT INTO `sys_dept` VALUES (102, 100, '0,100', '市场部门', 2, 'zr', '', '', 0, 0, 'admin', NULL, '', NULL, NULL); -INSERT INTO `sys_dept` VALUES (103, 100, '0,100', '测试部门', 3, 'zr', '', '', 0, 0, 'admin', NULL, '', NULL, NULL); -INSERT INTO `sys_dept` VALUES (104, 100, '0,100', '财务部门', 4, 'zr', '', '', 0, 0, 'admin', NULL, '', NULL, NULL); -INSERT INTO `sys_dept` VALUES (200, 0, '0', 'B公司', 0, 'zr', '', '', 0, 0, 'admin', NULL, '', NULL, NULL); - - --- ---------------------------- --- Records of sys_dict_type --- ---------------------------- -INSERT INTO `sys_dict_type` VALUES (1, '用户性别', 'sys_user_sex', '0', 'Y', 'admin', SYSDATE(), '', NULL, '用户性别列表',NULL); -INSERT INTO `sys_dict_type` VALUES (2, '菜单状态', 'sys_show_hide', '0', 'Y', 'admin', SYSDATE(), '', NULL, '菜单状态列表',NULL); -INSERT INTO `sys_dict_type` VALUES (3, '系统开关', 'sys_normal_disable', '0', 'Y', 'admin', SYSDATE(), '', NULL, '系统开关列表',NULL); -INSERT INTO `sys_dict_type` VALUES (4, '任务状态', 'sys_job_status', '0', 'Y', 'admin', SYSDATE(), '', NULL, '任务状态列表',NULL); -INSERT INTO `sys_dict_type` VALUES (5, '任务分组', 'sys_job_group', '0', 'Y', 'admin', SYSDATE(), '', NULL, '任务分组列表',NULL); -INSERT INTO `sys_dict_type` VALUES (6, '系统是否', 'sys_yes_no', '0', 'Y', 'admin', SYSDATE(), '', NULL, '系统是否列表',NULL); -INSERT INTO `sys_dict_type` VALUES (7, '通知类型', 'sys_notice_type', '0', 'Y', 'admin', SYSDATE(), '', NULL, '通知类型列表',NULL); -INSERT INTO `sys_dict_type` VALUES (8, '通知状态', 'sys_notice_status', '0', 'Y', 'admin', SYSDATE(), '', NULL, '通知状态列表',NULL); -INSERT INTO `sys_dict_type` VALUES (9, '操作类型', 'sys_oper_type', '0', 'Y', 'admin', SYSDATE(), '', NULL, '操作类型列表',NULL); -INSERT INTO `sys_dict_type` VALUES (10, '系统状态', 'sys_common_status', '0', 'Y', 'admin', SYSDATE(), '', NULL, '登录状态列表',NULL); -INSERT INTO `sys_dict_type` VALUES (11, '文章状态', 'sys_article_status', '0', 'Y', 'admin', SYSDATE(), '', NULL, NULL,NULL); -INSERT INTO `sys_dict_type` VALUES (12, '多语言类型', 'sys_lang_type', '0', 'Y', 'admin', SYSDATE(), '', NULL, '多语言字典类型',NULL); - - --- ---------------------------- --- Records of sys_dict_data --- ---------------------------- -INSERT INTO `sys_dict_data` VALUES (1, 1, '男', '0', 'sys_user_sex', '', '', 'Y', '0', 'admin', '2021-02-24 10:56:21', '', NULL, '性别男', ''); -INSERT INTO `sys_dict_data` VALUES (2, 2, '女', '1', 'sys_user_sex', '', '', 'N', '0', 'admin', '2021-02-24 10:56:21', '', NULL, '性别女', ''); -INSERT INTO `sys_dict_data` VALUES (3, 3, '未知', '2', 'sys_user_sex', '', '', 'N', '0', 'admin', '2021-02-24 10:56:21', '', NULL, '性别未知', ''); -INSERT INTO `sys_dict_data` VALUES (4, 1, '显示', '0', 'sys_show_hide', '', 'primary', 'Y', '0', 'admin', '2021-02-24 10:56:21', '', NULL, '显示菜单', ''); -INSERT INTO `sys_dict_data` VALUES (5, 2, '隐藏', '1', 'sys_show_hide', '', 'danger', 'N', '0', 'admin', '2021-02-24 10:56:21', '', NULL, '隐藏菜单', ''); -INSERT INTO `sys_dict_data` VALUES (6, 1, '正常', '0', 'sys_normal_disable', '', 'primary', 'Y', '0', 'admin', '2021-02-24 10:56:21', '', NULL, '正常状态', ''); -INSERT INTO `sys_dict_data` VALUES (7, 2, '停用', '1', 'sys_normal_disable', '', 'danger', 'N', '0', 'admin', '2021-02-24 10:56:21', '', NULL, '停用状态', ''); -INSERT INTO `sys_dict_data` VALUES (8, 1, '正常', '0', 'sys_job_status', '', 'primary', 'Y', '0', 'admin', '2021-02-24 10:56:21', '', NULL, '正常状态', ''); -INSERT INTO `sys_dict_data` VALUES (9, 2, '异常', '1', 'sys_job_status', '', 'danger', 'N', '0', 'admin', '2021-02-24 10:56:21', '', '2021-07-02 14:09:09', '停用状态', ''); -INSERT INTO `sys_dict_data` VALUES (10, 1, '默认', 'DEFAULT', 'sys_job_group', '', '', 'Y', '0', 'admin', '2021-02-24 10:56:21', '', NULL, '默认分组', ''); -INSERT INTO `sys_dict_data` VALUES (11, 2, '系统', 'SYSTEM', 'sys_job_group', '', '', 'N', '0', 'admin', '2021-02-24 10:56:21', '', NULL, '系统分组', ''); -INSERT INTO `sys_dict_data` VALUES (12, 1, '是', 'Y', 'sys_yes_no', '', 'primary', 'Y', '0', 'admin', '2021-02-24 10:56:21', '', NULL, '系统默认是', ''); -INSERT INTO `sys_dict_data` VALUES (13, 2, '否', 'N', 'sys_yes_no', '', 'danger', 'N', '0', 'admin', '2021-02-24 10:56:21', '', NULL, '系统默认否', ''); -INSERT INTO `sys_dict_data` VALUES (14, 1, '通知', '1', 'sys_notice_type', '', 'warning', 'Y', '0', 'admin', '2021-02-24 10:56:22', '', NULL, '通知', ''); -INSERT INTO `sys_dict_data` VALUES (15, 2, '公告', '2', 'sys_notice_type', '', 'success', 'N', '0', 'admin', '2021-02-24 10:56:22', '', NULL, '公告', ''); -INSERT INTO `sys_dict_data` VALUES (16, 1, '正常', '0', 'sys_notice_status', '', 'primary', 'Y', '0', 'admin', '2021-02-24 10:56:22', '', NULL, '正常状态', ''); -INSERT INTO `sys_dict_data` VALUES (17, 2, '关闭', '1', 'sys_notice_status', '', 'danger', 'N', '0', 'admin', '2021-02-24 10:56:22', '', NULL, '关闭状态', ''); -INSERT INTO `sys_dict_data` VALUES (18, 0, '其他', '0', 'sys_oper_type', '', 'info', 'N', '0', 'admin', '2021-02-24 10:56:22', '', NULL, '其他操作', ''); -INSERT INTO `sys_dict_data` VALUES (19, 1, '新增', '1', 'sys_oper_type', '', 'info', 'N', '0', 'admin', '2021-02-24 10:56:22', '', NULL, '新增操作', ''); -INSERT INTO `sys_dict_data` VALUES (20, 2, '修改', '2', 'sys_oper_type', '', 'info', 'N', '0', 'admin', '2021-02-24 10:56:22', '', NULL, '修改操作', ''); -INSERT INTO `sys_dict_data` VALUES (21, 3, '删除', '3', 'sys_oper_type', '', 'danger', 'N', '0', 'admin', '2021-02-24 10:56:22', '', NULL, '删除操作', ''); -INSERT INTO `sys_dict_data` VALUES (22, 4, '授权', '4', 'sys_oper_type', '', 'primary', 'N', '0', 'admin', '2021-02-24 10:56:22', '', NULL, '授权操作', ''); -INSERT INTO `sys_dict_data` VALUES (23, 5, '导出', '5', 'sys_oper_type', '', 'warning', 'N', '0', 'admin', '2021-02-24 10:56:22', '', NULL, '导出操作', ''); -INSERT INTO `sys_dict_data` VALUES (24, 6, '导入', '6', 'sys_oper_type', '', 'warning', 'N', '0', 'admin', '2021-02-24 10:56:22', '', NULL, '导入操作', ''); -INSERT INTO `sys_dict_data` VALUES (25, 7, '强退', '7', 'sys_oper_type', '', 'danger', 'N', '0', 'admin', '2021-02-24 10:56:22', '', NULL, '强退操作', ''); -INSERT INTO `sys_dict_data` VALUES (26, 8, '生成代码', '8', 'sys_oper_type', '', 'warning', 'N', '0', 'admin', '2021-02-24 10:56:22', '', NULL, '生成操作', ''); -INSERT INTO `sys_dict_data` VALUES (27, 9, '清空数据', '9', 'sys_oper_type', '', 'danger', 'N', '0', 'admin', '2021-02-24 10:56:22', '', NULL, '清空操作', ''); -INSERT INTO `sys_dict_data` VALUES (28, 1, '成功', '0', 'sys_common_status', '', 'primary', 'N', '0', 'admin', '2021-02-24 10:56:23', '', NULL, '正常状态', ''); -INSERT INTO `sys_dict_data` VALUES (29, 2, '失败', '1', 'sys_common_status', '', 'danger', 'N', '0', 'admin', '2021-02-24 10:56:23', '', NULL, '停用状态', ''); -INSERT INTO `sys_dict_data` VALUES (30, 1, '发布', '1', 'sys_article_status', NULL, NULL, NULL, '0', 'admin', '2021-08-19 10:34:56', '', NULL, NULL, ''); -INSERT INTO `sys_dict_data` VALUES (31, 2, '草稿', '2', 'sys_article_status', NULL, NULL, NULL, '0', 'admin', '2021-08-19 10:35:06', '', NULL, NULL, ''); - -INSERT INTO `sys_dict_data` VALUES (32, 1, '中文', 'zh-cn', 'sys_lang_type', NULL, NULL, NULL, '0', 'admin', '2021-08-19 10:35:06', '', NULL, NULL, ''); -INSERT INTO `sys_dict_data` VALUES (33, 2, '英文', 'en', 'sys_lang_type', NULL, NULL, NULL, '0', 'admin', '2021-08-19 10:35:06', '', NULL, NULL, ''); -INSERT INTO `sys_dict_data` VALUES (34, 3, '繁体', 'zh-tw', 'sys_lang_type', NULL, NULL, NULL, '0', 'admin', '2021-08-19 10:35:06', '', NULL, NULL, ''); - - --- ---------------------------- --- Records of sys_menu --- ---------------------------- --- 一级菜单 -INSERT INTO sys_menu VALUES (1, '系统管理', 0, 1, 'system', NULL, 0, 0, 'M', '0', '0', '', 'system', '', SYSDATE(), '', NULL, '系统管理目录', 'menu.system'); -INSERT INTO sys_menu VALUES (2, '系统监控', 0, 2, 'monitor', NULL, 0, 0, 'M', '0', '0', '', 'monitor', '', SYSDATE(), '', NULL, '系统监控目录', 'menu.monitoring'); -INSERT INTO sys_menu VALUES (3, '系统工具', 0, 3, 'tool', NULL, 0, 0, 'M', '0', '0', '', 'tool', '', SYSDATE(), '', NULL, '系统工具目录', 'menu.systemTools'); -INSERT INTO sys_menu VALUES (5, '官网地址', 0, 5, 'http://www.izhaorui.cn/doc', NULL, 1, 0, 'M', '0', '0', '', 'link', '', SYSDATE(), '', NULL, 'Zr官网地址', 'menu.officialWebsite'); -INSERT INTO sys_menu VALUES (6, '控制台', 0, 0, 'dashboard', 'index_v1', 0, 0, 'C', '0', '0', '', 'dashboard', '', SYSDATE(), '', NULL, '', 'menu.dashboard'); - --- 二级菜单 -INSERT INTO sys_menu VALUES (100, '用户管理', 1, 1, 'user', 'system/user/index', 0, 0, 'C', '0', '0', 'system:user:list', 'user', '', SYSDATE(), '', NULL, '用户管理菜单', 'menu.systemUser'); -INSERT INTO sys_menu VALUES (101, '角色管理', 1, 2, 'role', 'system/role/index', 0, 0, 'C', '0', '0', 'system:role:list', 'peoples', '', SYSDATE(), '', NULL, '角色管理菜单', 'menu.systemRole'); -INSERT INTO sys_menu VALUES (102, '菜单管理', 1, 3, 'menu', 'system/menu/index', 0, 0, 'C', '0', '0', 'system:menu:list', 'tree-table', '', SYSDATE(), '', NULL, '菜单管理菜单', 'menu.systemMenu'); -INSERT INTO sys_menu VALUES (103, '部门管理', 1, 4, 'dept', 'system/dept/index', 0, 0, 'C', '0', '0', 'system:dept:list', 'tree', '', SYSDATE(), '', NULL, '部门管理菜单', 'menu.systemDept'); -INSERT INTO sys_menu VALUES (104, '岗位管理', 1, 5, 'post', 'system/post/index', 0, 0, 'C', '0', '0', 'system:post:list', 'post', '', SYSDATE(), '', NULL, '岗位管理菜单', 'menu.systemPost'); -INSERT INTO sys_menu VALUES (105, '字典管理', 1, 6, 'dict', 'system/dict/index', 0, 0, 'C', '0', '0', 'system:dict:list', 'dict', '', SYSDATE(), '', NULL, '', 'menu.systemDic'); -INSERT INTO sys_menu VALUES (106, '角色分配', 1, 2, 'roleusers', 'system/roleusers/index', 0, 0, 'C', '1', '0', 'system:roleusers:list', 'people', '', SYSDATE(), '', NULL, NULL, ''); -INSERT into sys_menu VALUES (107, '参数设置', 1, 8, 'config','system/config/index', 0, 0, 'C', '0', '0', 'system:config:list','edit', '', SYSDATE(), '', NULL, '', 'menu.systemParam'); -INSERT INTO sys_menu VALUES (108, '日志管理', 1, 10, 'log', '' , 0, 0, 'M', '0', '0', '', 'log', '', SYSDATE(), '', NULL, '日志管理菜单', 'menu.systemLog'); -INSERT INTO sys_menu VALUES (109, '通知公告', 1, 9, 'notice', 'system/notice/index', 0, 0, 'C', '0', '0', 'system:notice:list', 'message', '', SYSDATE(), '', NULL, '通知公告菜单', 'menu.systemNotice'); -INSERT INTO sys_menu VALUES (110, '定时任务', 2, 10, 'job', 'monitor/job/index', 0, 0, 'C', '0', '0', '', 'job', '', SYSDATE(), '', NULL, '定时任务菜单', 'menu.timedTask'); -INSERT INTO sys_menu VALUES (111, '在线用户', 2, 10, 'onlineusers', 'monitor/onlineuser/index', 0, 0, 'C', '0', '0', '', 'online', '', SYSDATE(), '', NULL, '在线用户', 'layout.onlineUsers'); -INSERT INTO sys_menu VALUES (112, '服务监控', 2, 11, 'server', 'monitor/server/index', 0, 0, 'C', '0', '0', 'monitor:server:list', 'server', '', SYSDATE(), '', NULL, '服务监控菜单', 'menu.serviceMonitor'); -INSERT INTO sys_menu VALUES (113, '缓存监控', 2, 12, 'cache', 'monitor/cache/index', 0, 0, 'C', '1', '1', 'monitor:cache:list', 'redis', '', SYSDATE(), '', NULL, '缓存监控菜单', 'menu.cacheMonitor'); - -INSERT INTO sys_menu VALUES (114, '表单构建', 3, 13, 'build', 'tool/build/index', 0, 0, 'C', '0', '0', 'tool:build:list', 'build', '', SYSDATE(), '', NULL, '表单构建菜单', 'menu.formBuild'); -INSERT INTO sys_menu VALUES (115, '代码生成', 3, 14, 'gen', 'tool/gen/index', 0, 0, 'C', '0', '0', 'tool:gen:list', 'code', '', SYSDATE(), '', NULL, '代码生成菜单', 'menu.codeGeneration'); -INSERT INTO sys_menu VALUES (116, '系统接口', 3, 15, 'swagger', 'tool/swagger/index', 0, 0, 'C', '0', '0', 'tool:swagger:list', 'swagger', '', SYSDATE(), '', NULL, '系统接口菜单', 'menu.systemInterface'); -INSERT INTO sys_menu VALUES (117, '发送邮件', 3, 16, 'sendEmail', 'tool/email/sendEmail', 0, 0, 'C', '0', '0', 'tool:email:send', 'email', '', SYSDATE(), '', NULL, '发送邮件菜单', 'menu.sendEmail'); -INSERT INTO sys_menu VALUES (118, '文章管理', 3, 18, 'article', NULL, 0, 0, 'M', '0', '0', NULL, 'documentation', '', SYSDATE(), '', NULL, NULL, 'menu.systemArticle'); - - -INSERT INTO sys_menu VALUES (1047, '发布文章', 3, 2, '/article/publish', 'system/article/publish', 0, 0, 'C', '1', '0', 'system:article:publish', 'log', '', SYSDATE(), '', NULL, NULL, ''); -INSERT INTO sys_menu VALUES (119, '文章列表', 118, 1, 'index', 'system/article/manager', 0, 0, 'C', '0', '0', 'system:article:list', 'list', '', SYSDATE(), '', NULL, NULL, 'menu.articleList'); --- 三级菜单日志管理 -INSERT INTO sys_menu VALUES (500, '操作日志', 108, 1, 'operlog', 'monitor/operlog/index', 0, 0, 'C', '0', '0', 'monitor:operlog:list', 'form', '', SYSDATE(), '', NULL, '操作日志菜单', 'menu.operLog'); -INSERT INTO sys_menu VALUES (501, '登录日志', 108, 2, 'logininfor', 'monitor/logininfor/index', 0, 0, 'C', '0', '0', 'monitor:logininfor:list', 'logininfor', '', SYSDATE(), '', NULL, '登录日志菜单', 'menu.loginLog'); - - --- 用户管理 按钮 -INSERT INTO sys_menu VALUES (1001, '用户查询', 100, 1, '', '', 0, 0, 'F', '0', '0', 'system:user:query', '', '', SYSDATE(), '', NULL, '', NULL); -INSERT INTO sys_menu VALUES (1002, '用户添加', 100, 2, '', '', 0, 0, 'F', '0', '0', 'system:user:add', '', '', SYSDATE(), '', NULL, '', NULL); -INSERT INTO sys_menu VALUES (1003, '用户修改', 100, 3, '', '', 0, 0, 'F', '0', '0', 'system:user:edit', '', '', SYSDATE(), '', NULL, NULL, NULL); -INSERT INTO sys_menu VALUES (1004, '用户删除', 100, 4, '', '', 0, 0, 'F', '0', '0', 'system:user:remove', '', '', SYSDATE(), '', NULL, '', NULL); -INSERT INTO sys_menu VALUES (1005, '用户导出', 100, 5, '', '', 0, 0, 'F', '0', '0', 'system:user:export', '#', '', SYSDATE(), '', NULL, '', NULL); -INSERT INTO sys_menu VALUES (1006, '用户导入', 100, 6, '', '', 0, 0, 'F', '0', '0', 'system:user:import', '#', '', SYSDATE(), '', NULL, '', NULL); -INSERT INTO sys_menu VALUES (1007, '重置密码', 100, 7, '', '', 0, 0, 'F', '0', '0', 'system:user:resetPwd', '#', '', SYSDATE(), '', NULL, '', NULL); --- 权限管理 按钮 -INSERT INTO sys_menu VALUES (1008, '角色查询', 101, 1, '', '', 0, 0, 'F', '0', '0', 'system:role:query', '#', '', SYSDATE(), '', NULL, '', NULL); -INSERT INTO sys_menu VALUES (1009, '角色新增', 101, 2, '', '', 0, 0, 'F', '0', '0', 'system:role:add', '#', '', SYSDATE(), '', NULL, '', NULL); -INSERT INTO sys_menu VALUES (1010, '角色修改', 101, 3, '', '', 0, 0, 'F', '0', '0', 'system:role:edit', '#', '', SYSDATE(), '', NULL, '', NULL); -INSERT INTO sys_menu VALUES (1011, '角色删除', 101, 4, '', '', 0, 0, 'F', '0', '0', 'system:role:remove', '#', '', SYSDATE(), '', NULL, '', NULL); -INSERT INTO sys_menu VALUES (1012, '角色授权', 101, 5, '', '', 0, 0, 'F', '0', '0', 'system:role:authorize', '#', '', SYSDATE(), '', NULL, '', NULL); --- 分配用户 按钮 -INSERT INTO sys_menu VALUES (1029, '新增用户', 106, 2, '', '', 0, 0, 'F', '0', '0', 'system:roleusers:add', NULL, '', SYSDATE(), '', NULL, NULL, NULL); -INSERT INTO sys_menu VALUES (1030, '删除用户', 106, 3, '', '', 0, 0, 'F', '0', '0', 'system:roleusers:remove', NULL, '', SYSDATE(), '', NULL, NULL, NULL); --- 菜单管理 按钮 -INSERT INTO sys_menu VALUES (1013, '菜单查询', 102, 1, '', '', 0, 0, 'F', '0', '0', 'system:menu:query', '#', '', SYSDATE(), '', NULL, '', NULL); -INSERT INTO sys_menu VALUES (1014, '菜单新增', 102, 2, '', '', 0, 0, 'F', '0', '0', 'system:menu:add', '#', '', SYSDATE(), '', NULL, '', NULL); -INSERT INTO sys_menu VALUES (1015, '菜单修改', 102, 3, '', '', 0, 0, 'F', '0', '0', 'system:menu:edit', '#', '', SYSDATE(), '', NULL, '', NULL); -INSERT INTO sys_menu VALUES (1016, '菜单删除', 102, 4, '', '', 0, 0, 'F', '0', '0', 'system:menu:remove', '#', '', SYSDATE(), '', NULL, '', NULL); -INSERT INTO sys_menu VALUES (1017, '修改排序', 102, 5, '', '', 0, 0, 'F', '0', '0', 'system:menu:changeSort', '', '', SYSDATE(), '', NULL, NULL, NULL); --- 部门管理 按钮 -INSERT INTO sys_menu VALUES (1018, '部门查询', 103, 1, '', '', 0, 0, 'F', '0', '0', 'system:dept:query', '', '', SYSDATE(), '', NULL, NULL, NULL); -INSERT INTO sys_menu VALUES (1019, '部门新增', 103, 2, '', '', 0, 0, 'F', '0', '0', 'system:dept:add', NULL, '', SYSDATE(), '', NULL, NULL, NULL); -INSERT INTO sys_menu VALUES (1020, '部门修改', 103, 3, '', '', 0, 0, 'F', '0', '0', 'system:dept:update', NULL, '', SYSDATE(), '', NULL, NULL, NULL); -INSERT INTO sys_menu VALUES (1021, '部门删除', 103, 4, '', '', 0, 0, 'F', '0', '0', 'system:dept:remove', NULL, '', SYSDATE(), '', NULL, NULL, NULL); --- 岗位管理 按钮 -INSERT INTO sys_menu VALUES (1022, '岗位查询', 104, 1, '', '', 0, 0, 'F', '0', '0', 'system:post:list', NULL, '', SYSDATE(), '', NULL, NULL, NULL); -INSERT INTO sys_menu VALUES (1023, '岗位添加', 104, 2, '', '', 0, 0, 'F', '0', '0', 'system:post:add', NULL, '', SYSDATE(), '', NULL, NULL, NULL); -INSERT INTO sys_menu VALUES (1024, '岗位删除', 104, 3, '', '', 0, 0, 'F', '0', '0', 'system:post:remove', NULL, '', SYSDATE(), '', NULL, NULL, NULL); -INSERT INTO sys_menu VALUES (1025, '岗位编辑', 104, 4, '', '', 0, 0, 'F', '0', '0', 'system:post:edit', '', '', SYSDATE(), '', NULL, NULL, NULL); -INSERT INTO sys_menu VALUES (1070, '岗位导出', 104, 4, '', '', 0, 0, 'F', '0', '0', 'system:post:export', '', '', SYSDATE(), '', NULL, NULL, NULL); --- 字典管理 按钮 -INSERT INTO sys_menu VALUES (1031, '字典查询', 105, 1, '', '', 0, 0, 'F', '0', '0', 'system:dict:query', NULL, '', SYSDATE(), '', NULL, NULL, NULL); -INSERT INTO sys_menu VALUES (1026, '字典新增', 105, 1, '', '', 0, 0, 'F', '0', '0', 'system:dict:add', NULL, '', SYSDATE(), '', NULL, NULL, NULL); -INSERT INTO sys_menu VALUES (1027, '字典修改', 105, 2, '', '', 0, 0, 'F', '0', '0', 'system:dict:edit', NULL, '', SYSDATE(), '', NULL, NULL, NULL); -INSERT INTO sys_menu VALUES (1028, '字典删除', 105, 3, '', '', 0, 0, 'F', '0', '0', 'system:dict:remove', NULL, '', SYSDATE(), '', NULL, NULL, NULL); -INSERT INTO sys_menu VALUES (1071, '字典导出', 105, 3, '', '', 0, 0, 'F', '0', '0', 'system:dict:export', NULL, '', SYSDATE(), '', NULL, NULL, NULL); - --- 定时任务 按钮 -INSERT INTO sys_menu values (1032, '任务查询', 110, 1, '#', NULL, 0, 0, 'F', '0', '0', 'monitor:job:list', '#', '', sysdate(), '', null, '', NULL); -INSERT INTO sys_menu VALUES (1033, '任务新增', 110, 2, '#', NULL, 0, 0, 'F', '0', '0', 'monitor:job:add', '', '', SYSDATE(), '', NULL, NULL, NULL); -INSERT INTO sys_menu VALUES (1034, '任务删除', 110, 3, '#', NULL, 0, 0, 'F', '0', '0', 'monitor:job:delete', '', '', SYSDATE(), '', NULL, NULL, NULL); -INSERT INTO sys_menu VALUES (1035, '任务修改', 110, 4, '#', NULL, 0, 0, 'F', '0', '0', 'monitor:job:edit', '', '', SYSDATE(), '', NULL, NULL, NULL); -INSERT INTO sys_menu VALUES (1036, '任务启动', 110, 5, '#', NULL, 0, 0, 'F', '0', '0', 'monitor:job:start', '', '', SYSDATE(), '', NULL, NULL, NULL); -INSERT INTO sys_menu VALUES (1037, '任务运行', 110, 7, '#', NULL, 0, 0, 'F', '0', '0', 'monitor:job:run', NULL, '', SYSDATE(), '', NULL, NULL, NULL); -INSERT INTO sys_menu VALUES (1038, '任务停止', 110, 8, '#', NULL, 0, 0, 'F', '0', '0', 'monitor:job:stop', NULL, '', SYSDATE(), '', NULL, NULL, NULL); -INSERT INTO sys_menu VALUES (1039, '任务日志', 2, 0, 'job/log', 'monitor/job/log', 0, 0, 'C', '1', '0', 'monitor:job:query', 'log', '', SYSDATE(), '', NULL, NULL, NULL); -INSERT INTO sys_menu VALUES (1040, '任务导出', 110, 10, '#', NULL, 0, 0, 'F', '0', '0', 'monitor:job:export', NULL, '', SYSDATE(), '', NULL, NULL, NULL); --- 操作日志 按钮 -INSERT INTO sys_menu values (1041, '操作查询', 500, 1, '#', NULL, 0, 0, 'F', '0', '0', 'monitor:operlog:query', '', '', sysdate(), '', null, NULL, NULL); -INSERT INTO sys_menu VALUES (1042, '操作删除', 500, 2, '#', NULL, 0, 0, 'F', '0', '0', 'monitor:operlog:remove', '', '', SYSDATE(), '', NULL, NULL, NULL); -INSERT INTO sys_menu VALUES (1043, '操作日志导出', 500,3, '#', NULL, 0, 0, 'F', '0', '0', 'monitor:operlog:export', '', '', SYSDATE(), '', NULL, NULL, NULL); --- 登录日志 按钮 -INSERT INTO sys_menu values (1044, '登录查询', 501, 1, '#', NULL, 0, 0, 'F', '0', '0', 'monitor:logininfor:query', '', '', sysdate(), '', null, NULL, NULL); -INSERT INTO sys_menu VALUES (1045, '登录删除', 501, 1, '#', NULL, 0, 0, 'F', '0', '0', 'monitor:logininfor:remove', '', '', SYSDATE(), '', NULL, NULL, NULL); -INSERT INTO sys_menu VALUES (1046, '登录日志导出', 501, 1, '#', NULL, 0, 0, 'F', '0', '0', 'monitor:logininfor:export', '', '', SYSDATE(), '', NULL, NULL, NULL); --- 文章管理 按钮 -INSERT INTO sys_menu VALUES (1048, '文章新增', 118, 3, '#', NULL, 0, 0, 'F', '0', '0', 'system:article:add', '', '', SYSDATE(), '', NULL, NULL, NULL); -INSERT INTO sys_menu VALUES (1049, '文章修改', 118, 4, '#', NULL, 0, 0, 'F', '0', '0', 'system:article:update', '', '', SYSDATE(), '', NULL, NULL, NULL); -INSERT INTO sys_menu VALUES (1050, '文章删除', 118, 5, '#', NULL, 0, 0, 'F', '0', '0', 'system:article:delete', '', '', SYSDATE(), '', NULL, NULL, NULL); --- 通知公告 按钮 -INSERT INTO sys_menu VALUES (1051, '查询公告', 109, 1, '#', NULL, 0, 0, 'F', '0', '0', 'system:notice:query', '', '', SYSDATE(), '', NULL, NULL, NULL); -INSERT INTO sys_menu VALUES (1052, '新增公告', 109, 2, '#', NULL, 0, 0, 'F', '0', '0', 'system:notice:add', '', '', SYSDATE(), '', NULL, NULL, NULL); -INSERT INTO sys_menu VALUES (1053, '删除公告', 109, 3, '#', NULL, 0, 0, 'F', '0', '0', 'system:notice:delete', '', '', SYSDATE(), '', NULL, NULL, NULL); -INSERT INTO sys_menu VALUES (1054, '修改公告', 109, 4, '#', NULL, 0, 0, 'F', '0', '0', 'system:notice:update', '', '', SYSDATE(), '', NULL, NULL, NULL); -INSERT INTO sys_menu VALUES (1055, '导出公告', 109, 5, '#', NULL, 0, 0, 'F', '0', '0', 'system:notice:export', '', '', SYSDATE(), '', NULL, NULL, NULL); --- 代码生成 按钮 -INSERT INTO sys_menu VALUES (1060, '生成修改', 3, 1, '/gen/editTable', 'tool/gen/editTable', 0, 0, 'C', '1', '0', 'tool:gen:edit', '', '', SYSDATE(), '', NULL, NULL, NULL); -insert into sys_menu VALUES (1061, '生成查询', 115, 1, '#', NULL, 0, 0, 'F', '0', '0', 'tool:gen:query', '', '', sysdate(), '', NULL, NULL, NULL); -INSERT INTO sys_menu VALUES (1062, '生成删除', 115, 1, '#', NULL, 0, 0, 'F', '0', '0', 'tool:gen:remove', '', '', SYSDATE(), '', NULL, NULL, NULL); -INSERT INTO sys_menu VALUES (1063, '导入代码', 115, 1, '#', NULL, 0, 0, 'F', '0', '0', 'tool:gen:import', '', '', SYSDATE(), '', NULL, NULL, NULL); -INSERT INTO sys_menu VALUES (1064, '生成代码', 115, 1, '#', NULL, 0, 0, 'F', '0', '0', 'tool:gen:code', '', '', SYSDATE(), '', NULL, NULL, NULL); -INSERT INTO sys_menu VALUES (1065, '预览代码', 115, 1, '#', NULL, 0, 0, 'F', '0', '0', 'tool:gen:preview', '', '', SYSDATE(), '', NULL, NULL, NULL); - - --- 文件存储菜单 -INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by, create_time, remark, menuName_key) -VALUES ('文件存储', 3, 17, 'file', 'tool/file/index', 0, 0, 'C', '0', '0', 'tool:file:list', 'upload', '', sysdate(), '文件存储菜单', 'menu.fileStorage'); - --- 按钮父菜单id -SELECT @fileMenuId := LAST_INSERT_ID(); - -INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_time) -VALUES ('查询', @fileMenuId, 1, '#', NULL, 0, 0, 'F', '0', '0', 'tool:file:query', '', sysdate()); - -INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_time) -VALUES ('新增', @fileMenuId, 2, '#', NULL, 0, 0, 'F', '0', '0', 'tool:file:add', '', sysdate()); - -INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_time) -VALUES ('删除', @fileMenuId, 3, '#', NULL, 0, 0, 'F', '0', '0', 'tool:file:delete', '', sysdate()); - -INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_time) -VALUES ('修改', @fileMenuId, 4, '#', NULL, 0, 0, 'F', '0', '0', 'tool:file:update', '', sysdate()); - -INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_time) -VALUES ('导出', @fileMenuId, 5, '#', NULL, 0, 0, 'F', '0', '0', 'tool:file:export', '', sysdate()); - --- 多语言配置菜单 -INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by, create_time, menuName_key) -VALUES ('多语言配置', 1, 20, 'CommonLang', 'system/commonLang/index', 0, 0, 'C', '0', '0', 'system:lang:list', 'language', 'system', sysdate(), 'menu.systemLang'); - -SELECT @langMenuId := LAST_INSERT_ID(); - -INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by, create_time) -VALUES ('查询', @langMenuId, 1, '#', NULL, 0, 0, 'F', '0', '0', 'system:lang:query', '', 'system', sysdate()); - -INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by, create_time) -VALUES ('新增', @langMenuId, 2, '#', NULL, 0, 0, 'F', '0', '0', 'system:lang:add', '', 'system', sysdate()); - -INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by, create_time) -VALUES ('删除', @langMenuId, 3, '#', NULL, 0, 0, 'F', '0', '0', 'system:lang:delete', '', 'system', sysdate()); - -INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by, create_time) -VALUES ('修改', @langMenuId, 4, '#', NULL, 0, 0, 'F', '0', '0', 'system:lang:edit', '', 'system', sysdate()); - - --- 文章目录菜单 -INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by, create_time) -VALUES ('文章目录', 118, 999, 'ArticleCategory', 'system/article/articleCategory', 0, 0, 'C', '0', '0', 'articlecategory:list', 'tree-table', 'system', sysdate()); --- 按钮父菜单id -SELECT @cmenuId := LAST_INSERT_ID(); - -INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by, create_time) -VALUES ('查询', @cmenuId, 1, '#', NULL, 0, 0, 'F', '0', '0', 'articlecategory:query', '', 'system', sysdate()); - -INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by, create_time) -VALUES ('新增', @cmenuId, 2, '#', NULL, 0, 0, 'F', '0', '0', 'articlecategory:add', '', 'system', sysdate()); - -INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by, create_time) -VALUES ('删除', @cmenuId, 3, '#', NULL, 0, 0, 'F', '0', '0', 'articlecategory:delete', '', 'system', sysdate()); - -INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by, create_time) -VALUES ('修改', @cmenuId, 4, '#', NULL, 0, 0, 'F', '0', '0', 'articlecategory:edit', '', 'system', sysdate()); - --- ---------------------------- --- Records of sys_post --- ---------------------------- -INSERT INTO `sys_post` VALUES (1, 'CEO', '董事长', 1, '0', '', SYSDATE(), '', NULL, ''); -INSERT INTO `sys_post` VALUES (2, 'SE', '项目经理', 2, '0', '', SYSDATE(), '', NULL, ''); -INSERT INTO `sys_post` VALUES (3, 'HR', '人力资源', 3, '0', '', SYSDATE(), '', NULL, ''); -INSERT INTO `sys_post` VALUES (4, 'USER', '普通员工', 4, '0', '', SYSDATE(), '', NULL, ''); -INSERT INTO `sys_post` VALUES (6, 'PM', '人事经理', 0, '0', NULL, SYSDATE(), '', NULL, NULL); -INSERT INTO `sys_post` VALUES (7, 'GM', '总经理', 0, '0', NULL, SYSDATE(), '', NULL, NULL); -INSERT INTO `sys_post` VALUES (8, 'COO', '首席运营官', 0, '0', NULL, SYSDATE(), '', NULL, NULL); -INSERT INTO `sys_post` VALUES (9, 'CFO', '首席财务官', 0, '0', NULL, SYSDATE(), '', NULL, NULL); -INSERT INTO `sys_post` VALUES (10, 'CTO', '首席技术官', 0, '0', NULL, SYSDATE(), '', NULL, NULL); -INSERT INTO `sys_post` VALUES (11, 'HRD', '人力资源总监', 0, '0', NULL, SYSDATE(), '', NULL, NULL); -INSERT INTO `sys_post` VALUES (12, 'VP', '副总裁', 0, '0', NULL, SYSDATE(), '', NULL, NULL); -INSERT INTO `sys_post` VALUES (13, 'OD', '运营总监', 0, '0', NULL, SYSDATE(), '', NULL, NULL); -INSERT INTO `sys_post` VALUES (14, 'MD', '市场总监', 0, '0', NULL, SYSDATE(), '', NULL, NULL); - --- ---------------------------- --- Records of sys_role --- ---------------------------- -INSERT INTO `sys_role` VALUES (1, '超级管理员', 'admin', 1, 1, 1, 0, 0, 0, 'admin', SYSDATE(), 'system', NULL, '超级管理员'); -INSERT INTO `sys_role` VALUES (2, '普通角色', 'common', 2, 2, 1, 0, 0, 0, 'admin', SYSDATE(), 'system', NULL, '普通角色'); - --- ---------------------------- --- Records of sys_role_dept --- ---------------------------- -INSERT INTO `sys_role_dept` VALUES (2, 100); -INSERT INTO `sys_role_dept` VALUES (2, 101); -INSERT INTO `sys_role_dept` VALUES (2, 105); - --- ---------------------------- --- Records of sys_role_menu --- ---------------------------- - -INSERT INTO `sys_role_menu` VALUES (2, 1, NULL, SYSDATE()); -INSERT INTO `sys_role_menu` VALUES (2, 3, NULL, SYSDATE()); -INSERT INTO `sys_role_menu` VALUES (2, 5, NULL, SYSDATE()); -INSERT INTO `sys_role_menu` VALUES (2, 6, NULL, SYSDATE()); - -INSERT INTO `sys_role_menu` VALUES (2, 100, 'admin', SYSDATE()); -INSERT INTO `sys_role_menu` VALUES (2, 101, 'admin', SYSDATE()); -INSERT INTO `sys_role_menu` VALUES (2, 102, 'admin', SYSDATE()); -INSERT INTO `sys_role_menu` VALUES (2, 103, 'admin', SYSDATE()); -INSERT INTO `sys_role_menu` VALUES (2, 104, 'admin', SYSDATE()); -INSERT INTO `sys_role_menu` VALUES (2, 106, 'admin', SYSDATE()); -INSERT INTO `sys_role_menu` VALUES (2, 108, 'admin', SYSDATE()); -INSERT INTO `sys_role_menu` VALUES (2, 109, 'admin', SYSDATE()); -INSERT INTO `sys_role_menu` VALUES (2, 114, 'admin', SYSDATE()); -INSERT INTO `sys_role_menu` VALUES (2, 500, 'admin', SYSDATE()); -INSERT INTO `sys_role_menu` VALUES (2, 501, 'admin', SYSDATE()); -INSERT INTO `sys_role_menu` VALUES (2, 1001, 'admin', SYSDATE()); -INSERT INTO `sys_role_menu` VALUES (2, 1008, 'admin', SYSDATE()); -INSERT INTO `sys_role_menu` VALUES (2, 1013, 'admin', SYSDATE()); -INSERT INTO `sys_role_menu` VALUES (2, 1018, 'admin', SYSDATE()); -INSERT INTO `sys_role_menu` VALUES (2, 1022, 'admin', SYSDATE()); -INSERT INTO `sys_role_menu` VALUES (2, 1031, 'admin', SYSDATE()); -INSERT INTO `sys_role_menu` VALUES (2, 1044, 'admin', SYSDATE()); -INSERT INTO `sys_role_menu` VALUES (2, 1051, 'admin', SYSDATE()); - --- 编辑者 -INSERT INTO `sys_role_menu` VALUES (3, 4 , NULL, SYSDATE()); -INSERT INTO `sys_role_menu` VALUES (3, 118 , NULL, SYSDATE()); -INSERT INTO `sys_role_menu` VALUES (3, 1047, NULL, SYSDATE()); -INSERT INTO `sys_role_menu` VALUES (3, 1048, NULL, SYSDATE()); -INSERT INTO `sys_role_menu` VALUES (3, 1049, NULL, SYSDATE()); -INSERT INTO `sys_role_menu` VALUES (3, 1050, NULL, SYSDATE()); - --- ---------------------------- --- Records of sys_user --- ---------------------------- -INSERT INTO `sys_user`(`userId`, `deptId`, `userName`, `nickName`, `userType`, `email`, `phonenumber`, `sex`, `avatar`, `password`, `status`, `delFlag`, `loginIP`, `loginDate`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1, 0, 'admin', '管理员', '0', '', '', '0', '', 'e10adc3949ba59abbe56e057f20f883e', '0', '0', '127.0.0.1', '2021-08-23 14:03:17', 'admin', '2020-11-26 11:52:59', 'admin', '2021-08-03 10:11:24', '管理员'); -INSERT INTO `sys_user`(`userId`, `deptId`, `userName`, `nickName`, `userType`, `email`, `phonenumber`, `sex`, `avatar`, `password`, `status`, `delFlag`, `loginIP`, `loginDate`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (2, 0, 'user', '普通用户', '0', NULL, NULL, '0', '', 'e10adc3949ba59abbe56e057f20f883e', '0', '0', '', '0001-01-01 00:00:00', 'admin', '2021-07-05 17:29:13', 'admin', '2021-08-02 16:53:04', '普通用户'); -INSERT INTO `sys_user`(`userId`, `deptId`, `userName`, `nickName`, `userType`, `email`, `phonenumber`, `sex`, `avatar`, `password`, `status`, `delFlag`, `loginIP`, `loginDate`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (3, 100, 'editor', '编辑人员', '0', NULL, NULL, '2', '', 'E10ADC3949BA59ABBE56E057F20F883E', '0', '0', '127.0.0.1', '2021-08-19 09:27:46', 'admin', '2021-08-18 18:24:53', '', NULL, NULL); - - --- ---------------------------- --- Records of sys_user_role --- ---------------------------- -INSERT INTO `sys_user_role` VALUES (1, 1); - --- ---------------------------- --- Records of articleCategory --- ---------------------------- -INSERT INTO `articleCategory` VALUES (1, 'C#', '2021-08-13 00:00:00.000000', 0); -INSERT INTO `articleCategory` VALUES (2, 'java', '2021-08-18 00:00:00.000000', 0); -INSERT INTO `articleCategory` VALUES (3, '前端', '2021-08-18 00:00:00.000000', 0); -INSERT INTO `articleCategory` VALUES (4, '数据库', '2021-08-18 00:00:00.000000', 0); -INSERT INTO `articleCategory` VALUES (5, '其他', '2021-08-19 00:00:00.000000', 0); -INSERT INTO `articleCategory` VALUES (7, 'vue', '2021-08-19 00:00:00.000000', 3); -INSERT INTO `articleCategory` VALUES (8, 'sqlserver', '2021-08-19 00:00:00.000000', 4); - -INSERT INTO `sys_config`(`configId`, `configName`, `configKey`, `configValue`, `configType`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) -VALUES (1, '主框架页-默认皮肤样式名称', 'sys.index.skinName', 'skin-blue', 'Y', 'admin', '2021-12-26 13:14:57', '', NULL, '蓝色 skin-blue、绿色 skin-green、紫色 skin-purple、红色 skin-red、黄色 skin-yellow'); -INSERT INTO `sys_config`(`configId`, `configName`, `configKey`, `configValue`, `configType`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) -VALUES (2, '用户管理-账号初始密码', 'sys.user.initPassword', '123456', 'Y', 'admin', '2021-12-26 13:14:57', '', NULL, '初始化密码 123456'); -INSERT INTO `sys_config`(`configId`, `configName`, `configKey`, `configValue`, `configType`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) -VALUES (3, '主框架页-侧边栏主题', 'sys.index.sideTheme', 'theme-dark', 'Y', 'admin', '2021-12-26 13:14:57', '', NULL, '深色主题theme-dark,浅色主题theme-light'); -INSERT INTO `sys_config`(`configId`, `configName`, `configKey`, `configValue`, `configType`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) -VALUES (4, '账号自助-验证码开关', 'sys.account.captchaOnOff', '1', 'Y', 'admin', '2021-12-26 13:14:57', 'admin', '2022-03-30 12:43:48', '是否开启验证码功能(off、关闭,1、动态验证码 2、动态gif泡泡 3、泡泡 4、静态验证码)'); -INSERT INTO `sys_config`(`configId`, `configName`, `configKey`, `configValue`, `configType`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) -VALUES (6, '开启注册功能', 'sys.account.register', 'true', 'Y', 'admin', sysdate(), 'admin', NULL, NULL); -INSERT INTO `sys_config`(`configId`, `configName`, `configKey`, `configValue`, `configType`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) -VALUES (7, '文章预览地址', 'sys.article.preview.url', 'http://www.izhaorui.cn/article/details/', 'Y', 'admin', sysdate(), '', NULL, '格式:http://www.izhaorui.cn/article/details/{aid},其中{aid}为文章的id'); diff --git a/document/mysql/必看.txt b/document/mysql/必看.txt new file mode 100644 index 0000000..8f179de --- /dev/null +++ b/document/mysql/必看.txt @@ -0,0 +1,2 @@ +先导入 admin-mysql +初始化 admin-mysql-初始化数据(已废弃,请查看文档https://www.izhaorui.cn/doc/quickstart.html) \ No newline at end of file diff --git a/document/sqlserver/admin-sqlserver-初始化数据.sql b/document/sqlserver/admin-sqlserver-初始化数据.sql deleted file mode 100644 index b4d20fe..0000000 --- a/document/sqlserver/admin-sqlserver-初始化数据.sql +++ /dev/null @@ -1,375 +0,0 @@ ---CREATE DATABASE ZrAdmin -GO -USE ZrAdmin -GO -INSERT INTO sys_tasks VALUES ('1410905433996136448', '测试任务', 'SYSTEM', '0 0/10 * * * ? ', 'ZR.Tasks', 'TaskScheduler.Job_SyncTest', NULL, 0, '2021-07-02 18:17:31', '9999-12-31 00:00:00', 1, 1, 1, NULL, '2021-07-02 18:17:23', '2021-07-02 18:17:31', 'admin', NULL, NULL, 1, '', '', ''); -GO -INSERT INTO sys_dept(parentId, deptName, orderNum, status, delFlag, create_by, create_time) VALUES (0, 'XXX公司', 0,0, 0, 'admin', GETDATE() ); -INSERT INTO sys_dept(parentId, deptName, orderNum, status, delFlag, create_by, create_time) VALUES (100, '研发部门',1,0, 0, 'admin', GETDATE()); -INSERT INTO sys_dept(parentId, deptName, orderNum, status, delFlag, create_by, create_time) VALUES (100, '市场部门',2,0, 0, 'admin', GETDATE()); -INSERT INTO sys_dept(parentId, deptName, orderNum, status, delFlag, create_by, create_time) VALUES (100, '测试部门',3,0, 0, 'admin', GETDATE()); -INSERT INTO sys_dept(parentId, deptName, orderNum, status, delFlag, create_by, create_time) VALUES (100, '财务部门',4,0, 0, 'admin', GETDATE()); -GO -INSERT INTO sys_dict_type VALUES ('用户性别', 'sys_user_sex', '0', 'Y', 'admin', '2021-02-24 10:55:26', '', NULL, '用户性别列表', NULL); -INSERT INTO sys_dict_type VALUES ('菜单状态', 'sys_show_hide', '0', 'Y', 'admin', '2021-02-24 10:55:26', '', NULL, '菜单状态列表', NULL); -INSERT INTO sys_dict_type VALUES ('系统开关', 'sys_normal_disable', '0', 'Y', 'admin', '2021-02-24 10:55:26', '', NULL, '系统开关列表', NULL); -INSERT INTO sys_dict_type VALUES ('任务状态', 'sys_job_status', '0', 'Y', 'admin', '2021-02-24 10:55:26', '', NULL, '任务状态列表', NULL); -INSERT INTO sys_dict_type VALUES ('任务分组', 'sys_job_group', '0', 'Y', 'admin', '2021-02-24 10:55:26', '', NULL, '任务分组列表', NULL); -INSERT INTO sys_dict_type VALUES ('系统是否', 'sys_yes_no', '0', 'Y', 'admin', '2021-02-24 10:55:26', '', NULL, '系统是否列表', NULL); -INSERT INTO sys_dict_type VALUES ('通知类型', 'sys_notice_type', 'Y', '0', 'admin', '2021-02-24 10:55:26', '', NULL, '通知类型列表', NULL); -INSERT INTO sys_dict_type VALUES ('通知状态', 'sys_notice_status', '0', 'Y', 'admin', '2021-02-24 10:55:26', '', NULL, '通知状态列表', NULL); -INSERT INTO sys_dict_type VALUES ('操作类型', 'sys_oper_type', '0', 'Y', 'admin', '2021-02-24 10:55:26', '', NULL, '操作类型列表', NULL); -INSERT INTO sys_dict_type VALUES ('系统状态', 'sys_common_status', '0', 'Y', 'admin', '2021-02-24 10:55:27', '', NULL, '登录状态列表', NULL); -INSERT INTO sys_dict_type VALUES ('文章状态', 'sys_article_status', '0', 'Y', 'admin', '2021-08-19 10:34:33', '', NULL, NULL, NULL); -INSERT INTO sys_dict_type VALUES ('多语言类型', 'sys_lang_type', '0', 'Y', 'admin', '2021-08-19 10:34:33', '', NULL, '多语言字典类型', NULL); - -GO - -INSERT INTO sys_dict_data VALUES (1, '男', '0', 'sys_user_sex', '', '', 'Y', '0', 'admin', '2021-02-24 10:56:21', '', NULL, '性别男', ''); -INSERT INTO sys_dict_data VALUES (2, '女', '1', 'sys_user_sex', '', '', 'N', '0', 'admin', '2021-02-24 10:56:21', '', NULL, '性别女', ''); -INSERT INTO sys_dict_data VALUES (3, '未知', '2', 'sys_user_sex', '', '', 'N', '0', 'admin', '2021-02-24 10:56:21', '', NULL, '性别未知', ''); -INSERT INTO sys_dict_data VALUES (1, '显示', '0', 'sys_show_hide', '', 'primary', 'Y', '0', 'admin', '2021-02-24 10:56:21', '', NULL, '显示菜单', ''); -INSERT INTO sys_dict_data VALUES (2, '隐藏', '1', 'sys_show_hide', '', 'danger', 'N', '0', 'admin', '2021-02-24 10:56:21', '', NULL, '隐藏菜单', ''); -INSERT INTO sys_dict_data VALUES (1, '正常', '0', 'sys_normal_disable', '', 'primary', 'Y', '0', 'admin', '2021-02-24 10:56:21', '', NULL, '正常状态', ''); -INSERT INTO sys_dict_data VALUES (2, '停用', '1', 'sys_normal_disable', '', 'danger', 'N', '0', 'admin', '2021-02-24 10:56:21', '', NULL, '停用状态', ''); -INSERT INTO sys_dict_data VALUES (1, '正常', '0', 'sys_job_status', '', 'primary', 'Y', '0', 'admin', '2021-02-24 10:56:21', '', NULL, '正常状态', ''); -INSERT INTO sys_dict_data VALUES (2, '异常', '1', 'sys_job_status', '', 'danger', 'N', '0', 'admin', '2021-02-24 10:56:21', '', '2021-07-02 14:09:09', '停用状态', ''); -INSERT INTO sys_dict_data VALUES ( 1, '默认', 'DEFAULT', 'sys_job_group', '', '', 'Y', '0', 'admin', '2021-02-24 10:56:21', '', NULL, '默认分组', ''); -INSERT INTO sys_dict_data VALUES ( 2, '系统', 'SYSTEM', 'sys_job_group', '', '', 'N', '0', 'admin', '2021-02-24 10:56:21', '', NULL, '系统分组', ''); -INSERT INTO sys_dict_data VALUES ( 1, '是', 'Y', 'sys_yes_no', '', 'primary', 'Y', '0', 'admin', '2021-02-24 10:56:21', '', NULL, '系统默认是', ''); -INSERT INTO sys_dict_data VALUES ( 2, '否', 'N', 'sys_yes_no', '', 'danger', 'N', '0', 'admin', '2021-02-24 10:56:21', '', NULL, '系统默认否', ''); -INSERT INTO sys_dict_data VALUES ( 1, '通知', '1', 'sys_notice_type', '', 'warning', 'Y', '0', 'admin', '2021-02-24 10:56:22', '', NULL, '通知', ''); -INSERT INTO sys_dict_data VALUES ( 2, '公告', '2', 'sys_notice_type', '', 'success', 'N', '0', 'admin', '2021-02-24 10:56:22', '', NULL, '公告', ''); -INSERT INTO sys_dict_data VALUES ( 1, '正常', '0', 'sys_notice_status', '', 'primary', 'Y', '0', 'admin', '2021-02-24 10:56:22', '', NULL, '正常状态', ''); -INSERT INTO sys_dict_data VALUES ( 2, '关闭', '1', 'sys_notice_status', '', 'danger', 'N', '0', 'admin', '2021-02-24 10:56:22', '', NULL, '关闭状态', ''); -INSERT INTO sys_dict_data VALUES ( 0, '其他', '0', 'sys_oper_type', '', 'info', 'N', '0', 'admin', '2021-02-24 10:56:22', '', NULL, '其他操作', ''); -INSERT INTO sys_dict_data VALUES ( 1, '新增', '1', 'sys_oper_type', '', 'info', 'N', '0', 'admin', '2021-02-24 10:56:22', '', NULL, '新增操作', ''); -INSERT INTO sys_dict_data VALUES ( 2, '修改', '2', 'sys_oper_type', '', 'info', 'N', '0', 'admin', '2021-02-24 10:56:22', '', NULL, '修改操作', ''); -INSERT INTO sys_dict_data VALUES ( 3, '删除', '3', 'sys_oper_type', '', 'danger', 'N', '0', 'admin', '2021-02-24 10:56:22', '', NULL, '删除操作', ''); -INSERT INTO sys_dict_data VALUES ( 4, '授权', '4', 'sys_oper_type', '', 'primary', 'N', '0', 'admin', '2021-02-24 10:56:22', '', NULL, '授权操作', ''); -INSERT INTO sys_dict_data VALUES ( 5, '导出', '5', 'sys_oper_type', '', 'warning', 'N', '0', 'admin', '2021-02-24 10:56:22', '', NULL, '导出操作', ''); -INSERT INTO sys_dict_data VALUES ( 6, '导入', '6', 'sys_oper_type', '', 'warning', 'N', '0', 'admin', '2021-02-24 10:56:22', '', NULL, '导入操作', ''); -INSERT INTO sys_dict_data VALUES ( 7, '强退', '7', 'sys_oper_type', '', 'danger', 'N', '0', 'admin', '2021-02-24 10:56:22', '', NULL, '强退操作', ''); -INSERT INTO sys_dict_data VALUES ( 8, '生成代码', '8', 'sys_oper_type', '', 'warning', 'N', '0', 'admin', '2021-02-24 10:56:22', '', NULL, '生成操作', ''); -INSERT INTO sys_dict_data VALUES ( 9, '清空数据', '9', 'sys_oper_type', '', 'danger', 'N', '0', 'admin', '2021-02-24 10:56:22', '', NULL, '清空操作', ''); -INSERT INTO sys_dict_data VALUES ( 1, '成功', '0', 'sys_common_status', '', 'primary', 'N', '0', 'admin', '2021-02-24 10:56:23', '', NULL, '正常状态', ''); -INSERT INTO sys_dict_data VALUES ( 2, '失败', '1', 'sys_common_status', '', 'danger', 'N', '0', 'admin', '2021-02-24 10:56:23', '', NULL, '停用状态', ''); -INSERT INTO sys_dict_data VALUES ( 1, '发布', '1', 'sys_article_status', NULL, NULL, NULL, '0', 'admin', '2021-08-19 10:34:56', '', NULL, NULL, ''); -INSERT INTO sys_dict_data VALUES ( 2, '草稿', '2', 'sys_article_status', NULL, NULL, NULL, '0', 'admin', '2021-08-19 10:35:06', '', NULL, NULL, ''); - -INSERT INTO sys_dict_data VALUES (1, '中文', 'zh-cn', 'sys_lang_type', NULL, NULL, NULL, '0', 'admin', '2021-08-19 10:35:06', '', NULL, NULL, ''); -INSERT INTO sys_dict_data VALUES (2, '英文', 'en', 'sys_lang_type', NULL, NULL, NULL, '0', 'admin', '2021-08-19 10:35:06', '', NULL, NULL, ''); -INSERT INTO sys_dict_data VALUES (3, '繁体', 'zh-tw', 'sys_lang_type', NULL, NULL, NULL, '0', 'admin', '2021-08-19 10:35:06', '', NULL, NULL, ''); - -GO - -SET IDENTITY_INSERT sys_menu ON --- 一级菜单 -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, menuName_key) VALUES (1, '系统管理', 0, 1, 'system', NULL, 0, 0, 'M', '0', '0', '', 'system', '', GETDATE(), 'menu.system'); -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, menuName_key) VALUES (2, '系统监控', 0, 2, 'monitor', NULL, 0, 0, 'M', '0', '0', '', 'monitor', '', GETDATE(), 'menu.monitoring'); -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, menuName_key) VALUES (3, '系统工具', 0, 3, 'tool', NULL, 0, 0, 'M', '0', '0', '', 'tool', '', GETDATE(), 'menu.systemTools'); -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, menuName_key) VALUES (5, '外部打开', 0, 5, 'http://www.izhaorui.cn', NULL, 1, 0, 'M', '0', '0', '', 'link', '', GETDATE(), 'menu.officialWebsite'); -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, menuName_key) VALUES (6, '控制台', 0, 0, 'dashboard', 'index_v1', 0, 0, 'C', '0', '0', '', 'dashboard', '', GETDATE(), 'menu.dashboard'); - --- 二级菜单 -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, menuName_key) VALUES (100, '用户管理', 1, 1, 'user', 'system/user/index', 0, 0, 'C', '0', '0', 'system:user:list', 'user', '', GETDATE(), 'menu.systemUser'); -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, menuName_key) VALUES (101, '角色管理', 1, 2, 'role', 'system/role/index', 0, 0, 'C', '0', '0', 'system:role:list', 'peoples', '', GETDATE(), 'menu.systemRole'); -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, menuName_key) VALUES (102, '菜单管理', 1, 3, 'menu', 'system/menu/index', 0, 0, 'C', '0', '0', 'system:menu:list', 'tree-table', '', GETDATE(), 'menu.systemMenu'); -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, menuName_key) VALUES (103, '部门管理', 1, 4, 'dept', 'system/dept/index', 0, 0, 'C', '0', '0', 'system:dept:list', 'tree', '', GETDATE(), 'menu.systemDept'); -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, menuName_key) VALUES (104, '岗位管理', 1, 5, 'post', 'system/post/index', 0, 0, 'C', '0', '0', 'system:post:list', 'post', '', GETDATE(), 'menu.systemPost'); -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, menuName_key) VALUES (105, '字典管理', 1, 6, 'dict', 'system/dict/index', 0, 0, 'C', '0', '0', 'system:dict:list', 'dict', '', GETDATE(), 'menu.systemDic'); -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, menuName_key) VALUES (106, '角色分配', 1, 2, 'roleusers','system/roleusers/index', 0, 0, 'C', '1', '0', 'system:roleusers:list', 'people', '', GETDATE(), ''); -INSERT into sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, menuName_key) VALUES (107, '参数设置', 1, 8, 'config', 'system/config/index', 0, 0, 'C', '0', '0', 'system:config:list','edit','', GETDATE(), 'menu.systemParam'); -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, menuName_key) VALUES (108, '日志管理', 1, 10, 'log', '', 0, 0, 'M', '0', '0', '', 'log', '', GETDATE(), 'menu.systemLog'); -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, menuName_key) VALUES (109, '通知公告', 1, 9, 'notice', 'system/notice/index', 0, 0, 'C', '0', '0', 'system:notice:list', 'message', '', GETDATE(), 'menu.systemNotice'); -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, menuName_key) VALUES (110, '定时任务', 2, 1, 'job', 'monitor/job/index', 0, 0, 'C', '0', '0', '', '', '', GETDATE(), 'menu.timedTask'); -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, menuName_key) VALUES (111, '在线用户', 2, 2, 'onlineusers', 'monitor/onlineuser/index', 0, 0, 'C', '0', '0', '', 'online', '', GETDATE(), 'layout.onlineUsers'); -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, menuName_key) VALUES (112, '服务监控', 2, 4, 'server', 'monitor/server/index', 0, 0, 'C', '0', '0', 'monitor:server:list', 'server', '', GETDATE(), 'menu.serviceMonitor'); -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, menuName_key) VALUES (113, '缓存监控', 2, 5, 'cache', 'monitor/cache/index', 0, 0, 'C', '1', '1', 'monitor:cache:list', 'redis', '', GETDATE(), 'menu.cacheMonitor'); -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, menuName_key) VALUES (114, '表单构建', 3, 1, 'build', 'tool/build/index', 0, 0, 'C', '0', '0', 'tool:build:list', 'build', '', GETDATE(), 'menu.formBuild'); -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, menuName_key) VALUES (115, '代码生成', 3, 2, 'gen', 'tool/gen/index', 0, 0, 'C', '0', '0', 'tool:gen:list', 'code', '', GETDATE(), 'menu.codeGeneration'); -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, menuName_key) VALUES (116, '系统接口', 3, 3, 'swagger', 'tool/swagger/index', 0, 0, 'C', '0', '0', 'tool:swagger:list', 'swagger', '', GETDATE(), 'menu.systemInterface'); -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, menuName_key) VALUES (117, '发送邮件', 3, 4, 'sendEmail', 'tool/email/sendEmail', 0, 0, 'C', '0', '0', 'tool:email:send', 'email', '', GETDATE(), 'menu.sendEmail'); -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, menuName_key) VALUES (118, '文章管理', 3, 18, 'article', NULL, 0, 0, 'M', '0', '0', NULL, 'documentation', '', GETDATE(), 'menu.systemArticle'); - - -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, menuName_key) VALUES (1047, '发布文章', 3 , 2, '/article/publish', 'system/article/publish', 0, 0, 'C', '1', '0', 'system:article:publish', 'log', '', GETDATE(), ''); -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, menuName_key) VALUES (119, '文章列表', 118, 1, 'index', 'system/article/manager', 0, 0, 'C', '0', '0', 'system:article:list', 'list', '', GETDATE(), 'menu.articleList'); --- 三级菜单日志管理 -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, menuName_key) VALUES (500, '操作日志', 108, 1, 'operlog', 'monitor/operlog/index', 0, 0, 'C', '0', '0', 'monitor:operlog:list', 'form', '', GETDATE(), 'menu.operLog'); -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, menuName_key) VALUES (501, '登录日志', 108, 2, 'logininfor', 'monitor/logininfor/index', 0, 0, 'C', '0', '0', 'monitor:logininfor:list', 'logininfor', '', GETDATE(), 'menu.loginLog'); - - --- 用户管理 按钮 -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, update_by, update_time, remark) VALUES (1001, '用户查询', 100, 1, '', '', 0, 0, 'F', '0', '0', 'system:user:query', '', '', GETDATE(), '', NULL, ''); -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, update_by, update_time, remark) VALUES (1002, '用户添加', 100, 2, '', '', 0, 0, 'F', '0', '0', 'system:user:add', '', '', GETDATE(), '', NULL, ''); -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, update_by, update_time, remark) VALUES (1003, '用户修改', 100, 3, '', '', 0, 0, 'F', '0', '0', 'system:user:edit', '', '', GETDATE(), '', NULL, NULL); -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, update_by, update_time, remark) VALUES (1004, '用户删除', 100, 4, '', '', 0, 0, 'F', '0', '0', 'system:user:remove', '', '', GETDATE(), '', NULL, ''); -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, update_by, update_time, remark) VALUES (1005, '用户导出', 100, 5, '', '', 0, 0, 'F', '0', '0', 'system:user:export', '#', '', GETDATE(), '', NULL, ''); -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, update_by, update_time, remark) VALUES (1006, '用户导入', 100, 6, '', '', 0, 0, 'F', '0', '0', 'system:user:import', '#', '', GETDATE(), '', NULL, ''); -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, update_by, update_time, remark) VALUES (1007, '重置密码', 100, 7, '', '', 0, 0, 'F', '0', '0', 'system:user:resetPwd', '#', '', GETDATE(), '', NULL, ''); --- 权限管理 按钮 -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, update_by, update_time, remark) VALUES (1008, '角色查询', 101, 1, '', '', 0, 0, 'F', '0', '0', 'system:role:query', '#', '', GETDATE(), '', NULL, ''); -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, update_by, update_time, remark) VALUES (1009, '角色新增', 101, 2, '', '', 0, 0, 'F', '0', '0', 'system:role:add', '#', '', GETDATE(), '', NULL, ''); -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, update_by, update_time, remark) VALUES (1010, '角色修改', 101, 3, '', '', 0, 0, 'F', '0', '0', 'system:role:edit', '#', '', GETDATE(), '', NULL, ''); -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, update_by, update_time, remark) VALUES (1011, '角色删除', 101, 4, '', '', 0, 0, 'F', '0', '0', 'system:role:remove', '#', '', GETDATE(), '', NULL, ''); -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, update_by, update_time, remark) VALUES (1012, '菜单授权', 101, 5, '', '', 0, 0, 'F', '0', '0', 'system:role:authorize', '#', '', GETDATE(), '', NULL, ''); --- 分配用户 按钮 -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, update_by, update_time, remark) VALUES (1029, '新增用户', 106, 1, '', '', 0, 0, 'F', '0', '0', 'system:roleusers:add', NULL, '', GETDATE(), '', NULL, NULL); -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, update_by, update_time, remark) VALUES (1030, '删除用户', 106, 2, '', '', 0, 0, 'F', '0', '0', 'system:roleusers:del', NULL, '', GETDATE(), '', NULL, NULL); --- 菜单管理 按钮 -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, update_by, update_time, remark) VALUES (1013, '菜单查询', 102, 1, '', '', 0, 0, 'F', '0', '0', 'system:menu:query', '#', '', GETDATE(), '', NULL, ''); -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, update_by, update_time, remark) VALUES (1014, '菜单新增', 102, 2, '', '', 0, 0, 'F', '0', '0', 'system:menu:add', '#', '', GETDATE(), '', NULL, ''); -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, update_by, update_time, remark) VALUES (1015, '菜单修改', 102, 3, '', '', 0, 0, 'F', '0', '0', 'system:menu:edit', '#', '', GETDATE(), '', NULL, ''); -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, update_by, update_time, remark) VALUES (1016, '菜单删除', 102, 4, '', '', 0, 0, 'F', '0', '0', 'system:menu:remove', '#', '', GETDATE(), '', NULL, ''); -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, update_by, update_time, remark) VALUES (1017, '修改排序', 102, 5, '', '', 0, 0, 'F', '0', '0', 'system:menu:changeSort', '', '', GETDATE(), '', NULL, NULL); --- 部门管理 按钮 -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, update_by, update_time, remark) VALUES (1018, '部门查询', 103, 1, '', '', 0, 0, 'F', '0', '0', 'system:dept:query', '', '', GETDATE(), '', NULL, NULL); -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, update_by, update_time, remark) VALUES (1019, '部门新增', 103, 2, '', '', 0, 0, 'F', '0', '0', 'system:dept:add', NULL, '', GETDATE(), '', NULL, NULL); -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, update_by, update_time, remark) VALUES (1020, '部门修改', 103, 3, '', '', 0, 0, 'F', '0', '0', 'system:dept:update', NULL, '', GETDATE(), '', NULL, NULL); -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, update_by, update_time, remark) VALUES (1021, '部门删除', 103, 4, '', '', 0, 0, 'F', '0', '0', 'system:dept:remove', NULL, '', GETDATE(), '', NULL, NULL); --- 岗位管理 按钮 -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, update_by, update_time, remark) VALUES (1022, '岗位查询', 104, 1, '', '', 0, 0, 'F', '0', '0', 'system:post:list', NULL, '', GETDATE(), '', NULL, NULL); -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, update_by, update_time, remark) VALUES (1023, '岗位添加', 104, 2, '', '', 0, 0, 'F', '0', '0', 'system:post:add', NULL, '', GETDATE(), '', NULL, NULL); -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, update_by, update_time, remark) VALUES (1024, '岗位删除', 104, 3, '', '', 0, 0, 'F', '0', '0', 'system:post:remove', NULL, '', GETDATE(), '', NULL, NULL); -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, update_by, update_time, remark) VALUES (1025, '岗位编辑', 104, 4, '', '', 0, 0, 'F', '0', '0', 'system:post:edit', '', '', GETDATE(), '', NULL, NULL); -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, update_by, update_time, remark) VALUES (1070, '岗位导出', 104, 4, '', '', 0, 0, 'F', '0', '0', 'system:post:export', '', '', GETDATE(), '', NULL, NULL); --- 字典管理 按钮 -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, update_by, update_time, remark) VALUES (1031, '字典查询', 105, 1, '', '', 0, 0, 'F', '0', '0', 'system:dict:query', NULL, '', GETDATE(), '', NULL, NULL); -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, update_by, update_time, remark) VALUES (1026, '字典新增', 105, 1, '', '', 0, 0, 'F', '0', '0', 'system:dict:add', NULL, '', GETDATE(), '', NULL, NULL); -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, update_by, update_time, remark) VALUES (1027, '字典修改', 105, 2, '', '', 0, 0, 'F', '0', '0', 'system:dict:edit', NULL, '', GETDATE(), '', NULL, NULL); -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, update_by, update_time, remark) VALUES (1028, '字典删除', 105, 3, '', '', 0, 0, 'F', '0', '0', 'system:dict:remove', NULL, '', GETDATE(), '', NULL, NULL); -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, update_by, update_time, remark) VALUES (1071, '字典导出', 105, 4, '', '', 0, 0, 'F', '0', '0', 'system:dict:export', NULL, '', GETDATE(), '', NULL, NULL); --- 定时任务 按钮 -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, update_by, update_time, remark) values (1032, '任务查询', 110, 1, '#', NULL, 0, 0, 'F', '0', '0', 'monitor:job:list', '#', 'admin', GETDATE(), '', null, ''); -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, update_by, update_time, remark) VALUES (1033, '任务新增', 110, 2, '#', NULL, 0, 0, 'F', '0', '0', 'monitor:job:add', '', '', GETDATE(), '', NULL, NULL); -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, update_by, update_time, remark) VALUES (1034, '任务删除', 110, 3, '#', NULL, 0, 0, 'F', '0', '0', 'monitor:job:delete', '', '', GETDATE(), '', NULL, NULL); -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, update_by, update_time, remark) VALUES (1035, '任务修改', 110, 4, '#', NULL, 0, 0, 'F', '0', '0', 'monitor:job:edit', '', '', GETDATE(), '', NULL, NULL); -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, update_by, update_time, remark) VALUES (1036, '任务启动', 110, 5, '#', NULL, 0, 0, 'F', '0', '0', 'monitor:job:start', '', '', GETDATE(), '', NULL, NULL); -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, update_by, update_time, remark) VALUES (1037, '任务运行', 110, 7, '#', NULL, 0, 0, 'F', '0', '0', 'monitor:job:run', NULL, '', GETDATE(), '', NULL, NULL); -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, update_by, update_time, remark) VALUES (1038, '任务停止', 110, 8, '#', NULL, 0, 0, 'F', '0', '0', 'monitor:job:stop', NULL, '', GETDATE(), '', NULL, NULL); -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, update_by, update_time, remark) VALUES (1039, '任务日志', 2, 0, 'job/log', 'monitor/job/log', 0, 0, 'C', '1', '0', 'monitor:job:query', 'log', '', GETDATE(), '', NULL, NULL); -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, update_by, update_time, remark) VALUES (1040, '任务导出', 110,10, '#', NULL, 0, 0, 'F', '0', '0', 'monitor:job:export', '', '', GETDATE(), '', NULL, NULL); --- 操作日志 按钮 -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, update_by, update_time, remark) values (1041, '操作查询', 500, 1, '#', NULL, 0, 0, 'F', '0', '0', 'monitor:operlog:query', '', '', GETDATE(), '', null, NULL); -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, update_by, update_time, remark) VALUES (1042, '操作删除', 500, 2, '#', NULL, 0, 0, 'F', '0', '0', 'monitor:operlog:remove', '', '', GETDATE(), '', NULL, NULL); -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, update_by, update_time, remark) VALUES (1043, '操作日志导出', 500, 3, '#', NULL, 0, 0, 'F', '0', '0', 'monitor:operlog:export', '', '', GETDATE(), '', NULL, NULL); --- 登录日志 按钮 -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, update_by, update_time, remark) values (1044, '登录查询', 501, 1, '#', NULL, 0, 0, 'F', '0', '0', 'monitor:logininfor:query', '', 'admin', GETDATE(), '', null, ''); -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, update_by, update_time, remark) VALUES (1045, '登录删除', 501, 1, '#', NULL, 0, 0, 'F', '0', '0', 'monitor:logininfor:remove', '', '', GETDATE(), '', NULL, NULL); -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, update_by, update_time, remark) VALUES (1046, '登录日志导出', 501, 1, '#', NULL, 0, 0, 'F', '0', '0', 'monitor:logininfor:export', '', '', GETDATE(), '', NULL, NULL); --- 文章管理 按钮 -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, update_by, update_time, remark) VALUES (1048, '文章新增', 118, 2, '#', NULL, 0, 0, 'F', '0', '0', 'system:article:add', '', '', GETDATE(), '', NULL, NULL); -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, update_by, update_time, remark) VALUES (1049, '文章修改', 118, 3, '#', NULL, 0, 0, 'F', '0', '0', 'system:article:update', '', '', GETDATE(), '', NULL, NULL); -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, update_by, update_time, remark) VALUES (1050, '文章删除', 118, 4, '#', NULL, 0, 0, 'F', '0', '0', 'system:article:delete', '', '', GETDATE(), '', NULL, NULL); --- 通知公告 按钮 -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time) VALUES (1051, '查询公告', 109, 1, '#', NULL, 0, 0, 'F', '0', '0', 'system:notice:query', '', '', GETDATE()); -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time) VALUES (1052, '新增公告', 109, 2, '#', NULL, 0, 0, 'F', '0', '0', 'system:notice:add', '', '', GETDATE()); -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time) VALUES (1053, '删除公告', 109, 3, '#', NULL, 0, 0, 'F', '0', '0', 'system:notice:delete', '', '', GETDATE()); -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time) VALUES (1054, '修改公告', 109, 4, '#', NULL, 0, 0, 'F', '0', '0', 'system:notice:update', '', '', GETDATE()); -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time) VALUES (1055, '导出公告', 109, 5, '#', NULL, 0, 0, 'F', '0', '0', 'system:notice:export', '', '', GETDATE()); - --- 代码生成 按钮 -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, update_by, update_time, remark) VALUES (1060, '生成修改', 3, 1, '/gen/editTable', 'tool/gen/editTable', 0, 0, 'C', '1', '0', 'tool:gen:edit', '', '', GETDATE(), '', NULL, NULL); -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, update_by, update_time, remark) VALUES (1061, '生成查询', 115, 2, '#', NULL, 0, 0, 'F', '0', '0', 'tool:gen:query', '', '', GETDATE(), '', NULL, NULL); -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, update_by, update_time, remark) VALUES (1062, '生成删除', 115, 1, '#', NULL, 0, 0, 'F', '0', '0', 'tool:gen:remove', '', '', GETDATE(), '', NULL, NULL); -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, update_by, update_time, remark) VALUES (1063, '导入代码', 115, 1, '#', NULL, 0, 0, 'F', '0', '0', 'tool:gen:import', '', '', GETDATE(), '', NULL, NULL); -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, update_by, update_time, remark) VALUES (1064, '生成代码', 115, 1, '#', NULL, 0, 0, 'F', '0', '0', 'tool:gen:code', '', '', GETDATE(), '', NULL, NULL); -INSERT INTO sys_menu(menuId, menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, update_by, update_time, remark) VALUES (1065, '预览代码', 115, 1, '#', NULL, 0, 0, 'F', '0', '0', 'tool:gen:preview', '', '', GETDATE(), '', NULL, NULL); - -SET IDENTITY_INSERT sys_menu OFF - -GO --- 文件存储菜单 -INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by, create_time, remark, menuName_key) -VALUES ('文件存储', 3, 17, 'file', 'tool/file/index', 0, 0, 'C', '0', '0', 'tool:file:list', 'upload', '', '', '文件存储菜单', 'menu.fileStorage'); - --- 按钮父菜单id -DECLARE @fileMenuId INT = SCOPE_IDENTITY(); - -INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_time) -VALUES ('查询', @fileMenuId, 1, '#', NULL, 0, 0, 'F', '0', '0', 'tool:file:query', '', ''); - -INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_time) -VALUES ('新增', @fileMenuId, 2, '#', NULL, 0, 0, 'F', '0', '0', 'tool:file:add', '', ''); - -INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_time) -VALUES ('删除', @fileMenuId, 3, '#', NULL, 0, 0, 'F', '0', '0', 'tool:file:delete', '', ''); - -INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_time) -VALUES ('修改', @fileMenuId, 4, '#', NULL, 0, 0, 'F', '0', '0', 'tool:file:update', '', ''); - -INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_time) -VALUES ('导出', @fileMenuId, 5, '#', NULL, 0, 0, 'F', '0', '0', 'tool:file:export', '', ''); -GO - --- 多语言配置菜单 -INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by, create_time, menuName_key) -VALUES ('多语言配置', 1, 999, 'CommonLang', 'system/commonLang/index', 0, 0, 'C', '0', '0', 'system:lang:list', 'language', 'system', GETDATE(), 'menu.systemLang'); - --- 按钮父菜单id -DECLARE @menuId INT = @@identity - -INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time) -VALUES ('查询', @menuId, 1, '#', NULL, 0, 0, 'F', '0', '0', 'system:lang:query', '', 'system', GETDATE()); - -INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time) -VALUES ('新增', @menuId, 2, '#', NULL, 0, 0, 'F', '0', '0', 'system:lang:add', '', 'system', GETDATE()); - -INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time) -VALUES ('删除', @menuId, 3, '#', NULL, 0, 0, 'F', '0', '0', 'system:lang:delete', '', 'system', GETDATE()); - -INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time) -VALUES ('修改', @menuId, 4, '#', NULL, 0, 0, 'F', '0', '0', 'system:lang:edit', '', 'system', GETDATE()); - -INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time) -VALUES ('导出', @menuId, 5, '#', NULL, 0, 0, 'F', '0', '0', 'system:lang:export', '', 'system', GETDATE()); -GO - --- 文章目录菜单 -INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by, create_time) -VALUES ('文章目录', 118, 999, 'ArticleCategory', 'system/article/articleCategory', 0, 0, 'C', '0', '0', 'articlecategory:list', 'tree-table', 'system', GETDATE()); --- 按钮父菜单id -DECLARE @cmenuId int = @@identity -INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time) -VALUES ('查询', @cmenuId, 1, '#', NULL, 0, 0, 'F', '0', '0', 'articlecategory:query', '', 'system', GETDATE()); - -INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time) -VALUES ('新增', @cmenuId, 2, '#', NULL, 0, 0, 'F', '0', '0', 'articlecategory:add', '', 'system', GETDATE()); - -INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time) -VALUES ('删除', @cmenuId, 3, '#', NULL, 0, 0, 'F', '0', '0', 'articlecategory:delete', '', 'system', GETDATE()); - -INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time) -VALUES ('修改', @cmenuId, 4, '#', NULL, 0, 0, 'F', '0', '0', 'articlecategory:edit', '', 'system', GETDATE()); - -INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time) -VALUES ('导出', @cmenuId, 5, '#', NULL, 0, 0, 'F', '0', '0', 'articlecategory:export', '', 'system', GETDATE()); -GO - --- ---------------------------- --- Records of sys_post --- ---------------------------- -INSERT INTO sys_post VALUES ('CEO', '董事长', 1, '0', '', GETDATE(), '', NULL, ''); -INSERT INTO sys_post VALUES ('SE', '项目经理', 2, '0', '', GETDATE(), '', NULL, ''); -INSERT INTO sys_post VALUES ('HR', '人力资源', 3, '0', '', GETDATE(), '', NULL, ''); -INSERT INTO sys_post VALUES ('USER', '普通员工', 4, '0', '', GETDATE(), '', NULL, ''); -INSERT INTO sys_post VALUES ('PM', '人事经理', 0, '0', NULL, GETDATE(), '', NULL, NULL); -INSERT INTO sys_post VALUES ('GM', '总经理', 0, '0', NULL, GETDATE(), '', NULL, NULL); -INSERT INTO sys_post VALUES ('COO', '首席运营官', 0, '0', NULL, GETDATE(), '', NULL, NULL); -INSERT INTO sys_post VALUES ('CFO', '首席财务官', 0, '0', NULL, GETDATE(), '', NULL, NULL); -INSERT INTO sys_post VALUES ( 'CTO', '首席技术官', 0, '0', NULL, GETDATE(), '', NULL, NULL); -INSERT INTO sys_post VALUES ( 'HRD', '人力资源总监', 0, '0', NULL, GETDATE(), '', NULL, NULL); -INSERT INTO sys_post VALUES ( 'VP', '副总裁', 0, '0', NULL, GETDATE(), '', NULL, NULL); -INSERT INTO sys_post VALUES ( 'OD', '运营总监', 0, '0', NULL, GETDATE(), '', NULL, NULL); -INSERT INTO sys_post VALUES ( 'MD', '市场总监', 0, '0', NULL, GETDATE(), '', NULL, NULL); - -GO --- ---------------------------- --- Records of sys_user --- ---------------------------- -INSERT INTO sys_user VALUES (0, 'admin', '管理员', '0', '', '', '0', '', 'e10adc3949ba59abbe56e057f20f883e', '0', '0', '', NULL, '', NULL, '', NULL, '管理员', '', ''); -INSERT INTO sys_user VALUES (0, 'user', '普通用户', '0', '', '', '0', '', 'e10adc3949ba59abbe56e057f20f883e', '0', '0', '', NULL, '', NULL, '', NULL, '普通用户', '', ''); - -GO --- ---------------------------- --- Records of sys_user_post --- ---------------------------- -INSERT INTO sys_user_post VALUES (1, 1); -GO - --- ---------------------------- --- Records of sys_role --- ---------------------------- -INSERT INTO sys_role VALUES ('超级管理员', 'admin', 1, 1, 1, 0, 0, 0, 'admin', GETDATE(), '', NULL, '超级管理员'); -INSERT INTO sys_role VALUES ('普通角色', 'common', 2, 5, 1, 0, 0, 0, 'admin', GETDATE(), '', NULL, '普通角色'); - -GO --- ---------------------------- --- Records of sys_user_role --- ---------------------------- -INSERT INTO sys_user_role VALUES (1, 1); -INSERT INTO sys_user_role VALUES (2, 2); - -GO --- ---------------------------- --- Records of sys_role_menu --- ---------------------------- -INSERT INTO [dbo].[sys_role_menu]([role_id], [menu_id], [create_by], [create_time]) VALUES (2, 1, 'admin', '2021-12-20 22:03:36.130'); -INSERT INTO [dbo].[sys_role_menu]([role_id], [menu_id], [create_by], [create_time]) VALUES (2, 3, 'admin', '2021-12-20 22:03:36.130'); -INSERT INTO [dbo].[sys_role_menu]([role_id], [menu_id], [create_by], [create_time]) VALUES (2, 5, 'admin', '2021-12-20 22:03:36.130'); -INSERT INTO [dbo].[sys_role_menu]([role_id], [menu_id], [create_by], [create_time]) VALUES (2, 6, 'admin', '2021-12-20 22:03:36.130'); -INSERT INTO [dbo].[sys_role_menu]([role_id], [menu_id], [create_by], [create_time]) VALUES (2, 100, 'admin', '2021-12-20 22:03:36.130'); -INSERT INTO [dbo].[sys_role_menu]([role_id], [menu_id], [create_by], [create_time]) VALUES (2, 101, 'admin', '2021-12-20 22:03:36.130'); -INSERT INTO [dbo].[sys_role_menu]([role_id], [menu_id], [create_by], [create_time]) VALUES (2, 102, 'admin', '2021-12-20 22:03:36.130'); -INSERT INTO [dbo].[sys_role_menu]([role_id], [menu_id], [create_by], [create_time]) VALUES (2, 103, 'admin', '2021-12-20 22:03:36.130'); -INSERT INTO [dbo].[sys_role_menu]([role_id], [menu_id], [create_by], [create_time]) VALUES (2, 104, 'admin', '2021-12-20 22:03:36.130'); -INSERT INTO [dbo].[sys_role_menu]([role_id], [menu_id], [create_by], [create_time]) VALUES (2, 106, 'admin', '2021-12-20 22:03:36.130'); -INSERT INTO [dbo].[sys_role_menu]([role_id], [menu_id], [create_by], [create_time]) VALUES (2, 108, 'admin', '2021-12-20 22:03:36.130'); -INSERT INTO [dbo].[sys_role_menu]([role_id], [menu_id], [create_by], [create_time]) VALUES (2, 109, 'admin', '2021-12-20 22:03:36.130'); -INSERT INTO [dbo].[sys_role_menu]([role_id], [menu_id], [create_by], [create_time]) VALUES (2, 114, 'admin', '2021-12-20 22:03:36.130'); -INSERT INTO [dbo].[sys_role_menu]([role_id], [menu_id], [create_by], [create_time]) VALUES (2, 500, 'admin', '2021-12-20 22:03:36.130'); -INSERT INTO [dbo].[sys_role_menu]([role_id], [menu_id], [create_by], [create_time]) VALUES (2, 501, 'admin', '2021-12-20 22:03:36.130'); -INSERT INTO [dbo].[sys_role_menu]([role_id], [menu_id], [create_by], [create_time]) VALUES (2, 1001, 'admin', '2021-12-20 22:03:36.130'); -INSERT INTO [dbo].[sys_role_menu]([role_id], [menu_id], [create_by], [create_time]) VALUES (2, 1008, 'admin', '2021-12-20 22:03:36.130'); -INSERT INTO [dbo].[sys_role_menu]([role_id], [menu_id], [create_by], [create_time]) VALUES (2, 1013, 'admin', '2021-12-20 22:03:36.130'); -INSERT INTO [dbo].[sys_role_menu]([role_id], [menu_id], [create_by], [create_time]) VALUES (2, 1018, 'admin', '2021-12-20 22:03:36.130'); -INSERT INTO [dbo].[sys_role_menu]([role_id], [menu_id], [create_by], [create_time]) VALUES (2, 1022, 'admin', '2021-12-20 22:03:36.130'); -INSERT INTO [dbo].[sys_role_menu]([role_id], [menu_id], [create_by], [create_time]) VALUES (2, 1031, 'admin', '2021-12-20 22:03:36.130'); -INSERT INTO [dbo].[sys_role_menu]([role_id], [menu_id], [create_by], [create_time]) VALUES (2, 1041, 'admin', '2021-12-20 22:03:36.130'); -INSERT INTO [dbo].[sys_role_menu]([role_id], [menu_id], [create_by], [create_time]) VALUES (2, 1044, 'admin', '2021-12-20 22:03:36.130'); -INSERT INTO [dbo].[sys_role_menu]([role_id], [menu_id], [create_by], [create_time]) VALUES (2, 1051, 'admin', '2021-12-20 22:03:36.130'); -GO - --- ---------------------------- --- Records of articleCategory --- ---------------------------- -INSERT INTO articleCategory VALUES ('C#', GETDATE(), 0); -INSERT INTO articleCategory VALUES ('java', GETDATE(), 0); -INSERT INTO articleCategory VALUES ('前端', GETDATE(), 0); -INSERT INTO articleCategory VALUES ('数据库', GETDATE(), 0); -INSERT INTO articleCategory VALUES ('其他', GETDATE(), 0); -INSERT INTO articleCategory VALUES ('c++', GETDATE(), 5); -INSERT INTO articleCategory VALUES ('vue', GETDATE(), 3); -INSERT INTO articleCategory VALUES ('sqlserver', GETDATE(), 4); -GO - -insert into sys_config values('主框架页-默认皮肤样式名称', 'sys.index.skinName', 'skin-blue', 'Y', 'admin', GETDATE(), '', null, '蓝色 skin-blue、绿色 skin-green、紫色 skin-purple、红色 skin-red、黄色 skin-yellow' ); -insert into sys_config values('用户管理-账号初始密码', 'sys.user.initPassword', '123456', 'Y', 'admin', GETDATE(), '', null, '初始化密码 123456' ); -insert into sys_config values('主框架页-侧边栏主题', 'sys.index.sideTheme', 'theme-dark', 'Y', 'admin', GETDATE(), '', null, '深色主题theme-dark,浅色主题theme-light' ); -insert into sys_config values('账号自助-验证码开关', 'sys.account.captchaOnOff', '1', 'Y', 'admin', GETDATE(), '', null, '开启验证码功能(off、关闭,1、动态验证码 2、动态gif泡泡 3、泡泡 4、静态验证码)'); - -INSERT INTO sys_config VALUES('开启注册功能', 'sys.account.register', 'true', 'Y', 'admin', GETDATE(), '', NULL, NULL); -INSERT INTO sys_config VALUES('文章预览地址', 'sys.article.preview.url', 'http://www.izhaorui.cn/article/details/', 'Y', 'admin', GETDATE(), '', NULL, '格式:http://www.izhaorui.cn/article/details/{aid},其中{aid}为文章的id'); - -GO - - -SELECT * FROM dbo.sys_user -GO -SELECT * FROM dbo.sys_user_role -GO -SELECT * FROM dbo.sys_user_post -GO -SELECT * FROM dbo.sys_role -GO -SELECT * FROM dbo.sys_role_menu -GO -SELECT * FROM dbo.sys_dept -GO -SELECT * FROM dbo.sys_dict_type -GO -SELECT * FROM dbo.sys_dict_data -GO -SELECT * FROM dbo.sys_menu -GO -SELECT * FROM dbo.articleCategory -GO -SELECT * FROM dbo.sys_config - -SELECT * FROM dbo.gen_table -SELECT * FROM dbo.gen_table_column -SELECT * FROM dbo.gen_demo -GO ---TRUNCATE TABLE gen_table_column ---TRUNCATE TABLE gen_table \ No newline at end of file diff --git a/document/sqlserver/必看.txt b/document/sqlserver/必看.txt index 9416b1e..94ac15c 100644 --- a/document/sqlserver/必看.txt +++ b/document/sqlserver/必看.txt @@ -1,3 +1,3 @@ 先导入 admin-sqlserver 再导入 admin-sqlserver-表字段说明导入 -初始化 admin-sqlserver-初始化数据 \ No newline at end of file +初始化 admin-sqlserver-初始化数据(已废弃,请查看文档https://www.izhaorui.cn/doc/quickstart.html) \ No newline at end of file