From 3d2e9b6dfaf196f99b0aa317c6e2cf929feb1829 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A8=8B=E5=BA=8F=E5=91=98=E5=B0=8F=E5=A2=A8?= <2291200076@qq.com> Date: Wed, 6 Apr 2022 22:52:07 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=8E=E5=8F=B0=E6=B7=BB=E5=8A=A0=E5=9B=BE?= =?UTF-8?q?=E4=B9=A6=E3=80=81=E4=BF=AE=E6=94=B9=E5=9B=BE=E4=B9=A6=E3=80=81?= =?UTF-8?q?=E4=B9=A6=E7=B1=8D=E7=AE=A1=E7=90=86=E5=88=97=E8=A1=A8=E9=A1=B5?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E5=AE=8C=E6=88=90=EF=BC=9B=E4=BF=AE=E6=AD=A3?= =?UTF-8?q?=E4=B8=80=E5=A4=84=E6=95=B0=E6=8D=AE=E6=B8=B2=E6=9F=93=E9=94=99?= =?UTF-8?q?=E8=AF=AF=EF=BC=9B=E4=B8=80=E4=BA=9B=E5=B0=8F=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../javascripts/dashboard/getValidateUtils.js | 2 +- .../dashboard/renderFormControls.js | 7 ++ .../public/assets/javascripts/searchBooks.js | 6 +- bookshelfplus-frontend/routes/index.js | 39 ++++----- .../views/dashboard/admin/BookManage.html | 82 ++++++++++++++++++- ...Manage_Add.html => BookManage_Detail.html} | 55 ++++++++++++- .../views/dashboard/form.html | 12 ++- .../views/dashboard/index.html | 4 +- .../views/dashboard/table.html | 70 ++++++++++++++++ bookshelfplus-frontend/views/search.html | 2 - .../Controller/Controller/BookController.java | 38 ++++++--- .../Service/Impl/BookServiceImpl.java | 13 ++- .../Model/ThirdPartyUserAuthModel.java | 2 + .../Service/Service/BookService.java | 8 ++ 14 files changed, 288 insertions(+), 52 deletions(-) rename bookshelfplus-frontend/views/dashboard/admin/{BookManage_Add.html => BookManage_Detail.html} (82%) create mode 100644 bookshelfplus-frontend/views/dashboard/table.html diff --git a/bookshelfplus-frontend/public/assets/javascripts/dashboard/getValidateUtils.js b/bookshelfplus-frontend/public/assets/javascripts/dashboard/getValidateUtils.js index ac795bd..7d16a33 100644 --- a/bookshelfplus-frontend/public/assets/javascripts/dashboard/getValidateUtils.js +++ b/bookshelfplus-frontend/public/assets/javascripts/dashboard/getValidateUtils.js @@ -186,7 +186,7 @@ function getValidateUtils() { // 返回结果 isValid: function () { - console.log("验证内容", this.validateValue, "验证结果", this.result, "错误信息", this.msg); + // console.log("验证内容", this.validateValue, "验证结果", this.result, "错误信息", this.msg); return { result: this.result, msg: this.msg.join(";") diff --git a/bookshelfplus-frontend/public/assets/javascripts/dashboard/renderFormControls.js b/bookshelfplus-frontend/public/assets/javascripts/dashboard/renderFormControls.js index ccb7b8f..d600cff 100644 --- a/bookshelfplus-frontend/public/assets/javascripts/dashboard/renderFormControls.js +++ b/bookshelfplus-frontend/public/assets/javascripts/dashboard/renderFormControls.js @@ -22,6 +22,13 @@ function renderElements(control) { element.appendChild(childElement); }); } + + // select 下拉框直接设置 value 会不生效,需要等其插入 DOM 之后再操作 + if (control.tag == "select") { + setTimeout(function () { + element.value = control.attr.value; + }, 0); + } return element; } diff --git a/bookshelfplus-frontend/public/assets/javascripts/searchBooks.js b/bookshelfplus-frontend/public/assets/javascripts/searchBooks.js index d19525e..318313c 100644 --- a/bookshelfplus-frontend/public/assets/javascripts/searchBooks.js +++ b/bookshelfplus-frontend/public/assets/javascripts/searchBooks.js @@ -13,7 +13,7 @@ function search({ tableElementId = "", searchText = "", categoryId = 0 }) { var mainDivWidth = 80/*vw*/; // 定义div的宽度(用于计算表格中的数据的显示长度) var columnWidth = [23, 17, 30, 10, 20]; renderData.push({ - 书名: ` + 书名: ` ${element.bookName} @@ -56,7 +56,9 @@ function search({ tableElementId = "", searchText = "", categoryId = 0 }) { } // 渲染后重新获取一次字体 - fontmin(getPageText()); + if (typeof (fontmin) === "function") { + fontmin(getPageText()); + } } else { alert(`出错啦!${data.errMsg} (错误码: ${data.errCode}) `); } diff --git a/bookshelfplus-frontend/routes/index.js b/bookshelfplus-frontend/routes/index.js index 93af779..9c9676f 100644 --- a/bookshelfplus-frontend/routes/index.js +++ b/bookshelfplus-frontend/routes/index.js @@ -72,7 +72,6 @@ router.get('/callback/:platform', function (req, res) { }); router.get('/dashboard/:group/:page/:subpage?', function (req, res) { - // baseTemplate 基于哪个html模板渲染页面 // pageTemplate 引入这个文件中的页面脚本 if (req.params.group === "admin") { @@ -83,13 +82,13 @@ router.get('/dashboard/:group/:page/:subpage?', function (req, res) { }, "book-manage": { title: "书籍管理", - baseTemplate: "blank", + baseTemplate: "table", pageTemplate: "BookManage", childPage: { - "add": { - title: "添加书籍", + "detail": { + title: req.query.id ? "修改书籍" : "添加书籍", baseTemplate: "form", - pageTemplate: "BookManage_Add", + pageTemplate: "BookManage_Detail", }, } }, @@ -140,29 +139,17 @@ router.get('/dashboard/:group/:page/:subpage?', function (req, res) { var headText = "用户中心"; } - // function isChildPage(page) { - // console.log(page); - // // 查找 dashboardPage 中每一项的 childPage 字段,并与 page 比较 - // for (var key in dashboardPage) { - // console.log(key); - // if (dashboardPage[key].childPage && dashboardPage[key].childPage[page]) { - // return true; - // } - // } - // return false; - // } - - console.log("req.params.page\t\t" + req.params.page) - console.log("req.params.subpage\t" + req.params.subpage) // 如果请求的页面在 dashboardPage 中 if (Object.keys(dashboardPage).indexOf(req.params.page) > -1) { // 当前请求的页面 var currentPage = dashboardPage[req.params.page]; - // 如果请求的就是主页面,或者当前页没有子页面,则渲染主页面 - if (!req.params.subpage || !currentPage.childPage || Object.keys(currentPage.childPage).indexOf(req.params.subpage) === -1) { - console.log("page"); + // 如果请求的就是主页面,或者当前页没有子页面 + if (!req.params.subpage) { + // 渲染主页面 + console.log("page", req.params.page, req.params.subpage); res.render(`dashboard/${currentPage.baseTemplate}`, { + pageUrl: (req._parsedUrl.pathname + "/").replace("//", "/"), htmlTitle: getPageTitle(headText), title: currentPage.title, pageTemplate: "./" + req.params.group + "/" + currentPage.pageTemplate + ".html", @@ -171,10 +158,16 @@ router.get('/dashboard/:group/:page/:subpage?', function (req, res) { page: req.params.page, }); } else { + // 渲染子页面 + if (!currentPage.childPage || Object.keys(currentPage.childPage).indexOf(req.params.subpage) === -1) { + // 请求的子页面不存在,直接返回404 + throw new Error("404 Not Found"); + } // 如果当前 page 有 subpage,则渲染子页面 var currentSubPage = currentPage.childPage[req.params.subpage]; - console.log("subpage"); + console.log("subpage", req.params.page, req.params.subpage); res.render(`dashboard/${currentSubPage.baseTemplate}`, { + pageUrl: (req._parsedUrl.pathname + "/").replace("//", "/"), htmlTitle: getPageTitle(headText), title: currentSubPage.title, pageTemplate: "./" + req.params.group + "/" + currentSubPage.pageTemplate + ".html", diff --git a/bookshelfplus-frontend/views/dashboard/admin/BookManage.html b/bookshelfplus-frontend/views/dashboard/admin/BookManage.html index 4697c8f..0ff0772 100644 --- a/bookshelfplus-frontend/views/dashboard/admin/BookManage.html +++ b/bookshelfplus-frontend/views/dashboard/admin/BookManage.html @@ -1,3 +1,81 @@

- 添加书籍 -

\ No newline at end of file + 添加书籍 +

+ + \ No newline at end of file diff --git a/bookshelfplus-frontend/views/dashboard/admin/BookManage_Add.html b/bookshelfplus-frontend/views/dashboard/admin/BookManage_Detail.html similarity index 82% rename from bookshelfplus-frontend/views/dashboard/admin/BookManage_Add.html rename to bookshelfplus-frontend/views/dashboard/admin/BookManage_Detail.html index f63aa1d..7a8ab2b 100644 --- a/bookshelfplus-frontend/views/dashboard/admin/BookManage_Add.html +++ b/bookshelfplus-frontend/views/dashboard/admin/BookManage_Detail.html @@ -1,27 +1,59 @@

+ 连续录入

@@ -85,9 +90,10 @@ function formSubmit({ type = 'POST', url = '', + data = {}, success = (response) => { console.log(response) } }) { - var data = {}; + var data = data || {}; for (var i = 0; i < controlsProfile.length; i++) { const controlsProfileItem = controlsProfile[i]; var control = document.getElementById(controlsProfileItem.attr.id); @@ -98,7 +104,7 @@ } var name = control.name; var value = control.value; - console.log("name:", name, "value:", value, "control:", control); + // console.log("name:", name, "value:", value, "control:", control); var validateResult = controlsProfileItem.validate(value); if (validateResult.result) { data[name] = value; diff --git a/bookshelfplus-frontend/views/dashboard/index.html b/bookshelfplus-frontend/views/dashboard/index.html index 08e9053..7f52484 100644 --- a/bookshelfplus-frontend/views/dashboard/index.html +++ b/bookshelfplus-frontend/views/dashboard/index.html @@ -35,7 +35,9 @@
<% Object.keys(dashboardPage).forEach(item => { %> - <%= dashboardPage[item].title %> + <% if (item.indexOf("index") == -1) { /* 跳过 仪表盘 */ %> + <%= dashboardPage[item].title %> + <% } %> <% }); %>
diff --git a/bookshelfplus-frontend/views/dashboard/table.html b/bookshelfplus-frontend/views/dashboard/table.html new file mode 100644 index 0000000..61c39b9 --- /dev/null +++ b/bookshelfplus-frontend/views/dashboard/table.html @@ -0,0 +1,70 @@ + + + + <%- include("./component/header.html"); %> + + + + <%- include("./component/navbar.html"); %> +
+

<%= title %>

+
+ <% if ( pageTemplate != "" ) { %> + + <%- include(pageTemplate); %> + <% } %> + + +
+
+
+ <%- include("./component/footer.html"); %> + + + + + + + + \ No newline at end of file diff --git a/bookshelfplus-frontend/views/search.html b/bookshelfplus-frontend/views/search.html index c3d2c42..caf4fed 100644 --- a/bookshelfplus-frontend/views/search.html +++ b/bookshelfplus-frontend/views/search.html @@ -10,7 +10,6 @@ #result-table { width: 100%; - /* border: 1px solid black; */ margin-top: 30px; line-height: 2.3em; } @@ -21,7 +20,6 @@ tr a { cursor: pointer; - /* cursor: alias; */ } diff --git a/bookshelfplus/src/main/java/plus/bookshelf/Controller/Controller/BookController.java b/bookshelfplus/src/main/java/plus/bookshelf/Controller/Controller/BookController.java index 9767c83..3ea2fda 100644 --- a/bookshelfplus/src/main/java/plus/bookshelf/Controller/Controller/BookController.java +++ b/bookshelfplus/src/main/java/plus/bookshelf/Controller/Controller/BookController.java @@ -117,19 +117,21 @@ public class BookController extends BaseController { return CommonReturnType.create(favoritesStatus); } - @ApiOperation(value = "【管理员】添加书籍", notes = "管理员在后台添加书籍") - @RequestMapping(value = "add", method = {RequestMethod.GET}) + @ApiOperation(value = "【管理员】添加/修改书籍", notes = "管理员在后台添加/修改书籍(bookId 传 0 或 null 或 不传 即为添加)") + @RequestMapping(value = "detail", method = {RequestMethod.POST}, consumes = {CONTENT_TYPE_FORMED}) @ResponseBody - public CommonReturnType add(@RequestParam(value = "token", required = false) String token, - @RequestParam(required = false, value = "bookName") String bookName, - @RequestParam(required = false, value = "description") String description, - @RequestParam(required = false, value = "categoryId") Integer categoryId, - @RequestParam(required = false, value = "publishingHouse") String publishingHouse, - @RequestParam(required = false, value = "language") String language, - @RequestParam(required = false, value = "copyright") String copyright, - @RequestParam(required = false, value = "isDelete") Boolean isDelete, - @RequestParam(required = false, value = "thumbnail") String thumbnail, - @RequestParam(required = false, value = "author") String author) throws BusinessException { + public CommonReturnType detail(@RequestParam(value = "token", required = false) String token, + @RequestParam(required = false, value = "id") Integer bookId, + @RequestParam(required = false, value = "bookName") String bookName, + @RequestParam(required = false, value = "description") String description, + @RequestParam(required = false, value = "categoryId") Integer categoryId, + @RequestParam(required = false, value = "publishingHouse") String publishingHouse, + @RequestParam(required = false, value = "language") String language, + @RequestParam(required = false, value = "copyright") String copyright, + // 【前端未提交到后端的参数】 isDelete thumbnail + @RequestParam(required = false, value = "isDelete") Boolean isDelete, + @RequestParam(required = false, value = "thumbnail") String thumbnail, + @RequestParam(required = false, value = "author") String author) throws BusinessException { // 已经在 getUserByToken 方法中判断了 token 为空、不合法;用户不存在情况,此处无需再判断 UserModel userModel = userService.getUserByToken(redisTemplate, token); @@ -149,7 +151,17 @@ public class BookController extends BaseController { bookModel.setCategory(categoryModel); } - Integer affectRows = bookService.addBook(bookModel); + Integer affectRows = 0; + if (bookId == null || bookId == 0) { + // 新增图书 + isDelete = false; + affectRows = bookService.addBook(bookModel); + } else { + //修改图书 + bookModel.setId(bookId); + affectRows = bookService.modifyBook(bookModel); + } + if (affectRows > 0) { return CommonReturnType.create("success"); } else { diff --git a/bookshelfplus/src/main/java/plus/bookshelf/Service/Impl/BookServiceImpl.java b/bookshelfplus/src/main/java/plus/bookshelf/Service/Impl/BookServiceImpl.java index 04a934f..7d8fd65 100644 --- a/bookshelfplus/src/main/java/plus/bookshelf/Service/Impl/BookServiceImpl.java +++ b/bookshelfplus/src/main/java/plus/bookshelf/Service/Impl/BookServiceImpl.java @@ -74,7 +74,6 @@ public class BookServiceImpl implements BookService { @Override public Integer addBook(BookModel bookModel) throws BusinessException { - // 校验入参 ValidationResult result = validator.validate(bookModel); if (result.isHasErrors()) { @@ -85,6 +84,18 @@ public class BookServiceImpl implements BookService { return bookDOMapper.insertSelective(bookDO); } + @Override + public Integer modifyBook(BookModel bookModel) throws BusinessException { + // 校验入参 + ValidationResult result = validator.validate(bookModel); + if (result.isHasErrors()) { + throw new BusinessException(BusinessErrorCode.PARAMETER_VALIDATION_ERROR, result.getErrMsg()); + } + + BookDO bookDO = convertToDataObjecct(bookModel); + return bookDOMapper.updateByPrimaryKeySelective(bookDO); + } + /** * 用户收藏书籍 * diff --git a/bookshelfplus/src/main/java/plus/bookshelf/Service/Model/ThirdPartyUserAuthModel.java b/bookshelfplus/src/main/java/plus/bookshelf/Service/Model/ThirdPartyUserAuthModel.java index 2783b53..4e4b9c2 100644 --- a/bookshelfplus/src/main/java/plus/bookshelf/Service/Model/ThirdPartyUserAuthModel.java +++ b/bookshelfplus/src/main/java/plus/bookshelf/Service/Model/ThirdPartyUserAuthModel.java @@ -7,7 +7,9 @@ public class ThirdPartyUserAuthModel { private Integer id; + // 用户 Id private String userId; + // 用户第三方授权 Id private String thirdPartyUserId; } diff --git a/bookshelfplus/src/main/java/plus/bookshelf/Service/Service/BookService.java b/bookshelfplus/src/main/java/plus/bookshelf/Service/Service/BookService.java index a2ff146..2af8019 100644 --- a/bookshelfplus/src/main/java/plus/bookshelf/Service/Service/BookService.java +++ b/bookshelfplus/src/main/java/plus/bookshelf/Service/Service/BookService.java @@ -31,6 +31,14 @@ public interface BookService { */ Integer addBook(BookModel bookModel) throws BusinessException; + /** + * 修改书籍 + * @param bookModel + * @return + * @throws BusinessException + */ + Integer modifyBook(BookModel bookModel) throws BusinessException; + /** * 用户收藏书籍 *