From 2c3b735d495c1f784ff894309f68f46dc8940fd6 Mon Sep 17 00:00:00 2001
From: xiongxiaoyang <1179705413@qq.com>
Date: Fri, 14 Apr 2023 14:56:11 +0800
Subject: [PATCH] =?UTF-8?q?feat:=20=E5=90=8E=E5=8F=B0=E7=BD=91=E7=AB=99?=
=?UTF-8?q?=E4=BF=A1=E6=81=AF=E7=AE=A1=E7=90=86?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 1 -
doc/sql/20230413.sql | 38 +++
doc/sql/novel_plus.sql | 43 ++-
.../com/java2nb/common/config/Constant.java | 7 +-
.../java2nb/common/config/ShiroConfig.java | 2 +-
.../java2nb/common/config/WebConfigurer.java | 13 +-
.../common/controller/FileController.java | 298 +++++++++---------
.../common/service/impl/FileServiceImpl.java | 112 +++----
.../controller/WebsiteInfoController.java | 50 +++
.../com/java2nb/novel/dao/WebsiteInfoDao.java | 32 ++
.../java2nb/novel/domain/WebsiteInfoDO.java | 208 ++++++++++++
.../novel/service/WebsiteInfoService.java | 30 ++
.../service/impl/WebsiteInfoServiceImpl.java | 55 ++++
.../service/impl/SysUserServiceImpl.java | 30 +-
.../src/main/resources/application-dev.yml | 2 +-
.../mybatis/novel/WebsiteInfoMapper.xml | 152 +++++++++
.../static/js/appjs/novel/websiteInfo/edit.js | 99 ++++++
.../resources/static/sql/novel/author/menu.js | 18 --
.../static/sql/novel/authorCode/menu.js | 18 --
.../resources/static/sql/novel/book/menu.js | 18 --
.../static/sql/novel/category/menu.js | 18 --
.../resources/static/sql/novel/news/menu.js | 18 --
.../resources/static/sql/novel/pay/menu.js | 18 --
.../resources/static/sql/novel/user/menu.js | 18 --
.../static/sql/novel/websiteInfo/menu.js | 36 +++
.../templates/novel/websiteInfo/detail.html | 93 ++++++
.../com/java2nb/novel/entity/WebsiteInfo.java | 162 ++++++++++
.../mapper/WebsiteInfoDynamicSqlSupport.java | 79 +++++
.../novel/mapper/WebsiteInfoMapper.java | 248 +++++++++++++++
.../main/resources/application-common-dev.yml | 2 +-
.../resources/mybatis/generatorConfig.xml | 19 +-
.../novel/core/config/WebMvcConfig.java | 18 --
.../novel/core/listener/StarterListener.java | 18 +-
.../src/main/resources/application-dev.yml | 4 +-
.../templates/book/book_content.html | 191 ++++++-----
.../main/resources/templates/common/top.html | 5 +-
templates/orange/html/book/book_content.html | 191 ++++++-----
37 files changed, 1821 insertions(+), 543 deletions(-)
create mode 100644 doc/sql/20230413.sql
create mode 100644 novel-admin/src/main/java/com/java2nb/novel/controller/WebsiteInfoController.java
create mode 100644 novel-admin/src/main/java/com/java2nb/novel/dao/WebsiteInfoDao.java
create mode 100644 novel-admin/src/main/java/com/java2nb/novel/domain/WebsiteInfoDO.java
create mode 100644 novel-admin/src/main/java/com/java2nb/novel/service/WebsiteInfoService.java
create mode 100644 novel-admin/src/main/java/com/java2nb/novel/service/impl/WebsiteInfoServiceImpl.java
create mode 100644 novel-admin/src/main/resources/mybatis/novel/WebsiteInfoMapper.xml
create mode 100644 novel-admin/src/main/resources/static/js/appjs/novel/websiteInfo/edit.js
create mode 100644 novel-admin/src/main/resources/static/sql/novel/websiteInfo/menu.js
create mode 100644 novel-admin/src/main/resources/templates/novel/websiteInfo/detail.html
create mode 100644 novel-common/src/main/java/com/java2nb/novel/entity/WebsiteInfo.java
create mode 100644 novel-common/src/main/java/com/java2nb/novel/mapper/WebsiteInfoDynamicSqlSupport.java
create mode 100644 novel-common/src/main/java/com/java2nb/novel/mapper/WebsiteInfoMapper.java
delete mode 100644 novel-front/src/main/java/com/java2nb/novel/core/config/WebMvcConfig.java
diff --git a/README.md b/README.md
index 876a9d0..e8db25b 100644
--- a/README.md
+++ b/README.md
@@ -49,7 +49,6 @@ novel-plus -- 父工程
| Redis | 缓存方案
| Aliyun OSS | 阿里云对象存储服务(图片存储方式之一,一行配置即可切换)
| FastDFS | 开源轻量级分布式文件系统(图片存储方式之一,一行配置即可切换)
-| Redisson | 实现分布式锁
| Lombok | 简化对象封装工具
| Docker | 应用容器引擎
| MySQL | 数据库服务
diff --git a/doc/sql/20230413.sql b/doc/sql/20230413.sql
new file mode 100644
index 0000000..2369528
--- /dev/null
+++ b/doc/sql/20230413.sql
@@ -0,0 +1,38 @@
+CREATE TABLE `website_info`
+(
+ id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+ name varchar(50) NOT NULL COMMENT '网站名',
+ domain varchar(50) NOT NULL COMMENT '网站域名',
+ keyword varchar(50) NOT NULL COMMENT 'SEO关键词',
+ description varchar(512) NOT NULL COMMENT '网站描述',
+ qq varchar(20) NOT NULL COMMENT '站长QQ',
+ logo varchar(200) NOT NULL COMMENT '网站logo图片(默认)',
+ logo_dark varchar(200) NOT NULL COMMENT '网站logo图片(深色)',
+ create_time datetime null comment '创建时间',
+ create_user_id bigint null comment '创建人ID',
+ update_time datetime null comment '更新时间',
+ update_user_id bigint null comment '更新人ID',
+ PRIMARY KEY (`id`)
+) ENGINE = InnoDB
+ DEFAULT CHARSET = utf8mb4 COMMENT ='网站信息表';
+
+INSERT INTO website_info (id, name, domain, keyword, description, qq, logo, logo_dark, create_time, create_user_id,
+ update_time, update_user_id)
+VALUES (1, '小说精品屋', 'www.xxyopen.com', '小说精品屋,小说,小说CMS,原创文学系统,开源小说系统,免费小说建站程序',
+ '小说精品屋是一个多端(PC、WAP)阅读、功能完善的原创文学CMS系统,由前台门户系统、作家后台管理系统、平台后台管理系统、爬虫管理系统等多个子系统构成,支持会员充值、订阅模式、新闻发布和实时统计报表等功能,新书自动入库,老书自动更新。',
+ '1179705413', 'https://youdoc.gitee.io/resource/images/logo/logo.png',
+ 'https://youdoc.gitee.io/resource/images/logo/logo_white.png', null, null, null, null);
+
+INSERT INTO novel_plus.sys_menu (menu_id, parent_id, name, url, perms, type, icon, order_num, gmt_create, gmt_modified)
+VALUES (300, 0, '网站管理', '', '', 0, 'fa fa-television', 6, null, null);
+
+INSERT
+INTO `sys_menu`(`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`)
+VALUES (301, 300, '网站信息', 'novel/websiteInfo', 'novel:websiteInfo:websiteInfo', '1', 'fa', '6');
+
+
+INSERT INTO sys_role_menu (role_id, menu_id)
+VALUES (1, 300);
+INSERT INTO sys_role_menu (role_id, menu_id)
+VALUES (1, 301);
+
diff --git a/doc/sql/novel_plus.sql b/doc/sql/novel_plus.sql
index a88b702..fe4e2d1 100644
--- a/doc/sql/novel_plus.sql
+++ b/doc/sql/novel_plus.sql
@@ -2829,8 +2829,41 @@ alter table news
alter table book_index
add column storage_type varchar(10) NOT NULL DEFAULT 'db' COMMENT '存储方式' after book_price;
-INSERT INTO `crawl_source` (`id`, `source_name`, `crawl_rule`, `source_status`, `create_time`, `update_time`)
-VALUES (6, '新笔趣阁',
- '{\n \"bookListUrl\": \"http://www.xbiquge.la/fenlei/{catId}_{page}.html\",\n \"catIdRule\": {\n \"catId1\": \"1\",\n \"catId2\": \"2\",\n \"catId3\": \"3\",\n \"catId4\": \"4\",\n \"catId5\": \"6\",\n \"catId6\": \"5\"\n },\n \"bookIdPatten\": \"\",\n \"pagePatten\": \"(\\\\d+)/\\\\d+\",\n \"totalPagePatten\": \"\\\\d+/(\\\\d+)\",\n \"bookDetailUrl\": \"http://www.xbiquge.la/{bookId}/\",\n \"bookNamePatten\": \"([^/]+)
\",\n \"authorNamePatten\": \"者:([^/]+)
\",\n \"picUrlPatten\": \"src=\\\"(http://www.xbiquge.la/files/article/image/\\\\d+/\\\\d+/\\\\d+s\\\\.jpg)\\\"\",\n \"bookStatusRule\": {},\n \"descStart\": \"\",\n \"contentEnd\": \"
\"\n}',
- 0, '2020-05-23 22:46:58', '2020-05-23 22:46:58');
+
+CREATE TABLE `website_info`
+(
+ id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+ name varchar(50) NOT NULL COMMENT '网站名',
+ domain varchar(50) NOT NULL COMMENT '网站域名',
+ keyword varchar(50) NOT NULL COMMENT 'SEO关键词',
+ description varchar(512) NOT NULL COMMENT '网站描述',
+ qq varchar(20) NOT NULL COMMENT '站长QQ',
+ logo varchar(200) NOT NULL COMMENT '网站logo图片(默认)',
+ logo_dark varchar(200) NOT NULL COMMENT '网站logo图片(深色)',
+ create_time datetime null comment '创建时间',
+ create_user_id bigint null comment '创建人ID',
+ update_time datetime null comment '更新时间',
+ update_user_id bigint null comment '更新人ID',
+ PRIMARY KEY (`id`)
+) ENGINE = InnoDB
+ DEFAULT CHARSET = utf8mb4 COMMENT ='网站信息表';
+
+INSERT INTO website_info (id, name, domain, keyword, description, qq, logo, logo_dark, create_time, create_user_id,
+ update_time, update_user_id)
+VALUES (1, '小说精品屋', 'www.xxyopen.com', '小说精品屋,小说,小说CMS,原创文学系统,开源小说系统,免费小说建站程序',
+ '小说精品屋是一个多端(PC、WAP)阅读、功能完善的原创文学CMS系统,由前台门户系统、作家后台管理系统、平台后台管理系统、爬虫管理系统等多个子系统构成,支持会员充值、订阅模式、新闻发布和实时统计报表等功能,新书自动入库,老书自动更新。',
+ '1179705413', 'https://youdoc.gitee.io/resource/images/logo/logo.png',
+ 'https://youdoc.gitee.io/resource/images/logo/logo_white.png', null, null, null, null);
+
+INSERT INTO novel_plus.sys_menu (menu_id, parent_id, name, url, perms, type, icon, order_num, gmt_create, gmt_modified)
+VALUES (300, 0, '网站管理', '', '', 0, 'fa fa-television', 6, null, null);
+
+INSERT
+INTO `sys_menu`(`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`)
+VALUES (301, 300, '网站信息', 'novel/websiteInfo', 'novel:websiteInfo:websiteInfo', '1', 'fa', '6');
+
+
+INSERT INTO sys_role_menu (role_id, menu_id)
+VALUES (1, 300);
+INSERT INTO sys_role_menu (role_id, menu_id)
+VALUES (1, 301);
\ No newline at end of file
diff --git a/novel-admin/src/main/java/com/java2nb/common/config/Constant.java b/novel-admin/src/main/java/com/java2nb/common/config/Constant.java
index fe8a3bc..91b8a57 100644
--- a/novel-admin/src/main/java/com/java2nb/common/config/Constant.java
+++ b/novel-admin/src/main/java/com/java2nb/common/config/Constant.java
@@ -1,6 +1,7 @@
package com.java2nb.common.config;
public class Constant {
+
//演示系统账户
public static String DEMO_ACCOUNT = "test";
//自动去除表前缀
@@ -16,9 +17,11 @@ public class Constant {
//部门根节点id
public static Long DEPT_ROOT_ID = 0l;
//缓存方式
- public static String CACHE_TYPE_REDIS ="redis";
+ public static String CACHE_TYPE_REDIS = "redis";
public static String LOG_ERROR = "error";
-
+ public static final String UPLOAD_FILES_PREFIX = "/files/";
+
+
}
diff --git a/novel-admin/src/main/java/com/java2nb/common/config/ShiroConfig.java b/novel-admin/src/main/java/com/java2nb/common/config/ShiroConfig.java
index 39cf48f..28dfe60 100644
--- a/novel-admin/src/main/java/com/java2nb/common/config/ShiroConfig.java
+++ b/novel-admin/src/main/java/com/java2nb/common/config/ShiroConfig.java
@@ -71,7 +71,7 @@ public class ShiroConfig {
filterChainDefinitionMap.put("/docs/**", "anon");
filterChainDefinitionMap.put("/layuimini/**", "anon");
filterChainDefinitionMap.put("/upload/**", "anon");
- filterChainDefinitionMap.put("/files/**", "anon");
+ filterChainDefinitionMap.put(Constant.UPLOAD_FILES_PREFIX + "**", "anon");
filterChainDefinitionMap.put("/logout", "logout");
filterChainDefinitionMap.put("/blog", "anon");
filterChainDefinitionMap.put("/blog/open/**", "anon");
diff --git a/novel-admin/src/main/java/com/java2nb/common/config/WebConfigurer.java b/novel-admin/src/main/java/com/java2nb/common/config/WebConfigurer.java
index 6e65e53..b8b173f 100644
--- a/novel-admin/src/main/java/com/java2nb/common/config/WebConfigurer.java
+++ b/novel-admin/src/main/java/com/java2nb/common/config/WebConfigurer.java
@@ -7,11 +7,14 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter
@Component
class WebConfigurer extends WebMvcConfigurerAdapter {
- @Autowired
+
+ @Autowired
JnConfig jnConfig;
- @Override
- public void addResourceHandlers(ResourceHandlerRegistry registry) {
- registry.addResourceHandler("/files/**").addResourceLocations("file:///"+ jnConfig.getUploadPath());
- }
+
+ @Override
+ public void addResourceHandlers(ResourceHandlerRegistry registry) {
+ registry.addResourceHandler(Constant.UPLOAD_FILES_PREFIX + "**")
+ .addResourceLocations("file:///" + jnConfig.getUploadPath());
+ }
}
\ No newline at end of file
diff --git a/novel-admin/src/main/java/com/java2nb/common/controller/FileController.java b/novel-admin/src/main/java/com/java2nb/common/controller/FileController.java
index 363dfe7..d62a160 100644
--- a/novel-admin/src/main/java/com/java2nb/common/controller/FileController.java
+++ b/novel-admin/src/main/java/com/java2nb/common/controller/FileController.java
@@ -1,12 +1,10 @@
package com.java2nb.common.controller;
+import com.java2nb.common.config.Constant;
import com.java2nb.common.config.JnConfig;
import com.java2nb.common.domain.FileDO;
import com.java2nb.common.service.FileService;
import com.java2nb.common.utils.*;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
@@ -14,7 +12,11 @@ import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
-import java.io.*;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.Date;
import java.util.HashMap;
@@ -23,7 +25,7 @@ import java.util.Map;
/**
* 文件上传
- *
+ *
* @author xiongxy
* @email 1179705413@qq.com
* @date 2019-09-19 16:02:20
@@ -32,165 +34,167 @@ import java.util.Map;
@RequestMapping("/common/sysFile")
public class FileController extends BaseController {
- @Autowired
- private FileService sysFileService;
+ @Autowired
+ private FileService sysFileService;
- @Autowired
- private JnConfig jnConfig;
+ @Autowired
+ private JnConfig jnConfig;
- @GetMapping()
- @RequiresPermissions("common:sysFile:sysFile")
- String sysFile(Model model) {
- Map params = new HashMap<>(16);
- return "common/file/file";
- }
+ @GetMapping()
+ @RequiresPermissions("common:sysFile:sysFile")
+ String sysFile(Model model) {
+ Map params = new HashMap<>(16);
+ return "common/file/file";
+ }
- @ResponseBody
- @GetMapping("/list")
- @RequiresPermissions("common:sysFile:sysFile")
- public PageBean list(@RequestParam Map params) {
- // 查询列表数据
- Query query = new Query(params);
- List sysFileList = sysFileService.list(query);
- int total = sysFileService.count(query);
- PageBean pageBean = new PageBean(sysFileList, total);
- return pageBean;
- }
+ @ResponseBody
+ @GetMapping("/list")
+ @RequiresPermissions("common:sysFile:sysFile")
+ public PageBean list(@RequestParam Map params) {
+ // 查询列表数据
+ Query query = new Query(params);
+ List sysFileList = sysFileService.list(query);
+ int total = sysFileService.count(query);
+ PageBean pageBean = new PageBean(sysFileList, total);
+ return pageBean;
+ }
- @GetMapping("/add")
- // @RequiresPermissions("common:bComments")
- String add() {
- return "common/sysFile/add";
- }
+ @GetMapping("/add")
+ // @RequiresPermissions("common:bComments")
+ String add() {
+ return "common/sysFile/add";
+ }
- @GetMapping("/edit")
- // @RequiresPermissions("common:bComments")
- String edit(Long id, Model model) {
- FileDO sysFile = sysFileService.get(id);
- model.addAttribute("sysFile", sysFile);
- return "common/sysFile/edit";
- }
+ @GetMapping("/edit")
+ // @RequiresPermissions("common:bComments")
+ String edit(Long id, Model model) {
+ FileDO sysFile = sysFileService.get(id);
+ model.addAttribute("sysFile", sysFile);
+ return "common/sysFile/edit";
+ }
- /**
- * 信息
- */
- @RequestMapping("/info/{id}")
- @RequiresPermissions("common:info")
- public R info(@PathVariable("id") Long id) {
- FileDO sysFile = sysFileService.get(id);
- return R.ok().put("sysFile", sysFile);
- }
+ /**
+ * 信息
+ */
+ @RequestMapping("/info/{id}")
+ @RequiresPermissions("common:info")
+ public R info(@PathVariable("id") Long id) {
+ FileDO sysFile = sysFileService.get(id);
+ return R.ok().put("sysFile", sysFile);
+ }
- /**
- * 保存
- */
- @ResponseBody
- @PostMapping("/save")
- @RequiresPermissions("common:save")
- public R save(FileDO sysFile) {
- if (sysFileService.save(sysFile) > 0) {
- return R.ok();
- }
- return R.error();
- }
+ /**
+ * 保存
+ */
+ @ResponseBody
+ @PostMapping("/save")
+ @RequiresPermissions("common:save")
+ public R save(FileDO sysFile) {
+ if (sysFileService.save(sysFile) > 0) {
+ return R.ok();
+ }
+ return R.error();
+ }
- /**
- * 修改
- */
- @RequestMapping("/update")
- @RequiresPermissions("common:update")
- public R update(@RequestBody FileDO sysFile) {
- sysFileService.update(sysFile);
+ /**
+ * 修改
+ */
+ @RequestMapping("/update")
+ @RequiresPermissions("common:update")
+ public R update(@RequestBody FileDO sysFile) {
+ sysFileService.update(sysFile);
- return R.ok();
- }
+ return R.ok();
+ }
- /**
- * 删除
- */
- @PostMapping("/remove")
- @ResponseBody
- // @RequiresPermissions("common:remove")
- public R remove(Long id, HttpServletRequest request) {
- if ("test".equals(getUsername())) {
- return R.error(1, "演示系统不允许修改,完整体验请部署程序");
- }
- String fileName = jnConfig.getUploadPath() + sysFileService.get(id).getUrl().replace("/files/", "");
- if (sysFileService.remove(id) > 0) {
- boolean b = FileUtil.deleteFile(fileName);
- if (!b) {
- return R.error("数据库记录删除成功,文件删除失败");
- }
- return R.ok();
- } else {
- return R.error();
- }
- }
+ /**
+ * 删除
+ */
+ @PostMapping("/remove")
+ @ResponseBody
+ // @RequiresPermissions("common:remove")
+ public R remove(Long id, HttpServletRequest request) {
+ if ("test".equals(getUsername())) {
+ return R.error(1, "演示系统不允许修改,完整体验请部署程序");
+ }
+ String fileName =
+ jnConfig.getUploadPath() + sysFileService.get(id).getUrl().replace(Constant.UPLOAD_FILES_PREFIX, "");
+ if (sysFileService.remove(id) > 0) {
+ boolean b = FileUtil.deleteFile(fileName);
+ if (!b) {
+ return R.error("数据库记录删除成功,文件删除失败");
+ }
+ return R.ok();
+ } else {
+ return R.error();
+ }
+ }
- /**
- * 删除
- */
- @PostMapping("/batchRemove")
- @ResponseBody
- @RequiresPermissions("common:remove")
- public R remove(@RequestParam("ids[]") Long[] ids) {
- if ("test".equals(getUsername())) {
- return R.error(1, "演示系统不允许修改,完整体验请部署程序");
- }
- sysFileService.batchRemove(ids);
- return R.ok();
- }
+ /**
+ * 删除
+ */
+ @PostMapping("/batchRemove")
+ @ResponseBody
+ @RequiresPermissions("common:remove")
+ public R remove(@RequestParam("ids[]") Long[] ids) {
+ if ("test".equals(getUsername())) {
+ return R.error(1, "演示系统不允许修改,完整体验请部署程序");
+ }
+ sysFileService.batchRemove(ids);
+ return R.ok();
+ }
- @ResponseBody
- @PostMapping("/upload")
- R upload(@RequestParam("file") MultipartFile file, HttpServletRequest request) {
- if ("test".equals(getUsername())) {
- return R.error(1, "演示系统不允许修改,完整体验请部署程序");
- }
- Date date = new Date();
- String year = DateUtils.format(date,DateUtils.YEAR_PATTERN);
- String month = DateUtils.format(date,DateUtils.MONTH_PATTERN);
- String day = DateUtils.format(date,DateUtils.DAY_PATTERN);
+ @ResponseBody
+ @PostMapping("/upload")
+ R upload(@RequestParam("file") MultipartFile file, HttpServletRequest request) {
+ if ("test".equals(getUsername())) {
+ return R.error(1, "演示系统不允许修改,完整体验请部署程序");
+ }
+ Date date = new Date();
+ String year = DateUtils.format(date, DateUtils.YEAR_PATTERN);
+ String month = DateUtils.format(date, DateUtils.MONTH_PATTERN);
+ String day = DateUtils.format(date, DateUtils.DAY_PATTERN);
- String fileName = file.getOriginalFilename();
- String fileDir = year+"/"+month+"/"+day + "/";
- fileName = FileUtil.renameToUUID(fileName);
- FileDO sysFile = new FileDO(FileType.fileType(fileName), "/files/" + fileDir + fileName, date);
- try {
- FileUtil.uploadFile(file.getBytes(), jnConfig.getUploadPath()+fileDir, fileName);
- } catch (Exception e) {
- return R.error();
- }
+ String fileName = file.getOriginalFilename();
+ String fileDir = year + "/" + month + "/" + day + "/";
+ fileName = FileUtil.renameToUUID(fileName);
+ FileDO sysFile = new FileDO(FileType.fileType(fileName), Constant.UPLOAD_FILES_PREFIX + fileDir + fileName,
+ date);
+ try {
+ FileUtil.uploadFile(file.getBytes(), jnConfig.getUploadPath() + fileDir, fileName);
+ } catch (Exception e) {
+ return R.error();
+ }
- if (sysFileService.save(sysFile) > 0) {
- return R.ok().put("fileName",sysFile.getUrl());
- }
- return R.error();
- }
+ if (sysFileService.save(sysFile) > 0) {
+ return R.ok().put("fileName", sysFile.getUrl());
+ }
+ return R.error();
+ }
- /**
- * 文件下载
- */
- @RequestMapping(value = "/download")
- public void fileDownload(String filePath,String fileName, HttpServletResponse resp) throws Exception {
- String realFilePath = jnConfig.getUploadPath() + filePath;
- InputStream in = new FileInputStream(realFilePath);
- //设置响应头,对文件进行url编码
- fileName = URLEncoder.encode(fileName, "UTF-8");
- resp.setHeader("Content-Disposition", "attachment;filename=" + fileName);
+ /**
+ * 文件下载
+ */
+ @RequestMapping(value = "/download")
+ public void fileDownload(String filePath, String fileName, HttpServletResponse resp) throws Exception {
+ String realFilePath = jnConfig.getUploadPath() + filePath;
+ InputStream in = new FileInputStream(realFilePath);
+ //设置响应头,对文件进行url编码
+ fileName = URLEncoder.encode(fileName, "UTF-8");
+ resp.setHeader("Content-Disposition", "attachment;filename=" + fileName);
- resp.setContentLength(in.available());
+ resp.setContentLength(in.available());
- OutputStream out = resp.getOutputStream();
- byte[] b = new byte[1024];
- int len = 0;
- while ((len = in.read(b)) != -1) {
- out.write(b, 0, len);
- }
- out.flush();
- out.close();
- in.close();
- }
+ OutputStream out = resp.getOutputStream();
+ byte[] b = new byte[1024];
+ int len = 0;
+ while ((len = in.read(b)) != -1) {
+ out.write(b, 0, len);
+ }
+ out.flush();
+ out.close();
+ in.close();
+ }
}
diff --git a/novel-admin/src/main/java/com/java2nb/common/service/impl/FileServiceImpl.java b/novel-admin/src/main/java/com/java2nb/common/service/impl/FileServiceImpl.java
index e746869..eb561b7 100644
--- a/novel-admin/src/main/java/com/java2nb/common/service/impl/FileServiceImpl.java
+++ b/novel-admin/src/main/java/com/java2nb/common/service/impl/FileServiceImpl.java
@@ -1,72 +1,74 @@
package com.java2nb.common.service.impl;
+import com.java2nb.common.config.Constant;
import com.java2nb.common.config.JnConfig;
+import com.java2nb.common.dao.FileDao;
+import com.java2nb.common.domain.FileDO;
+import com.java2nb.common.service.FileService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
import java.io.File;
import java.util.List;
import java.util.Map;
-import com.java2nb.common.dao.FileDao;
-import com.java2nb.common.domain.FileDO;
-import com.java2nb.common.service.FileService;
-import org.springframework.util.StringUtils;
-
@Service
public class FileServiceImpl implements FileService {
- @Autowired
- private FileDao sysFileMapper;
- @Autowired
- private JnConfig jnConfig;
- @Override
- public FileDO get(Long id){
- return sysFileMapper.get(id);
- }
-
- @Override
- public List list(Map map){
- return sysFileMapper.list(map);
- }
-
- @Override
- public int count(Map map){
- return sysFileMapper.count(map);
- }
-
- @Override
- public int save(FileDO sysFile){
- return sysFileMapper.save(sysFile);
- }
-
- @Override
- public int update(FileDO sysFile){
- return sysFileMapper.update(sysFile);
- }
-
- @Override
- public int remove(Long id){
- return sysFileMapper.remove(id);
- }
-
- @Override
- public int batchRemove(Long[] ids){
- return sysFileMapper.batchRemove(ids);
- }
+ @Autowired
+ private FileDao sysFileMapper;
+
+ @Autowired
+ private JnConfig jnConfig;
+
+ @Override
+ public FileDO get(Long id) {
+ return sysFileMapper.get(id);
+ }
+
+ @Override
+ public List list(Map map) {
+ return sysFileMapper.list(map);
+ }
+
+ @Override
+ public int count(Map map) {
+ return sysFileMapper.count(map);
+ }
+
+ @Override
+ public int save(FileDO sysFile) {
+ return sysFileMapper.save(sysFile);
+ }
+
+ @Override
+ public int update(FileDO sysFile) {
+ return sysFileMapper.update(sysFile);
+ }
+
+ @Override
+ public int remove(Long id) {
+ return sysFileMapper.remove(id);
+ }
+
+ @Override
+ public int batchRemove(Long[] ids) {
+ return sysFileMapper.batchRemove(ids);
+ }
@Override
public Boolean isExist(String url) {
- Boolean isExist = false;
- if (!StringUtils.isEmpty(url)) {
- String filePath = url.replace("/files/", "");
- filePath = jnConfig.getUploadPath() + filePath;
- File file = new File(filePath);
- if (file.exists()) {
- isExist = true;
- }
- }
- return isExist;
- }
- }
+ Boolean isExist = false;
+ if (!StringUtils.isEmpty(url)) {
+ String filePath = url.replace(Constant.UPLOAD_FILES_PREFIX, "");
+ filePath = jnConfig.getUploadPath() + filePath;
+ File file = new File(filePath);
+ if (file.exists()) {
+ isExist = true;
+ }
+ }
+ return isExist;
+ }
+}
diff --git a/novel-admin/src/main/java/com/java2nb/novel/controller/WebsiteInfoController.java b/novel-admin/src/main/java/com/java2nb/novel/controller/WebsiteInfoController.java
new file mode 100644
index 0000000..89b0507
--- /dev/null
+++ b/novel-admin/src/main/java/com/java2nb/novel/controller/WebsiteInfoController.java
@@ -0,0 +1,50 @@
+package com.java2nb.novel.controller;
+
+import com.java2nb.common.utils.R;
+import com.java2nb.novel.domain.WebsiteInfoDO;
+import com.java2nb.novel.service.WebsiteInfoService;
+import io.swagger.annotations.ApiOperation;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+/**
+ * 网站信息表
+ *
+ * @author xiongxy
+ * @email 1179705413@qq.com
+ * @date 2023-04-14 11:05:43
+ */
+
+@Controller
+@RequestMapping("/novel/websiteInfo")
+public class WebsiteInfoController {
+
+ @Autowired
+ private WebsiteInfoService websiteInfoService;
+
+ @GetMapping()
+ @RequiresPermissions("novel:websiteInfo:detail")
+ String detail(Model model) {
+ WebsiteInfoDO websiteInfo = websiteInfoService.get(1L);
+ model.addAttribute("websiteInfo", websiteInfo);
+ return "novel/websiteInfo/detail";
+ }
+
+ /**
+ * 修改
+ */
+ @ApiOperation(value = "修改网站信息表", notes = "修改网站信息表")
+ @ResponseBody
+ @RequestMapping("/update")
+ @RequiresPermissions("novel:websiteInfo:edit")
+ public R update(WebsiteInfoDO websiteInfo) {
+ websiteInfoService.update(websiteInfo);
+ return R.ok();
+ }
+
+}
diff --git a/novel-admin/src/main/java/com/java2nb/novel/dao/WebsiteInfoDao.java b/novel-admin/src/main/java/com/java2nb/novel/dao/WebsiteInfoDao.java
new file mode 100644
index 0000000..f84ee58
--- /dev/null
+++ b/novel-admin/src/main/java/com/java2nb/novel/dao/WebsiteInfoDao.java
@@ -0,0 +1,32 @@
+package com.java2nb.novel.dao;
+
+import com.java2nb.novel.domain.WebsiteInfoDO;
+
+import java.util.List;
+import java.util.Map;
+
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 网站信息表
+ * @author xiongxy
+ * @email 1179705413@qq.com
+ * @date 2023-04-14 11:05:43
+ */
+@Mapper
+public interface WebsiteInfoDao {
+
+ WebsiteInfoDO get(Long id);
+
+ List list(Map map);
+
+ int count(Map map);
+
+ int save(WebsiteInfoDO websiteInfo);
+
+ int update(WebsiteInfoDO websiteInfo);
+
+ int remove(Long id);
+
+ int batchRemove(Long[] ids);
+}
diff --git a/novel-admin/src/main/java/com/java2nb/novel/domain/WebsiteInfoDO.java b/novel-admin/src/main/java/com/java2nb/novel/domain/WebsiteInfoDO.java
new file mode 100644
index 0000000..e4ff0f3
--- /dev/null
+++ b/novel-admin/src/main/java/com/java2nb/novel/domain/WebsiteInfoDO.java
@@ -0,0 +1,208 @@
+package com.java2nb.novel.domain;
+
+import java.io.Serializable;
+
+
+import java.math.BigDecimal;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.java2nb.common.jsonserializer.LongToStringSerializer;
+
+
+import org.springframework.format.annotation.DateTimeFormat;
+import java.util.Date;
+
+
+
+/**
+ * 网站信息表
+ *
+ * @author xiongxy
+ * @email 1179705413@qq.com
+ * @date 2023-04-14 11:05:43
+ */
+public class WebsiteInfoDO implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+
+ //主键
+ //java中的long能表示的范围比js中number大,也就意味着部分数值在js中存不下(变成不准确的值)
+ //所以通过序列化成字符串来解决
+ @JsonSerialize(using = LongToStringSerializer.class)
+ private Long id;
+ //网站名
+ private String name;
+ //网站域名
+ private String domain;
+ //SEO关键词
+ private String keyword;
+ //网站描述
+ private String description;
+ //站长QQ
+ private String qq;
+ //网站logo图片(默认)
+ private String logo;
+ //网站logo图片(深色)
+ private String logoDark;
+ //创建时间
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date createTime;
+ //创建人ID
+ //java中的long能表示的范围比js中number大,也就意味着部分数值在js中存不下(变成不准确的值)
+ //所以通过序列化成字符串来解决
+ @JsonSerialize(using = LongToStringSerializer.class)
+ private Long createUserId;
+ //更新时间
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date updateTime;
+ //更新人ID
+ //java中的long能表示的范围比js中number大,也就意味着部分数值在js中存不下(变成不准确的值)
+ //所以通过序列化成字符串来解决
+ @JsonSerialize(using = LongToStringSerializer.class)
+ private Long updateUserId;
+
+ /**
+ * 设置:主键
+ */
+ public void setId(Long id) {
+ this.id = id;
+ }
+ /**
+ * 获取:主键
+ */
+ public Long getId() {
+ return id;
+ }
+ /**
+ * 设置:网站名
+ */
+ public void setName(String name) {
+ this.name = name;
+ }
+ /**
+ * 获取:网站名
+ */
+ public String getName() {
+ return name;
+ }
+ /**
+ * 设置:网站域名
+ */
+ public void setDomain(String domain) {
+ this.domain = domain;
+ }
+ /**
+ * 获取:网站域名
+ */
+ public String getDomain() {
+ return domain;
+ }
+ /**
+ * 设置:SEO关键词
+ */
+ public void setKeyword(String keyword) {
+ this.keyword = keyword;
+ }
+ /**
+ * 获取:SEO关键词
+ */
+ public String getKeyword() {
+ return keyword;
+ }
+ /**
+ * 设置:网站描述
+ */
+ public void setDescription(String description) {
+ this.description = description;
+ }
+ /**
+ * 获取:网站描述
+ */
+ public String getDescription() {
+ return description;
+ }
+ /**
+ * 设置:站长QQ
+ */
+ public void setQq(String qq) {
+ this.qq = qq;
+ }
+ /**
+ * 获取:站长QQ
+ */
+ public String getQq() {
+ return qq;
+ }
+ /**
+ * 设置:网站logo图片(默认)
+ */
+ public void setLogo(String logo) {
+ this.logo = logo;
+ }
+ /**
+ * 获取:网站logo图片(默认)
+ */
+ public String getLogo() {
+ return logo;
+ }
+ /**
+ * 设置:网站logo图片(深色)
+ */
+ public void setLogoDark(String logoDark) {
+ this.logoDark = logoDark;
+ }
+ /**
+ * 获取:网站logo图片(深色)
+ */
+ public String getLogoDark() {
+ return logoDark;
+ }
+ /**
+ * 设置:创建时间
+ */
+ public void setCreateTime(Date createTime) {
+ this.createTime = createTime;
+ }
+ /**
+ * 获取:创建时间
+ */
+ public Date getCreateTime() {
+ return createTime;
+ }
+ /**
+ * 设置:创建人ID
+ */
+ public void setCreateUserId(Long createUserId) {
+ this.createUserId = createUserId;
+ }
+ /**
+ * 获取:创建人ID
+ */
+ public Long getCreateUserId() {
+ return createUserId;
+ }
+ /**
+ * 设置:更新时间
+ */
+ public void setUpdateTime(Date updateTime) {
+ this.updateTime = updateTime;
+ }
+ /**
+ * 获取:更新时间
+ */
+ public Date getUpdateTime() {
+ return updateTime;
+ }
+ /**
+ * 设置:更新人ID
+ */
+ public void setUpdateUserId(Long updateUserId) {
+ this.updateUserId = updateUserId;
+ }
+ /**
+ * 获取:更新人ID
+ */
+ public Long getUpdateUserId() {
+ return updateUserId;
+ }
+}
diff --git a/novel-admin/src/main/java/com/java2nb/novel/service/WebsiteInfoService.java b/novel-admin/src/main/java/com/java2nb/novel/service/WebsiteInfoService.java
new file mode 100644
index 0000000..8bfc7c3
--- /dev/null
+++ b/novel-admin/src/main/java/com/java2nb/novel/service/WebsiteInfoService.java
@@ -0,0 +1,30 @@
+package com.java2nb.novel.service;
+
+import com.java2nb.novel.domain.WebsiteInfoDO;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 网站信息表
+ *
+ * @author xiongxy
+ * @email 1179705413@qq.com
+ * @date 2023-04-14 11:05:43
+ */
+public interface WebsiteInfoService {
+
+ WebsiteInfoDO get(Long id);
+
+ List list(Map map);
+
+ int count(Map map);
+
+ int save(WebsiteInfoDO websiteInfo);
+
+ int update(WebsiteInfoDO websiteInfo);
+
+ int remove(Long id);
+
+ int batchRemove(Long[] ids);
+}
diff --git a/novel-admin/src/main/java/com/java2nb/novel/service/impl/WebsiteInfoServiceImpl.java b/novel-admin/src/main/java/com/java2nb/novel/service/impl/WebsiteInfoServiceImpl.java
new file mode 100644
index 0000000..f32c2c9
--- /dev/null
+++ b/novel-admin/src/main/java/com/java2nb/novel/service/impl/WebsiteInfoServiceImpl.java
@@ -0,0 +1,55 @@
+package com.java2nb.novel.service.impl;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+import com.java2nb.novel.dao.WebsiteInfoDao;
+import com.java2nb.novel.domain.WebsiteInfoDO;
+import com.java2nb.novel.service.WebsiteInfoService;
+
+
+
+@Service
+public class WebsiteInfoServiceImpl implements WebsiteInfoService {
+ @Autowired
+ private WebsiteInfoDao websiteInfoDao;
+
+ @Override
+ public WebsiteInfoDO get(Long id){
+ return websiteInfoDao.get(id);
+ }
+
+ @Override
+ public List list(Map map){
+ return websiteInfoDao.list(map);
+ }
+
+ @Override
+ public int count(Map map){
+ return websiteInfoDao.count(map);
+ }
+
+ @Override
+ public int save(WebsiteInfoDO websiteInfo){
+ return websiteInfoDao.save(websiteInfo);
+ }
+
+ @Override
+ public int update(WebsiteInfoDO websiteInfo){
+ return websiteInfoDao.update(websiteInfo);
+ }
+
+ @Override
+ public int remove(Long id){
+ return websiteInfoDao.remove(id);
+ }
+
+ @Override
+ public int batchRemove(Long[] ids){
+ return websiteInfoDao.batchRemove(ids);
+ }
+
+}
diff --git a/novel-admin/src/main/java/com/java2nb/system/service/impl/SysUserServiceImpl.java b/novel-admin/src/main/java/com/java2nb/system/service/impl/SysUserServiceImpl.java
index 56f0d5d..449d4da 100644
--- a/novel-admin/src/main/java/com/java2nb/system/service/impl/SysUserServiceImpl.java
+++ b/novel-admin/src/main/java/com/java2nb/system/service/impl/SysUserServiceImpl.java
@@ -1,14 +1,19 @@
package com.java2nb.system.service.impl;
-import java.awt.image.BufferedImage;
-import java.io.ByteArrayOutputStream;
-import java.util.*;
-
+import com.java2nb.common.config.Constant;
import com.java2nb.common.config.JnConfig;
import com.java2nb.common.domain.FileDO;
+import com.java2nb.common.domain.Tree;
import com.java2nb.common.service.FileService;
import com.java2nb.common.utils.*;
+import com.java2nb.system.dao.DeptDao;
+import com.java2nb.system.dao.SysUserDao;
+import com.java2nb.system.dao.UserRoleDao;
+import com.java2nb.system.domain.DeptDO;
+import com.java2nb.system.domain.UserDO;
+import com.java2nb.system.domain.UserRoleDO;
import com.java2nb.system.service.DeptService;
+import com.java2nb.system.service.SysUserService;
import com.java2nb.system.vo.UserVO;
import org.apache.commons.lang.ArrayUtils;
import org.slf4j.Logger;
@@ -16,22 +21,17 @@ import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
-
-import com.java2nb.common.domain.Tree;
-import com.java2nb.system.dao.DeptDao;
-import com.java2nb.system.dao.SysUserDao;
-import com.java2nb.system.dao.UserRoleDao;
-import com.java2nb.system.domain.DeptDO;
-import com.java2nb.system.domain.UserDO;
-import com.java2nb.system.domain.UserRoleDO;
-import com.java2nb.system.service.SysUserService;
import org.springframework.web.multipart.MultipartFile;
import javax.imageio.ImageIO;
+import java.awt.image.BufferedImage;
+import java.io.ByteArrayOutputStream;
+import java.util.*;
@Transactional
@Service
public class SysUserServiceImpl implements SysUserService {
+
@Autowired
SysUserDao userMapper;
@Autowired
@@ -64,7 +64,7 @@ public class SysUserServiceImpl implements SysUserService {
List childIds = deptService.listChildrenIds(deptIdl);
childIds.add(deptIdl);
map.put("deptId", null);
- map.put("deptIds",childIds);
+ map.put("deptIds", childIds);
}
return userMapper.listByPerm(map);
}
@@ -213,7 +213,7 @@ public class SysUserServiceImpl implements SysUserService {
public Map updatePersonalImg(MultipartFile file, String avatar_data, Long userId) throws Exception {
String fileName = file.getOriginalFilename();
fileName = FileUtil.renameToUUID(fileName);
- FileDO sysFile = new FileDO(FileType.fileType(fileName), "/files/" + fileName, new Date());
+ FileDO sysFile = new FileDO(FileType.fileType(fileName), Constant.UPLOAD_FILES_PREFIX + fileName, new Date());
//获取图片后缀
String prefix = fileName.substring((fileName.lastIndexOf(".") + 1));
String[] str = avatar_data.split(",");
diff --git a/novel-admin/src/main/resources/application-dev.yml b/novel-admin/src/main/resources/application-dev.yml
index 647122b..c63a852 100644
--- a/novel-admin/src/main/resources/application-dev.yml
+++ b/novel-admin/src/main/resources/application-dev.yml
@@ -10,7 +10,7 @@ spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.cj.jdbc.Driver
- url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
+ url: jdbc:mysql://127.0.0.1:3306/novel_plus?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
username: root
password: test123456
#password:
diff --git a/novel-admin/src/main/resources/mybatis/novel/WebsiteInfoMapper.xml b/novel-admin/src/main/resources/mybatis/novel/WebsiteInfoMapper.xml
new file mode 100644
index 0000000..266c659
--- /dev/null
+++ b/novel-admin/src/main/resources/mybatis/novel/WebsiteInfoMapper.xml
@@ -0,0 +1,152 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ insert into website_info
+ (
+ `id`,
+ `name`,
+ `domain`,
+ `keyword`,
+ `description`,
+ `qq`,
+ `logo`,
+ `logo_dark`,
+ `create_time`,
+ `create_user_id`,
+ `update_time`,
+ `update_user_id`
+ )
+ values
+ (
+ #{id},
+ #{name},
+ #{domain},
+ #{keyword},
+ #{description},
+ #{qq},
+ #{logo},
+ #{logoDark},
+ #{createTime},
+ #{createUserId},
+ #{updateTime},
+ #{updateUserId}
+ )
+
+
+
+ insert into website_info
+ (
+ `id`,
+ `name`,
+ `domain`,
+ `keyword`,
+ `description`,
+ `qq`,
+ `logo`,
+ `logo_dark`,
+ `create_time`,
+ `create_user_id`,
+ `update_time`,
+ `update_user_id`
+ )
+ values
+ (
+ #{id},
+ #{name},
+ #{domain},
+ #{keyword},
+ #{description},
+ #{qq},
+ #{logo},
+ #{logoDark},
+ #{createTime},
+ #{createUserId},
+ #{updateTime},
+ #{updateUserId}
+ )
+
+
+
+ update website_info
+
+ `name` = #{name},
+ `domain` = #{domain},
+ `keyword` = #{keyword},
+ `description` = #{description},
+ `qq` = #{qq},
+ `logo` = #{logo},
+ `logo_dark` = #{logoDark},
+ `create_time` = #{createTime},
+ `create_user_id` = #{createUserId},
+ `update_time` = #{updateTime},
+ `update_user_id` = #{updateUserId}
+
+ where id = #{id}
+
+
+
+ delete from website_info where id = #{value}
+
+
+
+ delete from website_info where id in
+
+ #{id}
+
+
+
+
\ No newline at end of file
diff --git a/novel-admin/src/main/resources/static/js/appjs/novel/websiteInfo/edit.js b/novel-admin/src/main/resources/static/js/appjs/novel/websiteInfo/edit.js
new file mode 100644
index 0000000..b3384bd
--- /dev/null
+++ b/novel-admin/src/main/resources/static/js/appjs/novel/websiteInfo/edit.js
@@ -0,0 +1,99 @@
+var E = window.wangEditor;
+$("[id^='contentEditor']").each(function (index, ele) {
+ var relName = $(ele).attr("id").substring(13);
+ var editor = new E('#contentEditor' + relName);
+// 自定义菜单配置
+ editor.customConfig.menus = [
+ 'head', // 标题
+ 'bold', // 粗体
+ 'fontSize', // 字号
+ 'fontName', // 字体
+ 'italic', // 斜体
+ 'underline', // 下划线
+ 'strikeThrough', // 删除线
+ 'foreColor', // 文字颜色
+ //'backColor', // 背景颜色
+ //'link', // 插入链接
+ 'list', // 列表
+ 'justify', // 对齐方式
+ 'quote', // 引用
+ 'emoticon', // 表情
+ 'image', // 插入图片
+ //'table', // 表格
+ //'video', // 插入视频
+ //'code', // 插入代码
+ 'undo', // 撤销
+ 'redo' // 重复
+ ];
+ editor.customConfig.onchange = function (html) {
+ // html 即变化之后的内容
+ $("#" + relName).val(html);
+ }
+ editor.customConfig.uploadImgShowBase64 = true;
+ editor.create();
+ editor.txt.html($("#" + relName).val());
+
+})
+
+$("[id^='picImage']").each(function (index, ele) {
+ var relName = $(ele).attr("id").substring(8);
+ layui.use('upload', function () {
+ var upload = layui.upload;
+ //执行实例
+ var uploadInst = upload.render({
+ elem: '#picImage' + relName, //绑定元素
+ url: '/common/sysFile/upload', //上传接口
+ size: 1000,
+ accept: 'file',
+ done: function (r) {
+ $("#picImage" + relName).attr("src", r.fileName);
+ $("#" + relName).val(r.fileName);
+ },
+ error: function (r) {
+ layer.msg(r.msg);
+ }
+ });
+ });
+
+});
+
+$().ready(function () {
+ validateRule();
+});
+
+$.validator.setDefaults({
+ submitHandler: function () {
+ update();
+ }
+});
+
+function update() {
+ $.ajax({
+ cache: true,
+ type: "POST",
+ url: "/novel/websiteInfo/update",
+ data: $('#signupForm').serialize(),// 你的formid
+ async: false,
+ error: function (request) {
+ layer.alert("Connection error");
+ },
+ success: function (data) {
+ if (data.code == 0) {
+ layer.msg("操作成功");
+ } else {
+ layer.alert(data.msg)
+ }
+
+ }
+ });
+
+}
+
+function validateRule() {
+ var icon = " ";
+ $("#signupForm").validate({
+ ignore: "",
+ rules: {},
+ messages: {}
+ })
+}
\ No newline at end of file
diff --git a/novel-admin/src/main/resources/static/sql/novel/author/menu.js b/novel-admin/src/main/resources/static/sql/novel/author/menu.js
index d561b52..e69de29 100644
--- a/novel-admin/src/main/resources/static/sql/novel/author/menu.js
+++ b/novel-admin/src/main/resources/static/sql/novel/author/menu.js
@@ -1,18 +0,0 @@
--- 菜单SQL
-INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`)
- VALUES ('1', '作者表', 'novel/author', 'novel:author:author', '1', 'fa', '6');
-
--- 按钮父菜单ID
-set @parentId = @@identity;
-
--- 菜单对应按钮SQL
-INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`)
- SELECT @parentId, '查看', null, 'novel:author:detail', '2', null, '6';
-INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`)
- SELECT @parentId, '新增', null, 'novel:author:add', '2', null, '6';
-INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`)
- SELECT @parentId, '修改', null, 'novel:author:edit', '2', null, '6';
-INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`)
- SELECT @parentId, '删除', null, 'novel:author:remove', '2', null, '6';
-INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`)
- SELECT @parentId, '批量删除', null, 'novel:author:batchRemove', '2', null, '6';
diff --git a/novel-admin/src/main/resources/static/sql/novel/authorCode/menu.js b/novel-admin/src/main/resources/static/sql/novel/authorCode/menu.js
index 8c6c25d..e69de29 100644
--- a/novel-admin/src/main/resources/static/sql/novel/authorCode/menu.js
+++ b/novel-admin/src/main/resources/static/sql/novel/authorCode/menu.js
@@ -1,18 +0,0 @@
--- 菜单SQL
-INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`)
- VALUES ('1', '作家邀请码表', 'novel/authorCode', 'novel:authorCode:authorCode', '1', 'fa', '6');
-
--- 按钮父菜单ID
-set @parentId = @@identity;
-
--- 菜单对应按钮SQL
-INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`)
- SELECT @parentId, '查看', null, 'novel:authorCode:detail', '2', null, '6';
-INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`)
- SELECT @parentId, '新增', null, 'novel:authorCode:add', '2', null, '6';
-INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`)
- SELECT @parentId, '修改', null, 'novel:authorCode:edit', '2', null, '6';
-INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`)
- SELECT @parentId, '删除', null, 'novel:authorCode:remove', '2', null, '6';
-INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`)
- SELECT @parentId, '批量删除', null, 'novel:authorCode:batchRemove', '2', null, '6';
diff --git a/novel-admin/src/main/resources/static/sql/novel/book/menu.js b/novel-admin/src/main/resources/static/sql/novel/book/menu.js
index 057e333..e69de29 100644
--- a/novel-admin/src/main/resources/static/sql/novel/book/menu.js
+++ b/novel-admin/src/main/resources/static/sql/novel/book/menu.js
@@ -1,18 +0,0 @@
--- 菜单SQL
-INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`)
- VALUES ('1', '小说表', 'novel/book', 'novel:book:book', '1', 'fa', '6');
-
--- 按钮父菜单ID
-set @parentId = @@identity;
-
--- 菜单对应按钮SQL
-INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`)
- SELECT @parentId, '查看', null, 'novel:book:detail', '2', null, '6';
-INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`)
- SELECT @parentId, '新增', null, 'novel:book:add', '2', null, '6';
-INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`)
- SELECT @parentId, '修改', null, 'novel:book:edit', '2', null, '6';
-INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`)
- SELECT @parentId, '删除', null, 'novel:book:remove', '2', null, '6';
-INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`)
- SELECT @parentId, '批量删除', null, 'novel:book:batchRemove', '2', null, '6';
diff --git a/novel-admin/src/main/resources/static/sql/novel/category/menu.js b/novel-admin/src/main/resources/static/sql/novel/category/menu.js
index de0b6a7..e69de29 100644
--- a/novel-admin/src/main/resources/static/sql/novel/category/menu.js
+++ b/novel-admin/src/main/resources/static/sql/novel/category/menu.js
@@ -1,18 +0,0 @@
--- 菜单SQL
-INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`)
- VALUES ('1', '新闻类别表', 'novel/category', 'novel:category:category', '1', 'fa', '6');
-
--- 按钮父菜单ID
-set @parentId = @@identity;
-
--- 菜单对应按钮SQL
-INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`)
- SELECT @parentId, '查看', null, 'novel:category:detail', '2', null, '6';
-INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`)
- SELECT @parentId, '新增', null, 'novel:category:add', '2', null, '6';
-INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`)
- SELECT @parentId, '修改', null, 'novel:category:edit', '2', null, '6';
-INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`)
- SELECT @parentId, '删除', null, 'novel:category:remove', '2', null, '6';
-INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`)
- SELECT @parentId, '批量删除', null, 'novel:category:batchRemove', '2', null, '6';
diff --git a/novel-admin/src/main/resources/static/sql/novel/news/menu.js b/novel-admin/src/main/resources/static/sql/novel/news/menu.js
index 24acd26..e69de29 100644
--- a/novel-admin/src/main/resources/static/sql/novel/news/menu.js
+++ b/novel-admin/src/main/resources/static/sql/novel/news/menu.js
@@ -1,18 +0,0 @@
--- 菜单SQL
-INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`)
- VALUES ('1', '新闻表', 'novel/news', 'novel:news:news', '1', 'fa', '6');
-
--- 按钮父菜单ID
-set @parentId = @@identity;
-
--- 菜单对应按钮SQL
-INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`)
- SELECT @parentId, '查看', null, 'novel:news:detail', '2', null, '6';
-INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`)
- SELECT @parentId, '新增', null, 'novel:news:add', '2', null, '6';
-INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`)
- SELECT @parentId, '修改', null, 'novel:news:edit', '2', null, '6';
-INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`)
- SELECT @parentId, '删除', null, 'novel:news:remove', '2', null, '6';
-INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`)
- SELECT @parentId, '批量删除', null, 'novel:news:batchRemove', '2', null, '6';
diff --git a/novel-admin/src/main/resources/static/sql/novel/pay/menu.js b/novel-admin/src/main/resources/static/sql/novel/pay/menu.js
index 4ba9933..e69de29 100644
--- a/novel-admin/src/main/resources/static/sql/novel/pay/menu.js
+++ b/novel-admin/src/main/resources/static/sql/novel/pay/menu.js
@@ -1,18 +0,0 @@
--- 菜单SQL
-INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`)
- VALUES ('1', '充值订单', 'novel/pay', 'novel:pay:pay', '1', 'fa', '6');
-
--- 按钮父菜单ID
-set @parentId = @@identity;
-
--- 菜单对应按钮SQL
-INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`)
- SELECT @parentId, '查看', null, 'novel:pay:detail', '2', null, '6';
-INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`)
- SELECT @parentId, '新增', null, 'novel:pay:add', '2', null, '6';
-INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`)
- SELECT @parentId, '修改', null, 'novel:pay:edit', '2', null, '6';
-INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`)
- SELECT @parentId, '删除', null, 'novel:pay:remove', '2', null, '6';
-INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`)
- SELECT @parentId, '批量删除', null, 'novel:pay:batchRemove', '2', null, '6';
diff --git a/novel-admin/src/main/resources/static/sql/novel/user/menu.js b/novel-admin/src/main/resources/static/sql/novel/user/menu.js
index 6319b06..e69de29 100644
--- a/novel-admin/src/main/resources/static/sql/novel/user/menu.js
+++ b/novel-admin/src/main/resources/static/sql/novel/user/menu.js
@@ -1,18 +0,0 @@
--- 菜单SQL
-INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`)
- VALUES ('1', '', 'novel/user', 'novel:user:user', '1', 'fa', '6');
-
--- 按钮父菜单ID
-set @parentId = @@identity;
-
--- 菜单对应按钮SQL
-INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`)
- SELECT @parentId, '查看', null, 'novel:user:detail', '2', null, '6';
-INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`)
- SELECT @parentId, '新增', null, 'novel:user:add', '2', null, '6';
-INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`)
- SELECT @parentId, '修改', null, 'novel:user:edit', '2', null, '6';
-INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`)
- SELECT @parentId, '删除', null, 'novel:user:remove', '2', null, '6';
-INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`)
- SELECT @parentId, '批量删除', null, 'novel:user:batchRemove', '2', null, '6';
diff --git a/novel-admin/src/main/resources/static/sql/novel/websiteInfo/menu.js b/novel-admin/src/main/resources/static/sql/novel/websiteInfo/menu.js
new file mode 100644
index 0000000..f4df000
--- /dev/null
+++ b/novel-admin/src/main/resources/static/sql/novel/websiteInfo/menu.js
@@ -0,0 +1,36 @@
+--菜单SQL
+INSERT
+INTO`sys_menu`(`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`)
+VALUES('247', '网站信息表', 'novel/websiteInfo', 'novel:websiteInfo:websiteInfo', '1', 'fa', '6');
+
+--按钮父菜单ID
+set
+@parentId
+= @@identity;
+
+--菜单对应按钮SQL
+INSERT
+INTO`sys_menu`(`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`)
+SELECT
+@parentId,
+'查看', null, 'novel:websiteInfo:detail', '2', null, '6';
+INSERT
+INTO`sys_menu`(`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`)
+SELECT
+@parentId,
+'新增', null, 'novel:websiteInfo:add', '2', null, '6';
+INSERT
+INTO`sys_menu`(`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`)
+SELECT
+@parentId,
+'修改', null, 'novel:websiteInfo:edit', '2', null, '6';
+INSERT
+INTO`sys_menu`(`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`)
+SELECT
+@parentId,
+'删除', null, 'novel:websiteInfo:remove', '2', null, '6';
+INSERT
+INTO`sys_menu`(`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`)
+SELECT
+@parentId,
+'批量删除', null, 'novel:websiteInfo:batchRemove', '2', null, '6';
diff --git a/novel-admin/src/main/resources/templates/novel/websiteInfo/detail.html b/novel-admin/src/main/resources/templates/novel/websiteInfo/detail.html
new file mode 100644
index 0000000..10e509e
--- /dev/null
+++ b/novel-admin/src/main/resources/templates/novel/websiteInfo/detail.html
@@ -0,0 +1,93 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/novel-common/src/main/java/com/java2nb/novel/entity/WebsiteInfo.java b/novel-common/src/main/java/com/java2nb/novel/entity/WebsiteInfo.java
new file mode 100644
index 0000000..13de380
--- /dev/null
+++ b/novel-common/src/main/java/com/java2nb/novel/entity/WebsiteInfo.java
@@ -0,0 +1,162 @@
+package com.java2nb.novel.entity;
+
+import java.util.Date;
+import javax.annotation.Generated;
+
+public class WebsiteInfo {
+ @Generated("org.mybatis.generator.api.MyBatisGenerator")
+ private Long id;
+
+ @Generated("org.mybatis.generator.api.MyBatisGenerator")
+ private String name;
+
+ @Generated("org.mybatis.generator.api.MyBatisGenerator")
+ private String domain;
+
+ @Generated("org.mybatis.generator.api.MyBatisGenerator")
+ private String keyword;
+
+ @Generated("org.mybatis.generator.api.MyBatisGenerator")
+ private String description;
+
+ @Generated("org.mybatis.generator.api.MyBatisGenerator")
+ private String qq;
+
+ @Generated("org.mybatis.generator.api.MyBatisGenerator")
+ private String logo;
+
+ @Generated("org.mybatis.generator.api.MyBatisGenerator")
+ private String logoDark;
+
+ @Generated("org.mybatis.generator.api.MyBatisGenerator")
+ private Date createTime;
+
+ @Generated("org.mybatis.generator.api.MyBatisGenerator")
+ private Long createUserId;
+
+ @Generated("org.mybatis.generator.api.MyBatisGenerator")
+ private Date updateTime;
+
+ @Generated("org.mybatis.generator.api.MyBatisGenerator")
+ private Long updateUserId;
+
+ @Generated("org.mybatis.generator.api.MyBatisGenerator")
+ public Long getId() {
+ return id;
+ }
+
+ @Generated("org.mybatis.generator.api.MyBatisGenerator")
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ @Generated("org.mybatis.generator.api.MyBatisGenerator")
+ public String getName() {
+ return name;
+ }
+
+ @Generated("org.mybatis.generator.api.MyBatisGenerator")
+ public void setName(String name) {
+ this.name = name == null ? null : name.trim();
+ }
+
+ @Generated("org.mybatis.generator.api.MyBatisGenerator")
+ public String getDomain() {
+ return domain;
+ }
+
+ @Generated("org.mybatis.generator.api.MyBatisGenerator")
+ public void setDomain(String domain) {
+ this.domain = domain == null ? null : domain.trim();
+ }
+
+ @Generated("org.mybatis.generator.api.MyBatisGenerator")
+ public String getKeyword() {
+ return keyword;
+ }
+
+ @Generated("org.mybatis.generator.api.MyBatisGenerator")
+ public void setKeyword(String keyword) {
+ this.keyword = keyword == null ? null : keyword.trim();
+ }
+
+ @Generated("org.mybatis.generator.api.MyBatisGenerator")
+ public String getDescription() {
+ return description;
+ }
+
+ @Generated("org.mybatis.generator.api.MyBatisGenerator")
+ public void setDescription(String description) {
+ this.description = description == null ? null : description.trim();
+ }
+
+ @Generated("org.mybatis.generator.api.MyBatisGenerator")
+ public String getQq() {
+ return qq;
+ }
+
+ @Generated("org.mybatis.generator.api.MyBatisGenerator")
+ public void setQq(String qq) {
+ this.qq = qq == null ? null : qq.trim();
+ }
+
+ @Generated("org.mybatis.generator.api.MyBatisGenerator")
+ public String getLogo() {
+ return logo;
+ }
+
+ @Generated("org.mybatis.generator.api.MyBatisGenerator")
+ public void setLogo(String logo) {
+ this.logo = logo == null ? null : logo.trim();
+ }
+
+ @Generated("org.mybatis.generator.api.MyBatisGenerator")
+ public String getLogoDark() {
+ return logoDark;
+ }
+
+ @Generated("org.mybatis.generator.api.MyBatisGenerator")
+ public void setLogoDark(String logoDark) {
+ this.logoDark = logoDark == null ? null : logoDark.trim();
+ }
+
+ @Generated("org.mybatis.generator.api.MyBatisGenerator")
+ public Date getCreateTime() {
+ return createTime;
+ }
+
+ @Generated("org.mybatis.generator.api.MyBatisGenerator")
+ public void setCreateTime(Date createTime) {
+ this.createTime = createTime;
+ }
+
+ @Generated("org.mybatis.generator.api.MyBatisGenerator")
+ public Long getCreateUserId() {
+ return createUserId;
+ }
+
+ @Generated("org.mybatis.generator.api.MyBatisGenerator")
+ public void setCreateUserId(Long createUserId) {
+ this.createUserId = createUserId;
+ }
+
+ @Generated("org.mybatis.generator.api.MyBatisGenerator")
+ public Date getUpdateTime() {
+ return updateTime;
+ }
+
+ @Generated("org.mybatis.generator.api.MyBatisGenerator")
+ public void setUpdateTime(Date updateTime) {
+ this.updateTime = updateTime;
+ }
+
+ @Generated("org.mybatis.generator.api.MyBatisGenerator")
+ public Long getUpdateUserId() {
+ return updateUserId;
+ }
+
+ @Generated("org.mybatis.generator.api.MyBatisGenerator")
+ public void setUpdateUserId(Long updateUserId) {
+ this.updateUserId = updateUserId;
+ }
+}
\ No newline at end of file
diff --git a/novel-common/src/main/java/com/java2nb/novel/mapper/WebsiteInfoDynamicSqlSupport.java b/novel-common/src/main/java/com/java2nb/novel/mapper/WebsiteInfoDynamicSqlSupport.java
new file mode 100644
index 0000000..01e6b86
--- /dev/null
+++ b/novel-common/src/main/java/com/java2nb/novel/mapper/WebsiteInfoDynamicSqlSupport.java
@@ -0,0 +1,79 @@
+package com.java2nb.novel.mapper;
+
+import java.sql.JDBCType;
+import java.util.Date;
+import javax.annotation.Generated;
+import org.mybatis.dynamic.sql.SqlColumn;
+import org.mybatis.dynamic.sql.SqlTable;
+
+public final class WebsiteInfoDynamicSqlSupport {
+ @Generated("org.mybatis.generator.api.MyBatisGenerator")
+ public static final WebsiteInfo websiteInfo = new WebsiteInfo();
+
+ @Generated("org.mybatis.generator.api.MyBatisGenerator")
+ public static final SqlColumn id = websiteInfo.id;
+
+ @Generated("org.mybatis.generator.api.MyBatisGenerator")
+ public static final SqlColumn name = websiteInfo.name;
+
+ @Generated("org.mybatis.generator.api.MyBatisGenerator")
+ public static final SqlColumn domain = websiteInfo.domain;
+
+ @Generated("org.mybatis.generator.api.MyBatisGenerator")
+ public static final SqlColumn keyword = websiteInfo.keyword;
+
+ @Generated("org.mybatis.generator.api.MyBatisGenerator")
+ public static final SqlColumn description = websiteInfo.description;
+
+ @Generated("org.mybatis.generator.api.MyBatisGenerator")
+ public static final SqlColumn qq = websiteInfo.qq;
+
+ @Generated("org.mybatis.generator.api.MyBatisGenerator")
+ public static final SqlColumn logo = websiteInfo.logo;
+
+ @Generated("org.mybatis.generator.api.MyBatisGenerator")
+ public static final SqlColumn logoDark = websiteInfo.logoDark;
+
+ @Generated("org.mybatis.generator.api.MyBatisGenerator")
+ public static final SqlColumn createTime = websiteInfo.createTime;
+
+ @Generated("org.mybatis.generator.api.MyBatisGenerator")
+ public static final SqlColumn createUserId = websiteInfo.createUserId;
+
+ @Generated("org.mybatis.generator.api.MyBatisGenerator")
+ public static final SqlColumn updateTime = websiteInfo.updateTime;
+
+ @Generated("org.mybatis.generator.api.MyBatisGenerator")
+ public static final SqlColumn updateUserId = websiteInfo.updateUserId;
+
+ @Generated("org.mybatis.generator.api.MyBatisGenerator")
+ public static final class WebsiteInfo extends SqlTable {
+ public final SqlColumn id = column("id", JDBCType.BIGINT);
+
+ public final SqlColumn name = column("name", JDBCType.VARCHAR);
+
+ public final SqlColumn domain = column("domain", JDBCType.VARCHAR);
+
+ public final SqlColumn keyword = column("keyword", JDBCType.VARCHAR);
+
+ public final SqlColumn description = column("description", JDBCType.VARCHAR);
+
+ public final SqlColumn qq = column("qq", JDBCType.VARCHAR);
+
+ public final SqlColumn logo = column("logo", JDBCType.VARCHAR);
+
+ public final SqlColumn logoDark = column("logo_dark", JDBCType.VARCHAR);
+
+ public final SqlColumn createTime = column("create_time", JDBCType.TIMESTAMP);
+
+ public final SqlColumn createUserId = column("create_user_id", JDBCType.BIGINT);
+
+ public final SqlColumn updateTime = column("update_time", JDBCType.TIMESTAMP);
+
+ public final SqlColumn updateUserId = column("update_user_id", JDBCType.BIGINT);
+
+ public WebsiteInfo() {
+ super("website_info");
+ }
+ }
+}
\ No newline at end of file
diff --git a/novel-common/src/main/java/com/java2nb/novel/mapper/WebsiteInfoMapper.java b/novel-common/src/main/java/com/java2nb/novel/mapper/WebsiteInfoMapper.java
new file mode 100644
index 0000000..81db4af
--- /dev/null
+++ b/novel-common/src/main/java/com/java2nb/novel/mapper/WebsiteInfoMapper.java
@@ -0,0 +1,248 @@
+package com.java2nb.novel.mapper;
+
+import static com.java2nb.novel.mapper.WebsiteInfoDynamicSqlSupport.*;
+import static org.mybatis.dynamic.sql.SqlBuilder.*;
+
+import com.java2nb.novel.entity.WebsiteInfo;
+import java.util.Collection;
+import java.util.List;
+import java.util.Optional;
+import javax.annotation.Generated;
+import org.apache.ibatis.annotations.DeleteProvider;
+import org.apache.ibatis.annotations.InsertProvider;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Result;
+import org.apache.ibatis.annotations.ResultMap;
+import org.apache.ibatis.annotations.Results;
+import org.apache.ibatis.annotations.SelectProvider;
+import org.apache.ibatis.annotations.UpdateProvider;
+import org.apache.ibatis.type.JdbcType;
+import org.mybatis.dynamic.sql.BasicColumn;
+import org.mybatis.dynamic.sql.delete.DeleteDSLCompleter;
+import org.mybatis.dynamic.sql.delete.render.DeleteStatementProvider;
+import org.mybatis.dynamic.sql.insert.render.InsertStatementProvider;
+import org.mybatis.dynamic.sql.insert.render.MultiRowInsertStatementProvider;
+import org.mybatis.dynamic.sql.select.CountDSLCompleter;
+import org.mybatis.dynamic.sql.select.SelectDSLCompleter;
+import org.mybatis.dynamic.sql.select.render.SelectStatementProvider;
+import org.mybatis.dynamic.sql.update.UpdateDSL;
+import org.mybatis.dynamic.sql.update.UpdateDSLCompleter;
+import org.mybatis.dynamic.sql.update.UpdateModel;
+import org.mybatis.dynamic.sql.update.render.UpdateStatementProvider;
+import org.mybatis.dynamic.sql.util.SqlProviderAdapter;
+import org.mybatis.dynamic.sql.util.mybatis3.MyBatis3Utils;
+
+@Mapper
+public interface WebsiteInfoMapper {
+ @Generated("org.mybatis.generator.api.MyBatisGenerator")
+ BasicColumn[] selectList = BasicColumn.columnList(id, name, domain, keyword, description, qq, logo, logoDark, createTime, createUserId, updateTime, updateUserId);
+
+ @Generated("org.mybatis.generator.api.MyBatisGenerator")
+ @SelectProvider(type=SqlProviderAdapter.class, method="select")
+ long count(SelectStatementProvider selectStatement);
+
+ @Generated("org.mybatis.generator.api.MyBatisGenerator")
+ @DeleteProvider(type=SqlProviderAdapter.class, method="delete")
+ int delete(DeleteStatementProvider deleteStatement);
+
+ @Generated("org.mybatis.generator.api.MyBatisGenerator")
+ @InsertProvider(type=SqlProviderAdapter.class, method="insert")
+ int insert(InsertStatementProvider insertStatement);
+
+ @Generated("org.mybatis.generator.api.MyBatisGenerator")
+ @InsertProvider(type=SqlProviderAdapter.class, method="insertMultiple")
+ int insertMultiple(MultiRowInsertStatementProvider multipleInsertStatement);
+
+ @Generated("org.mybatis.generator.api.MyBatisGenerator")
+ @SelectProvider(type=SqlProviderAdapter.class, method="select")
+ @ResultMap("WebsiteInfoResult")
+ Optional selectOne(SelectStatementProvider selectStatement);
+
+ @Generated("org.mybatis.generator.api.MyBatisGenerator")
+ @SelectProvider(type=SqlProviderAdapter.class, method="select")
+ @Results(id="WebsiteInfoResult", value = {
+ @Result(column="id", property="id", jdbcType=JdbcType.BIGINT, id=true),
+ @Result(column="name", property="name", jdbcType=JdbcType.VARCHAR),
+ @Result(column="domain", property="domain", jdbcType=JdbcType.VARCHAR),
+ @Result(column="keyword", property="keyword", jdbcType=JdbcType.VARCHAR),
+ @Result(column="description", property="description", jdbcType=JdbcType.VARCHAR),
+ @Result(column="qq", property="qq", jdbcType=JdbcType.VARCHAR),
+ @Result(column="logo", property="logo", jdbcType=JdbcType.VARCHAR),
+ @Result(column="logo_dark", property="logoDark", jdbcType=JdbcType.VARCHAR),
+ @Result(column="create_time", property="createTime", jdbcType=JdbcType.TIMESTAMP),
+ @Result(column="create_user_id", property="createUserId", jdbcType=JdbcType.BIGINT),
+ @Result(column="update_time", property="updateTime", jdbcType=JdbcType.TIMESTAMP),
+ @Result(column="update_user_id", property="updateUserId", jdbcType=JdbcType.BIGINT)
+ })
+ List selectMany(SelectStatementProvider selectStatement);
+
+ @Generated("org.mybatis.generator.api.MyBatisGenerator")
+ @UpdateProvider(type=SqlProviderAdapter.class, method="update")
+ int update(UpdateStatementProvider updateStatement);
+
+ @Generated("org.mybatis.generator.api.MyBatisGenerator")
+ default long count(CountDSLCompleter completer) {
+ return MyBatis3Utils.countFrom(this::count, websiteInfo, completer);
+ }
+
+ @Generated("org.mybatis.generator.api.MyBatisGenerator")
+ default int delete(DeleteDSLCompleter completer) {
+ return MyBatis3Utils.deleteFrom(this::delete, websiteInfo, completer);
+ }
+
+ @Generated("org.mybatis.generator.api.MyBatisGenerator")
+ default int deleteByPrimaryKey(Long id_) {
+ return delete(c ->
+ c.where(id, isEqualTo(id_))
+ );
+ }
+
+ @Generated("org.mybatis.generator.api.MyBatisGenerator")
+ default int insert(WebsiteInfo record) {
+ return MyBatis3Utils.insert(this::insert, record, websiteInfo, c ->
+ c.map(id).toProperty("id")
+ .map(name).toProperty("name")
+ .map(domain).toProperty("domain")
+ .map(keyword).toProperty("keyword")
+ .map(description).toProperty("description")
+ .map(qq).toProperty("qq")
+ .map(logo).toProperty("logo")
+ .map(logoDark).toProperty("logoDark")
+ .map(createTime).toProperty("createTime")
+ .map(createUserId).toProperty("createUserId")
+ .map(updateTime).toProperty("updateTime")
+ .map(updateUserId).toProperty("updateUserId")
+ );
+ }
+
+ @Generated("org.mybatis.generator.api.MyBatisGenerator")
+ default int insertMultiple(Collection records) {
+ return MyBatis3Utils.insertMultiple(this::insertMultiple, records, websiteInfo, c ->
+ c.map(id).toProperty("id")
+ .map(name).toProperty("name")
+ .map(domain).toProperty("domain")
+ .map(keyword).toProperty("keyword")
+ .map(description).toProperty("description")
+ .map(qq).toProperty("qq")
+ .map(logo).toProperty("logo")
+ .map(logoDark).toProperty("logoDark")
+ .map(createTime).toProperty("createTime")
+ .map(createUserId).toProperty("createUserId")
+ .map(updateTime).toProperty("updateTime")
+ .map(updateUserId).toProperty("updateUserId")
+ );
+ }
+
+ @Generated("org.mybatis.generator.api.MyBatisGenerator")
+ default int insertSelective(WebsiteInfo record) {
+ return MyBatis3Utils.insert(this::insert, record, websiteInfo, c ->
+ c.map(id).toPropertyWhenPresent("id", record::getId)
+ .map(name).toPropertyWhenPresent("name", record::getName)
+ .map(domain).toPropertyWhenPresent("domain", record::getDomain)
+ .map(keyword).toPropertyWhenPresent("keyword", record::getKeyword)
+ .map(description).toPropertyWhenPresent("description", record::getDescription)
+ .map(qq).toPropertyWhenPresent("qq", record::getQq)
+ .map(logo).toPropertyWhenPresent("logo", record::getLogo)
+ .map(logoDark).toPropertyWhenPresent("logoDark", record::getLogoDark)
+ .map(createTime).toPropertyWhenPresent("createTime", record::getCreateTime)
+ .map(createUserId).toPropertyWhenPresent("createUserId", record::getCreateUserId)
+ .map(updateTime).toPropertyWhenPresent("updateTime", record::getUpdateTime)
+ .map(updateUserId).toPropertyWhenPresent("updateUserId", record::getUpdateUserId)
+ );
+ }
+
+ @Generated("org.mybatis.generator.api.MyBatisGenerator")
+ default Optional selectOne(SelectDSLCompleter completer) {
+ return MyBatis3Utils.selectOne(this::selectOne, selectList, websiteInfo, completer);
+ }
+
+ @Generated("org.mybatis.generator.api.MyBatisGenerator")
+ default List select(SelectDSLCompleter completer) {
+ return MyBatis3Utils.selectList(this::selectMany, selectList, websiteInfo, completer);
+ }
+
+ @Generated("org.mybatis.generator.api.MyBatisGenerator")
+ default List selectDistinct(SelectDSLCompleter completer) {
+ return MyBatis3Utils.selectDistinct(this::selectMany, selectList, websiteInfo, completer);
+ }
+
+ @Generated("org.mybatis.generator.api.MyBatisGenerator")
+ default Optional selectByPrimaryKey(Long id_) {
+ return selectOne(c ->
+ c.where(id, isEqualTo(id_))
+ );
+ }
+
+ @Generated("org.mybatis.generator.api.MyBatisGenerator")
+ default int update(UpdateDSLCompleter completer) {
+ return MyBatis3Utils.update(this::update, websiteInfo, completer);
+ }
+
+ @Generated("org.mybatis.generator.api.MyBatisGenerator")
+ static UpdateDSL updateAllColumns(WebsiteInfo record, UpdateDSL dsl) {
+ return dsl.set(id).equalTo(record::getId)
+ .set(name).equalTo(record::getName)
+ .set(domain).equalTo(record::getDomain)
+ .set(keyword).equalTo(record::getKeyword)
+ .set(description).equalTo(record::getDescription)
+ .set(qq).equalTo(record::getQq)
+ .set(logo).equalTo(record::getLogo)
+ .set(logoDark).equalTo(record::getLogoDark)
+ .set(createTime).equalTo(record::getCreateTime)
+ .set(createUserId).equalTo(record::getCreateUserId)
+ .set(updateTime).equalTo(record::getUpdateTime)
+ .set(updateUserId).equalTo(record::getUpdateUserId);
+ }
+
+ @Generated("org.mybatis.generator.api.MyBatisGenerator")
+ static UpdateDSL updateSelectiveColumns(WebsiteInfo record, UpdateDSL dsl) {
+ return dsl.set(id).equalToWhenPresent(record::getId)
+ .set(name).equalToWhenPresent(record::getName)
+ .set(domain).equalToWhenPresent(record::getDomain)
+ .set(keyword).equalToWhenPresent(record::getKeyword)
+ .set(description).equalToWhenPresent(record::getDescription)
+ .set(qq).equalToWhenPresent(record::getQq)
+ .set(logo).equalToWhenPresent(record::getLogo)
+ .set(logoDark).equalToWhenPresent(record::getLogoDark)
+ .set(createTime).equalToWhenPresent(record::getCreateTime)
+ .set(createUserId).equalToWhenPresent(record::getCreateUserId)
+ .set(updateTime).equalToWhenPresent(record::getUpdateTime)
+ .set(updateUserId).equalToWhenPresent(record::getUpdateUserId);
+ }
+
+ @Generated("org.mybatis.generator.api.MyBatisGenerator")
+ default int updateByPrimaryKey(WebsiteInfo record) {
+ return update(c ->
+ c.set(name).equalTo(record::getName)
+ .set(domain).equalTo(record::getDomain)
+ .set(keyword).equalTo(record::getKeyword)
+ .set(description).equalTo(record::getDescription)
+ .set(qq).equalTo(record::getQq)
+ .set(logo).equalTo(record::getLogo)
+ .set(logoDark).equalTo(record::getLogoDark)
+ .set(createTime).equalTo(record::getCreateTime)
+ .set(createUserId).equalTo(record::getCreateUserId)
+ .set(updateTime).equalTo(record::getUpdateTime)
+ .set(updateUserId).equalTo(record::getUpdateUserId)
+ .where(id, isEqualTo(record::getId))
+ );
+ }
+
+ @Generated("org.mybatis.generator.api.MyBatisGenerator")
+ default int updateByPrimaryKeySelective(WebsiteInfo record) {
+ return update(c ->
+ c.set(name).equalToWhenPresent(record::getName)
+ .set(domain).equalToWhenPresent(record::getDomain)
+ .set(keyword).equalToWhenPresent(record::getKeyword)
+ .set(description).equalToWhenPresent(record::getDescription)
+ .set(qq).equalToWhenPresent(record::getQq)
+ .set(logo).equalToWhenPresent(record::getLogo)
+ .set(logoDark).equalToWhenPresent(record::getLogoDark)
+ .set(createTime).equalToWhenPresent(record::getCreateTime)
+ .set(createUserId).equalToWhenPresent(record::getCreateUserId)
+ .set(updateTime).equalToWhenPresent(record::getUpdateTime)
+ .set(updateUserId).equalToWhenPresent(record::getUpdateUserId)
+ .where(id, isEqualTo(record::getId))
+ );
+ }
+}
\ No newline at end of file
diff --git a/novel-common/src/main/resources/application-common-dev.yml b/novel-common/src/main/resources/application-common-dev.yml
index bc9da55..4b8c9ce 100644
--- a/novel-common/src/main/resources/application-common-dev.yml
+++ b/novel-common/src/main/resources/application-common-dev.yml
@@ -23,7 +23,7 @@ spring:
#连接超时时间(毫秒)
timeout: 30000
datasource:
- url: jdbc:mysql://127.0.0.1:3306/novel_biz?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
+ url: jdbc:mysql://127.0.0.1:3306/novel_plus?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: test123456
driver-class-name: com.mysql.cj.jdbc.Driver
diff --git a/novel-common/src/main/resources/mybatis/generatorConfig.xml b/novel-common/src/main/resources/mybatis/generatorConfig.xml
index 984a5aa..4ec360d 100644
--- a/novel-common/src/main/resources/mybatis/generatorConfig.xml
+++ b/novel-common/src/main/resources/mybatis/generatorConfig.xml
@@ -1,21 +1,22 @@
-
+
-
+
+ userId="root"/>
-
+
@@ -23,16 +24,16 @@
targetPackage="com.java2nb.novel.entity"
targetProject="novel-common/src/main/java">
-
+
-
+
-
+
@@ -40,11 +41,11 @@
targetPackage="com.java2nb.novel.mapper"
targetProject="novel-common/src/main/java" type="XMLMAPPER">
-
+
-
+
diff --git a/novel-front/src/main/java/com/java2nb/novel/core/config/WebMvcConfig.java b/novel-front/src/main/java/com/java2nb/novel/core/config/WebMvcConfig.java
deleted file mode 100644
index f9552e0..0000000
--- a/novel-front/src/main/java/com/java2nb/novel/core/config/WebMvcConfig.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.java2nb.novel.core.config;
-
-import com.java2nb.novel.core.converter.DateConverter;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.format.FormatterRegistry;
-import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
-
-
-/**
- * @author xiongxiaoyang
- */
-@Configuration
-public class WebMvcConfig extends WebMvcConfigurerAdapter {
- @Override
- public void addFormatters(FormatterRegistry registry) {
- registry.addConverter(new DateConverter());
- }
-}
diff --git a/novel-front/src/main/java/com/java2nb/novel/core/listener/StarterListener.java b/novel-front/src/main/java/com/java2nb/novel/core/listener/StarterListener.java
index 7ae5c58..41d5a5f 100644
--- a/novel-front/src/main/java/com/java2nb/novel/core/listener/StarterListener.java
+++ b/novel-front/src/main/java/com/java2nb/novel/core/listener/StarterListener.java
@@ -1,6 +1,8 @@
package com.java2nb.novel.core.listener;
import com.java2nb.novel.core.config.WebsiteProperties;
+import com.java2nb.novel.entity.WebsiteInfo;
+import com.java2nb.novel.mapper.WebsiteInfoMapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@@ -10,6 +12,7 @@ import javax.servlet.annotation.WebListener;
/**
* 启动监听器
+ *
* @author xiongxiaoyang
*/
@WebListener
@@ -17,12 +20,21 @@ import javax.servlet.annotation.WebListener;
@RequiredArgsConstructor
public class StarterListener implements ServletContextListener {
- private final WebsiteProperties websiteConfig;
+ private final WebsiteProperties websiteProperties;
+ private final WebsiteInfoMapper websiteInfoMapper;
@Override
public void contextInitialized(ServletContextEvent sce) {
- sce.getServletContext().setAttribute("website",websiteConfig);
-
+ sce.getServletContext()
+ .setAttribute("website", websiteInfoMapper.selectByPrimaryKey(1L).orElse(new WebsiteInfo() {{
+ setName(websiteProperties.getName());
+ setDomain(websiteProperties.getDomain());
+ setKeyword(websiteProperties.getKeyword());
+ setDescription(websiteProperties.getDescription());
+ setQq(websiteProperties.getQq());
+ setLogo("/images/logo.png");
+ setLogoDark("/images/logo_white.png");
+ }}));
}
}
diff --git a/novel-front/src/main/resources/application-dev.yml b/novel-front/src/main/resources/application-dev.yml
index 83ae91e..d209c49 100644
--- a/novel-front/src/main/resources/application-dev.yml
+++ b/novel-front/src/main/resources/application-dev.yml
@@ -1,13 +1,13 @@
spring:
profiles:
- include: [common-dev]
+ include: [ common-dev ]
pic:
save:
type: 1 #图片保存方式, 1不保存,使用爬取的网络图片 ,2保存在自己的存储介质
storage: local #存储介质,local:本地,OSS:阿里云对象存储,fastDfs:分布式文件系统
- path: /Users/xiongxiaoyang/java #图片保存路径
+ path: /Users/xiongxiaoyang/java/ #图片保存路径
diff --git a/novel-front/src/main/resources/templates/book/book_content.html b/novel-front/src/main/resources/templates/book/book_content.html
index 0af0618..ea960d8 100644
--- a/novel-front/src/main/resources/templates/book/book_content.html
+++ b/novel-front/src/main/resources/templates/book/book_content.html
@@ -1,12 +1,14 @@
-
-
+
-
-
-
-
+
+
+
+
@@ -25,13 +27,13 @@
-
@@ -42,6 +44,8 @@
+
+
@@ -53,29 +57,35 @@
-
首页 >
+ 首页 >
>
@@ -85,10 +95,13 @@
@@ -98,7 +111,8 @@
@@ -107,8 +121,10 @@
此章为VIP章节,需要订阅后才能继续阅读
@@ -159,18 +180,31 @@
阅读主题:
+ href="javascript:void(0);" title="白色" onclick="javascript:BookDetail.SetBackUpColor(1);">
正文字体: 雅黑 宋体 楷书
+ href="javascript:void(0);"
+ onclick="javascript:BookDetail.SetReadFontFamily(0);">雅黑
+ 宋体 楷书
+
字体大小: A-
- 16A+
+ onclick="javascript:BookDetail.SetReadFont(-2);">A-
+ 16A+
@@ -208,30 +242,32 @@
-->
-
@@ -42,6 +44,8 @@