├── README.md ├── app.js ├── bin └── www ├── config.js ├── login.png ├── model ├── project.js └── users.js ├── mongoose.js ├── package.json ├── password_reset.png ├── project.png ├── project_add.png ├── public ├── build │ ├── css │ │ ├── app.css │ │ ├── doc.css │ │ ├── message.css │ │ ├── nprogress.css │ │ └── themes │ │ │ ├── blue.css │ │ │ └── light.css │ └── js │ │ ├── app.js │ │ ├── loader.js │ │ ├── message.js │ │ ├── navbar.js │ │ ├── nprogress.js │ │ ├── onelevel.js │ │ ├── pjax.js │ │ └── tab.js ├── css │ ├── component.css │ ├── global.css │ ├── layout.css │ ├── login.css │ ├── normalize.css │ └── style.css ├── datas │ └── nav.js ├── font-awesome │ ├── css │ │ ├── font-awesome.css │ │ └── font-awesome.min.css │ └── fonts │ │ ├── FontAwesome.otf │ │ ├── fontawesome-webfont.eot │ │ ├── fontawesome-webfont.svg │ │ ├── fontawesome-webfont.ttf │ │ ├── fontawesome-webfont.woff │ │ └── fontawesome-webfont.woff2 ├── img │ ├── 0.jpg │ ├── demo-1-bg.jpg │ └── login_ico.png ├── js │ ├── EasePack.min.js │ ├── TweenLite.min.js │ ├── common.js │ ├── dateFormater.js │ ├── html5.js │ ├── index.js │ ├── jquery-1.12.4.min.js │ ├── login.js │ ├── navbar.js │ ├── rAF.js │ └── tab.js ├── layui │ ├── css │ │ ├── layui.css │ │ ├── layui.mobile.css │ │ └── modules │ │ │ ├── code.css │ │ │ ├── laydate │ │ │ └── default │ │ │ │ └── laydate.css │ │ │ └── layer │ │ │ └── default │ │ │ ├── icon-ext.png │ │ │ ├── icon.png │ │ │ ├── layer.css │ │ │ ├── loading-0.gif │ │ │ ├── loading-1.gif │ │ │ └── loading-2.gif │ ├── font │ │ ├── iconfont.eot │ │ ├── iconfont.svg │ │ ├── iconfont.ttf │ │ └── iconfont.woff │ ├── images │ │ └── face │ │ │ ├── 0.gif │ │ │ ├── 1.gif │ │ │ ├── 10.gif │ │ │ ├── 11.gif │ │ │ ├── 12.gif │ │ │ ├── 13.gif │ │ │ ├── 14.gif │ │ │ ├── 15.gif │ │ │ ├── 16.gif │ │ │ ├── 17.gif │ │ │ ├── 18.gif │ │ │ ├── 19.gif │ │ │ ├── 2.gif │ │ │ ├── 20.gif │ │ │ ├── 21.gif │ │ │ ├── 22.gif │ │ │ ├── 23.gif │ │ │ ├── 24.gif │ │ │ ├── 25.gif │ │ │ ├── 26.gif │ │ │ ├── 27.gif │ │ │ ├── 28.gif │ │ │ ├── 29.gif │ │ │ ├── 3.gif │ │ │ ├── 30.gif │ │ │ ├── 31.gif │ │ │ ├── 32.gif │ │ │ ├── 33.gif │ │ │ ├── 34.gif │ │ │ ├── 35.gif │ │ │ ├── 36.gif │ │ │ ├── 37.gif │ │ │ ├── 38.gif │ │ │ ├── 39.gif │ │ │ ├── 4.gif │ │ │ ├── 40.gif │ │ │ ├── 41.gif │ │ │ ├── 42.gif │ │ │ ├── 43.gif │ │ │ ├── 44.gif │ │ │ ├── 45.gif │ │ │ ├── 46.gif │ │ │ ├── 47.gif │ │ │ ├── 48.gif │ │ │ ├── 49.gif │ │ │ ├── 5.gif │ │ │ ├── 50.gif │ │ │ ├── 51.gif │ │ │ ├── 52.gif │ │ │ ├── 53.gif │ │ │ ├── 54.gif │ │ │ ├── 55.gif │ │ │ ├── 56.gif │ │ │ ├── 57.gif │ │ │ ├── 58.gif │ │ │ ├── 59.gif │ │ │ ├── 6.gif │ │ │ ├── 60.gif │ │ │ ├── 61.gif │ │ │ ├── 62.gif │ │ │ ├── 63.gif │ │ │ ├── 64.gif │ │ │ ├── 65.gif │ │ │ ├── 66.gif │ │ │ ├── 67.gif │ │ │ ├── 68.gif │ │ │ ├── 69.gif │ │ │ ├── 7.gif │ │ │ ├── 70.gif │ │ │ ├── 71.gif │ │ │ ├── 8.gif │ │ │ └── 9.gif │ ├── lay │ │ └── modules │ │ │ ├── carousel.js │ │ │ ├── code.js │ │ │ ├── element.js │ │ │ ├── flow.js │ │ │ ├── form.js │ │ │ ├── jquery.js │ │ │ ├── laydate.js │ │ │ ├── layedit.js │ │ │ ├── layer.js │ │ │ ├── laypage.js │ │ │ ├── laytpl.js │ │ │ ├── mobile.js │ │ │ ├── table.js │ │ │ ├── tree.js │ │ │ ├── upload.js │ │ │ └── util.js │ ├── layui.all.js │ └── layui.js └── uploads │ └── upload.html ├── routes ├── index.js ├── project.js └── users.js ├── utils ├── md5.js └── redis.js └── views ├── error.ejs ├── index.ejs ├── login.ejs ├── project.ejs ├── pswset.ejs ├── users.ejs └── welcome.ejs /README.md: -------------------------------------------------------------------------------- 1 | # 基于Nodejs、express框架的app升级服务。数据库MongoDB。UI框架Layui Admin。 2 | 3 | ------ 4 | 5 | 安卓以及嵌入式设备需要修改bug以及发布新的功能,就要用到在线升级。我这里给大家提供了一个基于Nodejs的在线升级服务器的Demo.真实使用下,建议文件上传到类似阿里云、七牛云这样的文件服务器。 6 | 7 | 参考知识点: 8 | > * Nodejs、Express框架 9 | > * LayUI的admin模板使用 10 | > * MongoDB以及Mongoose的使用 11 | 12 | ### 安装 13 | 1,git clone https://github.com/gytai/nodejs-app-upgrade.git 14 | 15 | 2,npm install 16 | 17 | 3,pm2 start bin/www -name upgrade 18 | 19 | ### 线上Demo 20 | http://112.74.81.224:3008/ 21 | 22 | 测试账户:admin 123456 23 | 24 | ### App检查更新 25 | Post:http://localhost:3000/project/check 26 | 27 | 返回: 28 | ```javascript 29 | { 30 | "code": 200, 31 | "msg": "有新的升级", 32 | "data": { 33 | "file_md5": "e396add0bc852fc82f30652eeb1520bf", 34 | "file_name": "robo3t-1.1.1-darwin-x86_64-c93c6b0.dmg", 35 | "file_size": 22617886, 36 | "name": "医疗", 37 | "version": "v1.0.2", 38 | "download_path": "/uploads/upload_e4796bd63685ff8144fc563af44052f4.dmg", 39 | "is_force": false 40 | } 41 | } 42 | ``` 43 | 44 | ### 已完成和未完成 45 | - [x] 登录、登出 46 | - [x] 项目添加、更新、删除 47 | - [x] 密码修改 48 | - [ ] 用户管理 49 | - [ ] 权限控制 50 | 51 | 实例图片: 52 | ![登录](https://github.com/gytai/nodejs-app-upgrade/blob/master/login.png) 53 | 54 | ![项目管理](https://github.com/gytai/nodejs-app-upgrade/blob/master/project.png) 55 | 56 | ![项目添加](https://github.com/gytai/nodejs-app-upgrade/blob/master/project_add.png) 57 | 58 | ![修改密码](https://github.com/gytai/nodejs-app-upgrade/blob/master/password_reset.png) 59 | 60 | 如果您喜欢,请给个Star 谢谢... 61 | -------------------------------------------------------------------------------- /app.js: -------------------------------------------------------------------------------- 1 | var express = require('express'); 2 | var path = require('path'); 3 | var favicon = require('serve-favicon'); 4 | var logger = require('morgan'); 5 | var cookieParser = require('cookie-parser'); 6 | var bodyParser = require('body-parser'); 7 | var session = require('express-session'); 8 | 9 | var index = require('./routes/index'); 10 | var users = require('./routes/users'); 11 | var project = require('./routes/project'); 12 | 13 | var app = express(); 14 | 15 | // view engine setup 16 | app.set('views', path.join(__dirname, 'views')); 17 | app.set('view engine', 'ejs'); 18 | 19 | // uncomment after placing your favicon in /public 20 | //app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))); 21 | app.use(logger('dev')); 22 | app.use(bodyParser.json()); 23 | app.use(bodyParser.urlencoded({ extended: false })); 24 | app.use(cookieParser()); 25 | app.use(express.static(path.join(__dirname, 'public'))); 26 | app.use(session({ 27 | secret: '12345', 28 | name: 'app-upgrade', 29 | cookie: {maxAge: 1000*60*60 }, 30 | resave: true, 31 | saveUninitialized: true 32 | })); 33 | 34 | app.use('/', index); 35 | app.use('/users', users); 36 | app.use('/project', project); 37 | 38 | // catch 404 and forward to error handler 39 | app.use(function(req, res, next) { 40 | var err = new Error('Not Found'); 41 | err.status = 404; 42 | next(err); 43 | }); 44 | 45 | // error handler 46 | app.use(function(err, req, res, next) { 47 | // set locals, only providing error in development 48 | res.locals.message = err.message; 49 | res.locals.error = req.app.get('env') === 'development' ? err : {}; 50 | 51 | // render the error page 52 | res.status(err.status || 500); 53 | res.render('error'); 54 | }); 55 | 56 | module.exports = app; 57 | -------------------------------------------------------------------------------- /bin/www: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | /** 4 | * Module dependencies. 5 | */ 6 | 7 | var app = require('../app'); 8 | var debug = require('debug')('nodejs-app-upgrade:server'); 9 | var http = require('http'); 10 | 11 | /** 12 | * Get port from environment and store in Express. 13 | */ 14 | 15 | var port = normalizePort(process.env.PORT || '3000'); 16 | app.set('port', port); 17 | 18 | /** 19 | * Create HTTP server. 20 | */ 21 | 22 | var server = http.createServer(app); 23 | 24 | /** 25 | * Listen on provided port, on all network interfaces. 26 | */ 27 | 28 | server.listen(port); 29 | server.on('error', onError); 30 | server.on('listening', onListening); 31 | 32 | /** 33 | * Normalize a port into a number, string, or false. 34 | */ 35 | 36 | function normalizePort(val) { 37 | var port = parseInt(val, 10); 38 | 39 | if (isNaN(port)) { 40 | // named pipe 41 | return val; 42 | } 43 | 44 | if (port >= 0) { 45 | // port number 46 | return port; 47 | } 48 | 49 | return false; 50 | } 51 | 52 | /** 53 | * Event listener for HTTP server "error" event. 54 | */ 55 | 56 | function onError(error) { 57 | if (error.syscall !== 'listen') { 58 | throw error; 59 | } 60 | 61 | var bind = typeof port === 'string' 62 | ? 'Pipe ' + port 63 | : 'Port ' + port; 64 | 65 | // handle specific listen errors with friendly messages 66 | switch (error.code) { 67 | case 'EACCES': 68 | console.error(bind + ' requires elevated privileges'); 69 | process.exit(1); 70 | break; 71 | case 'EADDRINUSE': 72 | console.error(bind + ' is already in use'); 73 | process.exit(1); 74 | break; 75 | default: 76 | throw error; 77 | } 78 | } 79 | 80 | /** 81 | * Event listener for HTTP server "listening" event. 82 | */ 83 | 84 | function onListening() { 85 | var addr = server.address(); 86 | var bind = typeof addr === 'string' 87 | ? 'pipe ' + addr 88 | : 'port ' + addr.port; 89 | debug('Listening on ' + bind); 90 | } 91 | -------------------------------------------------------------------------------- /config.js: -------------------------------------------------------------------------------- 1 | //Redis配置信息 2 | var REDIS = { 3 | port: 6379, 4 | host: "127.0.0.1" 5 | } 6 | 7 | exports.REDIS = REDIS; -------------------------------------------------------------------------------- /login.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/login.png -------------------------------------------------------------------------------- /model/project.js: -------------------------------------------------------------------------------- 1 | var mongoose = require('../mongoose').mongoose; 2 | var Schema = mongoose.Schema; 3 | 4 | var ProjectSchema = new Schema({ 5 | name : { type:String }, 6 | version : { type:String }, 7 | download_path : { type:String }, 8 | is_force : { type:Boolean }, 9 | time : { type:Date, default:Date.now }, 10 | option_people:{ type:String }, 11 | is_delete:{ type:Boolean , default:false }, 12 | file_md5:{ type:String }, 13 | file_size:{ type:Number }, 14 | file_name:{ type:String }, 15 | remark : { type:String} 16 | }); 17 | 18 | var ProjectModel = mongoose.model("project", ProjectSchema); 19 | 20 | function add(name,version,download_path,is_force,option_people,file_md5,file_size,file_name,remark,callback) { 21 | ProjectModel.find({name:name,is_delete:false},function (err,data) { 22 | if(err){ 23 | return callback(err,null); 24 | } 25 | if(data.length > 0){ 26 | return callback('项目已存在',null); 27 | } 28 | if(!is_force){ 29 | is_force = false 30 | }else{ 31 | is_force = true; 32 | } 33 | 34 | var project = new ProjectModel({ name: name,version:version,download_path:download_path,is_force:is_force,option_people:option_people,file_md5:file_md5,file_size:file_size,file_name:file_name,remark:remark}); 35 | project.save(function (err) { 36 | if (err){ 37 | return callback(err,null); 38 | } 39 | return callback(null,null); 40 | }); 41 | }); 42 | 43 | } 44 | 45 | function del(id,callback) { 46 | ProjectModel.findByIdAndUpdate(id, { is_delete: true }, callback); 47 | } 48 | 49 | function update(id,name,version,download_path,is_force,option_people,file_md5,file_size,file_name,remark,callback) { 50 | ProjectModel.findById(id,function (err,info) { 51 | if(err){ 52 | return callback(err,null); 53 | } 54 | if(!info){ 55 | return callback('项目不存在',null); 56 | } 57 | 58 | if(!is_force){ 59 | is_force = false 60 | }else{ 61 | is_force = true; 62 | } 63 | 64 | var param = { 65 | name: name || info.name, 66 | version:version || info.version, 67 | download_path:download_path || info.download_path, 68 | is_force:is_force, 69 | option_people:option_people || info.option_people, 70 | file_md5:file_md5 || info.file_md5, 71 | file_size:file_size || info.file_size, 72 | file_name:file_name || info.file_name, 73 | remark:remark || info.remark, 74 | }; 75 | 76 | ProjectModel.findByIdAndUpdate(id, param, callback); 77 | }); 78 | 79 | } 80 | 81 | function query(page,size,callback) { 82 | ProjectModel.find({is_delete:false}).skip( (page-1)*size ).limit(size).sort({time:-1}).exec(function (err, res) { 83 | if (err) { 84 | return callback(err,null); 85 | } 86 | return callback(null,res); 87 | }) 88 | 89 | } 90 | 91 | function check(name,ver,callback) { 92 | ProjectModel.findOne({name:name,version:{$gt: ver},is_delete:false},function (err, res) { 93 | if (err) { 94 | return callback(err,null); 95 | } 96 | if(!res){ 97 | return callback('暂无更新',null); 98 | } 99 | var ret = { 100 | file_md5:res.file_md5, 101 | file_name:res.file_name, 102 | file_size:res.file_size, 103 | name:res.name, 104 | version:res.version, 105 | download_path:res.download_path, 106 | is_force:res.is_force, 107 | remark: res.remark 108 | } 109 | return callback(null,ret); 110 | }); 111 | 112 | } 113 | 114 | exports.add = add; 115 | exports.del = del; 116 | exports.update = update; 117 | exports.query = query; 118 | exports.check = check; 119 | -------------------------------------------------------------------------------- /model/users.js: -------------------------------------------------------------------------------- 1 | var mongoose = require('../mongoose').mongoose; 2 | var crypto = require('crypto'); 3 | 4 | var Schema = mongoose.Schema; 5 | 6 | var UsersSchema = new Schema({ 7 | username : { type:String }, 8 | password : { type:String }, 9 | time : { type:Date, default:Date.now } 10 | }); 11 | 12 | var UsersModel = mongoose.model("users", UsersSchema); 13 | UsersModel.findOne({'username':'meyer'}, function(err, res){ 14 | if (err) { 15 | console.error(err); 16 | } 17 | if(!res){ 18 | var userModel = new UsersModel({ username:"meyer",password:crypto.createHash('md5').update("meyer2017*").digest('hex')}); 19 | userModel.save(function (err) { 20 | if (err){ 21 | console.error(err); 22 | } 23 | console.log('用户初始化成功'); 24 | }); 25 | } 26 | }) 27 | 28 | function login(username,password,callback) { 29 | var md5 = crypto.createHash('md5'); 30 | password = md5.update(password).digest('hex'); 31 | var condition = {'username' : username,'password':password}; 32 | 33 | UsersModel.findOne(condition, function(err, res){ 34 | var _err = null; 35 | if (err) { 36 | _err = err; 37 | } 38 | if(!res){ 39 | _err = '用户名密码不正确'; 40 | } 41 | return callback(_err,res); 42 | }) 43 | } 44 | 45 | function reset_psw(username,psw_old,psw_new,callback) { 46 | psw_old = crypto.createHash('md5').update(psw_old).digest('hex'); 47 | UsersModel.find({username:username,password:psw_old},function (err,info) { 48 | if (err) { 49 | return callback(err,null); 50 | } 51 | 52 | if(!info || info.length == 0){ 53 | return callback('原密码不正确',null); 54 | } 55 | psw_new = crypto.createHash('md5').update(psw_new).digest('hex'); 56 | UsersModel.findOneAndUpdate({username:username,password:psw_old}, {password:psw_new}, callback); 57 | }); 58 | } 59 | 60 | exports.login = login; 61 | exports.reset_psw = reset_psw; -------------------------------------------------------------------------------- /mongoose.js: -------------------------------------------------------------------------------- 1 | var mongoose = require("mongoose"); 2 | const DB_URL = 'mongodb://127.0.0.1:27017/app_upgrade'; 3 | mongoose.connect(DB_URL); 4 | 5 | /** 6 | * 连接成功 7 | */ 8 | mongoose.connection.on('connected', function () { 9 | console.log('Mongoose connection open to ' + DB_URL); 10 | }); 11 | 12 | /** 13 | * 连接异常 14 | */ 15 | mongoose.connection.on('error',function (err) { 16 | console.log('Mongoose connection error: ' + err); 17 | }); 18 | 19 | /** 20 | * 连接断开 21 | */ 22 | mongoose.connection.on('disconnected', function () { 23 | console.log('Mongoose connection disconnected'); 24 | }); 25 | 26 | exports.mongoose = mongoose; -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "nodejs-app-upgrade", 3 | "version": "0.0.0", 4 | "private": true, 5 | "scripts": { 6 | "start": "node ./bin/www" 7 | }, 8 | "dependencies": { 9 | "body-parser": "~1.17.1", 10 | "cookie-parser": "~1.4.3", 11 | "debug": "~2.6.3", 12 | "ejs": "~2.5.6", 13 | "express": "~4.15.2", 14 | "morgan": "~1.8.1", 15 | "serve-favicon": "~2.4.2", 16 | "express-session": "^1.15.5", 17 | "mongoose":"^4.11.11", 18 | "crypto":"^1.0.1", 19 | "formidable":"^1.1.1", 20 | "uuid":"^3.1.0", 21 | "redis": "^2.8.0" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /password_reset.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/password_reset.png -------------------------------------------------------------------------------- /project.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/project.png -------------------------------------------------------------------------------- /project_add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/project_add.png -------------------------------------------------------------------------------- /public/build/css/app.css: -------------------------------------------------------------------------------- 1 | /** kit_admin-v1.0.4 MIT License By http://kit/zhengjinfan.cn */ 2 | .kit-side .layui-side-scroll .kit-side-folded a,.layui-layout-admin .layui-header .layui-layout-right{padding:0}.kit-table,.kit-table .kit-table-header{position:relative;box-shadow:0 1px 7px 0 #ccc}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-button:vertical{display:none}::-webkit-scrollbar-corner,::-webkit-scrollbar-track{background-color:#e2e2e2}::-webkit-scrollbar-thumb{border-radius:0;background-color:rgba(0,0,0,.3)}::-webkit-scrollbar-thumb:vertical:hover{background-color:rgba(0,0,0,.35)}::-webkit-scrollbar-thumb:vertical:active{background-color:rgba(0,0,0,.38)}.kit-nav .layui-this,.layui-layout-left .layui-nav-item:hover{background-color:#393D49!important}.kit-layout-admin .kit-logo-mobile{display:none}.kit-nav .layui-nav-item{line-height:50px}.kit-nav .layui-nav-item .layui-nav-more{top:22px}.kit-nav .layui-nav-item .layui-nav-mored{top:16px}.kit-nav .layui-nav-item .layui-nav-child{top:55px}.kit-nav *{font-size:13px}.kit-nav .layui-nav-bar{height:0}.kit-nav .layui-this:after{content:none}.kit-layout-admin .layui-footer{height:35px;line-height:35px}.kit-layout-admin .layui-body{bottom:35px;top:50px}.kit-layout-admin .layui-header{height:50px}.kit-layout-admin .layui-logo{line-height:50px}.kit-layout-admin .kit-side{top:50px}.kit-layout-admin .kit-sided{width:50px}.kit-side .layui-side-scroll,.kit-side .layui-side-scroll .layui-nav-tree{width:auto}.kit-side .layui-side-scroll .kit-side-fold{height:35px;background-color:#4A5064;color:#aeb9c2;line-height:35px;text-align:center;cursor:pointer}.kit-side .layui-side-scroll .kit-side-folded{text-align:center}.kit-side .layui-side-scroll .kit-side-folded a span{display:none}.kit-layout-admin .kit-body-folded,.kit-layout-admin .kit-footer-folded{left:50px}.kit-table .kit-table-header{height:50px}.kit-table .kit-table-header .kit-search-btns{padding:10px;position:absolute}.kit-table .kit-table-header .kit-search-inputs{position:absolute;right:70px;top:0;padding:10px 25px 10px 10px}.kit-table .kit-table-header .kit-search-inputs .kit-search-keyword{margin-right:10px;position:relative}.kit-table .kit-table-header .kit-search-inputs .kit-search-more{cursor:pointer;color:#009688;position:absolute;top:15px;right:-50px}.kit-table .kit-table-header .kit-search-inputs .kit-search-keyword input{height:30px;line-height:30px;width:200px;padding-right:32px}.kit-table .kit-table-header .kit-search-inputs .kit-search-keyword button{position:absolute;right:0;top:0;width:30px;height:30px;border:0;cursor:pointer;background-color:#009688;color:#fff}.kit-tab .kit-tab-tool,.kit-tab .kit-tab-tool-body .kit-line{border-bottom:1px solid #e2e2e2}.kit-table .kit-table-header .kit-search-btns .layui-btn{padding:0 15px}.kit-table .kit-search-mored{width:100%;height:auto;top:51px;background-color:#fff;z-index:5;box-shadow:0 4px 7px -3px #ccc;position:absolute;margin-bottom:10px;display:none}.kit-table .kit-search-mored .kit-search-body{padding:10px 10px 45px}.kit-table .kit-search-mored .kit-search-footer{height:50px;bottom:0;left:0;position:absolute;width:100%;border-top:1px solid #e2e2e2;text-align:right}.kit-tab,.kit-table .kit-table-body{position:relative}.kit-table .kit-search-mored .kit-search-footer .kit-btn{margin:10px 5px;padding:0 15px}.kit-table .kit-search-mored .kit-search-footer .kit-btn:last-child{margin-right:15px}.kit-tab,.kit-table .kit-table-body .layui-table-view{margin:0}.kit-tab .kit-tab-tool{position:absolute;width:60px;height:40px;top:0;right:10px;border-left:1px solid #e2e2e2;line-height:40px;text-align:center;cursor:pointer;border-right:1px solid #e2e2e2}.kit-tab .kit-tab-tool:hover{background-color:#f3f3f3}.kit-tab .kit-tab-tool-body{position:absolute;top:40px;right:10px;width:150px;border:1px solid #e2e2e2;display:none;background-color:#fff}.kit-tab .kit-tab-tool-body ul{text-align:center;padding:8px 0}.kit-tab .kit-tab-tool-body ul li.kit-item{line-height:35px;cursor:pointer;color:#393D49}.kit-tab .kit-tab-tool-body ul li.kit-item:hover{background-color:#f3f3f3}.kit-tab .layui-tab-title{width:calc(100% - 71px);padding-right:0;position:absolute}.kit-tab .layui-tab-content{margin-top:40px;padding:0}.kit-tab .layui-tab-content iframe{width:100%;border:0}@media screen and (max-width:950px){.kit-layout-admin .layui-body,.kit-layout-admin .layui-footer,.kit-layout-admin .layui-layout-left{left:50px}.kit-layout-admin .kit-side{width:50px}.kit-layout-admin .kit-side .layui-side-scroll .layui-nav li.layui-nav-item,.kit-layout-admin .kit-side .layui-side-scroll .layui-nav li.layui-nav-item dl dd{text-align:center}.kit-layout-admin .kit-side .layui-side-scroll .layui-nav li.layui-nav-item a,.kit-layout-admin .kit-side .layui-side-scroll .layui-nav li.layui-nav-item dl dd a{padding:0}.kit-layout-admin .kit-side .layui-side-scroll .layui-nav li.layui-nav-item a span,.kit-layout-admin .kit-side .layui-side-scroll .layui-nav li.layui-nav-item dl dd a span,.kit-layout-admin .layui-logo,.kit-side .layui-side-scroll .kit-side-fold{display:none}.kit-layout-admin .kit-logo-mobile{display:block;width:50px}} -------------------------------------------------------------------------------- /public/build/css/doc.css: -------------------------------------------------------------------------------- 1 | /** kit_admin-v1.0.4 MIT License By http://kit/zhengjinfan.cn */ 2 | .kit-doc{padding:20px}.kit-doc a{color:#009688}.kit-doc-title{margin:30px 0 20px}.kit-doc-title fieldset{border:none;padding:0;border-top:1px solid #eee}.kit-doc-title fieldset legend{margin-left:20px;padding:0 10px;font-size:22px;font-weight:300}.kit-doc-title fieldset legend a{color:#333;text-decoration:none} -------------------------------------------------------------------------------- /public/build/css/message.css: -------------------------------------------------------------------------------- 1 | /** kit_admin-v1.0.4 MIT License By http://kit/zhengjinfan.cn */ 2 | .kit-message{position:fixed;right:50px;top:50px;z-index:19940201;border-radius:3px}.kit-message .kit-message-item{min-height:40px;background-color:#fff;border-radius:3px;min-width:250px;margin-top:15px;position:relative;border:1px solid #ecf0f5}.kit-message .kit-message-item:first-child{margin-top:0}.kit-message .kit-message-item .kit-message-body{margin-right:40px;line-height:40px;padding:0 10px 0 20px}.kit-message .kit-message-item .kit-close{width:40px;height:40px;position:absolute;right:0;top:0;text-align:center;line-height:40px;cursor:pointer}.kit-message .kit-skin-red{color:#FF5722!important}.kit-message .kit-skin-orange{color:#FFB800!important}.kit-message .kit-skin-cyan{color:#2F4056!important}.kit-message .kit-skin-blue{color:#1E9FFF!important}.kit-message .kit-skin-black{color:#393D49!important}.kit-message .kit-skin-default{color:#009688!important} -------------------------------------------------------------------------------- /public/build/css/nprogress.css: -------------------------------------------------------------------------------- 1 | /** kit_admin-v1.0.4 MIT License By http://kit/zhengjinfan.cn */ 2 | #nprogress{pointer-events:none}#nprogress .bar{background:#29d;position:fixed;z-index:1031;top:0;left:0;width:100%;height:2px}#nprogress .peg{display:block;position:absolute;right:0;width:100px;height:100%;box-shadow:0 0 10px #29d,0 0 5px #29d;opacity:1;-webkit-transform:rotate(3deg) translate(0,-4px);-ms-transform:rotate(3deg) translate(0,-4px);transform:rotate(3deg) translate(0,-4px)}#nprogress .spinner{display:block;position:fixed;z-index:1031;top:15px;right:15px}#nprogress .spinner-icon{width:18px;height:18px;box-sizing:border-box;border:2px solid transparent;border-top-color:#29d;border-left-color:#29d;border-radius:50%;-webkit-animation:nprogress-spinner .4s linear infinite;animation:nprogress-spinner .4s linear infinite}.nprogress-custom-parent{overflow:hidden;position:relative}.nprogress-custom-parent #nprogress .bar,.nprogress-custom-parent #nprogress .spinner{position:absolute}@-webkit-keyframes nprogress-spinner{0%{-webkit-transform:rotate(0)}100%{-webkit-transform:rotate(360deg)}}@keyframes nprogress-spinner{0%{transform:rotate(0)}100%{transform:rotate(360deg)}} -------------------------------------------------------------------------------- /public/build/css/themes/blue.css: -------------------------------------------------------------------------------- 1 | /** kit_admin-v1.0.4 MIT License By http://kit/zhengjinfan.cn */ 2 | .kit-theme .layui-layout-admin .layui-logo{color:#9BA7B7}.kit-theme .kit-layout-admin .layui-header{background-color:#293955}.kit-theme .layui-layout-admin .layui-header .layui-nav{color:#EEE}.kit-theme .layui-layout-left .layui-nav-item:hover{background-color:#9BA7B7!important}.kit-theme .kit-side{background-color:#293955!important}.kit-theme .kit-side .layui-side-scroll .layui-nav-tree{background-color:#fff!important}.kit-theme .kit-side .layui-nav-tree .layui-nav-item{background-color:#293955}.kit-theme .kit-side .layui-nav-tree .layui-nav-item a:hover{background-color:#293955;color:#EEE}.kit-theme .kit-side .layui-nav .layui-nav-item a{color:#EEE!important}.kit-theme .kit-side .layui-nav .layui-nav-itemed .layui-nav-child{background-color:#9BA7B7!important}.kit-theme .kit-side .layui-nav-tree .layui-nav-child dd.layui-this,.kit-theme .kit-side .layui-nav-tree .layui-nav-child dd.layui-this a,.kit-theme .kit-side .layui-nav-tree .layui-this,.kit-theme .kit-side .layui-nav-tree .layui-this>a,.kit-theme .kit-side .layui-nav-tree .layui-this>a:hover{background-color:#E6E7EC!important;color:#293955!important}.kit-theme .kit-nav .layui-this{background-color:#9BA7B7!important}.kit-theme .kit-side .layui-side-scroll .kit-side-fold{color:#fff;background-color:#9BA7B7}.kit-theme .kit-side .layui-nav-tree .layui-nav-child dd.layui-this{padding-left:3px;background-color:#9BA7B7!important}.kit-theme .kit-side .layui-nav-tree .layui-nav-bar{background-color:#9BA7B7!important} -------------------------------------------------------------------------------- /public/build/css/themes/light.css: -------------------------------------------------------------------------------- 1 | /** kit_admin-v1.0.4 MIT License By http://kit/zhengjinfan.cn */ 2 | .kit-theme .layui-layout-admin .layui-logo{color:#2F4056}.kit-theme .kit-layout-admin .layui-header{background-color:#EEEEF2}.kit-theme .layui-layout-admin .layui-header .layui-nav,.kit-theme .layui-layout-admin .layui-header .layui-nav .layui-nav-item a{color:#1E1E1E}.kit-theme .layui-layout-left .layui-nav-item:hover{background-color:#C9DEF5!important}.kit-theme .kit-side{background-color:#EEE!important}.kit-theme .kit-side .layui-side-scroll .layui-nav-tree{background-color:#fff!important}.kit-theme .kit-side .layui-nav-tree .layui-nav-item{background-color:#EEEEF2}.kit-theme .kit-side .layui-nav-tree .layui-nav-item a:hover{background-color:#EEEEF2;color:#1E1E1E}.kit-theme .kit-side .layui-nav .layui-nav-item a{color:#414141!important}.kit-theme .kit-side .layui-nav .layui-nav-itemed .layui-nav-child{background-color:#fff!important}.kit-theme .kit-side .layui-nav-tree .layui-nav-child dd.layui-this,.kit-theme .kit-side .layui-nav-tree .layui-nav-child dd.layui-this a,.kit-theme .kit-side .layui-nav-tree .layui-this,.kit-theme .kit-side .layui-nav-tree .layui-this>a,.kit-theme .kit-side .layui-nav-tree .layui-this>a:hover{background-color:#E6E7EC!important}.kit-theme .kit-nav .layui-this{background-color:#C9DEF5!important}.kit-theme .kit-side .layui-side-scroll .kit-side-fold{color:#fff;background-color:#2F4056}.kit-theme .kit-side .layui-nav-tree .layui-nav-child dd.layui-this{padding-left:3px;background-color:#2F4056!important}.kit-theme .kit-side .layui-nav-tree .layui-nav-bar{background-color:#2F4056!important} -------------------------------------------------------------------------------- /public/build/js/app.js: -------------------------------------------------------------------------------- 1 | /** kit_admin-v1.0.4 MIT License By http://kit/zhengjinfan.cn */ 2 | ;/** 3 | * Name:app.js 4 | * Author:Van 5 | * E-mail:zheng_jinfan@126.com 6 | * Website:http://kit.zhengjinfan.cn/ 7 | * LICENSE:MIT 8 | */ 9 | var tab; 10 | layui.define(['element', 'nprogress', 'form', 'table', 'loader', 'tab', 'navbar', 'onelevel'], function(exports) { 11 | var $ = layui.jquery, 12 | element = layui.element, 13 | layer = layui.layer, 14 | _win = $(window), 15 | _doc = $(document), 16 | _body = $('.kit-body'), 17 | form = layui.form, 18 | table = layui.table, 19 | loader = layui.loader, 20 | navbar = layui.navbar, 21 | _componentPath = 'components/'; 22 | tab = layui.tab 23 | var app = { 24 | hello: function(str) { 25 | layer.alert('Hello ' + (str || 'test')); 26 | }, 27 | config: { 28 | type: 'iframe' 29 | }, 30 | set: function(options) { 31 | var that = this; 32 | $.extend(true, that.config, options); 33 | return that; 34 | }, 35 | init: function() { 36 | var that = this, 37 | _config = that.config; 38 | if (_config.type === 'page') { 39 | $('a[kit-loader]').on('click', function() { 40 | var url = $(this).data('url'), 41 | name = $(this).data('name'), 42 | id = $(this).data('id'); 43 | loader.load({ 44 | url: url, 45 | name: name, 46 | id: id === undefined ? new Date().getTime() : id, 47 | onSuccess: success 48 | }); 49 | 50 | function success(data) { 51 | switch (data.name) { 52 | case 'table': 53 | loader.getScript(_componentPath + 'table/table.js', function() { 54 | var tableIns = table.render(moduleTable.config); 55 | moduleTable.extend({ 56 | currTable: tableIns, 57 | table: table, 58 | layer: layer, 59 | form: form, 60 | jquery: $ 61 | }); 62 | }); 63 | break; 64 | case 'form': 65 | form.render(); 66 | break; 67 | default: 68 | break; 69 | } 70 | }; 71 | }); 72 | } 73 | if (_config.type === 'iframe') { 74 | tab.set({ 75 | elem: '#container', 76 | onSwitch: function(data) { //选项卡切换时触发 77 | //console.log(data.layId); //lay-id值 78 | //console.log(data.index); //得到当前Tab的所在下标 79 | //console.log(data.elem); //得到当前的Tab大容器 80 | }, 81 | closeBefore: function(data) { //关闭选项卡之前触发 82 | // console.log(data); 83 | // console.log(data.icon); //显示的图标 84 | // console.log(data.id); //lay-id 85 | // console.log(data.title); //显示的标题 86 | // console.log(data.url); //跳转的地址 87 | return true; //返回true则关闭 88 | } 89 | }).render(); 90 | //navbar加载方式一,直接绑定已有的dom元素事件 91 | navbar.bind(function(data) { 92 | tab.tabAdd(data); 93 | }); 94 | //navbar加载方式二,设置远程地址加载 95 | // navbar.set({ 96 | // remote: { 97 | // url: '/datas/navbar1.json' 98 | // } 99 | // }).render(function(data) { 100 | // tab.tabAdd(data); 101 | // }); 102 | //navbar加载方式三,设置data本地数据 103 | // navbar.set({ 104 | // data: [{ 105 | // id: "1", 106 | // title: "基本元素", 107 | // icon: "fa-cubes", 108 | // spread: true, 109 | // children: [{ 110 | // id: "7", 111 | // title: "表格", 112 | // icon: "", 113 | // url: "test.html" 114 | // }, { 115 | // id: "8", 116 | // title: "表单", 117 | // icon: "", 118 | // url: "form.html" 119 | // }] 120 | // }, { 121 | // id: "5", 122 | // title: "这是一级导航", 123 | // icon: "fa-stop-circle", 124 | // url: "https://www.baidu.com", 125 | // spread: false 126 | // }] 127 | // }).render(function(data) { 128 | // tab.tabAdd(data); 129 | // }); 130 | 131 | //处理顶部一级菜单 132 | var onelevel = layui.onelevel; 133 | if (onelevel.hasElem()) { 134 | onelevel.set({ 135 | remote: { 136 | url: '/datas/onelevel1.json' //远程地址 137 | }, 138 | onClicked: function(id) { 139 | switch (id) { 140 | case 1: 141 | navbar.set({ 142 | remote: { 143 | url: '/datas/navbar1.json' 144 | } 145 | }).render(function(data) { 146 | tab.tabAdd(data); 147 | }); 148 | break; 149 | case 2: 150 | navbar.set({ 151 | remote: { 152 | url: '/datas/navbar2.json' 153 | } 154 | }).render(function(data) { 155 | tab.tabAdd(data); 156 | }); 157 | break; 158 | default: 159 | navbar.set({ 160 | data: [{ 161 | id: "1", 162 | title: "基本元素", 163 | icon: "fa-cubes", 164 | spread: true, 165 | children: [{ 166 | id: "7", 167 | title: "表格", 168 | icon: "", 169 | url: "test.html" 170 | }, { 171 | id: "8", 172 | title: "表单", 173 | icon: "", 174 | url: "form.html" 175 | }] 176 | }, { 177 | id: "5", 178 | title: "这是一级导航", 179 | icon: "fa-stop-circle", 180 | url: "https://www.baidu.com", 181 | spread: false 182 | }] 183 | }).render(function(data) { 184 | tab.tabAdd(data); 185 | }); 186 | break; 187 | } 188 | } 189 | }).render(); 190 | } 191 | } 192 | return that; 193 | } 194 | }; 195 | 196 | //输出test接口 197 | exports('app', app); 198 | }); -------------------------------------------------------------------------------- /public/build/js/loader.js: -------------------------------------------------------------------------------- 1 | /** kit_admin-v1.0.4 MIT License By http://kit/zhengjinfan.cn */ 2 | ;layui.define(["jquery","nprogress"],function(o){var e=layui.jquery;o("loader",{version:"1.0.1",load:function(o){NProgress.start();var n=o.url,r=o.name,t=o.id,i=e(void 0!==o.elem?o.elem:"#container");i.load(n,function(e,n,c){"error"===n&&"function"==typeof o.onError&&o.onError(),"success"===n&&(i.html(e),"function"==typeof o.onSuccess&&o.onSuccess({name:r,id:t})),"function"==typeof o.onComplate&&o.onComplate(),NProgress.done()})},getScript:function(o,n){e.getScript(o,n)}})}); -------------------------------------------------------------------------------- /public/build/js/message.js: -------------------------------------------------------------------------------- 1 | /** kit_admin-v1.0.4 MIT License By http://kit/zhengjinfan.cn */ 2 | ;layui.define(["jquery"],function(i){var s=layui.jquery,e=(s(document),s("body")),a={v:"1.0.0",times:1,_message:function(){var i=s(".kit-message");return i.length>0?i:(e.append('
'),s(".kit-message"))},show:function(i){var e=this,a=e._message(),t=e.times,n=void 0===(i=i||{}).skin?"default":i.skin,d=void 0===i.msg?"请输入一些提示信息!":i.msg,m=void 0===i.autoClose||i.autoClose,u=['
','
',d,"
",'
',"
"];a.append(u.join(""));var o=a.children("div[data-times="+t+"]").find("i.fa-times");o.off("click").on("click",function(){var i=s(this).parents("div.kit-message-item").removeClass("layui-anim-upbit").addClass("layui-anim-fadeout");setTimeout(function(){i.remove()},1e3)}),m&&setTimeout(function(){o.click()},3e3),e.times++}};layui.link("./build/css/message.css"),i("message",a)}); -------------------------------------------------------------------------------- /public/build/js/navbar.js: -------------------------------------------------------------------------------- 1 | /** kit_admin-v1.0.4 MIT License By http://kit/zhengjinfan.cn */ 2 | ;layui.define(["layer","laytpl","element"],function(i){var e=layui.jquery,a=layui.layer,t=(e(window),e(document)),n=layui.laytpl,l=layui.element;i("navbar",{v:"1.0.2",config:{data:void 0,remote:{url:void 0,type:"GET",jsonp:!1},cached:!1,elem:void 0,filter:"kitNavbar"},set:function(i){var a=this;return a.config.data=void 0,e.extend(!0,a.config,i),a},hasElem:function(){var i=this.config;return void 0!==i.elem||0!==t.find("ul[kit-navbar]").length||!e(i.elem)||(layui.hint().error("Navbar error:请配置Navbar容器."),!1)},getElem:function(){var i=this.config;return void 0!==i.elem&&e(i.elem).length>0?e(i.elem):t.find("ul[kit-navbar]")},bind:function(i){var n=this;n.config;return n.hasElem()?(n.getElem().find("a[kit-target]").each(function(){var t=e(this),n=void 0;t.hover(function(){n=a.tips(e(this).children("span").text(),this)},function(){n&&a.close(n)}),t.off("click").on("click",function(){var e,a=t.data("options");if(void 0!==a)try{e=new Function("return "+a)()}catch(i){layui.hint().error("Navbar 组件a[data-options]配置项存在语法错误:"+a)}else e={icon:t.data("icon"),id:t.data("id"),title:t.data("title"),url:t.data("url")};"function"==typeof i&&i(e)})}),e(".kit-side-fold").off("click").on("click",function(){var i=t.find("div.kit-side");i.hasClass("kit-sided")?(i.removeClass("kit-sided"),i.find("li.layui-nav-item").removeClass("kit-side-folded"),i.find("dd").removeClass("kit-side-folded"),t.find("div.layui-body").removeClass("kit-body-folded"),t.find("div.layui-footer").removeClass("kit-footer-folded")):(i.addClass("kit-sided"),i.find("li.layui-nav-item").addClass("kit-side-folded"),i.find("dd").addClass("kit-side-folded"),t.find("div.layui-body").addClass("kit-body-folded"),t.find("div.layui-footer").addClass("kit-footer-folded"))}),n):n},render:function(i){var t=this,d=t.config,o=d.remote,r=["{{# layui.each(d,function(index, item){ }}","{{# if(item.spread){ }}",'
  • ',"{{# }else{ }}",'
  • ',"{{# } }}","{{# var hasChildren = item.children!==undefined && item.children.length>0; }}","{{# if(hasChildren){ }}",'','{{# if (item.icon.indexOf("fa-") !== -1) { }}','',"{{# } else { }}",'{{item.icon}}',"{{# } }}"," {{item.title}}","","{{# var children = item.children; }}",'
    ',"{{# layui.each(children,function(childIndex, child){ }}","
    ","",'{{# if (child.icon.indexOf("fa-") !== -1) { }}','',"{{# } else { }}",'{{child.icon}}',"{{# } }}"," {{child.title}}","","
    ","{{# }); }}","
    ","{{# }else{ }}","",'{{# if (item.icon.indexOf("fa-") !== -1) { }}','',"{{# } else { }}",'{{item.icon}}',"{{# } }}"," {{item.title}}","","{{# } }}","
  • ","{{# }); }}"],s=[],c=a.load(2);if(!t.hasElem())return t;var f=t.getElem();if(void 0!==d.data&&d.data.length>0)s=d.data;else{o.jsonp;var u={url:o.url,type:o.type,error:function(i,e,a){layui.hint().error("Navbar error:AJAX请求出错."+a)},success:function(i){s=i}};e.extend(!0,u,o.jsonp?{dataType:"jsonp",jsonp:"callback",jsonpCallback:"jsonpCallback"}:{dataType:"json"}),e.support.cors=!0,e.ajax(u)}var h=setInterval(function(){s.length>0&&(clearInterval(h),n(r.join("")).render(s,function(e){f.html(e),l.init(),t.bind(function(e){"function"==typeof i&&i(e)}),c&&a.close(c)}))},50);return t}})}); -------------------------------------------------------------------------------- /public/build/js/nprogress.js: -------------------------------------------------------------------------------- 1 | /** kit_admin-v1.0.4 MIT License By http://kit/zhengjinfan.cn */ 2 | ;layui.define(function(n){!function(e,t){"function"==typeof define&&define.amd?define(t):"object"==typeof n?module.exports=t():e.NProgress=t()}(this,function(){function n(n,e,t){return nt?t:n}function e(n){return 100*(-1+n)}function t(n,t,r){var i;return i="translate3d"===c.positionUsing?{transform:"translate3d("+e(n)+"%,0,0)"}:"translate"===c.positionUsing?{transform:"translate("+e(n)+"%,0)"}:{"margin-left":e(n)+"%"},i.transition="all "+t+"ms "+r,i}function r(n,e){return("string"==typeof n?n:o(n)).indexOf(" "+e+" ")>=0}function i(n,e){var t=o(n),i=t+e;r(t,e)||(n.className=i.substring(1))}function s(n,e){var t,i=o(n);r(n,e)&&(t=i.replace(" "+e+" "," "),n.className=t.substring(1,t.length-1))}function o(n){return(" "+(n.className||"")+" ").replace(/\s+/gi," ")}function a(n){n&&n.parentNode&&n.parentNode.removeChild(n)}var u={};u.version="0.2.0";var c=u.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'
    '};u.configure=function(n){var e,t;for(e in n)void 0!==(t=n[e])&&n.hasOwnProperty(e)&&(c[e]=t);return this},u.status=null,u.set=function(e){var r=u.isStarted();e=n(e,c.minimum,1),u.status=1===e?null:e;var i=u.render(!r),s=i.querySelector(c.barSelector),o=c.speed,a=c.easing;return i.offsetWidth,l(function(n){""===c.positionUsing&&(c.positionUsing=u.getPositioningCSS()),f(s,t(e,o,a)),1===e?(f(i,{transition:"none",opacity:1}),i.offsetWidth,setTimeout(function(){f(i,{transition:"all "+o+"ms linear",opacity:0}),setTimeout(function(){u.remove(),n()},o)},o)):setTimeout(n,o)}),this},u.isStarted=function(){return"number"==typeof u.status},u.start=function(){u.status||u.set(0);var n=function(){setTimeout(function(){u.status&&(u.trickle(),n())},c.trickleSpeed)};return c.trickle&&n(),this},u.done=function(n){return n||u.status?u.inc(.3+.5*Math.random()).set(1):this},u.inc=function(e){var t=u.status;return t?("number"!=typeof e&&(e=(1-t)*n(Math.random()*t,.1,.95)),t=n(t+e,0,.994),u.set(t)):u.start()},u.trickle=function(){return u.inc(Math.random()*c.trickleRate)},function(){var n=0,e=0;u.promise=function(t){return t&&"resolved"!==t.state()?(0===e&&u.start(),n++,e++,t.always(function(){0===--e?(n=0,u.done()):u.set((n-e)/n)}),this):this}}(),u.render=function(n){if(u.isRendered())return document.getElementById("nprogress");i(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=c.template;var r,s=t.querySelector(c.barSelector),o=n?"-100":e(u.status||0),l=document.querySelector(c.parent);return f(s,{transition:"all 0 linear",transform:"translate3d("+o+"%,0,0)"}),c.showSpinner||(r=t.querySelector(c.spinnerSelector))&&a(r),l!=document.body&&i(l,"nprogress-custom-parent"),l.appendChild(t),t},u.remove=function(){s(document.documentElement,"nprogress-busy"),s(document.querySelector(c.parent),"nprogress-custom-parent");var n=document.getElementById("nprogress");n&&a(n)},u.isRendered=function(){return!!document.getElementById("nprogress")},u.getPositioningCSS=function(){var n=document.body.style,e="WebkitTransform"in n?"Webkit":"MozTransform"in n?"Moz":"msTransform"in n?"ms":"OTransform"in n?"O":"";return e+"Perspective"in n?"translate3d":e+"Transform"in n?"translate":"margin"};var l=function(){function n(){var t=e.shift();t&&t(n)}var e=[];return function(t){e.push(t),1==e.length&&n()}}(),f=function(){function n(n){return n.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,function(n,e){return e.toUpperCase()})}function e(n){var e=document.body.style;if(n in e)return n;for(var t,r=i.length,s=n.charAt(0).toUpperCase()+n.slice(1);r--;)if((t=i[r]+s)in e)return t;return n}function t(t){return t=n(t),s[t]||(s[t]=e(t))}function r(n,e,r){e=t(e),n.style[e]=r}var i=["Webkit","O","Moz","ms"],s={};return function(n,e){var t,i,s=arguments;if(2==s.length)for(t in e)void 0!==(i=e[t])&&e.hasOwnProperty(t)&&r(n,t,i);else r(n,s[1],s[2])}}();return u}),layui.link("./build/css/nprogress.css"),n("nprogress")}); -------------------------------------------------------------------------------- /public/build/js/onelevel.js: -------------------------------------------------------------------------------- 1 | /** kit_admin-v1.0.4 MIT License By http://kit/zhengjinfan.cn */ 2 | ;layui.define(["jquery","laytpl","element"],function(e){var i=layui.jquery,n=(i(window),i(document)),t=layui.laytpl;e("onelevel",{v:"1.0.0",config:{elem:void 0,data:void 0,remote:{url:void 0,type:"GET"},onClicked:void 0},set:function(e){var n=this;return i.extend(!0,n.config,e),n},hasElem:function(){var e=this.config;return void 0!==e.elem||0!==n.find("ul[kit-one-level]").length||!i(e.elem)||(console.log("One-Level error:请配置One-Level容器."),!1)},getElem:function(){var e=this.config;return void 0!==e.elem&&i(e.elem).length>0?i(e.elem):n.find("ul[kit-one-level]")},render:function(){var e=this,n=e.config,l=n.remote,a=["{{# layui.each(d,function(index, item){ }}",'
  • ','','{{# if (item.icon.indexOf("fa-") !== -1) { }}','',"{{# } else { }}",'{{item.icon}}',"{{# } }}"," {{item.title}}","","
  • ","{{# }); }}"],o=[],r=layer.load(2);if(!e.hasElem())return e;var c=e.getElem();if(void 0!==n.data&&n.data.length>0)o=n.data;else{l.jsonp;var d={url:l.url,type:l.type,error:function(e,i,n){layui.hint().error("One-Level error:AJAX请求出错."+n)},success:function(e){o=e}};i.extend(!0,d,l.jsonp?{dataType:"jsonp",jsonp:"callback",jsonpCallback:"jsonpCallback"}:{dataType:"json"}),i.support.cors=!0,i.ajax(d)}var u=setInterval(function(){o.length>0&&clearInterval(u),t(a.join("")).render(o,function(e){c.html(e),layui.element.init(),"function"==typeof n.onClicked&&c.children("li.layui-nav-item").off("click").on("click",function(){var e=i(this).children("a").data("id");n.onClicked(e)}),r&&layer.close(r)})},50);return e}})}); -------------------------------------------------------------------------------- /public/build/js/pjax.js: -------------------------------------------------------------------------------- 1 | /** kit_admin-v1.0.4 MIT License By http://kit/zhengjinfan.cn */ 2 | ;layui.define(["jquery"],function(t){var e=layui.jquery;!function(t){function n(e,n,r){var o=this;return this.on("click.pjax",e,function(e){var i=t.extend({},v(n,r));i.container||(i.container=t(this).attr("data-pjax")||o),a(e,i)})}function a(e,n,a){a=v(n,a);var r=e.currentTarget;if("A"!==r.tagName.toUpperCase())throw"$.fn.pjax or $.pjax.click requires an anchor element";if(!(e.which>1||e.metaKey||e.ctrlKey||e.shiftKey||e.altKey||location.protocol!==r.protocol||location.hostname!==r.hostname||r.href.indexOf("#")>-1&&m(r)==m(location)||e.isDefaultPrevented())){var i={url:r.href,container:t(r).attr("data-pjax"),target:r},s=t.extend({},i,a),c=t.Event("pjax:click");t(r).trigger(c,[s]),c.isDefaultPrevented()||(o(s),e.preventDefault(),t(r).trigger("pjax:clicked",[s]))}}function r(e,n,a){a=v(n,a);var r=e.currentTarget;if("FORM"!==r.tagName.toUpperCase())throw"$.pjax.submit requires a form element";var i={type:r.method.toUpperCase(),url:r.action,container:t(r).attr("data-pjax"),target:r};if("GET"!==i.type&&void 0!==window.FormData)i.data=new FormData(r),i.processData=!1,i.contentType=!1;else{if(t(r).find(":file").length)return;i.data=t(r).serializeArray()}o(t.extend({},i,a)),e.preventDefault()}function o(e){function n(e,n,r){r||(r={}),r.relatedTarget=a;var o=t.Event(e,r);return i.trigger(o,n),!o.isDefaultPrevented()}e=t.extend(!0,{},t.ajaxSettings,o.defaults,e),t.isFunction(e.url)&&(e.url=e.url());var a=e.target,r=h(e.url).hash,i=e.context=x(e.container);e.data||(e.data={}),t.isArray(e.data)?e.data.push({name:"_pjax",value:i.selector}):e.data._pjax=i.selector;var c;e.beforeSend=function(t,a){if("GET"!==a.type&&(a.timeout=0),t.setRequestHeader("X-PJAX","true"),t.setRequestHeader("X-PJAX-Container",i.selector),!n("pjax:beforeSend",[t,a]))return!1;a.timeout>0&&(c=setTimeout(function(){n("pjax:timeout",[t,e])&&t.abort("timeout")},a.timeout),a.timeout=0);var o=h(a.url);r&&(o.hash=r),e.requestUrl=d(o)},e.complete=function(t,a){c&&clearTimeout(c),n("pjax:complete",[t,a,e]),n("pjax:end",[t,e])},e.error=function(t,a,r){var o=y("",t,e),i=n("pjax:error",[t,a,r,e]);"GET"==e.type&&"abort"!==a&&i&&s(o.url)},e.success=function(a,c,u){var l=o.state,f="function"==typeof t.pjax.defaults.version?t.pjax.defaults.version():t.pjax.defaults.version,d=u.getResponseHeader("X-PJAX-Version"),m=y(a,u,e),v=h(m.url);if(r&&(v.hash=r,m.url=v.href),f&&d&&f!==d)s(m.url);else if(m.contents){o.state={id:e.id||p(),url:m.url,title:m.title,container:i.selector,fragment:e.fragment,timeout:e.timeout},(e.push||e.replace)&&window.history.replaceState(o.state,m.title,m.url);try{document.activeElement.blur()}catch(t){}m.title&&(document.title=m.title),n("pjax:beforeReplace",[m.contents,e],{state:o.state,previousState:l}),i.html(m.contents);var x=i.find("input[autofocus], textarea[autofocus]").last()[0];x&&document.activeElement!==x&&x.focus(),w(m.scripts);var g=e.scrollTo;if(r){var j=decodeURIComponent(r.slice(1)),b=document.getElementById(j)||document.getElementsByName(j)[0];b&&(g=t(b).offset().top)}"number"==typeof g&&t(window).scrollTop(g),n("pjax:success",[a,c,u,e])}else s(m.url)},o.state||(o.state={id:p(),url:window.location.href,title:document.title,container:i.selector,fragment:e.fragment,timeout:e.timeout},window.history.replaceState(o.state,document.title)),l(o.xhr),o.options=e;var u=o.xhr=t.ajax(e);return u.readyState>0&&(e.push&&!e.replace&&(b(o.state.id,f(i)),window.history.pushState(null,"",e.requestUrl)),n("pjax:start",[u,e]),n("pjax:send",[u,e])),o.xhr}function i(e,n){var a={url:window.location.href,push:!1,replace:!0,scrollTo:!1};return o(t.extend(a,v(e,n)))}function s(t){window.history.replaceState(null,"",o.state.url),window.location.replace(t)}function c(e){A||l(o.xhr);var n,a=o.state,r=e.state;if(r&&r.container){if(A&&q==r.url)return;if(a){if(a.id===r.id)return;n=a.id",{method:"GET"===a?"GET":"POST",action:n,style:"display:none"});"GET"!==a&&"POST"!==a&&r.append(t("",{type:"hidden",name:"_method",value:a.toLowerCase()}));var o=e.data;if("string"==typeof o)t.each(o.split("&"),function(e,n){var a=n.split("=");r.append(t("",{type:"hidden",name:a[0],value:a[1]}))});else if(t.isArray(o))t.each(o,function(e,n){r.append(t("",{type:"hidden",name:n.name,value:n.value}))});else if("object"==typeof o){var i;for(i in o)r.append(t("",{type:"hidden",name:i,value:o[i]}))}t(document.body).append(r),r.submit()}function l(e){e&&e.readyState<4&&(e.onreadystatechange=t.noop,e.abort())}function p(){return(new Date).getTime()}function f(t){var n=t.clone();return n.find("script").each(function(){this.src||e._data(this,"globalEval",!1)}),[t.selector,n.contents()]}function d(t){return t.search=t.search.replace(/([?&])(_pjax|_)=[^&]*/g,""),t.href.replace(/\?($|#)/,"$1")}function h(t){var e=document.createElement("a");return e.href=t,e}function m(t){return t.href.replace(/#.*/,"")}function v(e,n){return e&&n?n.container=e:n=t.isPlainObject(e)?e:{container:e},n.container&&(n.container=x(n.container)),n}function x(e){if((e=t(e)).length){if(""!==e.selector&&e.context===document)return e;if(e.attr("id"))return t("#"+e.attr("id"));throw"cant get selector for pjax container!"}throw"no pjax container for "+e.selector}function g(t,e){return t.filter(e).add(t.find(e))}function j(e){return t.parseHTML(e,document,!0)}function y(e,n,a){var r={},o=/]*>([\s\S.]*)<\/head>/i)[0])),c=t(j(e.match(/]*>([\s\S.]*)<\/body>/i)[0]));else s=c=t(j(e));if(0===c.length)return r;if(r.title=g(s,"title").last().text(),a.fragment){if("body"===a.fragment)u=c;else var u=g(c,a.fragment).first();u.length&&(r.contents="body"===a.fragment?u:u.contents(),r.title||(r.title=u.attr("title")||u.data("title")))}else o||(r.contents=c);return r.contents&&(r.contents=r.contents.not(function(){return t(this).is("title")}),r.contents.find("title").remove(),r.scripts=g(r.contents,"script[src]").remove(),r.contents=r.contents.not(r.scripts)),r.title&&(r.title=t.trim(r.title)),r}function w(e){if(e){var n=t("script[src]");e.each(function(){var e=this.src;if(!n.filter(function(){return this.src===e}).length){var a=document.createElement("script"),r=t(this).attr("type");r&&(a.type=r),a.src=t(this).attr("src"),document.head.appendChild(a)}})}}function b(t,e){R[t]=e,X.push(t),E(U,0),E(X,o.defaults.maxCacheLength)}function T(t,e,n){var a,r;R[e]=n,"forward"===t?(a=X,r=U):(a=U,r=X),a.push(e),(e=r.pop())&&delete R[e],E(a,o.defaults.maxCacheLength)}function E(t,e){for(;t.length>e;)delete R[t.shift()]}function S(){return t("meta").filter(function(){var e=t(this).attr("http-equiv");return e&&"X-PJAX-VERSION"===e.toUpperCase()}).attr("content")}function P(){t.fn.pjax=n,t.pjax=o,t.pjax.enable=t.noop,t.pjax.disable=C,t.pjax.click=a,t.pjax.submit=r,t.pjax.reload=i,t.pjax.defaults={timeout:650,push:!0,replace:!1,type:"GET",dataType:"html",scrollTo:0,maxCacheLength:20,version:S},t(window).on("popstate.pjax",c)}function C(){t.fn.pjax=function(){return this},t.pjax=u,t.pjax.enable=P,t.pjax.disable=t.noop,t.pjax.click=t.noop,t.pjax.submit=t.noop,t.pjax.reload=function(){window.location.reload()},t(window).off("popstate.pjax",c)}var A=!0,q=window.location.href,D=window.history.state;D&&D.container&&(o.state=D),"state"in window.history&&(A=!1);var R={},U=[],X=[];t.inArray("state",t.event.props)<0&&t.event.props.push("state"),t.support.pjax=window.history&&window.history.pushState&&window.history.replaceState&&!navigator.userAgent.match(/((iPod|iPhone|iPad).+\bOS\s+[1-4]\D|WebApps\/.+CFNetwork)/),t.support.pjax?P():C()}(e),t("pjax")}); -------------------------------------------------------------------------------- /public/build/js/tab.js: -------------------------------------------------------------------------------- 1 | /** kit_admin-v1.0.4 MIT License By http://kit/zhengjinfan.cn */ 2 | ;layui.define(["jquery","element","nprogress"],function(i){var t=layui.jquery,e=layui.element,a=t(document),l=t(window),n=function(){this.config={elem:void 0,mainUrl:"main.html"},this.v="1.0.2"};(n.fn=n.prototype).set=function(i){var e=this;return t.extend(!0,e.config,i),e},n.fn.render=function(){var i=this,t=i.config;return void 0===t.elem?(layui.hint().error("Tab error:请配置选择卡容器."),i):(c._config=t,c.createTabDom(),i)},n.fn.tabAdd=function(i){c.tabAdd(i)};var c={_config:{},_filter:"kitTab",_title:void 0,_content:void 0,_parentElem:void 0,tabDomExists:function(){var i=this;return a.find("div.kit-tab").length>0&&(i._title=t(".kit-tab ul.layui-tab-title"),i._content=t(".kit-tab div.layui-tab-content"),!0)},createTabDom:function(){var i=this,e=i._config;if(i._parentElem=e.elem,!i.tabDomExists()){var a=['
    ','
      ','
    • 控制面板
    • ',"
    ",'
    操作 
    ','
    ',"
      ",'
    • 刷新当前选项卡
    • ','
    • ','
    • 关闭当前选项卡
    • ','
    • 关闭其他选项卡
    • ','
    • ','
    • 关闭所有选项卡
    • ',"
    ","
    ",'
    ','
    ',"
    ","
    "];t(e.elem).html(a.join("")),i._title=t(".kit-tab ul.layui-tab-title"),i._content=t(".kit-tab div.layui-tab-content");var l=t(".kit-tab-tool"),n=t(".kit-tab-tool-body");l.on("click",function(){n.toggle()}),n.find("li.kit-item").each(function(){var e=t(this),a=e.data("target");e.off("click").on("click",function(){var e=i._title.children("li[class=layui-this]").attr("lay-id");switch(a){case"refresh":var n=i._content.children("div[lay-item-id="+e+"]").children("iframe");n.attr("src",n.attr("src"));break;case"closeCurrent":-1!=e&&i.tabDelete(e);break;case"closeOther":i._title.children("li[lay-id]").each(function(){var a=t(this).attr("lay-id");a!=e&&-1!=a&&i.tabDelete(a)});break;case"closeAll":i._title.children("li[lay-id]").each(function(){var e=t(this).attr("lay-id");-1!=e&&i.tabDelete(e)})}l.click()})}),i.winResize()}},winResize:function(){var i=this;l.on("resize",function(){var e=t(i._parentElem).height();t(".kit-tab .layui-tab-content iframe").height(e-45)}).resize()},tabExists:function(i){return this._title.find("li[lay-id="+i+"]").length>0},tabDelete:function(i){e.tabDelete(this._filter,i)},tabChange:function(i){e.tabChange(this._filter,i)},getTab:function(i){return this._title.find("li[lay-id="+i+"]")},tabAdd:function(i){var t=this,a=t._config,l=(i=i||{id:(new Date).getTime(),title:"新标签页",icon:"fa-file",url:"404.html"}).title,n=i.icon,c=i.url,s=i.id;if(t.tabExists(s))t.tabChange(s);else{NProgress.start();var r=['
  • '];-1!==n.indexOf("fa-")?r.push(''):r.push(''+n+""),r.push(" "+l),r.push(''),r.push("
  • ");var o='
    ';t._title.append(r.join("")),t._content.append(o),t.getTab(s).find("i.layui-tab-close").off("click").on("click",function(){a.closeBefore?a.closeBefore(i)&&t.tabDelete(s):t.tabDelete(s)}),t.tabChange(s),t.winResize(),t._content.find("div[lay-item-id="+s+"]").find("iframe").on("load",function(){NProgress.done()}),a.onSwitch&&e.on("tab("+t._filter+")",function(i){a.onSwitch({index:i.index,elem:i.elem,layId:t._title.children("li").eq(i.index).attr("lay-id")})})}}};i("tab",new n)}); -------------------------------------------------------------------------------- /public/css/component.css: -------------------------------------------------------------------------------- 1 | /* Header */ 2 | .large-header { 3 | position: relative; 4 | width: 100%; 5 | background: #333; 6 | overflow: hidden; 7 | background-size: cover; 8 | background-position: center center; 9 | z-index: 1; 10 | } 11 | 12 | .demo-1 .large-header { 13 | background-image: url('../img/demo-1-bg.jpg'); 14 | } 15 | .logo_box{ 16 | width: 400px; 17 | height: 500px; 18 | padding: 35px; 19 | color: #EEE; 20 | position: absolute; 21 | left: 50%; 22 | top:50%; 23 | margin-left: -200px; 24 | margin-top: -250px; 25 | } 26 | .logo_box h3{ 27 | text-align: center; 28 | height: 20px; 29 | font: 20px "microsoft yahei",Helvetica,Tahoma,Arial,"Microsoft jhengHei",sans-serif; 30 | color: #FFFFFF; 31 | height: 20px; 32 | line-height: 20px; 33 | padding:0 0 35px 0; 34 | } 35 | .forms{ 36 | width: 280px; 37 | height: 485px; 38 | } 39 | .logon_inof{ 40 | width: 100%; 41 | min-height: 450px; 42 | padding-top: 35px; 43 | position: relative; 44 | } 45 | .input_outer{ 46 | height: 46px; 47 | padding: 0 5px; 48 | margin-bottom: 30px; 49 | border-radius: 50px; 50 | position: relative; 51 | border: rgba(255,255,255,0.2) 2px solid !important; 52 | } 53 | .u_user{ 54 | width: 25px; 55 | height: 25px; 56 | background: url(../img/login_ico.png); 57 | background-position: -125px 0; 58 | position: absolute; 59 | margin: 10px 13px; 60 | } 61 | .us_uer{ 62 | width: 25px; 63 | height: 25px; 64 | background-image: url(../img/login_ico.png); 65 | background-position: -125px -34px; 66 | position: absolute; 67 | margin: 10px 13px; 68 | } 69 | .l-login{ 70 | position: absolute; 71 | z-index: 1; 72 | left: 50px; 73 | top: 0; 74 | height: 46px; 75 | font: 14px "microsoft yahei",Helvetica,Tahoma,Arial,"Microsoft jhengHei"; 76 | line-height: 46px; 77 | } 78 | .text{ 79 | width: 220px; 80 | height: 46px; 81 | outline: none; 82 | display: inline-block; 83 | font: 14px "microsoft yahei",Helvetica,Tahoma,Arial,"Microsoft jhengHei"; 84 | margin-left: 50px; 85 | border: none; 86 | background: none; 87 | line-height: 46px; 88 | } 89 | /*///*/ 90 | .mb2{ 91 | margin-bottom: 20px 92 | } 93 | .mb2 a{ 94 | text-decoration: none; 95 | outline: none; 96 | } 97 | .submit { 98 | padding: 15px; 99 | margin-top: 20px; 100 | display: block; 101 | } 102 | .act-but{ 103 | line-height: 20px; 104 | text-align: center; 105 | font-size: 20px; 106 | border-radius: 50px; 107 | background: #0096e6; 108 | } -------------------------------------------------------------------------------- /public/css/layout.css: -------------------------------------------------------------------------------- 1 | .beg-layout-container{ 2 | /*min-width: 1024px;*/ 3 | } 4 | .beg-layout-container .beg-layout-main{ 5 | position: absolute; 6 | } 7 | .beg-layout-container .beg-layout-header{ 8 | background-color: #FFFFFF; 9 | height: 55px; 10 | position: fixed; 11 | width: 100%; 12 | min-width: 800px; 13 | border-bottom: 5px solid #1AA094; 14 | } 15 | .beg-layout-container .beg-layout-header .beg-layout-logo{ 16 | width: 200px; 17 | height: 60px; 18 | text-align: center; 19 | line-height: 60px; 20 | } 21 | .beg-layout-container .beg-layout-header .beg-layout-side-toggle{ 22 | position: absolute; 23 | cursor: pointer; 24 | z-index: 19940201; 25 | left: 200px; 26 | color: white; 27 | text-align: center; 28 | width: 30px; 29 | height: 30px; 30 | background-color: #1AA094; 31 | line-height: 30px; 32 | top: 25%; 33 | } 34 | .beg-layout-container .beg-layout-header .beg-layout-side-toggle:hover{ 35 | background-color: #5FB878; 36 | } 37 | .beg-layout-container .beg-layout-header .beg-layout-menu{ 38 | top: 0; 39 | left:230px; 40 | } 41 | .beg-layout-header .beg-layout-menu .beg-layout-nav{ 42 | background: none; 43 | } 44 | .beg-layout-header .beg-layout-menu .beg-layout-nav .layui-nav-item{ 45 | line-height: 60px; 46 | } 47 | .beg-layout-header .beg-layout-menu .beg-layout-nav .layui-nav-item .layui-nav-more{ 48 | top:27px 49 | } 50 | .beg-layout-header .beg-layout-menu .beg-layout-nav .layui-nav-item .layui-nav-mored{ 51 | top:20px 52 | } 53 | .beg-layout-header .beg-layout-menu .beg-layout-nav .layui-this{ 54 | color: #FFFFFF; 55 | background-color: #4E5465; 56 | } 57 | .beg-layout-header .beg-layout-menu .beg-layout-nav .layui-this:after,.beg-layout-header .layui-nav-bar{ 58 | background-color: #4E5465; 59 | } 60 | .beg-layout-header .beg-layout-menu .beg-layout-nav .layui-nav-item a{ 61 | color: #393D49; 62 | } 63 | .beg-layout-header .beg-layout-menu .beg-layout-nav .layui-this a{ 64 | color: #FFFFFF; 65 | } 66 | .beg-layout-header .beg-layout-menu .beg-layout-nav .layui-nav-item a:hover{ 67 | color: #FFFFFF; 68 | background-color: #4E5465; 69 | } 70 | .beg-layout-header .beg-layout-panel{ 71 | right: 10px; 72 | } 73 | .beg-layout-header .beg-layout-panel .beg-layout-nav{ 74 | background: none; 75 | } 76 | .beg-layout-header .beg-layout-panel .beg-layout-nav a{ 77 | color: #393D49; 78 | } 79 | .beg-layout-header .beg-layou-head{ 80 | 81 | } 82 | .beg-layout-header .beg-layou-head img{ 83 | width: 40px; height: 40px; border-radius: 100%; 84 | } 85 | 86 | .beg-layout-container .beg-layout-side{ 87 | background-color: #393D49; 88 | color: #FFFFFF; 89 | top: 60px; 90 | } 91 | .beg-layout-container .beg-layout-body{ 92 | top: 60px; 93 | height: auto; 94 | } 95 | .beg-layout-container .beg-layout-body .layout-nav-card cite{ 96 | font-style: normal; 97 | padding-left: 5px; 98 | } 99 | .beg-layout-body iframe{ 100 | width: 100%; 101 | border: 0; 102 | height: 99.5%; 103 | } 104 | .beg-layout-container .beg-layout-footer{ 105 | line-height: 44px; 106 | text-align: center; 107 | } 108 | 109 | .layout-tab-contextmenu {width: 135px; background-color: #CCCCCC;position: absolute; z-index: 19940201;display: none;} 110 | .layout-tab-contextmenu .layui-nav{ 111 | padding: 5px 3px; 112 | } 113 | .layout-tab-contextmenu .layui-nav .layui-nav-item{ 114 | line-height: 27px;width: 100%; 115 | } 116 | .layout-tab-contextmenu .layui-nav .layui-nav-item:hover{ 117 | background-color: #5FB878; 118 | } 119 | .layout-tab-contextmenu .layui-nav .layui-nav-item a{ 120 | text-align: left; 121 | } 122 | 123 | .layout-tab-contextmenu .layui-nav .layui-this:after, .layout-tab-contextmenu .layui-nav-bar { 124 | transition: none; -webkit-transition:none; background: none; 125 | } 126 | .admin-contextmenu{ 127 | position: absolute;line-height: 36px;padding: 5px 0; 128 | border: 1px solid #d2d2d2;background-color: white;z-index: 19940201;border-radius: 2px;white-space: nowrap;top:30px; 129 | /*width: 100px;height: 200px; */ 130 | } 131 | .admin-contextmenu ul li{ 132 | padding: 0 15px; 133 | } 134 | .admin-contextmenu ul li:hover{ 135 | background-color: #eee; 136 | cursor: pointer; 137 | } 138 | 139 | @media screen and (max-width: 1024px) { 140 | .beg-layout-menu cite{ 141 | display: none; 142 | } 143 | 144 | } -------------------------------------------------------------------------------- /public/css/login.css: -------------------------------------------------------------------------------- 1 | *, *:after, *:before { -webkit-box-sizing: border-box; box-sizing: border-box; } 2 | .clearfix:before, .clearfix:after { content: ''; display: table; } 3 | .clearfix:after { clear: both; } 4 | 5 | body { 6 | background: #fff; 7 | color: #383a3c; 8 | font-weight: 400; 9 | font-size: 1em; 10 | line-height: 1.25; 11 | font-family: 'Raleway', Calibri, Arial, sans-serif; 12 | } 13 | 14 | a, button { 15 | outline: none; 16 | } 17 | 18 | a { 19 | color: #566473; 20 | text-decoration: none; 21 | cursor:pointer; 22 | } 23 | 24 | a:hover, a:focus { 25 | color: #34495e; 26 | } 27 | 28 | section { 29 | padding: 1em; 30 | text-align: center; 31 | } 32 | 33 | p.ref { 34 | text-align: center; 35 | padding: 2em 1em; 36 | } -------------------------------------------------------------------------------- /public/css/normalize.css: -------------------------------------------------------------------------------- 1 | article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block;}audio,canvas,video{display:inline-block;}audio:not([controls]){display:none;height:0;}[hidden]{display:none;}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;}body{margin:0;}a:focus{outline:thin dotted;}a:active,a:hover{outline:0;}h1{font-size:2em;margin:0.67em 0;}abbr[title]{border-bottom:1px dotted;}b,strong{font-weight:bold;}dfn{font-style:italic;}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0;}mark{background:#ff0;color:#000;}code,kbd,pre,samp{font-family:monospace,serif;font-size:1em;}pre{white-space:pre-wrap;}q{quotes:"\201C" "\201D" "\2018" "\2019";}small{font-size:80%;}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline;}sup{top:-0.5em;}sub{bottom:-0.25em;}img{border:0;}svg:not(:root){overflow:hidden;}figure{margin:0;}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em;}legend{border:0;padding:0;}button,input,select,textarea{font-family:inherit;font-size:100%;margin:0;}button,input{line-height:normal;}button,select{text-transform:none;}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer;}button[disabled],html input[disabled]{cursor:default;}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0;}input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none;}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0;}textarea{overflow:auto;vertical-align:top;}table{border-collapse:collapse;border-spacing:0;} -------------------------------------------------------------------------------- /public/css/style.css: -------------------------------------------------------------------------------- 1 | body { 2 | padding: 50px; 3 | font: 14px "Lucida Grande", Helvetica, Arial, sans-serif; 4 | } 5 | 6 | a { 7 | color: #00B7FF; 8 | } 9 | -------------------------------------------------------------------------------- /public/datas/nav.js: -------------------------------------------------------------------------------- 1 | var navs = [ 2 | { 3 | "title": "基本设置", 4 | "icon": "fa-cubes", 5 | "spread": true, 6 | "children": [{ 7 | "title": "项目管理", 8 | "icon": "", 9 | "href": "/project" 10 | }] 11 | }, 12 | { 13 | "title": "系统设置", 14 | "icon": "fa-cubes", 15 | "spread": true, 16 | "children": [{ 17 | "title": "用户管理", 18 | "icon": "", 19 | "href": "/users" 20 | },{ 21 | "title": "修改密码", 22 | "icon": "", 23 | "href": "/pswset" 24 | }] 25 | } 26 | ]; -------------------------------------------------------------------------------- /public/font-awesome/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/font-awesome/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /public/font-awesome/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/font-awesome/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /public/font-awesome/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/font-awesome/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /public/font-awesome/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/font-awesome/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /public/font-awesome/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/font-awesome/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /public/img/0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/img/0.jpg -------------------------------------------------------------------------------- /public/img/demo-1-bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/img/demo-1-bg.jpg -------------------------------------------------------------------------------- /public/img/login_ico.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/img/login_ico.png -------------------------------------------------------------------------------- /public/js/EasePack.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * VERSION: beta 1.9.4 3 | * DATE: 2014-07-17 4 | * UPDATES AND DOCS AT: http://www.greensock.com 5 | * 6 | * @license Copyright (c) 2008-2014, GreenSock. All rights reserved. 7 | * This work is subject to the terms at http://www.greensock.com/terms_of_use.html or for 8 | * Club GreenSock members, the software agreement that was issued with your membership. 9 | * 10 | * @author: Jack Doyle, jack@greensock.com 11 | **/ 12 | var _gsScope="undefined"!=typeof module&&module.exports&&"undefined"!=typeof global?global:this||window;(_gsScope._gsQueue||(_gsScope._gsQueue=[])).push(function(){"use strict";_gsScope._gsDefine("easing.Back",["easing.Ease"],function(t){var e,i,s,r=_gsScope.GreenSockGlobals||_gsScope,n=r.com.greensock,a=2*Math.PI,o=Math.PI/2,h=n._class,l=function(e,i){var s=h("easing."+e,function(){},!0),r=s.prototype=new t;return r.constructor=s,r.getRatio=i,s},_=t.register||function(){},u=function(t,e,i,s){var r=h("easing."+t,{easeOut:new e,easeIn:new i,easeInOut:new s},!0);return _(r,t),r},c=function(t,e,i){this.t=t,this.v=e,i&&(this.next=i,i.prev=this,this.c=i.v-e,this.gap=i.t-t)},p=function(e,i){var s=h("easing."+e,function(t){this._p1=t||0===t?t:1.70158,this._p2=1.525*this._p1},!0),r=s.prototype=new t;return r.constructor=s,r.getRatio=i,r.config=function(t){return new s(t)},s},f=u("Back",p("BackOut",function(t){return(t-=1)*t*((this._p1+1)*t+this._p1)+1}),p("BackIn",function(t){return t*t*((this._p1+1)*t-this._p1)}),p("BackInOut",function(t){return 1>(t*=2)?.5*t*t*((this._p2+1)*t-this._p2):.5*((t-=2)*t*((this._p2+1)*t+this._p2)+2)})),m=h("easing.SlowMo",function(t,e,i){e=e||0===e?e:.7,null==t?t=.7:t>1&&(t=1),this._p=1!==t?e:0,this._p1=(1-t)/2,this._p2=t,this._p3=this._p1+this._p2,this._calcEnd=i===!0},!0),d=m.prototype=new t;return d.constructor=m,d.getRatio=function(t){var e=t+(.5-t)*this._p;return this._p1>t?this._calcEnd?1-(t=1-t/this._p1)*t:e-(t=1-t/this._p1)*t*t*t*e:t>this._p3?this._calcEnd?1-(t=(t-this._p3)/this._p1)*t:e+(t-e)*(t=(t-this._p3)/this._p1)*t*t*t:this._calcEnd?1:e},m.ease=new m(.7,.7),d.config=m.config=function(t,e,i){return new m(t,e,i)},e=h("easing.SteppedEase",function(t){t=t||1,this._p1=1/t,this._p2=t+1},!0),d=e.prototype=new t,d.constructor=e,d.getRatio=function(t){return 0>t?t=0:t>=1&&(t=.999999999),(this._p2*t>>0)*this._p1},d.config=e.config=function(t){return new e(t)},i=h("easing.RoughEase",function(e){e=e||{};for(var i,s,r,n,a,o,h=e.taper||"none",l=[],_=0,u=0|(e.points||20),p=u,f=e.randomize!==!1,m=e.clamp===!0,d=e.template instanceof t?e.template:null,g="number"==typeof e.strength?.4*e.strength:.4;--p>-1;)i=f?Math.random():1/u*p,s=d?d.getRatio(i):i,"none"===h?r=g:"out"===h?(n=1-i,r=n*n*g):"in"===h?r=i*i*g:.5>i?(n=2*i,r=.5*n*n*g):(n=2*(1-i),r=.5*n*n*g),f?s+=Math.random()*r-.5*r:p%2?s+=.5*r:s-=.5*r,m&&(s>1?s=1:0>s&&(s=0)),l[_++]={x:i,y:s};for(l.sort(function(t,e){return t.x-e.x}),o=new c(1,1,null),p=u;--p>-1;)a=l[p],o=new c(a.x,a.y,o);this._prev=new c(0,0,0!==o.t?o:o.next)},!0),d=i.prototype=new t,d.constructor=i,d.getRatio=function(t){var e=this._prev;if(t>e.t){for(;e.next&&t>=e.t;)e=e.next;e=e.prev}else for(;e.prev&&e.t>=t;)e=e.prev;return this._prev=e,e.v+(t-e.t)/e.gap*e.c},d.config=function(t){return new i(t)},i.ease=new i,u("Bounce",l("BounceOut",function(t){return 1/2.75>t?7.5625*t*t:2/2.75>t?7.5625*(t-=1.5/2.75)*t+.75:2.5/2.75>t?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375}),l("BounceIn",function(t){return 1/2.75>(t=1-t)?1-7.5625*t*t:2/2.75>t?1-(7.5625*(t-=1.5/2.75)*t+.75):2.5/2.75>t?1-(7.5625*(t-=2.25/2.75)*t+.9375):1-(7.5625*(t-=2.625/2.75)*t+.984375)}),l("BounceInOut",function(t){var e=.5>t;return t=e?1-2*t:2*t-1,t=1/2.75>t?7.5625*t*t:2/2.75>t?7.5625*(t-=1.5/2.75)*t+.75:2.5/2.75>t?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375,e?.5*(1-t):.5*t+.5})),u("Circ",l("CircOut",function(t){return Math.sqrt(1-(t-=1)*t)}),l("CircIn",function(t){return-(Math.sqrt(1-t*t)-1)}),l("CircInOut",function(t){return 1>(t*=2)?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1)})),s=function(e,i,s){var r=h("easing."+e,function(t,e){this._p1=t||1,this._p2=e||s,this._p3=this._p2/a*(Math.asin(1/this._p1)||0)},!0),n=r.prototype=new t;return n.constructor=r,n.getRatio=i,n.config=function(t,e){return new r(t,e)},r},u("Elastic",s("ElasticOut",function(t){return this._p1*Math.pow(2,-10*t)*Math.sin((t-this._p3)*a/this._p2)+1},.3),s("ElasticIn",function(t){return-(this._p1*Math.pow(2,10*(t-=1))*Math.sin((t-this._p3)*a/this._p2))},.3),s("ElasticInOut",function(t){return 1>(t*=2)?-.5*this._p1*Math.pow(2,10*(t-=1))*Math.sin((t-this._p3)*a/this._p2):.5*this._p1*Math.pow(2,-10*(t-=1))*Math.sin((t-this._p3)*a/this._p2)+1},.45)),u("Expo",l("ExpoOut",function(t){return 1-Math.pow(2,-10*t)}),l("ExpoIn",function(t){return Math.pow(2,10*(t-1))-.001}),l("ExpoInOut",function(t){return 1>(t*=2)?.5*Math.pow(2,10*(t-1)):.5*(2-Math.pow(2,-10*(t-1)))})),u("Sine",l("SineOut",function(t){return Math.sin(t*o)}),l("SineIn",function(t){return-Math.cos(t*o)+1}),l("SineInOut",function(t){return-.5*(Math.cos(Math.PI*t)-1)})),h("easing.EaseLookup",{find:function(e){return t.map[e]}},!0),_(r.SlowMo,"SlowMo","ease,"),_(i,"RoughEase","ease,"),_(e,"SteppedEase","ease,"),f},!0)}),_gsScope._gsDefine&&_gsScope._gsQueue.pop()(); -------------------------------------------------------------------------------- /public/js/common.js: -------------------------------------------------------------------------------- 1 | /** common.js By Beginner Emain:zheng_jinfan@126.com HomePage:http://www.zhengjinfan.cn */ 2 | layui.define(['layer'], function(exports) { 3 | "use strict"; 4 | 5 | var $ = layui.jquery, 6 | layer = layui.layer; 7 | 8 | var common = { 9 | /** 10 | * 抛出一个异常错误信息 11 | * @param {String} msg 12 | */ 13 | throwError: function(msg) { 14 | throw new Error(msg); 15 | return; 16 | }, 17 | /** 18 | * 弹出一个错误提示 19 | * @param {String} msg 20 | */ 21 | msgError: function(msg) { 22 | layer.msg(msg, { 23 | icon: 5 24 | }); 25 | return; 26 | } 27 | }; 28 | 29 | exports('common', common); 30 | }); -------------------------------------------------------------------------------- /public/js/dateFormater.js: -------------------------------------------------------------------------------- 1 | /** 2 | * 时间格式转换辅助方法 3 | * @param {date} date 4 | * @param {String} fmt格式 5 | * @return {Array} 数组 6 | */ 7 | 8 | function DateFormater(date,fmt){ 9 | if(!fmt){ 10 | fmt = 'yyyy-MM-dd hh:mm:ss'; 11 | } 12 | var o = { 13 | "M+": date.getMonth() + 1, //月份 14 | "d+": date.getDate(), //日 15 | "h+": date.getHours(), //小时 16 | "m+": date.getMinutes(), //分 17 | "s+": date.getSeconds(), //秒 18 | "q+": Math.floor((date.getMonth() + 3) / 3), //季度 19 | "S": date.getMilliseconds() //毫秒 20 | }; 21 | if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length)); 22 | for (var k in o) 23 | if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length))); 24 | return fmt; 25 | } 26 | 27 | if(typeof module != "undefined"){ 28 | module.exports.DateFormater = DateFormater; 29 | } -------------------------------------------------------------------------------- /public/js/html5.js: -------------------------------------------------------------------------------- 1 | /* 2 | HTML5 Shiv v3.7.0 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed 3 | */ 4 | (function(l,f){function m(){var a=e.elements;return"string"==typeof a?a.split(" "):a}function i(a){var b=n[a[o]];b||(b={},h++,a[o]=h,n[h]=b);return b}function p(a,b,c){b||(b=f);if(g)return b.createElement(a);c||(c=i(b));b=c.cache[a]?c.cache[a].cloneNode():r.test(a)?(c.cache[a]=c.createElem(a)).cloneNode():c.createElem(a);return b.canHaveChildren&&!s.test(a)?c.frag.appendChild(b):b}function t(a,b){if(!b.cache)b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag(); 5 | a.createElement=function(c){return!e.shivMethods?b.createElem(c):p(c,a,b)};a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+m().join().replace(/[\w\-]+/g,function(a){b.createElem(a);b.frag.createElement(a);return'c("'+a+'")'})+");return n}")(e,b.frag)}function q(a){a||(a=f);var b=i(a);if(e.shivCSS&&!j&&!b.hasCSS){var c,d=a;c=d.createElement("p");d=d.getElementsByTagName("head")[0]||d.documentElement;c.innerHTML="x"; 6 | c=d.insertBefore(c.lastChild,d.firstChild);b.hasCSS=!!c}g||t(a,b);return a}var k=l.html5||{},s=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,r=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,j,o="_html5shiv",h=0,n={},g;(function(){try{var a=f.createElement("a");a.innerHTML="";j="hidden"in a;var b;if(!(b=1==a.childNodes.length)){f.createElement("a");var c=f.createDocumentFragment();b="undefined"==typeof c.cloneNode|| 7 | "undefined"==typeof c.createDocumentFragment||"undefined"==typeof c.createElement}g=b}catch(d){g=j=!0}})();var e={elements:k.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output progress section summary template time video",version:"3.7.0",shivCSS:!1!==k.shivCSS,supportsUnknownElements:g,shivMethods:!1!==k.shivMethods,type:"default",shivDocument:q,createElement:p,createDocumentFragment:function(a,b){a||(a=f); 8 | if(g)return a.createDocumentFragment();for(var b=b||i(a),c=b.frag.cloneNode(),d=0,e=m(),h=e.length;d height) animateHeader = false; 96 | else animateHeader = true; 97 | } 98 | 99 | function resize() { 100 | width = window.innerWidth; 101 | height = window.innerHeight; 102 | largeHeader.style.height = height+'px'; 103 | canvas.width = width; 104 | canvas.height = height; 105 | } 106 | 107 | // animation 108 | function initAnimation() { 109 | animate(); 110 | for(var i in points) { 111 | shiftPoint(points[i]); 112 | } 113 | } 114 | 115 | function animate() { 116 | if(animateHeader) { 117 | ctx.clearRect(0,0,width,height); 118 | for(var i in points) { 119 | // detect points in range 120 | if(Math.abs(getDistance(target, points[i])) < 4000) { 121 | points[i].active = 0.3; 122 | points[i].circle.active = 0.6; 123 | } else if(Math.abs(getDistance(target, points[i])) < 20000) { 124 | points[i].active = 0.1; 125 | points[i].circle.active = 0.3; 126 | } else if(Math.abs(getDistance(target, points[i])) < 40000) { 127 | points[i].active = 0.02; 128 | points[i].circle.active = 0.1; 129 | } else { 130 | points[i].active = 0; 131 | points[i].circle.active = 0; 132 | } 133 | 134 | drawLines(points[i]); 135 | points[i].circle.draw(); 136 | } 137 | } 138 | requestAnimationFrame(animate); 139 | } 140 | 141 | function shiftPoint(p) { 142 | TweenLite.to(p, 1+1*Math.random(), {x:p.originX-50+Math.random()*100, 143 | y: p.originY-50+Math.random()*100, ease:Circ.easeInOut, 144 | onComplete: function() { 145 | shiftPoint(p); 146 | }}); 147 | } 148 | 149 | // Canvas manipulation 150 | function drawLines(p) { 151 | if(!p.active) return; 152 | for(var i in p.closest) { 153 | ctx.beginPath(); 154 | ctx.moveTo(p.x, p.y); 155 | ctx.lineTo(p.closest[i].x, p.closest[i].y); 156 | ctx.strokeStyle = 'rgba(156,217,249,'+ p.active+')'; 157 | ctx.stroke(); 158 | } 159 | } 160 | 161 | function Circle(pos,rad,color) { 162 | var _this = this; 163 | 164 | // constructor 165 | (function() { 166 | _this.pos = pos || null; 167 | _this.radius = rad || null; 168 | _this.color = color || null; 169 | })(); 170 | 171 | this.draw = function() { 172 | if(!_this.active) return; 173 | ctx.beginPath(); 174 | ctx.arc(_this.pos.x, _this.pos.y, _this.radius, 0, 2 * Math.PI, false); 175 | ctx.fillStyle = 'rgba(156,217,249,'+ _this.active+')'; 176 | ctx.fill(); 177 | }; 178 | } 179 | 180 | // Util 181 | function getDistance(p1, p2) { 182 | return Math.pow(p1.x - p2.x, 2) + Math.pow(p1.y - p2.y, 2); 183 | } 184 | })(); -------------------------------------------------------------------------------- /public/js/navbar.js: -------------------------------------------------------------------------------- 1 | /** navbar.js By Beginner Emain:zheng_jinfan@126.com HomePage:http://www.zhengjinfan.cn */ 2 | layui.define(['element', 'common'], function (exports) { 3 | "use strict"; 4 | var $ = layui.jquery, 5 | layer = parent.layer === undefined ? layui.layer : parent.layer, 6 | element = layui.element, 7 | common = layui.common, 8 | cacheName = 'tb_navbar'; 9 | 10 | var Navbar = function () { 11 | /** 12 | * 默认配置 13 | */ 14 | this.config = { 15 | elem: undefined, //容器 16 | data: undefined, //数据源 17 | url: undefined, //数据源地址 18 | type: 'GET', //读取方式 19 | cached: false, //是否使用缓存 20 | spreadOne: false //设置是否只展开一个二级菜单 21 | }; 22 | this.v = '1.0.0'; 23 | }; 24 | //渲染 25 | Navbar.prototype.render = function () { 26 | var _that = this; 27 | var _config = _that.config; 28 | if (typeof (_config.elem) !== 'string' && typeof (_config.elem) !== 'object') { 29 | common.throwError('Navbar error: elem参数未定义或设置出错,具体设置格式请参考文档API.'); 30 | } 31 | var $container; 32 | if (typeof (_config.elem) === 'string') { 33 | $container = $('' + _config.elem + ''); 34 | } 35 | if (typeof (_config.elem) === 'object') { 36 | $container = _config.elem; 37 | } 38 | if ($container.length === 0) { 39 | common.throwError('Navbar error:找不到elem参数配置的容器,请检查.'); 40 | } 41 | if (_config.data === undefined && _config.url === undefined) { 42 | common.throwError('Navbar error:请为Navbar配置数据源.') 43 | } 44 | if (_config.data !== undefined && typeof (_config.data) === 'object') { 45 | var html = getHtml(_config.data); 46 | $container.html(html); 47 | element.init(); 48 | _that.config.elem = $container; 49 | } else { 50 | if (_config.cached) { 51 | var cacheNavbar = layui.data(cacheName); 52 | if (cacheNavbar.navbar === undefined) { 53 | $.ajax({ 54 | type: _config.type, 55 | url: _config.url, 56 | async: false, //_config.async, 57 | dataType: 'json', 58 | success: function (result, status, xhr) { 59 | //添加缓存 60 | layui.data(cacheName, { 61 | key: 'navbar', 62 | value: result 63 | }); 64 | var html = getHtml(result); 65 | $container.html(html); 66 | element.init(); 67 | }, 68 | error: function (xhr, status, error) { 69 | common.msgError('Navbar error:' + error); 70 | }, 71 | complete: function (xhr, status) { 72 | _that.config.elem = $container; 73 | } 74 | }); 75 | } else { 76 | var html = getHtml(cacheNavbar.navbar); 77 | $container.html(html); 78 | element.init(); 79 | _that.config.elem = $container; 80 | } 81 | } else { 82 | //清空缓存 83 | layui.data(cacheName, null); 84 | $.ajax({ 85 | type: _config.type, 86 | url: _config.url, 87 | async: false, //_config.async, 88 | dataType: 'json', 89 | success: function (result, status, xhr) { 90 | var html = getHtml(result); 91 | $container.html(html); 92 | element.init(); 93 | }, 94 | error: function (xhr, status, error) { 95 | common.msgError('Navbar error:' + error); 96 | }, 97 | complete: function (xhr, status) { 98 | _that.config.elem = $container; 99 | } 100 | }); 101 | } 102 | } 103 | 104 | //只展开一个二级菜单 105 | if (_config.spreadOne) { 106 | var $ul = $container.children('ul'); 107 | $ul.find('li.layui-nav-item').each(function () { 108 | $(this).on('click', function () { 109 | $(this).siblings().removeClass('layui-nav-itemed'); 110 | }); 111 | }); 112 | } 113 | return _that; 114 | }; 115 | /** 116 | * 配置Navbar 117 | * @param {Object} options 118 | */ 119 | Navbar.prototype.set = function (options) { 120 | var that = this; 121 | that.config.data = undefined; 122 | $.extend(true, that.config, options); 123 | return that; 124 | }; 125 | /** 126 | * 绑定事件 127 | * @param {String} events 128 | * @param {Function} callback 129 | */ 130 | Navbar.prototype.on = function (events, callback) { 131 | var that = this; 132 | var _con = that.config.elem; 133 | if (typeof (events) !== 'string') { 134 | common.throwError('Navbar error:事件名配置出错,请参考API文档.'); 135 | } 136 | var lIndex = events.indexOf('('); 137 | var eventName = events.substr(0, lIndex); 138 | var filter = events.substring(lIndex + 1, events.indexOf(')')); 139 | if (eventName === 'click') { 140 | if (_con.attr('lay-filter') !== undefined) { 141 | _con.children('ul').find('li').each(function () { 142 | var $this = $(this); 143 | if ($this.find('dl').length > 0) { 144 | var $dd = $this.find('dd').each(function () { 145 | $(this).on('click', function () { 146 | var $a = $(this).children('a'); 147 | var href = $a.data('url'); 148 | var icon = $a.children('i:first').data('icon'); 149 | var title = $a.children('cite').text(); 150 | var data = { 151 | elem: $a, 152 | field: { 153 | href: href, 154 | icon: icon, 155 | title: title 156 | } 157 | } 158 | callback(data); 159 | }); 160 | }); 161 | } else { 162 | $this.on('click', function () { 163 | var $a = $this.children('a'); 164 | var href = $a.data('url'); 165 | var icon = $a.children('i:first').data('icon'); 166 | var title = $a.children('cite').text(); 167 | var data = { 168 | elem: $a, 169 | field: { 170 | href: href, 171 | icon: icon, 172 | title: title 173 | } 174 | } 175 | callback(data); 176 | }); 177 | } 178 | }); 179 | } 180 | } 181 | }; 182 | /** 183 | * 清除缓存 184 | */ 185 | Navbar.prototype.cleanCached = function () { 186 | layui.data(cacheName, null); 187 | }; 188 | /** 189 | * 获取html字符串 190 | * @param {Object} data 191 | */ 192 | function getHtml(data) { 193 | //debugger; 194 | var ulHtml = ''; 244 | 245 | return ulHtml; 246 | } 247 | 248 | var navbar = new Navbar(); 249 | 250 | exports('navbar', function (options) { 251 | return navbar.set(options); 252 | }); 253 | }); -------------------------------------------------------------------------------- /public/js/rAF.js: -------------------------------------------------------------------------------- 1 | // http://paulirish.com/2011/requestanimationframe-for-smart-animating/ 2 | // http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating 3 | 4 | // requestAnimationFrame polyfill by Erik Möller. fixes from Paul Irish and Tino Zijdel 5 | 6 | // MIT license 7 | 8 | (function() { 9 | var lastTime = 0; 10 | var vendors = ['ms', 'moz', 'webkit', 'o']; 11 | for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) { 12 | window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame']; 13 | window.cancelAnimationFrame = window[vendors[x]+'CancelAnimationFrame'] 14 | || window[vendors[x]+'CancelRequestAnimationFrame']; 15 | } 16 | 17 | if (!window.requestAnimationFrame) 18 | window.requestAnimationFrame = function(callback, element) { 19 | var currTime = new Date().getTime(); 20 | var timeToCall = Math.max(0, 16 - (currTime - lastTime)); 21 | var id = window.setTimeout(function() { callback(currTime + timeToCall); }, 22 | timeToCall); 23 | lastTime = currTime + timeToCall; 24 | return id; 25 | }; 26 | 27 | if (!window.cancelAnimationFrame) 28 | window.cancelAnimationFrame = function(id) { 29 | clearTimeout(id); 30 | }; 31 | }()); -------------------------------------------------------------------------------- /public/layui/css/layui.mobile.css: -------------------------------------------------------------------------------- 1 | /** layui-v2.1.3 MIT License By http://www.layui.com */ 2 | blockquote,body,button,dd,div,dl,dt,form,h1,h2,h3,h4,h5,h6,input,legend,li,ol,p,td,textarea,th,ul{margin:0;padding:0;-webkit-tap-highlight-color:rgba(0,0,0,0)}html{font:12px 'Helvetica Neue','PingFang SC',STHeitiSC-Light,Helvetica,Arial,sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}a,button,input{-webkit-tap-highlight-color:rgba(255,0,0,0)}a{text-decoration:none;background:0 0}a:active,a:hover{outline:0}table{border-collapse:collapse;border-spacing:0}li{list-style:none}b,strong{font-weight:700}h1,h2,h3,h4,h5,h6{font-weight:500}address,cite,dfn,em,var{font-style:normal}dfn{font-style:italic}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}img{border:0;vertical-align:bottom}.layui-inline,input,label{vertical-align:middle}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0;outline:0}button,select{text-transform:none}select{-webkit-appearance:none;border:none}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}@font-face{font-family:layui-icon;src:url(../font/iconfont.eot?v=1.0.7);src:url(../font/iconfont.eot?v=1.0.7#iefix) format('embedded-opentype'),url(../font/iconfont.woff?v=1.0.7) format('woff'),url(../font/iconfont.ttf?v=1.0.7) format('truetype'),url(../font/iconfont.svg?v=1.0.7#iconfont) format('svg')}.layui-icon{font-family:layui-icon!important;font-size:16px;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.layui-box,.layui-box *{-webkit-box-sizing:content-box!important;-moz-box-sizing:content-box!important;box-sizing:content-box!important}.layui-border-box,.layui-border-box *{-webkit-box-sizing:border-box!important;-moz-box-sizing:border-box!important;box-sizing:border-box!important}.layui-inline{position:relative;display:inline-block;*display:inline;*zoom:1}.layui-edge,.layui-upload-iframe{position:absolute;width:0;height:0}.layui-edge{border-style:dashed;border-color:transparent;overflow:hidden}.layui-elip{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.layui-unselect{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.layui-disabled,.layui-disabled:active{background-color:#d2d2d2!important;color:#fff!important;cursor:not-allowed!important}.layui-circle{border-radius:100%}.layui-show{display:block!important}.layui-hide{display:none!important}.layui-upload-iframe{border:0;visibility:hidden}.layui-upload-enter{border:1px solid #009E94;background-color:#009E94;color:#fff;-webkit-transform:scale(1.1);transform:scale(1.1)}@-webkit-keyframes layui-m-anim-scale{0%{opacity:0;-webkit-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes layui-m-anim-scale{0%{opacity:0;-webkit-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}.layui-m-anim-scale{animation-name:layui-m-anim-scale;-webkit-animation-name:layui-m-anim-scale}@-webkit-keyframes layui-m-anim-up{0%{opacity:0;-webkit-transform:translateY(800px);transform:translateY(800px)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes layui-m-anim-up{0%{opacity:0;-webkit-transform:translateY(800px);transform:translateY(800px)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}.layui-m-anim-up{-webkit-animation-name:layui-m-anim-up;animation-name:layui-m-anim-up}@-webkit-keyframes layui-m-anim-left{0%{-webkit-transform:translateX(100%);transform:translateX(100%)}100%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes layui-m-anim-left{0%{-webkit-transform:translateX(100%);transform:translateX(100%)}100%{-webkit-transform:translateX(0);transform:translateX(0)}}.layui-m-anim-left{-webkit-animation-name:layui-m-anim-left;animation-name:layui-m-anim-left}@-webkit-keyframes layui-m-anim-right{0%{-webkit-transform:translateX(-100%);transform:translateX(-100%)}100%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes layui-m-anim-right{0%{-webkit-transform:translateX(-100%);transform:translateX(-100%)}100%{-webkit-transform:translateX(0);transform:translateX(0)}}.layui-m-anim-right{-webkit-animation-name:layui-m-anim-right;animation-name:layui-m-anim-right}@-webkit-keyframes layui-m-anim-lout{0%{-webkit-transform:translateX(0);transform:translateX(0)}100%{-webkit-transform:translateX(-100%);transform:translateX(-100%)}}@keyframes layui-m-anim-lout{0%{-webkit-transform:translateX(0);transform:translateX(0)}100%{-webkit-transform:translateX(-100%);transform:translateX(-100%)}}.layui-m-anim-lout{-webkit-animation-name:layui-m-anim-lout;animation-name:layui-m-anim-lout}@-webkit-keyframes layui-m-anim-rout{0%{-webkit-transform:translateX(0);transform:translateX(0)}100%{-webkit-transform:translateX(100%);transform:translateX(100%)}}@keyframes layui-m-anim-rout{0%{-webkit-transform:translateX(0);transform:translateX(0)}100%{-webkit-transform:translateX(100%);transform:translateX(100%)}}.layui-m-anim-rout{-webkit-animation-name:layui-m-anim-rout;animation-name:layui-m-anim-rout}.layui-m-layer{position:relative;z-index:19891014}.layui-m-layer *{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.layui-m-layermain,.layui-m-layershade{position:fixed;left:0;top:0;width:100%;height:100%}.layui-m-layershade{background-color:rgba(0,0,0,.7);pointer-events:auto}.layui-m-layermain{display:table;font-family:Helvetica,arial,sans-serif;pointer-events:none}.layui-m-layermain .layui-m-layersection{display:table-cell;vertical-align:middle;text-align:center}.layui-m-layerchild{position:relative;display:inline-block;text-align:left;background-color:#fff;font-size:14px;border-radius:5px;box-shadow:0 0 8px rgba(0,0,0,.1);pointer-events:auto;-webkit-overflow-scrolling:touch;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.2s;animation-duration:.2s}.layui-m-layer0 .layui-m-layerchild{width:90%;max-width:640px}.layui-m-layer1 .layui-m-layerchild{border:none;border-radius:0}.layui-m-layer2 .layui-m-layerchild{width:auto;max-width:260px;min-width:40px;border:none;background:0 0;box-shadow:none;color:#fff}.layui-m-layerchild h3{padding:0 10px;height:60px;line-height:60px;font-size:16px;font-weight:400;border-radius:5px 5px 0 0;text-align:center}.layui-m-layerbtn span,.layui-m-layerchild h3{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.layui-m-layercont{padding:50px 30px;line-height:22px;text-align:center}.layui-m-layer1 .layui-m-layercont{padding:0;text-align:left}.layui-m-layer2 .layui-m-layercont{text-align:center;padding:0;line-height:0}.layui-m-layer2 .layui-m-layercont i{width:25px;height:25px;margin-left:8px;display:inline-block;background-color:#fff;border-radius:100%;-webkit-animation:layui-m-anim-loading 1.4s infinite ease-in-out;animation:layui-m-anim-loading 1.4s infinite ease-in-out;-webkit-animation-fill-mode:both;animation-fill-mode:both}.layui-m-layerbtn,.layui-m-layerbtn span{position:relative;text-align:center;border-radius:0 0 5px 5px}.layui-m-layer2 .layui-m-layercont p{margin-top:20px}@-webkit-keyframes layui-m-anim-loading{0%,100%,80%{transform:scale(0);-webkit-transform:scale(0)}40%{transform:scale(1);-webkit-transform:scale(1)}}@keyframes layui-m-anim-loading{0%,100%,80%{transform:scale(0);-webkit-transform:scale(0)}40%{transform:scale(1);-webkit-transform:scale(1)}}.layui-m-layer2 .layui-m-layercont i:first-child{margin-left:0;-webkit-animation-delay:-.32s;animation-delay:-.32s}.layui-m-layer2 .layui-m-layercont i.layui-m-layerload{-webkit-animation-delay:-.16s;animation-delay:-.16s}.layui-m-layer2 .layui-m-layercont>div{line-height:22px;padding-top:7px;margin-bottom:20px;font-size:14px}.layui-m-layerbtn{display:box;display:-moz-box;display:-webkit-box;width:100%;height:50px;line-height:50px;font-size:0;border-top:1px solid #D0D0D0;background-color:#F2F2F2}.layui-m-layerbtn span{display:block;-moz-box-flex:1;box-flex:1;-webkit-box-flex:1;font-size:14px;cursor:pointer}.layui-m-layerbtn span[yes]{color:#40AFFE}.layui-m-layerbtn span[no]{border-right:1px solid #D0D0D0;border-radius:0 0 0 5px}.layui-m-layerbtn span:active{background-color:#F6F6F6}.layui-m-layerend{position:absolute;right:7px;top:10px;width:30px;height:30px;border:0;font-weight:400;background:0 0;cursor:pointer;-webkit-appearance:none;font-size:30px}.layui-m-layerend::after,.layui-m-layerend::before{position:absolute;left:5px;top:15px;content:'';width:18px;height:1px;background-color:#999;transform:rotate(45deg);-webkit-transform:rotate(45deg);border-radius:3px}.layui-m-layerend::after{transform:rotate(-45deg);-webkit-transform:rotate(-45deg)}body .layui-m-layer .layui-m-layer-footer{position:fixed;width:95%;max-width:100%;margin:0 auto;left:0;right:0;bottom:10px;background:0 0}.layui-m-layer-footer .layui-m-layercont{padding:20px;border-radius:5px 5px 0 0;background-color:rgba(255,255,255,.8)}.layui-m-layer-footer .layui-m-layerbtn{display:block;height:auto;background:0 0;border-top:none}.layui-m-layer-footer .layui-m-layerbtn span{background-color:rgba(255,255,255,.8)}.layui-m-layer-footer .layui-m-layerbtn span[no]{color:#FD482C;border-top:1px solid #c2c2c2;border-radius:0 0 5px 5px}.layui-m-layer-footer .layui-m-layerbtn span[yes]{margin-top:10px;border-radius:5px}body .layui-m-layer .layui-m-layer-msg{width:auto;max-width:90%;margin:0 auto;bottom:-150px;background-color:rgba(0,0,0,.7);color:#fff}.layui-m-layer-msg .layui-m-layercont{padding:10px 20px} -------------------------------------------------------------------------------- /public/layui/css/modules/code.css: -------------------------------------------------------------------------------- 1 | /** layui-v2.1.3 MIT License By http://www.layui.com */ 2 | html #layuicss-skincodecss{display:none;position:absolute;width:1989px}.layui-code-h3,.layui-code-view{position:relative;font-size:12px}.layui-code-view{display:block;margin:10px 0;padding:0;border:1px solid #e2e2e2;border-left-width:6px;background-color:#F2F2F2;color:#333;font-family:Courier New}.layui-code-h3{padding:0 10px;height:32px;line-height:32px;border-bottom:1px solid #e2e2e2}.layui-code-h3 a{position:absolute;right:10px;top:0;color:#999}.layui-code-view .layui-code-ol{position:relative;overflow:auto}.layui-code-view .layui-code-ol li{position:relative;margin-left:45px;line-height:20px;padding:0 5px;border-left:1px solid #e2e2e2;list-style-type:decimal-leading-zero;*list-style-type:decimal;background-color:#fff}.layui-code-view pre{margin:0}.layui-code-notepad{border:1px solid #0C0C0C;border-left-color:#3F3F3F;background-color:#0C0C0C;color:#C2BE9E}.layui-code-notepad .layui-code-h3{border-bottom:none}.layui-code-notepad .layui-code-ol li{background-color:#3F3F3F;border-left:none} -------------------------------------------------------------------------------- /public/layui/css/modules/laydate/default/laydate.css: -------------------------------------------------------------------------------- 1 | /** layui-v2.1.3 MIT License By http://www.layui.com */ 2 | .laydate-set-ym,.layui-laydate,.layui-laydate *,.layui-laydate-list{box-sizing:border-box}html #layuicss-laydate{display:none;position:absolute;width:1989px}.layui-laydate *{margin:0;padding:0}.layui-laydate{position:absolute;z-index:66666666;margin:5px 0;border-radius:2px;font-size:14px;-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-name:laydate-upbit;animation-name:laydate-upbit}.layui-laydate-main{width:272px}.layui-laydate-content td,.layui-laydate-header *,.layui-laydate-list li{transition-duration:.3s;-webkit-transition-duration:.3s}@-webkit-keyframes laydate-upbit{from{-webkit-transform:translate3d(0,20px,0);opacity:.3}to{-webkit-transform:translate3d(0,0,0);opacity:1}}@keyframes laydate-upbit{from{transform:translate3d(0,20px,0);opacity:.3}to{transform:translate3d(0,0,0);opacity:1}}.layui-laydate-static{position:relative;z-index:0;display:inline-block;margin:0;-webkit-animation:none;animation:none}.laydate-ym-show .laydate-next-m,.laydate-ym-show .laydate-prev-m{display:none!important}.laydate-ym-show .laydate-next-y,.laydate-ym-show .laydate-prev-y{display:inline-block!important}.laydate-time-show .laydate-set-ym span[lay-type=month],.laydate-time-show .laydate-set-ym span[lay-type=year],.laydate-time-show .layui-laydate-header .layui-icon,.laydate-ym-show .laydate-set-ym span[lay-type=month]{display:none!important}.layui-laydate-header{position:relative;line-height:30px;padding:10px 70px 5px}.laydate-set-ym span,.layui-laydate-header i{padding:0 5px;cursor:pointer}.layui-laydate-header *{display:inline-block;vertical-align:bottom}.layui-laydate-header i{position:absolute;top:10px;color:#999;font-size:18px}.layui-laydate-header i.laydate-prev-y{left:15px}.layui-laydate-header i.laydate-prev-m{left:45px}.layui-laydate-header i.laydate-next-y{right:15px}.layui-laydate-header i.laydate-next-m{right:45px}.laydate-set-ym{width:100%;text-align:center;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.laydate-time-text{cursor:default!important}.layui-laydate-content{position:relative;padding:10px;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.layui-laydate-content table{border-collapse:collapse;border-spacing:0}.layui-laydate-content td,.layui-laydate-content th{width:36px;height:30px;padding:5px;text-align:center}.layui-laydate-content td{position:relative;cursor:pointer}.laydate-day-mark{position:absolute;left:0;top:0;width:100%;height:100%;line-height:30px;font-size:12px;overflow:hidden}.laydate-day-mark::after{position:absolute;content:'';right:2px;top:2px;width:5px;height:5px;border-radius:50%}.layui-laydate-footer{position:relative;height:46px;line-height:26px;padding:10px 20px}.layui-laydate-footer span{margin-right:15px;display:inline-block;cursor:pointer;font-size:12px}.layui-laydate-footer span:hover{color:#5FB878}.laydate-footer-btns{position:absolute;right:10px;top:10px}.laydate-footer-btns span{height:26px;line-height:26px;margin:0 0 0 -1px;padding:0 10px;border:1px solid #C9C9C9;background-color:#fff;white-space:nowrap;vertical-align:top;border-radius:2px}.layui-laydate-list>li,.layui-laydate-range .layui-laydate-main{display:inline-block;vertical-align:middle}.layui-laydate-list{position:absolute;left:0;top:0;width:100%;height:100%;padding:10px;background-color:#fff}.layui-laydate-list>li{position:relative;width:33.3%;height:36px;line-height:36px;margin:3px 0;text-align:center;cursor:pointer}.laydate-month-list>li{width:25%;margin:17px 0}.laydate-time-list>li{height:100%;margin:0;line-height:normal;cursor:default}.laydate-time-list p{position:relative;top:-4px;line-height:29px}.laydate-time-list ol{height:181px;overflow:hidden}.laydate-time-list>li:hover ol{overflow-y:auto}.laydate-time-list ol li{width:130%;padding-left:33px;line-height:30px;text-align:left;cursor:pointer}.layui-laydate-hint{position:absolute;top:115px;left:50%;width:250px;margin-left:-125px;line-height:20px;padding:15px;text-align:center;font-size:12px}.layui-laydate-range{width:546px}.layui-laydate-range .laydate-main-list-0 .laydate-next-m,.layui-laydate-range .laydate-main-list-0 .laydate-next-y,.layui-laydate-range .laydate-main-list-1 .laydate-prev-m,.layui-laydate-range .laydate-main-list-1 .laydate-prev-y{display:none}.layui-laydate-range .laydate-main-list-1 .layui-laydate-content{border-left:1px solid #e2e2e2}.layui-laydate,.layui-laydate-hint{border:1px solid #d2d2d2;box-shadow:0 2px 4px rgba(0,0,0,.12);background-color:#fff;color:#666}.layui-laydate-header{border-bottom:1px solid #e2e2e2}.layui-laydate-header i:hover,.layui-laydate-header span:hover{color:#5FB878}.layui-laydate-content{border-top:none 0;border-bottom:none 0}.layui-laydate-content th{font-weight:400;color:#333}.layui-laydate-content td{color:#666}.layui-laydate-content td.laydate-selected{background-color:#00F7DE}.laydate-selected:hover{background-color:#00F7DE!important}.layui-laydate-content td:hover,.layui-laydate-list li:hover{background-color:#eaeaea;color:#333}.laydate-time-list li ol{margin:0;padding:0;border:1px solid #e2e2e2;border-left-width:0}.laydate-time-list li:first-child ol{border-left-width:1px}.laydate-time-list>li:hover{background:0 0}.layui-laydate-content .laydate-day-next,.layui-laydate-content .laydate-day-prev{color:#d2d2d2}.laydate-selected.laydate-day-next,.laydate-selected.laydate-day-prev{color:#fff!important}.layui-laydate-footer{border-top:1px solid #e2e2e2}.layui-laydate-hint{color:#FF5722}.laydate-day-mark::after{background-color:#5FB878}.layui-laydate-content td.layui-this .laydate-day-mark::after{display:none}.layui-laydate-footer span[lay-type=date]{color:#5FB878}.layui-laydate .layui-this{background-color:#009688!important;color:#fff!important}.layui-laydate .laydate-disabled,.layui-laydate .laydate-disabled:hover{background:0 0!important;color:#d2d2d2!important;cursor:not-allowed!important;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.laydate-theme-molv{border:none}.laydate-theme-molv.layui-laydate-range{width:548px}.laydate-theme-molv .layui-laydate-main{width:274px}.laydate-theme-molv .layui-laydate-header{border:none;background-color:#009688}.laydate-theme-molv .layui-laydate-header i,.laydate-theme-molv .layui-laydate-header span{color:#f6f6f6}.laydate-theme-molv .layui-laydate-header i:hover,.laydate-theme-molv .layui-laydate-header span:hover{color:#fff}.laydate-theme-molv .layui-laydate-content{border:1px solid #e2e2e2;border-top:none;border-bottom:none}.laydate-theme-molv .laydate-main-list-1 .layui-laydate-content{border-left:none}.laydate-theme-grid .laydate-month-list>li,.laydate-theme-grid .laydate-year-list>li,.laydate-theme-grid .layui-laydate-content td,.laydate-theme-grid .layui-laydate-content thead,.laydate-theme-molv .layui-laydate-footer{border:1px solid #e2e2e2}.laydate-theme-grid .laydate-selected,.laydate-theme-grid .laydate-selected:hover{background-color:#f2f2f2!important;color:#009688!important}.laydate-theme-grid .laydate-selected.laydate-day-next,.laydate-theme-grid .laydate-selected.laydate-day-prev{color:#d2d2d2!important}.laydate-theme-grid .laydate-month-list,.laydate-theme-grid .laydate-year-list{margin:1px 0 0 1px}.laydate-theme-grid .laydate-month-list>li,.laydate-theme-grid .laydate-year-list>li{margin:0 -1px -1px 0}.laydate-theme-grid .laydate-year-list>li{height:43px;line-height:43px}.laydate-theme-grid .laydate-month-list>li{height:71px;line-height:71px} -------------------------------------------------------------------------------- /public/layui/css/modules/layer/default/icon-ext.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/css/modules/layer/default/icon-ext.png -------------------------------------------------------------------------------- /public/layui/css/modules/layer/default/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/css/modules/layer/default/icon.png -------------------------------------------------------------------------------- /public/layui/css/modules/layer/default/loading-0.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/css/modules/layer/default/loading-0.gif -------------------------------------------------------------------------------- /public/layui/css/modules/layer/default/loading-1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/css/modules/layer/default/loading-1.gif -------------------------------------------------------------------------------- /public/layui/css/modules/layer/default/loading-2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/css/modules/layer/default/loading-2.gif -------------------------------------------------------------------------------- /public/layui/font/iconfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/font/iconfont.eot -------------------------------------------------------------------------------- /public/layui/font/iconfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/font/iconfont.ttf -------------------------------------------------------------------------------- /public/layui/font/iconfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/font/iconfont.woff -------------------------------------------------------------------------------- /public/layui/images/face/0.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/images/face/0.gif -------------------------------------------------------------------------------- /public/layui/images/face/1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/images/face/1.gif -------------------------------------------------------------------------------- /public/layui/images/face/10.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/images/face/10.gif -------------------------------------------------------------------------------- /public/layui/images/face/11.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/images/face/11.gif -------------------------------------------------------------------------------- /public/layui/images/face/12.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/images/face/12.gif -------------------------------------------------------------------------------- /public/layui/images/face/13.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/images/face/13.gif -------------------------------------------------------------------------------- /public/layui/images/face/14.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/images/face/14.gif -------------------------------------------------------------------------------- /public/layui/images/face/15.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/images/face/15.gif -------------------------------------------------------------------------------- /public/layui/images/face/16.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/images/face/16.gif -------------------------------------------------------------------------------- /public/layui/images/face/17.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/images/face/17.gif -------------------------------------------------------------------------------- /public/layui/images/face/18.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/images/face/18.gif -------------------------------------------------------------------------------- /public/layui/images/face/19.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/images/face/19.gif -------------------------------------------------------------------------------- /public/layui/images/face/2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/images/face/2.gif -------------------------------------------------------------------------------- /public/layui/images/face/20.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/images/face/20.gif -------------------------------------------------------------------------------- /public/layui/images/face/21.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/images/face/21.gif -------------------------------------------------------------------------------- /public/layui/images/face/22.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/images/face/22.gif -------------------------------------------------------------------------------- /public/layui/images/face/23.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/images/face/23.gif -------------------------------------------------------------------------------- /public/layui/images/face/24.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/images/face/24.gif -------------------------------------------------------------------------------- /public/layui/images/face/25.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/images/face/25.gif -------------------------------------------------------------------------------- /public/layui/images/face/26.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/images/face/26.gif -------------------------------------------------------------------------------- /public/layui/images/face/27.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/images/face/27.gif -------------------------------------------------------------------------------- /public/layui/images/face/28.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/images/face/28.gif -------------------------------------------------------------------------------- /public/layui/images/face/29.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/images/face/29.gif -------------------------------------------------------------------------------- /public/layui/images/face/3.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/images/face/3.gif -------------------------------------------------------------------------------- /public/layui/images/face/30.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/images/face/30.gif -------------------------------------------------------------------------------- /public/layui/images/face/31.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/images/face/31.gif -------------------------------------------------------------------------------- /public/layui/images/face/32.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/images/face/32.gif -------------------------------------------------------------------------------- /public/layui/images/face/33.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/images/face/33.gif -------------------------------------------------------------------------------- /public/layui/images/face/34.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/images/face/34.gif -------------------------------------------------------------------------------- /public/layui/images/face/35.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/images/face/35.gif -------------------------------------------------------------------------------- /public/layui/images/face/36.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/images/face/36.gif -------------------------------------------------------------------------------- /public/layui/images/face/37.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/images/face/37.gif -------------------------------------------------------------------------------- /public/layui/images/face/38.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/images/face/38.gif -------------------------------------------------------------------------------- /public/layui/images/face/39.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/images/face/39.gif -------------------------------------------------------------------------------- /public/layui/images/face/4.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/images/face/4.gif -------------------------------------------------------------------------------- /public/layui/images/face/40.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/images/face/40.gif -------------------------------------------------------------------------------- /public/layui/images/face/41.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/images/face/41.gif -------------------------------------------------------------------------------- /public/layui/images/face/42.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/images/face/42.gif -------------------------------------------------------------------------------- /public/layui/images/face/43.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/images/face/43.gif -------------------------------------------------------------------------------- /public/layui/images/face/44.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/images/face/44.gif -------------------------------------------------------------------------------- /public/layui/images/face/45.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/images/face/45.gif -------------------------------------------------------------------------------- /public/layui/images/face/46.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/images/face/46.gif -------------------------------------------------------------------------------- /public/layui/images/face/47.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/images/face/47.gif -------------------------------------------------------------------------------- /public/layui/images/face/48.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/images/face/48.gif -------------------------------------------------------------------------------- /public/layui/images/face/49.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/images/face/49.gif -------------------------------------------------------------------------------- /public/layui/images/face/5.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/images/face/5.gif -------------------------------------------------------------------------------- /public/layui/images/face/50.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/images/face/50.gif -------------------------------------------------------------------------------- /public/layui/images/face/51.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/images/face/51.gif -------------------------------------------------------------------------------- /public/layui/images/face/52.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/images/face/52.gif -------------------------------------------------------------------------------- /public/layui/images/face/53.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/images/face/53.gif -------------------------------------------------------------------------------- /public/layui/images/face/54.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/images/face/54.gif -------------------------------------------------------------------------------- /public/layui/images/face/55.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/images/face/55.gif -------------------------------------------------------------------------------- /public/layui/images/face/56.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/images/face/56.gif -------------------------------------------------------------------------------- /public/layui/images/face/57.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/images/face/57.gif -------------------------------------------------------------------------------- /public/layui/images/face/58.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/images/face/58.gif -------------------------------------------------------------------------------- /public/layui/images/face/59.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/images/face/59.gif -------------------------------------------------------------------------------- /public/layui/images/face/6.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/images/face/6.gif -------------------------------------------------------------------------------- /public/layui/images/face/60.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/images/face/60.gif -------------------------------------------------------------------------------- /public/layui/images/face/61.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/images/face/61.gif -------------------------------------------------------------------------------- /public/layui/images/face/62.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/images/face/62.gif -------------------------------------------------------------------------------- /public/layui/images/face/63.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/images/face/63.gif -------------------------------------------------------------------------------- /public/layui/images/face/64.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/images/face/64.gif -------------------------------------------------------------------------------- /public/layui/images/face/65.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/images/face/65.gif -------------------------------------------------------------------------------- /public/layui/images/face/66.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/images/face/66.gif -------------------------------------------------------------------------------- /public/layui/images/face/67.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/images/face/67.gif -------------------------------------------------------------------------------- /public/layui/images/face/68.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/images/face/68.gif -------------------------------------------------------------------------------- /public/layui/images/face/69.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/images/face/69.gif -------------------------------------------------------------------------------- /public/layui/images/face/7.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/images/face/7.gif -------------------------------------------------------------------------------- /public/layui/images/face/70.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/images/face/70.gif -------------------------------------------------------------------------------- /public/layui/images/face/71.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/images/face/71.gif -------------------------------------------------------------------------------- /public/layui/images/face/8.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/images/face/8.gif -------------------------------------------------------------------------------- /public/layui/images/face/9.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gytai/nodejs-app-upgrade/0ef15354fcd3f6350d9ddea4b7c0b1d00a311ffd/public/layui/images/face/9.gif -------------------------------------------------------------------------------- /public/layui/lay/modules/carousel.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.1.3 MIT License By http://www.layui.com */ 2 | ;layui.define("jquery",function(e){"use strict";var i=layui.$,n=(layui.hint(),layui.device(),{config:{},set:function(e){var n=this;return n.config=i.extend({},n.config,e),n},on:function(e,i){return layui.onevent.call(this,t,e,i)}}),t="carousel",a="layui-this",o=">*[carousel-item]>*",l="layui-carousel-left",r="layui-carousel-right",d="layui-carousel-prev",s="layui-carousel-next",u="layui-carousel-arrow",c="layui-carousel-ind",m=function(e){var t=this;t.config=i.extend({},t.config,n.config,e),t.render()};m.prototype.config={width:"600px",height:"280px",full:!1,arrow:"hover",indicator:"inside",autoplay:!0,interval:3e3,anim:"",trigger:"click",index:0},m.prototype.render=function(){var e=this,n=e.config;n.elem=i(n.elem),n.elem[0]&&(e.elemItem=n.elem.find(o),n.index<0&&(n.index=0),n.index>=e.elemItem.length&&(n.index=e.elemItem.length-1),n.interval<800&&(n.interval=800),n.full?n.elem.css({position:"fixed",width:"100%",height:"100%",zIndex:9999}):n.elem.css({width:n.width,height:n.height}),n.elem.attr("lay-anim",n.anim),e.elemItem.eq(n.index).addClass(a),e.indicator(),e.elemItem.length<=1||(e.arrow(),e.autoplay(),e.events()))},m.prototype.reload=function(e){var n=this;clearInterval(n.timer),n.config=i.extend({},n.config,e),n.render()},m.prototype.prevIndex=function(){var e=this,i=e.config,n=i.index-1;return n<0&&(n=e.elemItem.length-1),n},m.prototype.nextIndex=function(){var e=this,i=e.config,n=i.index+1;return n>=e.elemItem.length&&(n=0),n},m.prototype.addIndex=function(e){var i=this,n=i.config;e=e||1,n.index=n.index+e,n.index>=i.elemItem.length&&(n.index=0)},m.prototype.subIndex=function(e){var i=this,n=i.config;e=e||1,n.index=n.index-e,n.index<0&&(n.index=i.elemItem.length-1)},m.prototype.autoplay=function(){var e=this,i=e.config;i.autoplay&&(e.timer=setInterval(function(){e.slide()},i.interval))},m.prototype.arrow=function(){var e=this,n=e.config,t=i(['",'"].join(""));n.elem.attr("lay-arrow",n.arrow),n.elem.find("."+u)[0]&&n.elem.find("."+u).remove(),n.elem.append(t),t.on("click",function(){var n=i(this),t=n.attr("lay-type");e.slide(t)})},m.prototype.indicator=function(){var e=this,n=e.config,t=e.elemInd=i(['
      ',function(){var i=[];return layui.each(e.elemItem,function(e){i.push("")}),i.join("")}(),"
    "].join(""));n.elem.attr("lay-indicator",n.indicator),n.elem.find("."+c)[0]&&n.elem.find("."+c).remove(),n.elem.append(t),"updown"===n.anim&&t.css("margin-top",-(t.height()/2)),t.find("li").on("hover"===n.trigger?"mouseover":n.trigger,function(){var t=i(this),a=t.index();a>n.index?e.slide("add",a-n.index):a/g,">").replace(/'/g,"'").replace(/"/g,""")),c.html('
    1. '+o.replace(/[\r\t\n]+/g,"
    2. ")+"
    "),c.find(">.layui-code-h3")[0]||c.prepend('

    '+(c.attr("lay-title")||e.title||"code")+(e.about?'layui.code':"")+"

    ");var d=c.find(">.layui-code-ol");c.addClass("layui-box layui-code-view"),(c.attr("lay-skin")||e.skin)&&c.addClass("layui-code-"+(c.attr("lay-skin")||e.skin)),(d.find("li").length/100|0)>0&&d.css("margin-left",(d.find("li").length/100|0)+"px"),(c.attr("lay-height")||e.height)&&d.css("max-height",c.attr("lay-height")||e.height)})})}).addcss("modules/code.css","skincodecss"); -------------------------------------------------------------------------------- /public/layui/lay/modules/element.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.1.3 MIT License By http://www.layui.com */ 2 | ;layui.define("jquery",function(i){"use strict";var a=layui.$,t=(layui.hint(),layui.device()),l="element",e="layui-this",n="layui-show",s=function(){this.config={}};s.prototype.set=function(i){var t=this;return a.extend(!0,t.config,i),t},s.prototype.on=function(i,a){return layui.onevent.call(this,l,i,a)},s.prototype.tabAdd=function(i,t){var l=".layui-tab-title",e=a(".layui-tab[lay-filter="+i+"]"),n=e.children(l),s=n.children(".layui-tab-bar"),o=e.children(".layui-tab-content"),c='
  • '+(t.title||"unnaming")+"
  • ";return s[0]?s.before(c):n.append(c),o.append('
    '+(t.content||"")+"
    "),y.hideTabMore(!0),y.tabAuto(),this},s.prototype.tabDelete=function(i,t){var l=".layui-tab-title",e=a(".layui-tab[lay-filter="+i+"]"),n=e.children(l),s=n.find('>li[lay-id="'+t+'"]');return y.tabDelete(null,s),this},s.prototype.tabChange=function(i,t){var l=".layui-tab-title",e=a(".layui-tab[lay-filter="+i+"]"),n=e.children(l),s=n.find('>li[lay-id="'+t+'"]');return y.tabClick(null,null,s),this},s.prototype.progress=function(i,t){var l="layui-progress",e=a("."+l+"[lay-filter="+i+"]"),n=e.find("."+l+"-bar"),s=n.find("."+l+"-text");return n.css("width",t),s.text(t),this};var o=".layui-nav",c="layui-nav-item",r="layui-nav-bar",u="layui-nav-tree",d="layui-nav-child",h="layui-nav-more",f="layui-anim layui-anim-upbit",y={tabClick:function(i,t,s){var o=s||a(this),t=t||o.parent().children("li").index(o),c=o.parents(".layui-tab").eq(0),r=c.children(".layui-tab-content").children(".layui-tab-item"),u=o.find("a"),d=c.attr("lay-filter");"javascript:;"!==u.attr("href")&&"_blank"===u.attr("target")||(o.addClass(e).siblings().removeClass(e),r.eq(t).addClass(n).siblings().removeClass(n)),layui.event.call(this,l,"tab("+d+")",{elem:c,index:t})},tabDelete:function(i,t){var l=t||a(this).parent(),n=l.index(),s=l.parents(".layui-tab").eq(0),o=s.children(".layui-tab-content").children(".layui-tab-item");l.hasClass(e)&&(l.next()[0]?y.tabClick.call(l.next()[0],null,n+1):l.prev()[0]&&y.tabClick.call(l.prev()[0],null,n-1)),l.remove(),o.eq(n).remove(),setTimeout(function(){y.tabAuto()},50)},tabAuto:function(){var i="layui-tab-more",l="layui-tab-bar",e="layui-tab-close",n=this;a(".layui-tab").each(function(){var s=a(this),o=s.children(".layui-tab-title"),c=(s.children(".layui-tab-content").children(".layui-tab-item"),'lay-stope="tabmore"'),r=a('');if(n===window&&8!=t.ie&&y.hideTabMore(!0),s.attr("lay-allowClose")&&o.find("li").each(function(){var i=a(this);if(!i.find("."+e)[0]){var t=a('');t.on("click",y.tabDelete),i.append(t)}}),o.prop("scrollWidth")>o.outerWidth()+1){if(o.find("."+l)[0])return;o.append(r),s.attr("overflow",""),r.on("click",function(a){o[this.title?"removeClass":"addClass"](i),this.title=this.title?"":"收缩"})}else o.find("."+l).remove(),s.removeAttr("overflow")})},hideTabMore:function(i){var t=a(".layui-tab-title");i!==!0&&"tabmore"===a(i.target).attr("lay-stope")||(t.removeClass("layui-tab-more"),t.find(".layui-tab-bar").attr("title",""))},clickThis:function(){var i=a(this),t=i.parents(o),n=t.attr("lay-filter"),s=i.find("a");i.find("."+d)[0]||("javascript:;"!==s.attr("href")&&"_blank"===s.attr("target")||(t.find("."+e).removeClass(e),i.addClass(e)),layui.event.call(this,l,"nav("+n+")",i))},clickChild:function(){var i=a(this),t=i.parents(o),n=t.attr("lay-filter");t.find("."+e).removeClass(e),i.addClass(e),layui.event.call(this,l,"nav("+n+")",i)},showChild:function(){var i=a(this),t=i.parents(o),l=i.parent(),e=i.siblings("."+d);t.hasClass(u)&&(e.removeClass(f),l["none"===e.css("display")?"addClass":"removeClass"](c+"ed"))},collapse:function(){var i=a(this),t=i.find(".layui-colla-icon"),e=i.siblings(".layui-colla-content"),s=i.parents(".layui-collapse").eq(0),o=s.attr("lay-filter"),c="none"===e.css("display");if("string"==typeof s.attr("lay-accordion")){var r=s.children(".layui-colla-item").children("."+n);r.siblings(".layui-colla-title").children(".layui-colla-icon").html(""),r.removeClass(n)}e[c?"addClass":"removeClass"](n),t.html(c?"":""),layui.event.call(this,l,"collapse("+o+")",{title:i,content:e,show:c})}};s.prototype.init=function(i){var l={tab:function(){y.tabAuto.call({})},nav:function(){var i=200,l={},e={},s={},p=function(o,c,r){var y=a(this),p=y.find("."+d);c.hasClass(u)?o.css({top:y.position().top,height:y.children("a").height(),opacity:1}):(p.addClass(f),o.css({left:y.position().left+parseFloat(y.css("marginLeft")),top:y.position().top+y.height()-5}),l[r]=setTimeout(function(){o.css({width:y.width(),opacity:1})},t.ie&&t.ie<10?0:i),clearTimeout(s[r]),"block"===p.css("display")&&clearTimeout(e[r]),e[r]=setTimeout(function(){p.addClass(n),y.find("."+h).addClass(h+"d")},300))};a(o).each(function(t){var o=a(this),f=a(''),v=o.find("."+c);o.find("."+r)[0]||(o.append(f),v.on("mouseenter",function(){p.call(this,f,o,t)}).on("mouseleave",function(){o.hasClass(u)||(clearTimeout(e[t]),e[t]=setTimeout(function(){o.find("."+d).removeClass(n),o.find("."+h).removeClass(h+"d")},300))}),o.on("mouseleave",function(){clearTimeout(l[t]),s[t]=setTimeout(function(){o.hasClass(u)?f.css({height:0,top:f.position().top+f.height()/2,opacity:0}):f.css({width:0,left:f.position().left+f.width()/2,opacity:0})},i)})),v.each(function(){var i=a(this),t=i.find("."+d);if(t[0]&&!i.find("."+h)[0]){var l=i.children("a");l.append('')}i.off("click",y.clickThis).on("click",y.clickThis),i.children("a").off("click",y.showChild).on("click",y.showChild),t.children("dd").off("click",y.clickChild).on("click",y.clickChild)})})},breadcrumb:function(){var i=".layui-breadcrumb";a(i).each(function(){var i=a(this),t=i.attr("lay-separator")||">",l=i.find("a");l.find(".layui-box")[0]||(l.each(function(i){i!==l.length-1&&a(this).append(''+t+"")}),i.css("visibility","visible"))})},progress:function(){var i="layui-progress";a("."+i).each(function(){var t=a(this),l=t.find(".layui-progress-bar"),e=l.attr("lay-percent");l.css("width",e),t.attr("lay-showPercent")&&setTimeout(function(){var a=Math.round(l.width()/t.width()*100);a>100&&(a=100),l.html(''+a+"%")},350)})},collapse:function(){var i="layui-collapse";a("."+i).each(function(){var i=a(this).find(".layui-colla-item");i.each(function(){var i=a(this),t=i.find(".layui-colla-title"),l=i.find(".layui-colla-content"),e="none"===l.css("display");t.find(".layui-colla-icon").remove(),t.append(''+(e?"":"")+""),t.off("click",y.collapse).on("click",y.collapse)})})}};return layui.each(l,function(i,a){a()})};var p=new s,v=a(document);p.init();var b=".layui-tab-title li";v.on("click",b,y.tabClick),v.on("click",y.hideTabMore),a(window).on("resize",y.tabAuto),i(l,p)}); -------------------------------------------------------------------------------- /public/layui/lay/modules/flow.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.1.3 MIT License By http://www.layui.com */ 2 | ;layui.define("jquery",function(e){"use strict";var l=layui.$,o=function(e){},t='';o.prototype.load=function(e){var o,i,n,r,a=this,c=0;e=e||{};var f=l(e.elem);if(f[0]){var m=l(e.scrollElem||document),u=e.mb||50,s=!("isAuto"in e)||e.isAuto,v=e.end||"没有更多了",y=e.scrollElem&&e.scrollElem!==document,d="加载更多",h=l('");f.find(".layui-flow-more")[0]||f.append(h);var p=function(e,t){e=l(e),h.before(e),t=0==t||null,t?h.html(v):h.find("a").html(d),i=t,o=null,n&&n()},g=function(){o=!0,h.find("a").html(t),"function"==typeof e.done&&e.done(++c,p)};if(g(),h.find("a").on("click",function(){l(this);i||o||g()}),e.isLazyimg)var n=a.lazyimg({elem:e.elem+" img",scrollElem:e.scrollElem});return s?(m.on("scroll",function(){var e=l(this),t=e.scrollTop();r&&clearTimeout(r),i||(r=setTimeout(function(){var i=y?e.height():l(window).height(),n=y?e.prop("scrollHeight"):document.documentElement.scrollHeight;n-t-i<=u&&(o||g())},100))}),a):a}},o.prototype.lazyimg=function(e){var o,t=this,i=0;e=e||{};var n=l(e.scrollElem||document),r=e.elem||"img",a=e.scrollElem&&e.scrollElem!==document,c=function(e,l){var o=n.scrollTop(),r=o+l,c=a?function(){return e.offset().top-n.offset().top+o}():e.offset().top;if(c>=o&&c<=r&&!e.attr("src")){var m=e.attr("lay-src");layui.img(m,function(){var l=t.lazyimg.elem.eq(i);e.attr("src",m).removeAttr("lay-src"),l[0]&&f(l),i++})}},f=function(e,o){var f=a?(o||n).height():l(window).height(),m=n.scrollTop(),u=m+f;if(t.lazyimg.elem=l(r),e)c(e,f);else for(var s=0;su)break}};if(f(),!o){var m;n.on("scroll",function(){var e=l(this);m&&clearTimeout(m),m=setTimeout(function(){f(null,e)},50)}),o=!0}return f},e("flow",new o)}); -------------------------------------------------------------------------------- /public/layui/lay/modules/form.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.1.3 MIT License By http://www.layui.com */ 2 | ;layui.define("layer",function(e){"use strict";var i=layui.$,t=layui.layer,a=layui.hint(),n=layui.device(),l="form",s=".layui-form",r="layui-this",u="layui-hide",c="layui-disabled",o=function(){this.config={verify:{required:[/[\S]+/,"必填项不能为空"],phone:[/^1\d{10}$/,"请输入正确的手机号"],email:[/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/,"邮箱格式不正确"],url:[/(^#)|(^http(s*):\/\/[^\s]+\.[^\s]+)/,"链接格式不正确"],number:function(e){if(!e||isNaN(e))return"只能填写数字"},date:[/^(\d{4})[-\/](\d{1}|0\d{1}|1[0-2])([-\/](\d{1}|0\d{1}|[1-2][0-9]|3[0-1]))*$/,"日期格式不正确"],identity:[/(^\d{15}$)|(^\d{17}(x|X|\d)$)/,"请输入正确的身份证号"]}}};o.prototype.set=function(e){var t=this;return i.extend(!0,t.config,e),t},o.prototype.verify=function(e){var t=this;return i.extend(!0,t.config.verify,e),t},o.prototype.on=function(e,i){return layui.onevent.call(this,l,e,i)},o.prototype.render=function(e,t){var n=this,o=i(s+function(){return t?'[lay-filter="'+t+'"]':""}()),d={select:function(){var e,t="请选择",a="layui-form-select",n="layui-select-title",s="layui-select-none",d="",f=o.find("select"),y=function(t,l){i(t.target).parent().hasClass(n)&&!l||(i("."+a).removeClass(a+"ed "+a+"up"),e&&d&&e.val(d)),e=null},h=function(t,o,f){var h=i(this),p=t.find("."+n),m=p.find("input"),k=t.find("dl"),g=k.children("dd");if(!o){var b=function(){var e=t.offset().top+t.outerHeight()+5-v.scrollTop(),i=k.outerHeight();t.addClass(a+"ed"),g.removeClass(u),e+i>v.height()&&e>=i&&t.addClass(a+"up")},x=function(e){t.removeClass(a+"ed "+a+"up"),m.blur(),e||C(m.val(),function(e){e&&(d=k.find("."+r).html(),m&&m.val(d))})};p.on("click",function(e){t.hasClass(a+"ed")?x():(y(e,!0),b()),k.find("."+s).remove()}),p.find(".layui-edge").on("click",function(){m.focus()}),m.on("keyup",function(e){var i=e.keyCode;9===i&&b()}).on("keydown",function(e){var i=e.keyCode;9===i?x():13===i&&e.preventDefault()});var C=function(e,t,a){var n=0;layui.each(g,function(){var t=i(this),l=t.text(),s=l.indexOf(e)===-1;(""===e||"blur"===a?e!==l:s)&&n++,"keyup"===a&&t[s?"addClass":"removeClass"](u)});var l=n===g.length;return t(l),l},w=function(e){var i=this.value,t=e.keyCode;return 9!==t&&13!==t&&37!==t&&38!==t&&39!==t&&40!==t&&(C(i,function(e){e?k.find("."+s)[0]||k.append('

    无匹配项

    '):k.find("."+s).remove()},"keyup"),void(""===i&&k.find("."+s).remove()))};f&&m.on("keyup",w).on("blur",function(i){e=m,d=k.find("."+r).html(),setTimeout(function(){C(m.val(),function(e){e&&!d&&m.val("")},"blur")},200)}),g.on("click",function(){var e=i(this),a=e.attr("lay-value"),n=h.attr("lay-filter");return!e.hasClass(c)&&(e.hasClass("layui-select-tips")?m.val(""):(m.val(e.text()),e.addClass(r)),e.siblings().removeClass(r),h.val(a).removeClass("layui-form-danger"),layui.event.call(this,l,"select("+n+")",{elem:h[0],value:a,othis:t}),x(!0),!1)}),t.find("dl>dt").on("click",function(e){return!1}),i(document).off("click",y).on("click",y)}};f.each(function(e,l){var s=i(this),u=s.next("."+a),o=this.disabled,d=l.value,f=i(l.options[l.selectedIndex]),y=l.options[0];if("string"==typeof s.attr("lay-ignore"))return s.show();var v="string"==typeof s.attr("lay-search"),p=y?y.value?t:y.innerHTML||t:t,m=i(['
    ','
    ','
    ','
    '+function(e){var i=[];return layui.each(e,function(e,a){0!==e||a.value?"optgroup"===a.tagName.toLowerCase()?i.push("
    "+a.label+"
    "):i.push('
    '+a.innerHTML+"
    "):i.push('
    '+(a.innerHTML||t)+"
    ")}),0===i.length&&i.push('
    没有选项
    '),i.join("")}(s.find("*"))+"
    ","
    "].join(""));u[0]&&u.remove(),s.after(m),h.call(this,m,o,v)})},checkbox:function(){var e={checkbox:["layui-form-checkbox","layui-form-checked","checkbox"],_switch:["layui-form-switch","layui-form-onswitch","switch"]},t=o.find("input[type=checkbox]"),a=function(e,t){var a=i(this);e.on("click",function(){var i=a.attr("lay-filter"),n=(a.attr("lay-text")||"").split("|");a[0].disabled||(a[0].checked?(a[0].checked=!1,e.removeClass(t[1]).find("em").text(n[1])):(a[0].checked=!0,e.addClass(t[1]).find("em").text(n[0])),layui.event.call(a[0],l,t[2]+"("+i+")",{elem:a[0],value:a[0].value,othis:e}))})};t.each(function(t,n){var l=i(this),s=l.attr("lay-skin"),r=(l.attr("lay-text")||"").split("|"),u=this.disabled;"switch"===s&&(s="_"+s);var o=e[s]||e.checkbox;if("string"==typeof l.attr("lay-ignore"))return l.show();var d=l.next("."+o[0]),f=i(['
    ',{_switch:""+((n.checked?r[0]:r[1])||"")+""}[s]||(n.title.replace(/\s/g,"")?""+n.title+"":"")+''+(s?"":"")+"","
    "].join(""));d[0]&&d.remove(),l.after(f),a.call(this,f,o)})},radio:function(){var e="layui-form-radio",t=["",""],a=o.find("input[type=radio]"),n=function(a){var n=i(this),r="layui-anim-scaleSpring";a.on("click",function(){var u=n[0].name,c=n.parents(s),o=n.attr("lay-filter"),d=c.find("input[name="+u.replace(/(\.|#|\[|\])/g,"\\$1")+"]");n[0].disabled||(layui.each(d,function(){var a=i(this).next("."+e);this.checked=!1,a.removeClass(e+"ed"),a.find(".layui-icon").removeClass(r).html(t[1])}),n[0].checked=!0,a.addClass(e+"ed"),a.find(".layui-icon").addClass(r).html(t[0]),layui.event.call(n[0],l,"radio("+o+")",{elem:n[0],value:n[0].value,othis:a}))})};a.each(function(a,l){var s=i(this),r=s.next("."+e),u=this.disabled;if("string"==typeof s.attr("lay-ignore"))return s.show();var o=i(['
    ',''+t[l.checked?0:1]+"",""+(l.title||"未命名")+"","
    "].join(""));r[0]&&r.remove(),s.after(o),n.call(this,o)})}};return e?d[e]?d[e]():a.error("不支持的"+e+"表单渲染"):layui.each(d,function(e,i){i()}),n};var d=function(){var e=i(this),a=f.config.verify,r=null,u="layui-form-danger",c={},o=e.parents(s),d=o.find("*[lay-verify]"),y=e.parents("form")[0],v=o.find("input,select,textarea"),h=e.attr("lay-filter");return layui.each(d,function(e,l){var s=i(this),c=s.attr("lay-verify").split("|"),o="",d=s.val();if(s.removeClass(u),layui.each(c,function(e,i){var c="function"==typeof a[i];if(a[i]&&(c?o=a[i](d,l):!a[i][0].test(d)))return t.msg(o||a[i][1],{icon:5,shift:6}),n.android||n.ios||l.focus(),s.addClass(u),r=!0}),r)return r}),!r&&(layui.each(v,function(e,i){i.name&&(/^checkbox|radio$/.test(i.type)&&!i.checked||(c[i.name]=i.value))}),layui.event.call(this,l,"submit("+h+")",{elem:this,form:y,field:c}))},f=new o,y=i(document),v=i(window);f.render(),y.on("reset",s,function(){var e=i(this).attr("lay-filter");setTimeout(function(){f.render(null,e)},50)}),y.on("submit",s,d).on("click","*[lay-submit]",d),e(l,f)}); -------------------------------------------------------------------------------- /public/layui/lay/modules/layedit.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.1.3 MIT License By http://www.layui.com */ 2 | ;layui.define(["layer","form"],function(t){"use strict";var e=layui.$,i=layui.layer,a=layui.form,l=(layui.hint(),layui.device()),n="layedit",o="layui-show",r="layui-disabled",c=function(){var t=this;t.index=0,t.config={tool:["strong","italic","underline","del","|","left","center","right","|","link","unlink","face","image"],hideTool:[],height:280}};c.prototype.set=function(t){var i=this;return e.extend(!0,i.config,t),i},c.prototype.on=function(t,e){return layui.onevent(n,t,e)},c.prototype.build=function(t,i){i=i||{};var a=this,n=a.config,r="layui-layedit",c=e("#"+t),u="LAY_layedit_"+ ++a.index,d=c.next("."+r),y=e.extend({},n,i),f=function(){var t=[],e={};return layui.each(y.hideTool,function(t,i){e[i]=!0}),layui.each(y.tool,function(i,a){C[a]&&!e[a]&&t.push(C[a])}),t.join("")}(),m=e(['
    ','
    '+f+"
    ",'
    ','',"
    ","
    "].join(""));return l.ie&&l.ie<8?c.removeClass("layui-hide").addClass(o):(d[0]&&d.remove(),s.call(a,m,c[0],y),c.addClass("layui-hide").after(m),a.index)},c.prototype.getContent=function(t){var e=u(t);if(e[0])return d(e[0].document.body.innerHTML)},c.prototype.getText=function(t){var i=u(t);if(i[0])return e(i[0].document.body).text()},c.prototype.setContent=function(t,i,a){var l=u(t);l[0]&&(a?e(l[0].document.body).append(i):e(l[0].document.body).html(i),layedit.sync(t))},c.prototype.sync=function(t){var i=u(t);if(i[0]){var a=e("#"+i[1].attr("textarea"));a.val(d(i[0].document.body.innerHTML))}},c.prototype.getSelection=function(t){var e=u(t);if(e[0]){var i=m(e[0].document);return document.selection?i.text:i.toString()}};var s=function(t,i,a){var l=this,n=t.find("iframe");n.css({height:a.height}).on("load",function(){var o=n.contents(),r=n.prop("contentWindow"),c=o.find("head"),s=e([""].join("")),u=o.find("body");c.append(s),u.attr("contenteditable","true").css({"min-height":a.height}).html(i.value||""),y.apply(l,[r,n,i,a]),g.call(l,r,t,a)})},u=function(t){var i=e("#LAY_layedit_"+t),a=i.prop("contentWindow");return[a,i]},d=function(t){return 8==l.ie&&(t=t.replace(/<.+>/g,function(t){return t.toLowerCase()})),t},y=function(t,a,n,o){var r=t.document,c=e(r.body);c.on("keydown",function(t){var e=t.keyCode;if(13===e){var a=m(r),l=p(a),n=l.parentNode;if("pre"===n.tagName.toLowerCase()){if(t.shiftKey)return;return i.msg("请暂时用shift+enter"),!1}r.execCommand("formatBlock",!1,"

    ")}}),e(n).parents("form").on("submit",function(){var t=c.html();8==l.ie&&(t=t.replace(/<.+>/g,function(t){return t.toLowerCase()})),n.value=t}),c.on("paste",function(e){r.execCommand("formatBlock",!1,"

    "),setTimeout(function(){f.call(t,c),n.value=c.html()},100)})},f=function(t){var i=this;i.document;t.find("*[style]").each(function(){var t=this.style.textAlign;this.removeAttribute("style"),e(this).css({"text-align":t||""})}),t.find("table").addClass("layui-table"),t.find("script,link").remove()},m=function(t){return t.selection?t.selection.createRange():t.getSelection().getRangeAt(0)},p=function(t){return t.endContainer||t.parentElement().childNodes[0]},v=function(t,i,a){var l=this.document,n=document.createElement(t);for(var o in i)n.setAttribute(o,i[o]);if(n.removeAttribute("text"),l.selection){var r=a.text||i.text;if("a"===t&&!r)return;r&&(n.innerHTML=r),a.pasteHTML(e(n).prop("outerHTML")),a.select()}else{var r=a.toString()||i.text;if("a"===t&&!r)return;r&&(n.innerHTML=r),a.deleteContents(),a.insertNode(n)}},h=function(t,i){var a=this.document,l="layedit-tool-active",n=p(m(a)),o=function(e){return t.find(".layedit-tool-"+e)};i&&i[i.hasClass(l)?"removeClass":"addClass"](l),t.find(">i").removeClass(l),o("unlink").addClass(r),e(n).parents().each(function(){var t=this.tagName.toLowerCase(),e=this.style.textAlign;"b"!==t&&"strong"!==t||o("b").addClass(l),"i"!==t&&"em"!==t||o("i").addClass(l),"u"===t&&o("u").addClass(l),"strike"===t&&o("d").addClass(l),"p"===t&&("center"===e?o("center").addClass(l):"right"===e?o("right").addClass(l):o("left").addClass(l)),"a"===t&&(o("link").addClass(l),o("unlink").removeClass(r))})},g=function(t,a,l){var n=t.document,o=e(n.body),c={link:function(i){var a=p(i),l=e(a).parent();b.call(o,{href:l.attr("href"),target:l.attr("target")},function(e){var a=l[0];"A"===a.tagName?a.href=e.url:v.call(t,"a",{target:e.target,href:e.url,text:e.url},i)})},unlink:function(t){n.execCommand("unlink")},face:function(e){x.call(this,function(i){v.call(t,"img",{src:i.src,alt:i.alt},e)})},image:function(a){var n=this;layui.use("upload",function(o){var r=l.uploadImage||{};o.render({url:r.url,method:r.type,elem:e(n).find("input")[0],done:function(e){0==e.code?(e.data=e.data||{},v.call(t,"img",{src:e.data.src,alt:e.data.title},a)):i.msg(e.msg||"上传失败")}})})},code:function(e){k.call(o,function(i){v.call(t,"pre",{text:i.code,"lay-lang":i.lang},e)})},help:function(){i.open({type:2,title:"帮助",area:["600px","380px"],shadeClose:!0,shade:.1,skin:"layui-layer-msg",content:["http://www.layui.com/about/layedit/help.html","no"]})}},s=a.find(".layui-layedit-tool"),u=function(){var i=e(this),a=i.attr("layedit-event"),l=i.attr("lay-command");if(!i.hasClass(r)){o.focus();var u=m(n);u.commonAncestorContainer;l?(n.execCommand(l),/justifyLeft|justifyCenter|justifyRight/.test(l)&&n.execCommand("formatBlock",!1,"

    "),setTimeout(function(){o.focus()},10)):c[a]&&c[a].call(this,u),h.call(t,s,i)}},d=/image/;s.find(">i").on("mousedown",function(){var t=e(this),i=t.attr("layedit-event");d.test(i)||u.call(this)}).on("click",function(){var t=e(this),i=t.attr("layedit-event");d.test(i)&&u.call(this)}),o.on("click",function(){h.call(t,s),i.close(x.index)})},b=function(t,e){var l=this,n=i.open({type:1,id:"LAY_layedit_link",area:"350px",shade:.05,shadeClose:!0,moveType:1,title:"超链接",skin:"layui-layer-msg",content:['

      ','
    • ','','
      ','',"
      ","
    • ",'
    • ','','
      ','",'","
      ","
    • ",'
    • ','','',"
    • ","
    "].join(""),success:function(t,n){var o="submit(layedit-link-yes)";a.render("radio"),t.find(".layui-btn-primary").on("click",function(){i.close(n),l.focus()}),a.on(o,function(t){i.close(b.index),e&&e(t.field)})}});b.index=n},x=function(t){var a=function(){var t=["[微笑]","[嘻嘻]","[哈哈]","[可爱]","[可怜]","[挖鼻]","[吃惊]","[害羞]","[挤眼]","[闭嘴]","[鄙视]","[爱你]","[泪]","[偷笑]","[亲亲]","[生病]","[太开心]","[白眼]","[右哼哼]","[左哼哼]","[嘘]","[衰]","[委屈]","[吐]","[哈欠]","[抱抱]","[怒]","[疑问]","[馋嘴]","[拜拜]","[思考]","[汗]","[困]","[睡]","[钱]","[失望]","[酷]","[色]","[哼]","[鼓掌]","[晕]","[悲伤]","[抓狂]","[黑线]","[阴险]","[怒骂]","[互粉]","[心]","[伤心]","[猪头]","[熊猫]","[兔子]","[ok]","[耶]","[good]","[NO]","[赞]","[来]","[弱]","[草泥马]","[神马]","[囧]","[浮云]","[给力]","[围观]","[威武]","[奥特曼]","[礼物]","[钟]","[话筒]","[蜡烛]","[蛋糕]"],e={};return layui.each(t,function(t,i){e[i]=layui.cache.dir+"img/face/"+t+".gif"}),e}();return x.hide=x.hide||function(t){"face"!==e(t.target).attr("layedit-event")&&i.close(x.index)},x.index=i.tips(function(){var t=[];return layui.each(a,function(e,i){t.push('
  • '+e+'
  • ')}),'
      '+t.join("")+"
    "}(),this,{tips:1,time:0,skin:"layui-box layui-util-face",maxWidth:500,success:function(l,n){l.css({marginTop:-4,marginLeft:-10}).find(".layui-clear>li").on("click",function(){t&&t({src:a[this.title],alt:this.title}),i.close(n)}),e(document).off("click",x.hide).on("click",x.hide)}})},k=function(t){var e=this,l=i.open({type:1,id:"LAY_layedit_code",area:"550px",shade:.05,shadeClose:!0,moveType:1,title:"插入代码",skin:"layui-layer-msg",content:['
      ','
    • ','','
      ','","
      ","
    • ",'
    • ','','
      ','',"
      ","
    • ",'
    • ','','',"
    • ","
    "].join(""),success:function(l,n){var o="submit(layedit-code-yes)";a.render("select"),l.find(".layui-btn-primary").on("click",function(){i.close(n),e.focus()}),a.on(o,function(e){i.close(k.index),t&&t(e.field)})}});k.index=l},C={html:'',strong:'',italic:'',underline:'',del:'',"|":'',left:'',center:'',right:'',link:'',unlink:'',face:'',image:'',code:'',help:''},w=new c;t(n,w)}); -------------------------------------------------------------------------------- /public/layui/lay/modules/laypage.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.1.3 MIT License By http://www.layui.com */ 2 | ;layui.define(function(e){"use strict";var a=document,t="getElementById",n="getElementsByTagName",i="laypage",r="layui-disabled",u=function(e){var a=this;a.config=e||{},a.config.index=++s.index,a.render(!0)};u.prototype.type=function(){var e=this.config;if("object"==typeof e.elem)return void 0===e.elem.length?2:3},u.prototype.view=function(){var e=this,a=e.config,t=a.groups="groups"in a?0|a.groups:5;a.layout="object"==typeof a.layout?a.layout:["prev","page","next"],a.count=0|a.count,a.curr=0|a.curr||1,a.limits="object"==typeof a.limits?a.limits:[10,20,30,40,50],a.limit=0|a.limit||10,a.pages=Math.ceil(a.count/a.limit)||1,a.curr>a.pages&&(a.curr=a.pages),t<0?t=1:t>a.pages&&(t=a.pages),a.prev="prev"in a?a.prev:"上一页",a.next="next"in a?a.next:"下一页";var n=a.pages>t?Math.ceil((a.curr+(t>1?1:0))/(t>0?t:1)):1,i={prev:function(){return a.prev?''+a.prev+"":""}(),page:function(){var e=[];if(a.count<1)return"";n>1&&a.first!==!1&&0!==t&&e.push(''+(a.first||1)+"");var i=Math.floor((t-1)/2),r=n>1?a.curr-i:1,u=n>1?function(){var e=a.curr+(t-i-1);return e>a.pages?a.pages:e}():t;for(u-r2&&e.push('');r<=u;r++)r===a.curr?e.push('"+r+""):e.push(''+r+"");return a.pages>t&&a.pages>u&&a.last!==!1&&(u+1…'),0!==t&&e.push(''+(a.last||a.pages)+"")),e.join("")}(),next:function(){return a.next?''+a.next+"":""}(),count:'共 '+a.count+" 条",limit:function(){var e=['"}(),skip:function(){return['到第','','页',""].join("")}()};return['
    ',function(){var e=[];return layui.each(a.layout,function(a,t){i[t]&&e.push(i[t])}),e.join("")}(),"
    "].join("")},u.prototype.jump=function(e,a){if(e){var t=this,i=t.config,r=e.children,u=e[n]("button")[0],l=e[n]("input")[0],p=e[n]("select")[0],c=function(){var e=0|l.value.replace(/\s|\D/g,"");e&&(i.curr=e,t.render())};if(a)return c();for(var o=0,y=r.length;oi.pages||(i.curr=e,t.render())});p&&s.on(p,"change",function(){var e=this.value;i.curr*e>i.count&&(i.curr=Math.ceil(i.count/e)),i.limit=e,t.render()}),u&&s.on(u,"click",function(){c()})}},u.prototype.skip=function(e){if(e){var a=this,t=e[n]("input")[0];t&&s.on(t,"keyup",function(t){var n=this.value,i=t.keyCode;/^(37|38|39|40)$/.test(i)||(/\D/.test(n)&&(this.value=n.replace(/\D/,"")),13===i&&a.jump(e,!0))})}},u.prototype.render=function(e){var n=this,i=n.config,r=n.type(),u=n.view();2===r?i.elem&&(i.elem.innerHTML=u):3===r?i.elem.html(u):a[t](i.elem)&&(a[t](i.elem).innerHTML=u),i.jump&&i.jump(i,e);var s=a[t]("layui-laypage-"+i.index);n.jump(s),i.hash&&!e&&(location.hash="!"+i.hash+"="+i.curr),n.skip(s)};var s={render:function(e){var a=new u(e);return a.index},index:layui.laypage?layui.laypage.index+1e4:0,on:function(e,a,t){return e.attachEvent?e.attachEvent("on"+a,function(a){t.call(e,a)}):e.addEventListener(a,t,!1),this}};e(i,s)}); -------------------------------------------------------------------------------- /public/layui/lay/modules/laytpl.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.1.3 MIT License By http://www.layui.com */ 2 | ;layui.define(function(e){"use strict";var r={open:"{{",close:"}}"},n={exp:function(e){return new RegExp(e,"g")},query:function(e,n,t){var o=["#([\\s\\S])+?","([^{#}])*?"][e||0];return c((n||"")+r.open+o+r.close+(t||""))},escape:function(e){return String(e||"").replace(/&(?!#?[a-zA-Z0-9]+;)/g,"&").replace(//g,">").replace(/'/g,"'").replace(/"/g,""")},error:function(e,r){var n="Laytpl Error:";return"object"==typeof console&&console.error(n+e+"\n"+(r||"")),n+e}},c=n.exp,t=function(e){this.tpl=e};t.pt=t.prototype,window.errors=0,t.pt.parse=function(e,t){var o=this,p=e,a=c("^"+r.open+"#",""),l=c(r.close+"$","");e=e.replace(/\s+|\r|\t|\n/g," ").replace(c(r.open+"#"),r.open+"# ").replace(c(r.close+"}"),"} "+r.close).replace(/\\/g,"\\\\").replace(/(?="|')/g,"\\").replace(n.query(),function(e){return e=e.replace(a,"").replace(l,""),'";'+e.replace(/\\/g,"")+';view+="'}).replace(n.query(1),function(e){var n='"+(';return e.replace(/\s/g,"")===r.open+r.close?"":(e=e.replace(c(r.open+"|"+r.close),""),/^=/.test(e)&&(e=e.replace(/^=/,""),n='"+_escape_('),n+e.replace(/\\/g,"")+')+"')}),e='"use strict";var view = "'+e+'";return view;';try{return o.cache=e=new Function("d, _escape_",e),e(t,n.escape)}catch(u){return delete o.cache,n.error(u,p)}},t.pt.render=function(e,r){var c,t=this;return e?(c=t.cache?t.cache(e,n.escape):t.parse(t.tpl,e),r?void r(c):c):n.error("no data")};var o=function(e){return"string"!=typeof e?n.error("Template not found"):new t(e)};o.config=function(e){e=e||{};for(var n in e)r[n]=e[n]},o.v="1.2.0",e("laytpl",o)}); -------------------------------------------------------------------------------- /public/layui/lay/modules/tree.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.1.3 MIT License By http://www.layui.com */ 2 | ;layui.define("jquery",function(e){"use strict";var o=layui.$,a=layui.hint(),i="layui-tree-enter",r=function(e){this.options=e},t={arrow:["",""],checkbox:["",""],radio:["",""],branch:["",""],leaf:""};r.prototype.init=function(e){var o=this;e.addClass("layui-box layui-tree"),o.options.skin&&e.addClass("layui-tree-skin-"+o.options.skin),o.tree(e),o.on(e)},r.prototype.tree=function(e,a){var i=this,r=i.options,n=a||r.nodes;layui.each(n,function(a,n){var l=n.children&&n.children.length>0,c=o('
      '),s=o(["
    • ",function(){return l?''+(n.spread?t.arrow[1]:t.arrow[0])+"":""}(),function(){return r.check?''+("checkbox"===r.check?t.checkbox[0]:"radio"===r.check?t.radio[0]:"")+"":""}(),function(){return'"+(''+(l?n.spread?t.branch[1]:t.branch[0]:t.leaf)+"")+(""+(n.name||"未命名")+"")}(),"
    • "].join(""));l&&(s.append(c),i.tree(c,n.children)),e.append(s),"function"==typeof r.click&&i.click(s,n),i.spread(s,n),r.drag&&i.drag(s,n)})},r.prototype.click=function(e,o){var a=this,i=a.options;e.children("a").on("click",function(e){layui.stope(e),i.click(o)})},r.prototype.spread=function(e,o){var a=this,i=(a.options,e.children(".layui-tree-spread")),r=e.children("ul"),n=e.children("a"),l=function(){e.data("spread")?(e.data("spread",null),r.removeClass("layui-show"),i.html(t.arrow[0]),n.find(".layui-icon").html(t.branch[0])):(e.data("spread",!0),r.addClass("layui-show"),i.html(t.arrow[1]),n.find(".layui-icon").html(t.branch[1]))};r[0]&&(i.on("click",l),n.on("dblclick",l))},r.prototype.on=function(e){var a=this,r=a.options,t="layui-tree-drag";e.find("i").on("selectstart",function(e){return!1}),r.drag&&o(document).on("mousemove",function(e){var i=a.move;if(i.from){var r=(i.to,o('
      '));e.preventDefault(),o("."+t)[0]||o("body").append(r);var n=o("."+t)[0]?o("."+t):r;n.addClass("layui-show").html(i.from.elem.children("a").html()),n.css({left:e.pageX+10,top:e.pageY+10})}}).on("mouseup",function(){var e=a.move;e.from&&(e.from.elem.children("a").removeClass(i),e.to&&e.to.elem.children("a").removeClass(i),a.move={},o("."+t).remove())})},r.prototype.move={},r.prototype.drag=function(e,a){var r=this,t=(r.options,e.children("a")),n=function(){var t=o(this),n=r.move;n.from&&(n.to={item:a,elem:e},t.addClass(i))};t.on("mousedown",function(){var o=r.move;o.from={item:a,elem:e}}),t.on("mouseenter",n).on("mousemove",n).on("mouseleave",function(){var e=o(this),a=r.move;a.from&&(delete a.to,e.removeClass(i))})},e("tree",function(e){var i=new r(e=e||{}),t=o(e.elem);return t[0]?void i.init(t):a.error("layui.tree 没有找到"+e.elem+"元素")})}); -------------------------------------------------------------------------------- /public/layui/lay/modules/upload.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.1.3 MIT License By http://www.layui.com */ 2 | ;layui.define("layer",function(e){"use strict";var i=layui.$,t=layui.layer,n=layui.hint(),a=layui.device(),o={config:{},set:function(e){var t=this;return t.config=i.extend({},t.config,e),t},on:function(e,i){return layui.onevent.call(this,r,e,i)}},l=function(){var e=this;return{upload:function(i){e.upload.call(e,i)},config:e.config}},r="upload",u="layui-upload-file",c="layui-upload-form",s="layui-upload-iframe",f="layui-upload-choose",p=function(e){var t=this;t.config=i.extend({},t.config,o.config,e),t.render()};p.prototype.config={accept:"images",exts:"",auto:!0,bindAction:"",url:"",field:"file",method:"post",data:{},drag:!0,size:0,multiple:!1},p.prototype.render=function(e){var t=this,e=t.config;e.elem=i(e.elem),e.bindAction=i(e.bindAction),t.file(),t.events()},p.prototype.file=function(){var e=this,t=e.config,n=e.elemFile=i(['"].join("")),o=t.elem.next();(o.hasClass(u)||o.hasClass(c))&&o.remove(),a.ie&&a.ie<10&&t.elem.wrap('
      '),e.isFile()?(e.elemFile=t.elem,t.field=t.elem[0].name):t.elem.after(n),a.ie&&a.ie<10&&e.initIE()},p.prototype.initIE=function(){var e=this,t=e.config,n=i(''),a=i(['
      ',"
      "].join(""));i("#"+s)[0]||i("body").append(n),t.elem.next().hasClass(s)||(e.elemFile.wrap(a),t.elem.next("."+s).append(function(){var e=[];return layui.each(t.data,function(i,t){e.push('')}),e.join("")}()))},p.prototype.msg=function(e){return t.msg(e,{icon:2,shift:6})},p.prototype.isFile=function(){var e=this.config.elem[0];if(e)return"input"===e.tagName.toLocaleLowerCase()&&"file"===e.type},p.prototype.preview=function(e){var i=this;window.FileReader&&layui.each(i.chooseFiles,function(i,t){var n=new FileReader;n.readAsDataURL(t),n.onload=function(){e&&e(i,t,this.result)}})},p.prototype.upload=function(e,t){var n,o=this,l=o.config,r=o.elemFile[0],u=function(){layui.each(e||o.files||o.chooseFiles||r.files,function(e,t){var n=new FormData;n.append(l.field,t),layui.each(l.data,function(e,i){n.append(e,i)}),i.ajax({url:l.url,type:l.method,data:n,contentType:!1,processData:!1,dataType:"json",success:function(i){d(e,i)},error:function(){o.msg("请求上传接口出现异常"),m(e)}})})},c=function(){var e=i("#"+s);o.elemFile.parent().submit(),clearInterval(p.timer),p.timer=setInterval(function(){var i,t=e.contents().find("body");try{i=t.text()}catch(n){o.msg("获取上传后的响应信息出现异常"),clearInterval(p.timer),m()}i&&(clearInterval(p.timer),t.html(""),d(0,i))},30)},d=function(e,i){if(o.elemFile.next("."+f).remove(),r.value="","object"!=typeof i)try{i=JSON.parse(i)}catch(t){return i={},o.msg("请对上传接口返回有效JSON")}"function"==typeof l.done&&l.done(i,e||0,function(e){o.upload(e)})},m=function(e){l.auto&&(r.value=""),"function"==typeof l.error&&l.error(e||0,function(e){o.upload(e)})},v=l.exts,h=function(){var i=[];return layui.each(e||o.chooseFiles,function(e,t){i.push(t.name)}),i}(),g={preview:function(e){o.preview(e)},upload:function(e,i){var t={};t[e]=i,o.upload(t)},pushFile:function(){return o.files=o.files||{},layui.each(o.chooseFiles,function(e,i){o.files[e]=i}),o.files}},y=function(){return"choose"===t?l.choose&&l.choose(g):(l.before&&l.before(g),a.ie?a.ie>9?u():c():void u())};switch(h=0===h.length?r.value.match(/[^\/\\]+\..+/g)||[]||"":h,l.accept){case"file":if(v&&!RegExp("\\w\\.("+v+")$","i").test(escape(h)))return o.msg("选择的文件中包含不支持的格式"),r.value="";break;case"video":if(!RegExp("\\w\\.("+(v||"avi|mp4|wma|rmvb|rm|flash|3gp|flv")+")$","i").test(escape(h)))return o.msg("选择的视频中包含不支持的格式"),r.value="";break;case"audio":if(!RegExp("\\w\\.("+(v||"mp3|wav|mid")+")$","i").test(escape(h)))return o.msg("选择的音频中包含不支持的格式"),r.value="";break;default:if(layui.each(h,function(e,i){RegExp("\\w\\.("+(v||"jpg|png|gif|bmp|jpeg$")+")","i").test(escape(i))||(n=!0)}),n)return o.msg("选择的图片中包含不支持的格式"),r.value=""}if(l.size>0&&!(a.ie&&a.ie<10)){var F;if(layui.each(o.chooseFiles,function(e,i){if(i.size>1024*l.size){var t=l.size/1024;t=t>=1?Math.floor(t)+(t%1>0?t.toFixed(1):0)+"MB":l.size+"KB",r.value="",F=t}}),F)return o.msg("文件不能超过"+F)}y()},p.prototype.events=function(){var e=this,t=e.config,o=function(i){e.chooseFiles={},layui.each(i,function(i,t){var n=(new Date).getTime();e.chooseFiles[n+"-"+i]=t})},l=function(i,n){var a=e.elemFile,o=i.length>1?i.length+"个文件":(i[0]||{}).name||a[0].value.match(/[^\/\\]+\..+/g)||[]||"";a.next().hasClass(f)&&a.next().remove(),e.upload(null,"choose"),e.isFile()||t.choose||a.after(''+o+"")};t.elem.off("upload.start").on("upload.start",function(){var a=i(this),o=a.attr("lay-data");if(o)try{o=new Function("return "+o)(),e.config=i.extend({},t,o)}catch(l){n.error("Upload element property lay-data configuration item has a syntax error: "+o)}e.config.item=a,e.elemFile[0].click()}),a.ie&&a.ie<10||t.elem.off("upload.over").on("upload.over",function(){var e=i(this);e.attr("lay-over","")}).off("upload.leave").on("upload.leave",function(){var e=i(this);e.removeAttr("lay-over")}).off("upload.drop").on("upload.drop",function(n,a){var r=i(this),u=a.originalEvent.dataTransfer.files||[];r.removeAttr("lay-over"),o(u),t.auto?e.upload(u):l(u)}),e.elemFile.off("upload.change").on("upload.change",function(){var i=this.files||[];o(i),t.auto?e.upload():l(i)}),t.bindAction.off("upload.action").on("upload.action",function(){e.upload()}),t.elem.data("haveEvents")||(e.elemFile.on("change",function(){i(this).trigger("upload.change")}),t.elem.on("click",function(){e.isFile()||i(this).trigger("upload.start")}),t.drag&&t.elem.on("dragover",function(e){e.preventDefault(),i(this).trigger("upload.over")}).on("dragleave",function(e){i(this).trigger("upload.leave")}).on("drop",function(e){e.preventDefault(),i(this).trigger("upload.drop",e)}),t.bindAction.on("click",function(){i(this).trigger("upload.action")}),t.elem.data("haveEvents",!0))},o.render=function(e){var i=new p(e);return l.call(i)},e(r,o)}); -------------------------------------------------------------------------------- /public/layui/lay/modules/util.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.1.3 MIT License By http://www.layui.com */ 2 | ;layui.define("jquery",function(e){"use strict";var o=layui.$,t={fixbar:function(e){var t,a,i="layui-fixbar",l="layui-fixbar-top",r=o(document),c=o("body");e=o.extend({showHeight:200},e),e.bar1=e.bar1===!0?"":e.bar1,e.bar2=e.bar2===!0?"":e.bar2,e.bgcolor=e.bgcolor?"background-color:"+e.bgcolor:"";var n=[e.bar1,e.bar2,""],u=o(['
        ',e.bar1?'
      • '+n[0]+"
      • ":"",e.bar2?'
      • '+n[1]+"
      • ":"",'
      • '+n[2]+"
      • ","
      "].join("")),s=u.find("."+l),b=function(){var o=r.scrollTop();o>=e.showHeight?t||(s.show(),t=1):t&&(s.hide(),t=0)};o("."+i)[0]||("object"==typeof e.css&&u.css(e.css),c.append(u),b(),u.find("li").on("click",function(){var t=o(this),a=t.attr("lay-type");"top"===a&&o("html,body").animate({scrollTop:0},200),e.click&&e.click.call(this,a)}),r.on("scroll",function(){clearTimeout(a),a=setTimeout(function(){b()},100)}))},countdown:function(e,o,t){var a=this,i="function"==typeof o,l=new Date(e).getTime(),r=new Date(!o||i?(new Date).getTime():o).getTime(),c=l-r,n=[Math.floor(c/864e5),Math.floor(c/36e5)%24,Math.floor(c/6e4)%60,Math.floor(c/1e3)%60];i&&(t=o);var u=setTimeout(function(){a.countdown(e,r+1e3,t)},1e3);return t&&t(c>0?n:[0,0,0,0],o,u),c<=0&&clearTimeout(u),u},timeAgo:function(e,o){var t=(new Date).getTime()-new Date(e).getTime();return t>2592e6?(t=new Date(e).toLocaleString(),o&&(t=t.replace(/\s[\S]+$/g,"")),t):t>=864e5?(t/1e3/60/60/24|0)+"天前":t>=36e5?(t/1e3/60/60|0)+"小时前":t>=18e4?(t/1e3/60|0)+"分钟前":t<0?"未来":"刚刚"}};e("util",t)}); -------------------------------------------------------------------------------- /public/layui/layui.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.1.3 MIT License By http://www.layui.com */ 2 | ;!function(e){"use strict";var t=document,o={modules:{},status:{},timeout:10,event:{}},n=function(){this.v="2.1.3"},r=function(){var e=t.scripts,o=e[e.length-1].src;return o.substring(0,o.lastIndexOf("/")+1)}(),a=function(t){e.console&&console.error&&console.error("Layui hint: "+t)},i="undefined"!=typeof opera&&"[object Opera]"===opera.toString(),u={layer:"modules/layer",laydate:"modules/laydate",laypage:"modules/laypage",laytpl:"modules/laytpl",layim:"modules/layim",layedit:"modules/layedit",form:"modules/form",upload:"modules/upload",tree:"modules/tree",table:"modules/table",element:"modules/element",util:"modules/util",flow:"modules/flow",carousel:"modules/carousel",code:"modules/code",jquery:"modules/jquery",mobile:"modules/mobile","layui.all":"../layui.all"};n.prototype.cache=o,n.prototype.define=function(e,t){var n=this,r="function"==typeof e,a=function(){return"function"==typeof t&&t(function(e,t){layui[e]=t,o.status[e]=!0}),this};return r&&(t=e,e=[]),layui["layui.all"]||!layui["layui.all"]&&layui["layui.mobile"]?a.call(n):(n.use(e,a),n)},n.prototype.use=function(e,n,l){function s(e,t){var n="PLaySTATION 3"===navigator.platform?/^complete$/:/^(complete|loaded)$/;("load"===e.type||n.test((e.currentTarget||e.srcElement).readyState))&&(o.modules[f]=t,d.removeChild(v),function r(){return++m>1e3*o.timeout/4?a(f+" is not a valid module"):void(o.status[f]?c():setTimeout(r,4))}())}function c(){l.push(layui[f]),e.length>1?y.use(e.slice(1),n,l):"function"==typeof n&&n.apply(layui,l)}var y=this,p=o.dir=o.dir?o.dir:r,d=t.getElementsByTagName("head")[0];e="string"==typeof e?[e]:e,window.jQuery&&jQuery.fn.on&&(y.each(e,function(t,o){"jquery"===o&&e.splice(t,1)}),layui.jquery=layui.$=jQuery);var f=e[0],m=0;if(l=l||[],o.host=o.host||(p.match(/\/\/([\s\S]+?)\//)||["//"+location.host+"/"])[0],0===e.length||layui["layui.all"]&&u[f]||!layui["layui.all"]&&layui["layui.mobile"]&&u[f])return c(),y;if(o.modules[f])!function g(){return++m>1e3*o.timeout/4?a(f+" is not a valid module"):void("string"==typeof o.modules[f]&&o.status[f]?c():setTimeout(g,4))}();else{var v=t.createElement("script"),h=(u[f]?p+"lay/":o.base||"")+(y.modules[f]||f)+".js";v.async=!0,v.charset="utf-8",v.src=h+function(){var e=o.version===!0?o.v||(new Date).getTime():o.version||"";return e?"?v="+e:""}(),d.appendChild(v),!v.attachEvent||v.attachEvent.toString&&v.attachEvent.toString().indexOf("[native code")<0||i?v.addEventListener("load",function(e){s(e,h)},!1):v.attachEvent("onreadystatechange",function(e){s(e,h)}),o.modules[f]=h}return y},n.prototype.getStyle=function(t,o){var n=t.currentStyle?t.currentStyle:e.getComputedStyle(t,null);return n[n.getPropertyValue?"getPropertyValue":"getAttribute"](o)},n.prototype.link=function(e,n,r){var i=this,u=t.createElement("link"),l=t.getElementsByTagName("head")[0];"string"==typeof n&&(r=n);var s=(r||e).replace(/\.|\//g,""),c=u.id="layuicss-"+s,y=0;return u.rel="stylesheet",u.href=e+(o.debug?"?v="+(new Date).getTime():""),u.media="all",t.getElementById(c)||l.appendChild(u),"function"!=typeof n?i:(function p(){return++y>1e3*o.timeout/100?a(e+" timeout"):void(1989===parseInt(i.getStyle(t.getElementById(c),"width"))?function(){n()}():setTimeout(p,100))}(),i)},n.prototype.addcss=function(e,t,n){return layui.link(o.dir+"css/"+e,t,n)},n.prototype.img=function(e,t,o){var n=new Image;return n.src=e,n.complete?t(n):(n.onload=function(){n.onload=null,t(n)},void(n.onerror=function(e){n.onerror=null,o(e)}))},n.prototype.config=function(e){e=e||{};for(var t in e)o[t]=e[t];return this},n.prototype.modules=function(){var e={};for(var t in u)e[t]=u[t];return e}(),n.prototype.extend=function(e){var t=this;e=e||{};for(var o in e)t[o]||t.modules[o]?a("模块名 "+o+" 已被占用"):t.modules[o]=e[o];return t},n.prototype.router=function(e){var t=this,e=e||location.hash,o={path:[],search:{},hash:(e.match(/[^#](#.*$)/)||[])[1]||""};return/^#\//.test(e)?(e=e.replace(/^#\//,"").replace(/([^#])(#.*$)/,"$1").split("/")||[],t.each(e,function(e,t){/^\w+=/.test(t)?function(){t=t.split("="),o.search[t[0]]=t[1]}():o.path.push(t)}),o):o},n.prototype.data=function(t,o){if(t=t||"layui",e.JSON&&e.JSON.parse){if(null===o)return delete localStorage[t];o="object"==typeof o?o:{key:o};try{var n=JSON.parse(localStorage[t])}catch(r){var n={}}return o.value&&(n[o.key]=o.value),o.remove&&delete n[o.key],localStorage[t]=JSON.stringify(n),o.key?n[o.key]:n}},n.prototype.device=function(t){var o=navigator.userAgent.toLowerCase(),n=function(e){var t=new RegExp(e+"/([^\\s\\_\\-]+)");return e=(o.match(t)||[])[1],e||!1},r={os:function(){return/windows/.test(o)?"windows":/linux/.test(o)?"linux":/iphone|ipod|ipad|ios/.test(o)?"ios":/mac/.test(o)?"mac":void 0}(),ie:function(){return!!(e.ActiveXObject||"ActiveXObject"in e)&&((o.match(/msie\s(\d+)/)||[])[1]||"11")}(),weixin:n("micromessenger")};return t&&!r[t]&&(r[t]=n(t)),r.android=/android/.test(o),r.ios="ios"===r.os,r},n.prototype.hint=function(){return{error:a}},n.prototype.each=function(e,t){var o,n=this;if("function"!=typeof t)return n;if(e=e||[],e.constructor===Object){for(o in e)if(t.call(e[o],o,e[o]))break}else for(o=0;oa?1:r 2 | 3 | 4 | 5 | Title 6 | 7 | 8 |
      9 | 10 | 11 |
      12 | 13 | -------------------------------------------------------------------------------- /routes/index.js: -------------------------------------------------------------------------------- 1 | var express = require('express'); 2 | var router = express.Router(); 3 | var formidable = require('formidable'), 4 | util = require('util'); 5 | var md5 = require('../utils/md5'); 6 | 7 | //文件上传 8 | router.post('/upload', function(req, res, next) { 9 | //创建表单上传 10 | var form = new formidable.IncomingForm(); 11 | //设置编辑 12 | form.encoding = 'utf-8'; 13 | //设置文件存储路径 14 | form.uploadDir = "public/uploads/"; 15 | //保留后缀 16 | form.keepExtensions = true; 17 | //设置单文件大小限制 18 | form.maxFieldsSize = 100 * 1024 * 1024; 19 | //form.maxFields = 1000; 设置所以文件的大小总和 20 | 21 | form.parse(req, function(err, fields, files) { 22 | if(err){ 23 | return res.send({code:400,msg:err.toLocaleString()}); 24 | } 25 | var file = files.file; 26 | if(!file){ 27 | return res.send({code:400,msg:'位置错误'}); 28 | } 29 | md5.get_file_md5(file.path).then(function (result) { 30 | var path = file.path.split('/'); 31 | var info = { 32 | file_name:file.name, 33 | file_md5:result, 34 | file_size:file.size, 35 | file_path:'/'+path[1]+'/'+path[2] 36 | }; 37 | return res.send({code:200,msg:'上传成功',data:info}); 38 | }); 39 | }); 40 | }); 41 | 42 | 43 | /* 页面路由 */ 44 | router.get('/', function(req, res, next) { 45 | console.log('当前Session',req.session.user) 46 | if(req.session.user){ 47 | res.render('index'); 48 | }else{ 49 | res.render('login'); 50 | } 51 | }); 52 | 53 | router.get('/welcome', function(req, res, next) { 54 | res.render('welcome'); 55 | }); 56 | 57 | router.get('/project', function(req, res, next) { 58 | res.render('project'); 59 | }); 60 | 61 | router.get('/pswset', function(req, res, next) { 62 | res.render('pswset'); 63 | }); 64 | 65 | router.get('/users', function(req, res, next) { 66 | res.render('users'); 67 | }); 68 | 69 | 70 | 71 | module.exports = router; 72 | -------------------------------------------------------------------------------- /routes/project.js: -------------------------------------------------------------------------------- 1 | var express = require('express'); 2 | var router = express.Router(); 3 | var project_model = require('../model/project'); 4 | 5 | router.get('/query', function(req, res, next) { 6 | var page = req.query.page || 1; 7 | var size = req.query.size || 10; 8 | 9 | if(typeof page == 'string'){ 10 | page = parseInt(page); 11 | } 12 | 13 | if(typeof size == 'string'){ 14 | size = parseInt(size); 15 | } 16 | 17 | project_model.query(page,size,function (err,data) { 18 | if(err){ 19 | console.error(err); 20 | return res.send({code:400,msg:err.toLocaleString()}); 21 | } 22 | return res.send({code:200,msg:'查询成功',data:data}); 23 | }); 24 | 25 | }); 26 | 27 | router.post('/add', function(req, res, next) { 28 | if(!req.session.user){ 29 | return res.send({code:400,msg:'未登录'}); 30 | } 31 | 32 | var name = req.body.name ; 33 | var version = req.body.version; 34 | var is_force = req.body.is_force || 0; 35 | var download_path = req.body.download_path ; 36 | var option_people = req.session.user.username; 37 | var file_name = req.body.file_name ; 38 | var file_size = req.body.file_size ; 39 | var file_md5 = req.body.file_md5 ; 40 | var remark = req.body.remark ; 41 | 42 | if(!name || !version || !download_path || !remark){ 43 | return res.send({code:400,msg:'参数未传'}); 44 | } 45 | 46 | project_model.add(name,version,download_path,is_force,option_people,file_md5,file_size,file_name,remark,function (err,data) { 47 | if(err){ 48 | console.error(err); 49 | return res.send({code:400,msg:err.toLocaleString()}); 50 | } 51 | return res.send({code:200,msg:'添加成功',data:data}); 52 | }); 53 | }); 54 | 55 | router.post('/del', function(req, res, next) { 56 | var id = req.body.id ; 57 | if(!id){ 58 | return res.send({code:400,msg:'参数未传'}); 59 | } 60 | project_model.del(id,function (err,data) { 61 | if(err){ 62 | console.error(err); 63 | return res.send({code:400,msg:err.toLocaleString()}); 64 | } 65 | return res.send({code:200,msg:'删除成功'}); 66 | }); 67 | }); 68 | 69 | router.post('/update', function(req, res, next) { 70 | var id = req.body.id ; 71 | if(!id){ 72 | return res.send({code:400,msg:'参数未传'}); 73 | } 74 | if(!req.session.user){ 75 | return res.send({code:400,msg:'未登录'}); 76 | } 77 | var name = req.body.name ; 78 | var version = req.body.version; 79 | var is_force = req.body.is_force; 80 | var download_path = req.body.download_path ; 81 | var option_people = req.session.user.username; 82 | var file_name = req.body.file_name ; 83 | var file_size = req.body.file_size ; 84 | var file_md5 = req.body.file_md5 ; 85 | var remark = req.body.remark ; 86 | 87 | project_model.update(id,name,version,download_path,is_force,option_people,file_md5,file_size,file_name,remark,function (err,data) { 88 | if(err){ 89 | console.error(err); 90 | return res.send({code:400,msg:err.toLocaleString()}); 91 | } 92 | return res.send({code:200,msg:'删除成功'}); 93 | }); 94 | }); 95 | 96 | router.post('/check', function(req, res, next) { 97 | var name = req.body.name ; 98 | var version = req.body.version ; 99 | if(!name || !version){ 100 | return res.send({code:400,msg:'参数未传'}); 101 | } 102 | project_model.check(name,version,function (err,data) { 103 | if(err){ 104 | console.error(err); 105 | return res.send({code:400,msg:err.toLocaleString()}); 106 | } 107 | return res.send({code:200,msg:'有新的升级',data:data}); 108 | }); 109 | }); 110 | 111 | module.exports = router; 112 | -------------------------------------------------------------------------------- /routes/users.js: -------------------------------------------------------------------------------- 1 | var express = require('express'); 2 | var router = express.Router(); 3 | var user_model = require('../model/users'); 4 | 5 | router.post('/login', function(req, res, next) { 6 | var username = req.body.username || ''; 7 | var password = req.body.password || ''; 8 | 9 | user_model.login(username,password,function (err,data) { 10 | if(err){ 11 | console.error(err); 12 | return res.send({code:400,msg:err.toLocaleString()}); 13 | } 14 | req.session.user = data; 15 | return res.send({code:200,msg:'登录成功'}); 16 | }); 17 | 18 | }); 19 | 20 | router.get('/logout', function(req, res, next) { 21 | req.session.user = null; 22 | res.redirect('/'); 23 | }); 24 | 25 | router.post('/pswset', function(req, res, next) { 26 | var password = req.body.password || ''; 27 | var password_new = req.body.password_new || ''; 28 | if(!req.session.user){ 29 | return res.redirect('/'); 30 | } 31 | user_model.reset_psw(req.session.user.username,password,password_new,function (err,data) { 32 | if(err){ 33 | console.error(err); 34 | return res.send({code:400,msg:err.toLocaleString()}); 35 | } 36 | req.session.user = data; 37 | return res.send({code:200,msg:'登录成功'}); 38 | }); 39 | }); 40 | 41 | module.exports = router; 42 | -------------------------------------------------------------------------------- /utils/md5.js: -------------------------------------------------------------------------------- 1 | var fs = require('fs'); 2 | var crypto = require('crypto'); 3 | 4 | function _get_file_md5(path) { 5 | return new Promise(function (resolve, reject) { 6 | var md5sum = crypto.createHash('md5'); 7 | var stream = fs.createReadStream(path); 8 | stream.on('data', function(chunk) { 9 | md5sum.update(chunk); 10 | }); 11 | stream.on('end', function() { 12 | var str = md5sum.digest('hex'); 13 | resolve(str); 14 | }); 15 | }); 16 | } 17 | 18 | var get_file_md5 = async function get_file_md5(path) { 19 | var str = await _get_file_md5(path); 20 | return str.toString(); 21 | } 22 | 23 | 24 | function get_string_md5(str) { 25 | var md5 = crypto.createHash('md5'); 26 | return md5.update(str).digest('hex'); 27 | } 28 | 29 | exports.get_file_md5 = get_file_md5; 30 | exports.get_string_md5 = get_string_md5; -------------------------------------------------------------------------------- /utils/redis.js: -------------------------------------------------------------------------------- 1 | /** 2 | *Author: TaiGuangYin 3 | *Date: 2017 4 | *Description:Redis操作类封装 5 | */ 6 | var redisSvc = {}; 7 | var redis = require("redis"); 8 | var config = require("../config").REDIS; 9 | 10 | if(!client){ 11 | var client = redis.createClient(config.port,config.host); 12 | } 13 | 14 | client.on("error", function (err) { 15 | console.log("Redis Error :" , err); 16 | client = null; 17 | }); 18 | 19 | client.on('connect', function(){ 20 | console.log('Redis连接成功.'); 21 | }); 22 | 23 | /** 24 | * 添加string类型的数据 25 | * @param key 键 26 | * @params value 值 27 | * @params expire (过期时间,单位秒;可为空,为空表示不过期) 28 | */ 29 | redisSvc.set = function(key, value, expire){ 30 | return new Promise(function (resolve, reject) { 31 | if(typeof value == 'undefined') { 32 | return reject(key + '的值为空') 33 | } 34 | client.set(key, value, function(err, result){ 35 | if (err) { 36 | return reject(err); 37 | } 38 | if (!isNaN(expire) && expire > 0) { 39 | client.expire(key, parseInt(expire)); 40 | } 41 | return resolve(result); 42 | }); 43 | }); 44 | 45 | }; 46 | 47 | /** 48 | * 查询string类型的数据 49 | * @param key 键 50 | */ 51 | redisSvc.get = function(key){ 52 | return new Promise(function (resolve, reject) { 53 | client.get(key, function(err,result){ 54 | if (err) { 55 | return reject(err); 56 | } 57 | return resolve(result); 58 | }); 59 | }); 60 | 61 | }; 62 | 63 | /* 64 | *删除String 类型的key 65 | * @param key 键 66 | */ 67 | redisSvc.del = function(key){ 68 | return new Promise(function (resolve, reject) { 69 | client.del(key, function(err,result){ 70 | if (err) { 71 | return reject(err); 72 | } 73 | return resolve(result); 74 | }); 75 | }); 76 | 77 | }; 78 | 79 | 80 | module.exports = redisSvc; -------------------------------------------------------------------------------- /views/error.ejs: -------------------------------------------------------------------------------- 1 |

      <%= message %>

      2 |

      <%= error.status %>

      3 |
      <%= error.stack %>
      4 | -------------------------------------------------------------------------------- /views/index.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | APP升级后台管理系统 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 |
      23 |
      24 |
      25 | 36 | 49 | 54 |
      55 |
      56 |
      57 |
      58 |
      59 |
      60 |
      61 |
        62 |
      • 63 | 64 | 控制面板 65 |
      • 66 |
      67 |
      68 |
      69 | 70 |
      71 |
      72 |
      73 |
      74 | 81 |
      82 | 83 |
      84 |
      85 | 86 | 87 | 88 | 89 | 107 |
      108 | 109 | 110 | -------------------------------------------------------------------------------- /views/login.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 登录 8 | 9 | 10 | 11 | 12 | 13 | 14 | 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 | 70 | 71 | -------------------------------------------------------------------------------- /views/pswset.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 登录 8 | 9 | 10 | 11 | 12 | 13 | 14 | 17 | 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 | 89 | 90 | -------------------------------------------------------------------------------- /views/users.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 登录 8 | 9 | 10 | 11 | 12 | 13 | 14 | 17 | 18 | 19 |
      20 |
      21 | 即将完成。敬请期待... 22 |
      23 |
      24 | 25 | 26 | -------------------------------------------------------------------------------- /views/welcome.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 登录 8 | 9 | 10 | 11 | 12 | 13 | 14 | 17 | 18 | 19 |
      20 |
      21 | 欢迎使用该系统,请帮忙给个star,这将是我继续的动力。谢谢... 22 |
      23 |
      24 | 25 | 26 | --------------------------------------------------------------------------------