mas-server 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.vscode/settings.json +112 -0
- package/README.md +1 -0
- package/package.json +25 -0
- package/src/config/api.res.json +1 -0
- package/src/config/api.tree.json +1 -0
- package/src/config/apiModules/del.module +6 -0
- package/src/config/apiModules/get.module +6 -0
- package/src/config/apiModules/set.module +6 -0
- package/src/config/config.schema.js +29 -0
- package/src/index.js +103 -0
- package/src/public/doc/css/app.722f60c4.css +1 -0
- package/src/public/doc/css/chunk-287b9965.80548a4b.css +1 -0
- package/src/public/doc/css/chunk-vendors.a16c4353.css +1 -0
- package/src/public/doc/favicon.ico +0 -0
- package/src/public/doc/fonts/element-icons.535877f5.woff +0 -0
- package/src/public/doc/fonts/element-icons.732389de.ttf +0 -0
- package/src/public/doc/img/jsoneditor-icons.256e3abc.svg +893 -0
- package/src/public/doc/index.html +1 -0
- package/src/public/doc/js/app.9ce10690.js +2 -0
- package/src/public/doc/js/app.9ce10690.js.map +1 -0
- package/src/public/doc/js/chunk-287b9965.77cfd27f.js +32 -0
- package/src/public/doc/js/chunk-287b9965.77cfd27f.js.map +1 -0
- package/src/public/doc/js/chunk-vendors.7c84e9a7.js +35 -0
- package/src/public/doc/js/chunk-vendors.7c84e9a7.js.map +1 -0
- package/src/public/index.html +15 -0
- package/src/state.js +6 -0
- package/src/utils/DataVerified.js +35 -0
- package/src/utils/beforeCreate.js +19 -0
- package/src/utils/createApi.js +34 -0
- package/src/utils/createApiFile.js +40 -0
- package/src/utils/createSqlForm.js +7 -0
- package/src/utils/encrypt.js +1 -0
- package/src/utils/getDir.js +60 -0
- package/src/utils/logs.js +16 -0
- package/src/utils/masDoc.js +37 -0
- package/src/utils/masRoute.js +29 -0
- package/src/utils/quickSend.js +18 -0
- package/src/utils/token.js +57 -0
- package/test/.utils/api.js +4 -0
- package/test/.utils/apis.js +5 -0
- package/test/.utils/beforeIndex.js +4 -0
- package/test/.utils/createForm.js +4 -0
- package/test/config/api.config.json +7 -0
- package/test/config/api.config.k.json +1 -0
- package/test/config/config.js +22 -0
- package/test/config/sqlform.config.js +23 -0
- package/test/index.js +12 -0
- package/test/public/1.txt +1 -0
- package/test/serverLogs/2022-10-29.log +6 -0
- package/test/serverLogs/2022-10-30.log +58 -0
- package/test/src/$form.js +1 -0
- package/test/src/api/index.js +3 -0
- package/test/src/api/test.js +9 -0
- package/test/src/api/vip/del.js +6 -0
- package/test/src/api/vip/get.js +6 -0
- package/test/src/api/vip/set.js +6 -0
- package/test/src/api/vip666.js +4 -0
- package/test/src/debug.js +2 -0
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
{
|
|
2
|
+
"json.schemas": [
|
|
3
|
+
// 接口配置规范
|
|
4
|
+
{
|
|
5
|
+
"fileMatch": ["api.config.json"],
|
|
6
|
+
"schema": {
|
|
7
|
+
"type": "object",
|
|
8
|
+
"patternProperties": {
|
|
9
|
+
"^[a-zA-Z1-9/]+$": {
|
|
10
|
+
"type": "object",
|
|
11
|
+
"properties": {
|
|
12
|
+
"name": {
|
|
13
|
+
"type": "string",
|
|
14
|
+
"description": "接口名称"
|
|
15
|
+
},
|
|
16
|
+
"des": {
|
|
17
|
+
"type": "string",
|
|
18
|
+
"description": "接口描述"
|
|
19
|
+
},
|
|
20
|
+
"methods": {
|
|
21
|
+
"type": "string",
|
|
22
|
+
"enum": ["GET", "POST", "ALL"],
|
|
23
|
+
"description": "请求方法"
|
|
24
|
+
},
|
|
25
|
+
"header": {
|
|
26
|
+
"type": "array",
|
|
27
|
+
"description": "请求头参数",
|
|
28
|
+
"items": {
|
|
29
|
+
"type": "object",
|
|
30
|
+
"properties": {
|
|
31
|
+
"name": {
|
|
32
|
+
"type": "string",
|
|
33
|
+
"description": "参数名称"
|
|
34
|
+
},
|
|
35
|
+
"type": {
|
|
36
|
+
"type": "string",
|
|
37
|
+
"description": "参数类型",
|
|
38
|
+
"enum": ["string", "number", "Array", "object"]
|
|
39
|
+
},
|
|
40
|
+
"optional": {
|
|
41
|
+
"type": "boolean",
|
|
42
|
+
"description": "参数是否可空,默认不能空"
|
|
43
|
+
},
|
|
44
|
+
"des": {
|
|
45
|
+
"type": "string",
|
|
46
|
+
"description": "参数描述"
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
"token": {
|
|
52
|
+
"type": "boolean",
|
|
53
|
+
"description": "是否启用token,默认关闭"
|
|
54
|
+
},
|
|
55
|
+
"permission": {
|
|
56
|
+
"type": "array",
|
|
57
|
+
"description": "该接口需要的权限",
|
|
58
|
+
"items": {
|
|
59
|
+
"type": "string"
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
"Content-Type": {
|
|
63
|
+
"type": "string",
|
|
64
|
+
"description": "请求体类型"
|
|
65
|
+
},
|
|
66
|
+
"example": {
|
|
67
|
+
"type": "object",
|
|
68
|
+
"description": "请求示例"
|
|
69
|
+
},
|
|
70
|
+
"checkData": {
|
|
71
|
+
"type": "array",
|
|
72
|
+
"description": "数据效验,可直接写字段名,也可描述字段名",
|
|
73
|
+
"items": {
|
|
74
|
+
"anyOf": [
|
|
75
|
+
{
|
|
76
|
+
"type": "string"
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"type": "object",
|
|
80
|
+
"required": ["name"],
|
|
81
|
+
"properties": {
|
|
82
|
+
"name": {
|
|
83
|
+
"type": "string",
|
|
84
|
+
"description": "参数名称"
|
|
85
|
+
},
|
|
86
|
+
"type": {
|
|
87
|
+
"type": "string",
|
|
88
|
+
"description": "参数类型",
|
|
89
|
+
"enum": ["string", "number", "Array", "object"]
|
|
90
|
+
},
|
|
91
|
+
"optional": {
|
|
92
|
+
"type": "boolean",
|
|
93
|
+
"description": "参数是否可空,默认不能空"
|
|
94
|
+
},
|
|
95
|
+
"des": {
|
|
96
|
+
"type": "string",
|
|
97
|
+
"description": "参数描述"
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
]
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
},
|
|
107
|
+
"additionalProperties": false
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
],
|
|
111
|
+
"javascript.format.semicolons": "insert"
|
|
112
|
+
}
|
package/README.md
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
一款面向中小型项目的后端框架
|
package/package.json
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "mas-server",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "一款面向中小型项目的后端框架",
|
|
5
|
+
"main": "./src/index.js",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"test": "nodemon --exec npm run serve -i api.config.k.json -i api.config.json -i api.tree.json -i $form.js",
|
|
8
|
+
"serve": "node ./test/.utils/beforeIndex.js && node ./test/index.js",
|
|
9
|
+
"create": "node ./test/.utils/createForm.js",
|
|
10
|
+
"api": "node ./test/.utils/api.js",
|
|
11
|
+
"apis": "node ./test/.utils/apis.js"
|
|
12
|
+
},
|
|
13
|
+
"keywords": ["后端","express"],
|
|
14
|
+
"author": "tingxi8087",
|
|
15
|
+
"license": "ISC",
|
|
16
|
+
"dependencies": {
|
|
17
|
+
"cors": "^2.8.5",
|
|
18
|
+
"express": "^4.18.2",
|
|
19
|
+
"express-formidable": "^1.2.0",
|
|
20
|
+
"express-ip": "^1.0.4",
|
|
21
|
+
"masmysql": "^1.0.1",
|
|
22
|
+
"masutils": "^1.0.8",
|
|
23
|
+
"moment": "^2.29.4"
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"api":{"index":"api","test":"api"}}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @typedef {object} Config
|
|
3
|
+
* @property {string} projectName 项目名称
|
|
4
|
+
* @property {number} port 端口
|
|
5
|
+
* @property {boolean} apidoc 是否开启接口文档
|
|
6
|
+
* @property {boolean} cors 是否开启跨域
|
|
7
|
+
* @property {object} logs 日志配置
|
|
8
|
+
* @property {boolean} logs.open 是否开启
|
|
9
|
+
* @property {boolean} logs.debug 是否开启调试模式
|
|
10
|
+
* @property {object} token token配置
|
|
11
|
+
* @property {boolean} token.open 是否开启
|
|
12
|
+
* @property {string} token.pwd token密钥
|
|
13
|
+
* @property {boolean} useSql 是否使用数据库
|
|
14
|
+
* @property {object} sql 数据库配置
|
|
15
|
+
* @property {string} sql.host 数据库地址
|
|
16
|
+
* @property {string} sql.user 数据库账号
|
|
17
|
+
* @property {string} sql.password 数据库密码
|
|
18
|
+
* @property {string} sql.database 数据库名称
|
|
19
|
+
*/
|
|
20
|
+
const { $sqlForm } = require('masmysql');
|
|
21
|
+
module.exports = {
|
|
22
|
+
/**
|
|
23
|
+
* @desc: 数据库规范
|
|
24
|
+
* @param {Config} data
|
|
25
|
+
* @return {Config} 返回配置
|
|
26
|
+
*/
|
|
27
|
+
configSchema: (data) => data,
|
|
28
|
+
$sqlForm
|
|
29
|
+
};
|
package/src/index.js
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
const express = require("express");
|
|
2
|
+
const formidable = require('express-formidable');
|
|
3
|
+
const cors = require('cors');
|
|
4
|
+
const fs = require('fs');
|
|
5
|
+
const path = require('path');
|
|
6
|
+
const { tip } = require("masutils");
|
|
7
|
+
const configSchema = require('./config/config.schema');
|
|
8
|
+
const state = require("./state");
|
|
9
|
+
const beforeIndex = require('./utils/beforeCreate');
|
|
10
|
+
const masmysql = require('masmysql');
|
|
11
|
+
const { sql, setSqlConfig, getSqlFormKey } = require('masmysql');
|
|
12
|
+
const createSqlForm = require("./utils/createSqlForm");
|
|
13
|
+
const getDir = require("./utils/getDir");
|
|
14
|
+
const createApi = require("./utils/createApi");
|
|
15
|
+
const createApiFile = require("./utils/createApiFile");
|
|
16
|
+
const createForm = (dirname) => {
|
|
17
|
+
const config = require(path.join(dirname, "/config", "config.js"));
|
|
18
|
+
const form = require(path.join(dirname, "/config", "/sqlform.config.js"));
|
|
19
|
+
createSqlForm(config.sql, form);
|
|
20
|
+
};
|
|
21
|
+
const createCode = (dirname) => {
|
|
22
|
+
createApi(dirname);
|
|
23
|
+
};
|
|
24
|
+
const createApis = (dirname) => {
|
|
25
|
+
createApiFile(dirname);
|
|
26
|
+
};
|
|
27
|
+
let token=null
|
|
28
|
+
const getApp = (dirname) => {
|
|
29
|
+
const app = express();
|
|
30
|
+
const config = require(path.join(dirname, "/config", "config.js"));
|
|
31
|
+
state.config = config;
|
|
32
|
+
state.dirname = dirname;
|
|
33
|
+
// 工具包
|
|
34
|
+
const logs = require("./utils/logs");
|
|
35
|
+
const quickSend = require('./utils/quickSend');
|
|
36
|
+
token = require("./utils/token");
|
|
37
|
+
const DataVerified = require("./utils/DataVerified");
|
|
38
|
+
const masDoc = require("./utils/masDoc");
|
|
39
|
+
const apiConfig = require(path.join(dirname, "/config", "/api.config.json"));
|
|
40
|
+
// 处理数据库
|
|
41
|
+
config.useSql && setSqlConfig(config.sql);
|
|
42
|
+
config.useSql && sql.init();
|
|
43
|
+
config.useSql && getSqlFormKey(dirname + "/src/$form.js");
|
|
44
|
+
// 处理express
|
|
45
|
+
config.cors && app.use(cors());
|
|
46
|
+
app.use('/public', express.static(path.join(dirname, "/public")));
|
|
47
|
+
config.apidoc && app.use('/masPublic', express.static(path.join(__dirname, "/public")));;
|
|
48
|
+
app.use(formidable());
|
|
49
|
+
app.use(quickSend);
|
|
50
|
+
config.logs.open && app.use(require('express-ip')().getIpInfoMiddleware);
|
|
51
|
+
config.logs.open && app.use(logs);
|
|
52
|
+
config.token.open && app.use(token._main);
|
|
53
|
+
app.use(DataVerified);
|
|
54
|
+
masDoc(app, config);
|
|
55
|
+
getDir('/api').map(item => {
|
|
56
|
+
let model = require(dirname + `/src/${item}`);
|
|
57
|
+
if (typeof model === "function") {
|
|
58
|
+
if (apiConfig[item] && apiConfig[item].methods) {
|
|
59
|
+
app[apiConfig[item].methods](item, model);
|
|
60
|
+
} else {
|
|
61
|
+
app.all(item, model);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
app.all('/', async (req, res) => {
|
|
66
|
+
const index = require(path.join(dirname, "/src/api", "index.js"));
|
|
67
|
+
index(req, res);
|
|
68
|
+
});
|
|
69
|
+
app.all('*', (req, res) => {
|
|
70
|
+
res.return(404, 0, 404);
|
|
71
|
+
});
|
|
72
|
+
setTimeout(() => {
|
|
73
|
+
try {
|
|
74
|
+
require(path.join(dirname + '/src/debug.js'));
|
|
75
|
+
} catch (error) {
|
|
76
|
+
tip("debug.js报错!!!");
|
|
77
|
+
tip(error);
|
|
78
|
+
}
|
|
79
|
+
}, 1000);
|
|
80
|
+
return app;
|
|
81
|
+
};
|
|
82
|
+
/**
|
|
83
|
+
* @desc: 生成token
|
|
84
|
+
* @param {*} data 要放入token的数据
|
|
85
|
+
* @param {string} permission 角色权限
|
|
86
|
+
* @param {number} time token过期时间,设置此项传入数据必须为json数据,单位为s,默认为0,不过期
|
|
87
|
+
* @return {*}
|
|
88
|
+
*/
|
|
89
|
+
function createToken(data,permission,time) {
|
|
90
|
+
return token.createToken(data,time,permission,state.config)
|
|
91
|
+
}
|
|
92
|
+
module.exports = {
|
|
93
|
+
getApp,
|
|
94
|
+
configSchema: configSchema.configSchema,
|
|
95
|
+
$sqlForm: configSchema.$sqlForm,
|
|
96
|
+
beforeIndex,
|
|
97
|
+
masmysql,
|
|
98
|
+
createToken,
|
|
99
|
+
sql,
|
|
100
|
+
createForm,
|
|
101
|
+
createCode,
|
|
102
|
+
createApis
|
|
103
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
*{margin:0;padding:0}.jv-code *{background-color:#f7f7f7!important;color:#000!important}.jv-code{padding-top:0!important}.jv-node{min-height:25px!important;padding-top:6px}.jv-code .jv-push>:last-child{margin-left:13px!important}#app{font-family:Avenir,Helvetica,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#app,body,html{width:100%;height:100%;min-width:1200px;min-height:500px}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
div.jsoneditor .jsoneditor-search input{height:auto;border:inherit}div.jsoneditor .jsoneditor-search input:focus{border:none!important;-webkit-box-shadow:none!important;box-shadow:none!important}div.jsoneditor table{border-collapse:collapse;width:auto}div.jsoneditor td,div.jsoneditor th{padding:0;display:table-cell;text-align:left;vertical-align:inherit;border-radius:inherit}div.jsoneditor-field,div.jsoneditor-readonly,div.jsoneditor-value{border:1px solid transparent;min-height:16px;min-width:32px;padding:2px;margin:1px;word-wrap:break-word;float:left}div.jsoneditor-field p,div.jsoneditor-value p{margin:0}div.jsoneditor-value{word-break:break-word}div.jsoneditor-readonly{min-width:16px;color:grey}div.jsoneditor-empty{border-color:#d3d3d3;border-style:dashed;border-radius:2px}div.jsoneditor-field.jsoneditor-empty:after,div.jsoneditor-value.jsoneditor-empty:after{pointer-events:none;color:#d3d3d3;font-size:8pt}div.jsoneditor-field.jsoneditor-empty:after{content:"field"}div.jsoneditor-value.jsoneditor-empty:after{content:"value"}a.jsoneditor-value.jsoneditor-url,div.jsoneditor-value.jsoneditor-url{color:green;text-decoration:underline}a.jsoneditor-value.jsoneditor-url{display:inline-block;padding:2px;margin:2px}a.jsoneditor-value.jsoneditor-url:focus,a.jsoneditor-value.jsoneditor-url:hover{color:#ee422e}div.jsoneditor td.jsoneditor-separator{padding:3px 0;vertical-align:top;color:grey}div.jsoneditor-field.jsoneditor-highlight,div.jsoneditor-field[contenteditable=true]:focus,div.jsoneditor-field[contenteditable=true]:hover,div.jsoneditor-value.jsoneditor-highlight,div.jsoneditor-value[contenteditable=true]:focus,div.jsoneditor-value[contenteditable=true]:hover{background-color:#ffffab;border:1px solid #ff0;border-radius:2px}div.jsoneditor-field.jsoneditor-highlight-active,div.jsoneditor-field.jsoneditor-highlight-active:focus,div.jsoneditor-field.jsoneditor-highlight-active:hover,div.jsoneditor-value.jsoneditor-highlight-active,div.jsoneditor-value.jsoneditor-highlight-active:focus,div.jsoneditor-value.jsoneditor-highlight-active:hover{background-color:#fe0;border:1px solid #ffc700;border-radius:2px}div.jsoneditor-value.jsoneditor-string{color:green}div.jsoneditor-value.jsoneditor-array,div.jsoneditor-value.jsoneditor-object{min-width:16px;color:grey}div.jsoneditor-value.jsoneditor-number{color:#ee422e}div.jsoneditor-value.jsoneditor-boolean{color:#ff8c00}div.jsoneditor-value.jsoneditor-null{color:#004ed0}div.jsoneditor-value.jsoneditor-invalid{color:#000}div.jsoneditor-tree button{width:24px;height:24px;padding:0;margin:0;border:none;cursor:pointer;background:transparent url(../img/jsoneditor-icons.256e3abc.svg)}div.jsoneditor-mode-form tr.jsoneditor-expandable td.jsoneditor-tree,div.jsoneditor-mode-view tr.jsoneditor-expandable td.jsoneditor-tree{cursor:pointer}div.jsoneditor-tree button.jsoneditor-collapsed{background-position:0 -48px}div.jsoneditor-tree button.jsoneditor-expanded{background-position:0 -72px}div.jsoneditor-tree button.jsoneditor-contextmenu{background-position:-48px -72px}div.jsoneditor-tree button.jsoneditor-contextmenu.jsoneditor-selected,div.jsoneditor-tree button.jsoneditor-contextmenu:focus,div.jsoneditor-tree button.jsoneditor-contextmenu:hover,tr.jsoneditor-selected.jsoneditor-first button.jsoneditor-contextmenu{background-position:-48px -48px}div.jsoneditor-tree :focus{outline:none}div.jsoneditor-tree button:focus{background-color:#f5f5f5;outline:1px solid #e5e5e5}div.jsoneditor-tree button.jsoneditor-invisible{visibility:hidden;background:none}div.jsoneditor{color:#1a1a1a;border:1px solid #3883fa;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;height:100%;overflow:hidden;position:relative;padding:0;line-height:100%}div.jsoneditor-tree table.jsoneditor-tree{border-collapse:collapse;border-spacing:0;width:100%;margin:0}div.jsoneditor-outer{position:static;width:100%;height:100%;margin:-35px 0 0 0;padding:35px 0 0 0;-webkit-box-sizing:border-box;box-sizing:border-box}.ace-jsoneditor,textarea.jsoneditor-text{min-height:150px}div.jsoneditor-tree{width:100%;height:100%;position:relative;overflow:auto}textarea.jsoneditor-text{width:100%;height:100%;margin:0;-webkit-box-sizing:border-box;box-sizing:border-box;outline-width:0;border:none;background-color:#fff;resize:none}tr.jsoneditor-highlight,tr.jsoneditor-selected{background-color:#e6e6e6}tr.jsoneditor-selected button.jsoneditor-contextmenu,tr.jsoneditor-selected button.jsoneditor-dragarea{visibility:hidden}tr.jsoneditor-selected.jsoneditor-first button.jsoneditor-contextmenu,tr.jsoneditor-selected.jsoneditor-first button.jsoneditor-dragarea{visibility:visible}div.jsoneditor-tree button.jsoneditor-dragarea{background:url(../img/jsoneditor-icons.256e3abc.svg) -72px -72px;cursor:move}div.jsoneditor-tree button.jsoneditor-dragarea:focus,div.jsoneditor-tree button.jsoneditor-dragarea:hover,tr.jsoneditor-selected.jsoneditor-first button.jsoneditor-dragarea{background-position:-72px -48px}div.jsoneditor td,div.jsoneditor th,div.jsoneditor tr{padding:0;margin:0}div.jsoneditor td,div.jsoneditor td.jsoneditor-tree{vertical-align:top}.jsoneditor-schema-error,div.jsoneditor-field,div.jsoneditor-value,div.jsoneditor td,div.jsoneditor textarea,div.jsoneditor th{font-family:droid sans mono,consolas,monospace,courier new,courier,sans-serif;font-size:10pt;color:#1a1a1a}.jsoneditor-schema-error{cursor:default;display:inline-block;height:24px;line-height:24px;position:relative;text-align:center;width:24px}div.jsoneditor-tree .jsoneditor-schema-error{width:24px;height:24px;padding:0;margin:0 4px 0 0;background:url(../img/jsoneditor-icons.256e3abc.svg) -168px -48px}.jsoneditor-schema-error .jsoneditor-popover{background-color:#4c4c4c;border-radius:3px;-webkit-box-shadow:0 0 5px rgba(0,0,0,.4);box-shadow:0 0 5px rgba(0,0,0,.4);color:#fff;display:none;padding:7px 10px;position:absolute;width:200px;z-index:4}.jsoneditor-schema-error .jsoneditor-popover.jsoneditor-above{bottom:32px;left:-98px}.jsoneditor-schema-error .jsoneditor-popover.jsoneditor-below{top:32px;left:-98px}.jsoneditor-schema-error .jsoneditor-popover.jsoneditor-left{top:-7px;right:32px}.jsoneditor-schema-error .jsoneditor-popover.jsoneditor-right{top:-7px;left:32px}.jsoneditor-schema-error .jsoneditor-popover:before{border-right:7px solid transparent;border-left:7px solid transparent;content:"";display:block;left:50%;margin-left:-7px;position:absolute}.jsoneditor-schema-error .jsoneditor-popover.jsoneditor-above:before{border-top:7px solid #4c4c4c;bottom:-7px}.jsoneditor-schema-error .jsoneditor-popover.jsoneditor-below:before{border-bottom:7px solid #4c4c4c;top:-7px}.jsoneditor-schema-error .jsoneditor-popover.jsoneditor-left:before{border-left:7px solid #4c4c4c;right:-14px;left:inherit}.jsoneditor-schema-error .jsoneditor-popover.jsoneditor-left:before,.jsoneditor-schema-error .jsoneditor-popover.jsoneditor-right:before{border-top:7px solid transparent;border-bottom:7px solid transparent;content:"";top:19px;margin-left:inherit;margin-top:-7px;position:absolute}.jsoneditor-schema-error .jsoneditor-popover.jsoneditor-right:before{border-right:7px solid #4c4c4c;left:-14px}.jsoneditor-schema-error:focus .jsoneditor-popover,.jsoneditor-schema-error:hover .jsoneditor-popover{display:block;-webkit-animation:fade-in .3s linear 1,move-up .3s linear 1;-moz-animation:fade-in .3s linear 1,move-up .3s linear 1;-ms-animation:fade-in .3s linear 1,move-up .3s linear 1}@-webkit-keyframes fade-in{0%{opacity:0}to{opacity:1}}.jsoneditor .jsoneditor-text-errors{width:100%;border-collapse:collapse;background-color:#ffef8b;border-top:1px solid gold}.jsoneditor .jsoneditor-text-errors td{padding:3px 6px;vertical-align:middle}.jsoneditor-text-errors .jsoneditor-schema-error{border:none;width:24px;height:24px;padding:0;margin:0 4px 0 0;background:url(../img/jsoneditor-icons.256e3abc.svg) -168px -48px}div.jsoneditor-contextmenu-root{position:relative;width:0;height:0}div.jsoneditor-contextmenu{position:absolute;z-index:99999}div.jsoneditor-contextmenu,div.jsoneditor-contextmenu li,div.jsoneditor-contextmenu ul{-webkit-box-sizing:content-box;box-sizing:content-box}div.jsoneditor-contextmenu ul{position:relative;left:0;top:0;width:124px;background:#fff;border:1px solid #d3d3d3;-webkit-box-shadow:2px 2px 12px hsla(0,0%,50.2%,.3);box-shadow:2px 2px 12px hsla(0,0%,50.2%,.3);list-style:none;margin:0;padding:0}div.jsoneditor-contextmenu ul li button{padding:0;margin:0;width:124px;height:24px;border:none;cursor:pointer;color:#4d4d4d;background:transparent;font-size:10pt;font-family:arial,sans-serif;-webkit-box-sizing:border-box;box-sizing:border-box;line-height:26px;text-align:left}div.jsoneditor-contextmenu ul li button::-moz-focus-inner{padding:0;border:0}div.jsoneditor-contextmenu ul li button:focus,div.jsoneditor-contextmenu ul li button:hover{color:#1a1a1a;background-color:#f5f5f5;outline:none}div.jsoneditor-contextmenu ul li button.jsoneditor-default{width:92px}div.jsoneditor-contextmenu ul li button.jsoneditor-expand{float:right;width:32px;height:24px;border-left:1px solid #e5e5e5}div.jsoneditor-contextmenu div.jsoneditor-icon{float:left;width:24px;height:24px;border:none;padding:0;margin:0;background-image:url(../img/jsoneditor-icons.256e3abc.svg)}div.jsoneditor-contextmenu ul li button div.jsoneditor-expand{float:right;width:24px;height:24px;padding:0;margin:0 4px 0 0;background:url(../img/jsoneditor-icons.256e3abc.svg) 0 -72px;opacity:.4}div.jsoneditor-contextmenu ul li.jsoneditor-selected div.jsoneditor-expand,div.jsoneditor-contextmenu ul li button.jsoneditor-expand:focus div.jsoneditor-expand,div.jsoneditor-contextmenu ul li button.jsoneditor-expand:hover div.jsoneditor-expand,div.jsoneditor-contextmenu ul li button:focus div.jsoneditor-expand,div.jsoneditor-contextmenu ul li button:hover div.jsoneditor-expand{opacity:1}div.jsoneditor-contextmenu div.jsoneditor-separator{height:0;border-top:1px solid #e5e5e5;padding-top:5px;margin-top:5px}div.jsoneditor-contextmenu button.jsoneditor-remove>div.jsoneditor-icon{background-position:-24px -24px}div.jsoneditor-contextmenu button.jsoneditor-remove:focus>div.jsoneditor-icon,div.jsoneditor-contextmenu button.jsoneditor-remove:hover>div.jsoneditor-icon{background-position:-24px 0}div.jsoneditor-contextmenu button.jsoneditor-append>div.jsoneditor-icon{background-position:0 -24px}div.jsoneditor-contextmenu button.jsoneditor-append:focus>div.jsoneditor-icon,div.jsoneditor-contextmenu button.jsoneditor-append:hover>div.jsoneditor-icon{background-position:0 0}div.jsoneditor-contextmenu button.jsoneditor-insert>div.jsoneditor-icon{background-position:0 -24px}div.jsoneditor-contextmenu button.jsoneditor-insert:focus>div.jsoneditor-icon,div.jsoneditor-contextmenu button.jsoneditor-insert:hover>div.jsoneditor-icon{background-position:0 0}div.jsoneditor-contextmenu button.jsoneditor-duplicate>div.jsoneditor-icon{background-position:-48px -24px}div.jsoneditor-contextmenu button.jsoneditor-duplicate:focus>div.jsoneditor-icon,div.jsoneditor-contextmenu button.jsoneditor-duplicate:hover>div.jsoneditor-icon{background-position:-48px 0}div.jsoneditor-contextmenu button.jsoneditor-sort-asc>div.jsoneditor-icon{background-position:-168px -24px}div.jsoneditor-contextmenu button.jsoneditor-sort-asc:focus>div.jsoneditor-icon,div.jsoneditor-contextmenu button.jsoneditor-sort-asc:hover>div.jsoneditor-icon{background-position:-168px 0}div.jsoneditor-contextmenu button.jsoneditor-sort-desc>div.jsoneditor-icon{background-position:-192px -24px}div.jsoneditor-contextmenu button.jsoneditor-sort-desc:focus>div.jsoneditor-icon,div.jsoneditor-contextmenu button.jsoneditor-sort-desc:hover>div.jsoneditor-icon{background-position:-192px 0}div.jsoneditor-contextmenu ul li button.jsoneditor-selected,div.jsoneditor-contextmenu ul li button.jsoneditor-selected:focus,div.jsoneditor-contextmenu ul li button.jsoneditor-selected:hover{color:#fff;background-color:#ee422e}div.jsoneditor-contextmenu ul li{overflow:hidden}div.jsoneditor-contextmenu ul li ul{display:none;position:relative;left:-10px;top:0;border:none;-webkit-box-shadow:inset 0 0 10px hsla(0,0%,50.2%,.5);box-shadow:inset 0 0 10px hsla(0,0%,50.2%,.5);padding:0 10px;-webkit-transition:all .3s ease-out;transition:all .3s ease-out}div.jsoneditor-contextmenu ul li ul li button{padding-left:24px;-webkit-animation:all 1s ease-in-out;animation:all 1s ease-in-out}div.jsoneditor-contextmenu ul li ul li button:focus,div.jsoneditor-contextmenu ul li ul li button:hover{background-color:#f5f5f5}div.jsoneditor-contextmenu button.jsoneditor-type-string>div.jsoneditor-icon{background-position:-144px -24px}div.jsoneditor-contextmenu button.jsoneditor-type-string.jsoneditor-selected>div.jsoneditor-icon,div.jsoneditor-contextmenu button.jsoneditor-type-string:focus>div.jsoneditor-icon,div.jsoneditor-contextmenu button.jsoneditor-type-string:hover>div.jsoneditor-icon{background-position:-144px 0}div.jsoneditor-contextmenu button.jsoneditor-type-auto>div.jsoneditor-icon{background-position:-120px -24px}div.jsoneditor-contextmenu button.jsoneditor-type-auto.jsoneditor-selected>div.jsoneditor-icon,div.jsoneditor-contextmenu button.jsoneditor-type-auto:focus>div.jsoneditor-icon,div.jsoneditor-contextmenu button.jsoneditor-type-auto:hover>div.jsoneditor-icon{background-position:-120px 0}div.jsoneditor-contextmenu button.jsoneditor-type-object>div.jsoneditor-icon{background-position:-72px -24px}div.jsoneditor-contextmenu button.jsoneditor-type-object.jsoneditor-selected>div.jsoneditor-icon,div.jsoneditor-contextmenu button.jsoneditor-type-object:focus>div.jsoneditor-icon,div.jsoneditor-contextmenu button.jsoneditor-type-object:hover>div.jsoneditor-icon{background-position:-72px 0}div.jsoneditor-contextmenu button.jsoneditor-type-array>div.jsoneditor-icon{background-position:-96px -24px}div.jsoneditor-contextmenu button.jsoneditor-type-array.jsoneditor-selected>div.jsoneditor-icon,div.jsoneditor-contextmenu button.jsoneditor-type-array:focus>div.jsoneditor-icon,div.jsoneditor-contextmenu button.jsoneditor-type-array:hover>div.jsoneditor-icon{background-position:-96px 0}div.jsoneditor-contextmenu button.jsoneditor-type-modes>div.jsoneditor-icon{background-image:none;width:6px}div.jsoneditor-menu{width:100%;height:35px;padding:2px;margin:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:#fff;background-color:#3883fa;border-bottom:1px solid #3883fa}div.jsoneditor-menu>button,div.jsoneditor-menu>div.jsoneditor-modes>button{width:26px;height:26px;margin:2px;padding:0;border-radius:2px;border:1px solid transparent;background:transparent url(../img/jsoneditor-icons.256e3abc.svg);color:#fff;opacity:.8;font-family:arial,sans-serif;font-size:10pt;float:left}div.jsoneditor-menu>button:hover,div.jsoneditor-menu>div.jsoneditor-modes>button:hover{background-color:hsla(0,0%,100%,.2);border:1px solid hsla(0,0%,100%,.4)}div.jsoneditor-menu>button:active,div.jsoneditor-menu>button:focus,div.jsoneditor-menu>div.jsoneditor-modes>button:active,div.jsoneditor-menu>div.jsoneditor-modes>button:focus{background-color:hsla(0,0%,100%,.3)}div.jsoneditor-menu>button:disabled,div.jsoneditor-menu>div.jsoneditor-modes>button:disabled{opacity:.5}div.jsoneditor-menu>button.jsoneditor-collapse-all{background-position:0 -96px}div.jsoneditor-menu>button.jsoneditor-expand-all{background-position:0 -120px}div.jsoneditor-menu>button.jsoneditor-undo{background-position:-24px -96px}div.jsoneditor-menu>button.jsoneditor-undo:disabled{background-position:-24px -120px}div.jsoneditor-menu>button.jsoneditor-redo{background-position:-48px -96px}div.jsoneditor-menu>button.jsoneditor-redo:disabled{background-position:-48px -120px}div.jsoneditor-menu>button.jsoneditor-compact{background-position:-72px -96px}div.jsoneditor-menu>button.jsoneditor-format{background-position:-72px -120px}div.jsoneditor-menu>div.jsoneditor-modes{display:inline-block;float:left}div.jsoneditor-menu>div.jsoneditor-modes>button{background-image:none;width:auto;padding-left:6px;padding-right:6px}div.jsoneditor-menu>button.jsoneditor-separator,div.jsoneditor-menu>div.jsoneditor-modes>button.jsoneditor-separator{margin-left:10px}div.jsoneditor-menu a{font-family:arial,sans-serif;font-size:10pt;color:#fff;opacity:.8;vertical-align:middle}div.jsoneditor-menu a:hover{opacity:1}div.jsoneditor-menu a.jsoneditor-poweredBy{font-size:8pt;position:absolute;right:0;top:0;padding:10px}table.jsoneditor-search div.jsoneditor-results,table.jsoneditor-search input{font-family:arial,sans-serif;font-size:10pt;color:#1a1a1a;background:transparent}table.jsoneditor-search div.jsoneditor-results{color:#fff;padding-right:5px;line-height:24px}table.jsoneditor-search{position:absolute;right:4px;top:4px;border-collapse:collapse;border-spacing:0}table.jsoneditor-search div.jsoneditor-frame{border:1px solid transparent;background-color:#fff;padding:0 2px;margin:0}table.jsoneditor-search div.jsoneditor-frame table{border-collapse:collapse}table.jsoneditor-search input{width:120px;border:none;outline:none;margin:1px;line-height:20px}table.jsoneditor-search button{width:16px;height:24px;padding:0;margin:0;border:none;background:url(../img/jsoneditor-icons.256e3abc.svg);vertical-align:top}table.jsoneditor-search button:hover{background-color:transparent}table.jsoneditor-search button.jsoneditor-refresh{width:18px;background-position:-99px -73px}table.jsoneditor-search button.jsoneditor-next{cursor:pointer;background-position:-124px -73px}table.jsoneditor-search button.jsoneditor-next:hover{background-position:-124px -49px}table.jsoneditor-search button.jsoneditor-previous{cursor:pointer;background-position:-148px -73px;margin-right:2px}table.jsoneditor-search button.jsoneditor-previous:hover{background-position:-148px -49px}.ace_line_group[data-v-9b72cb1a]{text-align:left}.json-editor-container[data-v-9b72cb1a]{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.json-editor-container .tree-mode[data-v-9b72cb1a]{width:50%}.json-editor-container .code-mode[data-v-9b72cb1a]{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.jsoneditor-btns[data-v-9b72cb1a]{text-align:center;margin-top:10px}.jsoneditor-vue .jsoneditor-outer[data-v-9b72cb1a]{min-height:150px}.jsoneditor-vue div.jsoneditor-tree[data-v-9b72cb1a]{min-height:350px}.json-save-btn[data-v-9b72cb1a]{background-color:#20a0ff;border:none;color:#fff;padding:5px 10px;border-radius:5px;cursor:pointer}.json-save-btn[data-v-9b72cb1a]:focus{outline:none}.json-save-btn[disabled][data-v-9b72cb1a]{background-color:#1d8ce0;cursor:not-allowed}code[data-v-9b72cb1a]{background-color:#f5f5f5}.resdata[data-v-7a44908c]{transform:translateX(-20px)}.test[data-v-7a44908c]{width:50%}.wrapper[data-v-7a44908c]{flex-direction:column;height:100%;width:99%;margin:0 auto}.header[data-v-7a44908c]{align-items:center;padding:10px 30px;color:#aaa;display:flex;justify-content:space-between;cursor:default;box-sizing:border-box}.table[data-v-7a44908c]{height:100%;width:100%;position:relative;padding:10px;overflow:auto}.table .tit[data-v-7a44908c]{text-indent:2em;padding:10px 0;font-size:20px}.table .tit2[data-v-7a44908c]{text-indent:6em;padding-bottom:10px}.table2[data-v-7a44908c]{height:100%;width:100%;position:relative;padding:10px;overflow:auto;display:flex;padding-left:30px;flex-direction:column;align-items:flex-start}.table2 .top[data-v-7a44908c]{width:80%;display:flex;justify-content:space-between}.table2 .top .input[data-v-7a44908c]{width:50%}.table2 .top .reset[data-v-7a44908c]{margin-right:10px}.table2 .box[data-v-7a44908c]{width:80%}.table2 .box .tit[data-v-7a44908c]{margin:10px 0}.jsonborder[data-v-7a44908c]{width:85%;box-sizing:border-box;margin:0 auto}.border[data-v-7a44908c]{background-color:#f7f7f7;padding:20px 30px;width:80%;box-sizing:border-box;margin:0 auto}.wrapper[data-v-f3d31596]{width:100%;height:100%;display:flex}.header[data-v-f3d31596]{text-align:center;padding:20px 0;font-size:25px;letter-spacing:5px}.body[data-v-f3d31596]{background-color:#eff1f4;height:calc(100% - 73px);overflow:hidden;padding:10px}.body>div[data-v-f3d31596]{height:100%;width:100%;box-sizing:border-box;background-color:#fff}.main[data-v-f3d31596]{flex:1;display:flex;flex-direction:column}.navside[data-v-f3d31596]{width:200px;height:100%}
|