├── 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 | 
53 |
54 | 
55 |
56 | 
57 |
58 | 
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=['"];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('- '+o.replace(/[\r\t\n]+/g,"
- ")+"
"),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(['"].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('
')}),'"}(),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 |
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 |
56 |
59 |
60 |
61 |
62 | -
63 |
64 | 控制面板
65 |
66 |
67 |
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 |
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 |
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 |
--------------------------------------------------------------------------------