├── .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 | ![1.jpg](http://ooaa8syjw.bkt.clouddn.com/FkmDqxC6VB7b_wUmv464shTpeX1f) 93 | 登录 94 | ![2.jpg](http://ooaa8syjw.bkt.clouddn.com/FhIHskYQivj5H56uqaaG1YsKeGmg) 95 | 图书简介 96 | ![3.jpg](http://ooaa8syjw.bkt.clouddn.com/Fny0qZU463t12CQelfTTw4IKhMGp) 97 | 图书借还 98 | ![4.jpg](http://ooaa8syjw.bkt.clouddn.com/Fl2aCFTZuHHDcnIOvYdIMYJKU79S) 99 | 图书管理 100 | ![6.jpg](http://ooaa8syjw.bkt.clouddn.com/Fg_yAJ1vj3MJ_1CErWnYnAeuskwe) 101 | 读者管理 102 | ![7.jpg](http://ooaa8syjw.bkt.clouddn.com/Fm-scuetubCUorxdifCBSL1073ZT) 103 | 借阅记录 104 | ![image.png](http://ooaa8syjw.bkt.clouddn.com/FuzYQxIVnh0tx_zLt_s70KK_K5e2) 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 | 3 | 4 | Group 4 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 276 | 277 | 278 | 279 | 280 | 281 | 282 | 283 | 284 | 285 | 286 | 287 | 288 | 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | 297 | 298 | 299 | 300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308 | 309 | 310 | 311 | 312 | 313 | 314 | -------------------------------------------------------------------------------- /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 | --------------------------------------------------------------------------------