diff --git a/.eslintignore b/.eslintignore index d53c44e..8acd6cf 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,5 +1,5 @@ -dist/*.js -src/assets/* -src/lib/* -webpack.config.js -curd.mock.ts \ No newline at end of file +types +node_modules/ +dist/ +assets/ +webpack/ \ No newline at end of file diff --git a/.eslintrc.js b/.eslintrc similarity index 51% rename from .eslintrc.js rename to .eslintrc index d62bd01..8016d83 100644 --- a/.eslintrc.js +++ b/.eslintrc @@ -1,89 +1,61 @@ -module.exports = { - parser: '@typescript-eslint/parser', - plugins: ['@typescript-eslint'], - extends: ['plugin:@typescript-eslint/recommended'], - rules:{ - "indent": "off", - "quotes": [1, "single"], - "space-infix-ops": 2,//操作符前后有空格 - // 必须使用 === 和 !== ,和 null 对比时除外 - 'eqeqeq': [2, 'always', { 'null': 'ignore' }], - // 函数的形参不能多于5个 - 'max-params': [2, 5], - // 禁止 switch 中出现相同的 case - 'no-duplicate-case': 2, - // 禁止使用 var,必须用 let 或 const - 'no-var': 0, - // 禁止出现空代码块 - 'no-empty': [2, { 'allowEmptyCatch': true }], - // 禁止空的 function - // 包含注释的情况下允许 - 'no-empty-function': 0, - // if 后必须包含 { ,单行 if 除外 - 'curly': [2, 'multi-line', 'consistent'], - // for 循环不得因方向错误造成死循环 - 'for-direction': 2, - // 关键字前后必须有空格 - 'keyword-spacing': 2, - 'key-spacing':2, - // 最大块嵌套深度为 5 层 - 'max-depth': [2, 5], - // 最大回调深度为 3 层 - 'max-nested-callbacks': [2, 3], - // 禁止普通字符串中出现模板字符串语法 - 'no-template-curly-in-string': 0, - // 禁止连等赋值 - 'no-multi-assign': 2, - // 禁止使用连续的空格 - 'no-multi-spaces': 2, - // 禁止使用 \ 来定义多行字符串,统一使用模板字符串来做 - 'no-multi-str': 2, - // 禁止使用 new Object - 'no-new-object': 2, - - // 禁止使用 new require - 'no-new-require': 2, - - // 禁止使用 new Symbol - 'no-new-symbol': 2, - // 禁止 new Boolean、Number 或 String - 'no-new-wrappers': 2, - // 禁止 new 一个类而不存储该实例 - 'no-new': 2, - // 禁止把原生对象 Math、JSON、Reflect 当函数使用 - 'no-obj-calls': 2, - // 禁止使用八进制转义符 - 'no-octal-escape': 2, - // 禁止使用0开头的数字表示八进制 - 'no-octal': 2, - // 禁止使用 __dirname + 'file' 的形式拼接路径,应该使用 path.join 或 path.resolve 来代替 - 'no-path-concat': 2, - // 禁止对函数的参数重新赋值 - 'no-param-reassign': 2, - // 禁止使用保留字作为变量名 - 'no-shadow-restricted-names': 2, - // 禁止数组中出现连续逗号 - 'no-sparse-arrays': 2, - // 禁止在finally块中出现 return、throw、break、continue - 'no-unsafe-finally': 2, - // 禁止出现不安全的否定,如 for (!key in obj} {},应该写为 for (!(key in obj)} {} - 'no-unsafe-negation': 2, - // ...后面不允许有空格 - 'rest-spread-spacing': [2, 'never'], - // 注释的斜线和星号后要加空格 - 'spaced-comment': [2, 'always', { - 'block': { - exceptions: ['*'], - balanced: true +{ + "env": { + "browser": true, + "node": true, + "es6": true, + "jest/globals": true + }, + "globals": { + "Fix": true, + "BI": true, + "Report": true, + "Dec": true, + "DecCst": true + }, + "parser": "@typescript-eslint/parser", + "parserOptions": { + "project": "./tsconfig.json", + "ecmaVersion": 6, + "sourceType": "module", + "ecmaFeatures": { + "modules": true + } + }, + "plugins": ["@typescript-eslint", "jest"], + "rules": { + "no-underscore-dangle": 0, + "prefer-rest-params": 0, + "no-plusplus": 0, + "max-len": 0, + "no-use-before-define": [ + "error", + { + "functions": false } - }], - // typeof 判断条件只能是 "undefined", "object", "boolean", "number", "string", "function" 或 "symbol" - 'valid-typeof': 2, - "@typescript-eslint/indent": ["error", 2], - "@typescript-eslint/explicit-function-return-type": ["warn", { - allowExpressions: true - }], - "@typescript-eslint/no-explicit-any": ["off"], + ], + "new-cap": [ + "error", + { + "properties": false + } + ], + "no-confusing-arrow": ["off"], + "no-unused-vars": "off", + "@typescript-eslint/no-unused-vars": [ + "error", + { + "vars": "all", + "args": "none", + "ignoreRestSiblings": true + } + ], + "no-irregular-whitespace": [ + "error", + { + "skipTemplates": false, + "skipStrings": false + } + ], // 声明 "prefer-const": "error", //如果一个变量不会被重新赋值,最好使用const进行声明 "no-const-assign": "error", //不允许改变用const声明的变量 @@ -93,50 +65,38 @@ module.exports = { "no-prototype-builtins": "error", // 禁止直接使用 Object.prototypes 的内置属性 "no-extend-native": "error", // 禁止扩展原生对象 "no-new-object": "error", // 禁止使用 Object 构造函数 - "object-shorthand": [ - "error", - "always" - ], //要求对象字面量简写语法 - "quote-props": [ - "error", - "as-needed" - ], // 对象属性只在需要的时候加引号 + "object-shorthand": ["error", "always"], //要求对象字面量简写语法 + "quote-props": ["error", "as-needed"], // 对象属性只在需要的时候加引号 // 数组 "no-sparse-arrays": "error", // 禁用稀疏数组 "no-array-constructor": "error", //禁止使用 Array 构造函数 "array-callback-return": "error", // 数组回调函数内必须返回一个状态 // 字符串 "quotes": [ - "error", - "single", - { - "allowTemplateLiterals": true - } + "error", + "single", + { + "allowTemplateLiterals": true + } ], // 字符串开头和结束使用单引号 "prefer-template": "error", // 使用模板而非字符串连接 - "template-curly-spacing": [ - "error", - "never" - ], // 强制模板字符串中花括号内不能出现空格 + "template-curly-spacing": ["error", "never"], // 强制模板字符串中花括号内不能出现空格 "no-path-concat": "error", // 当使用 _dirname 和 _filename 时不允许字符串拼接 "no-useless-concat": "error", // 禁止没有必要的字符拼接 "no-useless-escape": "error", // 禁用不必要的转义 // 函数 "no-dupe-args": "error", // 禁止在 function 定义中出现重复的参数 - "no-new-func": "error", // 禁用Function构造函数 + // "no-new-func": "error", // 禁用Function构造函数 "no-return-assign": "error", // 禁止在返回语句中赋值 "func-style": [ - "error", - "declaration", - { - "allowArrowFunctions": true - } + "error", + "declaration", + { + "allowArrowFunctions": true + } ], // 统一函数风格为函数表达式或函数声明,并且允许使用箭头函数 "newline-before-return": "error", // 要求 return 语句之前有一空行 - "wrap-iife": [ - "error", - "outside" - ], // 立即执行函数外部必须包裹括号 + "wrap-iife": ["error", "outside"], // 立即执行函数外部必须包裹括号 "no-loop-func": "error", // 禁止在非function内声明function // "space-before-function-paren": "error", // 函数括号前必须要有空格 "no-param-reassign": "error", // 禁止修改函数参数 @@ -144,16 +104,13 @@ module.exports = { // 箭头函数 "prefer-arrow-callback": "error", // 回调使用箭头函数 "arrow-spacing": "error", // 箭头前后要有空格 - "arrow-parens": [ - "error", - "as-needed" - ], // 参数使用括号包裹 + "arrow-parens": ["error", "as-needed"], // 参数使用括号包裹 "arrow-body-style": [ - "error", - "as-needed", - { - "requireReturnForObjectLiteral": true - } + "error", + "as-needed", + { + "requireReturnForObjectLiteral": true + } ], // 函数体在必要的时候使用大括号 // 类 & 构造器 "no-useless-constructor": "error", // 禁止没必要的构造器 @@ -167,10 +124,12 @@ module.exports = { // 属性 "dot-notation": "error", //强制在任何允许的时候使用点号访问属性 // 变量 + "no-undef": "error", // 禁止使用未声明的变量 // "one-var": ["error", "never"], // 变量统一声明 // 比较运算符 & 相等运算符 "eqeqeq": "error", // 使用 === 和 !== 代替 == 和 != - "no-nested-ternary": "error", // 禁止混合的三目运算符 + "no-case-declarations": "error", // 禁止在 case 或 default 子句中出现变量声明 + // "no-nested-ternary": "error", // 禁止混合的三目运算符 "no-unneeded-ternary": "error", //禁止可以在有更简单的可替代的表达式时使用三元操作符 // 条件 "no-cond-assign": "error", // 禁止在条件语句中出现赋值操作符 @@ -181,94 +140,81 @@ module.exports = { "no-fallthrough": "error", // 禁止 case 语句落空 // 代码块 "brace-style": "error", // 代码块左括号紧跟上一行结束 - "curly": [ - "error", - "multi-line" - ], // if、else if、else、for、while强制使用大括号,但允许在单行中省略大括号 + "curly": ["error", "multi-line"], // if、else if、else、for、while强制使用大括号,但允许在单行中省略大括号 "no-empty": [ - "error", - { - "allowEmptyCatch": true - } + "error", + { + "allowEmptyCatch": true + } ], // 禁止空块语句,但允许出现空的 catch 子句 // 注释 "spaced-comment": "error", // 注释前有空格 + "lines-around-comment": [ + "error", + { + "beforeBlockComment": false + } + ], // 块级注释前要有空行 + // 空白 + "indent": [ + "error", + 4, + { + "SwitchCase": 1 + } + ], // 缩进控制4空格 "no-mixed-spaces-and-tabs": "error", // 禁止使用 空格 和 tab 混合缩进 - "space-before-blocks": [ - "error", - "always" - ], // 语句块之前的需要有空格 + "space-before-blocks": ["error", "always"], // 语句块之前的需要有空格 "keyword-spacing": "error", // 关键字后面必须要有空格 "space-infix-ops": [ - "error", - { - "int32Hint": false - } + "error", + { + "int32Hint": false + } ], // 要求中缀操作符周围有空格,设置 int32Hint 选项为 true (默认 false) 允许 a|0 不带空格 "eol-last": "error", // 要求文件末尾保留一行空行 "newline-per-chained-call": "error", // 要求方法链中每个调用都有一个换行符 - "padded-blocks": [ - "error", - "never" - ], // 代码块开始和结束位置不可以有多余的空行 - "space-in-parens": [ - "error", - "never" - ], // 禁止圆括号内的空格 - "array-bracket-spacing": [ - "error", - "never" - ], // 数组紧贴括号部分不允许包含空格 - "object-curly-spacing": [ - "error", - "never" - ], // 对象紧贴花括号部分不允许包含空格 + "padded-blocks": ["error", "never"], // 代码块开始和结束位置不可以有多余的空行 + "space-in-parens": ["error", "never"], // 禁止圆括号内的空格 + "array-bracket-spacing": ["error", "never"], // 数组紧贴括号部分不允许包含空格 + "object-curly-spacing": ["error", "always"], // 对象紧贴花括号部分不允许包含空格 "no-regex-spaces": "error", // 禁止正则表达式字面量中出现多个空格 "no-multi-spaces": "error", // 禁止出现多个空格而且不是用来作缩进的 - "block-spacing": [ - "error", - "never" - ], // 单行代码块中紧贴括号部分不允许包含空格 - "computed-property-spacing": [ - "error", - "never" - ], // 禁止括号和其内部值之间的空格 + "block-spacing": ["error", "never"], // 单行代码块中紧贴括号部分不允许包含空格 + "computed-property-spacing": ["error", "never"], // 禁止括号和其内部值之间的空格 "no-trailing-spaces": [ - "error", - { - "skipBlankLines": true - } + "error", + { + "skipBlankLines": true + } ], // 禁用行尾空格 "no-spaced-func": "error", // 禁止函数调用时,与圆括号之间有空格 "space-unary-ops": "error", // 要求或禁止在一元操作符之前或之后存在空格,new、delete、typeof、void、yield要求有空格,-、+、--、++、!、!!要求无空格 "yield-star-spacing": [ - "error", - { - "before": true, - "after": false - } + "error", + { + "before": true, + "after": false + } ], // 强制 yield* 表达式中 * 号前有空格,后无空格 // 逗号 "comma-style": "error", // 逗号必须放在行末 - "comma-dangle": [ - "error", - "always-multiline" - ], // 多行对象字面量中要求拖尾逗号 + "comma-dangle": ["error", "always-multiline"], // 多行对象字面量中要求拖尾逗号 "comma-spacing": [ - "error", - { - "before": false, - "after": true - } + "error", + { + "before": false, + "after": true + } ], //在变量声明、数组字面量、对象字面量、函数参数 和 序列中禁止在逗号前使用空格,要求在逗号后使用一个或多个空格 // 分号 "semi": "error", //不得省略语句结束的分号 "semi-spacing": [ - "error", - { - "before": false, - "after": true - } + "error", + { + "before": false, + "after": true + } ], //禁止分号周围的空格 "no-extra-semi": "error", // 禁用不必要的分号 // 类型转换 @@ -276,7 +222,8 @@ module.exports = { "no-extra-boolean-cast": "error", // 禁止不必要的布尔类型转换 // 其他最佳实践或规范 "strict": "error", // 使用强制模式开关use strict; - // "@typescript-eslint/no-extra-parens": ["error"], + // 禁止冗余的括号 + "@typescript-eslint/no-extra-parens": ["error"], "no-eval": "error", // 禁用 eval() "no-with": "error", // 禁用 with 语句 "no-unexpected-multiline": "error", // 禁止使用令人困惑的多行表达式 @@ -286,4 +233,4 @@ module.exports = { "no-new-wrappers": "error", // 禁止通过 new 操作符使用 String、Number 和 Boolean "handle-callback-err": "error" // 强制回调错误处理 } -} \ No newline at end of file +} diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index de1131c..0000000 --- a/.gitattributes +++ /dev/null @@ -1,7 +0,0 @@ -* text=auto !eol -designer_scripts/designer_scripts.iml -text -designer_scripts/src/readme.md -text -designer_scripts/src/scripts/store/web/index.html -text -designer_scripts/src/scripts/store/web/js/bridge.js -text -designer_scripts/src/scripts/store/web/js/lib/jquery-2.2.2.min.js -text -designer_scripts/src/scripts/store/web/js/store.js -text diff --git a/.gitignore b/.gitignore index 6428b54..b941a73 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,10 @@ -node_modules -yarn.lock -dist \ No newline at end of file +/node_modules +/bower_components +.idea/ +.DS_Store +/constants/classes/ +dist +package-lock.json +.vscode +yarn-error.log +.history/ \ No newline at end of file diff --git a/README.md b/README.md index 5821f32..f824a73 100644 --- a/README.md +++ b/README.md @@ -5,149 +5,216 @@ ![finui](https://img.shields.io/badge/lib-FinUi-blue.svg) ## 开始 -下载代码 - -``` -git clone ssh://git@cloud.finedevelop.com:7999/~alan/database-connection.git -``` 安装依赖 - ``` yarn ``` 开始开发 ``` -yarn start +yarn dev ``` -## 接口文档 +## 接口文档: ### 增加数据连接类型 -使用`BI.config`,ConstantName名称为`dec.constant.database.conf.connect.list`,值为连接的名称 +使用`BI.config`,ConstantName名称为`dec.constant.database.conf.connect.types`,值为连接的名称 例如增加`Redis`的连接: ```js -BI.config(ConstantName, (datas: string[]) => [...datas, 'Redis']); +BI.config(ConstantPluginTyps, (datas: string[]) => [...datas, { + text: 'Redis', + databaseType: 'Redis', +}]); ``` ### 数据连接填写页面 -ConstantName名称为`dec.constant.database.conf.connect.form.${name.toLowerCase()}.edit`,值为组件shortcut的名称 - -例如配置`Redis`的连接填写页面: - -```js -const className = 'fr.plugin.redis.preview'; -const RedisPreview = BI.inherit(BI.Widget, { - render() { - return { - type: 'bi.left', - cls: 'title', - items: [{ - type: 'bi.editor', - watermark:'这里是编辑页', - }], - }; - }, -}); -BI.shortcut(className, RedisPreview); -BI.constant('dec.constant.database.conf.connect.form.redis.edit', className); -``` -### 数据连接预览页面 -ConstantName名称为`dec.constant.database.conf.connect.form.${name.toLowerCase()}.show`,值为组件shortcut的名称 - -例如配置`Redis`的连接预览页面: - -```js -const className = 'fr.plugin.redis.edit'; -const RedisPreview = BI.inherit(BI.Widget, { - render() { - return { - type: 'bi.left', - cls: 'title', - items: [{ - type: 'bi.label', - text:'这里是预览页', - }], - }; - }, -}); -BI.shortcut(className, RedisPreview); -BI.constant('dec.constant.database.conf.connect.form.redis.edit', className); -``` +ConstantName名称为`dec.constant.database.conf.connect.form.${name}.edit`,值为组件shortcut的名称 -### 插件配置表单值传递 -ConstantName名称为`dec.constant.database.conf.connect.form.${name.toLowerCase()}.value`,值为插件数据结构 +### 数据连接展示页面 +ConstantName名称为`dec.constant.database.conf.connect.form.${name}.show`,值为组件shortcut的名称 -例如: - -```js -const ConstantName = 'dec.constant.database.conf.connect.form.redis.value'; -const form = { - url:'192.168.1.22', - port: 6379, - password: '123456' -}; -BI.config(ConstantName, (data: object) => form); +### 示例 ``` +const ConstantRedisType = 'dec.constant.database.conf.connect.types'; +const ConstantRedisShow = 'dec.constant.database.conf.connect.form.Redis.show'; +const ConstantRedisEdit = 'dec.constant.database.conf.connect.form.Redis.edit'; + +BI.DOM.ready(() => { + BI.config(ConstantRedisType, datas => [...datas, { + text: 'Redis', + databaseType: 'Redis', + }]); + + const RedisShowName = 'dec.dcm.connection.plugin.redis.show'; + const RedisShow = BI.inherit(BI.Widget, { + props: { + formData: { + url: '', + port: '6379', + password: '', + }, + }, + render() { + const o = this.options; + + return { + type: 'bi.vertical', + hgap: 15, + vgap: 10, + items: [ + { + type: 'bi.left', + items: [ + { + type: 'bi.label', + cls: 'bi-font-bold', + width: 100, + textAlign: 'left', + text: '数据库地址', + }, + { + type: 'bi.label', + text: o.formData.url, + }, + ], + }, + { + type: 'bi.left', + items: [ + { + type: 'bi.label', + cls: 'bi-font-bold', + width: 100, + textAlign: 'left', + text: '端口号', + }, + { + type: 'bi.label', + text: o.formData.port, + }, + ], + }, + { + type: 'bi.left', + items: [ + { + type: 'bi.label', + cls: 'bi-font-bold', + width: 100, + textAlign: 'left', + text: '密码', + }, + { + type: 'bi.label', + text: o.formData.password, + }, + ], + }, + ], + }; + }, + }); -### 数据连接池页面 -ConstantName名称为`dec.constant.database.conf.connect.form.${name.toLowerCase()}.pool`,值为组件shortcut的名称 + BI.shortcut(RedisShowName, RedisShow); + BI.constant(ConstantRedisShow, RedisShowName); -例如配置`Redis`的连接预览页面: -```js -const classNamePool = 'fr.plugin.redis.pool'; - -const WidgetPool = BI.inherit(BI.Widget, { - render() { - const {maxActive, maxIdle, numActive, numIdle} = this.options; - - return { - type: 'bi.left', - items: [ - { - type: 'bi.left', - cls: 'right-status-item', - items: [ - { - type: 'bi.vertical', - cls:'right-status-board', - items: [ - { - type: 'bi.vertical', - cls:'right-status-board-item', - items: [ + const RedisEditName = 'dec.dcm.connection.plugin.redis.edit'; + const RedisEdit = BI.inherit(BI.Widget, { + props: { + formData: { + url: '', + port: '6379', + password: '', + }, + }, + render() { + const o = this.options; + + return { + type: 'bi.vertical', + hgap: 15, + vgap: 10, + items: [ { - type: 'bi.label', - cls: 'right-status-text', - extraCls: 'card-font1', - text: numActive, + type: 'bi.left', + items: [ + { + type: 'bi.label', + cls: 'bi-font-bold', + width: 100, + textAlign: 'left', + text: '数据库地址', + }, + { + type: 'bi.text_editor', + width: 300, + allowBlank: true, + ref: _ref => { + this.url = _ref; + }, + text: o.formData.url, + }, + ], }, { - type: 'bi.label', - cls: 'right-status-text', - text: '/', + type: 'bi.left', + items: [ + { + type: 'bi.label', + cls: 'bi-font-bold', + width: 100, + textAlign: 'left', + text: '端口号', + }, + { + type: 'bi.text_editor', + width: 300, + allowBlank: true, + ref: _ref => { + this.port = _ref; + }, + text: o.formData.port, + }, + ], }, { - type: 'bi.label', - cls: 'right-status-text', - text: maxActive, + type: 'bi.left', + items: [ + { + type: 'bi.label', + cls: 'bi-font-bold', + width: 100, + textAlign: 'left', + text: '密码', + }, + { + type: 'bi.text_editor', + width: 300, + allowBlank: true, + inputType: 'password', + ref: _ref => { + this.password = _ref; + }, + text: o.formData.password, + }, + ], }, - ], - }, - { - type: 'bi.label', - text: 'Redis连接数', - }, - ], - }, - ], + ], + }; + }, + getSubmitValue() { + return { + url: this.url.getValue(), + port: this.port.getValue(), + password: this.password.getValue(), + }; }, - ], - }; - }, + }); + + BI.shortcut(RedisEditName, RedisEdit); + BI.constant(ConstantRedisEdit, RedisEditName); }); -BI.shortcut(classNamePool, WidgetPool); -BI.constant('dec.constant.database.conf.connect.form.redis.pool', classNamePool); + ``` \ No newline at end of file diff --git a/assets/font/iconfont.eot b/assets/font/iconfont.eot new file mode 100644 index 0000000..9683790 Binary files /dev/null and b/assets/font/iconfont.eot differ diff --git a/assets/font/iconfont.svg b/assets/font/iconfont.svg new file mode 100644 index 0000000..8aea2d0 --- /dev/null +++ b/assets/font/iconfont.svg @@ -0,0 +1,119 @@ + + + + diff --git a/assets/font/iconfont.ttf b/assets/font/iconfont.ttf new file mode 100644 index 0000000..83bebd9 Binary files /dev/null and b/assets/font/iconfont.ttf differ diff --git a/assets/font/iconfont.woff b/assets/font/iconfont.woff new file mode 100644 index 0000000..57d8641 Binary files /dev/null and b/assets/font/iconfont.woff differ diff --git a/babel.config.js b/babel.config.js new file mode 100644 index 0000000..d83931d --- /dev/null +++ b/babel.config.js @@ -0,0 +1,29 @@ +module.exports = function(api) { + api.cache(true); + const presets = [ + [ + '@babel/preset-env', + { + targets: { + ie: 9, + chrome: 47, + }, + }, + ], + '@babel/preset-typescript', + ]; + const plugins = [ + [ + '@babel/plugin-proposal-decorators', + { + legacy: true, + }, + ], + '@babel/plugin-proposal-class-properties', + ]; + + return { + presets, + plugins, + }; +}; diff --git a/config/fineui.prepare.js b/config/fineui.prepare.js new file mode 100644 index 0000000..1978889 --- /dev/null +++ b/config/fineui.prepare.js @@ -0,0 +1,6 @@ +!(function () { + // 先把准备环境准备好 + while (BI.prepares && BI.prepares.length > 0) { + BI.prepares.shift()(); + } +}()); diff --git a/config/fineui.setup.js b/config/fineui.setup.js new file mode 100644 index 0000000..7a1b5fc --- /dev/null +++ b/config/fineui.setup.js @@ -0,0 +1,48 @@ +!(function () { + Report = { + SessionMgr: { + get() { + return ''; + }, + }, + }; + let target = null; + const targetStack = []; + + function pushTarget (_target) { + if (target) { + targetStack.push(target); + } + Fix.Model.target = target = _target; + } + + function popTarget () { + Fix.Model.target = target = targetStack.pop(); + } + + Fix.Test = { + makeContext: (state, fn) => { + const Store = BI.inherit(Fix.Model, { + state, + childContext: Object.keys(state), + }); + const store = new Store(); + pushTarget(store); + fn(store); + popTarget(); + + return store; + }, + extractContext: (model, contextList) => { + BI.each(BI.deepClone(model), key => { + if (BI.contains(contextList, key)) { + return; + } + + delete model[key]; + }); + + return model; + }, + }; +}()); diff --git a/config/jest.environment.js b/config/jest.environment.js new file mode 100644 index 0000000..b564081 --- /dev/null +++ b/config/jest.environment.js @@ -0,0 +1,34 @@ +const JsdomEnvironment = require('jest-environment-jsdom'); +const path = require('path'); +const fs = require('fs'); + +class FineUiEnvironment extends JsdomEnvironment { + async setup(...args) { + await super.setup(args); + + const document = this.dom.window.document; + + document.createElement('body'); + + [ + '../node_modules/fineui/dist/fineui.js', + '../node_modules/fineui-materials/docs/materials.js', + '../config/fineui.prepare.js', + './fineui.setup.js', + ].forEach(scriptRelativePath => { + writeScript(document, scriptRelativePath); + }); + + return Promise.resolve(); + } +} + +function writeScript(document, scriptRelativePath) { + const scriptEl = document.createElement('script'); + scriptEl.text = fs.readFileSync(path.resolve(__dirname, scriptRelativePath), { + encoding: 'utf8', + }); + document.body.appendChild(scriptEl); +} + +module.exports = FineUiEnvironment; diff --git a/i18n/zh_cn.properties b/i18n/zh_cn.properties index 13c2e30..785a538 100644 --- a/i18n/zh_cn.properties +++ b/i18n/zh_cn.properties @@ -1,11 +1,23 @@ +Dec-Dcm_Connection_New= 新建数据连接 +Dec-Dcm_Connection_Name= 数据连接名称 +Dec-Dcm_Connection_None= 无可用数据连接,请点击添加 +Dec-Dcm_Connection_Test= 测试连接 +Dec-Dcm_Connection_Commonly= 常用 +Dec-Dcm_Connection_Type_Filter= 类型筛选: +Dec-Dcm_Connection_Support_Inner= 内置支持 +Dec-Dcm_Connection_Support_Plugin= 插件支持 +Dec-Dcm_Connection_Filter_Tip= 提示:当前仅支持部分插件类型,未支持类型请使用设计器的旧版本数据连接进行创建 +Dec-Dcm_Connection_All= 所有 +Dec-Dcm_Connection_Other= 其他 Dec-Dcm_Connection_Management= 数据连接管理 -Dec-Dcm_Pool_Connection_Management= 连接池管理 +Dec-Dcm_Pool_Connection_Management= 连接池状态 Dec-Dcm_Data_Connections= 数据连接 Dec-Dcm_Active_Connections_Number= 活动连接数 Dec-Dcm_Leisure_Connections_Number= 空闲连接数 Dec-Dcm_Connections= 连接 Dec-Dcm_Default= 默认 Dec-Dcm_Delete= 删除 +Dec-Dcm_Millisecond= 毫秒 Dec-Dcm_Test_Connection= 测试连接 Dec-Dcm_Copy= 复制 Dec-Dcm_Edit= 编辑 @@ -13,18 +25,20 @@ Dec-Dcm_Save= 保存 Dec-Dcm_Yes= 是 Dec-Dcm_No= 否 Dec-Dcm_Search= 搜索 -Dec-Dcm_Type= 类型 +Dec-Dcm_Type= 类型:{R1} Dec-Dcm_Other= 其他 Dec-Dcm_Tips= 提示 Dec-Dcm_Back= 返回 -Dec-Dcm_Creator= 创建者 +Dec-Dcm_Creator= 创建者:{R1} Dec-Dcm_First_Step= 第一步 Dec-Dcm_Second_Step= 第二步 Dec-Dcm_Third_Step= 第三步 +Dec-Dcm_Connection_ConnectionName_Cannt_Null= 数据连接名不可为空 +Dec-Dcm_Connection_Np_Registered= 该类型暂仅支持在设计器中使用旧版本数据连接查看 Dec-Dcm_Connection_Detailed_Information= 详细信息 Dec-Dcm_Connection_Handup_Information= 收起信息 Dec-Dcm_Connection_Testing= 正在测试连接,请稍候... -Dec-Dcm_Connection_Test_Fail= 测试连接失败 +Dec-Dcm_Connection_Test_Fail= {R1}测试连接失败 Dec-Dcm_Connection_Test_Success= 连接成功 Dec-Dcm_Connection_Option_Cannot_Find= 找不到该连接的配置信息 Dec-Dcm_Connection_Config_No_Save= 当前设置尚未保存,是否保存? @@ -34,15 +48,21 @@ Dec-Dcm_Connection_More_Title= 更多数据连接 Dec-Dcm_Connection_Other= 其他 Dec-Dcm_Connection_Plase_Add_One= 请选择左侧数据连接或点击新建数据连接 Dec-Dcm_Connection_Is_Existence= 数据连接名已存在 +Dec-Dcm_Connection_No_Search_Result= 无搜索结果 Dec-Dcm_Connection_Form_ConnectionName= 数据连接名 Dec-Dcm_Connection_Form_ConnectionName-Change-Confirm= *修改数据连接名会影响相关数据表和仪表板 -Dec-Dcm_Connection_Form_Driver= 驱动器 +Dec-Dcm_Connection_Form_Driver= 驱动 Dec-Dcm_Connection_Form_URL= URL +Dec-Dcm_Connection_Form_Database_URL= 数据库URL Dec-Dcm_Connection_Form_Place_Input= 请输入 Dec-Dcm_Connection_Form_OriginalCharsetName= 编码 Dec-Dcm_Connection_Form_Auto= 自动 +Dec-Dcm_Connection_Form_Host= 主机 +Dec-Dcm_Connection_Form_AuthType= 认证方式 Dec-Dcm_Connection_Form_UserName= 用户名 Dec-Dcm_Connection_Form_Password= 密码 +Dec-Dcm_Connection_Form_Principal= 客户端principal +Dec-Dcm_Connection_Form_KeyPath= keytab密钥路径 Dec-Dcm_Connection_Form_Pool_Properties= 连接池属性 Dec-Dcm_Connection_Form_SQL_Validation_Query= SQL验证查询 Dec-Dcm_Connection_Form_Connection-Check= 获取连接前校验 @@ -50,11 +70,217 @@ Dec-Dcm_Connection_Form_Connection_Max_Number= 最大活动连接数 Dec-Dcm_Connection_Form_Place_Input-Number= 请输入有效的正整数 Dec-Dcm_Connection_Form_Pattern= 模式 Dec-Dcm_Connection_Form_Database_Addr= 数据库地址 -Dec-Dcm_Connection_Form_Database_Port= 端口号 +Dec-Dcm_Connection_Form_Database_Name= 数据库名称 +Dec-Dcm_Connection_Form_Database_Port= 端口 +Dec-Dcm_Connection_Form_Database_Advanced_Setting= 高级设置 +Dec-Dcm_Connection_Form_Database_Initial_Size= 初始化连接数 +Dec-Dcm_Connection_Form_Database_Max_Active= 最大活动连接数 +Dec-Dcm_Connection_Form_Database_Max_Idle= 最大空闲连接数 +Dec-Dcm_Connection_Form_Database_Max_Wait= 最大等待时间 +Dec-Dcm_Connection_Form_Database_Validation_Query= SQL验证查询 +Dec-Dcm_Connection_Form_Database_Test_On_Borrow= 获取连接前检验 +Dec-Dcm_Connection_Form_Database_Test_On_Return= 归还连接前检验 +Dec-Dcm_Connection_Form_Database_Test_While_Idle= 开启空闲回收器检验 +Dec-Dcm_Connection_Form_Database_Test_Between_Eviction_Millis= 空闲连接回收器休眠时间 +Dec-Dcm_Connection_Form_Database_Tests_PerEviction_Run_Num= 空闲连接回收检查数 +Dec-Dcm_Connection_Form_Database_Min_Evictable_Idle_Time_Millis= 保持空闲最小时间值 Dec-Dcm_Connection_Make_Sure_Delete= 确定删除该数据连接? Dec-Dcm_Connection_ReConnect= 重新连接 Dec-Dcm_Connection_JNDI_Form_ConnectionName= JNDI的名字 +Dec-Dcm_Connection_JNDI_Form_Connection= 数据来自数据连接 Dec-Dcm_Connection_Form_JNDI_Context= 上下文 Dec-Dcm_Connection_Form_JNDI_Advanced= 高级 Dec-Dcm_Connection_Form_JNDI_Other_Attributes= 其他属性 -Dec-Dcm_Connection_Form_JNDI_Collapse-Attributes= 收起 \ No newline at end of file +Dec-Dcm_Connection_Form_JNDI_Collapse-Attributes= 收起 +Dec-Dcm_Connection_JNDI= JNDI数据连接 +Dec-Dcm_Connection_JNDI_Warning= 注意:需要把包含INTIAL_CONTEXT_FACTORY类的.jar文件复制到软件安装目录下的/lib目录下 +Dec-Dcm_Connection_Error= 接口访问错误 +BI-Multi_Date_Quarter_End= 季度末 +BI-Multi_Date_Month_Begin= 月初 +BI-Multi_Date_YMD= 年月日 +BI-Custom_Color= 自定义颜色 +BI-Numerical_Interval_Input_Data= 请输入数值 +BI-Please_Input_Natural_Number= 请输入非负整数 +BI-No_More_Data= 无更多数据 +BI-Basic_Altogether= 共 +BI-Basic_Sunday= 星期日 +BI-Widget_Background_Colour= 组件背景 +BI-Color_Picker_Error_Text= 请输入0~255的正整数 +BI-Multi_Date_Month= 月 +BI-No_Selected_Item= 没有可选项 +BI-Multi_Date_Year_Begin= 年初 +BI-Quarter_1= 第1季度 +BI-Quarter_2= 第2季度 +BI-Quarter_3= 第3季度 +BI-Quarter_4= 第4季度 +BI-Multi_Date_Year_Next= 年后 +BI-Multi_Date_Month_Prev= 个月前 +BI-Month_Trigger_Error_Text= 请输入1~12的正整数 +BI-Less_And_Equal= 小于等于 +BI-Year_Trigger_Invalid_Text= 请输入有效时间 +BI-Multi_Date_Week_Next= 周后 +BI-Font_Size= 字号 +BI-Basic_Total= 共 +BI-Already_Selected= 已选择 +BI-Formula_Insert= 插入 +BI-Select_All= 全选 +BI-Basic_Tuesday= 星期二 +BI-Multi_Date_Month_End= 月末 +BI-Load_More= 点击加载更多数据 +BI-Basic_September= 九月 +BI-Current_Is_Last_Page= 当前已是最后一页 +BI-Basic_Auto= 自动 +BI-Basic_Count= 个 +BI-Basic_Value= 值 +BI-Basic_Unrestricted= 无限制 +BI-Quarter_Trigger_Error_Text= 请输入1~4的正整数 +BI-Basic_More= 更多 +BI-Basic_Wednesday= 星期三 +BI-Basic_Bold= 加粗 +BI-Basic_Simple_Saturday= 六 +BI-Multi_Date_Month_Next= 个月后 +BI-Basic_March= 三月 +BI-Current_Is_First_Page= 当前已是第一页 +BI-Basic_Thursday= 星期四 +BI-Basic_Prompt= 提示 +BI-Multi_Date_Today= 今天 +BI-Multi_Date_Quarter_Prev= 个季度前 +BI-Row_Header= 行表头 +BI-Date_Trigger_Error_Text= 日期格式示例:2015-3-11 +BI-Basic_Cancel= 取消 +BI-Basic_January= 一月 +BI-Basic_June= 六月 +BI-Basic_July= 七月 +BI-Basic_April= 四月 +BI-Multi_Date_Quarter_Begin= 季度初 +BI-Multi_Date_Week= 周 +BI-Click_Blank_To_Select= 点击\\空格键\\选中完全匹配项 +BI-Basic_August= 八月 +BI-Word_Align_Left= 文字居左 +BI-Basic_November= 十一月 +BI-Font_Colour= 字体颜色 +BI-Multi_Date_Day_Prev= 天前 +BI-Select_Part= 部分选择 +BI-Multi_Date_Day_Next= 天后 +BI-Less_Than= 小于 +BI-Basic_February= 二月 +BI-Multi_Date_Year= 年 +BI-Number_Index= 序号 +BI-Multi_Date_Week_Prev= 周前 +BI-Next_Page= 下一页 +BI-Right_Page= 向右翻页 +BI-Numerical_Interval_Signal_Value= 前后值相等,请将操作符改为“≤” +BI-Basic_December= 十二月 +BI-Basic_Saturday= 星期六 +BI-Basic_Simple_Wednesday= 三 +BI-Multi_Date_Quarter_Next= 个季度后 +BI-Basic_October= 十月 +BI-Basic_Simple_Friday= 五 +BI-Basic_Save= 保存 +BI-Numerical_Interval_Number_Value= 请保证前面的数值小于/等于后面的数值 +BI-Previous_Page= 上一页 +BI-No_Select= 搜索结果为空 +BI-Basic_Clears= 清空 +BI-Created_By_Me= 我创建的 +BI-Basic_Simple_Tuesday= 二 +BI-Word_Align_Right= 文字居右 +BI-Summary_Values= 汇总 +BI-Basic_Clear= 清除 +BI-Upload_File_Size_Error= 文件大小不支持 +BI-Up_Page= 向上翻页 +BI-Basic_Simple_Sunday= 日 +BI-Multi_Date_Relative_Current_Time= 相对当前时间 +BI-Selected_Data= 已选数据: +BI-Multi_Date_Quarter= 季度 +BI-Check_Selected= 查看已选 +BI-Basic_Search= 搜索 +BI-Basic_May= 五月 +BI-Continue_Select= 继续选择 +BI-Please_Input_Positive_Integer= 请输入正整数 +BI-Upload_File_Type_Error= 文件类型不支持 +BI-Upload_File_Error= 文件上传失败 +BI-Basic_Friday= 星期五 +BI-Down_Page= 向下翻页 +BI-Basic_Monday= 星期一 +BI-Left_Page= 向左翻页 +BI-Transparent_Color= 透明 +BI-Basic_Simple_Monday= 一 +BI-Multi_Date_Year_End= 年末 +BI-Time_Interval_Error_Text= 请保证开始时间早于/等于结束时间 +BI-Basic_Time= 时间 +BI-Basic_OK= 确定 +BI-Basic_Sure= 确定 +BI-Basic_Simple_Thursday= 四 +BI-Multi_Date_Year_Prev= 年前 +BI-Tiao_Data= 条数据 +BI-Basic_Italic= 斜体 +BI-Basic_Dynamic_Title= 动态时间 +BI-Basic_Year= 年 +BI-Basic_Single_Quarter= 季 +BI-Basic_Month= 月 +BI-Basic_Week= 周 +BI-Basic_Day= 天 +BI-Basic_Work_Day= 工作日 +BI-Basic_Front= 前 +BI-Basic_Behind= 后 +BI-Basic_Empty= 空 +BI-Basic_Month_End= 月末 +BI-Basic_Month_Begin= 月初 +BI-Basic_Year_End= 年末 +BI-Basic_Year_Begin= 年初 +BI-Basic_Quarter_End= 季末 +BI-Basic_Quarter_Begin= 季初 +BI-Basic_Week_End= 周末 +BI-Basic_Week_Begin= 周初 +BI-Basic_Current_Day= 当天 +BI-Basic_Begin_Start= 初 +BI-Basic_End_Stop= 末 +BI-Basic_Current_Year= 今年 +BI-Basic_Year_Fen= 年份 +BI-Basic_Current_Month= 本月 +BI-Basic_Current_Quarter= 本季度 +BI-Basic_Year_Month= 年月 +BI-Basic_Year_Quarter= 年季度 +BI-Basic_Input_Can_Not_Null= 输入框不能为空 +BI-Basic_Date_Time_Error_Text= 日期格式示例:2015-3-11 00:00:00 +BI-Basic_Input_From_To_Number= 请输入{R1}的数值 +BI-Basic_Or= 或 +BI-Basic_And= 且 +BI-Conf_Add_Formula= 添加公式 +BI-Conf_Add_Condition= 添加条件 +BI-Conf_Formula_And= 且公式条件 +BI-Conf_Formula_Or= 或公式条件 +BI-Conf_Condition_And= 且条件 +BI-Conf_Condition_Or= 或条件 +BI-Microsoft_YaHei= 微软雅黑 +BI-Apple_Light= 苹方-light +BI-Font_Family= 字体 +BI-Basic_Please_Input_Content= 请输入内容 +BI-Word_Align_Center= 文字居中 +BI-Basic_Please_Enter_Number_Between= 请输入{R1}-{R2}的值 +BI-More_Than= 大于 +BI-More_And_Equal= 大于等于 +BI-Please_Enter_SQL= 请输入SQL +BI-Basic_Click_To_Add_Text= +点击新增\\{R1}\\ +BI-Basic_Please_Select= 请选择 +BI-Basic_Font_Color= 文字颜色 +BI-Basic_Background_Color= 背景色 +BI-Basic_Underline= 下划线 +BI-Basic_Param_Month= {R1}月 +BI-Basic_Param_Day= {R1}日 +BI-Basic_Param_Quarter= {R1}季度 +BI-Basic_Param_Week_Count= 第{R1}周 +BI-Basic_Param_Hour= {R1}时 +BI-Basic_Param_Minute= {R1}分 +BI-Basic_Param_Second= {R1}秒 +BI-Basic_Param_Year= {R1}年 +BI-Basic_Date_Day= 日 +BI-Basic_Hour_Sin= 时 +BI-Basic_Seconds= 秒 +BI-Basic_Minute= 分 +BI-Basic_Wan= 万 +BI-Basic_Million= 百万 +BI-Basic_Billion= 亿 +BI-Basic_Quarter= 季度 +BI-Basic_No_Select= 不选 +BI-Basic_Now= 此刻 \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 0000000..dc471da --- /dev/null +++ b/index.html @@ -0,0 +1,44 @@ + + +
+ +t |