diff --git a/app/home/controller/Admin.php b/app/home/controller/Admin.php
index db46b89..a3cf4ac 100644
--- a/app/home/controller/Admin.php
+++ b/app/home/controller/Admin.php
@@ -26,7 +26,7 @@ class Admin extends BaseController
$param = get_params();
$where = array();
if (!empty($param['keywords'])) {
- $where[] = ['id|username|nickname|desc|mobile', 'like', '%' . $param['keywords'] . '%'];
+ $where[] = ['id|username|name|nickname|mobile|desc', 'like', '%' . $param['keywords'] . '%'];
}
$where[] = ['status', '>=', 0];
if (isset($param['status'])) {
@@ -268,7 +268,7 @@ class Admin extends BaseController
$param = get_params();
$where = array();
if (!empty($param['keywords'])) {
- $where[] = ['nickname|rule_menu|param_id', 'like', '%' . $param['keywords'] . '%'];
+ $where[] = ['name|rule_menu|param_id', 'like', '%' . $param['keywords'] . '%'];
}
if (!empty($param['title_cate'])) {
$where['title'] = $param['title_cate'];
@@ -278,7 +278,7 @@ class Admin extends BaseController
}
$rows = empty($param['limit']) ? get_config(app . page_size) : $param['limit'];
$content = DB::name('AdminLog')
- ->field("id,uid,nickname,title,content,rule_menu,ip,param_id,param,FROM_UNIXTIME(create_time,'%Y-%m-%d %H:%i:%s') create_time")
+ ->field("id,uid,name,title,content,rule_menu,ip,param_id,param,FROM_UNIXTIME(create_time,'%Y-%m-%d %H:%i:%s') create_time")
->order('create_time desc')
->where($where)
->paginate($rows, false, ['query' => $param]);
diff --git a/app/home/model/AdminLog.php b/app/home/model/AdminLog.php
index d976ab7..59e4b6a 100644
--- a/app/home/model/AdminLog.php
+++ b/app/home/model/AdminLog.php
@@ -27,7 +27,7 @@ class AdminLog extends Model
$where['status'] = 1;
$rows = empty($param['limit']) ? get_config('app.pages') : $param['limit'];
$content = \think\facade\Db::name('AdminLog')
- ->field("id,uid,nickname,type,title,module,controller,function,param,content,create_time")
+ ->field("id,uid,name,type,title,module,controller,function,param,content,create_time")
->order('create_time desc')
->where($where)
->paginate($rows, false, ['query' => $param]);
diff --git a/app/install/controller/Index.php b/app/install/controller/Index.php
index c2d48ca..813af05 100644
--- a/app/install/controller/Index.php
+++ b/app/install/controller/Index.php
@@ -97,7 +97,7 @@ class Index
}
$link->select_db($data['DB_NAME']);
// 导入sql数据并创建表
- $fqcms_sql = file_get_contents(CMS_ROOT . '/app/install/data/gougucms.sql');
+ $fqcms_sql = file_get_contents(CMS_ROOT . '/app/install/data/gouguoa.sql');
$sql_array = preg_split("/;[\r\n]+/", str_replace("oa_", $data['DB_PREFIX'], $fqcms_sql));
foreach ($sql_array as $k => $v) {
if (!empty($v)) {
@@ -117,9 +117,9 @@ class Index
$update_time = time();
$create_admin_sql = "INSERT INTO " . $data['DB_PREFIX'] . "admin " .
- "(username,pwd, nickname,thumb,salt,create_time,update_time) "
+ "(username,salt,pwd,name,nickname,position_id,thumb,create_time,update_time) "
. "VALUES "
- . "('$username','$password','$name','$nickname','$thumb','$salt','$create_time','$update_time')";
+ . "('$username','$salt','$password','$name','$nickname',1,'$thumb','$create_time','$update_time')";
if (!$link->query($create_admin_sql)) {
return to_assign(1, '创建管理员信息失败');
}
diff --git a/app/install/data/gouguoa.sql b/app/install/data/gouguoa.sql
index df6dcc5..a2cf8d3 100644
--- a/app/install/data/gouguoa.sql
+++ b/app/install/data/gouguoa.sql
@@ -67,7 +67,7 @@ CREATE TABLE `oa_admin_group` (
-- ----------------------------
-- Records of cms_admin_group
-- ----------------------------
-INSERT INTO `cms_admin_group` VALUES ('1', '超级员工', '1', '1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81', '1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22', '超级管理员,系统自动分配所有可操作权限及菜单。', '0', '0');
+INSERT INTO `oa_admin_group` VALUES ('1', '超级员工', '1', '1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,112,113', '1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43', '超级员工,系统自动分配所有可操作权限及菜单。', '0', '0');
-- ----------------------------
-- Table structure for oa_admin_log
@@ -113,14 +113,14 @@ CREATE TABLE `oa_admin_menu` (
-- Records of oa_admin_menu
-- ----------------------------
INSERT INTO `oa_admin_menu` VALUES (1, 0, '系统管理', '', 'icon-jichupeizhi', 1, 0, 0);
-INSERT INTO `oa_admin_menu` VALUES (2, 0, '基础数据', '', 'icon-jichupeizhi', 1, 0, 0);
+INSERT INTO `oa_admin_menu` VALUES (2, 0, '基础数据', '', 'icon-hetongshezhi', 1, 0, 0);
INSERT INTO `oa_admin_menu` VALUES (3, 0, '人力资源', '', 'icon-renshishezhi', 1, 0, 0);
INSERT INTO `oa_admin_menu` VALUES (4, 0, '消息通知', '', 'icon-xiaoxishezhi', 1, 0, 0);
INSERT INTO `oa_admin_menu` VALUES (5, 0, '企业公告', '', 'icon-zhaoshengbaobiao', 1, 0, 0);
INSERT INTO `oa_admin_menu` VALUES (6, 0, '知识文章', '', 'icon-kecheng', 1, 0, 0);
INSERT INTO `oa_admin_menu` VALUES (7, 0, '日常办公', '', 'icon-kaoshijihua', 1, 0, 0);
INSERT INTO `oa_admin_menu` VALUES (8, 0, '财务管理', '', 'icon-yuangongtidian', 1, 0, 0);
-INSERT INTO `oa_admin_menu` VALUES (9, 0, '商业智能', '', 'icon-yuangongtidian', 1, 0, 0);
+INSERT INTO `oa_admin_menu` VALUES (9, 0, '商业智能', '', 'icon-jiaoxuetongji', 1, 0, 0);
INSERT INTO `oa_admin_menu` VALUES (10, 1, '系统配置', 'home/conf/index', '', 1, 0, 0);
INSERT INTO `oa_admin_menu` VALUES (11, 1, '功能菜单', 'home/menu/index', '', 1, 0, 0);
@@ -398,6 +398,15 @@ CREATE TABLE `oa_config` (
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8mb4 COMMENT = '系统配置表';
+-- ----------------------------
+-- Records of oa_config
+-- ----------------------------
+INSERT INTO `oa_config`(`id`, `title`, `name`, `content`, `status`, `create_time`, `update_time`) VALUES (1, '网站配置', 'web', 'a:13:{s:2:\"id\";s:1:\"1\";s:11:\"admin_title\";s:18:\"勾股办公系统\";s:5:\"title\";s:18:\"勾股办公系统\";s:4:\"logo\";s:52:\"/storage/202111/fc507cc8332d5ef49d9425185e4a9697.jpg\";s:4:\"file\";s:0:\"\";s:6:\"domain\";s:24:\"https://www.gougucms.com\";s:3:\"icp\";s:23:\"粤ICP备1xxxxxx11号-1\";s:8:\"keywords\";s:9:\"勾股cms\";s:5:\"beian\";s:29:\"粤公网安备1xxxxxx11号-1\";s:4:\"desc\";s:478:\"勾股办公是一款基于ThinkPHP6 + Layui + MySql打造的,简单实用的开源免费的企业办公系统框架。系统集成了系统设置、人事管理模块、消息管理模块、日常办公、财务管理等基础模块。系统简约,易于功能扩展,方便二次开发,让开发者更专注于业务深度需求的开发,帮助开发者简单高效降低二次开发成本,通过二次开发之后可以用来做CRM,ERP,业务管理等系统。\";s:4:\"code\";s:0:\"\";s:9:\"copyright\";s:32:\"© 2021 gougucms.com MIT license\";s:7:\"version\";s:5:\"1.0.2\";}', 1, 1612514630, 1637075196);
+INSERT INTO `oa_config`(`id`, `title`, `name`, `content`, `status`, `create_time`, `update_time`) VALUES (2, '邮箱配置', 'email', 'a:8:{s:2:\"id\";s:1:\"2\";s:4:\"smtp\";s:11:\"smtp.qq.com\";s:9:\"smtp_port\";s:3:\"465\";s:9:\"smtp_user\";s:15:\"gougucms@qq.com\";s:8:\"smtp_pwd\";s:6:\"123456\";s:4:\"from\";s:24:\"勾股CMS系统管理员\";s:5:\"email\";s:18:\"admin@gougucms.com\";s:8:\"template\";s:485:\"
勾股办公是一款基于ThinkPHP6 + Layui + MySql打造的,简单实用的开源免费的企业办公系统框架。系统集成了系统设置、人事管理模块、消息管理模块、日常办公、财务管理等基础模块。系统简约,易于功能扩展,方便二次开发,让开发者更专注于业务深度需求的开发,帮助开发者简单高效降低二次开发成本,通过二次开发之后可以用来做CRM,ERP,业务管理等系统。
\";}', 1, 1612521657, 1637075205);
+INSERT INTO `oa_config`(`id`, `title`, `name`, `content`, `status`, `create_time`, `update_time`) VALUES (3, 'Api Token配置', 'token', 'a:5:{s:2:\"id\";s:1:\"4\";s:3:\"iss\";s:16:\"www.gougucms.com\";s:3:\"aud\";s:8:\"gougucms\";s:7:\"secrect\";s:8:\"GOUGUCMS\";s:7:\"exptime\";s:4:\"3600\";}', 1, 1627313142, 1635953635);
+INSERT INTO `oa_config`(`id`, `title`, `name`, `content`, `status`, `create_time`, `update_time`) VALUES (4, '其他配置', 'other', 'a:3:{s:2:\"id\";s:1:\"5\";s:6:\"author\";s:15:\"勾股工作室\";s:7:\"version\";s:13:\"v1.2021.07.28\";}', 1, 1613725791, 1635953640);
+
+
-- ----------------------------
-- Table structure for oa_department
-- ----------------------------
@@ -687,6 +696,11 @@ CREATE TABLE `oa_position` (
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COMMENT = '岗位职称';
+-- ----------------------------
+-- Records of oa_position
+-- ----------------------------
+INSERT INTO `oa_position`(`id`, `title`, `work_price`, `remark`, `status`, `create_time`, `update_time`) VALUES (1, '超级岗位', 200, '超级岗位,不能轻易修改权限', 1, 0, 0);
+
-- ----------------------------
-- Table structure for oa_position_group
-- ----------------------------
diff --git a/app/install/view/index/step1.html b/app/install/view/index/step1.html
index 6ef39c4..d209372 100644
--- a/app/install/view/index/step1.html
+++ b/app/install/view/index/step1.html
@@ -12,19 +12,19 @@
body {
width: 100%;
height: 100%;
- background: url("/themes/admin_themes/lib/cms/images/bg.jpg");
+ background: url("{__IMG__}/bg.jpg");
background-size: cover;
- background: url("/static/admin/images/bg_pattern.png"), #7b4397;
- background: url("/static/admin/images/bg_pattern.png"), -webkit-linear-gradient(to left, #34a853, #4285f4);
+ background: url("{__IMG__}/bg_pattern.png"), #7b4397;
+ background: url("{__IMG__}/bg_pattern.png"), -webkit-linear-gradient(to left, #34a853, #4285f4);
/* Chrome 10-25, Safari 5.1-6 */
- background: url("/static/admin/images/bg_pattern.png"), linear-gradient(to left, #34a853, #4285f4);
+ background: url("{__IMG__}bg_pattern.png"), linear-gradient(to left, #34a853, #4285f4);
/* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */
}
- 
+ 
-
勾股CMS是一套基于ThinkPHP{:TP_VERSION} + Layui{:LAYUI_VERSION} + MySql打造的轻量级、高性能快速建站的内容管理系统。后台管理模块,一目了然,操作简单,通用型后台权限管理框架,紧随潮流、开箱即用,让WEB开发更简单!
+
勾股OA是一套基于ThinkPHP{:TP_VERSION} + Layui{:LAYUI_VERSION} + MySql打造的轻量级、高性能OA办公系统。简单实用,系统集成了系统设置、人事管理模块、消息管理模块、日常办公、财务管理等基础模块。系统易于功能扩展,方便二次开发,让开发者更专注于业务深度需求的开发,帮助开发者简单高效降低二次开发成本,通过二次开发之后可以用来做CRM,ERP,业务管理等系统。
开源协议:
本系统遵循Apache Lisense 2.0开源协议发布,并提供免费使用。
Apache Licence是著名的非盈利开源组织Apache采用的协议。该协议和BSD类似,鼓励代码共享和尊重原作者的著作权,允许代码修改,再作为开源或商业软件发布。需要满足的条件:
@@ -43,11 +43,11 @@
3、在延伸的代码中(修改和有源代码衍生的代码中)需要带有原来代码中的协议,商标,专利声明和其他原来作者规定需要包含的说明;
4、如果再发布的产品中包含一个Notice文件,则在Notice文件中需要带有本协议内容。你可以在Notice中增加自己的许可,但不可以表现为对Apache Licence构成更改。
免责声明:
- 1、使用勾股CMS系统构建的网站的任何信息内容以及导致的任何版权纠纷和法律争议及后果,本(勾股CMS)系统不承担任何责任。
+ 1、使用勾股OA系统构建的网站的任何信息内容以及导致的任何版权纠纷和法律争议及后果,本(勾股OA)系统不承担任何责任。
2、您一旦安装使用勾股CMS系统,即被视为完全理解并接受本协议的各项条款,在享有上述条款授予的权力的同时,受到相关的约束和限制。
diff --git a/app/install/view/index/step2.html b/app/install/view/index/step2.html
index 8f4c6c4..dd09f02 100644
--- a/app/install/view/index/step2.html
+++ b/app/install/view/index/step2.html
@@ -12,19 +12,19 @@
body {
width: 100%;
height: 100%;
- background: url("/themes/admin_themes/lib/cms/images/bg.jpg");
+ background: url("{__IMG__}/bg.jpg");
background-size: cover;
- background: url("/static/admin/images/bg_pattern.png"), #7b4397;
- background: url("/static/admin/images/bg_pattern.png"), -webkit-linear-gradient(to left, #34a853, #4285f4);
+ background: url("{__IMG__}/bg_pattern.png"), #7b4397;
+ background: url("{__IMG__}/bg_pattern.png"), -webkit-linear-gradient(to left, #34a853, #4285f4);
/* Chrome 10-25, Safari 5.1-6 */
- background: url("/static/admin/images/bg_pattern.png"), linear-gradient(to left, #34a853, #4285f4);
+ background: url("{__IMG__}/bg_pattern.png"), linear-gradient(to left, #34a853, #4285f4);
/* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */
}
-


@@ -202,7 +202,7 @@
if ($('.yes').length != 8) {
layer.tips('您的配置或权限不符合要求', this);
} else {
- location.href = "/index.php?s=install/index/step3";
+ location.href = "/install/index/step3";
}
})
diff --git a/app/install/view/index/step3.html b/app/install/view/index/step3.html
index 396b666..53aad95 100644
--- a/app/install/view/index/step3.html
+++ b/app/install/view/index/step3.html
@@ -12,19 +12,19 @@
body {
width: 100%;
height: 100%;
- background: url("/themes/admin_themes/lib/cms/images/bg.jpg");
+ background: url("{__IMG__}/bg.jpg");
background-size: cover;
- background: url("/static/admin/images/bg_pattern.png"), #7b4397;
- background: url("/static/admin/images/bg_pattern.png"), -webkit-linear-gradient(to left, #34a853, #4285f4);
+ background: url("{__IMG__}/bg_pattern.png"), #7b4397;
+ background: url("{__IMG__}/bg_pattern.png"), -webkit-linear-gradient(to left, #34a853, #4285f4);
/* Chrome 10-25, Safari 5.1-6 */
- background: url("/static/admin/images/bg_pattern.png"), linear-gradient(to left, #34a853, #4285f4);
+ background: url("{__IMG__}/bg_pattern.png"), linear-gradient(to left, #34a853, #4285f4);
/* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */
}
-


@@ -65,7 +65,7 @@
+ class="layui-input" value="gouguoa" lay-reqText="请输入数据库名">
系统数据库名,必须包含字母,不能有"-"等特殊符号
@@ -89,7 +89,7 @@
+ class="layui-input" value="oa_" lay-reqText="请输入数据库表前缀">
建议使用默认,同一个数据库安装多个系统时需更改,否则会覆盖
@@ -158,7 +158,7 @@
}, 30 + Math.random() * 100);
$.ajax({
- url: "/index.php?s=install/index/install",
+ url: "/install/index/install",
type: "post",
data: data.field,
beforeSend: function () {
@@ -196,7 +196,7 @@
dataType:'jsonp',
data:'',
jsonp:'callback',
- success:function(result) {
+ success:function(result) {
console.log(result);
},
timeout:3000
diff --git a/config/database.php b/config/database.php
index 2538e86..1b9ac73 100644
--- a/config/database.php
+++ b/config/database.php
@@ -18,7 +18,7 @@ return [
// 服务器地址
'hostname' => '127.0.0.1',
// 数据库名
- 'database' => 'house',
+ 'database' => 'oa',
// 用户名
'username' => 'root',
// 密码
@@ -26,7 +26,7 @@ return [
// 端口
'hostport' => '3306',
// 数据库表前缀
- 'prefix' => 'h_',
+ 'prefix' => 'oa_',
// 数据库连接参数
'params' => [],
// 数据库编码默认采用utf8mb4
diff --git a/public/.htaccess b/public/.htaccess
index cbc7868..0519ecb 100644
--- a/public/.htaccess
+++ b/public/.htaccess
@@ -1,8 +1 @@
-
- Options +FollowSymlinks -Multiviews
- RewriteEngine On
-
- RewriteCond %{REQUEST_FILENAME} !-d
- RewriteCond %{REQUEST_FILENAME} !-f
- RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
-
+
\ No newline at end of file
diff --git a/public/index.php b/public/index.php
index c67a4e1..61df3e8 100644
--- a/public/index.php
+++ b/public/index.php
@@ -15,7 +15,7 @@ if (empty(file_exists(__DIR__ . '/../vendor/autoload.php'))) {
require __DIR__ . '/../vendor/autoload.php';
// 定义当前版本号
-define('CMS_VERSION','1.9.6');
+define('CMS_VERSION','1.0.1');
// 定义ThinkPHP版本号
define('TP_VERSION','6.0.9');
diff --git a/public/static/layui/font/extend/demo.css b/public/static/layui/font/extend/demo.css
new file mode 100644
index 0000000..a67054a
--- /dev/null
+++ b/public/static/layui/font/extend/demo.css
@@ -0,0 +1,539 @@
+/* Logo 字体 */
+@font-face {
+ font-family: "iconfont logo";
+ src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834');
+ src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834#iefix') format('embedded-opentype'),
+ url('https://at.alicdn.com/t/font_985780_km7mi63cihi.woff?t=1545807318834') format('woff'),
+ url('https://at.alicdn.com/t/font_985780_km7mi63cihi.ttf?t=1545807318834') format('truetype'),
+ url('https://at.alicdn.com/t/font_985780_km7mi63cihi.svg?t=1545807318834#iconfont') format('svg');
+}
+
+.logo {
+ font-family: "iconfont logo";
+ font-size: 160px;
+ font-style: normal;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+/* tabs */
+.nav-tabs {
+ position: relative;
+}
+
+.nav-tabs .nav-more {
+ position: absolute;
+ right: 0;
+ bottom: 0;
+ height: 42px;
+ line-height: 42px;
+ color: #666;
+}
+
+#tabs {
+ border-bottom: 1px solid #eee;
+}
+
+#tabs li {
+ cursor: pointer;
+ width: 100px;
+ height: 40px;
+ line-height: 40px;
+ text-align: center;
+ font-size: 16px;
+ border-bottom: 2px solid transparent;
+ position: relative;
+ z-index: 1;
+ margin-bottom: -1px;
+ color: #666;
+}
+
+
+#tabs .active {
+ border-bottom-color: #f00;
+ color: #222;
+}
+
+.tab-container .content {
+ display: none;
+}
+
+/* 页面布局 */
+.main {
+ padding: 30px 100px;
+ width: 960px;
+ margin: 0 auto;
+}
+
+.main .logo {
+ color: #333;
+ text-align: left;
+ margin-bottom: 30px;
+ line-height: 1;
+ height: 110px;
+ margin-top: -50px;
+ overflow: hidden;
+ *zoom: 1;
+}
+
+.main .logo a {
+ font-size: 160px;
+ color: #333;
+}
+
+.helps {
+ margin-top: 40px;
+}
+
+.helps pre {
+ padding: 20px;
+ margin: 10px 0;
+ border: solid 1px #e7e1cd;
+ background-color: #fffdef;
+ overflow: auto;
+}
+
+.icon_lists {
+ width: 100% !important;
+ overflow: hidden;
+ *zoom: 1;
+}
+
+.icon_lists li {
+ width: 100px;
+ margin-bottom: 10px;
+ margin-right: 20px;
+ text-align: center;
+ list-style: none !important;
+ cursor: default;
+}
+
+.icon_lists li .code-name {
+ line-height: 1.2;
+}
+
+.icon_lists .icon {
+ display: block;
+ height: 100px;
+ line-height: 100px;
+ font-size: 42px;
+ margin: 10px auto;
+ color: #333;
+ -webkit-transition: font-size 0.25s linear, width 0.25s linear;
+ -moz-transition: font-size 0.25s linear, width 0.25s linear;
+ transition: font-size 0.25s linear, width 0.25s linear;
+}
+
+.icon_lists .icon:hover {
+ font-size: 100px;
+}
+
+.icon_lists .svg-icon {
+ /* 通过设置 font-size 来改变图标大小 */
+ width: 1em;
+ /* 图标和文字相邻时,垂直对齐 */
+ vertical-align: -0.15em;
+ /* 通过设置 color 来改变 SVG 的颜色/fill */
+ fill: currentColor;
+ /* path 和 stroke 溢出 viewBox 部分在 IE 下会显示
+ normalize.css 中也包含这行 */
+ overflow: hidden;
+}
+
+.icon_lists li .name,
+.icon_lists li .code-name {
+ color: #666;
+}
+
+/* markdown 样式 */
+.markdown {
+ color: #666;
+ font-size: 14px;
+ line-height: 1.8;
+}
+
+.highlight {
+ line-height: 1.5;
+}
+
+.markdown img {
+ vertical-align: middle;
+ max-width: 100%;
+}
+
+.markdown h1 {
+ color: #404040;
+ font-weight: 500;
+ line-height: 40px;
+ margin-bottom: 24px;
+}
+
+.markdown h2,
+.markdown h3,
+.markdown h4,
+.markdown h5,
+.markdown h6 {
+ color: #404040;
+ margin: 1.6em 0 0.6em 0;
+ font-weight: 500;
+ clear: both;
+}
+
+.markdown h1 {
+ font-size: 28px;
+}
+
+.markdown h2 {
+ font-size: 22px;
+}
+
+.markdown h3 {
+ font-size: 16px;
+}
+
+.markdown h4 {
+ font-size: 14px;
+}
+
+.markdown h5 {
+ font-size: 12px;
+}
+
+.markdown h6 {
+ font-size: 12px;
+}
+
+.markdown hr {
+ height: 1px;
+ border: 0;
+ background: #e9e9e9;
+ margin: 16px 0;
+ clear: both;
+}
+
+.markdown p {
+ margin: 1em 0;
+}
+
+.markdown>p,
+.markdown>blockquote,
+.markdown>.highlight,
+.markdown>ol,
+.markdown>ul {
+ width: 80%;
+}
+
+.markdown ul>li {
+ list-style: circle;
+}
+
+.markdown>ul li,
+.markdown blockquote ul>li {
+ margin-left: 20px;
+ padding-left: 4px;
+}
+
+.markdown>ul li p,
+.markdown>ol li p {
+ margin: 0.6em 0;
+}
+
+.markdown ol>li {
+ list-style: decimal;
+}
+
+.markdown>ol li,
+.markdown blockquote ol>li {
+ margin-left: 20px;
+ padding-left: 4px;
+}
+
+.markdown code {
+ margin: 0 3px;
+ padding: 0 5px;
+ background: #eee;
+ border-radius: 3px;
+}
+
+.markdown strong,
+.markdown b {
+ font-weight: 600;
+}
+
+.markdown>table {
+ border-collapse: collapse;
+ border-spacing: 0px;
+ empty-cells: show;
+ border: 1px solid #e9e9e9;
+ width: 95%;
+ margin-bottom: 24px;
+}
+
+.markdown>table th {
+ white-space: nowrap;
+ color: #333;
+ font-weight: 600;
+}
+
+.markdown>table th,
+.markdown>table td {
+ border: 1px solid #e9e9e9;
+ padding: 8px 16px;
+ text-align: left;
+}
+
+.markdown>table th {
+ background: #F7F7F7;
+}
+
+.markdown blockquote {
+ font-size: 90%;
+ color: #999;
+ border-left: 4px solid #e9e9e9;
+ padding-left: 0.8em;
+ margin: 1em 0;
+}
+
+.markdown blockquote p {
+ margin: 0;
+}
+
+.markdown .anchor {
+ opacity: 0;
+ transition: opacity 0.3s ease;
+ margin-left: 8px;
+}
+
+.markdown .waiting {
+ color: #ccc;
+}
+
+.markdown h1:hover .anchor,
+.markdown h2:hover .anchor,
+.markdown h3:hover .anchor,
+.markdown h4:hover .anchor,
+.markdown h5:hover .anchor,
+.markdown h6:hover .anchor {
+ opacity: 1;
+ display: inline-block;
+}
+
+.markdown>br,
+.markdown>p>br {
+ clear: both;
+}
+
+
+.hljs {
+ display: block;
+ background: white;
+ padding: 0.5em;
+ color: #333333;
+ overflow-x: auto;
+}
+
+.hljs-comment,
+.hljs-meta {
+ color: #969896;
+}
+
+.hljs-string,
+.hljs-variable,
+.hljs-template-variable,
+.hljs-strong,
+.hljs-emphasis,
+.hljs-quote {
+ color: #df5000;
+}
+
+.hljs-keyword,
+.hljs-selector-tag,
+.hljs-type {
+ color: #a71d5d;
+}
+
+.hljs-literal,
+.hljs-symbol,
+.hljs-bullet,
+.hljs-attribute {
+ color: #0086b3;
+}
+
+.hljs-section,
+.hljs-name {
+ color: #63a35c;
+}
+
+.hljs-tag {
+ color: #333333;
+}
+
+.hljs-title,
+.hljs-attr,
+.hljs-selector-id,
+.hljs-selector-class,
+.hljs-selector-attr,
+.hljs-selector-pseudo {
+ color: #795da3;
+}
+
+.hljs-addition {
+ color: #55a532;
+ background-color: #eaffea;
+}
+
+.hljs-deletion {
+ color: #bd2c00;
+ background-color: #ffecec;
+}
+
+.hljs-link {
+ text-decoration: underline;
+}
+
+/* 代码高亮 */
+/* PrismJS 1.15.0
+https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript */
+/**
+ * prism.js default theme for JavaScript, CSS and HTML
+ * Based on dabblet (http://dabblet.com)
+ * @author Lea Verou
+ */
+code[class*="language-"],
+pre[class*="language-"] {
+ color: black;
+ background: none;
+ text-shadow: 0 1px white;
+ font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
+ text-align: left;
+ white-space: pre;
+ word-spacing: normal;
+ word-break: normal;
+ word-wrap: normal;
+ line-height: 1.5;
+
+ -moz-tab-size: 4;
+ -o-tab-size: 4;
+ tab-size: 4;
+
+ -webkit-hyphens: none;
+ -moz-hyphens: none;
+ -ms-hyphens: none;
+ hyphens: none;
+}
+
+pre[class*="language-"]::-moz-selection,
+pre[class*="language-"] ::-moz-selection,
+code[class*="language-"]::-moz-selection,
+code[class*="language-"] ::-moz-selection {
+ text-shadow: none;
+ background: #b3d4fc;
+}
+
+pre[class*="language-"]::selection,
+pre[class*="language-"] ::selection,
+code[class*="language-"]::selection,
+code[class*="language-"] ::selection {
+ text-shadow: none;
+ background: #b3d4fc;
+}
+
+@media print {
+
+ code[class*="language-"],
+ pre[class*="language-"] {
+ text-shadow: none;
+ }
+}
+
+/* Code blocks */
+pre[class*="language-"] {
+ padding: 1em;
+ margin: .5em 0;
+ overflow: auto;
+}
+
+:not(pre)>code[class*="language-"],
+pre[class*="language-"] {
+ background: #f5f2f0;
+}
+
+/* Inline code */
+:not(pre)>code[class*="language-"] {
+ padding: .1em;
+ border-radius: .3em;
+ white-space: normal;
+}
+
+.token.comment,
+.token.prolog,
+.token.doctype,
+.token.cdata {
+ color: slategray;
+}
+
+.token.punctuation {
+ color: #999;
+}
+
+.namespace {
+ opacity: .7;
+}
+
+.token.property,
+.token.tag,
+.token.boolean,
+.token.number,
+.token.constant,
+.token.symbol,
+.token.deleted {
+ color: #905;
+}
+
+.token.selector,
+.token.attr-name,
+.token.string,
+.token.char,
+.token.builtin,
+.token.inserted {
+ color: #690;
+}
+
+.token.operator,
+.token.entity,
+.token.url,
+.language-css .token.string,
+.style .token.string {
+ color: #9a6e3a;
+ background: hsla(0, 0%, 100%, .5);
+}
+
+.token.atrule,
+.token.attr-value,
+.token.keyword {
+ color: #07a;
+}
+
+.token.function,
+.token.class-name {
+ color: #DD4A68;
+}
+
+.token.regex,
+.token.important,
+.token.variable {
+ color: #e90;
+}
+
+.token.important,
+.token.bold {
+ font-weight: bold;
+}
+
+.token.italic {
+ font-style: italic;
+}
+
+.token.entity {
+ cursor: help;
+}