├── README.md ├── app.js ├── bin └── www ├── config └── log4js.json ├── img ├── group.png ├── home.png ├── log.png └── user.png ├── log ├── access.log ├── app.log └── errors.log ├── models ├── AdminGroup.js ├── AdminUser.js ├── DBOpt.js └── SystemLog.js ├── package.json ├── public ├── .DS_Store ├── assets │ ├── .DS_Store │ ├── amazeui.min.css │ ├── css │ │ ├── .DS_Store │ │ ├── admin.css │ │ ├── amazeui.datatables.min.css │ │ ├── amazeui.min.css │ │ ├── app.css │ │ ├── app.less │ │ ├── fullcalendar.min.css │ │ ├── fullcalendar.print.css │ │ ├── img │ │ │ ├── diy │ │ │ │ ├── 1_close.png │ │ │ │ ├── 1_open.png │ │ │ │ ├── 2.png │ │ │ │ ├── 3.png │ │ │ │ ├── 4.png │ │ │ │ ├── 5.png │ │ │ │ ├── 6.png │ │ │ │ ├── 7.png │ │ │ │ ├── 8.png │ │ │ │ └── 9.png │ │ │ ├── line_conn.gif │ │ │ ├── loading.gif │ │ │ ├── zTreeStandard.gif │ │ │ └── zTreeStandard.png │ │ └── zTreeStyle.css │ ├── fonts │ │ ├── FontAwesome.otf │ │ ├── fontawesome-webfont.eot │ │ ├── fontawesome-webfont.ttf │ │ ├── fontawesome-webfont.woff │ │ └── fontawesome-webfont.woff2 │ ├── i │ │ ├── app-icon72x72@2x.png │ │ ├── examples │ │ │ ├── admin-chrome.png │ │ │ ├── admin-firefox.png │ │ │ ├── admin-ie.png │ │ │ ├── admin-opera.png │ │ │ ├── admin-safari.png │ │ │ ├── adminPage.png │ │ │ ├── blogPage.png │ │ │ ├── landing.png │ │ │ ├── landingPage.png │ │ │ ├── loginPage.png │ │ │ └── sidebarPage.png │ │ ├── favicon.png │ │ └── startup-640x1096.png │ ├── img │ │ ├── a5.png │ │ ├── k.jpg │ │ ├── logo.png │ │ ├── logoa.png │ │ ├── logob.png │ │ ├── user01.png │ │ ├── user02.png │ │ ├── user03.png │ │ ├── user04.png │ │ ├── user05.png │ │ ├── user06.png │ │ └── user07.png │ └── js │ │ ├── amazeui.datatables.min.js │ │ ├── amazeui.min.js │ │ ├── angular-websocket.min.js │ │ ├── angular-websocket.min.js.map │ │ ├── app.js │ │ ├── dataTables.responsive.min.js │ │ ├── echarts.min.js │ │ ├── fullcalendar.min.js │ │ ├── jquery.min.js │ │ ├── jquery.ztree.core.js │ │ ├── jquery.ztree.excheck.js │ │ ├── moment.js │ │ ├── socket.io.js │ │ └── theme.js ├── html │ ├── 404.html │ ├── assets │ │ ├── css │ │ │ ├── admin.css │ │ │ ├── amazeui.datatables.min.css │ │ │ ├── amazeui.min.css │ │ │ ├── app.css │ │ │ ├── app.less │ │ │ ├── fullcalendar.min.css │ │ │ └── fullcalendar.print.css │ │ ├── fonts │ │ │ ├── FontAwesome.otf │ │ │ ├── fontawesome-webfont.eot │ │ │ ├── fontawesome-webfont.ttf │ │ │ ├── fontawesome-webfont.woff │ │ │ └── fontawesome-webfont.woff2 │ │ ├── i │ │ │ ├── app-icon72x72@2x.png │ │ │ ├── examples │ │ │ │ ├── admin-chrome.png │ │ │ │ ├── admin-firefox.png │ │ │ │ ├── admin-ie.png │ │ │ │ ├── admin-opera.png │ │ │ │ ├── admin-safari.png │ │ │ │ ├── adminPage.png │ │ │ │ ├── blogPage.png │ │ │ │ ├── landing.png │ │ │ │ ├── landingPage.png │ │ │ │ ├── loginPage.png │ │ │ │ └── sidebarPage.png │ │ │ ├── favicon.png │ │ │ └── startup-640x1096.png │ │ ├── img │ │ │ ├── a5.png │ │ │ ├── k.jpg │ │ │ ├── logo.png │ │ │ ├── logoa.png │ │ │ ├── logob.png │ │ │ ├── user01.png │ │ │ ├── user02.png │ │ │ ├── user03.png │ │ │ ├── user04.png │ │ │ ├── user05.png │ │ │ ├── user06.png │ │ │ └── user07.png │ │ └── js │ │ │ ├── amazeui.datatables.min.js │ │ │ ├── amazeui.min.js │ │ │ ├── app.js │ │ │ ├── dataTables.responsive.min.js │ │ │ ├── echarts.min.js │ │ │ ├── fullcalendar.min.js │ │ │ ├── jquery.min.js │ │ │ ├── moment.js │ │ │ └── theme.js │ ├── calendar.html │ ├── chart.html │ ├── form.html │ ├── index.html │ ├── login.html │ ├── sign-up.html │ ├── table-list-img.html │ ├── table-list.html │ ├── tables.html │ ├── 白色.psd │ └── 黑色.psd └── js │ ├── angular.min.js │ ├── angular.min.js.map │ ├── cjs.func.js │ └── controller.js ├── routes ├── admin.js ├── adminBean.js └── adminServer.js ├── settings.js ├── utils ├── WatchFile.js ├── pass.js └── test.js └── views ├── .DS_Store └── admin ├── .DS_Store ├── groupMge.ejs ├── homePage.ejs ├── index.ejs ├── login.ejs ├── loging.ejs ├── pagination.ejs ├── public └── model.ejs └── userMge.ejs /README.md: -------------------------------------------------------------------------------- 1 | #CJS项目简介 2 | ### 界面展示: 3 | 4 |  5 | 6 | ### 用户管理 7 | 8 |  9 | 10 | ### 权限管理 11 | 12 |  13 | 14 | ### 实时日志 15 | 16 |  17 | 18 | *** 19 | # 主要功能 20 | - 用户管理:可增删查改人员信息。 21 | - 用户组管理:进行人员权限的分配功能 22 | - 实时日志:登录系统后,进入该菜单后台就可以实时将后台新增的日志数据推送到前端来,再也不需要用tail -f 之类的命令了 23 | 24 | *** 25 | 26 | # 核心技术 27 | 28 | 目前应用的核心模块如下: 29 | - 核心框架:node.js + express 30 | - 安全框架:自己写的权限管理功能 31 | - 持久层框架:mongodb 32 | - 缓存框架:Redis(暂未完成) 33 | - 会话管理:express-session 34 | - 日志管理:Log4js 35 | - 前端框架:Angular JS + Bootstrap + Jquery 36 | 37 | *** 38 | 39 | # 启动说明 40 | - npm install 41 | - npm start 42 | - 配置文件在settings.js文件中,配置mongodb数据库的连接。 43 | - 项目第一次运行会自动给数据库插入一个管理员用户,用户名:admin,密码:password 44 | 45 | *** 46 | 47 | # 感谢 48 | - [doramart/DoraCMS](https://github.com/doramart/DoraCMS)--本框架是基于该系统进行开发的 49 | - [Amaze UI](http://tpl.amazeui.org/preview.html?21)--前端框架 50 | *** 51 | -------------------------------------------------------------------------------- /app.js: -------------------------------------------------------------------------------- 1 | var express = require('express'); 2 | var session = require('express-session'); 3 | var path = require('path'); 4 | var bodyParser = require('body-parser'); 5 | //模板引擎 6 | var partials = require('express-partials'); 7 | 8 | var adminServer = require('./routes/adminServer'); 9 | var admin = require('./routes/admin'); 10 | var log4js = require('log4js'); 11 | var log = log4js.getLogger("app"); 12 | var io = require('socket.io')(); 13 | var createLineReader = require('./utils/WatchFile'); 14 | /*实例化express对象*/ 15 | var app = express(); 16 | //session配置 17 | app.use(session({ 18 | secret: 'caibojian', 19 | resave: false, 20 | saveUninitialized: true 21 | })); 22 | 23 | app.use(log4js.connectLogger(log4js.getLogger("http"), { level: 'auto' })); 24 | app.use(bodyParser.json({limit: '50mb'})); // 限制上传5M 25 | app.use(bodyParser.urlencoded({ extended: false , limit: '50mb' })); 26 | app.set('views', path.join(__dirname, 'views')); 27 | app.set('view engine', 'ejs'); 28 | app.use(express.static(path.join(__dirname, 'public'))); 29 | app.use(partials()); 30 | 31 | app.use(function(req, res, next){ 32 | // 针对注册会员 33 | res.locals.logined = req.session.logined; 34 | res.locals.userInfo = req.session.user; 35 | // 针对管理员 36 | res.locals.adminlogined = req.session.adminlogined; 37 | res.locals.adminUserInfo = req.session.adminUserInfo; 38 | res.locals.adminNotices = req.session.adminNotices; 39 | // 指定站点域名 40 | res.locals.myDomain = req.headers.host; 41 | next(); 42 | }); 43 | //监听日志变化 44 | var read = new createLineReader(path.join(__dirname, 'log/app.log')); 45 | 46 | //事件监听 47 | app.io = io; 48 | 49 | io.on('connection', function(client){ 50 | 51 | read.on('line', function(line){ 52 | var arr = line.toString().split(" "); 53 | if(arr.length>4){ 54 | var returnlog = { 55 | time: arr[0]+" "+arr[1], 56 | level: arr[2], 57 | type: arr[3], 58 | msg: arr.slice(4) 59 | } 60 | client.emit('logChange', returnlog); 61 | } 62 | }); 63 | client.emit('connect', 'connection'); 64 | // 监听发送消息 65 | client.on('send.message', function(msg){ 66 | }); 67 | // 断开连接时,通知其它用户 68 | client.on('disconnect', function(){ 69 | }) 70 | 71 | }) 72 | 73 | /*指定路由控制*/ 74 | app.use('/admin', admin); 75 | app.use('/admin', adminServer); 76 | 77 | 78 | module.exports = app; -------------------------------------------------------------------------------- /bin/www: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | /** 4 | * Module dependencies. 5 | */ 6 | 7 | var app = require('../app'); 8 | var debug = require('debug')('cjs:server'); 9 | var http = require('http'); 10 | 11 | /** 12 | * Initialise log4js first, so we don't miss any log messages 13 | */ 14 | var log4js = require('log4js'); 15 | log4js.configure('./config/log4js.json'); 16 | 17 | var log = log4js.getLogger("startup"); 18 | /** 19 | * Get port from environment and store in Express. 20 | */ 21 | 22 | var port = normalizePort(process.env.PORT || '8888 '); 23 | app.set('port', port); 24 | 25 | /** 26 | * Create HTTP server. 27 | */ 28 | 29 | var server = http.createServer(app); 30 | 31 | /** 32 | * Listen on provided port, on all network interfaces. 33 | */ 34 | 35 | server.listen(port); 36 | server.on('error', onError); 37 | server.on('listening', onListening); 38 | 39 | /** 40 | * Normalize a port into a number, string, or false. 41 | */ 42 | 43 | function normalizePort(val) { 44 | var port = parseInt(val, 10); 45 | 46 | if (isNaN(port)) { 47 | // named pipe 48 | return val; 49 | } 50 | 51 | if (port >= 0) { 52 | // port number 53 | return port; 54 | } 55 | 56 | return false; 57 | } 58 | 59 | /** 60 | * Event listener for HTTP server "error" event. 61 | */ 62 | 63 | function onError(error) { 64 | if (error.syscall !== 'listen') { 65 | throw error; 66 | } 67 | 68 | var bind = typeof port === 'string' 69 | ? 'Pipe ' + port 70 | : 'Port ' + port; 71 | 72 | // handle specific listen errors with friendly messages 73 | switch (error.code) { 74 | case 'EACCES': 75 | console.error(bind + ' requires elevated privileges'); 76 | process.exit(1); 77 | break; 78 | case 'EADDRINUSE': 79 | console.error(bind + ' is already in use'); 80 | process.exit(1); 81 | break; 82 | default: 83 | throw error; 84 | } 85 | } 86 | 87 | /** 88 | * Event listener for HTTP server "listening" event. 89 | */ 90 | 91 | function onListening() { 92 | var addr = server.address(); 93 | var bind = typeof addr === 'string' 94 | ? 'pipe ' + addr 95 | : 'port ' + addr.port; 96 | debug('Listening on ' + bind); 97 | } 98 | 99 | //var io = app.io; 100 | //io.attach( server ); 101 | 102 | /** 103 | * make a log directory, just in case it isn't there. 104 | */ 105 | try { 106 | require('fs').mkdirSync('./log'); 107 | } catch (e) { 108 | if (e.code != 'EEXIST') { 109 | console.error("Could not set up log directory, error was: ", e); 110 | process.exit(1); 111 | } 112 | } 113 | var io = app.io; 114 | io.attach( server ); 115 | -------------------------------------------------------------------------------- /config/log4js.json: -------------------------------------------------------------------------------- 1 | { 2 | "appenders": [ 3 | { 4 | "type": "clustered", 5 | "appenders": [ 6 | { 7 | "type": "dateFile", 8 | "filename": "log/access.log", 9 | "pattern": "-yyyy-MM-dd", 10 | "category": "http" 11 | }, 12 | { 13 | "type": "file", 14 | "filename": "log/app.log", 15 | "maxLogSize": 10485760, 16 | "numBackups": 3 17 | }, 18 | { 19 | "type": "logLevelFilter", 20 | "level": "ERROR", 21 | "appender": { 22 | "type": "file", 23 | "filename": "log/errors.log" 24 | } 25 | } 26 | ] 27 | } 28 | ] 29 | } 30 | -------------------------------------------------------------------------------- /img/group.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/img/group.png -------------------------------------------------------------------------------- /img/home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/img/home.png -------------------------------------------------------------------------------- /img/log.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/img/log.png -------------------------------------------------------------------------------- /img/user.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/img/user.png -------------------------------------------------------------------------------- /log/app.log: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /log/errors.log: -------------------------------------------------------------------------------- 1 | [2017-01-10 16:47:20.813] [ERROR] http - ::1 - - "GET /admin/manage HTTP/1.1" 500 1642 "" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36" 2 | [2017-01-10 16:48:08.555] [ERROR] http - ::1 - - "GET /admin/manage/chart.html HTTP/1.1" 404 36 "http://localhost:8888/admin/manage/groupMge" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36" 3 | -------------------------------------------------------------------------------- /models/AdminGroup.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by cbj on 2016/1/9. 3 | * 员用户组对象 4 | */ 5 | 6 | var mongoose = require('mongoose'); 7 | var shortid = require('shortid'); 8 | var Schema = mongoose.Schema; 9 | 10 | //mongoose.connect("mongodb://localhost/doracms") 11 | 12 | var AdminGroupSchema = new Schema({ 13 | _id: { 14 | type: String, 15 | unique: true, 16 | 'default': shortid.generate 17 | }, 18 | name: String, 19 | power : String, 20 | date: { type: Date, default: Date.now }, 21 | comments : String 22 | }); 23 | 24 | 25 | var AdminGroup = mongoose.model("AdminGroup",AdminGroupSchema); 26 | 27 | module.exports = AdminGroup; 28 | -------------------------------------------------------------------------------- /models/AdminUser.js: -------------------------------------------------------------------------------- 1 | /** 2 | *后台管理元用户 3 | **/ 4 | var mongoose = require('mongoose'); 5 | 6 | var Schema = mongoose.Schema; 7 | //id生成器 8 | var shortid = require('shortid'); 9 | var AdminGroup = require('./AdminGroup'); 10 | 11 | var AdminUserSchema = new Schema({ 12 | _id: { 13 | type: String, 14 | unique: true, 15 | 'default': shortid.generate 16 | }, 17 | name: String, 18 | userName: String, 19 | password: String, 20 | email: String, 21 | phoneNum: Number, 22 | salt: String, 23 | comments: String, 24 | createtime: {type: Date, default: Date.now}, 25 | photo: {type: String, default: ""}, 26 | auth: {type: Boolean, default: false}, 27 | group: { 28 | type : String, 29 | ref : 'AdminGroup' 30 | } 31 | }); 32 | 33 | 34 | 35 | AdminUserSchema.statics = { 36 | getOneItem: function(res, targetId, callBack){ 37 | AdminUser.findOne({'_id': targetId}).populate('group').exec(function(err, user){ 38 | if(err){ 39 | res.end(err); 40 | } 41 | callBack(user); 42 | }) 43 | } 44 | }; 45 | 46 | var AdminUser = mongoose.model("AdminUser", AdminUserSchema); 47 | 48 | module.exports = AdminUser; -------------------------------------------------------------------------------- /models/DBOpt.js: -------------------------------------------------------------------------------- 1 | /** 2 | *Created by cbj on 2017/1/4. 3 | *mongodb数据库操作 4 | **/ 5 | var url = require('url'); 6 | var mongoose = require('mongoose'); 7 | mongoose.Promise = require('bluebird'); 8 | var settings = require('../settings'); 9 | //后台管理用户 10 | var AdminUser = require('../models/AdminUser'); 11 | var AdminGroup = require('../models/AdminGroup'); 12 | //短id 13 | var shortid = require('shortid'); 14 | //密码加密 15 | var pass = require('../utils/pass'); 16 | 17 | mongoose.connect(settings.URL); 18 | var db = mongoose.connection; 19 | //mongoose.connect('mongodb://'+settings.USERNAME+':'+settings.PASSWORD+'@'+settings.HOST+':'+settings.PORT+'/'+settings.DB+''); 20 | db.on('error', console.error.bind(console, 'connection error:')); 21 | db.once('open', function (callback) { 22 | console.log("连接mongodb"); 23 | //初始化管理员用户信息 24 | //验证用户名密码 25 | AdminUser.findOne({'userName': 'admin'}).exec(function(err, user){ 26 | if(err){ 27 | console.log("初始化管理员用户信息失败"); 28 | } 29 | if(user){ 30 | console.log("管理员用户已存在"); 31 | }else{ 32 | var groupID = shortid.generate(); 33 | var adminGroup = new AdminGroup(); 34 | adminGroup.name = '管理员'; 35 | adminGroup._id = groupID; 36 | adminGroup.power = settings.system_Power; 37 | adminGroup.save(function(eer){ 38 | if(err){ 39 | console.log("初始化管理员用户组信息失败"); 40 | }else{ 41 | console.log("初始化管理员用户组信息成功"); 42 | console.log("管理员用户不存在"); 43 | var adminuser = new AdminUser(); 44 | adminuser.userName = 'admin'; 45 | adminuser.group = groupID; 46 | adminuser.name = '超级管理员' 47 | pass.hash('password',function(err, salt, hash){ 48 | adminuser.password = hash; 49 | adminuser.salt = salt; 50 | adminuser.save(function(err){ 51 | if(err){ 52 | console.log("初始化管理员用户信息失败"); 53 | }else{ 54 | console.log("初始化管理员用户信息成功"); 55 | } 56 | }); 57 | }); 58 | } 59 | }); 60 | 61 | } 62 | }); 63 | }); 64 | //数据库操作 65 | var DBOpt = { 66 | addOne : function(obj,req,res){ 67 | var newObj = new obj(req.body); 68 | newObj.save(function(err){ 69 | if(err){ 70 | res.end(err); 71 | }else{ 72 | res.end("success"); 73 | } 74 | }); 75 | }, 76 | pagination : function(obj,req,res,conditions){ 77 | var params = url.parse(req.url,true); 78 | var startNum = (params.query.currentPage - 1)*params.query.limit + 1; 79 | var currentPage = Number(params.query.currentPage); 80 | var limit = Number(params.query.limit); 81 | var pageInfo; 82 | 83 | // 根据条件查询记录(如果有条件传递,则按条件查询) 84 | var query; 85 | if(conditions && conditions.length > 1){ 86 | query=obj.find().or(conditions); 87 | } 88 | else if(conditions){ 89 | query=obj.find(conditions); 90 | } 91 | else{ 92 | query=obj.find({}); 93 | } 94 | query.sort({'date': -1}); 95 | 96 | // if(obj === Message){ 97 | // query.populate('author').populate('replyAuthor').populate('adminAuthor'); 98 | // }else if(obj === AdminUser){ 99 | // //query.populate('group'); 100 | // }else if(obj === UserNotify){ 101 | // query.populate('user').populate('notify'); 102 | // } 103 | 104 | if(obj === AdminUser){ 105 | query.populate('group'); 106 | } 107 | query.exec(function(err,docs){ 108 | if(err){ 109 | console.log(err) 110 | 111 | }else { 112 | pageInfo = { 113 | "totalItems" : docs.length, 114 | "currentPage" : currentPage, 115 | "limit" : limit, 116 | "startNum" : Number(startNum) 117 | }; 118 | 119 | return res.json({ 120 | docs : docs.slice(startNum - 1,startNum + limit -1), 121 | pageInfo : pageInfo 122 | }); 123 | } 124 | }) 125 | }, 126 | del : function(obj,req,res,logMsg){ 127 | var params = url.parse(req.url,true); 128 | var targetId = params.query.uid; 129 | if(shortid.isValid(targetId)){ 130 | obj.remove({_id : params.query.uid},function(err,result){ 131 | if(err){ 132 | res.end(err); 133 | }else{ 134 | console.log(logMsg+" success!"); 135 | res.end("success"); 136 | } 137 | }) 138 | }else{ 139 | res.end(settings.system_illegal_param); 140 | } 141 | }, 142 | updateOneByID : function(obj,req,res,logMsg){ 143 | var params = url.parse(req.url,true); 144 | var targetId = params.query.uid; 145 | 146 | if(shortid.isValid(targetId)){ 147 | var conditions = {_id : targetId}; 148 | req.body.updateDate = new Date(); 149 | var update = {$set : req.body}; 150 | obj.update(conditions, update, function (err,result) { 151 | if(err){ 152 | res.end(err); 153 | }else{ 154 | console.log(logMsg+" success!"); 155 | res.end("success"); 156 | } 157 | }) 158 | }else{ 159 | res.end(settings.system_illegal_param); 160 | } 161 | }, 162 | findOne : function(obj,req,res,logMsg){ //根据ID查找单条记录 163 | var params = url.parse(req.url,true); 164 | var targetId = params.query.uid; 165 | if(shortid.isValid(targetId)){ 166 | obj.findOne({_id : targetId}, function (err,result) { 167 | if(err){ 168 | res.next(err); 169 | }else{ 170 | console.log(logMsg+" success!"); 171 | return res.json(result); 172 | } 173 | }) 174 | }else{ 175 | res.end(settings.system_illegal_param); 176 | } 177 | 178 | }, 179 | findAll : function(obj,req,res,logMsg){//查找指定对象所有记录 180 | obj.find({}, function (err,result) { 181 | if(err){ 182 | res.next(err); 183 | }else{ 184 | console.log(logMsg+" success!"); 185 | return res.json(result); 186 | } 187 | }) 188 | }, 189 | }; 190 | 191 | module.exports = DBOpt; -------------------------------------------------------------------------------- /models/SystemLog.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by cbj on 2017/1/10. 3 | * 系统操作日志 4 | */ 5 | var mongoose = require('mongoose'); 6 | var shortid = require('shortid'); 7 | var Schema = mongoose.Schema; 8 | 9 | var SystemLogSchema = new Schema({ 10 | _id: { 11 | type: String, 12 | unique: true, 13 | 'default': shortid.generate 14 | }, 15 | type: String, 16 | date: {type: Date, default: Date.now}, 17 | logs: String 18 | }); 19 | 20 | SystemLogSchema.statics = { 21 | //添加用户登录日志 22 | addLoginLogs : function(req, res, tragetIp){ 23 | var loginLog = new SystemLog(); 24 | loginLog.type = 'login'; 25 | loginLog.logs = "{'userName':"+req.session.adminUserInfo.userName+",'ip':"+tragetIp+"}"; 26 | loginLog.save(function(err){ 27 | if(err){ 28 | res.end(err); 29 | } 30 | }); 31 | } 32 | } 33 | 34 | var SystemLog = mongoose.model('SystemLog', SystemLogSchema); 35 | module.exports = SystemLog; -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "cjs", 3 | "version": "2.0.0", 4 | "description": "node.js ", 5 | "main": "index.js", 6 | "scripts": { 7 | "start": "node ./bin/www" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "https://git.oschina.net/caibojian/cjs.git" 12 | }, 13 | "keywords": [ 14 | "cjs" 15 | ], 16 | "author": "caibojian", 17 | "license": "ISC", 18 | "dependencies": { 19 | "body-parser": "~1.12.0", 20 | "connect-redis": "^2.5.0", 21 | "cookie-parser": "~1.3.4", 22 | "debug": "~2.1.1", 23 | "ejs": "~2.3.1", 24 | "express": "~4.12.2", 25 | "express-partials": "*", 26 | "express-promise": "^0.4.0", 27 | "express-session": "^1.11.3", 28 | "formidable": "^1.0.17", 29 | "gm": "^1.18.1", 30 | "iconv-lite": "^0.4.13", 31 | "lodash": "^3.10.1", 32 | "moment": "^2.10.3", 33 | "mongoose": "^4.0.1", 34 | "morgan": "~1.5.1", 35 | "nodemailer": "^1.3.4", 36 | "png-word": "0.0.7", 37 | "qr-image": "^3.1.0", 38 | "redis": "^0.12.1", 39 | "request": "^2.67.0", 40 | "serve-favicon": "~2.2.0", 41 | "shortid": "^2.2.2", 42 | "log4js":"^1.1.0", 43 | "socket.io": "^1.7.2", 44 | "validator": "^3.37.0" 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /public/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/.DS_Store -------------------------------------------------------------------------------- /public/assets/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/assets/.DS_Store -------------------------------------------------------------------------------- /public/assets/css/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/assets/css/.DS_Store -------------------------------------------------------------------------------- /public/assets/css/admin.css: -------------------------------------------------------------------------------- 1 | /** 2 | * admin.css 3 | */ 4 | 5 | 6 | /* 7 | fixed-layout 固定头部和边栏布局 8 | */ 9 | 10 | html, 11 | body { 12 | height: 100%; 13 | overflow: hidden; 14 | } 15 | 16 | ul { 17 | margin-top: 0; 18 | } 19 | 20 | .admin-icon-yellow { 21 | color: #ffbe40; 22 | } 23 | 24 | .admin-header { 25 | position: fixed; 26 | top: 0; 27 | left: 0; 28 | right: 0; 29 | z-index: 1500; 30 | font-size: 1.4rem; 31 | margin-bottom: 0; 32 | } 33 | 34 | .admin-header-list a:hover :after { 35 | content: none; 36 | } 37 | 38 | .admin-main { 39 | position: relative; 40 | height: 100%; 41 | padding-top: 51px; 42 | background: #f3f3f3; 43 | } 44 | 45 | .admin-menu { 46 | position: fixed; 47 | z-index: 10; 48 | bottom: 30px; 49 | right: 20px; 50 | } 51 | 52 | .admin-sidebar { 53 | width: 260px; 54 | min-height: 100%; 55 | float: left; 56 | border-right: 1px solid #cecece; 57 | } 58 | 59 | .admin-sidebar.am-active { 60 | z-index: 1600; 61 | } 62 | 63 | .admin-sidebar-list { 64 | margin-bottom: 0; 65 | } 66 | 67 | .admin-sidebar-list li a { 68 | color: #5c5c5c; 69 | padding-left: 24px; 70 | } 71 | 72 | .admin-sidebar-list li:first-child { 73 | border-top: none; 74 | } 75 | 76 | .admin-sidebar-sub { 77 | margin-top: 0; 78 | margin-bottom: 0; 79 | box-shadow: 0 16px 8px -15px #e2e2e2 inset; 80 | background: #ececec; 81 | padding-left: 24px; 82 | } 83 | 84 | .admin-sidebar-sub li:first-child { 85 | border-top: 1px solid #dedede; 86 | } 87 | 88 | .admin-sidebar-panel { 89 | margin: 10px; 90 | } 91 | 92 | .admin-content { 93 | display: -webkit-box; 94 | display: -webkit-flex; 95 | display: -ms-flexbox; 96 | display: flex; 97 | -webkit-box-orient: vertical; 98 | -webkit-box-direction: normal; 99 | -webkit-flex-direction: column; 100 | -ms-flex-direction: column; 101 | flex-direction: column; 102 | background: #fff; 103 | } 104 | 105 | .admin-content, 106 | .admin-sidebar { 107 | height: 100%; 108 | overflow-x: hidden; 109 | overflow-y: scroll; 110 | -webkit-overflow-scrolling: touch; 111 | } 112 | 113 | .admin-content-body { 114 | -webkit-box-flex: 1; 115 | -webkit-flex: 1 0 auto; 116 | -ms-flex: 1 0 auto; 117 | flex: 1 0 auto; 118 | } 119 | 120 | .admin-content-footer { 121 | font-size: 85%; 122 | color: #777; 123 | } 124 | 125 | .admin-content-list { 126 | border: 1px solid #e9ecf1; 127 | margin-top: 0; 128 | } 129 | 130 | .admin-content-list li { 131 | border: 1px solid #e9ecf1; 132 | border-width: 0 1px; 133 | margin-left: -1px; 134 | } 135 | 136 | .admin-content-list li:first-child { 137 | border-left: none; 138 | } 139 | 140 | .admin-content-list li:last-child { 141 | border-right: none; 142 | } 143 | 144 | .admin-content-table a { 145 | color: #535353; 146 | } 147 | .admin-content-file { 148 | margin-bottom: 0; 149 | color: #666; 150 | } 151 | 152 | .admin-content-file p { 153 | margin: 0 0 5px 0; 154 | font-size: 1.4rem; 155 | } 156 | 157 | .admin-content-file li { 158 | padding: 10px 0; 159 | } 160 | 161 | .admin-content-file li:first-child { 162 | border-top: none; 163 | } 164 | 165 | .admin-content-file li:last-child { 166 | border-bottom: none; 167 | } 168 | 169 | .admin-content-file li .am-progress { 170 | margin-bottom: 4px; 171 | } 172 | 173 | .admin-content-file li .am-progress-bar { 174 | line-height: 14px; 175 | } 176 | 177 | .admin-content-task { 178 | margin-bottom: 0; 179 | } 180 | 181 | .admin-content-task li { 182 | padding: 5px 0; 183 | border-color: #eee; 184 | } 185 | 186 | .admin-content-task li:first-child { 187 | border-top: none; 188 | } 189 | 190 | .admin-content-task li:last-child { 191 | border-bottom: none; 192 | } 193 | 194 | .admin-task-meta { 195 | font-size: 1.2rem; 196 | color: #999; 197 | } 198 | 199 | .admin-task-bd { 200 | font-size: 1.4rem; 201 | margin-bottom: 5px; 202 | } 203 | 204 | .admin-content-comment { 205 | margin-bottom: 0; 206 | } 207 | 208 | .admin-content-comment .am-comment-bd { 209 | font-size: 1.4rem; 210 | } 211 | 212 | .admin-content-pagination { 213 | margin-bottom: 0; 214 | } 215 | .admin-content-pagination li a { 216 | padding: 4px 8px; 217 | } 218 | 219 | @media only screen and (min-width: 641px) { 220 | .admin-sidebar { 221 | display: block; 222 | position: static; 223 | background: none; 224 | } 225 | 226 | .admin-offcanvas-bar { 227 | position: static; 228 | width: auto; 229 | background: none; 230 | -webkit-transform: translate3d(0, 0, 0); 231 | -ms-transform: translate3d(0, 0, 0); 232 | transform: translate3d(0, 0, 0); 233 | overflow-y: visible; 234 | min-height: 100%; 235 | } 236 | .admin-offcanvas-bar:after { 237 | content: none; 238 | } 239 | } 240 | 241 | @media only screen and (max-width: 640px) { 242 | .admin-sidebar { 243 | width: inherit; 244 | } 245 | 246 | .admin-offcanvas-bar { 247 | background: #f3f3f3; 248 | } 249 | 250 | .admin-offcanvas-bar:after { 251 | background: #BABABA; 252 | } 253 | 254 | .admin-sidebar-list a:hover, .admin-sidebar-list a:active{ 255 | -webkit-transition: background-color .3s ease; 256 | -moz-transition: background-color .3s ease; 257 | -ms-transition: background-color .3s ease; 258 | -o-transition: background-color .3s ease; 259 | transition: background-color .3s ease; 260 | background: #E4E4E4; 261 | } 262 | 263 | .admin-content-list li { 264 | padding: 10px; 265 | border-width: 1px 0; 266 | margin-top: -1px; 267 | } 268 | 269 | .admin-content-list li:first-child { 270 | border-top: none; 271 | } 272 | 273 | .admin-content-list li:last-child { 274 | border-bottom: none; 275 | } 276 | 277 | .admin-form-text { 278 | text-align: left !important; 279 | } 280 | 281 | } 282 | 283 | /* 284 | * user.html css 285 | */ 286 | .user-info { 287 | margin-bottom: 15px; 288 | } 289 | 290 | .user-info .am-progress { 291 | margin-bottom: 4px; 292 | } 293 | 294 | .user-info p { 295 | margin: 5px; 296 | } 297 | 298 | .user-info-order { 299 | font-size: 1.4rem; 300 | } 301 | 302 | /* 303 | * errorLog.html css 304 | */ 305 | 306 | .error-log .am-pre-scrollable { 307 | max-height: 40rem; 308 | } 309 | 310 | /* 311 | * table.html css 312 | */ 313 | 314 | .table-main { 315 | font-size: 1.4rem; 316 | padding: .5rem; 317 | } 318 | 319 | .table-main button { 320 | background: #fff; 321 | } 322 | 323 | .table-check { 324 | width: 30px; 325 | } 326 | 327 | .table-id { 328 | width: 50px; 329 | } 330 | 331 | @media only screen and (max-width: 640px) { 332 | .table-select { 333 | margin-top: 10px; 334 | margin-left: 5px; 335 | } 336 | } 337 | 338 | /* 339 | gallery.html css 340 | */ 341 | 342 | .gallery-list li { 343 | padding: 10px; 344 | } 345 | 346 | .gallery-list a { 347 | color: #666; 348 | } 349 | 350 | .gallery-list a:hover { 351 | color: #3bb4f2; 352 | } 353 | 354 | .gallery-title { 355 | margin-top: 6px; 356 | font-size: 1.4rem; 357 | } 358 | 359 | .gallery-desc { 360 | font-size: 1.2rem; 361 | margin-top: 4px; 362 | } 363 | 364 | /* 365 | 404.html css 366 | */ 367 | 368 | .page-404 { 369 | background: #fff; 370 | border: none; 371 | width: 200px; 372 | margin: 0 auto; 373 | } 374 | -------------------------------------------------------------------------------- /public/assets/css/amazeui.datatables.min.css: -------------------------------------------------------------------------------- 1 | .am-datatable-hd{margin-bottom:10px}.am-datatable-hd label{font-weight:400}.am-datatable-filter{text-align:right}.am-datatable-filter input{margin-left:.5em}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_asc_disabled,table.dataTable thead .sorting_desc,table.dataTable thead .sorting_desc_disabled{cursor:pointer;position:relative}table.dataTable thead .sorting:after{position:absolute;top:50%;margin-top:-12px;right:8px;display:block;font-weight:400}table.dataTable thead .sorting_asc:after,table.dataTable thead .sorting_desc:after{position:absolute;top:50%;margin-top:-12px;right:8px;display:block;opacity:.5;font-weight:400}table.dataTable thead .sorting:after{opacity:.2;content:"\f0dc"}table.dataTable thead .sorting_asc:after{content:"\f15d"}table.dataTable thead .sorting_desc:after{content:"\f15e"}div.DTFC_LeftBodyWrapper table.dataTable thead .sorting:after,div.DTFC_LeftBodyWrapper table.dataTable thead .sorting_asc:after,div.DTFC_LeftBodyWrapper table.dataTable thead .sorting_desc:after,div.DTFC_RightBodyWrapper table.dataTable thead .sorting:after,div.DTFC_RightBodyWrapper table.dataTable thead .sorting_asc:after,div.DTFC_RightBodyWrapper table.dataTable thead .sorting_desc:after,div.dataTables_scrollBody table.dataTable thead .sorting:after,div.dataTables_scrollBody table.dataTable thead .sorting_asc:after,div.dataTables_scrollBody table.dataTable thead .sorting_desc:after{display:none}table.dataTable thead .sorting_asc_disabled:after,table.dataTable thead .sorting_desc_disabled:after{color:#eee}table.dataTable thead>tr>th{padding-right:30px}table.dataTable th:active{outline:none}table.dataTable.table-condensed thead>tr>th{padding-right:20px}table.dataTable.table-condensed thead .sorting:after,table.dataTable.table-condensed thead .sorting_asc:after,table.dataTable.table-condensed thead .sorting_desc:after{top:6px;right:6px}div.dataTables_scrollHead table{margin-bottom:0!important;border-bottom-left-radius:0;border-bottom-right-radius:0}div.DTFC_LeftHeadWrapper table thead tr:last-child td:first-child,div.DTFC_LeftHeadWrapper table thead tr:last-child th:first-child,div.DTFC_RightHeadWrapper table thead tr:last-child td:first-child,div.DTFC_RightHeadWrapper table thead tr:last-child th:first-child,div.dataTables_scrollHead table thead tr:last-child td:first-child,div.dataTables_scrollHead table thead tr:last-child th:first-child{border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}div.dataTables_scrollBody table{border-top:none;margin-top:0!important;margin-bottom:0!important}div.DTFC_LeftBodyWrapper tbody tr:first-child td,div.DTFC_LeftBodyWrapper tbody tr:first-child th,div.DTFC_RightBodyWrapper tbody tr:first-child td,div.DTFC_RightBodyWrapper tbody tr:first-child th,div.dataTables_scrollBody tbody tr:first-child td,div.dataTables_scrollBody tbody tr:first-child th{border-top:none}div.dataTables_scrollFoot table{margin-top:0!important;border-top:none}table.table-bordered.dataTable{border-collapse:separate!important}table.table-bordered thead td,table.table-bordered thead th{border-left-width:0;border-top-width:0}table.table-bordered tbody td,table.table-bordered tbody th,table.table-bordered tfoot td,table.table-bordered tfoot th{border-left-width:0;border-bottom-width:0}table.table-bordered td:last-child,table.table-bordered th:last-child{border-right-width:0}div.dataTables_scrollHead table.table-bordered{border-bottom-width:0}.table.dataTable tbody tr.active td,.table.dataTable tbody tr.active th{background-color:#08c;color:#fff}.table.dataTable tbody tr.active:hover td,.table.dataTable tbody tr.active:hover th{background-color:#0075b0!important}.table.dataTable tbody tr.active td>a,.table.dataTable tbody tr.active th>a{color:#fff}.table-striped.dataTable tbody tr.active:nth-child(odd) td,.table-striped.dataTable tbody tr.active:nth-child(odd) th{background-color:#017ebc}table.DTTT_selectable tbody tr{cursor:pointer}div.DTTT .btn:hover{text-decoration:none!important}ul.DTTT_dropdown.dropdown-menu{z-index:2003}ul.DTTT_dropdown.dropdown-menu a{color:#333!important}ul.DTTT_dropdown.dropdown-menu li{position:relative}ul.DTTT_dropdown.dropdown-menu li:hover a{background-color:#08c;color:#fff!important}div.DTTT_collection_background{z-index:2002}div.DTTT_print_info,div.dataTables_processing{top:50%;left:50%;text-align:center;background-color:#fff}div.DTTT_print_info{color:#333;padding:10px 30px;opacity:.95;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0,0,0,.5);box-shadow:0 3px 7px rgba(0,0,0,.5);position:fixed;width:400px;height:150px;margin-left:-200px;margin-top:-75px}div.DTTT_print_info h6{font-weight:400;font-size:28px;line-height:28px;margin:1em}div.DTTT_print_info p{font-size:14px;line-height:20px}div.dataTables_processing{position:absolute;width:100%;height:60px;margin-left:-50%;margin-top:-25px;padding-top:20px;padding-bottom:20px;font-size:1.2em;background:-webkit-gradient(linear,left top,right top,color-stop(0%,rgba(255,255,255,0)),color-stop(25%,rgba(255,255,255,.9)),color-stop(75%,rgba(255,255,255,.9)),color-stop(100%,rgba(255,255,255,0)));background:-webkit-linear-gradient(left,rgba(255,255,255,0) 0%,rgba(255,255,255,.9) 25%,rgba(255,255,255,.9) 75%,rgba(255,255,255,0) 100%);background:-webkit-gradient(linear,left top,right top,from(rgba(255,255,255,0)),color-stop(25%,rgba(255,255,255,.9)),color-stop(75%,rgba(255,255,255,.9)),to(rgba(255,255,255,0)));background:linear-gradient(to right,rgba(255,255,255,0) 0%,rgba(255,255,255,.9) 25%,rgba(255,255,255,.9) 75%,rgba(255,255,255,0) 100%)}div.DTFC_LeftHeadWrapper table{background-color:#fff}div.DTFC_LeftFootWrapper table{background-color:#fff;margin-bottom:0}div.DTFC_RightHeadWrapper table{background-color:#fff}div.DTFC_RightFootWrapper table,table.DTFC_Cloned tr.even{background-color:#fff;margin-bottom:0}div.DTFC_LeftHeadWrapper table,div.DTFC_RightHeadWrapper table{border-bottom:none!important;margin-bottom:0!important;border-top-right-radius:0!important;border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}div.DTFC_LeftBodyWrapper table,div.DTFC_RightBodyWrapper table{border-top:none;margin:0!important}div.DTFC_LeftFootWrapper table,div.DTFC_RightFootWrapper table{border-top:none;margin-top:0!important}div.FixedHeader_Cloned table{margin:0!important}.am-datatable-pager{margin-top:0;margin-bottom:0}.am-datatable-info{padding-top:6px;color:#555;font-size:1.4rem}table.dataTable.dtr-inline.collapsed>tbody>tr>td:first-child,table.dataTable.dtr-inline.collapsed>tbody>tr>th:first-child{position:relative;padding-left:30px;cursor:pointer}table.dataTable.dtr-inline.collapsed>tbody>tr>td:first-child:before,table.dataTable.dtr-inline.collapsed>tbody>tr>th:first-child:before{top:8px;left:4px;height:16px;width:16px;display:block;position:absolute;color:#fff;border:2px solid #fff;border-radius:16px;text-align:center;line-height:14px;-webkit-box-shadow:0 0 3px #444;box-shadow:0 0 3px #444;-webkit-box-sizing:content-box;box-sizing:content-box;content:'+';background-color:#31b131}table.dataTable.dtr-inline.collapsed>tbody>tr>td:first-child.dataTables_empty:before,table.dataTable.dtr-inline.collapsed>tbody>tr>th:first-child.dataTables_empty:before{display:none}table.dataTable.dtr-inline.collapsed>tbody>tr.parent>td:first-child:before,table.dataTable.dtr-inline.collapsed>tbody>tr.parent>th:first-child:before{content:'-';background-color:#d33333}table.dataTable.dtr-inline.collapsed>tbody>tr.child td:before{display:none}table.dataTable.dtr-inline.collapsed.compact>tbody>tr>td:first-child,table.dataTable.dtr-inline.collapsed.compact>tbody>tr>th:first-child{padding-left:27px}table.dataTable.dtr-inline.collapsed.compact>tbody>tr>td:first-child:before,table.dataTable.dtr-inline.collapsed.compact>tbody>tr>th:first-child:before{top:5px;left:4px;height:14px;width:14px;border-radius:14px;line-height:12px}table.dataTable.dtr-column>tbody>tr>td.control,table.dataTable.dtr-column>tbody>tr>th.control{position:relative;cursor:pointer}table.dataTable.dtr-column>tbody>tr>td.control:before,table.dataTable.dtr-column>tbody>tr>th.control:before{top:50%;left:50%;height:16px;width:16px;margin-top:-10px;margin-left:-10px;display:block;position:absolute;color:#fff;border:2px solid #fff;border-radius:16px;text-align:center;line-height:14px;-webkit-box-shadow:0 0 3px #666;box-shadow:0 0 3px #666;-webkit-box-sizing:content-box;box-sizing:content-box;content:'+';background-color:#5eb95e}table.dataTable.dtr-column>tbody>tr.parent td.control:before,table.dataTable.dtr-column>tbody>tr.parent th.control:before{content:'-';background-color:#dd514c}table.dataTable>tbody>tr.child{padding:.5em 1em}table.dataTable>tbody>tr.child:hover{background:0 0!important}table.dataTable>tbody>tr.child ul{display:inline-block;list-style-type:none;margin:0;padding:0}table.dataTable>tbody>tr.child ul li{border-bottom:1px solid #efefef;padding:.5em 0}table.dataTable>tbody>tr.child ul li:first-child{padding-top:0}table.dataTable>tbody>tr.child ul li:last-child{border-bottom:none}table.dataTable>tbody>tr.child span.dtr-title{display:inline-block;min-width:75px;font-weight:700} -------------------------------------------------------------------------------- /public/assets/css/fullcalendar.print.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * FullCalendar v0.0.0 Print Stylesheet 3 | * Docs & License: http://fullcalendar.io/ 4 | * (c) 2016 Adam Shaw 5 | */ 6 | 7 | /* 8 | * Include this stylesheet on your page to get a more printer-friendly calendar. 9 | * When including this stylesheet, use the media='print' attribute of the tag. 10 | * Make sure to include this stylesheet IN ADDITION to the regular fullcalendar.css. 11 | */ 12 | 13 | .fc { 14 | max-width: 100% !important; 15 | } 16 | 17 | 18 | /* Global Event Restyling 19 | --------------------------------------------------------------------------------------------------*/ 20 | 21 | .fc-event { 22 | background: #fff !important; 23 | color: #000 !important; 24 | page-break-inside: avoid; 25 | } 26 | 27 | .fc-event .fc-resizer { 28 | display: none; 29 | } 30 | 31 | 32 | /* Table & Day-Row Restyling 33 | --------------------------------------------------------------------------------------------------*/ 34 | 35 | .fc th, 36 | .fc td, 37 | .fc hr, 38 | .fc thead, 39 | .fc tbody, 40 | .fc-row { 41 | border-color: #ccc !important; 42 | background: #fff !important; 43 | } 44 | 45 | /* kill the overlaid, absolutely-positioned components */ 46 | /* common... */ 47 | .fc-bg, 48 | .fc-bgevent-skeleton, 49 | .fc-highlight-skeleton, 50 | .fc-helper-skeleton, 51 | /* for timegrid. within cells within table skeletons... */ 52 | .fc-bgevent-container, 53 | .fc-business-container, 54 | .fc-highlight-container, 55 | .fc-helper-container { 56 | display: none; 57 | } 58 | 59 | /* don't force a min-height on rows (for DayGrid) */ 60 | .fc tbody .fc-row { 61 | height: auto !important; /* undo height that JS set in distributeHeight */ 62 | min-height: 0 !important; /* undo the min-height from each view's specific stylesheet */ 63 | } 64 | 65 | .fc tbody .fc-row .fc-content-skeleton { 66 | position: static; /* undo .fc-rigid */ 67 | padding-bottom: 0 !important; /* use a more border-friendly method for this... */ 68 | } 69 | 70 | .fc tbody .fc-row .fc-content-skeleton tbody tr:last-child td { /* only works in newer browsers */ 71 | padding-bottom: 1em; /* ...gives space within the skeleton. also ensures min height in a way */ 72 | } 73 | 74 | .fc tbody .fc-row .fc-content-skeleton table { 75 | /* provides a min-height for the row, but only effective for IE, which exaggerates this value, 76 | making it look more like 3em. for other browers, it will already be this tall */ 77 | height: 1em; 78 | } 79 | 80 | 81 | /* Undo month-view event limiting. Display all events and hide the "more" links 82 | --------------------------------------------------------------------------------------------------*/ 83 | 84 | .fc-more-cell, 85 | .fc-more { 86 | display: none !important; 87 | } 88 | 89 | .fc tr.fc-limited { 90 | display: table-row !important; 91 | } 92 | 93 | .fc td.fc-limited { 94 | display: table-cell !important; 95 | } 96 | 97 | .fc-popover { 98 | display: none; /* never display the "more.." popover in print mode */ 99 | } 100 | 101 | 102 | /* TimeGrid Restyling 103 | --------------------------------------------------------------------------------------------------*/ 104 | 105 | /* undo the min-height 100% trick used to fill the container's height */ 106 | .fc-time-grid { 107 | min-height: 0 !important; 108 | } 109 | 110 | /* don't display the side axis at all ("all-day" and time cells) */ 111 | .fc-agenda-view .fc-axis { 112 | display: none; 113 | } 114 | 115 | /* don't display the horizontal lines */ 116 | .fc-slats, 117 | .fc-time-grid hr { /* this hr is used when height is underused and needs to be filled */ 118 | display: none !important; /* important overrides inline declaration */ 119 | } 120 | 121 | /* let the container that holds the events be naturally positioned and create real height */ 122 | .fc-time-grid .fc-content-skeleton { 123 | position: static; 124 | } 125 | 126 | /* in case there are no events, we still want some height */ 127 | .fc-time-grid .fc-content-skeleton table { 128 | height: 4em; 129 | } 130 | 131 | /* kill the horizontal spacing made by the event container. event margins will be done below */ 132 | .fc-time-grid .fc-event-container { 133 | margin: 0 !important; 134 | } 135 | 136 | 137 | /* TimeGrid *Event* Restyling 138 | --------------------------------------------------------------------------------------------------*/ 139 | 140 | /* naturally position events, vertically stacking them */ 141 | .fc-time-grid .fc-event { 142 | position: static !important; 143 | margin: 3px 2px !important; 144 | } 145 | 146 | /* for events that continue to a future day, give the bottom border back */ 147 | .fc-time-grid .fc-event.fc-not-end { 148 | border-bottom-width: 1px !important; 149 | } 150 | 151 | /* indicate the event continues via "..." text */ 152 | .fc-time-grid .fc-event.fc-not-end:after { 153 | content: "..."; 154 | } 155 | 156 | /* for events that are continuations from previous days, give the top border back */ 157 | .fc-time-grid .fc-event.fc-not-start { 158 | border-top-width: 1px !important; 159 | } 160 | 161 | /* indicate the event is a continuation via "..." text */ 162 | .fc-time-grid .fc-event.fc-not-start:before { 163 | content: "..."; 164 | } 165 | 166 | /* time */ 167 | 168 | /* undo a previous declaration and let the time text span to a second line */ 169 | .fc-time-grid .fc-event .fc-time { 170 | white-space: normal !important; 171 | } 172 | 173 | /* hide the the time that is normally displayed... */ 174 | .fc-time-grid .fc-event .fc-time span { 175 | display: none; 176 | } 177 | 178 | /* ...replace it with a more verbose version (includes AM/PM) stored in an html attribute */ 179 | .fc-time-grid .fc-event .fc-time:after { 180 | content: attr(data-full); 181 | } 182 | 183 | 184 | /* Vertical Scroller & Containers 185 | --------------------------------------------------------------------------------------------------*/ 186 | 187 | /* kill the scrollbars and allow natural height */ 188 | .fc-scroller, 189 | .fc-day-grid-container, /* these divs might be assigned height, which we need to cleared */ 190 | .fc-time-grid-container { /* */ 191 | overflow: visible !important; 192 | height: auto !important; 193 | } 194 | 195 | /* kill the horizontal border/padding used to compensate for scrollbars */ 196 | .fc-row { 197 | border: 0 !important; 198 | margin: 0 !important; 199 | } 200 | 201 | 202 | /* Button Controls 203 | --------------------------------------------------------------------------------------------------*/ 204 | 205 | .fc-button-group, 206 | .fc button { 207 | display: none; /* don't display any button-related controls */ 208 | } 209 | -------------------------------------------------------------------------------- /public/assets/css/img/diy/1_close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/assets/css/img/diy/1_close.png -------------------------------------------------------------------------------- /public/assets/css/img/diy/1_open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/assets/css/img/diy/1_open.png -------------------------------------------------------------------------------- /public/assets/css/img/diy/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/assets/css/img/diy/2.png -------------------------------------------------------------------------------- /public/assets/css/img/diy/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/assets/css/img/diy/3.png -------------------------------------------------------------------------------- /public/assets/css/img/diy/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/assets/css/img/diy/4.png -------------------------------------------------------------------------------- /public/assets/css/img/diy/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/assets/css/img/diy/5.png -------------------------------------------------------------------------------- /public/assets/css/img/diy/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/assets/css/img/diy/6.png -------------------------------------------------------------------------------- /public/assets/css/img/diy/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/assets/css/img/diy/7.png -------------------------------------------------------------------------------- /public/assets/css/img/diy/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/assets/css/img/diy/8.png -------------------------------------------------------------------------------- /public/assets/css/img/diy/9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/assets/css/img/diy/9.png -------------------------------------------------------------------------------- /public/assets/css/img/line_conn.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/assets/css/img/line_conn.gif -------------------------------------------------------------------------------- /public/assets/css/img/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/assets/css/img/loading.gif -------------------------------------------------------------------------------- /public/assets/css/img/zTreeStandard.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/assets/css/img/zTreeStandard.gif -------------------------------------------------------------------------------- /public/assets/css/img/zTreeStandard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/assets/css/img/zTreeStandard.png -------------------------------------------------------------------------------- /public/assets/css/zTreeStyle.css: -------------------------------------------------------------------------------- 1 | /*------------------------------------- 2 | zTree Style 3 | 4 | version: 3.5.19 5 | author: Hunter.z 6 | email: hunter.z@263.net 7 | website: http://code.google.com/p/jquerytree/ 8 | 9 | -------------------------------------*/ 10 | 11 | .ztree * {padding:0; margin:0; font-size:12px; font-family: Verdana, Arial, Helvetica, AppleGothic, sans-serif} 12 | .ztree {margin:0; padding:5px; color:#333} 13 | .ztree li{padding:0; margin:0; list-style:none; line-height:14px; text-align:left; white-space:nowrap; outline:0} 14 | .ztree li ul{ margin:0; padding:0 0 0 18px} 15 | .ztree li ul.line{ background:url(./img/line_conn.gif) 0 0 repeat-y;} 16 | 17 | .ztree li a {padding:1px 3px 0 0; margin:0; cursor:pointer; height:17px; color:#333; background-color: transparent; 18 | text-decoration:none; vertical-align:top; display: inline-block} 19 | .ztree li a:hover {text-decoration:underline} 20 | .ztree li a.curSelectedNode {padding-top:0px; background-color:#FFE6B0; color:black; height:16px; border:1px #FFB951 solid; opacity:0.8;} 21 | .ztree li a.curSelectedNode_Edit {padding-top:0px; background-color:#FFE6B0; color:black; height:16px; border:1px #FFB951 solid; opacity:0.8;} 22 | .ztree li a.tmpTargetNode_inner {padding-top:0px; background-color:#316AC5; color:white; height:16px; border:1px #316AC5 solid; 23 | opacity:0.8; filter:alpha(opacity=80)} 24 | .ztree li a.tmpTargetNode_prev {} 25 | .ztree li a.tmpTargetNode_next {} 26 | .ztree li a input.rename {height:14px; width:80px; padding:0; margin:0; 27 | font-size:12px; border:1px #7EC4CC solid; *border:0px} 28 | .ztree li span {line-height:16px; margin-right:2px} 29 | .ztree li span.button {line-height:0; margin:0; width:16px; height:16px; display: inline-block; vertical-align:middle; 30 | border:0 none; cursor: pointer;outline:none; 31 | background-color:transparent; background-repeat:no-repeat; background-attachment: scroll; 32 | background-image:url("./img/zTreeStandard.png"); *background-image:url("./img/zTreeStandard.gif")} 33 | 34 | .ztree li span.button.chk {width:13px; height:13px; margin:0 3px 0 0; cursor: auto} 35 | .ztree li span.button.chk.checkbox_false_full {background-position:0 0} 36 | .ztree li span.button.chk.checkbox_false_full_focus {background-position:0 -14px} 37 | .ztree li span.button.chk.checkbox_false_part {background-position:0 -28px} 38 | .ztree li span.button.chk.checkbox_false_part_focus {background-position:0 -42px} 39 | .ztree li span.button.chk.checkbox_false_disable {background-position:0 -56px} 40 | .ztree li span.button.chk.checkbox_true_full {background-position:-14px 0} 41 | .ztree li span.button.chk.checkbox_true_full_focus {background-position:-14px -14px} 42 | .ztree li span.button.chk.checkbox_true_part {background-position:-14px -28px} 43 | .ztree li span.button.chk.checkbox_true_part_focus {background-position:-14px -42px} 44 | .ztree li span.button.chk.checkbox_true_disable {background-position:-14px -56px} 45 | .ztree li span.button.chk.radio_false_full {background-position:-28px 0} 46 | .ztree li span.button.chk.radio_false_full_focus {background-position:-28px -14px} 47 | .ztree li span.button.chk.radio_false_part {background-position:-28px -28px} 48 | .ztree li span.button.chk.radio_false_part_focus {background-position:-28px -42px} 49 | .ztree li span.button.chk.radio_false_disable {background-position:-28px -56px} 50 | .ztree li span.button.chk.radio_true_full {background-position:-42px 0} 51 | .ztree li span.button.chk.radio_true_full_focus {background-position:-42px -14px} 52 | .ztree li span.button.chk.radio_true_part {background-position:-42px -28px} 53 | .ztree li span.button.chk.radio_true_part_focus {background-position:-42px -42px} 54 | .ztree li span.button.chk.radio_true_disable {background-position:-42px -56px} 55 | 56 | .ztree li span.button.switch {width:18px; height:18px} 57 | .ztree li span.button.root_open{background-position:-92px -54px} 58 | .ztree li span.button.root_close{background-position:-74px -54px} 59 | .ztree li span.button.roots_open{background-position:-92px 0} 60 | .ztree li span.button.roots_close{background-position:-74px 0} 61 | .ztree li span.button.center_open{background-position:-92px -18px} 62 | .ztree li span.button.center_close{background-position:-74px -18px} 63 | .ztree li span.button.bottom_open{background-position:-92px -36px} 64 | .ztree li span.button.bottom_close{background-position:-74px -36px} 65 | .ztree li span.button.noline_open{background-position:-92px -72px} 66 | .ztree li span.button.noline_close{background-position:-74px -72px} 67 | .ztree li span.button.root_docu{ background:none;} 68 | .ztree li span.button.roots_docu{background-position:-56px 0} 69 | .ztree li span.button.center_docu{background-position:-56px -18px} 70 | .ztree li span.button.bottom_docu{background-position:-56px -36px} 71 | .ztree li span.button.noline_docu{ background:none;} 72 | 73 | .ztree li span.button.ico_open{margin-right:2px; background-position:-110px -16px; vertical-align:top; *vertical-align:middle} 74 | .ztree li span.button.ico_close{margin-right:2px; background-position:-110px 0; vertical-align:top; *vertical-align:middle} 75 | .ztree li span.button.ico_docu{margin-right:2px; background-position:-110px -32px; vertical-align:top; *vertical-align:middle} 76 | .ztree li span.button.edit {margin-right:2px; background-position:-110px -48px; vertical-align:top; *vertical-align:middle} 77 | .ztree li span.button.remove {margin-right:2px; background-position:-110px -64px; vertical-align:top; *vertical-align:middle} 78 | 79 | .ztree li span.button.ico_loading{margin-right:2px; background:url(./img/loading.gif) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle} 80 | 81 | ul.tmpTargetzTree {background-color:#FFE6B0; opacity:0.8; filter:alpha(opacity=80)} 82 | 83 | span.tmpzTreeMove_arrow {width:16px; height:16px; display: inline-block; padding:0; margin:2px 0 0 1px; border:0 none; position:absolute; 84 | background-color:transparent; background-repeat:no-repeat; background-attachment: scroll; 85 | background-position:-110px -80px; background-image:url("./img/zTreeStandard.png"); *background-image:url("./img/zTreeStandard.gif")} 86 | 87 | ul.ztree.zTreeDragUL {margin:0; padding:0; position:absolute; width:auto; height:auto;overflow:hidden; background-color:#cfcfcf; border:1px #00B83F dotted; opacity:0.8; filter:alpha(opacity=80)} 88 | .zTreeMask {z-index:10000; background-color:#cfcfcf; opacity:0.0; filter:alpha(opacity=0); position:absolute} 89 | 90 | /* level style*/ 91 | /*.ztree li span.button.level0 { 92 | display:none; 93 | } 94 | .ztree li ul.level0 { 95 | padding:0; 96 | background:none; 97 | }*/ -------------------------------------------------------------------------------- /public/assets/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/assets/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /public/assets/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/assets/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /public/assets/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/assets/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /public/assets/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/assets/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /public/assets/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/assets/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /public/assets/i/app-icon72x72@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/assets/i/app-icon72x72@2x.png -------------------------------------------------------------------------------- /public/assets/i/examples/admin-chrome.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/assets/i/examples/admin-chrome.png -------------------------------------------------------------------------------- /public/assets/i/examples/admin-firefox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/assets/i/examples/admin-firefox.png -------------------------------------------------------------------------------- /public/assets/i/examples/admin-ie.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/assets/i/examples/admin-ie.png -------------------------------------------------------------------------------- /public/assets/i/examples/admin-opera.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/assets/i/examples/admin-opera.png -------------------------------------------------------------------------------- /public/assets/i/examples/admin-safari.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/assets/i/examples/admin-safari.png -------------------------------------------------------------------------------- /public/assets/i/examples/adminPage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/assets/i/examples/adminPage.png -------------------------------------------------------------------------------- /public/assets/i/examples/blogPage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/assets/i/examples/blogPage.png -------------------------------------------------------------------------------- /public/assets/i/examples/landing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/assets/i/examples/landing.png -------------------------------------------------------------------------------- /public/assets/i/examples/landingPage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/assets/i/examples/landingPage.png -------------------------------------------------------------------------------- /public/assets/i/examples/loginPage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/assets/i/examples/loginPage.png -------------------------------------------------------------------------------- /public/assets/i/examples/sidebarPage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/assets/i/examples/sidebarPage.png -------------------------------------------------------------------------------- /public/assets/i/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/assets/i/favicon.png -------------------------------------------------------------------------------- /public/assets/i/startup-640x1096.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/assets/i/startup-640x1096.png -------------------------------------------------------------------------------- /public/assets/img/a5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/assets/img/a5.png -------------------------------------------------------------------------------- /public/assets/img/k.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/assets/img/k.jpg -------------------------------------------------------------------------------- /public/assets/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/assets/img/logo.png -------------------------------------------------------------------------------- /public/assets/img/logoa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/assets/img/logoa.png -------------------------------------------------------------------------------- /public/assets/img/logob.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/assets/img/logob.png -------------------------------------------------------------------------------- /public/assets/img/user01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/assets/img/user01.png -------------------------------------------------------------------------------- /public/assets/img/user02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/assets/img/user02.png -------------------------------------------------------------------------------- /public/assets/img/user03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/assets/img/user03.png -------------------------------------------------------------------------------- /public/assets/img/user04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/assets/img/user04.png -------------------------------------------------------------------------------- /public/assets/img/user05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/assets/img/user05.png -------------------------------------------------------------------------------- /public/assets/img/user06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/assets/img/user06.png -------------------------------------------------------------------------------- /public/assets/img/user07.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/assets/img/user07.png -------------------------------------------------------------------------------- /public/assets/js/angular-websocket.min.js: -------------------------------------------------------------------------------- 1 | !function(e,t){if("function"==typeof define&&define.amd)define(["module","exports","angular","ws"],t);else if("undefined"!=typeof exports)t(module,exports,require("angular"),require("ws"));else{var o={exports:{}};t(o,o.exports,e.angular,e.ws),e.angularWebsocket=o.exports}}(this,function(e,t,o,n){"use strict";function s(e){return e&&e.__esModule?e:{"default":e}}function r(e,t,o,n){function s(t,o,n){n||!k(o)||C(o)||(n=o,o=void 0),this.protocols=o,this.url=t||"Missing URL",this.ssl=/(wss)/i.test(this.url),this.scope=n&&n.scope||e,this.rootScopeFailover=n&&n.rootScopeFailover&&!0,this.useApplyAsync=n&&n.useApplyAsync||!1,this.initialTimeout=n&&n.initialTimeout||500,this.maxTimeout=n&&n.maxTimeout||3e5,this.reconnectIfNotNormalClose=n&&n.reconnectIfNotNormalClose||!1,this.binaryType=n&&n.binaryType||"blob",this._reconnectAttempts=0,this.sendQueue=[],this.onOpenCallbacks=[],this.onMessageCallbacks=[],this.onErrorCallbacks=[],this.onCloseCallbacks=[],f(this._readyStateConstants),t?this._connect():this._setInternalState(0)}return s.prototype._readyStateConstants={CONNECTING:0,OPEN:1,CLOSING:2,CLOSED:3,RECONNECT_ABORTED:4},s.prototype._normalCloseCode=1e3,s.prototype._reconnectableStatusCodes=[4e3],s.prototype.safeDigest=function(e){e&&!this.scope.$$phase&&this.scope.$digest()},s.prototype.bindToScope=function(t){var o=this;return t&&(this.scope=t,this.rootScopeFailover&&this.scope.$on("$destroy",function(){o.scope=e})),o},s.prototype._connect=function(e){!e&&this.socket&&this.socket.readyState===this._readyStateConstants.OPEN||(this.socket=n.create(this.url,this.protocols),this.socket.onmessage=c["default"].bind(this,this._onMessageHandler),this.socket.onopen=c["default"].bind(this,this._onOpenHandler),this.socket.onerror=c["default"].bind(this,this._onErrorHandler),this.socket.onclose=c["default"].bind(this,this._onCloseHandler),this.socket.binaryType=this.binaryType)},s.prototype.fireQueue=function(){for(;this.sendQueue.length&&this.socket.readyState===this._readyStateConstants.OPEN;){var e=this.sendQueue.shift();this.socket.send(d(e.message)||"blob"!=this.binaryType?e.message:JSON.stringify(e.message)),e.deferred.resolve()}},s.prototype.notifyOpenCallbacks=function(e){for(var t=0;t-1)&&this.reconnect()},s.prototype._onErrorHandler=function(e){var t=this;t.useApplyAsync?t.scope.$applyAsync(function(){t.notifyErrorCallbacks(e)}):(t.notifyErrorCallbacks(e),t.safeDigest(!0))},s.prototype._onMessageHandler=function(e){function t(e,t,o){o=m.call(arguments,2),s.useApplyAsync?s.scope.$applyAsync(function(){e.apply(s,o)}):(e.apply(s,o),s.safeDigest(t))}for(var o,n,s=this,r=0;re||e>4)throw new Error("state must be an integer between 0 and 4, got: "+e);h||(this.readyState=e||this.socket.readyState),this._internalConnectionState=e,g(this.sendQueue,function(e){e.deferred.reject("Message cancelled due to closed socket connection")})},h&&h(s.prototype,"readyState",{get:function(){return this._internalConnectionState||this.socket.readyState},set:function(){throw new Error("The readyState property is read-only")}}),function(e,t,o){return new s(e,t,o)}}function i(e){this.create=function(e,t){var o=/wss?:\/\//.exec(e);if(!o)throw new Error("Invalid url provided");return t?new a(e,t):new a(e)},this.createWebSocketBackend=function(t,o){return e.warn("Deprecated: Please use .create(url, protocols)"),this.create(t,o)}}Object.defineProperty(t,"__esModule",{value:!0});var a,c=s(o),l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e};if("object"===("undefined"==typeof t?"undefined":l(t))&&"function"==typeof require)try{a=n.Client||n.client||n}catch(u){}a=a||window.WebSocket||window.MozWebSocket;var p=c["default"].noop,f=Object.freeze?Object.freeze:p,h=Object.defineProperty,d=c["default"].isString,y=c["default"].isFunction,b=c["default"].isDefined,k=c["default"].isObject,C=c["default"].isArray,g=c["default"].forEach,m=Array.prototype.slice;Array.prototype.indexOf||(Array.prototype.indexOf=function(e){var t=this.length>>>0,o=Number(arguments[1])||0;for(o=0>o?Math.ceil(o):Math.floor(o),0>o&&(o+=t);t>o;o++)if(o in this&&this[o]===e)return o;return-1}),c["default"].module("ngWebSocket",[]).factory("$websocket",["$rootScope","$q","$timeout","$websocketBackend",r]).factory("WebSocket",["$rootScope","$q","$timeout","WebsocketBackend",r]).service("$websocketBackend",["$log",i]).service("WebSocketBackend",["$log",i]),c["default"].module("angular-websocket",["ngWebSocket"]),t["default"]=c["default"].module("ngWebSocket"),e.exports=t["default"]}); 2 | //# sourceMappingURL=angular-websocket.min.js.map 3 | -------------------------------------------------------------------------------- /public/assets/js/angular-websocket.min.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["dist/angular-websocket.js"],"names":["global","factory","define","amd","exports","module","require","mod","angular","ws","angularWebsocket","this","_angular","_interopRequireDefault","obj","__esModule","default","$WebSocketProvider","$rootScope","$q","$timeout","$websocketBackend","$WebSocket","url","protocols","options","isObject","isArray","undefined","ssl","test","scope","rootScopeFailover","useApplyAsync","initialTimeout","maxTimeout","reconnectIfNotNormalClose","binaryType","_reconnectAttempts","sendQueue","onOpenCallbacks","onMessageCallbacks","onErrorCallbacks","onCloseCallbacks","objectFreeze","_readyStateConstants","_connect","_setInternalState","prototype","CONNECTING","OPEN","CLOSING","CLOSED","RECONNECT_ABORTED","_normalCloseCode","_reconnectableStatusCodes","safeDigest","autoApply","$$phase","$digest","bindToScope","self","$on","force","socket","readyState","create","onmessage","_angular2","bind","_onMessageHandler","onopen","_onOpenHandler","onerror","_onErrorHandler","onclose","_onCloseHandler","fireQueue","length","data","shift","send","isString","message","JSON","stringify","deferred","resolve","notifyOpenCallbacks","event","i","call","notifyCloseCallbacks","notifyErrorCallbacks","onOpen","cb","push","onClose","onError","onMessage","callback","isFunction","Error","isDefined","filter","RegExp","fn","pattern","$applyAsync","code","indexOf","reconnect","applyAsyncOrDigest","args","arraySlice","arguments","apply","currentCallback","exec","close","bufferedAmount","cancelableify","promise","cancel","then","newPromise","reason","splice","reject","defer","isMocked","isConnected","mockSend","backoffDelay","_getBackoffDelay","backoffDelaySeconds","console","log","attempt","R","Math","random","T","F","N","M","floor","min","pow","state","objectDefineProperty","_internalConnectionState","forEach","pending","get","set","$WebSocketBackendProvider","$log","match","Socket","createWebSocketBackend","warn","Object","defineProperty","value","_typeof","Symbol","iterator","constructor","Client","client","e","window","WebSocket","MozWebSocket","noop","freeze","Array","slice","elt","len","from","Number","ceil","service"],"mappings":"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"} -------------------------------------------------------------------------------- /public/assets/js/app.js: -------------------------------------------------------------------------------- 1 | $(function() { 2 | // 读取body data-type 判断是哪个页面然后执行相应页面方法,方法在下面。 3 | var dataType = $('body').attr('data-type'); 4 | console.log(dataType); 5 | 6 | // // 判断用户是否已有自己选择的模板风格 7 | // if(storageLoad('SelcetColor')){ 8 | // $('body').attr('class',storageLoad('SelcetColor').Color) 9 | // }else{ 10 | // storageSave(saveSelectColor); 11 | // $('body').attr('class','theme-black') 12 | // } 13 | 14 | autoLeftNav(); 15 | $(window).resize(function() { 16 | autoLeftNav(); 17 | console.log($(window).width()) 18 | }); 19 | 20 | // if(storageLoad('SelcetColor')){ 21 | 22 | // }else{ 23 | // storageSave(saveSelectColor); 24 | // } 25 | }) 26 | 27 | // 风格切换 28 | 29 | $('.tpl-skiner-toggle').on('click', function() { 30 | $('.tpl-skiner').toggleClass('active'); 31 | }) 32 | 33 | $('.tpl-skiner-content-bar').find('span').on('click', function() { 34 | $('body').attr('class', $(this).attr('data-color')) 35 | saveSelectColor.Color = $(this).attr('data-color'); 36 | // 保存选择项 37 | storageSave(saveSelectColor); 38 | 39 | }) 40 | 41 | 42 | 43 | 44 | // 侧边菜单开关 45 | 46 | 47 | function autoLeftNav() { 48 | 49 | 50 | 51 | $('.tpl-header-switch-button').on('click', function() { 52 | if ($('.left-sidebar').is('.active')) { 53 | if ($(window).width() > 1024) { 54 | $('.tpl-content-wrapper').removeClass('active'); 55 | } 56 | $('.left-sidebar').removeClass('active'); 57 | } else { 58 | 59 | $('.left-sidebar').addClass('active'); 60 | if ($(window).width() > 1024) { 61 | $('.tpl-content-wrapper').addClass('active'); 62 | } 63 | } 64 | }) 65 | 66 | if ($(window).width() < 1024) { 67 | $('.left-sidebar').addClass('active'); 68 | } else { 69 | $('.left-sidebar').removeClass('active'); 70 | } 71 | } 72 | 73 | 74 | // 侧边菜单 75 | $('.sidebar-nav-sub-title').on('click', function() { 76 | $(this).siblings('.sidebar-nav-sub').slideToggle(80) 77 | .end() 78 | .find('.sidebar-nav-sub-ico').toggleClass('sidebar-nav-sub-ico-rotate'); 79 | }) -------------------------------------------------------------------------------- /public/assets/js/dataTables.responsive.min.js: -------------------------------------------------------------------------------- 1 | !function(t){"function"==typeof define&&define.amd?define(["jquery","datatables.net"],function(e){return t(e,window,document)}):"object"==typeof exports?module.exports=function(e,n){return e||(e=window),n&&n.fn.dataTable||(n=require("datatables.net")(e,n).$),t(n,e,e.document)}:t(jQuery,window,document)}(function(t,e,n,i){"use strict";var r=t.fn.dataTable,s=function(e,n){if(!r.versionCheck||!r.versionCheck("1.10.3"))throw"DataTables Responsive requires DataTables 1.10.3 or newer";this.s={dt:new r.Api(e),columns:[],current:[]},this.s.dt.settings()[0].responsive||(n&&"string"==typeof n.details?n.details={type:n.details}:n&&n.details===!1?n.details={type:!1}:n&&n.details===!0&&(n.details={type:"inline"}),this.c=t.extend(!0,{},s.defaults,r.defaults.responsive,n),e.responsive=this,this._constructor())};t.extend(s.prototype,{_constructor:function(){var n=this,i=this.s.dt,s=i.settings()[0],o=t(e).width();i.settings()[0]._responsive=this,t(e).on("resize.dtr orientationchange.dtr",r.util.throttle(function(){var i=t(e).width();i!==o&&(n._resize(),o=i)})),s.oApi._fnCallbackReg(s,"aoRowCreatedCallback",function(e,r,s){t.inArray(!1,n.s.current)!==-1&&t("td, th",e).each(function(e){var r=i.column.index("toData",e);n.s.current[r]===!1&&t(this).css("display","none")})}),i.on("destroy.dtr",function(){i.off(".dtr"),t(i.table().body()).off(".dtr"),t(e).off("resize.dtr orientationchange.dtr"),t.each(n.s.current,function(t,e){e===!1&&n._setColumnVis(t,!0)})}),this.c.breakpoints.sort(function(t,e){return t.widthe.width?-1:0}),this._classLogic(),this._resizeAuto();var a=this.c.details;a.type!==!1&&(n._detailsInit(),i.on("column-visibility.dtr",function(t,e,i,r){n._classLogic(),n._resizeAuto(),n._resize()}),i.on("draw.dtr",function(){n._redrawChildren()}),t(i.table().node()).addClass("dtr-"+a.type)),i.on("column-reorder.dtr",function(t,e,i){n._classLogic(),n._resizeAuto(),n._resize()}),i.on("column-sizing.dtr",function(){n._resizeAuto(),n._resize()}),i.on("init.dtr",function(e,r,s){n._resizeAuto(),n._resize(),t.inArray(!1,n.s.current)&&i.columns.adjust()}),this._resize()},_columnsVisiblity:function(e){var n,i,r=this.s.dt,s=this.s.columns,o=s.map(function(t,e){return{columnIdx:e,priority:t.priority}}).sort(function(t,e){return t.priority!==e.priority?t.priority-e.priority:t.columnIdx-e.columnIdx}),a=t.map(s,function(n){return(!n.auto||null!==n.minWidth)&&(n.auto===!0?"-":t.inArray(e,n.includeIn)!==-1)}),d=0;for(n=0,i=a.length;n=d&&o(t,n[l].name);else if("not-"===r)for(l=0,c=n.length;l=0;n--)if(o<=a[n].width){d=a[n].name;break}var u=this._columnsVisiblity(d);this.s.current=u;var h=!1;for(n=0,i=l.length;n").append(l).appendTo(d)}t("").append(o).appendTo(r),"inline"===this.c.details.type&&t(i).addClass("dtr-inline collapsed"),t(i).find("[name]").removeAttr("name");var c=t("").css({width:1,height:1,overflow:"hidden"}).append(i);c.insertBefore(e.table().node()),o.each(function(t){var i=e.column.index("fromVisible",t);n[i].minWidth=this.offsetWidth||0}),c.remove()}},_setColumnVis:function(e,n){var i=this.s.dt,r=n?"":"none";t(i.column(e).header()).css("display",r),t(i.column(e).footer()).css("display",r),i.column(e).nodes().to$().css("display",r)},_tabIndexes:function(){var e=this.s.dt,n=e.cells({page:"current"}).nodes().to$(),i=e.settings()[0],r=this.c.details.target;n.filter("[data-dtr-keyboard]").removeData("[data-dtr-keyboard]");var s="number"==typeof r?":eq("+r+")":r;t(s,e.rows({page:"current"}).nodes()).attr("tabIndex",i.iTabIndex).data("dtr-keyboard",1)}}),s.breakpoints=[{name:"desktop",width:1/0},{name:"tablet-l",width:1024},{name:"tablet-p",width:768},{name:"mobile-l",width:480},{name:"mobile-p",width:320}],s.display={childRow:function(e,n,i){return n?t(e.node()).hasClass("parent")?(e.child(i(),"child").show(),!0):void 0:e.child.isShown()?(e.child(!1),t(e.node()).removeClass("parent"),!1):(e.child(i(),"child").show(),t(e.node()).addClass("parent"),!0)},childRowImmediate:function(e,n,i){return!n&&e.child.isShown()||!e.responsive.hasHidden()?(e.child(!1),t(e.node()).removeClass("parent"),!1):(e.child(i(),"child").show(),t(e.node()).addClass("parent"),!0)},modal:function(e){return function(i,r,s){if(r)t("div.dtr-modal-content").empty().append(s());else{var o=function(){a.remove(),t(n).off("keypress.dtr")},a=t('').append(t('').append(t('').append(s())).append(t('×').click(function(){o()}))).append(t('').click(function(){o()})).appendTo("body");t(n).on("keyup.dtr",function(t){27===t.keyCode&&(t.stopPropagation(),o())})}e&&e.header&&t("div.dtr-modal-content").prepend(""+e.header(i)+"")}}},s.renderer={listHidden:function(){return function(e,n,i){var r=t.map(i,function(t){return t.hidden?''+t.title+' '+t.data+"":""}).join("");return!!r&&t('').append(r)}},tableAll:function(e){return e=t.extend({tableClass:""},e),function(n,i,r){var s=t.map(r,function(t){return''+t.title+": "+t.data+""}).join("");return t('').append(s)}}},s.defaults={breakpoints:s.breakpoints,auto:!0,details:{display:s.display.childRow,renderer:s.renderer.listHidden(),target:0,type:"inline"},orthogonal:"display"};var o=t.fn.dataTable.Api;return o.register("responsive()",function(){return this}),o.register("responsive.index()",function(e){return e=t(e),{column:e.data("dtr-index"),row:e.parent().data("dtr-index")}}),o.register("responsive.rebuild()",function(){return this.iterator("table",function(t){t._responsive&&t._responsive._classLogic()})}),o.register("responsive.recalc()",function(){return this.iterator("table",function(t){t._responsive&&(t._responsive._resizeAuto(),t._responsive._resize())})}),o.register("responsive.hasHidden()",function(){var e=this.context[0];return!!e._responsive&&t.inArray(!1,e._responsive.s.current)!==-1}),s.version="2.1.0",t.fn.dataTable.Responsive=s,t.fn.DataTable.Responsive=s,t(n).on("preInit.dt.dtr",function(e,n,i){if("dt"===e.namespace&&(t(n.nTable).hasClass("responsive")||t(n.nTable).hasClass("dt-responsive")||n.oInit.responsive||r.defaults.responsive)){var o=n.oInit.responsive;o!==!1&&new s(n,t.isPlainObject(o)?o:{})}}),s}); -------------------------------------------------------------------------------- /public/assets/js/theme.js: -------------------------------------------------------------------------------- 1 | var saveSelectColor = { 2 | 'Name': 'SelcetColor', 3 | 'Color': 'theme-black' 4 | } 5 | 6 | 7 | 8 | // 判断用户是否已有自己选择的模板风格 9 | if (storageLoad('SelcetColor')) { 10 | $('body').attr('class', storageLoad('SelcetColor').Color) 11 | } else { 12 | storageSave(saveSelectColor); 13 | $('body').attr('class', 'theme-black') 14 | } 15 | 16 | 17 | // 本地缓存 18 | function storageSave(objectData) { 19 | localStorage.setItem(objectData.Name, JSON.stringify(objectData)); 20 | } 21 | 22 | function storageLoad(objectName) { 23 | if (localStorage.getItem(objectName)) { 24 | return JSON.parse(localStorage.getItem(objectName)) 25 | } else { 26 | return false 27 | } 28 | } -------------------------------------------------------------------------------- /public/html/assets/css/admin.css: -------------------------------------------------------------------------------- 1 | /** 2 | * admin.css 3 | */ 4 | 5 | 6 | /* 7 | fixed-layout 固定头部和边栏布局 8 | */ 9 | 10 | html, 11 | body { 12 | height: 100%; 13 | overflow: hidden; 14 | } 15 | 16 | ul { 17 | margin-top: 0; 18 | } 19 | 20 | .admin-icon-yellow { 21 | color: #ffbe40; 22 | } 23 | 24 | .admin-header { 25 | position: fixed; 26 | top: 0; 27 | left: 0; 28 | right: 0; 29 | z-index: 1500; 30 | font-size: 1.4rem; 31 | margin-bottom: 0; 32 | } 33 | 34 | .admin-header-list a:hover :after { 35 | content: none; 36 | } 37 | 38 | .admin-main { 39 | position: relative; 40 | height: 100%; 41 | padding-top: 51px; 42 | background: #f3f3f3; 43 | } 44 | 45 | .admin-menu { 46 | position: fixed; 47 | z-index: 10; 48 | bottom: 30px; 49 | right: 20px; 50 | } 51 | 52 | .admin-sidebar { 53 | width: 260px; 54 | min-height: 100%; 55 | float: left; 56 | border-right: 1px solid #cecece; 57 | } 58 | 59 | .admin-sidebar.am-active { 60 | z-index: 1600; 61 | } 62 | 63 | .admin-sidebar-list { 64 | margin-bottom: 0; 65 | } 66 | 67 | .admin-sidebar-list li a { 68 | color: #5c5c5c; 69 | padding-left: 24px; 70 | } 71 | 72 | .admin-sidebar-list li:first-child { 73 | border-top: none; 74 | } 75 | 76 | .admin-sidebar-sub { 77 | margin-top: 0; 78 | margin-bottom: 0; 79 | box-shadow: 0 16px 8px -15px #e2e2e2 inset; 80 | background: #ececec; 81 | padding-left: 24px; 82 | } 83 | 84 | .admin-sidebar-sub li:first-child { 85 | border-top: 1px solid #dedede; 86 | } 87 | 88 | .admin-sidebar-panel { 89 | margin: 10px; 90 | } 91 | 92 | .admin-content { 93 | display: -webkit-box; 94 | display: -webkit-flex; 95 | display: -ms-flexbox; 96 | display: flex; 97 | -webkit-box-orient: vertical; 98 | -webkit-box-direction: normal; 99 | -webkit-flex-direction: column; 100 | -ms-flex-direction: column; 101 | flex-direction: column; 102 | background: #fff; 103 | } 104 | 105 | .admin-content, 106 | .admin-sidebar { 107 | height: 100%; 108 | overflow-x: hidden; 109 | overflow-y: scroll; 110 | -webkit-overflow-scrolling: touch; 111 | } 112 | 113 | .admin-content-body { 114 | -webkit-box-flex: 1; 115 | -webkit-flex: 1 0 auto; 116 | -ms-flex: 1 0 auto; 117 | flex: 1 0 auto; 118 | } 119 | 120 | .admin-content-footer { 121 | font-size: 85%; 122 | color: #777; 123 | } 124 | 125 | .admin-content-list { 126 | border: 1px solid #e9ecf1; 127 | margin-top: 0; 128 | } 129 | 130 | .admin-content-list li { 131 | border: 1px solid #e9ecf1; 132 | border-width: 0 1px; 133 | margin-left: -1px; 134 | } 135 | 136 | .admin-content-list li:first-child { 137 | border-left: none; 138 | } 139 | 140 | .admin-content-list li:last-child { 141 | border-right: none; 142 | } 143 | 144 | .admin-content-table a { 145 | color: #535353; 146 | } 147 | .admin-content-file { 148 | margin-bottom: 0; 149 | color: #666; 150 | } 151 | 152 | .admin-content-file p { 153 | margin: 0 0 5px 0; 154 | font-size: 1.4rem; 155 | } 156 | 157 | .admin-content-file li { 158 | padding: 10px 0; 159 | } 160 | 161 | .admin-content-file li:first-child { 162 | border-top: none; 163 | } 164 | 165 | .admin-content-file li:last-child { 166 | border-bottom: none; 167 | } 168 | 169 | .admin-content-file li .am-progress { 170 | margin-bottom: 4px; 171 | } 172 | 173 | .admin-content-file li .am-progress-bar { 174 | line-height: 14px; 175 | } 176 | 177 | .admin-content-task { 178 | margin-bottom: 0; 179 | } 180 | 181 | .admin-content-task li { 182 | padding: 5px 0; 183 | border-color: #eee; 184 | } 185 | 186 | .admin-content-task li:first-child { 187 | border-top: none; 188 | } 189 | 190 | .admin-content-task li:last-child { 191 | border-bottom: none; 192 | } 193 | 194 | .admin-task-meta { 195 | font-size: 1.2rem; 196 | color: #999; 197 | } 198 | 199 | .admin-task-bd { 200 | font-size: 1.4rem; 201 | margin-bottom: 5px; 202 | } 203 | 204 | .admin-content-comment { 205 | margin-bottom: 0; 206 | } 207 | 208 | .admin-content-comment .am-comment-bd { 209 | font-size: 1.4rem; 210 | } 211 | 212 | .admin-content-pagination { 213 | margin-bottom: 0; 214 | } 215 | .admin-content-pagination li a { 216 | padding: 4px 8px; 217 | } 218 | 219 | @media only screen and (min-width: 641px) { 220 | .admin-sidebar { 221 | display: block; 222 | position: static; 223 | background: none; 224 | } 225 | 226 | .admin-offcanvas-bar { 227 | position: static; 228 | width: auto; 229 | background: none; 230 | -webkit-transform: translate3d(0, 0, 0); 231 | -ms-transform: translate3d(0, 0, 0); 232 | transform: translate3d(0, 0, 0); 233 | overflow-y: visible; 234 | min-height: 100%; 235 | } 236 | .admin-offcanvas-bar:after { 237 | content: none; 238 | } 239 | } 240 | 241 | @media only screen and (max-width: 640px) { 242 | .admin-sidebar { 243 | width: inherit; 244 | } 245 | 246 | .admin-offcanvas-bar { 247 | background: #f3f3f3; 248 | } 249 | 250 | .admin-offcanvas-bar:after { 251 | background: #BABABA; 252 | } 253 | 254 | .admin-sidebar-list a:hover, .admin-sidebar-list a:active{ 255 | -webkit-transition: background-color .3s ease; 256 | -moz-transition: background-color .3s ease; 257 | -ms-transition: background-color .3s ease; 258 | -o-transition: background-color .3s ease; 259 | transition: background-color .3s ease; 260 | background: #E4E4E4; 261 | } 262 | 263 | .admin-content-list li { 264 | padding: 10px; 265 | border-width: 1px 0; 266 | margin-top: -1px; 267 | } 268 | 269 | .admin-content-list li:first-child { 270 | border-top: none; 271 | } 272 | 273 | .admin-content-list li:last-child { 274 | border-bottom: none; 275 | } 276 | 277 | .admin-form-text { 278 | text-align: left !important; 279 | } 280 | 281 | } 282 | 283 | /* 284 | * user.html css 285 | */ 286 | .user-info { 287 | margin-bottom: 15px; 288 | } 289 | 290 | .user-info .am-progress { 291 | margin-bottom: 4px; 292 | } 293 | 294 | .user-info p { 295 | margin: 5px; 296 | } 297 | 298 | .user-info-order { 299 | font-size: 1.4rem; 300 | } 301 | 302 | /* 303 | * errorLog.html css 304 | */ 305 | 306 | .error-log .am-pre-scrollable { 307 | max-height: 40rem; 308 | } 309 | 310 | /* 311 | * table.html css 312 | */ 313 | 314 | .table-main { 315 | font-size: 1.4rem; 316 | padding: .5rem; 317 | } 318 | 319 | .table-main button { 320 | background: #fff; 321 | } 322 | 323 | .table-check { 324 | width: 30px; 325 | } 326 | 327 | .table-id { 328 | width: 50px; 329 | } 330 | 331 | @media only screen and (max-width: 640px) { 332 | .table-select { 333 | margin-top: 10px; 334 | margin-left: 5px; 335 | } 336 | } 337 | 338 | /* 339 | gallery.html css 340 | */ 341 | 342 | .gallery-list li { 343 | padding: 10px; 344 | } 345 | 346 | .gallery-list a { 347 | color: #666; 348 | } 349 | 350 | .gallery-list a:hover { 351 | color: #3bb4f2; 352 | } 353 | 354 | .gallery-title { 355 | margin-top: 6px; 356 | font-size: 1.4rem; 357 | } 358 | 359 | .gallery-desc { 360 | font-size: 1.2rem; 361 | margin-top: 4px; 362 | } 363 | 364 | /* 365 | 404.html css 366 | */ 367 | 368 | .page-404 { 369 | background: #fff; 370 | border: none; 371 | width: 200px; 372 | margin: 0 auto; 373 | } 374 | -------------------------------------------------------------------------------- /public/html/assets/css/amazeui.datatables.min.css: -------------------------------------------------------------------------------- 1 | .am-datatable-hd{margin-bottom:10px}.am-datatable-hd label{font-weight:400}.am-datatable-filter{text-align:right}.am-datatable-filter input{margin-left:.5em}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_asc_disabled,table.dataTable thead .sorting_desc,table.dataTable thead .sorting_desc_disabled{cursor:pointer;position:relative}table.dataTable thead .sorting:after{position:absolute;top:50%;margin-top:-12px;right:8px;display:block;font-weight:400}table.dataTable thead .sorting_asc:after,table.dataTable thead .sorting_desc:after{position:absolute;top:50%;margin-top:-12px;right:8px;display:block;opacity:.5;font-weight:400}table.dataTable thead .sorting:after{opacity:.2;content:"\f0dc"}table.dataTable thead .sorting_asc:after{content:"\f15d"}table.dataTable thead .sorting_desc:after{content:"\f15e"}div.DTFC_LeftBodyWrapper table.dataTable thead .sorting:after,div.DTFC_LeftBodyWrapper table.dataTable thead .sorting_asc:after,div.DTFC_LeftBodyWrapper table.dataTable thead .sorting_desc:after,div.DTFC_RightBodyWrapper table.dataTable thead .sorting:after,div.DTFC_RightBodyWrapper table.dataTable thead .sorting_asc:after,div.DTFC_RightBodyWrapper table.dataTable thead .sorting_desc:after,div.dataTables_scrollBody table.dataTable thead .sorting:after,div.dataTables_scrollBody table.dataTable thead .sorting_asc:after,div.dataTables_scrollBody table.dataTable thead .sorting_desc:after{display:none}table.dataTable thead .sorting_asc_disabled:after,table.dataTable thead .sorting_desc_disabled:after{color:#eee}table.dataTable thead>tr>th{padding-right:30px}table.dataTable th:active{outline:none}table.dataTable.table-condensed thead>tr>th{padding-right:20px}table.dataTable.table-condensed thead .sorting:after,table.dataTable.table-condensed thead .sorting_asc:after,table.dataTable.table-condensed thead .sorting_desc:after{top:6px;right:6px}div.dataTables_scrollHead table{margin-bottom:0!important;border-bottom-left-radius:0;border-bottom-right-radius:0}div.DTFC_LeftHeadWrapper table thead tr:last-child td:first-child,div.DTFC_LeftHeadWrapper table thead tr:last-child th:first-child,div.DTFC_RightHeadWrapper table thead tr:last-child td:first-child,div.DTFC_RightHeadWrapper table thead tr:last-child th:first-child,div.dataTables_scrollHead table thead tr:last-child td:first-child,div.dataTables_scrollHead table thead tr:last-child th:first-child{border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}div.dataTables_scrollBody table{border-top:none;margin-top:0!important;margin-bottom:0!important}div.DTFC_LeftBodyWrapper tbody tr:first-child td,div.DTFC_LeftBodyWrapper tbody tr:first-child th,div.DTFC_RightBodyWrapper tbody tr:first-child td,div.DTFC_RightBodyWrapper tbody tr:first-child th,div.dataTables_scrollBody tbody tr:first-child td,div.dataTables_scrollBody tbody tr:first-child th{border-top:none}div.dataTables_scrollFoot table{margin-top:0!important;border-top:none}table.table-bordered.dataTable{border-collapse:separate!important}table.table-bordered thead td,table.table-bordered thead th{border-left-width:0;border-top-width:0}table.table-bordered tbody td,table.table-bordered tbody th,table.table-bordered tfoot td,table.table-bordered tfoot th{border-left-width:0;border-bottom-width:0}table.table-bordered td:last-child,table.table-bordered th:last-child{border-right-width:0}div.dataTables_scrollHead table.table-bordered{border-bottom-width:0}.table.dataTable tbody tr.active td,.table.dataTable tbody tr.active th{background-color:#08c;color:#fff}.table.dataTable tbody tr.active:hover td,.table.dataTable tbody tr.active:hover th{background-color:#0075b0!important}.table.dataTable tbody tr.active td>a,.table.dataTable tbody tr.active th>a{color:#fff}.table-striped.dataTable tbody tr.active:nth-child(odd) td,.table-striped.dataTable tbody tr.active:nth-child(odd) th{background-color:#017ebc}table.DTTT_selectable tbody tr{cursor:pointer}div.DTTT .btn:hover{text-decoration:none!important}ul.DTTT_dropdown.dropdown-menu{z-index:2003}ul.DTTT_dropdown.dropdown-menu a{color:#333!important}ul.DTTT_dropdown.dropdown-menu li{position:relative}ul.DTTT_dropdown.dropdown-menu li:hover a{background-color:#08c;color:#fff!important}div.DTTT_collection_background{z-index:2002}div.DTTT_print_info,div.dataTables_processing{top:50%;left:50%;text-align:center;background-color:#fff}div.DTTT_print_info{color:#333;padding:10px 30px;opacity:.95;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0,0,0,.5);box-shadow:0 3px 7px rgba(0,0,0,.5);position:fixed;width:400px;height:150px;margin-left:-200px;margin-top:-75px}div.DTTT_print_info h6{font-weight:400;font-size:28px;line-height:28px;margin:1em}div.DTTT_print_info p{font-size:14px;line-height:20px}div.dataTables_processing{position:absolute;width:100%;height:60px;margin-left:-50%;margin-top:-25px;padding-top:20px;padding-bottom:20px;font-size:1.2em;background:-webkit-gradient(linear,left top,right top,color-stop(0%,rgba(255,255,255,0)),color-stop(25%,rgba(255,255,255,.9)),color-stop(75%,rgba(255,255,255,.9)),color-stop(100%,rgba(255,255,255,0)));background:-webkit-linear-gradient(left,rgba(255,255,255,0) 0%,rgba(255,255,255,.9) 25%,rgba(255,255,255,.9) 75%,rgba(255,255,255,0) 100%);background:-webkit-gradient(linear,left top,right top,from(rgba(255,255,255,0)),color-stop(25%,rgba(255,255,255,.9)),color-stop(75%,rgba(255,255,255,.9)),to(rgba(255,255,255,0)));background:linear-gradient(to right,rgba(255,255,255,0) 0%,rgba(255,255,255,.9) 25%,rgba(255,255,255,.9) 75%,rgba(255,255,255,0) 100%)}div.DTFC_LeftHeadWrapper table{background-color:#fff}div.DTFC_LeftFootWrapper table{background-color:#fff;margin-bottom:0}div.DTFC_RightHeadWrapper table{background-color:#fff}div.DTFC_RightFootWrapper table,table.DTFC_Cloned tr.even{background-color:#fff;margin-bottom:0}div.DTFC_LeftHeadWrapper table,div.DTFC_RightHeadWrapper table{border-bottom:none!important;margin-bottom:0!important;border-top-right-radius:0!important;border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}div.DTFC_LeftBodyWrapper table,div.DTFC_RightBodyWrapper table{border-top:none;margin:0!important}div.DTFC_LeftFootWrapper table,div.DTFC_RightFootWrapper table{border-top:none;margin-top:0!important}div.FixedHeader_Cloned table{margin:0!important}.am-datatable-pager{margin-top:0;margin-bottom:0}.am-datatable-info{padding-top:6px;color:#555;font-size:1.4rem}table.dataTable.dtr-inline.collapsed>tbody>tr>td:first-child,table.dataTable.dtr-inline.collapsed>tbody>tr>th:first-child{position:relative;padding-left:30px;cursor:pointer}table.dataTable.dtr-inline.collapsed>tbody>tr>td:first-child:before,table.dataTable.dtr-inline.collapsed>tbody>tr>th:first-child:before{top:8px;left:4px;height:16px;width:16px;display:block;position:absolute;color:#fff;border:2px solid #fff;border-radius:16px;text-align:center;line-height:14px;-webkit-box-shadow:0 0 3px #444;box-shadow:0 0 3px #444;-webkit-box-sizing:content-box;box-sizing:content-box;content:'+';background-color:#31b131}table.dataTable.dtr-inline.collapsed>tbody>tr>td:first-child.dataTables_empty:before,table.dataTable.dtr-inline.collapsed>tbody>tr>th:first-child.dataTables_empty:before{display:none}table.dataTable.dtr-inline.collapsed>tbody>tr.parent>td:first-child:before,table.dataTable.dtr-inline.collapsed>tbody>tr.parent>th:first-child:before{content:'-';background-color:#d33333}table.dataTable.dtr-inline.collapsed>tbody>tr.child td:before{display:none}table.dataTable.dtr-inline.collapsed.compact>tbody>tr>td:first-child,table.dataTable.dtr-inline.collapsed.compact>tbody>tr>th:first-child{padding-left:27px}table.dataTable.dtr-inline.collapsed.compact>tbody>tr>td:first-child:before,table.dataTable.dtr-inline.collapsed.compact>tbody>tr>th:first-child:before{top:5px;left:4px;height:14px;width:14px;border-radius:14px;line-height:12px}table.dataTable.dtr-column>tbody>tr>td.control,table.dataTable.dtr-column>tbody>tr>th.control{position:relative;cursor:pointer}table.dataTable.dtr-column>tbody>tr>td.control:before,table.dataTable.dtr-column>tbody>tr>th.control:before{top:50%;left:50%;height:16px;width:16px;margin-top:-10px;margin-left:-10px;display:block;position:absolute;color:#fff;border:2px solid #fff;border-radius:16px;text-align:center;line-height:14px;-webkit-box-shadow:0 0 3px #666;box-shadow:0 0 3px #666;-webkit-box-sizing:content-box;box-sizing:content-box;content:'+';background-color:#5eb95e}table.dataTable.dtr-column>tbody>tr.parent td.control:before,table.dataTable.dtr-column>tbody>tr.parent th.control:before{content:'-';background-color:#dd514c}table.dataTable>tbody>tr.child{padding:.5em 1em}table.dataTable>tbody>tr.child:hover{background:0 0!important}table.dataTable>tbody>tr.child ul{display:inline-block;list-style-type:none;margin:0;padding:0}table.dataTable>tbody>tr.child ul li{border-bottom:1px solid #efefef;padding:.5em 0}table.dataTable>tbody>tr.child ul li:first-child{padding-top:0}table.dataTable>tbody>tr.child ul li:last-child{border-bottom:none}table.dataTable>tbody>tr.child span.dtr-title{display:inline-block;min-width:75px;font-weight:700} -------------------------------------------------------------------------------- /public/html/assets/css/fullcalendar.print.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * FullCalendar v0.0.0 Print Stylesheet 3 | * Docs & License: http://fullcalendar.io/ 4 | * (c) 2016 Adam Shaw 5 | */ 6 | 7 | /* 8 | * Include this stylesheet on your page to get a more printer-friendly calendar. 9 | * When including this stylesheet, use the media='print' attribute of the tag. 10 | * Make sure to include this stylesheet IN ADDITION to the regular fullcalendar.css. 11 | */ 12 | 13 | .fc { 14 | max-width: 100% !important; 15 | } 16 | 17 | 18 | /* Global Event Restyling 19 | --------------------------------------------------------------------------------------------------*/ 20 | 21 | .fc-event { 22 | background: #fff !important; 23 | color: #000 !important; 24 | page-break-inside: avoid; 25 | } 26 | 27 | .fc-event .fc-resizer { 28 | display: none; 29 | } 30 | 31 | 32 | /* Table & Day-Row Restyling 33 | --------------------------------------------------------------------------------------------------*/ 34 | 35 | .fc th, 36 | .fc td, 37 | .fc hr, 38 | .fc thead, 39 | .fc tbody, 40 | .fc-row { 41 | border-color: #ccc !important; 42 | background: #fff !important; 43 | } 44 | 45 | /* kill the overlaid, absolutely-positioned components */ 46 | /* common... */ 47 | .fc-bg, 48 | .fc-bgevent-skeleton, 49 | .fc-highlight-skeleton, 50 | .fc-helper-skeleton, 51 | /* for timegrid. within cells within table skeletons... */ 52 | .fc-bgevent-container, 53 | .fc-business-container, 54 | .fc-highlight-container, 55 | .fc-helper-container { 56 | display: none; 57 | } 58 | 59 | /* don't force a min-height on rows (for DayGrid) */ 60 | .fc tbody .fc-row { 61 | height: auto !important; /* undo height that JS set in distributeHeight */ 62 | min-height: 0 !important; /* undo the min-height from each view's specific stylesheet */ 63 | } 64 | 65 | .fc tbody .fc-row .fc-content-skeleton { 66 | position: static; /* undo .fc-rigid */ 67 | padding-bottom: 0 !important; /* use a more border-friendly method for this... */ 68 | } 69 | 70 | .fc tbody .fc-row .fc-content-skeleton tbody tr:last-child td { /* only works in newer browsers */ 71 | padding-bottom: 1em; /* ...gives space within the skeleton. also ensures min height in a way */ 72 | } 73 | 74 | .fc tbody .fc-row .fc-content-skeleton table { 75 | /* provides a min-height for the row, but only effective for IE, which exaggerates this value, 76 | making it look more like 3em. for other browers, it will already be this tall */ 77 | height: 1em; 78 | } 79 | 80 | 81 | /* Undo month-view event limiting. Display all events and hide the "more" links 82 | --------------------------------------------------------------------------------------------------*/ 83 | 84 | .fc-more-cell, 85 | .fc-more { 86 | display: none !important; 87 | } 88 | 89 | .fc tr.fc-limited { 90 | display: table-row !important; 91 | } 92 | 93 | .fc td.fc-limited { 94 | display: table-cell !important; 95 | } 96 | 97 | .fc-popover { 98 | display: none; /* never display the "more.." popover in print mode */ 99 | } 100 | 101 | 102 | /* TimeGrid Restyling 103 | --------------------------------------------------------------------------------------------------*/ 104 | 105 | /* undo the min-height 100% trick used to fill the container's height */ 106 | .fc-time-grid { 107 | min-height: 0 !important; 108 | } 109 | 110 | /* don't display the side axis at all ("all-day" and time cells) */ 111 | .fc-agenda-view .fc-axis { 112 | display: none; 113 | } 114 | 115 | /* don't display the horizontal lines */ 116 | .fc-slats, 117 | .fc-time-grid hr { /* this hr is used when height is underused and needs to be filled */ 118 | display: none !important; /* important overrides inline declaration */ 119 | } 120 | 121 | /* let the container that holds the events be naturally positioned and create real height */ 122 | .fc-time-grid .fc-content-skeleton { 123 | position: static; 124 | } 125 | 126 | /* in case there are no events, we still want some height */ 127 | .fc-time-grid .fc-content-skeleton table { 128 | height: 4em; 129 | } 130 | 131 | /* kill the horizontal spacing made by the event container. event margins will be done below */ 132 | .fc-time-grid .fc-event-container { 133 | margin: 0 !important; 134 | } 135 | 136 | 137 | /* TimeGrid *Event* Restyling 138 | --------------------------------------------------------------------------------------------------*/ 139 | 140 | /* naturally position events, vertically stacking them */ 141 | .fc-time-grid .fc-event { 142 | position: static !important; 143 | margin: 3px 2px !important; 144 | } 145 | 146 | /* for events that continue to a future day, give the bottom border back */ 147 | .fc-time-grid .fc-event.fc-not-end { 148 | border-bottom-width: 1px !important; 149 | } 150 | 151 | /* indicate the event continues via "..." text */ 152 | .fc-time-grid .fc-event.fc-not-end:after { 153 | content: "..."; 154 | } 155 | 156 | /* for events that are continuations from previous days, give the top border back */ 157 | .fc-time-grid .fc-event.fc-not-start { 158 | border-top-width: 1px !important; 159 | } 160 | 161 | /* indicate the event is a continuation via "..." text */ 162 | .fc-time-grid .fc-event.fc-not-start:before { 163 | content: "..."; 164 | } 165 | 166 | /* time */ 167 | 168 | /* undo a previous declaration and let the time text span to a second line */ 169 | .fc-time-grid .fc-event .fc-time { 170 | white-space: normal !important; 171 | } 172 | 173 | /* hide the the time that is normally displayed... */ 174 | .fc-time-grid .fc-event .fc-time span { 175 | display: none; 176 | } 177 | 178 | /* ...replace it with a more verbose version (includes AM/PM) stored in an html attribute */ 179 | .fc-time-grid .fc-event .fc-time:after { 180 | content: attr(data-full); 181 | } 182 | 183 | 184 | /* Vertical Scroller & Containers 185 | --------------------------------------------------------------------------------------------------*/ 186 | 187 | /* kill the scrollbars and allow natural height */ 188 | .fc-scroller, 189 | .fc-day-grid-container, /* these divs might be assigned height, which we need to cleared */ 190 | .fc-time-grid-container { /* */ 191 | overflow: visible !important; 192 | height: auto !important; 193 | } 194 | 195 | /* kill the horizontal border/padding used to compensate for scrollbars */ 196 | .fc-row { 197 | border: 0 !important; 198 | margin: 0 !important; 199 | } 200 | 201 | 202 | /* Button Controls 203 | --------------------------------------------------------------------------------------------------*/ 204 | 205 | .fc-button-group, 206 | .fc button { 207 | display: none; /* don't display any button-related controls */ 208 | } 209 | -------------------------------------------------------------------------------- /public/html/assets/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/html/assets/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /public/html/assets/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/html/assets/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /public/html/assets/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/html/assets/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /public/html/assets/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/html/assets/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /public/html/assets/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/html/assets/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /public/html/assets/i/app-icon72x72@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/html/assets/i/app-icon72x72@2x.png -------------------------------------------------------------------------------- /public/html/assets/i/examples/admin-chrome.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/html/assets/i/examples/admin-chrome.png -------------------------------------------------------------------------------- /public/html/assets/i/examples/admin-firefox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/html/assets/i/examples/admin-firefox.png -------------------------------------------------------------------------------- /public/html/assets/i/examples/admin-ie.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/html/assets/i/examples/admin-ie.png -------------------------------------------------------------------------------- /public/html/assets/i/examples/admin-opera.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/html/assets/i/examples/admin-opera.png -------------------------------------------------------------------------------- /public/html/assets/i/examples/admin-safari.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/html/assets/i/examples/admin-safari.png -------------------------------------------------------------------------------- /public/html/assets/i/examples/adminPage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/html/assets/i/examples/adminPage.png -------------------------------------------------------------------------------- /public/html/assets/i/examples/blogPage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/html/assets/i/examples/blogPage.png -------------------------------------------------------------------------------- /public/html/assets/i/examples/landing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/html/assets/i/examples/landing.png -------------------------------------------------------------------------------- /public/html/assets/i/examples/landingPage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/html/assets/i/examples/landingPage.png -------------------------------------------------------------------------------- /public/html/assets/i/examples/loginPage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/html/assets/i/examples/loginPage.png -------------------------------------------------------------------------------- /public/html/assets/i/examples/sidebarPage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/html/assets/i/examples/sidebarPage.png -------------------------------------------------------------------------------- /public/html/assets/i/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/html/assets/i/favicon.png -------------------------------------------------------------------------------- /public/html/assets/i/startup-640x1096.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/html/assets/i/startup-640x1096.png -------------------------------------------------------------------------------- /public/html/assets/img/a5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/html/assets/img/a5.png -------------------------------------------------------------------------------- /public/html/assets/img/k.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/html/assets/img/k.jpg -------------------------------------------------------------------------------- /public/html/assets/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/html/assets/img/logo.png -------------------------------------------------------------------------------- /public/html/assets/img/logoa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/html/assets/img/logoa.png -------------------------------------------------------------------------------- /public/html/assets/img/logob.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/html/assets/img/logob.png -------------------------------------------------------------------------------- /public/html/assets/img/user01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/html/assets/img/user01.png -------------------------------------------------------------------------------- /public/html/assets/img/user02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/html/assets/img/user02.png -------------------------------------------------------------------------------- /public/html/assets/img/user03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/html/assets/img/user03.png -------------------------------------------------------------------------------- /public/html/assets/img/user04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/html/assets/img/user04.png -------------------------------------------------------------------------------- /public/html/assets/img/user05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/html/assets/img/user05.png -------------------------------------------------------------------------------- /public/html/assets/img/user06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/html/assets/img/user06.png -------------------------------------------------------------------------------- /public/html/assets/img/user07.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/html/assets/img/user07.png -------------------------------------------------------------------------------- /public/html/assets/js/app.js: -------------------------------------------------------------------------------- 1 | $(function() { 2 | // 读取body data-type 判断是哪个页面然后执行相应页面方法,方法在下面。 3 | var dataType = $('body').attr('data-type'); 4 | console.log(dataType); 5 | for (key in pageData) { 6 | if (key == dataType) { 7 | pageData[key](); 8 | } 9 | } 10 | // // 判断用户是否已有自己选择的模板风格 11 | // if(storageLoad('SelcetColor')){ 12 | // $('body').attr('class',storageLoad('SelcetColor').Color) 13 | // }else{ 14 | // storageSave(saveSelectColor); 15 | // $('body').attr('class','theme-black') 16 | // } 17 | 18 | autoLeftNav(); 19 | $(window).resize(function() { 20 | autoLeftNav(); 21 | console.log($(window).width()) 22 | }); 23 | 24 | // if(storageLoad('SelcetColor')){ 25 | 26 | // }else{ 27 | // storageSave(saveSelectColor); 28 | // } 29 | }) 30 | 31 | 32 | // 页面数据 33 | var pageData = { 34 | // =============================================== 35 | // 首页 36 | // =============================================== 37 | 'index': function indexData() { 38 | $('#example-r').DataTable({ 39 | 40 | bInfo: false, //页脚信息 41 | dom: 'ti' 42 | }); 43 | 44 | 45 | // ========================== 46 | // 百度图表A http://echarts.baidu.com/ 47 | // ========================== 48 | 49 | var echartsA = echarts.init(document.getElementById('tpl-echarts')); 50 | option = { 51 | tooltip: { 52 | trigger: 'axis' 53 | }, 54 | grid: { 55 | top: '3%', 56 | left: '3%', 57 | right: '4%', 58 | bottom: '3%', 59 | containLabel: true 60 | }, 61 | xAxis: [{ 62 | type: 'category', 63 | boundaryGap: false, 64 | data: ['周一', '周二', '周三', '周四', '周五', '周六', '周日'] 65 | }], 66 | yAxis: [{ 67 | type: 'value' 68 | }], 69 | textStyle: { 70 | color: '#838FA1' 71 | }, 72 | series: [{ 73 | name: '邮件营销', 74 | type: 'line', 75 | stack: '总量', 76 | areaStyle: { normal: {} }, 77 | data: [120, 132, 101, 134, 90], 78 | itemStyle: { 79 | normal: { 80 | color: '#1cabdb', 81 | borderColor: '#1cabdb', 82 | borderWidth: '2', 83 | borderType: 'solid', 84 | opacity: '1' 85 | }, 86 | emphasis: { 87 | 88 | } 89 | } 90 | }] 91 | }; 92 | 93 | echartsA.setOption(option); 94 | }, 95 | // =============================================== 96 | // 图表页 97 | // =============================================== 98 | 'chart': function chartData() { 99 | // ========================== 100 | // 百度图表A http://echarts.baidu.com/ 101 | // ========================== 102 | 103 | var echartsC = echarts.init(document.getElementById('tpl-echarts-C')); 104 | 105 | 106 | optionC = { 107 | tooltip: { 108 | trigger: 'axis' 109 | }, 110 | 111 | legend: { 112 | data: ['蒸发量', '降水量', '平均温度'] 113 | }, 114 | xAxis: [{ 115 | type: 'category', 116 | data: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'] 117 | }], 118 | yAxis: [{ 119 | type: 'value', 120 | name: '水量', 121 | min: 0, 122 | max: 250, 123 | interval: 50, 124 | axisLabel: { 125 | formatter: '{value} ml' 126 | } 127 | }, 128 | { 129 | type: 'value', 130 | name: '温度', 131 | min: 0, 132 | max: 25, 133 | interval: 5, 134 | axisLabel: { 135 | formatter: '{value} °C' 136 | } 137 | } 138 | ], 139 | series: [{ 140 | name: '蒸发量', 141 | type: 'bar', 142 | data: [2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 135.6, 162.2, 32.6, 20.0, 6.4, 3.3] 143 | }, 144 | { 145 | name: '降水量', 146 | type: 'bar', 147 | data: [2.6, 5.9, 9.0, 26.4, 28.7, 70.7, 175.6, 182.2, 48.7, 18.8, 6.0, 2.3] 148 | }, 149 | { 150 | name: '平均温度', 151 | type: 'line', 152 | yAxisIndex: 1, 153 | data: [2.0, 2.2, 3.3, 4.5, 6.3, 10.2, 20.3, 23.4, 23.0, 16.5, 12.0, 6.2] 154 | } 155 | ] 156 | }; 157 | 158 | echartsC.setOption(optionC); 159 | 160 | var echartsB = echarts.init(document.getElementById('tpl-echarts-B')); 161 | optionB = { 162 | tooltip: { 163 | trigger: 'axis' 164 | }, 165 | legend: { 166 | x: 'center', 167 | data: ['某软件', '某主食手机', '某水果手机', '降水量', '蒸发量'] 168 | }, 169 | radar: [{ 170 | indicator: [ 171 | { text: '品牌', max: 100 }, 172 | { text: '内容', max: 100 }, 173 | { text: '可用性', max: 100 }, 174 | { text: '功能', max: 100 } 175 | ], 176 | center: ['25%', '40%'], 177 | radius: 80 178 | }, 179 | { 180 | indicator: [ 181 | { text: '外观', max: 100 }, 182 | { text: '拍照', max: 100 }, 183 | { text: '系统', max: 100 }, 184 | { text: '性能', max: 100 }, 185 | { text: '屏幕', max: 100 } 186 | ], 187 | radius: 80, 188 | center: ['50%', '60%'], 189 | }, 190 | { 191 | indicator: (function() { 192 | var res = []; 193 | for (var i = 1; i <= 12; i++) { 194 | res.push({ text: i + '月', max: 100 }); 195 | } 196 | return res; 197 | })(), 198 | center: ['75%', '40%'], 199 | radius: 80 200 | } 201 | ], 202 | series: [{ 203 | type: 'radar', 204 | tooltip: { 205 | trigger: 'item' 206 | }, 207 | itemStyle: { normal: { areaStyle: { type: 'default' } } }, 208 | data: [{ 209 | value: [60, 73, 85, 40], 210 | name: '某软件' 211 | }] 212 | }, 213 | { 214 | type: 'radar', 215 | radarIndex: 1, 216 | data: [{ 217 | value: [85, 90, 90, 95, 95], 218 | name: '某主食手机' 219 | }, 220 | { 221 | value: [95, 80, 95, 90, 93], 222 | name: '某水果手机' 223 | } 224 | ] 225 | }, 226 | { 227 | type: 'radar', 228 | radarIndex: 2, 229 | itemStyle: { normal: { areaStyle: { type: 'default' } } }, 230 | data: [{ 231 | name: '降水量', 232 | value: [2.6, 5.9, 9.0, 26.4, 28.7, 70.7, 75.6, 82.2, 48.7, 18.8, 6.0, 2.3], 233 | }, 234 | { 235 | name: '蒸发量', 236 | value: [2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 35.6, 62.2, 32.6, 20.0, 6.4, 3.3] 237 | } 238 | ] 239 | } 240 | ] 241 | }; 242 | echartsB.setOption(optionB); 243 | var echartsA = echarts.init(document.getElementById('tpl-echarts-A')); 244 | option = { 245 | 246 | tooltip: { 247 | trigger: 'axis', 248 | }, 249 | legend: { 250 | data: ['邮件', '媒体', '资源'] 251 | }, 252 | grid: { 253 | left: '3%', 254 | right: '4%', 255 | bottom: '3%', 256 | containLabel: true 257 | }, 258 | xAxis: [{ 259 | type: 'category', 260 | boundaryGap: true, 261 | data: ['周一', '周二', '周三', '周四', '周五', '周六', '周日'] 262 | }], 263 | 264 | yAxis: [{ 265 | type: 'value' 266 | }], 267 | series: [{ 268 | name: '邮件', 269 | type: 'line', 270 | stack: '总量', 271 | areaStyle: { normal: {} }, 272 | data: [120, 132, 101, 134, 90, 230, 210], 273 | itemStyle: { 274 | normal: { 275 | color: '#59aea2' 276 | }, 277 | emphasis: { 278 | 279 | } 280 | } 281 | }, 282 | { 283 | name: '媒体', 284 | type: 'line', 285 | stack: '总量', 286 | areaStyle: { normal: {} }, 287 | data: [220, 182, 191, 234, 290, 330, 310], 288 | itemStyle: { 289 | normal: { 290 | color: '#e7505a' 291 | } 292 | } 293 | }, 294 | { 295 | name: '资源', 296 | type: 'line', 297 | stack: '总量', 298 | areaStyle: { normal: {} }, 299 | data: [150, 232, 201, 154, 190, 330, 410], 300 | itemStyle: { 301 | normal: { 302 | color: '#32c5d2' 303 | } 304 | } 305 | } 306 | ] 307 | }; 308 | echartsA.setOption(option); 309 | } 310 | } 311 | 312 | 313 | // 风格切换 314 | 315 | $('.tpl-skiner-toggle').on('click', function() { 316 | $('.tpl-skiner').toggleClass('active'); 317 | }) 318 | 319 | $('.tpl-skiner-content-bar').find('span').on('click', function() { 320 | $('body').attr('class', $(this).attr('data-color')) 321 | saveSelectColor.Color = $(this).attr('data-color'); 322 | // 保存选择项 323 | storageSave(saveSelectColor); 324 | 325 | }) 326 | 327 | 328 | 329 | 330 | // 侧边菜单开关 331 | 332 | 333 | function autoLeftNav() { 334 | 335 | 336 | 337 | $('.tpl-header-switch-button').on('click', function() { 338 | if ($('.left-sidebar').is('.active')) { 339 | if ($(window).width() > 1024) { 340 | $('.tpl-content-wrapper').removeClass('active'); 341 | } 342 | $('.left-sidebar').removeClass('active'); 343 | } else { 344 | 345 | $('.left-sidebar').addClass('active'); 346 | if ($(window).width() > 1024) { 347 | $('.tpl-content-wrapper').addClass('active'); 348 | } 349 | } 350 | }) 351 | 352 | if ($(window).width() < 1024) { 353 | $('.left-sidebar').addClass('active'); 354 | } else { 355 | $('.left-sidebar').removeClass('active'); 356 | } 357 | } 358 | 359 | 360 | // 侧边菜单 361 | $('.sidebar-nav-sub-title').on('click', function() { 362 | $(this).siblings('.sidebar-nav-sub').slideToggle(80) 363 | .end() 364 | .find('.sidebar-nav-sub-ico').toggleClass('sidebar-nav-sub-ico-rotate'); 365 | }) -------------------------------------------------------------------------------- /public/html/assets/js/dataTables.responsive.min.js: -------------------------------------------------------------------------------- 1 | !function(t){"function"==typeof define&&define.amd?define(["jquery","datatables.net"],function(e){return t(e,window,document)}):"object"==typeof exports?module.exports=function(e,n){return e||(e=window),n&&n.fn.dataTable||(n=require("datatables.net")(e,n).$),t(n,e,e.document)}:t(jQuery,window,document)}(function(t,e,n,i){"use strict";var r=t.fn.dataTable,s=function(e,n){if(!r.versionCheck||!r.versionCheck("1.10.3"))throw"DataTables Responsive requires DataTables 1.10.3 or newer";this.s={dt:new r.Api(e),columns:[],current:[]},this.s.dt.settings()[0].responsive||(n&&"string"==typeof n.details?n.details={type:n.details}:n&&n.details===!1?n.details={type:!1}:n&&n.details===!0&&(n.details={type:"inline"}),this.c=t.extend(!0,{},s.defaults,r.defaults.responsive,n),e.responsive=this,this._constructor())};t.extend(s.prototype,{_constructor:function(){var n=this,i=this.s.dt,s=i.settings()[0],o=t(e).width();i.settings()[0]._responsive=this,t(e).on("resize.dtr orientationchange.dtr",r.util.throttle(function(){var i=t(e).width();i!==o&&(n._resize(),o=i)})),s.oApi._fnCallbackReg(s,"aoRowCreatedCallback",function(e,r,s){t.inArray(!1,n.s.current)!==-1&&t("td, th",e).each(function(e){var r=i.column.index("toData",e);n.s.current[r]===!1&&t(this).css("display","none")})}),i.on("destroy.dtr",function(){i.off(".dtr"),t(i.table().body()).off(".dtr"),t(e).off("resize.dtr orientationchange.dtr"),t.each(n.s.current,function(t,e){e===!1&&n._setColumnVis(t,!0)})}),this.c.breakpoints.sort(function(t,e){return t.widthe.width?-1:0}),this._classLogic(),this._resizeAuto();var a=this.c.details;a.type!==!1&&(n._detailsInit(),i.on("column-visibility.dtr",function(t,e,i,r){n._classLogic(),n._resizeAuto(),n._resize()}),i.on("draw.dtr",function(){n._redrawChildren()}),t(i.table().node()).addClass("dtr-"+a.type)),i.on("column-reorder.dtr",function(t,e,i){n._classLogic(),n._resizeAuto(),n._resize()}),i.on("column-sizing.dtr",function(){n._resizeAuto(),n._resize()}),i.on("init.dtr",function(e,r,s){n._resizeAuto(),n._resize(),t.inArray(!1,n.s.current)&&i.columns.adjust()}),this._resize()},_columnsVisiblity:function(e){var n,i,r=this.s.dt,s=this.s.columns,o=s.map(function(t,e){return{columnIdx:e,priority:t.priority}}).sort(function(t,e){return t.priority!==e.priority?t.priority-e.priority:t.columnIdx-e.columnIdx}),a=t.map(s,function(n){return(!n.auto||null!==n.minWidth)&&(n.auto===!0?"-":t.inArray(e,n.includeIn)!==-1)}),d=0;for(n=0,i=a.length;n=d&&o(t,n[l].name);else if("not-"===r)for(l=0,c=n.length;l=0;n--)if(o<=a[n].width){d=a[n].name;break}var u=this._columnsVisiblity(d);this.s.current=u;var h=!1;for(n=0,i=l.length;n").append(l).appendTo(d)}t("").append(o).appendTo(r),"inline"===this.c.details.type&&t(i).addClass("dtr-inline collapsed"),t(i).find("[name]").removeAttr("name");var c=t("").css({width:1,height:1,overflow:"hidden"}).append(i);c.insertBefore(e.table().node()),o.each(function(t){var i=e.column.index("fromVisible",t);n[i].minWidth=this.offsetWidth||0}),c.remove()}},_setColumnVis:function(e,n){var i=this.s.dt,r=n?"":"none";t(i.column(e).header()).css("display",r),t(i.column(e).footer()).css("display",r),i.column(e).nodes().to$().css("display",r)},_tabIndexes:function(){var e=this.s.dt,n=e.cells({page:"current"}).nodes().to$(),i=e.settings()[0],r=this.c.details.target;n.filter("[data-dtr-keyboard]").removeData("[data-dtr-keyboard]");var s="number"==typeof r?":eq("+r+")":r;t(s,e.rows({page:"current"}).nodes()).attr("tabIndex",i.iTabIndex).data("dtr-keyboard",1)}}),s.breakpoints=[{name:"desktop",width:1/0},{name:"tablet-l",width:1024},{name:"tablet-p",width:768},{name:"mobile-l",width:480},{name:"mobile-p",width:320}],s.display={childRow:function(e,n,i){return n?t(e.node()).hasClass("parent")?(e.child(i(),"child").show(),!0):void 0:e.child.isShown()?(e.child(!1),t(e.node()).removeClass("parent"),!1):(e.child(i(),"child").show(),t(e.node()).addClass("parent"),!0)},childRowImmediate:function(e,n,i){return!n&&e.child.isShown()||!e.responsive.hasHidden()?(e.child(!1),t(e.node()).removeClass("parent"),!1):(e.child(i(),"child").show(),t(e.node()).addClass("parent"),!0)},modal:function(e){return function(i,r,s){if(r)t("div.dtr-modal-content").empty().append(s());else{var o=function(){a.remove(),t(n).off("keypress.dtr")},a=t('').append(t('').append(t('').append(s())).append(t('×').click(function(){o()}))).append(t('').click(function(){o()})).appendTo("body");t(n).on("keyup.dtr",function(t){27===t.keyCode&&(t.stopPropagation(),o())})}e&&e.header&&t("div.dtr-modal-content").prepend(""+e.header(i)+"")}}},s.renderer={listHidden:function(){return function(e,n,i){var r=t.map(i,function(t){return t.hidden?''+t.title+' '+t.data+"":""}).join("");return!!r&&t('').append(r)}},tableAll:function(e){return e=t.extend({tableClass:""},e),function(n,i,r){var s=t.map(r,function(t){return''+t.title+": "+t.data+""}).join("");return t('').append(s)}}},s.defaults={breakpoints:s.breakpoints,auto:!0,details:{display:s.display.childRow,renderer:s.renderer.listHidden(),target:0,type:"inline"},orthogonal:"display"};var o=t.fn.dataTable.Api;return o.register("responsive()",function(){return this}),o.register("responsive.index()",function(e){return e=t(e),{column:e.data("dtr-index"),row:e.parent().data("dtr-index")}}),o.register("responsive.rebuild()",function(){return this.iterator("table",function(t){t._responsive&&t._responsive._classLogic()})}),o.register("responsive.recalc()",function(){return this.iterator("table",function(t){t._responsive&&(t._responsive._resizeAuto(),t._responsive._resize())})}),o.register("responsive.hasHidden()",function(){var e=this.context[0];return!!e._responsive&&t.inArray(!1,e._responsive.s.current)!==-1}),s.version="2.1.0",t.fn.dataTable.Responsive=s,t.fn.DataTable.Responsive=s,t(n).on("preInit.dt.dtr",function(e,n,i){if("dt"===e.namespace&&(t(n.nTable).hasClass("responsive")||t(n.nTable).hasClass("dt-responsive")||n.oInit.responsive||r.defaults.responsive)){var o=n.oInit.responsive;o!==!1&&new s(n,t.isPlainObject(o)?o:{})}}),s}); -------------------------------------------------------------------------------- /public/html/assets/js/theme.js: -------------------------------------------------------------------------------- 1 | var saveSelectColor = { 2 | 'Name': 'SelcetColor', 3 | 'Color': 'theme-black' 4 | } 5 | 6 | 7 | 8 | // 判断用户是否已有自己选择的模板风格 9 | if (storageLoad('SelcetColor')) { 10 | $('body').attr('class', storageLoad('SelcetColor').Color) 11 | } else { 12 | storageSave(saveSelectColor); 13 | $('body').attr('class', 'theme-black') 14 | } 15 | 16 | 17 | // 本地缓存 18 | function storageSave(objectData) { 19 | localStorage.setItem(objectData.Name, JSON.stringify(objectData)); 20 | } 21 | 22 | function storageLoad(objectName) { 23 | if (localStorage.getItem(objectName)) { 24 | return JSON.parse(localStorage.getItem(objectName)) 25 | } else { 26 | return false 27 | } 28 | } -------------------------------------------------------------------------------- /public/html/login.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Amaze UI Admin index Examples 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 选择主题 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 记住密码 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 提交 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | -------------------------------------------------------------------------------- /public/html/sign-up.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Amaze UI Admin index Examples 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 选择主题 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 注册用户 43 | 44 | 创建一个新的用户 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 我已阅读并同意 《用户注册协议》 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 提交 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | -------------------------------------------------------------------------------- /public/html/白色.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/html/白色.psd -------------------------------------------------------------------------------- /public/html/黑色.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caibojian/cjs/37b13bbf5d9af167e6a8026f0557f5b7a5b41de4/public/html/黑色.psd -------------------------------------------------------------------------------- /public/js/cjs.func.js: -------------------------------------------------------------------------------- 1 | 2 | //初始化普通列表分页 3 | function initPagination($scope,$http){ 4 | console.log("初始化普通列表分页"); 5 | $("#loading").modal(); 6 | initPageInfo($scope); 7 | getPageInfos($scope,$http,"/admin/manage/getDocumentList/"+$('#currentCate').val(),'normalList'); 8 | } 9 | 10 | function initPageInfo($scope){ 11 | $("#loading").modal(); 12 | $scope.selectPage = [ 13 | {name:'10',value : '10'}, 14 | {name:'20',value : '20'}, 15 | {name:'30',value : '30'} 16 | ]; 17 | $scope.limitNum = '10'; 18 | $scope.currentPage = 1; 19 | $scope.totalPage = 1; 20 | $scope.totalItems = 1; 21 | $scope.limit = 10; 22 | $scope.pages = []; 23 | $scope.startNum = 1; 24 | $scope.keywords = $('#searchInput').val(); 25 | $scope.area = $('#pageArea').val(); 26 | } 27 | 28 | 29 | //翻页组件 30 | function getPageInfos($scope,$http,url,reqType){ 31 | 32 | // 定义翻页动作 33 | $scope.loadPage = function(page){ 34 | $scope.currentPage = page; 35 | getPageInfos($scope,$http,url) 36 | }; 37 | 38 | $scope.nextPage = function () { 39 | if ($scope.currentPage < $scope.totalPage) { 40 | $scope.currentPage++; 41 | getPageInfos($scope,$http,url); 42 | } 43 | }; 44 | 45 | $scope.prevPage = function () { 46 | if ($scope.currentPage > 1) { 47 | $scope.currentPage--; 48 | getPageInfos($scope,$http,url); 49 | } 50 | }; 51 | 52 | $scope.firstPage = function () { 53 | if ($scope.currentPage > 1) { 54 | $scope.currentPage = 1; 55 | getPageInfos($scope,$http,url); 56 | } 57 | }; 58 | 59 | $scope.lastPage = function () { 60 | if ($scope.currentPage < $scope.totalPage) { 61 | $scope.currentPage = $scope.totalPage; 62 | getPageInfos($scope,$http,url); 63 | } 64 | }; 65 | 66 | $scope.changeOption = function(){ 67 | $scope.limit = Number($scope.limitNum); 68 | getPageInfos($scope,$http,url); 69 | }; 70 | 71 | $http.get(url+"?limit="+$scope.limit+"¤tPage="+$scope.currentPage+"&searchKey="+$scope.keywords+"&area="+$scope.area).success(function(result){ 72 | console.log("getData success!"); 73 | if(reqType == 'normalList'){ 74 | $scope.data = result.docs; 75 | }else if(reqType == 'themeShop'){ 76 | $scope.themeShop = result.docs; 77 | }else{ 78 | $scope.data = result.docs; 79 | } 80 | if(result.pageInfo){ 81 | $scope.totalItems = result.pageInfo.totalItems; 82 | $scope.currentPage = result.pageInfo.currentPage; 83 | $scope.limit = result.pageInfo.limit; 84 | $scope.startNum = result.pageInfo.startNum; 85 | //获取总页数 86 | $scope.totalPage = Math.ceil($scope.totalItems / $scope.limit); 87 | 88 | var pageArr = []; 89 | var page_start = $scope.currentPage - 2 > 0 ? $scope.currentPage - 2 : 1; 90 | var page_end = page_start + 4 >= $scope.totalPage ? $scope.totalPage : page_start + 4; 91 | for(var i=page_start;i<=page_end;i++){ 92 | pageArr.push(i); 93 | } 94 | $scope.pages = pageArr; 95 | 96 | }else{ 97 | console.log("获取分页信息失败") 98 | } 99 | 100 | $("#dataLoading").addClass("hide"); 101 | 102 | }) 103 | } 104 | 105 | //angularJs https Post方法封装 106 | function angularHttpPost($http,isValid,url,formData,callBack){ 107 | //if(isValid){ 108 | if(true){ 109 | $http({ 110 | method : 'POST', 111 | url : url, 112 | data : $.param(formData), // pass in data as strings 113 | headers : { 'Content-Type': 'application/x-www-form-urlencoded' } // set the headers so angular passing info as form data (not request payload) 114 | }) 115 | .success(function(data) { 116 | // 关闭所有模态窗口 117 | $('.am-modal').each(function(i){ 118 | $(this).modal("close"); 119 | }); 120 | 121 | if(data == 'success'){ 122 | callBack(data); 123 | }else{ 124 | console.log(data); 125 | $("#my-alert").modal(); 126 | $("#alert-modal-msg").text(data); 127 | } 128 | }); 129 | } 130 | else{ 131 | //$.tipsShow({ message : "参数校验不通过", type : 'warning' }); 132 | } 133 | } 134 | //主要针对删除操作 135 | function angularHttpGet($http,url,callBack){ 136 | $http.get(url).success(function(result){ 137 | $('.modal').each(function(i){ 138 | $(this).modal("hide"); 139 | }); 140 | if(result == 'success'){ 141 | callBack(result); 142 | }else{ 143 | //$.tipsShow({ message : result, type : 'warning' }); 144 | } 145 | }) 146 | } 147 | 148 | 149 | //获取添加或修改链接 150 | function getTargetPostUrl($scope,bigCategory){ 151 | var url = "/admin/manage/"+bigCategory+"/addOne"; 152 | if($scope.targetID){ 153 | url = "/admin/manage/"+bigCategory+"/modify?uid="+$scope.targetID; 154 | } 155 | return url; 156 | } 157 | 158 | 159 | //初始化删除操作 160 | function initDelOption($scope,$http,info){ 161 | 162 | // 单条记录删除 163 | $scope.delOneItem = function(id){ 164 | initCheckIfDo($scope,id,info,function(currentID){ 165 | angularHttpGet($http,"/admin/manage/"+$('#currentCate').val()+"/del?uid="+id,function(){ 166 | initPagination($scope,$http); 167 | }); 168 | }); 169 | }; 170 | 171 | $scope.getNewIds = function(){ 172 | getSelectIds(); 173 | }; 174 | 175 | // 批量删除 176 | $scope.batchDel = function(){ 177 | var targetIds = $('#targetIds').val(); 178 | if(targetIds && targetIds.split(',').length > 0){ 179 | initCheckIfDo($scope,$('#targetIds').val(),info,function(currentID){ 180 | angularHttpGet($http,"/admin/manage/"+$('#currentCate').val()+"/batchDel?ids="+currentID+"&expandIds="+$('#expandIds').val(),function(){ 181 | initPagination($scope,$http); 182 | }); 183 | }); 184 | }else{ 185 | alert('请至少选择一项') 186 | } 187 | } 188 | 189 | } 190 | 191 | //提示用户操作窗口 192 | function initCheckIfDo($scope,targetId,msg,callBack){ 193 | $('#checkIfDo').on('open.modal.amui', function (event) { 194 | if(targetId){ 195 | $scope.targetID = targetId; 196 | } 197 | $(this).find('.modal-msg').text(msg); 198 | }).on('close.modal.amui', function (event) { 199 | $scope.targetID =""; 200 | }); 201 | $('#checkIfDo').modal({dimmer:true, 202 | relatedTarget: this, 203 | onConfirm: function(e) { 204 | callBack(targetId); 205 | }, 206 | onCancel: function(e) { 207 | } 208 | }); 209 | } 210 | 211 | //关闭模态窗口初始化数据 212 | function clearModalData($scope,modalObj){ 213 | $scope.formData = {}; 214 | $scope.targetID = ""; 215 | modalObj.find(".form-control").val(""); 216 | } 217 | //获取用户组数据 218 | function initGroups($scope,$http){ 219 | $http.get("/admin/manage/sysTemManage_uGroup/findAll").success(function(result){ 220 | if(result){ 221 | $scope.groups = result; 222 | }else{ 223 | console.log("获取分页信息失败") 224 | } 225 | }); 226 | } 227 | 228 | //初始化管理员权限列表 229 | function initPowerList($scope){ 230 | var setting = { 231 | view: { 232 | selectedMulti: false 233 | }, 234 | check: { 235 | enable: true 236 | }, 237 | data: { 238 | simpleData: { 239 | enable: true 240 | } 241 | }, 242 | callback: { 243 | beforeCheck: beforeCheck, 244 | onCheck: onCheck 245 | } 246 | }; 247 | var zNodes = setAdminPowerTreeData(); 248 | 249 | var code, log, className = "dark"; 250 | function beforeCheck(treeId, treeNode) { 251 | className = (className === "dark" ? "":"dark"); 252 | return (treeNode.doCheck !== false); 253 | } 254 | function onCheck(e, treeId, treeNode) { 255 | var zTree = $.fn.zTree.getZTreeObj("groupPowerTree"), 256 | checkedNodes = zTree.getCheckedNodes(true); 257 | var nodesArr = []; 258 | for(var i=0;i"+msg.time+" " 35 | +""+msg.level+" " 36 | +""+msg.type+" " 37 | +""+msg.msg+" "); 38 | $('#scroll').animate({scrollTop: $('#loging').height()}, 50); 39 | }); 40 | var methods = { 41 | logArray: function(){ 42 | return logs; 43 | } 44 | }; 45 | return methods; 46 | }); 47 | 48 | //管理员用户列表 49 | cjsApp.controller("adminUserList",['$scope','$http','pageData','getItemService', 50 | function($scope,$http,pageData,getItemService){ 51 | $scope.formData = {}; 52 | //获取管理员列表信息 53 | initPagination($scope,$http); 54 | //删除用户 55 | initDelOption($scope,$http,'您确认要删除选中的管理员吗?'); 56 | // 修改用户 57 | initGroups($scope,$http); 58 | $('#addNewAdminUser').on('open.modal.amui', function (event) { 59 | console.log("弹出框"); 60 | var obj = $(event.relatedTarget); 61 | var editId = obj.data('whatever'); 62 | console.log(editId); 63 | // 如果不为空则为编辑状态 64 | if(editId){ 65 | getItemService.itemInfo(pageData.bigCategory,editId).success(function(result){ 66 | $scope.formData = result; 67 | $scope.targetID = editId; 68 | //initTreeDataByType($scope,$http,'adminGroup'); 69 | }) 70 | }else{ 71 | $scope.formData = {}; 72 | clearModalData($scope,$(this)); 73 | } 74 | 75 | }).on('close.modal.amui', function (e) { 76 | console.log("关闭弹出框"); 77 | // 清空数据 78 | //$(this).removeData('amui.modal'); 79 | clearModalData($scope,$(this)); 80 | }); 81 | 82 | //添加新用户或修改用户 83 | $scope.processForm = function(isValid){ 84 | if(false){ 85 | //if(!$scope.formData.group){ 86 | // $.tipsShow({ 87 | // message : '请选择用户组', 88 | // type : 'warning' , 89 | // callBack : function(){ 90 | // return; 91 | // } 92 | // }); 93 | }else{ 94 | angularHttpPost($http,isValid,getTargetPostUrl($scope,pageData.bigCategory),$scope.formData,function(data){ 95 | initPagination($scope,$http); 96 | }); 97 | } 98 | 99 | }; 100 | }]); 101 | 102 | //管理员用户组列表 103 | cjsApp.controller("adminGroup",['$scope','$http','pageData','getItemService',function($scope,$http,pageData,getItemService){ 104 | $scope.formData = {}; 105 | $scope.formData.power = {}; 106 | $scope.checkInfo = {}; 107 | //获取管理员用户组列表 108 | initPagination($scope,$http); 109 | //初始化管理栏目列表 110 | initPowerList($scope); 111 | //删除用户 112 | initDelOption($scope,$http,'您确认要删除选中的用户组吗?'); 113 | 114 | // 修改用户 115 | $('#addNewAdminGroup').on('open.modal.amui', function (event) { 116 | var obj = $(event.relatedTarget); 117 | var editId = obj.data('whatever'); 118 | // 如果不为空则为编辑状态 119 | if(editId){ 120 | getItemService.itemInfo(pageData.bigCategory,editId).success(function(result){ 121 | $scope.formData.name = result.name; 122 | if(result.power){ 123 | $scope.formData.power = JSON.parse(result.power); 124 | $scope.formData.comments = result.comments; 125 | // 回选checkbox 126 | var powerTreeObj = eval(result.power); 127 | for(var i=0;i 0){ 169 | // for(var i=0;i=prev.mtime){ 24 | //文件内容有变化,那么通知相应的进程可以执行相关操作。例如读物文件写入数据库等 25 | continueReadData(); 26 | }else{ 27 | // console.log('curr.mtime<=prev.mtime'); 28 | } 29 | }); 30 | 31 | //先读取原来文件中内容 32 | continueReadData(); 33 | 34 | function continueReadData(){ 35 | //var fileUpdateFlag=fileUpdateFlagIn; 36 | buffer=new Buffer(2048); 37 | var start = 0,i=0,tmp; 38 | fs.read(fd,buffer,0,buffer.length,null,function(err, bytesRead, buffer){ 39 | 40 | var data=buffer.slice(0,bytesRead) 41 | if(remainder != null){//append newly received data chunk 42 | // console.log("remainder length:"+remainder.length); 43 | tmp = new Buffer(remainder.length+bytesRead); 44 | remainder.copy(tmp); 45 | //data=buffer.slice(0,bytesRead); 46 | data.copy(tmp,remainder.length) 47 | data = tmp; 48 | } 49 | // console.log("data length:"+data.length); 50 | for(i=0; i=0){ //\r \n new line 52 | var line = data.slice(start,i); 53 | self.emit("line", line); 54 | start = i+1; 55 | } 56 | } 57 | 58 | if(start 2 | 3 | 4 | 5 | 6 | 用户组列表 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 新增 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 所有类别 24 | IT业界 25 | 数码产品 26 | 笔记本电脑 27 | 平板电脑 28 | 只能手机 29 | 超极本 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 用户组名称 47 | 权限 48 | 创建时间 49 | 备注 50 | 操作 51 | 52 | 53 | 54 | 55 | {{group.name}} 56 | {{group.power| limitTo : 80}} 57 | {{group.date}} 58 | {{group.comments}} 59 | 60 | 61 | 62 | 编辑 63 | 64 | 65 | 删除 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | <% include pagination%> 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 用户信息 87 | 88 | × 89 | 90 | 91 | 92 | 93 | 94 | 用户组名 95 | 96 | 97 | 98 | 99 | 100 | 101 | 权限 102 | 103 | 104 | 105 | 106 | 107 | 备注 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 提交 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | -------------------------------------------------------------------------------- /views/admin/homePage.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 月度财务收支计划 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | ¥61746.45 14 | 15 | 16 | 更多月份 17 | 18 | 19 | 20 | 21 | 22 | +¥30420.56 23 | 24 | 25 | 26 | 8月份收入 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 本季度利润 37 | 38 | 39 | 40 | ¥27,294 41 | 42 | 43 | 本季度比去年多收入 2593元 人民币 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 本季度利润 53 | 54 | 55 | 56 | ¥27,294 57 | 58 | 59 | 本季度比去年多收入 2593元 人民币 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 月度财务收支计划 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 专用服务器负载 86 | 87 | 88 | 89 | 90 | 91 | 92 | CPU Load 28% / 100% 93 | 94 | 95 | 96 | CPU Load 28% / 100% 97 | 98 | 99 | 100 | CPU Load 28% / 100% 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 禁言小张 114 | 115 | 116 | 月度最佳员工 117 | 118 | 119 | 120 | 禁言小张在 121 | 30天内 禁言了 122 | 200多人。 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 文章标题 137 | 作者 138 | 时间 139 | 操作 140 | 141 | 142 | 143 | 144 | 新加坡大数据初创公司 Latize 获 150 万美元风险融资 145 | 张鹏飞 146 | 2016-09-26 147 | 148 | 149 | 150 | 编辑 151 | 152 | 153 | 删除 154 | 155 | 156 | 157 | 158 | 159 | 自拍的“政治角色”:观众背对希拉里自拍合影表示“支持” 160 | 天纵之人 161 | 2016-09-26 162 | 163 | 164 | 165 | 编辑 166 | 167 | 168 | 删除 169 | 170 | 171 | 172 | 173 | 174 | 关于创新管理,我想和你当面聊聊。 175 | 王宽师 176 | 2016-09-26 177 | 178 | 179 | 180 | 编辑 181 | 182 | 183 | 删除 184 | 185 | 186 | 187 | 188 | 189 | 究竟是趋势带动投资,还是投资引领趋势? 190 | 着迷 191 | 2016-09-26 192 | 193 | 194 | 195 | 编辑 196 | 197 | 198 | 删除 199 | 200 | 201 | 202 | 203 | 204 | Docker领域再添一员,网易云发布“蜂巢”,加入云计算之争 205 | 醉里挑灯看键 206 | 2016-09-26 207 | 208 | 209 | 210 | 编辑 211 | 212 | 213 | 删除 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | -------------------------------------------------------------------------------- /views/admin/login.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | cjs开发平台 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 选择主题 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 记住密码 61 | 62 | 63 | 64 | 65 | 66 | 67 | 提交 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 100 | 101 | 102 | -------------------------------------------------------------------------------- /views/admin/loging.ejs: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | 11 | 实时日志 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /views/admin/pagination.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | |<< 4 | << 5 | {{ page }} 6 | >> 7 | >>| 8 | 9 | -------------------------------------------------------------------------------- /views/admin/public/model.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 提示: 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 提示: 15 | 16 | 17 | 18 | 22 | 23 | 24 | 25 | 26 | 27 | 正在载入... 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /views/admin/userMge.ejs: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 12 | 13 | 14 | 用户列表 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 新增 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 请选择用户组 32 | {{_group.name}} 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 用户名 50 | 姓名 51 | 用户组 52 | 邮箱 53 | 电话 54 | 创建时间 55 | 操作 56 | 57 | 58 | 59 | 60 | {{user.userName}} 61 | {{user.name}} 62 | {{user.group.name}} 63 | {{user.email}} 64 | {{user.phoneNum}} 65 | {{user.createtime}} 66 | 67 | 68 | 69 | 编辑 70 | 71 | 72 | 删除 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | <% include pagination%> 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 用户信息 94 | 95 | × 96 | 97 | 98 | 99 | 100 | 101 | 用户名 102 | 103 | 104 | 105 | 106 | 107 | 108 | 用户组 109 | 110 | 111 | {{_group.name}} 112 | 113 | 114 | 115 | 116 | 117 | 118 | 姓名 119 | 120 | 121 | 122 | 123 | 124 | 125 | 密码 126 | 127 | 128 | 129 | 130 | 131 | Email 132 | 133 | 134 | 135 | 136 | 137 | 138 | 电话 139 | 140 | 141 | 142 | 143 | 144 | 145 | 账号冻结 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 提交 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | --------------------------------------------------------------------------------
43 | 44 | 45 |