├── .autod.conf.js
├── .eslintignore
├── .eslintrc
├── .gitignore
├── .travis.yml
├── README.md
├── app.js
├── app
├── controller
│ ├── book.js
│ ├── category.js
│ ├── login.js
│ ├── press.js
│ └── users.js
├── extend
│ ├── context.js
│ ├── helper.js
│ └── service.js
├── middleware
│ ├── userAdmin.js
│ └── userRequired.js
├── model
│ ├── book.js
│ ├── borrow.js
│ ├── category.js
│ ├── press.js
│ ├── session.js
│ └── users.js
├── public
│ └── web
│ │ ├── index.html
│ │ └── static
│ │ ├── config.json
│ │ ├── css
│ │ └── app.c4fc50bfa01b4a5dc403b94d04ddafbb.css
│ │ ├── fonts
│ │ ├── ionicons.05acfdb.woff
│ │ ├── ionicons.24712f6.ttf
│ │ └── ionicons.2c2ae06.eot
│ │ ├── img
│ │ ├── error.77e1571.svg
│ │ ├── ionicons.621bd38.svg
│ │ └── login-bg.fcd5af2.jpg
│ │ ├── imgs
│ │ ├── error.svg
│ │ ├── img-bg.svg
│ │ └── login-bg.jpg
│ │ └── js
│ │ ├── 0.069c858b0d3253108742.js
│ │ ├── 1.4c04ebd6a0bee84e9cd2.js
│ │ ├── 10.98cf788450ccae84789f.js
│ │ ├── 13.65ca7d9fd331167d52a0.js
│ │ ├── 14.de872439b6cd475499f4.js
│ │ ├── 15.01119e2756993b039d15.js
│ │ ├── 16.4a2d1ba9b186b7ff6b79.js
│ │ ├── 17.3e973acf4871cf6865e0.js
│ │ ├── 2.ad89e0f6b3f1308069ed.js
│ │ ├── 3.ad59646f96280e14c711.js
│ │ ├── 4.375c2c790dbfec7b7194.js
│ │ ├── 5.eac5d73c8c2be14701e0.js
│ │ ├── 6.41ff0a10f7b562b97646.js
│ │ ├── 7.ebeca0fe01963f060080.js
│ │ ├── 8.8bf46a74f45c27460032.js
│ │ ├── 9.8cdf3fdd6538b7a997dd.js
│ │ ├── app.9877f13a400bccaa7b69.js
│ │ ├── manifest.57e5dc330eceeed802b8.js
│ │ └── vendor.13c40d636e8abcb4e5a7.js
├── router.js
├── service
│ ├── book.js
│ ├── category.js
│ ├── charts.js
│ ├── press.js
│ └── users.js
└── utils
│ └── utils.js
├── appveyor.yml
├── config
├── config.default.js
└── plugin.js
├── init
├── initData.js
├── passLocal.js
└── session.js
├── package.json
└── test
└── app
└── controller
└── home.test.js
/.autod.conf.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | module.exports = {
4 | write: true,
5 | prefix: '^',
6 | plugin: 'autod-egg',
7 | test: [
8 | 'test',
9 | 'benchmark',
10 | ],
11 | dep: [
12 | 'egg',
13 | 'egg-scripts',
14 | ],
15 | devdep: [
16 | 'egg-ci',
17 | 'egg-bin',
18 | 'egg-mock',
19 | 'autod',
20 | 'autod-egg',
21 | 'eslint',
22 | 'eslint-config-egg',
23 | 'webstorm-disable-index',
24 | ],
25 | exclude: [
26 | './test/fixtures',
27 | './dist',
28 | ],
29 | };
30 |
31 |
--------------------------------------------------------------------------------
/.eslintignore:
--------------------------------------------------------------------------------
1 | coverage
2 |
--------------------------------------------------------------------------------
/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "eslint-config-egg"
3 | }
4 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | logs/
2 | npm-debug.log
3 | yarn-error.log
4 | node_modules/
5 | package-lock.json
6 | yarn.lock
7 | coverage/
8 | .idea/
9 | run/
10 | .DS_Store
11 | *.sw*
12 | *.un~
13 |
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | sudo: false
2 | language: node_js
3 | node_js:
4 | - '8'
5 | install:
6 | - npm i npminstall && npminstall
7 | script:
8 | - npm run ci
9 | after_script:
10 | - npminstall codecov && codecov
11 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | **前端**
2 |
3 | [前端地址](https://github.com/fengyaogit123/bookqd.git)
4 | [后端地址](https://github.com/fengyaogit123/bookAdmin.git)
5 |
6 | 觉得不错给个star,谢谢~
7 |
8 | # 介绍
9 | 由于最近需要做一个简单的图书管理系统,于是就用了vue前后端分离的开发模式
10 | 模块
11 | 1.分类管理
12 | 2.出版管理
13 | 3.读者管理
14 | 4.图书管理
15 | 5.借阅管理
16 | 6.借阅记录
17 | 7.图书概览
18 | 另外还有主题功能,有多个主题可供选择(主题代码被我注释了,在store/modules/menu.js下)
19 | 可以全屏放大缩小
20 | ## 技术栈
21 | ```js
22 | //前端 https://github.com/fengyaogit123/bookqd.git
23 | 1.vue
24 | 2.vue-router
25 | 3.vuex
26 | 4.iview
27 | 5.axios
28 |
29 | //后端 https://github.com/fengyaogit123/bookAdmin.git
30 | 1.Node
31 | 2.Eggjs
32 | 3.Mongodb + Mongoose
33 |
34 | ```
35 |
36 | ## 安装
37 | ```js
38 | //使用前端之前 需要后端的项目已经运行 详情请看
39 | //https://github.com/fengyaogit123/bookAdmin.git
40 | $ git clone https://github.com/fengyaogit123/bookqd.git
41 | $ cd bookqd
42 | $ npm i
43 | $ npm run dev
44 |
45 | //打开地址 http://127.0.0.1:9898 查看
46 | //数据库需要插入一条初始admin的数据
47 | db.users.insert({
48 | "userName":"admin",
49 | "password":"admin",
50 | "isAdmin": true
51 | })
52 | ```
53 |
54 | **后端**
55 | # 介绍
56 | 由于最近需要做一个简单的图书管理系统,于是就用了vue前后端分离的开发模式
57 |
58 | ## 技术栈
59 | ```js
60 | //前端 https://github.com/fengyaogit123/bookqd.git
61 | 1.vue
62 | 2.vue-router
63 | 3.vuex
64 | 4.iview
65 | 5.axios
66 |
67 | //后端 https://github.com/fengyaogit123/bookAdmin.git
68 | 1.Node
69 | 2.Eggjs
70 | 3.Mongodb + Mongoose
71 |
72 | ```
73 |
74 | ## 安装
75 | ```js
76 | //确认已经安装mongodb 这里默认配置是
77 | config.mongoose = {
78 | url: 'mongodb://127.0.0.1:27017/book',
79 | options: {},
80 | };
81 | //没有设置账号密码 ,确保mongo服务已经打开
82 |
83 | //前端项目地址 https://github.com/fengyaogit123/bookqd.git
84 | $ git clone https://github.com/fengyaogit123/bookAdmin.git
85 | $ cd bookAdmin
86 | $ npm i
87 | $ npm run dev
88 |
89 | //打开地址 http://127.0.0.1:7001/public/web/index.html 查看
90 | ```
91 | ## 预览
92 | 
93 | 登录
94 | 
95 | 图书简介
96 | 
97 | 图书借还
98 | 
99 | 图书管理
100 | 
101 | 读者管理
102 | 
103 | 借阅记录
104 | 
105 | 出版管理以及分类管理
106 |
107 | ## 参考
108 | iView GitHub:https://github.com/iview/iview
109 | iView Admin GitHub:https://github.com/iview/iview-admin
110 |
--------------------------------------------------------------------------------
/app.js:
--------------------------------------------------------------------------------
1 | module.exports = app => {
2 | require('./init/session')(app);
3 | require('./init/passLocal')(app);
4 | app.ready(async () => {
5 | require('./init/initData')(app);
6 | });
7 | };
8 |
--------------------------------------------------------------------------------
/app/controller/book.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const { Controller } = require("egg");
3 | const Modal = "book"
4 | class BookController extends Controller {
5 | /** ------------------base------------------- */
6 | async create() {
7 | const rule = {
8 | name: { type: "string", required: true, message: "必填项" },
9 | };
10 | const data = this.ctx.request.body;
11 | await this.ctx.validate(rule, data);
12 | this.ctx.body = await this.service[Modal].create(data)
13 | }
14 | async remove() {
15 | const rule = {
16 | ids: [{ type: "array", required: true, min: 1, message: "ids验证错误,应为不为空的数组" }],
17 | };
18 | const data = this.ctx.request.body;
19 | await this.ctx.validate(rule, data);
20 | this.ctx.body = await this.service[Modal].removeAll(data.ids)
21 | }
22 | async list() {
23 | this.ctx.body = await this.service[Modal].findList(this.ctx.query)
24 | }
25 | async update() {
26 | const rule = {
27 | _id: [{ type: "string", required: true, message: "id不存在" }],
28 | };
29 | const data = this.ctx.request.body;
30 | await this.ctx.validate(rule, data);
31 | this.ctx.body = await this.service[Modal].update(this.ctx.request.body)
32 | }
33 | /**------------------ end ------------------- */
34 | //借还书
35 | async borrow() {
36 | const rule = {
37 | _id: [{ type: "string", required: true, message: "id不存在" }],
38 | userId:[{ type: "string", required: true, message: "读者不存在" }],
39 | borrowStatus:[{ type: "string", required: true, message: "borrowStatus 为空" }],
40 | };
41 | const data = this.ctx.request.body;
42 | await this.ctx.validate(rule, data);
43 | this.ctx.body = await this.service[Modal].borrow(data)
44 | }
45 | //查询用户借阅记录
46 | async record(){
47 | const rule = {
48 | userId:[{ type: "string", required: true, message: "读者不存在" }],
49 | };
50 | const data = this.ctx.query;
51 | await this.ctx.validate(rule, data);
52 | this.ctx.body = await this.service[Modal].record(data)
53 | }
54 | //统计前10
55 | async readingAmount(){
56 | this.ctx.body = await this.service.charts.readingAmount();
57 | }
58 | }
59 | module.exports = BookController;
60 |
--------------------------------------------------------------------------------
/app/controller/category.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const { Controller } = require("egg");
3 | const Modal = "category"
4 | class CategoryController extends Controller {
5 | /** ------------------base------------------- */
6 | async create() {
7 | const rule = {
8 | name: { type: "string", required: true, message: "必填项" },
9 | };
10 | const data = this.ctx.request.body;
11 | await this.ctx.validate(rule, data);
12 | this.ctx.body = await this.service[Modal].create(data)
13 | }
14 | async remove() {
15 | const rule = {
16 | ids: [{ type: "array", required: true, min: 1, message: "ids验证错误,应为不为空的数组" }],
17 | };
18 | const data = this.ctx.request.body;
19 | await this.ctx.validate(rule, data);
20 | this.ctx.body = await this.service[Modal].removeAll(data.ids)
21 | }
22 | async list() {
23 | this.ctx.body = await this.service[Modal].findList(this.ctx.query)
24 | }
25 | async update() {
26 | const rule = {
27 | _id: [{ type: "string", required: true, message: "id不存在" }],
28 | };
29 | this.ctx.body = await this.service[Modal].update(this.ctx.request.body)
30 | }
31 | /**------------------ end ------------------- */
32 | async allList() {
33 | this.ctx.body = await this.service[Modal].findList({
34 | size: 100000
35 | })
36 | }
37 | }
38 | module.exports = CategoryController;
39 |
--------------------------------------------------------------------------------
/app/controller/login.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const { Controller } = require("egg");
3 | class LoginController extends Controller {
4 | async authCallback() {
5 | if (this.ctx.user && this.ctx.user.status) {
6 | this.ctx.status = this.ctx.user.status;
7 | this.ctx.body = Object.assign({}, this.ctx.user, { code: 'Unauthorized' });
8 | return;
9 | }
10 | let user = this.ctx.user;
11 | if (user.password) {
12 | delete user.password
13 | }
14 | this.ctx.body = user;
15 | }
16 | async loginOut() {
17 | this.ctx.logout();
18 | this.ctx.body = "";
19 | }
20 | async checkcode() {
21 | let { code, imgbase64 } = await this.ctx.helper.getCheckCode()
22 | this.ctx.session.code = code;
23 | this.ctx.set("Content-Type", "image/png")
24 | this.ctx.body = imgbase64;
25 | }
26 | }
27 | module.exports = LoginController;
28 |
--------------------------------------------------------------------------------
/app/controller/press.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const { Controller } = require("egg");
3 | const Modal = "press"
4 | class PressController extends Controller {
5 | /** ------------------base------------------- */
6 | async create() {
7 | const rule = {
8 | name: { type: "string", required: true, message: "必填项" },
9 | };
10 | const data = this.ctx.request.body;
11 | await this.ctx.validate(rule, data);
12 | this.ctx.body = await this.service[Modal].create(data)
13 | }
14 | async remove() {
15 | const rule = {
16 | ids: [{ type: "array", required: true, min: 1, message: "ids验证错误,应为不为空的数组" }],
17 | };
18 | const data = this.ctx.request.body;
19 | await this.ctx.validate(rule, data);
20 | this.ctx.body = await this.service[Modal].removeAll(data.ids)
21 | }
22 | async list() {
23 | this.ctx.body = await this.service[Modal].findList(this.ctx.query)
24 | }
25 | async update() {
26 | const rule = {
27 | _id: [{ type: "string", required: true, message: "id不存在" }],
28 | };
29 | this.ctx.body = await this.service[Modal].update(this.ctx.request.body)
30 | }
31 | /**------------------ end ------------------- */
32 | async allList() {
33 | this.ctx.body = await this.service[Modal].findList({
34 | size: 100000
35 | })
36 | }
37 | }
38 | module.exports = PressController;
39 |
--------------------------------------------------------------------------------
/app/controller/users.js:
--------------------------------------------------------------------------------
1 | //用户
2 | 'use strict';
3 | const { Controller } = require("egg");
4 | const Modal = "users"
5 | class UserController extends Controller {
6 | /** ------------------base------------------- */
7 | async create() {
8 | const rule = {
9 | sex: { type: "string", required: true, message: "必填项" },
10 | name: { type: "string", required: true, message: "必填项" },
11 | };
12 | const data = this.ctx.request.body;
13 | await this.ctx.validate(rule, data);
14 | this.ctx.body = await this.service[Modal].create(data)
15 | }
16 | async remove() {
17 | const rule = {
18 | ids: [{ type: "array", required: true, min: 1, message: "ids验证错误,应为不为空的数组" }],
19 | };
20 | const data = this.ctx.request.body;
21 | await this.ctx.validate(rule, data);
22 | this.ctx.body = await this.service[Modal].removeAll(data.ids)
23 | }
24 | async list() {
25 | this.ctx.body = await this.service[Modal].findList(this.ctx.query)
26 | }
27 | async update(){
28 | const rule = {
29 | _id: [{ type: "string", required: true, message: "id不存在" }],
30 | };
31 | this.ctx.body = await this.service[Modal].update(this.ctx.request.body)
32 | }
33 | /**——————————————————————end—————————————————————— */
34 | }
35 | module.exports = UserController;
36 |
--------------------------------------------------------------------------------
/app/extend/context.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | const utils = require("../utils/utils");
3 | module.exports = {
4 | async validate(rule, data) {
5 | let result = await utils.validate(rule, data);
6 | result && this.throw(result.status, result.message);
7 | }
8 | };
9 |
--------------------------------------------------------------------------------
/app/extend/helper.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | const utils = require("../utils/utils");
3 | module.exports = Object.assign({}, utils);
4 |
--------------------------------------------------------------------------------
/app/extend/service.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | module.exports = app => {
3 | return class BaseService extends app.Service {
4 |
5 | };
6 | }
7 |
--------------------------------------------------------------------------------
/app/middleware/userAdmin.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | module.exports = (options) => {
3 | return async function (ctx, next) {
4 | const { user } = ctx;
5 | if (!user) {
6 | return ctx.throw(401, "请登录!");
7 | }
8 | if(!user.isAdmin){
9 | return ctx.throw(401, "您没有权限!");
10 | }
11 | await next();
12 | };
13 | };
14 |
--------------------------------------------------------------------------------
/app/middleware/userRequired.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | module.exports = (options) => {
3 | return async function (ctx, next) {
4 | const { user } = ctx;
5 | if (!user) {
6 | return ctx.throw(401, "请登录!");
7 | }
8 | await next();
9 | };
10 | };
11 |
--------------------------------------------------------------------------------
/app/model/book.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | module.exports = (app) => {
3 | const mongoose = app.mongoose;
4 | const Schema = mongoose.Schema;
5 | return mongoose.model('Book', new mongoose.Schema({
6 | name: String,//书名
7 | author: String,//作者
8 | desc: String,//描述
9 | borrowStatus: Number,//借阅状态 0 未借 1已借
10 | stock: Number,//库存
11 | borrowTotal: Number,//借阅次数
12 | category: { type: Schema.Types.ObjectId, ref: 'Category' },//类别
13 | press: { type: Schema.Types.ObjectId, ref: 'Press' },//出版社
14 | }, {
15 | versionKey: false,
16 | timestamps: true
17 | }));
18 | };
19 |
--------------------------------------------------------------------------------
/app/model/borrow.js:
--------------------------------------------------------------------------------
1 | //借书记录
2 | module.exports = (app) => {
3 | const mongoose = app.mongoose;
4 | const Schema = mongoose.Schema
5 | return mongoose.model('Borrow', new mongoose.Schema({
6 | book: { type: Schema.Types.ObjectId, ref: 'Book' },//书_id
7 | user: { type: Schema.Types.ObjectId, ref: 'Users' },//读者
8 | borrowStatus:Number,//借阅状态
9 | }, {
10 | versionKey: false,
11 | timestamps: true
12 | }));
13 | };
--------------------------------------------------------------------------------
/app/model/category.js:
--------------------------------------------------------------------------------
1 | //书类别
2 | module.exports = (app) => {
3 | const mongoose = app.mongoose;
4 | return mongoose.model('Category', new mongoose.Schema({
5 | name: String,//类别
6 | }, {
7 | versionKey: false,
8 | timestamps: true
9 | }));
10 | };
--------------------------------------------------------------------------------
/app/model/press.js:
--------------------------------------------------------------------------------
1 | //书类别
2 | module.exports = (app) => {
3 | const mongoose = app.mongoose;
4 | return mongoose.model('Press', new mongoose.Schema({
5 | name: String,//出版社名称
6 | }, {
7 | versionKey: false,
8 | timestamps: true
9 | }));
10 | };
--------------------------------------------------------------------------------
/app/model/session.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | module.exports = (app) => {
3 | const mongoose = app.mongoose;
4 | const Schema = mongoose.Schema;
5 | return mongoose.model('Session', new Schema({
6 | key: String,
7 | value: String
8 | }, {
9 | versionKey: false,
10 | }));
11 | };
12 |
--------------------------------------------------------------------------------
/app/model/users.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | module.exports = (app) => {
3 | const mongoose = app.mongoose;
4 | return mongoose.model('Users', new mongoose.Schema({
5 | userName: String,
6 | password: String,
7 | sex:String,//性别
8 | name:String,//姓名
9 | isAdmin:Boolean,//是否是管理员
10 | }, {
11 | versionKey: false,
12 | timestamps: true
13 | }));
14 | };
15 |
--------------------------------------------------------------------------------
/app/public/web/index.html:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/public/web/static/config.json:
--------------------------------------------------------------------------------
1 | {
2 | "title":"公告",
3 | "text":"公告内容",
4 | "logoText":"LOGO TEXT",
5 | "logoTextMin":"LOGO"
6 | }
--------------------------------------------------------------------------------
/app/public/web/static/fonts/ionicons.05acfdb.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fengyaogit123/bookAdmin/b4f3d7d2127fa0792e688cbcb933c56c36f488d3/app/public/web/static/fonts/ionicons.05acfdb.woff
--------------------------------------------------------------------------------
/app/public/web/static/fonts/ionicons.24712f6.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fengyaogit123/bookAdmin/b4f3d7d2127fa0792e688cbcb933c56c36f488d3/app/public/web/static/fonts/ionicons.24712f6.ttf
--------------------------------------------------------------------------------
/app/public/web/static/fonts/ionicons.2c2ae06.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fengyaogit123/bookAdmin/b4f3d7d2127fa0792e688cbcb933c56c36f488d3/app/public/web/static/fonts/ionicons.2c2ae06.eot
--------------------------------------------------------------------------------
/app/public/web/static/img/login-bg.fcd5af2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fengyaogit123/bookAdmin/b4f3d7d2127fa0792e688cbcb933c56c36f488d3/app/public/web/static/img/login-bg.fcd5af2.jpg
--------------------------------------------------------------------------------
/app/public/web/static/imgs/error.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/public/web/static/imgs/img-bg.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/public/web/static/imgs/login-bg.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fengyaogit123/bookAdmin/b4f3d7d2127fa0792e688cbcb933c56c36f488d3/app/public/web/static/imgs/login-bg.jpg
--------------------------------------------------------------------------------
/app/public/web/static/js/0.069c858b0d3253108742.js:
--------------------------------------------------------------------------------
1 | webpackJsonp([0],{"3AVb":function(n,e,r){"use strict";var t=r("Xxa5"),a=r.n(t),c=r("exGp"),s=r.n(c);e.a={methods:{pageChange:function(n){var e=this;return s()(a.a.mark(function r(){return a.a.wrap(function(r){for(;;)switch(r.prev=r.next){case 0:e.params.pageNo=n,e.showList();case 2:case"end":return r.stop()}},r,e)}))()},reset:function(n){var e=this;return s()(a.a.mark(function r(){return a.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:n&&n.resetFields();case 1:case"end":return e.stop()}},r,e)}))()},search:function(){var n=this;return s()(a.a.mark(function e(){return a.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:n.params.pageNo=1,n.showList();case 2:case"end":return e.stop()}},e,n)}))()},selectChange:function(n){var e=this;return s()(a.a.mark(function r(){return a.a.wrap(function(r){for(;;)switch(r.prev=r.next){case 0:e.rows=n;case 1:case"end":return r.stop()}},r,e)}))()},deletes:function(n){var e=this;return s()(a.a.mark(function r(){return a.a.wrap(function(r){for(;;)switch(r.prev=r.next){case 0:if(n&&0!=n.length||e.rows&&0!=e.rows.length){r.next=2;break}return r.abrupt("return",e.$Message.info("请选择删除的列表!"));case 2:e.$Modal.confirm({title:"提示",content:"是否确认删除?",onOk:function(){var r=s()(a.a.mark(function r(){return a.a.wrap(function(r){for(;;)switch(r.prev=r.next){case 0:e.confirmDel(n);case 1:case"end":return r.stop()}},r,e)}));return function(){return r.apply(this,arguments)}}(),onCancel:function(){e.cancelDel&&e.cancelDel()}});case 3:case"end":return r.stop()}},r,e)}))()}}}}});
--------------------------------------------------------------------------------
/app/public/web/static/js/1.4c04ebd6a0bee84e9cd2.js:
--------------------------------------------------------------------------------
1 | webpackJsonp([1],{"2qCu":function(t,e){},"3vSQ":function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});n("KExE"),n("1nuA");var s=n("SJI6"),a=n("oAV5"),o={name:"sidebar-menu",data:function(){return{home:"Workbench"}},computed:Object(s.mapState)({state:function(t){return t.menu},isHome:function(t){var e=t.users.userPermission;return-1!==(void 0===e?"":e).indexOf("sys.index")},openNames:function(t){return t.menu.openedArr},currPageName:function(t){return t.menu.currPageName}}),created:function(){},methods:{selectHandler:function(t){document.body.click(),this.$router.push({name:t})},changeMenu:function(t){this.$router.push({name:t})},openChange:function(t){this.$store.commit("menu/openedArr",t)}}},r={render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"sidebar-menu-con",class:{"sidebar-menu-sk":t.state.hideMenuText}},[t._m(0),t._v(" "),n("Menu",{directives:[{name:"show",rawName:"v-show",value:!t.state.hideMenuText,expression:"!state.hideMenuText"}],staticClass:"menu-po",attrs:{slot:"content","open-names":t.openNames,accordion:!0,theme:"light","active-name":t.currPageName},on:{"on-open-change":t.openChange,"on-select":t.selectHandler},slot:"content"},t._l(t.state.menus,function(e,s){return e.hide?t._e():n("MenuItem",{key:s,attrs:{name:e.routerName}},[n("Icon",{staticClass:"menu-icon",attrs:{type:e.icon}}),t._v(" "),n("span",{staticClass:"layout-text"},[t._v(t._s(e.name))])],1)})),t._v(" "),t._l(t.state.menus,function(e){return n("div",{directives:[{name:"show",rawName:"v-show",value:t.state.hideMenuText,expression:"state.hideMenuText"}],key:e.path,staticClass:"font-center"},[e.hide||e.children&&e.children.length>0?t._e():n("Button",{staticClass:"font-center-btn",attrs:{type:"text"},on:{click:function(n){t.changeMenu(e.routerName)}}},[e.icon?n("Icon",{staticClass:"menu-icon",attrs:{type:e.icon}}):t._e()],1),t._v(" "),!e.hide&&e.children&&e.children.length>0?n("Dropdown",{attrs:{placement:"right-start"},on:{"on-click":t.changeMenu}},[n("Button",{staticClass:"font-center-btn",attrs:{type:"text"}},[e.icon?n("Icon",{staticClass:"menu-icon",attrs:{type:e.icon}}):t._e()],1),t._v(" "),n("DropdownMenu",{staticStyle:{width:"150px"},attrs:{slot:"list"},slot:"list"},[t._l(e.children,function(e,s){return[n("DropdownItem",{key:s,staticStyle:{width:"150px"},attrs:{name:e.routerName}},[t._v("\n "+t._s(e.name)+"\n ")])]})],2)],1):t._e()],1)})],2)},staticRenderFns:[function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"logo-con"},[e("img",{attrs:{src:"",alt:""}})])}]};var i=n("VU/8")(o,r,!1,function(t){n("u0lY")},null,null).exports,c=n("Xxa5"),l=n.n(c),u=n("exGp"),m=n.n(u),d=(n("1I8c"),n("IuJc")),h={name:"header",data:function(){return{value:!1,isFullScreen:!1,loggTitleMin:d.logoTextMin,loggTitle:d.logoText}},created:function(){},computed:Object(s.mapState)({hideMenuText:function(t){return t.menu.hideMenuText},currentPath:function(t){return t.menu.currentPath},themeList:function(t){return t.menu.themeList},username:function(t){return t.users.users.name},companyName:function(t){return t.defaults.companyName}}),methods:{toggleClick:function(){this.$store.commit("menu/hideMenuText")},MenuClickItem:function(t){var e=this;return m()(l.a.mark(function n(){return l.a.wrap(function(n){for(;;)switch(n.prev=n.next){case 0:"outLogin"==t&&e.$store.dispatch("menu/logOutBtn");case 1:case"end":return n.stop()}},n,e)}))()},themeClickItem:function(t){this.$store.commit("menu/theme",t)}}},f={render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"header"},[n("div",{staticClass:"logo",style:{width:t.hideMenuText?"60px":"200px"}},[n("a",{attrs:{href:"#/home"}},[t.hideMenuText?n("p",[t._v(t._s(t.loggTitleMin))]):n("p",{staticClass:"expanded"},[t._v(t._s(t.loggTitle))])])]),t._v(" "),n("div",{staticClass:"top-nav-wrap"},[n("div",{staticClass:"navicon-con left hover",style:{transform:"rotateZ("+(t.hideMenuText?"-90":"0")+"deg)"},on:{click:t.toggleClick}},[n("Button",{attrs:{type:"text"}},[n("Icon",{attrs:{type:"navicon"}})],1)],1),t._v(" "),n("div",{staticClass:"bread"},[n("Breadcrumb",[t.currentPath[1]?n("BreadcrumbItem",[t._v(t._s(t.currentPath[1].title))]):t._e(),t._v(" "),t.currentPath[2]?n("BreadcrumbItem",{attrs:{to:t.currentPath[2].routerName}},[t._v(t._s(t.currentPath[2].title))]):t._e()],1)],1),t._v(" "),n("p",{staticClass:"company"},[t._v(t._s(t.companyName))]),t._v(" "),n("ul",{staticClass:"right color-paint"},[n("FullScreen",{staticClass:"liChild",model:{value:t.isFullScreen,callback:function(e){t.isFullScreen=e},expression:"isFullScreen"}}),t._v(" "),n("li",{staticClass:"hover theme liChild"},[n("Dropdown",{staticClass:"down",attrs:{trigger:"click"},on:{"on-click":t.themeClickItem}},[n("a",{attrs:{href:"javascript:void(0)"}},[n("Icon",{attrs:{type:"paintbucket",size:18}}),t._v(" "),n("Icon",{attrs:{type:"arrow-down-b"}})],1),t._v(" "),n("DropdownMenu",{attrs:{slot:"list"},slot:"list"},t._l(t.themeList,function(e,s){return n("DropdownItem",{key:s,attrs:{name:e.name}},[n("Row",{attrs:{type:"flex",justify:"center",align:"middle"}},[n("span",{staticStyle:{"margin-right":"10px"}},[n("Icon",{attrs:{size:20,type:"b"!==e.name.substr(0,1)?"happy-outline":"happy"}})],1),t._v(" "),n("span",[n("Icon",{attrs:{size:22,type:"record",color:e.element}})],1)])],1)}))],1)],1),t._v(" "),n("li",{staticClass:"hover last liChild"},[n("Dropdown",{staticClass:"down",attrs:{trigger:"click"},on:{"on-click":t.MenuClickItem}},[n("a",{attrs:{href:"javascript:void(0)"}},[n("p",{staticClass:"radius"},[n("Icon",{staticClass:"person",attrs:{type:"person"}})],1),t._v(" "),n("span",[t._v(" "+t._s(t.username))]),t._v(" "),n("Icon",{attrs:{type:"arrow-down-b"}})],1),t._v(" "),n("DropdownMenu",{attrs:{slot:"list"},slot:"list"},[n("DropdownItem",{attrs:{name:"outLogin"}},[t._v("退出登录")])],1)],1)],1)],1)])])},staticRenderFns:[]};var p=n("VU/8")(h,f,!1,function(t){n("RU9+")},null,null).exports,g={data:function(){return{tagBodyLeft:0,refsTag:[],tagsCount:1}},computed:Object(s.mapState)({pageList:function(t){return t.menu.pageList},currPageName:function(t){return t.menu.currPageName},root:function(t){return t.menu.root},tagsList:function(t){return t.menu.pageList}}),methods:{closeHandler:function(t){var e=t.name;this.$store.commit("menu/deletePageList",e)},toPage:function(t){var e=t.name;this.$store.commit("menu/toPage",e)},handleTagsOption:function(t){"closeAll"==t?this.$store.commit("menu/pageColoseAll",t):"clearOthers"==t&&this.$store.commit("menu/pageClearOthers"),this.tagBodyLeft=0},handlescroll:function(t){var e=t.type,n=0,s=0;"DOMMouseScroll"!=e&&"mousewheel"!=e||(n=t.wheelDelta?t.wheelDelta:40*-(t.detail||0)),n>0?s=Math.min(0,this.tagBodyLeft+n):this.$refs.scrollCon.offsetWidth-100-this.tagBodyLeft&&t.offsetLeft+t.offsetWidth<-this.tagBodyLeft+this.$refs.scrollCon.offsetWidth-100||(this.tagBodyLeft=-(t.offsetLeft-(this.$refs.scrollCon.offsetWidth-100-t.offsetWidth)+20))}},mounted:function(){var t=this;this.refsTag=this.$refs.tagsPageOpened,setTimeout(function(){t.refsTag.forEach(function(e,n){if(t.$route.name===e.name){var s=t.refsTag[n].$el;t.moveToView(s)}})},1),this.tagsCount=this.tagsList.length},watch:{$route:function(t){var e=this;this.$nextTick(function(){e.refsTag.forEach(function(n,s){if(t.name===n.name){var a=e.refsTag[s].$el;e.moveToView(a)}})}),this.tagsCount=this.tagsList.length}}},v={render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{ref:"scrollCon",staticClass:"route-box",on:{DOMMouseScroll:t.handlescroll,mousewheel:t.handlescroll}},[n("div",{staticClass:"route-close"},[n("Dropdown",{attrs:{trigger:"click",transfer:""},on:{"on-click":t.handleTagsOption}},[n("Button",{attrs:{size:"small",type:"primary"}},[n("span",[t._v("标签操作")]),t._v(" "),n("Icon",{attrs:{type:"arrow-down-b"}})],1),t._v(" "),n("DropdownMenu",{attrs:{slot:"list"},slot:"list"},[n("DropdownItem",{attrs:{name:"closeAll"}},[t._v("关闭所有")]),t._v(" "),n("DropdownItem",{attrs:{name:"clearOthers"}},[t._v("关闭其他")])],1)],1)],1),t._v(" "),n("div",{ref:"scrollBody",staticClass:"route-inner-scroll",style:{left:t.tagBodyLeft+"px"}},[n("transition-group",{attrs:{tag:"div",name:"taglist-moving-animation"}},t._l(t.pageList,function(e,s){return n("Tag",{key:s,ref:"tagsPageOpened",refInFor:!0,staticClass:"no-select",attrs:{name:e.name,type:"dot",closable:e.name!=t.root.name,color:t.currPageName==e.name?"blue":"default"},on:{"on-close":function(n){t.closeHandler(e)}},nativeOn:{click:function(n){t.toPage(e)}}},[t._v("\n "+t._s(e.title)+"\n ")])}))],1)])},staticRenderFns:[]};var _=n("VU/8")(g,v,!1,function(t){n("TsXu")},null,null).exports,y=(a.a.storage,{name:"header",components:{SidebarMenu:i,MainHeader:p,RouteBox:_},computed:Object(s.mapState)({menu:function(t){return t.menu.menus},hideMenuText:function(t){return t.menu.hideMenuText},userName:function(t){return t.users.userName},roleName:function(t){return t.users.roleName},cacheStr:function(t){return t.cache.cacheList.join(",")}}),created:function(){}}),C={render:function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"main"},[e("MainHeader"),this._v(" "),e("SidebarMenu"),this._v(" "),e("div",{staticClass:"single-page-con",class:{"single-page-sk":this.hideMenuText}},[e("RouteBox"),this._v(" "),e("div",{staticClass:"single-page"},[e("keep-alive",{attrs:{include:this.cacheStr}},[e("router-view")],1)],1)],1)],1)},staticRenderFns:[]};var x=n("VU/8")(y,C,!1,function(t){n("2qCu")},null,null);e.default=x.exports},IuJc:function(t,e){t.exports={title:"公告",text:"公告内容",logoText:"LOGO TEXT",logoTextMin:"LOGO"}},"RU9+":function(t,e){},TsXu:function(t,e){},u0lY:function(t,e){}});
--------------------------------------------------------------------------------
/app/public/web/static/js/10.98cf788450ccae84789f.js:
--------------------------------------------------------------------------------
1 | webpackJsonp([10],{dmxn:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var a=n("Dd8w"),r=n.n(a),s=n("Xxa5"),o=n.n(s),c=n("exGp"),i=n.n(c),l=n("0jG4"),u=(n("YaEn"),{name:"Category",mixins:[n("3AVb").a],components:{NewRow:function(){return n.e(17).then(n.bind(null,"WBdr"))}},data:function(){return{loading:!1,data:[],count:0,params:{pageNo:1,size:20,name:""},rows:[],columns:function(){var t=this;return[{type:"selection",width:60,align:"center"},{title:"_id",width:200,key:"_id",align:"center"},{title:"名称",key:"name",align:"center"},{title:"操作",align:"center",width:150,render:function(e,n){var a=n.row;return e("div",[e(Button,{class:"link",attrs:{type:"text",size:"small"},on:{click:function(){t.modal.show=!0,t.modal.row=a}}},["编辑"]),e(Button,{class:"link",attrs:{type:"text",size:"small"},on:{click:function(){return t.deletes([a._id])}}},["删除"])])}}]}.call(this),modal:{show:!1,row:null}}},created:function(){this.showList()},methods:{addrow:function(){var t=this;return i()(o.a.mark(function e(){return o.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:t.modal.show=!0;case 1:case"end":return e.stop()}},e,t)}))()},showList:function(){var t=this;return i()(o.a.mark(function e(){var n,a,s,c,i;return o.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,l.c.get(r()({},t.params));case 2:n=e.sent,a=n.data,s=a.rows,c=void 0===s?[]:s,i=a.count,t.data=c,t.count=i,t.$Message.success("加载完成");case 8:case"end":return e.stop()}},e,t)}))()},confirmDel:function(t){var e=this;return i()(o.a.mark(function n(){var a;return o.a.wrap(function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,l.c.delete({ids:t||e.rows.map(function(t){return t._id})});case 2:a=n.sent,a.data,e.$Message.success("删除成功!"),e.showList();case 6:case"end":return n.stop()}},n,e)}))()}}}),d={render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("FyLayout",{attrs:{bgColor:"#fff"}},[n("SearchBox",{attrs:{params:t.params},on:{search:function(e){t.search()},reset:t.reset},scopedSlots:t._u([{key:"body",fn:function(e){return[n("Col",{attrs:{lg:6,sm:8,xs:24}},[n("FormItem",{attrs:{label:"名称",prop:"name"}},[n("Input",{attrs:{icon:"search",placeholder:"搜索名称"},model:{value:t.params.name,callback:function(e){t.$set(t.params,"name",e)},expression:"params.name"}})],1)],1)]}}])},[n("template",{slot:"action"},[n("Button",{attrs:{type:"primary",icon:"plus-round"},on:{click:function(e){t.addrow()}}},[t._v("新增")]),t._v(" "),n("Button",{directives:[{name:"show",rawName:"v-show",value:t.rows.length,expression:"rows.length"}],attrs:{type:"ghost"},on:{click:function(e){t.deletes()}}},[t._v("批量删除")])],1)],2),t._v(" "),n("Table",{attrs:{border:"",columns:t.columns,data:t.data},on:{"on-selection-change":t.selectChange}}),t._v(" "),n("Block",{attrs:{align:"right"}},[n("Page",{attrs:{total:t.count,"page-size":t.params.size,"show-elevator":"",current:t.params.pageNo,"show-total":""},on:{"update:current":function(e){t.$set(t.params,"pageNo",e)},"on-change":t.pageChange}})],1),t._v(" "),n("NewRow",{attrs:{modal:t.modal},on:{ok:function(e){t.showList()}}})],1)},staticRenderFns:[]},p=n("VU/8")(u,d,!1,null,null,null);e.default=p.exports}});
--------------------------------------------------------------------------------
/app/public/web/static/js/13.65ca7d9fd331167d52a0.js:
--------------------------------------------------------------------------------
1 | webpackJsonp([13],{"DeQ/":function(e,t){},Egvx:function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=a("Xxa5"),s=a.n(r),o=a("exGp"),n=a.n(o),i=a("Dd8w"),l=a.n(i),c=a("0jG4"),p={mixins:[a("9WlX").a],props:{modal:Object},watch:{"modal.show":{handler:function(){if(this.modal.show&&this.modal.row){this.modal.row.isAdmin=this.modal.row.isAdmin+"";var e=this.modal.row,t=e.category,a=e.press;return this.params=l()({},this.params,this.modal.row,{category:t?t._id:"",press:a?a._id:""})}this.modal.row=null},immediate:!0}},data:function(){return{params:this.initData(),categoryList:[],pressList:[],rules:{name:{type:"string",required:!0,message:"必填项"},category:{type:"string",required:!0,message:"必填项"},press:{type:"string",required:!0,message:"必填项"},author:{type:"string",required:!0,message:"必填项"},stock:{type:"number",required:!0,message:"必填项"}}}},created:function(){this.getCategoryAll(),this.getPressAll()},methods:{initData:function(){return{_id:void 0,name:"",category:"",press:"",author:"",stock:"",desc:"",borrowStatus:"0"}},modalOk:function(){var e=this;return n()(s.a.mark(function t(){return s.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,e.$refs.form.validate();case 2:if(t.sent){t.next=5;break}return t.abrupt("return");case 5:if(e.params._id){t.next=10;break}return t.next=8,e.create();case 8:t.next=12;break;case 10:return t.next=12,e.update();case 12:e.$Message.success("提交成功!"),e.initModal("ok");case 14:case"end":return t.stop()}},t,e)}))()},create:function(){var e=this;return n()(s.a.mark(function t(){var a;return s.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,c.a.create(e.$QS.stringify(e.params));case 2:a=t.sent,a.data;case 4:case"end":return t.stop()}},t,e)}))()},update:function(){var e=this;return n()(s.a.mark(function t(){var a;return s.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,c.a.update(e.$QS.stringify(e.params));case 2:a=t.sent,a.data;case 4:case"end":return t.stop()}},t,e)}))()},cancel:function(){this.initModal("cancel")},initModal:function(e){this.params=this.initData(),this.modal.show=!1,this.$refs.form.resetFields(),this.$emit(e)}}},u={render:function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("Modal",{attrs:{top:"5%",width:"500",title:this.params._id?"编辑":"新增"},on:{"on-ok":e.modalOk,"on-cancel":e.cancel},model:{value:e.modal.show,callback:function(t){e.$set(e.modal,"show",t)},expression:"modal.show"}},[a("div",{staticClass:"modal-form"},[a("Form",{ref:"form",attrs:{model:e.params,rules:e.rules,labelWidth:80}},[a("FormItem",{attrs:{label:"书名",prop:"name"}},[a("Input",{attrs:{placeholder:"请输入书名"},model:{value:e.params.name,callback:function(t){e.$set(e.params,"name",t)},expression:"params.name"}})],1),e._v(" "),a("FormItem",{attrs:{label:"类别",prop:"category"}},[a("Select",{attrs:{filterable:""},model:{value:e.params.category,callback:function(t){e.$set(e.params,"category",t)},expression:"params.category"}},e._l(e.categoryList,function(t){return a("Option",{key:t._id,attrs:{value:t._id}},[e._v(e._s(t.name))])}))],1),e._v(" "),a("FormItem",{attrs:{label:"出版社",prop:"press"}},[a("Select",{attrs:{filterable:""},model:{value:e.params.press,callback:function(t){e.$set(e.params,"press",t)},expression:"params.press"}},e._l(e.pressList,function(t){return a("Option",{key:t._id,attrs:{value:t._id}},[e._v(e._s(t.name))])}))],1),e._v(" "),a("FormItem",{attrs:{label:"作者",prop:"author"}},[a("Input",{attrs:{placeholder:"请输入作者"},model:{value:e.params.author,callback:function(t){e.$set(e.params,"author",t)},expression:"params.author"}})],1),e._v(" "),a("FormItem",{attrs:{label:"状态",prop:"borrowStatus"}},[a("RadioGroup",{model:{value:e.params.borrowStatus,callback:function(t){e.$set(e.params,"borrowStatus",t)},expression:"params.borrowStatus"}},[a("Radio",{attrs:{label:"0"}},[a("span",[e._v("未借出")])]),e._v(" "),a("Radio",{attrs:{label:"1"}},[a("span",[e._v("已借出")])])],1)],1),e._v(" "),a("FormItem",{attrs:{label:"简介",prop:"desc"}},[a("Input",{attrs:{type:"textarea",rows:6,placeholder:"简介"},model:{value:e.params.desc,callback:function(t){e.$set(e.params,"desc",t)},expression:"params.desc"}})],1)],1)],1),e._v(" "),a("div",{attrs:{slot:"footer"},slot:"footer"},[a("Button",{attrs:{type:"primary"},on:{click:e.modalOk}},[e._v("确定")]),e._v(" "),a("Button",{attrs:{type:"ghost"},on:{click:e.cancel}},[e._v("取消")])],1)])},staticRenderFns:[]};var m=a("VU/8")(p,u,!1,function(e){a("DeQ/")},null,null);t.default=m.exports}});
--------------------------------------------------------------------------------
/app/public/web/static/js/14.de872439b6cd475499f4.js:
--------------------------------------------------------------------------------
1 | webpackJsonp([14],{bK1j:function(e,a,r){"use strict";Object.defineProperty(a,"__esModule",{value:!0});var t=r("Xxa5"),s=r.n(t),o=r("exGp"),n=r.n(o),i=r("Dd8w"),l=r.n(i),c=r("0jG4"),u={name:"BorrowBook",mixins:[r("9WlX").a],props:{modal:Object},watch:{"modal.show":{handler:function(){if(this.modal.show&&this.modal.row){this.modal.row.isAdmin=this.modal.row.isAdmin+"";var e=this.modal.row,a=e.category,r=e.press;return this.params=l()({},this.params,this.modal.row,{category:a?a._id:"",press:r?r._id:""})}this.modal.row=null},immediate:!0}},data:function(){return{params:this.initData(),categoryList:[],pressList:[],loading:!1,users:[],userId:"",rules:{userId:{type:"string",required:!0,message:"必填项"},_id:{type:"string",required:!0,message:"必填项"},borrowStatus:{type:"string",required:!0,message:"必填项"}}}},created:function(){this.getCategoryAll(),this.getPressAll()},methods:{initData:function(){return{_id:void 0,name:"",category:"",press:"",author:"",stock:"",desc:"",borrowStatus:"0",userId:""}},remoteMethod:function(e){var a=this;return n()(s.a.mark(function r(){var t,o;return s.a.wrap(function(r){for(;;)switch(r.prev=r.next){case 0:if(""===e){r.next=14;break}return a.loading=!0,r.prev=2,r.next=5,c.e.get({name:e,pageNo:1,size:20});case 5:t=r.sent,o=t.data,a.loading=!1,a.users=o.rows||[],r.next=14;break;case 11:r.prev=11,r.t0=r.catch(2),a.loading=!1;case 14:case"end":return r.stop()}},r,a,[[2,11]])}))()},modalOk:function(){var e=this;return n()(s.a.mark(function a(){return s.a.wrap(function(a){for(;;)switch(a.prev=a.next){case 0:return a.next=2,e.$refs.form.validate();case 2:if(a.sent){a.next=5;break}return a.abrupt("return");case 5:if(1==e.params.borrowStatus){a.next=10;break}return a.next=8,e.borrow();case 8:a.next=12;break;case 10:return a.next=12,e.book();case 12:e.$Message.success("提交成功!"),e.initModal("ok");case 14:case"end":return a.stop()}},a,e)}))()},borrow:function(){var e=this;return n()(s.a.mark(function a(){var r;return s.a.wrap(function(a){for(;;)switch(a.prev=a.next){case 0:return a.next=2,c.a.borrow(e.$QS.stringify({_id:e.params._id,borrowStatus:1,userId:e.params.userId}));case 2:r=a.sent,r.data;case 4:case"end":return a.stop()}},a,e)}))()},book:function(){var e=this;return n()(s.a.mark(function a(){var r;return s.a.wrap(function(a){for(;;)switch(a.prev=a.next){case 0:return a.next=2,c.a.borrow(e.$QS.stringify({_id:e.params._id,borrowStatus:0,userId:e.params.userId}));case 2:r=a.sent,r.data;case 4:case"end":return a.stop()}},a,e)}))()},cancel:function(){this.initModal("cancel")},initModal:function(e){this.params=this.initData(),this.modal.show=!1,this.$refs.form.resetFields(),this.$emit(e)}}},d={render:function(){var e=this,a=e.$createElement,r=e._self._c||a;return r("Modal",{attrs:{id:"borrow",top:"5%",width:"500",title:1==e.params.borrowStatus?"还书":"借书"},on:{"on-ok":e.modalOk,"on-cancel":e.cancel},model:{value:e.modal.show,callback:function(a){e.$set(e.modal,"show",a)},expression:"modal.show"}},[r("div",{staticClass:"modal-form"},[r("Form",{ref:"form",attrs:{model:e.params,rules:e.rules,labelWidth:80}},[r("FormItem",{attrs:{label:"读者",prop:"userId"}},[r("Select",{attrs:{clearable:"",filterable:"",remote:"","remote-method":e.remoteMethod,loading:e.loading},model:{value:e.params.userId,callback:function(a){e.$set(e.params,"userId",a)},expression:"params.userId"}},e._l(e.users,function(a,t){return r("Option",{key:a._id,attrs:{value:a._id}},[e._v(e._s(a.name))])}))],1),e._v(" "),r("FormItem",{attrs:{label:"书名",prop:"name"}},[r("Input",{attrs:{disabled:"",placeholder:"请输入书名"},model:{value:e.params.name,callback:function(a){e.$set(e.params,"name",a)},expression:"params.name"}})],1),e._v(" "),r("FormItem",{attrs:{label:"类别",prop:"category"}},[r("Select",{attrs:{disabled:"",filterable:""},model:{value:e.params.category,callback:function(a){e.$set(e.params,"category",a)},expression:"params.category"}},e._l(e.categoryList,function(a){return r("Option",{key:a._id,attrs:{value:a._id}},[e._v(e._s(a.name))])}))],1),e._v(" "),r("FormItem",{attrs:{label:"出版社",prop:"press"}},[r("Select",{attrs:{disabled:"",filterable:""},model:{value:e.params.press,callback:function(a){e.$set(e.params,"press",a)},expression:"params.press"}},e._l(e.pressList,function(a){return r("Option",{key:a._id,attrs:{value:a._id}},[e._v(e._s(a.name))])}))],1),e._v(" "),r("FormItem",{attrs:{label:"作者",prop:"author"}},[r("Input",{attrs:{disabled:"",placeholder:"请输入作者"},model:{value:e.params.author,callback:function(a){e.$set(e.params,"author",a)},expression:"params.author"}})],1),e._v(" "),r("FormItem",{attrs:{label:"简介",prop:"desc"}},[r("Input",{attrs:{disabled:"",type:"textarea",rows:6,placeholder:"简介"},model:{value:e.params.desc,callback:function(a){e.$set(e.params,"desc",a)},expression:"params.desc"}})],1)],1)],1),e._v(" "),r("div",{attrs:{slot:"footer"},slot:"footer"},[r("Button",{attrs:{type:"primary"},on:{click:e.modalOk}},[e._v(e._s(1==e.params.borrowStatus?"确认还书":"确认借出"))]),e._v(" "),r("Button",{attrs:{type:"ghost"},on:{click:e.cancel}},[e._v("取消")])],1)])},staticRenderFns:[]};var m=r("VU/8")(u,d,!1,function(e){r("xDsk")},null,null);a.default=m.exports},xDsk:function(e,a){}});
--------------------------------------------------------------------------------
/app/public/web/static/js/15.01119e2756993b039d15.js:
--------------------------------------------------------------------------------
1 | webpackJsonp([15],{"1pu+":function(a,e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var s=t("Xxa5"),r=t.n(s),n=t("exGp"),o=t.n(n),i=t("Dd8w"),l=t.n(i),m=t("0jG4"),c={props:{modal:Object},watch:{"modal.show":{handler:function(){if(this.modal.show&&this.modal.row)return this.modal.row.isAdmin=this.modal.row.isAdmin+"",this.params=l()({},this.params,this.modal.row);this.modal.row=null},immediate:!0}},data:function(){return{params:this.initData(),rules:{name:{type:"string",required:!0,message:"必填项"}}}},methods:{initData:function(){return{_id:void 0,userName:"",password:"",sex:"男",name:"",isAdmin:"false"}},modalOk:function(){var a=this;return o()(r.a.mark(function e(){return r.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,a.$refs.form.validate();case 2:if(e.sent){e.next=5;break}return e.abrupt("return");case 5:if(a.params._id){e.next=10;break}return e.next=8,a.create();case 8:e.next=12;break;case 10:return e.next=12,a.update();case 12:a.$Message.success("提交成功!"),a.initModal("ok");case 14:case"end":return e.stop()}},e,a)}))()},create:function(){var a=this;return o()(r.a.mark(function e(){var t;return r.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,m.e.create(a.$QS.stringify(a.params));case 2:t=e.sent,t.data;case 4:case"end":return e.stop()}},e,a)}))()},update:function(){var a=this;return o()(r.a.mark(function e(){var t;return r.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,m.e.update(a.$QS.stringify(a.params));case 2:t=e.sent,t.data;case 4:case"end":return e.stop()}},e,a)}))()},cancel:function(){this.initModal("cancel")},initModal:function(a){this.params=this.initData(),this.modal.show=!1,this.$refs.form.resetFields(),this.$emit(a)}}},p={render:function(){var a=this,e=a.$createElement,t=a._self._c||e;return t("Modal",{attrs:{width:"500",title:this.params._id?"编辑":"新增"},on:{"on-ok":a.modalOk,"on-cancel":a.cancel},model:{value:a.modal.show,callback:function(e){a.$set(a.modal,"show",e)},expression:"modal.show"}},[t("div",{staticClass:"modal-form"},[t("Form",{ref:"form",attrs:{model:a.params,rules:a.rules,labelWidth:80}},[t("FormItem",{attrs:{label:"姓名",prop:"name"}},[t("Input",{attrs:{placeholder:"请输入姓名"},model:{value:a.params.name,callback:function(e){a.$set(a.params,"name",e)},expression:"params.name"}})],1),a._v(" "),t("FormItem",{attrs:{label:"性别",prop:"sex"}},[t("RadioGroup",{model:{value:a.params.sex,callback:function(e){a.$set(a.params,"sex",e)},expression:"params.sex"}},[t("Radio",{attrs:{label:"男"}},[t("span",[a._v("男")])]),a._v(" "),t("Radio",{attrs:{label:"女"}},[t("span",[a._v("女")])])],1)],1),a._v(" "),t("FormItem",{attrs:{label:"管理员",prop:"isAdmin"}},[t("RadioGroup",{model:{value:a.params.isAdmin,callback:function(e){a.$set(a.params,"isAdmin",e)},expression:"params.isAdmin"}},[t("Radio",{attrs:{label:"true"}},[t("span",[a._v("是")])]),a._v(" "),t("Radio",{attrs:{label:"false"}},[t("span",[a._v("否")])])],1)],1),a._v(" "),t("FormItem",{attrs:{label:"账号",prop:"userName"}},[t("Input",{attrs:{placeholder:"请输入账号"},model:{value:a.params.userName,callback:function(e){a.$set(a.params,"userName",e)},expression:"params.userName"}})],1),a._v(" "),t("FormItem",{attrs:{label:"密码",prop:"password"}},[t("Input",{attrs:{placeholder:"请输入密码"},model:{value:a.params.password,callback:function(e){a.$set(a.params,"password",e)},expression:"params.password"}})],1)],1)],1),a._v(" "),t("div",{attrs:{slot:"footer"},slot:"footer"},[t("Button",{attrs:{type:"primary"},on:{click:a.modalOk}},[a._v("确定")]),a._v(" "),t("Button",{attrs:{type:"ghost"},on:{click:a.cancel}},[a._v("取消")])],1)])},staticRenderFns:[]},u=t("VU/8")(c,p,!1,null,null,null);e.default=u.exports}});
--------------------------------------------------------------------------------
/app/public/web/static/js/16.4a2d1ba9b186b7ff6b79.js:
--------------------------------------------------------------------------------
1 | webpackJsonp([16],{euJz:function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=a("Xxa5"),n=a.n(r),s=a("exGp"),o=a.n(s),i=a("Dd8w"),c=a.n(i),l=a("0jG4"),u={props:{modal:Object},watch:{"modal.show":{handler:function(){if(this.modal.show&&this.modal.row)return this.params=c()({},this.params,this.modal.row);this.modal.row=null},immediate:!0}},data:function(){return{params:this.initData(),rules:{name:{type:"string",required:!0,message:"必填项"}}}},methods:{initData:function(){return{_id:void 0,name:""}},modalOk:function(){var t=this;return o()(n.a.mark(function e(){return n.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,t.$refs.form.validate();case 2:if(e.sent){e.next=5;break}return e.abrupt("return");case 5:if(t.params._id){e.next=10;break}return e.next=8,t.create();case 8:e.next=12;break;case 10:return e.next=12,t.update();case 12:t.$Message.success("提交成功!"),t.initModal("ok");case 14:case"end":return e.stop()}},e,t)}))()},create:function(){var t=this;return o()(n.a.mark(function e(){var a;return n.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,l.d.create(t.$QS.stringify(t.params));case 2:a=e.sent,a.data;case 4:case"end":return e.stop()}},e,t)}))()},update:function(){var t=this;return o()(n.a.mark(function e(){var a;return n.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,l.d.update(t.$QS.stringify(t.params));case 2:a=e.sent,a.data;case 4:case"end":return e.stop()}},e,t)}))()},cancel:function(){this.initModal("cancel")},initModal:function(t){this.params=this.initData(),this.modal.show=!1,this.$refs.form.resetFields(),this.$emit(t)}}},d={render:function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("Modal",{attrs:{width:"500",title:this.params._id?"编辑":"新增"},on:{"on-ok":t.modalOk,"on-cancel":t.cancel},model:{value:t.modal.show,callback:function(e){t.$set(t.modal,"show",e)},expression:"modal.show"}},[a("div",{staticClass:"modal-form"},[a("Form",{ref:"form",attrs:{model:t.params,rules:t.rules,labelWidth:80}},[a("FormItem",{attrs:{label:"类别",prop:"name"}},[a("Input",{attrs:{placeholder:"请输入出版社名称"},model:{value:t.params.name,callback:function(e){t.$set(t.params,"name",e)},expression:"params.name"}})],1)],1)],1),t._v(" "),a("div",{attrs:{slot:"footer"},slot:"footer"},[a("Button",{attrs:{type:"primary"},on:{click:t.modalOk}},[t._v("确定")]),t._v(" "),a("Button",{attrs:{type:"ghost"},on:{click:t.cancel}},[t._v("取消")])],1)])},staticRenderFns:[]},m=a("VU/8")(u,d,!1,null,null,null);e.default=m.exports}});
--------------------------------------------------------------------------------
/app/public/web/static/js/17.3e973acf4871cf6865e0.js:
--------------------------------------------------------------------------------
1 | webpackJsonp([17],{WBdr:function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=a("Xxa5"),n=a.n(r),s=a("exGp"),o=a.n(s),i=a("Dd8w"),c=a.n(i),l=a("0jG4"),u={props:{modal:Object},watch:{"modal.show":{handler:function(){if(this.modal.show&&this.modal.row)return this.params=c()({},this.params,this.modal.row);this.modal.row=null},immediate:!0}},data:function(){return{params:this.initData(),rules:{name:{type:"string",required:!0,message:"必填项"}}}},methods:{initData:function(){return{_id:void 0,name:""}},modalOk:function(){var t=this;return o()(n.a.mark(function e(){return n.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,t.$refs.form.validate();case 2:if(e.sent){e.next=5;break}return e.abrupt("return");case 5:if(t.params._id){e.next=10;break}return e.next=8,t.create();case 8:e.next=12;break;case 10:return e.next=12,t.update();case 12:t.$Message.success("提交成功!"),t.initModal("ok");case 14:case"end":return e.stop()}},e,t)}))()},create:function(){var t=this;return o()(n.a.mark(function e(){var a;return n.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,l.c.create(t.$QS.stringify(t.params));case 2:a=e.sent,a.data;case 4:case"end":return e.stop()}},e,t)}))()},update:function(){var t=this;return o()(n.a.mark(function e(){var a;return n.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,l.c.update(t.$QS.stringify(t.params));case 2:a=e.sent,a.data;case 4:case"end":return e.stop()}},e,t)}))()},cancel:function(){this.initModal("cancel")},initModal:function(t){this.params=this.initData(),this.modal.show=!1,this.$refs.form.resetFields(),this.$emit(t)}}},d={render:function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("Modal",{attrs:{width:"500",title:this.params._id?"编辑":"新增"},on:{"on-ok":t.modalOk,"on-cancel":t.cancel},model:{value:t.modal.show,callback:function(e){t.$set(t.modal,"show",e)},expression:"modal.show"}},[a("div",{staticClass:"modal-form"},[a("Form",{ref:"form",attrs:{model:t.params,rules:t.rules,labelWidth:80}},[a("FormItem",{attrs:{label:"类别",prop:"name"}},[a("Input",{attrs:{placeholder:"请输入类别名称"},model:{value:t.params.name,callback:function(e){t.$set(t.params,"name",e)},expression:"params.name"}})],1)],1)],1),t._v(" "),a("div",{attrs:{slot:"footer"},slot:"footer"},[a("Button",{attrs:{type:"primary"},on:{click:t.modalOk}},[t._v("确定")]),t._v(" "),a("Button",{attrs:{type:"ghost"},on:{click:t.cancel}},[t._v("取消")])],1)])},staticRenderFns:[]},m=a("VU/8")(u,d,!1,null,null,null);e.default=m.exports}});
--------------------------------------------------------------------------------
/app/public/web/static/js/2.ad89e0f6b3f1308069ed.js:
--------------------------------------------------------------------------------
1 | webpackJsonp([2],{"GI/O":function(r,t){},SmcN:function(r,t,s){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var e=s("bOdI"),a=s.n(e),n={name:"errors",data:function(){return{status:404,errors:a()({},404,"抱歉,你访问的页面不存在")}}},i={render:function(){var r=this,t=r.$createElement,s=r._self._c||t;return s("div",{staticClass:"page-error"},[s("div",{staticClass:"error-img"}),r._v(" "),s("div",{staticClass:"error-body"},[s("div",{staticClass:"error-wrap"},[s("h1",[r._v(r._s(r.status))]),r._v(" "),s("p",[r._v(r._s(r.errors[r.status]))])])])])},staticRenderFns:[]};var o=s("VU/8")(n,i,!1,function(r){s("GI/O")},null,null);t.default=o.exports}});
--------------------------------------------------------------------------------
/app/public/web/static/js/3.ad59646f96280e14c711.js:
--------------------------------------------------------------------------------
1 | webpackJsonp([3],{Z4po:function(e,r){},jT7l:function(e,r,s){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var t=s("Xxa5"),a=s.n(t),o=s("exGp"),i=s.n(o),n=s("0jG4"),m=s("oAV5").a.storage,c={name:"Login",data:function(){return{loading:!1,remember:!0,code:"/api/login/checkcode",forms:{userName:"",password:"",img:""},rules:{userName:{required:!0,message:"The userName cannot be empty",trigger:"blur"},password:{required:!0,message:"The password cannot be empty",trigger:"blur"},img:{required:!0,message:"The checkcode cannot be empty",trigger:"blur"}}}},created:function(){this.initPwdLocal()},methods:{resetCode:function(){this.code=this.code+"?t="+ +new Date,this.forms.img=""},submit:function(){var e=this;return i()(a.a.mark(function r(){var s,t;return a.a.wrap(function(r){for(;;)switch(r.prev=r.next){case 0:return r.next=2,e.$refs.forms.validate();case 2:if(r.sent){r.next=5;break}return r.abrupt("return");case 5:return e.loading=!0,r.prev=6,r.next=9,n.e.login(e.$QS.stringify(e.forms));case 9:s=r.sent,t=s.data,e.loading=!1,e.$Message.success("登录成功"),e.pwdlocal(),e.$store.commit("users/users",t),e.$router.replace({name:"User"}),r.next=22;break;case 18:r.prev=18,r.t0=r.catch(6),e.loading=!1,e.resetCode();case 22:case"end":return r.stop()}},r,e,[[6,18]])}))()},pwdlocal:function(){this.remember?(m.setLocal("password",this.forms.password),m.setLocal("userName",this.forms.userName)):(m.setLocal("password",""),m.setLocal("userName",""))},initPwdLocal:function(){this.remember&&(this.forms.password=m.getLocal("password")||"",this.forms.userName=m.getLocal("userName")||"")}}},l={render:function(){var e=this,r=e.$createElement,s=e._self._c||r;return s("div",{attrs:{id:"login"}},[s("div",{staticClass:"login-mask"}),e._v(" "),s("div",{staticClass:"form-wrap"},[e._m(0),e._v(" "),s("Form",{ref:"forms",attrs:{model:e.forms,rules:e.rules}},[s("FormItem",{attrs:{prop:"userName"}},[s("Input",{attrs:{size:"large",placeholder:"请输入账号/邮箱"},model:{value:e.forms.userName,callback:function(r){e.$set(e.forms,"userName","string"==typeof r?r.trim():r)},expression:"forms.userName"}})],1),e._v(" "),s("FormItem",{attrs:{prop:"password"}},[s("Input",{attrs:{type:"password",size:"large",placeholder:"请输入密码"},model:{value:e.forms.password,callback:function(r){e.$set(e.forms,"password","string"==typeof r?r.trim():r)},expression:"forms.password"}})],1),e._v(" "),s("FormItem",{staticClass:"form-margin",attrs:{prop:"img"}},[s("div",{staticClass:"form-code"},[s("Input",{attrs:{size:"large",placeholder:"请输入验证码"},model:{value:e.forms.img,callback:function(r){e.$set(e.forms,"img","string"==typeof r?r.trim():r)},expression:"forms.img"}}),e._v(" "),s("img",{staticClass:"checkcode",attrs:{width:"100",height:"40",src:e.code,alt:"验证码"},on:{click:e.resetCode}})],1)]),e._v(" "),s("FormItem",{staticClass:"form-margin"},[s("Checkbox",{attrs:{size:"large"},model:{value:e.remember,callback:function(r){e.remember=r},expression:"remember"}},[e._v("\n 记住密码\n ")])],1),e._v(" "),s("FormItem",{staticClass:"form-margin"},[s("Button",{attrs:{loading:e.loading,size:"large",long:"",type:"primary"},on:{click:e.submit}},[e._v("登录")])],1)],1)],1)])},staticRenderFns:[function(){var e=this.$createElement,r=this._self._c||e;return r("p",[r("span",[this._v("Admin Login")])])}]};var u=s("VU/8")(c,l,!1,function(e){s("Z4po")},null,null);r.default=u.exports}});
--------------------------------------------------------------------------------
/app/public/web/static/js/4.375c2c790dbfec7b7194.js:
--------------------------------------------------------------------------------
1 | webpackJsonp([4],{"tM+2":function(t,e){},"uem+":function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=r("Xxa5"),a=r.n(n),i=r("exGp"),o=r.n(i),c=r("0jG4");function s(t,e){var r=t.data,n=t.dataset.createView("reading").source(r),a=new G2.Chart({container:"chart1",forceFit:!0,height:250});return a.source(n),function(t,e){e&&t.clear(),t.interval().position("name*borrowTotal").color("name"),t.render()}(a),a}r("YaEn");var l={name:"Ranking",data:function(){return{dataSet:null,loading1:!1,chart1:null,data:[],columns:function(){return[{type:"index",width:60,align:"center"},{title:"书名",key:"name",align:"center"},{title:"借阅状态",key:"borrowStatus",align:"center",width:140,render:function(t,e){return e.row.borrowStatus?t(Tag,{attrs:{type:"dot",color:"red"}},["已借出"]):t(Tag,{attrs:{type:"dot",color:"green"}},["未借出"])}},{title:"类别",key:"category",align:"center",render:function(t,e){var r=e.row;return r.category&&r.category.name||""}},{title:"出版社",key:"press",align:"center",render:function(t,e){var r=e.row;return r.press&&r.press.name||""}},{title:"作者",key:"author",align:"center"},{title:"简介",key:"desc",align:"center",render:function(t,e){var r=e.row,n=r.desc?r.desc.substring(0,5)+"...":"";return t("span",{attrs:{title:n}},[n])}},{title:"借阅次数",key:"borrowTotal",align:"center",render:function(t,e){return e.row.borrowTotal||0}},{title:"上架时间",key:"createdAt",align:"center",render:function(t,e){var r=e.row;return new Date(r.createdAt).Format("yyyy-MM-dd")}}]}.call(this)}},created:function(){this.dataSet=new DataSet,this.readingAmount()},methods:{readingAmount:function(){var t=this;return o()(a.a.mark(function e(){var r,n;return a.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,c.a.readingAmount();case 2:r=e.sent,n=r.data,t.data=n,t.$nextTick(function(){t.chart1=s({dataset:t.dataSet,data:n})});case 6:case"end":return e.stop()}},e,t)}))()}}},d={render:function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("div",[r("Card",{staticClass:"con-card"},[r("h2",{staticClass:"font-center",attrs:{slot:"title"},slot:"title"},[t._v("\n 图书借阅量统计图\n ")]),t._v(" "),r("Row",[t.loading1?r("Spin",{attrs:{fix:""}}):t._e(),t._v(" "),r("div",[r("div",{staticClass:"min-height200",attrs:{id:"chart1"}})])],1)],1),t._v(" "),r("br"),r("br"),t._v(" "),r("Card",{staticClass:"con-card"},[r("h2",{staticClass:"font-center",attrs:{slot:"title"},slot:"title"},[t._v("\n 图书借阅量统计\n ")]),t._v(" "),r("Table",{attrs:{border:"",columns:t.columns,data:t.data}})],1)],1)},staticRenderFns:[]};var u=r("VU/8")(l,d,!1,function(t){r("tM+2")},null,null);e.default=u.exports}});
--------------------------------------------------------------------------------
/app/public/web/static/js/5.eac5d73c8c2be14701e0.js:
--------------------------------------------------------------------------------
1 | webpackJsonp([5],{"9WlX":function(t,e,r){"use strict";var a=r("Xxa5"),n=r.n(a),s=r("exGp"),o=r.n(s),c=r("0jG4");e.a={methods:{getCategoryAll:function(){var t=this;return o()(n.a.mark(function e(){var r,a;return n.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,c.c.getAll();case 2:r=e.sent,a=r.data,t.categoryList=a.rows;case 6:case"end":return e.stop()}},e,t)}))()},getPressAll:function(){var t=this;return o()(n.a.mark(function e(){var r,a;return n.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,c.d.getAll();case 2:r=e.sent,a=r.data,t.pressList=a.rows;case 6:case"end":return e.stop()}},e,t)}))()}}}},stRv:function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var a=r("Dd8w"),n=r.n(a),s=r("Xxa5"),o=r.n(s),c=r("exGp"),l=r.n(c),i=r("0jG4"),u=(r("YaEn"),r("1nuA"),r("3AVb")),p=r("9WlX"),d={name:"Borrow",mixins:[u.a,p.a],components:{BorrowBook:function(){return r.e(14).then(r.bind(null,"bK1j"))}},data:function(){return{loading:!1,data:[],count:0,params:{pageNo:1,size:20,category:"",name:"",press:"",author:"",createdAt:""},rows:[],columns:function(){var t=this;return[{type:"selection",width:60,align:"center"},{title:"书名",key:"name",align:"center"},{title:"借阅状态",key:"borrowStatus",align:"center",width:140,render:function(t,e){return e.row.borrowStatus?t(Tag,{attrs:{type:"dot",color:"red"}},["已借出"]):t(Tag,{attrs:{type:"dot",color:"green"}},["未借出"])}},{title:"类别",key:"category",align:"center",render:function(t,e){var r=e.row;return r.category&&r.category.name||""}},{title:"出版社",key:"press",align:"center",render:function(t,e){var r=e.row;return r.press&&r.press.name||""}},{title:"作者",key:"author",align:"center"},{title:"上架时间",key:"createdAt",align:"center",render:function(t,e){var r=e.row;return new Date(r.createdAt).Format("yyyy-MM-dd")}},{title:"操作",align:"center",width:100,render:function(e,r){var a=r.row,n=function(){t.modal.show=!0,t.modal.row=a},s=a.borrowStatus;return e("div",[s?e(Button,{class:"link",attrs:{type:"text",size:"small"},on:{click:n}},["还书"]):null,s?null:e(Button,{class:"link",attrs:{type:"text",size:"small"},on:{click:n}},["借书"])])}}]}.call(this),categoryList:[],pressList:[],modal:{show:!1,row:null}}},created:function(){this.showList(),this.getCategoryAll(),this.getPressAll()},methods:{addrow:function(){var t=this;return l()(o.a.mark(function e(){return o.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:t.modal.show=!0;case 1:case"end":return e.stop()}},e,t)}))()},showList:function(){var t=this;return l()(o.a.mark(function e(){var r,a,s,c,l,u;return o.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return r=(r=t.params.createdAt)?new Date(t.params.createdAt).Format("yyyy-MM-dd"):"",e.next=4,i.a.get(n()({},t.params,{createdAt:r}));case 4:a=e.sent,s=a.data,c=s.rows,l=void 0===c?[]:c,u=s.count,t.data=l,t.count=u,t.$Message.success("加载完成");case 10:case"end":return e.stop()}},e,t)}))()},confirmDel:function(t){var e=this;return l()(o.a.mark(function r(){var a;return o.a.wrap(function(r){for(;;)switch(r.prev=r.next){case 0:return r.next=2,i.a.delete({ids:t||e.rows.map(function(t){return t._id})});case 2:a=r.sent,a.data,e.$Message.success("删除成功!"),e.showList();case 6:case"end":return r.stop()}},r,e)}))()}}},m={render:function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("FyLayout",{attrs:{bgColor:"#fff"}},[r("SearchBox",{attrs:{params:t.params},on:{search:function(e){t.search()},reset:t.reset},scopedSlots:t._u([{key:"body",fn:function(e){return[r("Col",{attrs:{lg:6,sm:8,xs:24}},[r("FormItem",{attrs:{label:"书籍名称",prop:"name"}},[r("Input",{attrs:{placeholder:"搜索书籍"},model:{value:t.params.name,callback:function(e){t.$set(t.params,"name",e)},expression:"params.name"}})],1)],1),t._v(" "),r("Col",{attrs:{lg:6,sm:8,xs:24}},[r("FormItem",{attrs:{label:"书籍作者",prop:"author"}},[r("Input",{attrs:{placeholder:"搜索作者"},model:{value:t.params.author,callback:function(e){t.$set(t.params,"author",e)},expression:"params.author"}})],1)],1),t._v(" "),r("Col",{attrs:{lg:6,sm:8,xs:24}},[r("FormItem",{attrs:{label:"入馆日期",prop:"createdAt"}},[r("DatePicker",{attrs:{type:"date",placeholder:"搜索日期"},model:{value:t.params.createdAt,callback:function(e){t.$set(t.params,"createdAt",e)},expression:"params.createdAt"}})],1)],1),t._v(" "),r("Col",{attrs:{lg:6,sm:8,xs:24}},[r("FormItem",{attrs:{label:"书籍类别",prop:"category"}},[r("Select",{attrs:{clearable:"",filterable:""},model:{value:t.params.category,callback:function(e){t.$set(t.params,"category",e)},expression:"params.category"}},t._l(t.categoryList,function(e){return r("Option",{key:e._id,attrs:{value:e._id}},[t._v(t._s(e.name))])}))],1)],1),t._v(" "),r("Col",{attrs:{lg:6,sm:8,xs:24}},[r("FormItem",{attrs:{label:"出版社",prop:"press"}},[r("Select",{attrs:{clearable:"",filterable:""},model:{value:t.params.press,callback:function(e){t.$set(t.params,"press",e)},expression:"params.press"}},t._l(t.pressList,function(e){return r("Option",{key:e._id,attrs:{value:e._id}},[t._v(t._s(e.name))])}))],1)],1)]}}])}),t._v(" "),r("Table",{attrs:{border:"",columns:t.columns,data:t.data},on:{"on-selection-change":t.selectChange}}),t._v(" "),r("Block",{attrs:{align:"right"}},[r("Page",{attrs:{total:t.count,"page-size":t.params.size,"show-elevator":"",current:t.params.pageNo,"show-total":""},on:{"update:current":function(e){t.$set(t.params,"pageNo",e)},"on-change":t.pageChange}})],1),t._v(" "),r("BorrowBook",{attrs:{modal:t.modal},on:{ok:function(e){t.showList()}}})],1)},staticRenderFns:[]},f=r("VU/8")(d,m,!1,null,null,null);e.default=f.exports}});
--------------------------------------------------------------------------------
/app/public/web/static/js/6.41ff0a10f7b562b97646.js:
--------------------------------------------------------------------------------
1 | webpackJsonp([6],{"9WlX":function(t,e,r){"use strict";var a=r("Xxa5"),n=r.n(a),s=r("exGp"),o=r.n(s),c=r("0jG4");e.a={methods:{getCategoryAll:function(){var t=this;return o()(n.a.mark(function e(){var r,a;return n.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,c.c.getAll();case 2:r=e.sent,a=r.data,t.categoryList=a.rows;case 6:case"end":return e.stop()}},e,t)}))()},getPressAll:function(){var t=this;return o()(n.a.mark(function e(){var r,a;return n.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,c.d.getAll();case 2:r=e.sent,a=r.data,t.pressList=a.rows;case 6:case"end":return e.stop()}},e,t)}))()}}}},pKvg:function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var a=r("Dd8w"),n=r.n(a),s=r("Xxa5"),o=r.n(s),c=r("exGp"),l=r.n(c),i=r("0jG4"),u=(r("YaEn"),r("1nuA"),r("3AVb")),p=r("9WlX"),d={name:"Book",mixins:[u.a,p.a],components:{NewRow:function(){return r.e(13).then(r.bind(null,"Egvx"))}},data:function(){return{loading:!1,data:[],count:0,params:{pageNo:1,size:20,category:"",name:"",press:"",author:"",createdAt:"",borrowStatus:""},rows:[],columns:function(){var t=this;return[{type:"selection",width:60,align:"center"},{title:"书名",key:"name",align:"center"},{title:"借阅状态",key:"borrowStatus",align:"center",width:140,render:function(t,e){return e.row.borrowStatus?t(Tag,{attrs:{type:"dot",color:"red"}},["已借出"]):t(Tag,{attrs:{type:"dot",color:"green"}},["未借出"])}},{title:"类别",key:"category",align:"center",render:function(t,e){var r=e.row;return r.category&&r.category.name||""}},{title:"出版社",key:"press",align:"center",render:function(t,e){var r=e.row;return r.press&&r.press.name||""}},{title:"作者",key:"author",align:"center"},{title:"简介",key:"desc",align:"center",render:function(t,e){var r=e.row,a=r.desc?r.desc.substring(0,5)+"...":"";return t("span",{attrs:{title:a}},[a])}},{title:"借阅次数",key:"borrowTotal",align:"center",render:function(t,e){return e.row.borrowTotal||0}},{title:"上架时间",key:"createdAt",align:"center",render:function(t,e){var r=e.row;return new Date(r.createdAt).Format("yyyy-MM-dd")}},{title:"操作",align:"center",width:150,render:function(e,r){var a=r.row;return e("div",[e(Button,{class:"link",attrs:{type:"text",size:"small"},on:{click:function(){t.modal.show=!0,t.modal.row=a}}},["编辑"]),e(Button,{class:"link",attrs:{type:"text",size:"small"},on:{click:function(){return t.deletes([a._id])}}},["删除"])])}}]}.call(this),categoryList:[],pressList:[],modal:{show:!1,row:null}}},created:function(){this.showList(),this.getCategoryAll(),this.getPressAll()},methods:{addrow:function(){var t=this;return l()(o.a.mark(function e(){return o.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:t.modal.show=!0;case 1:case"end":return e.stop()}},e,t)}))()},showList:function(){var t=this;return l()(o.a.mark(function e(){var r,a,s,c,l,u;return o.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return r=(r=t.params.createdAt)?new Date(t.params.createdAt).Format("yyyy-MM-dd"):"",e.next=4,i.a.get(n()({},t.params,{createdAt:r}));case 4:a=e.sent,s=a.data,c=s.rows,l=void 0===c?[]:c,u=s.count,t.data=l,t.count=u,t.$Message.success("加载完成");case 10:case"end":return e.stop()}},e,t)}))()},confirmDel:function(t){var e=this;return l()(o.a.mark(function r(){var a;return o.a.wrap(function(r){for(;;)switch(r.prev=r.next){case 0:return r.next=2,i.a.delete({ids:t||e.rows.map(function(t){return t._id})});case 2:a=r.sent,a.data,e.$Message.success("删除成功!"),e.showList();case 6:case"end":return r.stop()}},r,e)}))()}}},m={render:function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("FyLayout",{attrs:{bgColor:"#fff"}},[r("SearchBox",{attrs:{params:t.params},on:{search:function(e){t.search()},reset:t.reset},scopedSlots:t._u([{key:"body",fn:function(e){return[r("Col",{attrs:{lg:6,sm:8,xs:24}},[r("FormItem",{attrs:{label:"书籍名称",prop:"name"}},[r("Input",{attrs:{placeholder:"搜索书籍"},model:{value:t.params.name,callback:function(e){t.$set(t.params,"name",e)},expression:"params.name"}})],1)],1),t._v(" "),r("Col",{attrs:{lg:6,sm:8,xs:24}},[r("FormItem",{attrs:{label:"书籍作者",prop:"author"}},[r("Input",{attrs:{placeholder:"搜索作者"},model:{value:t.params.author,callback:function(e){t.$set(t.params,"author",e)},expression:"params.author"}})],1)],1),t._v(" "),r("Col",{attrs:{lg:6,sm:8,xs:24}},[r("FormItem",{attrs:{label:"入馆日期",prop:"createdAt"}},[r("DatePicker",{attrs:{type:"date",placeholder:"搜索日期"},model:{value:t.params.createdAt,callback:function(e){t.$set(t.params,"createdAt",e)},expression:"params.createdAt"}})],1)],1),t._v(" "),r("Col",{attrs:{lg:6,sm:8,xs:24}},[r("FormItem",{attrs:{label:"书籍类别",prop:"category"}},[r("Select",{attrs:{clearable:"",filterable:""},model:{value:t.params.category,callback:function(e){t.$set(t.params,"category",e)},expression:"params.category"}},t._l(t.categoryList,function(e){return r("Option",{key:e._id,attrs:{value:e._id}},[t._v(t._s(e.name))])}))],1)],1),t._v(" "),r("Col",{attrs:{lg:6,sm:8,xs:24}},[r("FormItem",{attrs:{label:"出版社",prop:"press"}},[r("Select",{attrs:{clearable:"",filterable:""},model:{value:t.params.press,callback:function(e){t.$set(t.params,"press",e)},expression:"params.press"}},t._l(t.pressList,function(e){return r("Option",{key:e._id,attrs:{value:e._id}},[t._v(t._s(e.name))])}))],1)],1),t._v(" "),r("Col",{attrs:{lg:6,sm:8,xs:24}},[r("FormItem",{attrs:{label:"借阅状态",prop:"borrowStatus"}},[r("Select",{attrs:{clearable:"",filterable:""},model:{value:t.params.borrowStatus,callback:function(e){t.$set(t.params,"borrowStatus",e)},expression:"params.borrowStatus"}},[r("Option",{key:"0",attrs:{value:"0"}},[t._v("未借出")]),t._v(" "),r("Option",{key:"1",attrs:{value:"1"}},[t._v("已借出")])],1)],1)],1)]}}])},[r("template",{slot:"action"},[r("Button",{attrs:{type:"primary",icon:"plus-round"},on:{click:function(e){t.addrow()}}},[t._v("新增")]),t._v(" "),r("Button",{directives:[{name:"show",rawName:"v-show",value:t.rows.length,expression:"rows.length"}],attrs:{type:"ghost"},on:{click:function(e){t.deletes()}}},[t._v("批量删除")])],1)],2),t._v(" "),r("Table",{attrs:{border:"",columns:t.columns,data:t.data},on:{"on-selection-change":t.selectChange}}),t._v(" "),r("Block",{attrs:{align:"right"}},[r("Page",{attrs:{total:t.count,"page-size":t.params.size,"show-elevator":"",current:t.params.pageNo,"show-total":""},on:{"update:current":function(e){t.$set(t.params,"pageNo",e)},"on-change":t.pageChange}})],1),t._v(" "),r("NewRow",{attrs:{modal:t.modal},on:{ok:function(e){t.showList()}}})],1)},staticRenderFns:[]},f=r("VU/8")(d,m,!1,null,null,null);e.default=f.exports}});
--------------------------------------------------------------------------------
/app/public/web/static/js/7.ebeca0fe01963f060080.js:
--------------------------------------------------------------------------------
1 | webpackJsonp([7],{KjHZ:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r("Dd8w"),a=r.n(n),o=r("Xxa5"),s=r.n(o),u=r("exGp"),c=r.n(u),i=r("0jG4"),l=(r("YaEn"),r("1nuA"),{name:"Resou",mixins:[r("3AVb").a],data:function(){return{loading:!1,data:[],count:0,params:{pageNo:1,size:20,userId:"",borrowStatus:"1"},rows:[],columns:function(){return[{title:"状态",align:"center",render:function(e,t){var r=t.row,n=1==r.borrowStatus?"借阅中":"已还书",a=1==r.borrowStatus?"blue":"green";return e(Tag,{attrs:{checkable:!0,color:a}},[n])}},{title:"书籍名称",align:"center",render:function(e,t){return t.row.book.name}},{title:"作者",align:"center",render:function(e,t){return t.row.book.author}},{title:"时间",align:"center",render:function(e,t){var r=t.row;return new Date(r.createdAt).Format("yyyy-MM-dd hh:mm:ss")}},{title:"用户姓名",align:"center",render:function(e,t){var r=t.row;return e(Tag,{attrs:{checkable:!0,color:"default"}},[r.user.name])}},{title:"性别",align:"center",render:function(e,t){return t.row.user.sex}}]}.call(this),modal:{show:!1,row:null}}},created:function(){this.params.userId=this.$route.query.userId,this.showList()},methods:{addrow:function(){var e=this;return c()(s.a.mark(function t(){return s.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:e.modal.show=!0;case 1:case"end":return t.stop()}},t,e)}))()},showList:function(){var e=this;return c()(s.a.mark(function t(){var r,n,o,u,c;return s.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,i.b.get(a()({},e.params));case 2:r=t.sent,n=r.data,o=n.rows,u=void 0===o?[]:o,c=n.count,e.data=u,e.count=c,e.$Message.success("加载完成");case 8:case"end":return t.stop()}},t,e)}))()}}}),d={render:function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("FyLayout",{attrs:{bgColor:"#fff"}},[r("SearchBox",{attrs:{params:e.params},on:{search:function(t){e.showList()},reset:e.reset},scopedSlots:e._u([{key:"body",fn:function(e){return[r("Col",{attrs:{lg:6,sm:8,xs:24}})]}}])}),e._v(" "),r("Table",{attrs:{border:"",columns:e.columns,data:e.data},on:{"on-selection-change":e.selectChange}}),e._v(" "),r("Block",{attrs:{align:"right"}},[r("Page",{attrs:{total:e.count,"page-size":e.params.size,"show-elevator":"",current:e.params.pageNo,"show-total":""},on:{"update:current":function(t){e.$set(e.params,"pageNo",t)},"on-change":e.pageChange}})],1),e._v(" "),r("NewRow",{attrs:{modal:e.modal},on:{ok:function(t){e.showList()}}})],1)},staticRenderFns:[]},f=r("VU/8")(l,d,!1,null,null,null);t.default=f.exports}});
--------------------------------------------------------------------------------
/app/public/web/static/js/8.8bf46a74f45c27460032.js:
--------------------------------------------------------------------------------
1 | webpackJsonp([8],{KQKl:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var a=n("Dd8w"),r=n.n(a),s=n("Xxa5"),o=n.n(s),c=n("exGp"),i=n.n(c),l=n("0jG4"),u=(n("YaEn"),n("1nuA"),{name:"Resou",mixins:[n("3AVb").a],components:{NewRow:function(){return n.e(15).then(n.bind(null,"1pu+"))}},data:function(){return{loading:!1,data:[],count:0,params:{pageNo:1,size:20},rows:[],columns:function(){var e=this;return[{type:"selection",width:60,align:"center"},{title:"_id",width:200,key:"_id",align:"center"},{title:"账号",key:"userName",align:"center"},{title:"姓名",key:"name",align:"center"},{title:"性别",key:"sex",align:"center"},{title:"权限",key:"isAdmin",align:"center",render:function(e,t){return t.row.isAdmin?e(Tag,{attrs:{type:"dot",color:"blue"}},["管理员"]):"读者"}},{title:"操作",align:"center",width:200,render:function(t,n){var a=n.row;return t("div",[t(Button,{class:"link",attrs:{type:"text",size:"small"},on:{click:function(){e.$router.push({name:"Record",query:{userId:a._id}})}}},["借阅记录"]),t(Button,{class:"link",attrs:{type:"text",size:"small"},on:{click:function(){e.modal.show=!0,e.modal.row=a}}},["编辑"]),t(Button,{class:"link",attrs:{type:"text",size:"small"},on:{click:function(){return e.deletes([a._id])}}},["删除"])])}}]}.call(this),modal:{show:!1,row:null}}},created:function(){this.showList()},methods:{addrow:function(){var e=this;return i()(o.a.mark(function t(){return o.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:e.modal.show=!0;case 1:case"end":return t.stop()}},t,e)}))()},showList:function(){var e=this;return i()(o.a.mark(function t(){var n,a,s,c,i;return o.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,l.e.get(r()({},e.params));case 2:n=t.sent,a=n.data,s=a.rows,c=void 0===s?[]:s,i=a.count,e.data=c,e.count=i,e.$Message.success("加载完成");case 8:case"end":return t.stop()}},t,e)}))()},confirmDel:function(e){var t=this;return i()(o.a.mark(function n(){var a;return o.a.wrap(function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,l.e.delete({ids:e||t.rows.map(function(e){return e._id})});case 2:a=n.sent,a.data,t.$Message.success("删除成功!"),t.showList();case 6:case"end":return n.stop()}},n,t)}))()}}}),d={render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("FyLayout",{attrs:{bgColor:"#fff"}},[n("SearchBox",{attrs:{params:e.params},on:{search:function(t){e.search()},reset:e.reset},scopedSlots:e._u([{key:"body",fn:function(t){return[n("Col",{attrs:{lg:6,sm:8,xs:24}},[n("FormItem",{attrs:{label:"用户名称",prop:"name"}},[n("Input",{attrs:{icon:"search",placeholder:"搜索用户名称"},model:{value:e.params.name,callback:function(t){e.$set(e.params,"name",t)},expression:"params.name"}})],1)],1)]}}])},[n("template",{slot:"action"},[n("Button",{attrs:{type:"primary",icon:"plus-round"},on:{click:function(t){e.addrow()}}},[e._v("新增")]),e._v(" "),n("Button",{directives:[{name:"show",rawName:"v-show",value:e.rows.length,expression:"rows.length"}],attrs:{type:"ghost"},on:{click:function(t){e.deletes()}}},[e._v("批量删除")])],1)],2),e._v(" "),n("Table",{attrs:{border:"",columns:e.columns,data:e.data},on:{"on-selection-change":e.selectChange}}),e._v(" "),n("Block",{attrs:{align:"right"}},[n("Page",{attrs:{total:e.count,"page-size":e.params.size,"show-elevator":"",current:e.params.pageNo,"show-total":""},on:{"update:current":function(t){e.$set(e.params,"pageNo",t)},"on-change":e.pageChange}})],1),e._v(" "),n("NewRow",{attrs:{modal:e.modal},on:{ok:function(t){e.showList()}}})],1)},staticRenderFns:[]},p=n("VU/8")(u,d,!1,null,null,null);t.default=p.exports}});
--------------------------------------------------------------------------------
/app/public/web/static/js/9.8cdf3fdd6538b7a997dd.js:
--------------------------------------------------------------------------------
1 | webpackJsonp([9],{"5/23":function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var a=n("Dd8w"),r=n.n(a),s=n("Xxa5"),o=n.n(s),c=n("exGp"),i=n.n(c),u=n("0jG4"),l=(n("YaEn"),{name:"Press",mixins:[n("3AVb").a],components:{NewRow:function(){return n.e(16).then(n.bind(null,"euJz"))}},data:function(){return{loading:!1,data:[],count:0,params:{pageNo:1,size:20},rows:[],columns:function(){var t=this;return[{type:"selection",width:60,align:"center"},{title:"_id",width:200,key:"_id",align:"center"},{title:"名称",key:"name",align:"center"},{title:"操作",align:"center",width:150,render:function(e,n){var a=n.row;return e("div",[e(Button,{class:"link",attrs:{type:"text",size:"small"},on:{click:function(){t.modal.show=!0,t.modal.row=a}}},["编辑"]),e(Button,{class:"link",attrs:{type:"text",size:"small"},on:{click:function(){return t.deletes([a._id])}}},["删除"])])}}]}.call(this),modal:{show:!1,row:null}}},created:function(){this.showList()},methods:{addrow:function(){var t=this;return i()(o.a.mark(function e(){return o.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:t.modal.show=!0;case 1:case"end":return e.stop()}},e,t)}))()},showList:function(){var t=this;return i()(o.a.mark(function e(){var n,a,s,c,i;return o.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,u.d.get(r()({},t.params));case 2:n=e.sent,a=n.data,s=a.rows,c=void 0===s?[]:s,i=a.count,t.data=c,t.count=i,t.$Message.success("加载完成");case 8:case"end":return e.stop()}},e,t)}))()},confirmDel:function(t){var e=this;return i()(o.a.mark(function n(){var a;return o.a.wrap(function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,u.d.delete({ids:t||e.rows.map(function(t){return t._id})});case 2:a=n.sent,a.data,e.$Message.success("删除成功!"),e.showList();case 6:case"end":return n.stop()}},n,e)}))()}}}),d={render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("FyLayout",{attrs:{bgColor:"#fff"}},[n("SearchBox",{attrs:{params:t.params},on:{search:function(e){t.search()},reset:t.reset},scopedSlots:t._u([{key:"body",fn:function(e){return[n("Col",{attrs:{lg:6,sm:8,xs:24}},[n("FormItem",{attrs:{label:"名称",prop:"name"}},[n("Input",{attrs:{icon:"search",placeholder:"搜索名称"},model:{value:t.params.name,callback:function(e){t.$set(t.params,"name",e)},expression:"params.name"}})],1)],1)]}}])},[n("template",{slot:"action"},[n("Button",{attrs:{type:"primary",icon:"plus-round"},on:{click:function(e){t.addrow()}}},[t._v("新增")]),t._v(" "),n("Button",{directives:[{name:"show",rawName:"v-show",value:t.rows.length,expression:"rows.length"}],attrs:{type:"ghost"},on:{click:function(e){t.deletes()}}},[t._v("批量删除")])],1)],2),t._v(" "),n("Table",{attrs:{border:"",columns:t.columns,data:t.data},on:{"on-selection-change":t.selectChange}}),t._v(" "),n("Block",{attrs:{align:"right"}},[n("Page",{attrs:{total:t.count,"page-size":t.params.size,"show-elevator":"",current:t.params.pageNo,"show-total":""},on:{"update:current":function(e){t.$set(t.params,"pageNo",e)},"on-change":t.pageChange}})],1),t._v(" "),n("NewRow",{attrs:{modal:t.modal},on:{ok:function(e){t.showList()}}})],1)},staticRenderFns:[]},p=n("VU/8")(l,d,!1,null,null,null);e.default=p.exports}});
--------------------------------------------------------------------------------
/app/public/web/static/js/app.9877f13a400bccaa7b69.js:
--------------------------------------------------------------------------------
1 | webpackJsonp([12],{"+skl":function(e,t){},"0jG4":function(e,t,n){"use strict";n.d(t,"c",function(){return u}),n.d(t,"d",function(){return c}),n.d(t,"a",function(){return l}),n.d(t,"e",function(){return p}),n.d(t,"b",function(){return f});var r=n("Xxa5"),a=n.n(r),o=n("exGp"),i=n.n(o),s=n("vLgD"),u={get:function(e){var t=this;return i()(a.a.mark(function n(){return a.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,Object(s.a)({url:"/api/category/list",params:e});case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}},n,t)}))()},getAll:function(e){var t=this;return i()(a.a.mark(function n(){return a.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,Object(s.a)({url:"/api/category/allList",params:e});case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}},n,t)}))()},create:function(e){var t=this;return i()(a.a.mark(function n(){return a.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,Object(s.a)({url:"/api/category/create",method:"post",data:e});case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}},n,t)}))()},update:function(e){var t=this;return i()(a.a.mark(function n(){return a.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,Object(s.a)({url:"/api/category/update",method:"post",data:e});case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}},n,t)}))()},delete:function(e){var t=this;return i()(a.a.mark(function n(){return a.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,Object(s.a)({url:"/api/category/remove",method:"delete",data:e});case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}},n,t)}))()}},c={get:function(e){var t=this;return i()(a.a.mark(function n(){return a.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,Object(s.a)({url:"/api/press/list",params:e});case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}},n,t)}))()},getAll:function(e){var t=this;return i()(a.a.mark(function n(){return a.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,Object(s.a)({url:"/api/press/allList",params:e});case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}},n,t)}))()},create:function(e){var t=this;return i()(a.a.mark(function n(){return a.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,Object(s.a)({url:"/api/press/create",method:"post",data:e});case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}},n,t)}))()},update:function(e){var t=this;return i()(a.a.mark(function n(){return a.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,Object(s.a)({url:"/api/press/update",method:"post",data:e});case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}},n,t)}))()},delete:function(e){var t=this;return i()(a.a.mark(function n(){return a.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,Object(s.a)({url:"/api/press/remove",method:"delete",data:e});case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}},n,t)}))()}},l={get:function(e){var t=this;return i()(a.a.mark(function n(){return a.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,Object(s.a)({url:"/api/book/list",params:e});case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}},n,t)}))()},create:function(e){var t=this;return i()(a.a.mark(function n(){return a.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,Object(s.a)({url:"/api/book/create",method:"post",data:e});case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}},n,t)}))()},update:function(e){var t=this;return i()(a.a.mark(function n(){return a.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,Object(s.a)({url:"/api/book/update",method:"post",data:e});case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}},n,t)}))()},delete:function(e){var t=this;return i()(a.a.mark(function n(){return a.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,Object(s.a)({url:"/api/book/remove",method:"delete",data:e});case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}},n,t)}))()},borrow:function(e){var t=this;return i()(a.a.mark(function n(){return a.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,Object(s.a)({url:"/api/book/borrow",method:"post",data:e});case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}},n,t)}))()},readingAmount:function(){var e=this;return i()(a.a.mark(function t(){return a.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,Object(s.a)({url:"/api/book/readingAmount"});case 2:return e.abrupt("return",e.sent);case 3:case"end":return e.stop()}},t,e)}))()}},p={login:function(e){var t=this;return i()(a.a.mark(function n(){return a.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,Object(s.a)({url:"/api/login",method:"post",data:e});case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}},n,t)}))()},loginOut:function(){var e=this;return i()(a.a.mark(function t(){return a.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,Object(s.a)({url:"/api/loginOut",method:"post"});case 2:return e.abrupt("return",e.sent);case 3:case"end":return e.stop()}},t,e)}))()},get:function(e){var t=this;return i()(a.a.mark(function n(){return a.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,Object(s.a)({url:"/api/users/list",params:e});case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}},n,t)}))()},create:function(e){var t=this;return i()(a.a.mark(function n(){return a.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,Object(s.a)({url:"/api/users/create",method:"post",data:e});case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}},n,t)}))()},update:function(e){var t=this;return i()(a.a.mark(function n(){return a.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,Object(s.a)({url:"/api/users/update",method:"post",data:e});case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}},n,t)}))()},delete:function(e){var t=this;return i()(a.a.mark(function n(){return a.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,Object(s.a)({url:"/api/users/remove",method:"delete",data:e});case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}},n,t)}))()}},f={get:function(e){var t=this;return i()(a.a.mark(function n(){return a.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,Object(s.a)({url:"/api/book/record",params:e});case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}},n,t)}))()}}},"1I8c":function(e,t,n){"use strict";n.d(t,"a",function(){return r}),n.d(t,"b",function(){return a});var r="Ranking",a="图书简介"},"1dVU":function(e,t){},IcnI:function(e,t,n){"use strict";n("lRwf");var r=n("SJI6"),a=n.n(r),o=n("YaEn"),i=n("oAV5"),s=i.a.is,u={namespaced:!0,state:{cacheList:["$root"]},mutations:{addCache:function(e,t){-1==e.cacheList.indexOf(t)&&e.cacheList.push(t)},removeCache:function(e,t){if(-1!==e.cacheList.indexOf(t)){var n=e.cacheList.indexOf(t);e.cacheList.splice(n,1)}},refresh:function(e,t){if(!t)return e.cacheList=["$root"],void setTimeout(function(){e.cacheList=["$root"].concat(c())});var n=e.cacheList.indexOf(t);-1!==n&&(e.cacheList.splice(n,1),setTimeout(function(){e.cacheList.push(t)}))},notRefresh:function(e,t){e.cacheList=["$root",t],setTimeout(function(){e.cacheList=["$root"].concat(c())})},clearCache:function(e,t){e.cacheList=["$root"]},initCache:function(e,t){e.cacheList=["$root"].concat(c())}}};function c(){var e=[];return function e(t,n){if(!s().Array(t))return;if(0==t.length)return;for(var r=0;r0){var c=s[u];c={name:n,params:a,query:i},s.splice(u,1,c)}},pageColoseAll:function(e){o.a.push({name:e.root.name}),e.pageList=[e.root],N.commit("cache/refresh"),v.setLocal("pageList",e.pageList)},pageClearOthers:function(e){for(var t=e.pageList,n=e.currPageName,r=[e.root],a=0;a0){n.title=a.children[0].name,n.routerName=a.children[0].routerName,n.name=a.children[0].routerName;break}r++}N.commit("menu/root",n),o.a.replace({name:n.name})},clearPage:function(e){e.pageList=[],e.openedArr=[],e.currentPath=[],e.currPageName="",e.root={},v.setLocal("pageList",""),v.setLocal("openedArr",""),v.setLocal("currentPath",""),v.setLocal("currPageName",""),v.setLocal("root","")}},actions:{logOutBtn:function(e){var t=this,n=e.commit;return m()(p.a.mark(function e(){return p.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:o.a.replace({name:"Login"}),N.commit("users/clearUser"),n("clearPage");case 3:case"end":return e.stop()}},e,t)}))()}}};var y=i.a.storage,L=(i.a.is,i.a.attrData);function k(e){return e&&y.remove("users"),(e=e||{}).users=L("users","Object",{}),e.isLogin=!1,e}var O={modules:{cache:u,users:{namespaced:!0,state:k(),mutations:{users:function(e,t){e.users=t,y.setLocal("users",t)},clearUser:function(e){k(e)}}},menu:w,defaults:{namespaced:!0,state:{},mutations:{}}}},S=new a.a.Store(O),N=t.a=S},J9qc:function(e,t){},KExE:function(e,t,n){"use strict";var r=n("Dd8w"),a=n.n(r),o=n("lRwf"),i={LOGIN:"/api/v1/login",CREATE:"/api/v1/users",UPLOAD:"/api/v1/upload/image"},s={ART_ADD:"/api/v1/article",ART_BY_USER:function(e){return"/api/v1/article/byuser/"+e},ART_PUT:function(e){return"/api/v1/article/"+e}};n.n(o).a.prototype.$Inter=a()({},i,s)},NHnr:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n("lRwf"),a=n.n(r),o=n("BTaQ"),i=n.n(o),s=(n("+skl"),{name:"fy-layout",props:{bgColor:String}}),u={render:function(){var e=this.$createElement;return(this._self._c||e)("div",{staticClass:"fy-layout",style:{backgroundColor:this.bgColor}},[this._t("default")],2)},staticRenderFns:[]};var c=n("VU/8")(s,u,!1,function(e){n("seCf")},null,null).exports,l={name:"fy-layout",props:{bgColor:String,align:String}},p={render:function(){var e=this.$createElement;return(this._self._c||e)("div",{staticClass:"fy-block",style:{"text-align":this.align}},[this._t("default")],2)},staticRenderFns:[]};var f=n("VU/8")(l,p,!1,function(e){n("sIw3")},null,null).exports,m=n("p8gx"),d=n.n(m),h={name:"AnimateNumber",props:{tag:{type:String,default:"span"},before:{type:String,default:""},after:{type:String,default:""},value:{type:Number,default:0},duration:{type:Number,default:2e3},fixed:{type:Number,default:0}},created:function(){},watch:{value:{handler:function(e,t){var n=this;this.$nextTick(function(){n.progress()})},immediate:!0}},mounted:function(){},methods:{progress:function(){var e=this,t=this.$refs.number,n=this.duration,r=this.fixed;d()(t,{opacity:1},{duration:n,progress:function(n,a,o,i,s){t.innerHTML=e.before+e.moneySplit((a*e.value).toFixed(r))+e.after}})},moneySplit:function(e){return"string"==typeof e||"number"==typeof e?e.toString().replace(/\d(?=(?:\d{3})+\b)/g,"$&,"):"0"}}},v={render:function(){var e=this.$createElement;return(this._self._c||e)(this.tag,{ref:"number",tag:"component",staticClass:"fy-number"},[this._v("\n 0\n")])},staticRenderFns:[]};var g=n("VU/8")(h,v,!1,function(e){n("ukSL")},null,null).exports,b={name:"fullScreen",props:{value:{type:Boolean,default:!1}},computed:{showFullScreenBtn:function(){return window.navigator.userAgent.indexOf("MSIE")<0}},methods:{handleFullscreen:function(){var e=document.body;this.value?document.exitFullscreen?document.exitFullscreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.webkitCancelFullScreen?document.webkitCancelFullScreen():document.msExitFullscreen&&document.msExitFullscreen():e.requestFullscreen?e.requestFullscreen():e.mozRequestFullScreen?e.mozRequestFullScreen():e.webkitRequestFullScreen?e.webkitRequestFullScreen():e.msRequestFullscreen&&e.msRequestFullscreen()},handleChange:function(){this.handleFullscreen()}},created:function(){var e=this,t=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.fullScreen||document.mozFullScreen||document.webkitIsFullScreen;t=!!t,document.addEventListener("fullscreenchange",function(){e.$emit("input",!e.value),e.$emit("on-change",!e.value)}),document.addEventListener("mozfullscreenchange",function(){e.$emit("input",!e.value),e.$emit("on-change",!e.value)}),document.addEventListener("webkitfullscreenchange",function(){e.$emit("input",!e.value),e.$emit("on-change",!e.value)}),document.addEventListener("msfullscreenchange",function(){e.$emit("input",!e.value),e.$emit("on-change",!e.value)}),this.$emit("input",t)}},x={render:function(){var e=this.$createElement,t=this._self._c||e;return this.showFullScreenBtn?t("li",{staticClass:"hover",on:{click:this.handleChange}},[t("Tooltip",{attrs:{content:this.value?"退出全屏":"全屏",placement:"bottom"}},[t("Icon",{staticClass:"arrow-expand",attrs:{type:this.value?"arrow-shrink":"arrow-expand",size:23}})],1)],1):this._e()},staticRenderFns:[]},w=n("VU/8")(b,x,!1,null,null,null).exports,y={name:"FyUpload",props:{value:{type:Array,default:[]},multiple:{type:Boolean,default:!0},isLoadImg:{type:Boolean,default:!1},beforeURL:{type:String,default:""},action:{type:String,default:"/api/v1/upload/image"},showList:{type:Boolean,default:!1},format:{type:Array,default:["jpg","jpeg","png"]},maxSize:{type:Number,default:800},maxFile:{type:Number,default:5},name:{type:String,default:"Filedata"}},watch:{value:function(e){var t=this;this.defaultList=e,this.$nextTick(function(){t.uploadList=t.$refs.upload.fileList})}},data:function(){return{imgIndex:0,visible:!1,Carvisible:!1,uploadList:[],defaultList:this.value}},methods:{visibleChange:function(e){var t=this;0==e&&setTimeout(function(){t.Carvisible=!1},200)},handleView:function(e){this.imgIndex=e,this.visible=!0,this.Carvisible=!0},handleRemove:function(e){var t=this.$refs.upload.fileList;this.$refs.upload.fileList.splice(t.indexOf(e),1),this.$emit("input",this.uploadList.concat()),this.$emit("remove",e)},handleSuccess:function(e,t){t.url=e.url,t.name="",this.$emit("input",this.uploadList.concat()),this.$emit("success",t)},handleFormatError:function(e){this.$Notice.warning({title:"文件格式不正确",desc:"文件格式 "+e.name+" 不正确,请选择"+this.format.join("、")})},handleMaxSize:function(e){this.$Notice.warning({title:"超出文件大小限制",desc:"文件 "+e.name+" 太大,不超过"+this.maxSize+"kb"})},handleBeforeUpload:function(){var e=this.uploadList.length]+>/g,"")}),a.a.filter("toDate",function(e){if(!e)return"";var t=+new Date,n=+new Date(e);return t-n<6e4?"刚刚":t-n<36e5?parseInt((t-n)/6e4)+" 分钟前":t-n<864e5?parseInt((t-n)/36e5)+" 小时前":t-n<6048e5?parseInt((t-n)/864e5)+" 天前":t-n<2592e6?parseInt((t-n)/6048e5)+" 周前":t-n>=2592e6?new Date(e).Format("yyyy-MM-dd"):void 0});n("SFhQ");a.a.config.silent=!1,a.a.config.productionTip=!1,a.a.prototype.$Message.config({duration:1}),new a.a({el:"#app",router:N.a,store:j.a,template:"",created:function(){this.$store.commit("cache/initCache")},components:{App:_}})},OMN4:function(e,t){e.exports=axios},QFzw:function(e,t){},SFhQ:function(e,t){["Button","Dropdown","DropdownMenu","Icon","DropdownItem","Tag","Form","FormItem","Input","Row","Col"].map(function(e){return window[e]=e})},SJI6:function(e,t){e.exports=Vuex},YaEn:function(e,t,n){"use strict";n("lRwf");var r=n("pRNm"),a=n.n(r),o=n("IcnI"),i=n("oAV5");var s=[function(e,t,n){return-1===["Login"].indexOf(e.name)||(n(!0),!1)},function(e,t,n){return!!i.a.storage.getLocal("users")||(i.a.$Message.warning("请登录"),n({name:"Login"}),!1)}],u={path:"Errors",name:"Errors",component:function(){return n.e(2).then(n.bind(null,"SmcN"))}},c=new a.a({routes:[{path:"/",redirect:"/Login"},{path:"/home",name:"home",component:function(){return n.e(1).then(n.bind(null,"3vSQ"))},children:[u,{path:"User",name:"User",component:function(){return Promise.all([n.e(0),n.e(8)]).then(n.bind(null,"KQKl"))}},{path:"Category",name:"Category",component:function(){return Promise.all([n.e(0),n.e(10)]).then(n.bind(null,"dmxn"))}},{path:"Press",name:"Press",component:function(){return Promise.all([n.e(0),n.e(9)]).then(n.bind(null,"5/23"))}},{path:"Book",name:"Book",component:function(){return Promise.all([n.e(0),n.e(6)]).then(n.bind(null,"pKvg"))}},{path:"Borrow",name:"Borrow",component:function(){return Promise.all([n.e(0),n.e(5)]).then(n.bind(null,"stRv"))}},{path:"Record",name:"Record",component:function(){return Promise.all([n.e(0),n.e(7)]).then(n.bind(null,"KjHZ"))}},{path:"Ranking",name:"Ranking",component:function(){return n.e(4).then(n.bind(null,"uem+"))}}]},{path:"/login",name:"Login",component:function(){return n.e(3).then(n.bind(null,"jT7l"))}},{path:"*",redirect:"/home/Errors"}]});c.beforeEach(function(e,t,n){o.a.commit("menu/currPageName",e.name);for(var r=null,a=0;a=n+t){for(var a=arguments.length,o=Array(a),i=0;i0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"String",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",r=c.getLocal(e);try{r=d()[t](r)?r:n}catch(e){r=n}return r}}},p8gx:function(e,t){e.exports=Velocity},pRNm:function(e,t){e.exports=VueRouter},sIw3:function(e,t){},seCf:function(e,t){},ukSL:function(e,t){},vLgD:function(e,t,n){"use strict";var r=n("//Fk"),a=n.n(r),o=n("lRwf"),i=n.n(o),s=n("OMN4"),u=n.n(s),c=(n("YaEn"),n("oAV5")),l=n("IcnI");u.a.defaults.timeout=2e4,u.a.defaults.withCredentials=!0,u.a.interceptors.request.use(function(e){return e},function(e){return a.a.reject(e)}),u.a.interceptors.response.use(function(e){return e},function(e){if(!e.response)return c.a.$Message.error("请求超时,请重试!"),a.a.reject(e);var t=e.response,n=t.status,r=t.data;return r.message&&c.a.$Message.error(r.code+":"+r.message),403==n&&l.a.dispatch("menu/logOutBtn"),a.a.reject(n)}),i.a.prototype.$http=u.a,t.a=u.a}},["NHnr"]);
--------------------------------------------------------------------------------
/app/public/web/static/js/manifest.57e5dc330eceeed802b8.js:
--------------------------------------------------------------------------------
1 | !function(e){var n=window.webpackJsonp;window.webpackJsonp=function(r,c,a){for(var f,d,i,u=0,s=[];u {
3 | const { router, controller, middleware } = app;
4 | const { category, login, users, press, book } = controller;
5 | const userRequired = middleware.userRequired();
6 | const userAdmin = middleware.userAdmin();
7 |
8 | router.post("/api/book/create", userAdmin, book.create);
9 | router.del("/api/book/remove", userAdmin, book.remove);
10 | router.get("/api/book/list", userAdmin, book.list);
11 | router.post("/api/book/update", userAdmin, book.update)
12 | router.post("/api/book/borrow", userAdmin, book.borrow)
13 | router.get("/api/book/record", userAdmin, book.record)
14 | router.get("/api/book/readingAmount", userAdmin, book.readingAmount)
15 |
16 |
17 | router.post("/api/category/create", userAdmin, category.create);
18 | router.del("/api/category/remove", userAdmin, category.remove);
19 | router.get("/api/category/list", userAdmin, category.list);
20 | router.get("/api/category/allList", userAdmin, category.allList);
21 | router.post("/api/category/update", userAdmin, category.update)
22 |
23 | router.post("/api/press/create", userAdmin, press.create);
24 | router.del("/api/press/remove", userAdmin, press.remove);
25 | router.get("/api/press/list", userAdmin, press.list);
26 | router.get("/api/press/allList", userAdmin, press.allList);
27 | router.post("/api/press/update", userAdmin, press.update)
28 |
29 | router.post("/api/users/create", userAdmin, users.create);
30 | router.del("/api/users/remove", userAdmin, users.remove);
31 | router.get("/api/users/list", userAdmin, users.list);
32 | router.post("/api/users/update", userAdmin, users.update)
33 |
34 | // 登录校验
35 | router.post('/api/login', app.passport.authenticate('local', { successRedirect: '/api/login/authCallback' }));
36 | router.post('/api/loginOut', login.loginOut);
37 | router.get('/api/login/checkcode', login.checkcode);
38 | // 鉴权成功后的回调页面
39 | router.get('/api/login/authCallback', login.authCallback);
40 | router.get('/api/users/create', users.create);
41 | };
42 |
--------------------------------------------------------------------------------
/app/service/book.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | const { Service } = require("egg");
3 |
4 | const Model = 'Book';
5 |
6 | class BookService extends Service {
7 | /**----------------base-------------------**/
8 | async create({ _id, ...data } = {}) {
9 | const model = this.ctx.model[Model]
10 | return await model.create(data);
11 | }
12 | async removeAll(ids) {
13 | return this.ctx.model[Model].remove({ _id: { $in: ids } });
14 | }
15 | async update({ _id, ...update } = {}) {
16 | return this.ctx.model[Model].update({ _id }, update);
17 | }
18 | async findList({ size, pageNo, ...query } = {}) {
19 | const { QueryPage, filterQuery } = this.ctx.helper;
20 | const model = this.ctx.model[Model];
21 | const result = await QueryPage({ size, pageNo }, () => {
22 | let find = filterQuery(query)
23 | find.name = new RegExp(find.name)
24 | find.author = new RegExp(find.author)
25 | find.$and = []
26 |
27 | if (find.borrowStatus == 0) {
28 | find.borrowStatus = { $in: ['', 0] }
29 | }
30 | if (find.createdAt) {
31 | let date = new Date(find.createdAt)
32 | let hdate = new Date(+date + 24 * 3600 * 1000);
33 | find.$and.push({ createdAt: { $gt: date } })
34 | find.$and.push({ createdAt: { $lt: hdate } })
35 | delete find.createdAt
36 | }
37 | if (!find.$and.length) {
38 | delete find.$and;
39 | }
40 | return model.find(find).sort({ _id: -1 }).populate([{
41 | path: "category",
42 | select: "name",
43 | }, {
44 | path: "press",
45 | select: "name",
46 | }]);
47 | });
48 | return result;
49 | }
50 | /**----------------end-------------------**/
51 | //借还书
52 | async borrow({ _id, userId, borrowStatus }) {
53 | const { Users, Book, Borrow } = this.ctx.model;
54 | const user = await Users.findOne({ _id: userId })
55 | if (!user) this.ctx.throw(417, "读者不存在!")
56 | //还书需要判断是否借出过
57 | if (borrowStatus != 1) {
58 | //判断用户是否有借书
59 | let borrow = await Borrow.findOne({
60 | book: _id,
61 | user: user._id,
62 | });
63 | if (!borrow) {
64 | return this.ctx.throw(417, "用户没有借这本书!")
65 | }
66 | await Book.update({ _id }, { borrowStatus })
67 | } else {
68 | //借书需要 改变状态,借阅+1
69 | await Book.update({ _id }, { borrowStatus, $inc: { borrowTotal: 1 } })
70 | }
71 | return await Borrow.update({
72 | book: _id,
73 | user: user._id,
74 | }, {
75 | book: _id,
76 | user: user._id,
77 | borrowStatus
78 | }, { upsert: true })
79 | }
80 | async record({ size, pageNo, ...query } = {}) {
81 | const { QueryPage, filterQuery } = this.ctx.helper;
82 | const model = this.ctx.model.Borrow;
83 | const result = await QueryPage({ size, pageNo }, () => {
84 | let find = filterQuery(query)
85 | find.user = find.userId
86 | find.borrowStatus = 1
87 | delete find.userId;
88 | return model.find(find).sort({ _id: -1 }).populate([{
89 | path: "book",
90 | options: {
91 | borrowStatus: { $ne: 1 }
92 | }
93 | }, {
94 | path: "user",
95 | }]);
96 | });
97 | return result;
98 | }
99 | }
100 | module.exports = BookService
101 |
--------------------------------------------------------------------------------
/app/service/category.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | const { Service } = require("egg");
3 |
4 | const Model = 'Category';
5 |
6 | class CategoryService extends Service {
7 | /**----------------base-------------------**/
8 | async create({ _id, ...data } = {}) {
9 | const model = this.ctx.model[Model]
10 | return await model.create(data);
11 | }
12 | async removeAll(ids) {
13 | return this.ctx.model[Model].remove({ _id: { $in: ids } });
14 | }
15 | async update({ _id, ...update } = {}) {
16 | return this.ctx.model[Model].update({ _id }, update);
17 | }
18 | async findList({ size, pageNo, ...query } = {}) {
19 | const { QueryPage } = this.ctx.helper;
20 | const model = this.ctx.model[Model];
21 | const result = await QueryPage({ size, pageNo }, () => {
22 | query = query || {};
23 | query.name = new RegExp(query.name)
24 | return model.find(query).sort({ _id: -1 });
25 | });
26 | return result;
27 | }
28 | /**----------------end-------------------**/
29 |
30 | }
31 | module.exports = CategoryService
32 |
--------------------------------------------------------------------------------
/app/service/charts.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | const { Service } = require("egg");
3 |
4 |
5 | class ChartService extends Service {
6 | //图书借阅量统计图
7 | async readingAmount() {
8 | const { Book } = this.ctx.model;
9 | const size = 10;//统计前10
10 | return await Book.find({}).sort({ borrowTotal: -1 }).skip(0).limit(size).populate([{
11 | path: "category"
12 | }, {
13 | path: "press"
14 | }])
15 | }
16 | }
17 | module.exports = ChartService
18 |
--------------------------------------------------------------------------------
/app/service/press.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | const { Service } = require("egg");
3 |
4 | const Model = 'Press';
5 |
6 | class PressService extends Service {
7 | /**----------------base-------------------**/
8 | async create({ _id, ...data } = {}) {
9 | const model = this.ctx.model[Model]
10 | return await model.create(data);
11 | }
12 | async removeAll(ids) {
13 | return this.ctx.model[Model].remove({ _id: { $in: ids } });
14 | }
15 | async update({ _id, ...update } = {}) {
16 | return this.ctx.model[Model].update({ _id }, update);
17 | }
18 | async findList({ size, pageNo, ...query } = {}) {
19 | const { QueryPage } = this.ctx.helper;
20 | const model = this.ctx.model[Model];
21 | const result = await QueryPage({ size, pageNo }, () => {
22 | query = query || {};
23 | query.name = new RegExp(query.name)
24 | return model.find(query).sort({ _id: -1 });
25 | });
26 | return result;
27 | }
28 | /**----------------end-------------------**/
29 | }
30 | module.exports = PressService
31 |
--------------------------------------------------------------------------------
/app/service/users.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | const { Service } = require("egg");
3 |
4 | const Model = 'Users';
5 |
6 | class UserService extends Service {
7 | async login({ userName, password } = {}) {
8 | if (!userName || !password) {
9 | return null;
10 | }
11 | return await this.ctx.model.Users.findOne({ userName, password });
12 | }
13 | /**----------------base-------------------**/
14 | async create({ _id, ...data } = {}) {
15 | const model = this.ctx.model[Model]
16 | if (!data.userName) {
17 | return await model.create(data);
18 | }
19 | const find = await model.findOne({
20 | userName: data.userName
21 | })
22 | if (!find) {
23 | return await model.create(data);
24 | }
25 | return this.ctx.throw(417, "账号已存在!");
26 | }
27 | async removeAll(ids) {
28 | return this.ctx.model[Model].remove({ _id: { $in: ids } });
29 | }
30 | async update({ _id, ...update } = {}) {
31 | return this.ctx.model[Model].update({ _id }, update);
32 | }
33 | async findList({ size, pageNo, ...query } = {}) {
34 | const { QueryPage } = this.ctx.helper;
35 | const model = this.ctx.model[Model];
36 | const result = await QueryPage({ size, pageNo }, () => {
37 | query = query || {};
38 | query.name = new RegExp(query.name)
39 | return model.find(query).sort({ _id: -1 });
40 | });
41 | return result;
42 | }
43 | /**----------------end-------------------**/
44 |
45 | }
46 | module.exports = UserService
47 |
--------------------------------------------------------------------------------
/app/utils/utils.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | const crypto = require("crypto");
3 | const validators = require('async-validator');
4 | const UUID = require('uuid/v1');
5 | /**
6 | * @description 格式化
7 | * @param {String} fmt yyyy-MM-dd hh:mm:ss
8 | */
9 | Date.prototype.Format = function (fmt) {
10 | var o = {
11 | "M+": this.getMonth() + 1,
12 | "d+": this.getDate(),
13 | "H+": this.getHours(),
14 | "h+": this.getHours(),
15 | "m+": this.getMinutes(),
16 | "s+": this.getSeconds(),
17 | "q+": Math.floor((this.getMonth() + 3) / 3),
18 | "S": this.getMilliseconds() //毫秒
19 | };
20 | if (/(y+)/.test(fmt))
21 | fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
22 | for (var k in o)
23 | if (new RegExp("(" + k + ")").test(fmt))
24 | fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
25 | return fmt;
26 | };
27 | const utils = {
28 | //sha256加密
29 | sha256(...args) {
30 | function $encry(str) {
31 | const sha256 = crypto.createHash('sha256');
32 | sha256.update(str);
33 | return sha256.digest('hex');
34 | }
35 | return $encry(args.join(''));
36 | },
37 | //判断类型函数
38 | is() {
39 | let is = {
40 | types: ["Array", "Function", "Boolean", "Date", "Number", "Object", "RegExp", "String", "Window", "HTMLDocument"]
41 | };
42 | for (let i = 0, c; c = is.types[i++];) {
43 | is[c] = (function (type) {
44 | return function (obj) {
45 | if (type === 'Number' && isNaN(obj)) {
46 | return false;
47 | }
48 | return Object.prototype.toString.call(obj) == "[object " + type + "]";
49 | };
50 | })(c);
51 | }
52 | return is;
53 | },
54 | //错误处理
55 | error(ctx, obj = {}) {
56 | const body = Object.assign({ code: 'server error', status: ctx.status, message: "error" }, obj);
57 | //未满足期望
58 | if (body.status == 417 || body.status == 412) {
59 | body.code = 'Expectation failed';
60 | }
61 | ctx.status = body.status;
62 | ctx.response.set("Content-Type", "application/json");
63 | ctx.res.end(JSON.stringify(body));
64 | },
65 | initUUID() {
66 | return UUID().replace(/-/g, '');
67 | },
68 | async QueryPage({ pageNo = 1, size = 20 }, callback) {
69 | pageNo = +pageNo;
70 | size = +size;
71 | if (!utils.is().Number(pageNo))
72 | pageNo = 1;
73 | if (!utils.is().Number(size))
74 | size = 20;
75 | if (pageNo < 1)
76 | pageNo = 1;
77 | if (size <= 0)
78 | size = 20;
79 | if (size > 1000)
80 | size = 1000;
81 | const count = await callback().count();
82 | const rows = await callback().skip((pageNo - 1) * size).limit(size);
83 | return {
84 | size,
85 | pageNo,
86 | pageSize: Math.ceil(count / size),
87 | count,
88 | rows
89 | };
90 | },
91 | filterQuery(query = {}) {
92 | let result = {};
93 | Object.keys(query).map((key) => {
94 | if (query[key]) {
95 | result[key] = query[key];
96 | }
97 | });
98 | return result;
99 | },
100 | validate(rules, data) {
101 | return new Promise((resolve, reject) => {
102 | new validators(rules).validate(data, (errors, fields) => {
103 | if (errors) {
104 | resolve({
105 | status: 417,
106 | code: 'invalid param',
107 | message: errors[0].message
108 | });
109 | }
110 | resolve();
111 | });
112 | });
113 | },
114 | async getCheckCode(ctx) {
115 | const captchapng = require('captchapng');
116 | let width = 100;
117 | let height = 40;
118 | let code = parseInt(Math.random() * 9000 + 1000);
119 | let p = new captchapng(width, height, code);
120 | p.color(0, 0, 0, 0);
121 | p.color(80, 80, 80, 255);
122 | let img = p.getBase64();
123 | let imgbase64 = new Buffer(img, 'base64');
124 | return {
125 | imgbase64,
126 | code
127 | }
128 | }
129 | };
130 | module.exports = utils;
131 |
--------------------------------------------------------------------------------
/appveyor.yml:
--------------------------------------------------------------------------------
1 | environment:
2 | matrix:
3 | - nodejs_version: '8'
4 |
5 | install:
6 | - ps: Install-Product node $env:nodejs_version
7 | - npm i npminstall && node_modules\.bin\npminstall
8 |
9 | test_script:
10 | - node --version
11 | - npm --version
12 | - npm run test
13 |
14 | build: off
15 |
--------------------------------------------------------------------------------
/config/config.default.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const { error } = require('../app/utils/utils')
3 | module.exports = appInfo => {
4 | const config = {};
5 |
6 | // use for cookie sign key, should change to your own and keep security
7 | config.keys = appInfo.name + '_1516533966144_7741';
8 | config.auth_cookie_name = 'book';
9 | // add your config here
10 | config.middleware = [];
11 | config.mongoose = {
12 | url: 'mongodb://127.0.0.1:27017/book',
13 | options: {},
14 | };
15 | //web安全
16 | config.security = {
17 | csrf: {
18 | enable: false,
19 | },
20 | }
21 | //全局错误处理
22 | config.onerror = {
23 | all(err, ctx) {
24 | error(ctx, {
25 | code: err.code,
26 | message: err.message
27 | });
28 | }
29 | }
30 | config.multipart = {
31 | fileSize: '2mb',
32 | };
33 | return config;
34 | };
35 |
--------------------------------------------------------------------------------
/config/plugin.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | exports.mongoose = {
4 | enable: true,
5 | package: 'egg-mongoose',
6 | };
7 | exports.passport = {
8 | enable: true,
9 | package: 'egg-passport',
10 | };
--------------------------------------------------------------------------------
/init/initData.js:
--------------------------------------------------------------------------------
1 | module.exports = async app => {
2 | const { Users } = app.model;
3 | const count = await Users.count();
4 | if (count === 0) {
5 | await Users.create({
6 | userName: 'admin',
7 | password: 'admin',
8 | name: '管理员',
9 | isAdmin: true,
10 | });
11 | }
12 | };
13 |
--------------------------------------------------------------------------------
/init/passLocal.js:
--------------------------------------------------------------------------------
1 | const LocalStrategy = require('passport-local').Strategy;
2 | module.exports = (app) => {
3 | // 挂载 strategy
4 | app.passport.use(new LocalStrategy({
5 | passReqToCallback: true,
6 | usernameField: 'userName',
7 | passwordField: 'password',
8 | }, (req, userName, password, done) => {
9 | const user = {
10 | provider: 'local',
11 | userName,
12 | password,
13 | };
14 | app.passport.doVerify(req, user, done);
15 | }));
16 |
17 | // 处理用户信息
18 | app.passport.verify(async (ctx, user) => {
19 | if (ctx.session.code != ctx.request.body.img) {
20 | return {
21 | status: 401,
22 | message: "验证码不正确"
23 | }
24 | }
25 | let existUser = await ctx.service.users.login(user);
26 | if (existUser) {
27 | if (!existUser.isAdmin) {
28 | return {
29 | status: 401,
30 | message: "您没有权限!"
31 | }
32 | }
33 | //生成token
34 | return existUser
35 | }
36 | return {
37 | status: 401,
38 | message: "用户名或密码不正确"
39 | }
40 | });
41 | // app.passport.deserializeUser(async (ctx, user) => {
42 | // console.log(user)
43 | // console.log('烦序列号')
44 | // return user
45 | // // if (user) {
46 | // // if (!auth_token) {
47 | // // return user;
48 | // // }
49 |
50 | // // const auth = auth_token.split('$$$$');
51 | // // const user_id = auth[0];
52 | // // user = await ctx.service.user.getUserById(user_id);
53 |
54 | // // if (!user) {
55 | // // return user;
56 | // // }
57 |
58 | // // if (ctx.app.config.admins.hasOwnProperty(user.loginname)) {
59 | // // user.is_admin = true;
60 | // // }
61 | // // }
62 |
63 | // // return user;
64 | // });
65 | }
--------------------------------------------------------------------------------
/init/session.js:
--------------------------------------------------------------------------------
1 | module.exports = (app) => {
2 | app.sessionStore = {
3 | async get(key) {
4 | const session = await app.model.Session.findOne({ key });
5 | if (!session) return null
6 | return JSON.parse(session.value);
7 | },
8 | async set(key, value, maxAge) {
9 | if (!maxAge) maxAge = 5 * 60 * 60 * 1000;
10 | value = JSON.stringify(value);
11 | await app.model.Session.update({ key }, { $set: { value } }, {
12 | upsert: true
13 | });
14 | },
15 | async destroy(key) {
16 | await app.model.Session.remove({ key })
17 | }
18 | }
19 | }
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "tsegg",
3 | "version": "1.0.0",
4 | "description": "",
5 | "private": true,
6 | "dependencies": {
7 | "async-validator": "^1.8.2",
8 | "captchapng": "0.0.1",
9 | "egg": "^2.2.1",
10 | "egg-mongoose": "^2.2.0",
11 | "egg-passport": "^2.0.1",
12 | "egg-scripts": "^2.5.0",
13 | "egg-session": "^3.1.0",
14 | "node-uuid": "^1.4.8",
15 | "passport-local": "^1.0.0",
16 | "uuid": "^3.2.1"
17 | },
18 | "devDependencies": {
19 | "autod": "^3.0.1",
20 | "autod-egg": "^1.0.0",
21 | "egg-bin": "^4.3.5",
22 | "egg-ci": "^1.8.0",
23 | "egg-mock": "^3.14.0",
24 | "eslint": "^4.11.0",
25 | "eslint-config-egg": "^6.0.0",
26 | "webstorm-disable-index": "^1.2.0"
27 | },
28 | "engines": {
29 | "node": ">=8.9.0"
30 | },
31 | "scripts": {
32 | "start": "egg-scripts start --port=7001 --daemon --title=egg-server-showcase",
33 | "stop": "egg-scripts stop --title=egg-server-tsegg",
34 | "dev": "egg-bin dev",
35 | "debug": "egg-bin debug",
36 | "test": "npm run lint -- --fix && npm run test-local",
37 | "test-local": "egg-bin test",
38 | "cov": "egg-bin cov",
39 | "lint": "eslint .",
40 | "ci": "npm run lint && npm run cov",
41 | "autod": "autod",
42 | "tsc:w": "tsc -p tsconfig.json -w"
43 | },
44 | "ci": {
45 | "version": "8"
46 | },
47 | "repository": {
48 | "type": "git",
49 | "url": ""
50 | },
51 | "author": "",
52 | "license": "MIT"
53 | }
54 |
--------------------------------------------------------------------------------
/test/app/controller/home.test.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | const { app, assert } = require('egg-mock/bootstrap');
4 |
5 | describe('test/app/controller/home.test.js', () => {
6 |
7 | it('should assert', function* () {
8 | const pkg = require('../../../package.json');
9 | assert(app.config.keys.startsWith(pkg.name));
10 |
11 | // const ctx = app.mockContext({});
12 | // yield ctx.service.xx();
13 | });
14 |
15 | it('should GET /', () => {
16 | return app.httpRequest()
17 | .get('/')
18 | .expect('hi, egg')
19 | .expect(200);
20 | });
21 | });
22 |
--------------------------------------------------------------------------------