commit 6a23132628145b698541f579a1e7a24e62866e07
Author: xwj
Date: Mon Jan 26 14:37:40 2026 +0800
项目初始化
diff --git a/.browserslistrc b/.browserslistrc
new file mode 100644
index 0000000..214388f
--- /dev/null
+++ b/.browserslistrc
@@ -0,0 +1,3 @@
+> 1%
+last 2 versions
+not dead
diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 0000000..7053c49
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,5 @@
+[*.{js,jsx,ts,tsx,vue}]
+indent_style = space
+indent_size = 2
+trim_trailing_whitespace = true
+insert_final_newline = true
diff --git a/.eslintignore b/.eslintignore
new file mode 100644
index 0000000..0235c61
--- /dev/null
+++ b/.eslintignore
@@ -0,0 +1,7 @@
+/src/util/map/*.js
+/src/util/map/*.ts
+/src/util/dialog/*.js
+/src/util/filters/*.js
+/src/api/data-analysis/**
+/node_modules
+/dist
diff --git a/.eslintrc.js b/.eslintrc.js
new file mode 100644
index 0000000..9ba8d47
--- /dev/null
+++ b/.eslintrc.js
@@ -0,0 +1,41 @@
+module.exports = {
+ root: true,
+ env: {
+ node: true
+ },
+ extends: ['plugin:vue/essential', '@vue/standard', '@vue/typescript/recommended'],
+ parserOptions: {
+ ecmaVersion: 2020,
+ sourceType: 'module'
+ },
+ rules: {
+ // 'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
+ 'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
+ semi: 0,
+ 'comma-spacing': 0,
+ 'object-curly-spacing': 0,
+ indent: 0,
+ quotes: 0,
+ 'quote-props': 0,
+ 'key-spacing': 0,
+ 'object-curly-newline': 0,
+ 'object-property-newline': 0,
+ 'eol-last': 0,
+ noConsole: 0,
+ '@typescript-eslint/no-explicit-any': 0,
+ 'padded-blocks': 0,
+ 'no-trailing-spaces': 0,
+ '@typescript-eslint/no-unused-vars': 0,
+ '@typescript-eslint/ban-ts-comment': 0,
+ 'dot-notation': 'off',
+ 'prefer-const': 0,
+ 'spaced-comment': 0,
+ 'new-cap': 0,
+ "no-useless-escape": 0,
+ 'lines-between-class-members': 0, // 类成员之间应该空行
+ '@typescript-eslint/no-non-null-assertion': 0,
+ '@typescript-eslint/no-var-requires': 0,
+ 'space-before-function-paren': 0,
+ 'no-multi-spaces': 0
+ }
+}
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..e69de29
diff --git a/logo.png b/logo.png
new file mode 100644
index 0000000..651689a
Binary files /dev/null and b/logo.png differ
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..ce5f6ba
--- /dev/null
+++ b/package.json
@@ -0,0 +1,61 @@
+{
+ "name": "myships_base",
+ "version": "0.1.0",
+ "private": true,
+ "scripts": {
+ "serve": "vue-cli-service serve",
+ "build": "vue-cli-service build",
+ "lint": "vue-cli-service lint"
+ },
+ "dependencies": {
+ "@types/jquery": "^3.3.1",
+ "axios": "^0.26.1",
+ "core-js": "^3.21.1",
+ "crypto-js": "^4.0.0",
+ "dayjs": "^1.11.4",
+ "default-passive-events": "^2.0.0",
+ "echarts": "^5.3.3",
+ "element-resize-detector": "^1.2.4",
+ "element-ui": "2.15.8",
+ "file-saver": "^2.0.5",
+ "jquery": "^3.5.1",
+ "md5": "^2.3.0",
+ "moment": "^2.29.2",
+ "ol": "^6.13.0",
+ "proj4": "^2.7.2",
+ "toastr": "^2.1.4",
+ "vue": "2.6.14",
+ "vue-class-component": "^7.2.3",
+ "vue-i18n": "^8.27.2",
+ "vue-property-decorator": "^9.1.2",
+ "vue-router": "^3.5.1",
+ "vuex": "^3.6.2",
+ "vxe-table": "^3.5.9",
+ "weatherv": "^0.1.12",
+ "xe-utils": "^3.5.6",
+ "xlsx": "^0.18.5"
+ },
+ "devDependencies": {
+ "@types/crypto-js": "^4.1.1",
+ "@types/file-saver": "^2.0.5",
+ "@types/md5": "^2.3.2",
+ "@typescript-eslint/eslint-plugin": "^5.4.0",
+ "@typescript-eslint/parser": "^5.4.0",
+ "@vue/cli-plugin-eslint": "~5.0.0",
+ "@vue/cli-plugin-router": "~5.0.0",
+ "@vue/cli-plugin-typescript": "~5.0.0",
+ "@vue/cli-plugin-vuex": "~5.0.0",
+ "@vue/cli-service": "~5.0.0",
+ "@vue/eslint-config-standard": "^6.1.0",
+ "@vue/eslint-config-typescript": "^9.1.0",
+ "eslint": "^7.32.0",
+ "eslint-plugin-import": "^2.25.3",
+ "eslint-plugin-node": "^11.1.0",
+ "eslint-plugin-promise": "^5.1.0",
+ "eslint-plugin-vue": "^8.0.3",
+ "sass": "^1.32.7",
+ "sass-loader": "^12.0.0",
+ "typescript": "~4.5.5",
+ "vue-template-compiler": "2.6.14"
+ }
+}
diff --git a/public/config/echartTest.json b/public/config/echartTest.json
new file mode 100644
index 0000000..925dc4b
--- /dev/null
+++ b/public/config/echartTest.json
@@ -0,0 +1,3604 @@
+{
+ "data": [
+ [
+ "2015-10-16",
+ 18.4,
+ 18.58,
+ 18.33,
+ 18.79,
+ 67.00,
+ 1,
+ 0.04,
+ 0.11,
+ 0.09
+ ],
+ [
+ "2015-10-19",
+ 18.56,
+ 18.25,
+ 18.19,
+ 18.56,
+ 55.00,
+ 0,
+ -0.00,
+ 0.08,
+ 0.09
+ ],
+ [
+ "2015-10-20",
+ 18.3,
+ 18.22,
+ 18.05,
+ 18.41,
+ 37.00,
+ 0,
+ 0.01,
+ 0.09,
+ 0.09
+ ],
+ [
+ "2015-10-21",
+ 18.18,
+ 18.69,
+ 18.02,
+ 18.98,
+ 89.00,
+ 0,
+ 0.03,
+ 0.10,
+ 0.08
+ ],
+ [
+ "2015-10-22",
+ 18.42,
+ 18.29,
+ 18.22,
+ 18.48,
+ 43.00,
+ 0,
+ -0.06,
+ 0.05,
+ 0.08
+ ],
+ [
+ "2015-10-23",
+ 18.26,
+ 18.19,
+ 18.08,
+ 18.36,
+ 46.00,
+ 0,
+ -0.10,
+ 0.03,
+ 0.09
+ ],
+ [
+ "2015-10-26",
+ 18.33,
+ 18.07,
+ 17.98,
+ 18.35,
+ 65.00,
+ 0,
+ -0.15,
+ 0.03,
+ 0.10
+ ],
+ [
+ "2015-10-27",
+ 18.08,
+ 18.04,
+ 17.88,
+ 18.13,
+ 37.00,
+ 0,
+ -0.19,
+ 0.03,
+ 0.12
+ ],
+ [
+ "2015-10-28",
+ 17.96,
+ 17.86,
+ 17.82,
+ 17.99,
+ 35.00,
+ 0,
+ -0.24,
+ 0.03,
+ 0.15
+ ],
+ [
+ "2015-10-29",
+ 17.85,
+ 17.81,
+ 17.8,
+ 17.93,
+ 27.00,
+ 0,
+ -0.24,
+ 0.06,
+ 0.18
+ ],
+ [
+ "2015-10-30",
+ 17.79,
+ 17.93,
+ 17.78,
+ 18.08,
+ 43.00,
+ 0,
+ -0.22,
+ 0.11,
+ 0.22
+ ],
+ [
+ "2015-11-02",
+ 17.78,
+ 17.83,
+ 17.78,
+ 18.04,
+ 27.00,
+ 0,
+ -0.20,
+ 0.15,
+ 0.25
+ ],
+ [
+ "2015-11-03",
+ 17.84,
+ 17.9,
+ 17.84,
+ 18.06,
+ 34.00,
+ 0,
+ -0.12,
+ 0.22,
+ 0.28
+ ],
+ [
+ "2015-11-04",
+ 17.97,
+ 18.36,
+ 17.85,
+ 18.39,
+ 62.00,
+ 0,
+ -0.00,
+ 0.30,
+ 0.30
+ ],
+ [
+ "2015-11-05",
+ 18.3,
+ 18.57,
+ 18.18,
+ 19.08,
+ 177.00,
+ 0,
+ 0.07,
+ 0.33,
+ 0.30
+ ],
+ [
+ "2015-11-06",
+ 18.53,
+ 18.68,
+ 18.3,
+ 18.71,
+ 95.00,
+ 0,
+ 0.12,
+ 0.35,
+ 0.29
+ ],
+ [
+ "2015-11-09",
+ 18.75,
+ 19.08,
+ 18.75,
+ 19.98,
+ 202.00,
+ 1,
+ 0.16,
+ 0.35,
+ 0.27
+ ],
+ [
+ "2015-11-10",
+ 18.85,
+ 18.64,
+ 18.56,
+ 18.99,
+ 85.00,
+ 0,
+ 0.09,
+ 0.29,
+ 0.25
+ ],
+ [
+ "2015-11-11",
+ 18.64,
+ 18.44,
+ 18.31,
+ 18.64,
+ 50.00,
+ 0,
+ 0.06,
+ 0.27,
+ 0.23
+ ],
+ [
+ "2015-11-12",
+ 18.55,
+ 18.27,
+ 18.17,
+ 18.57,
+ 43.00,
+ 0,
+ 0.05,
+ 0.25,
+ 0.23
+ ],
+ [
+ "2015-11-13",
+ 18.13,
+ 18.14,
+ 18.09,
+ 18.34,
+ 35.00,
+ 0,
+ 0.05,
+ 0.24,
+ 0.22
+ ],
+ [
+ "2015-11-16",
+ 18.01,
+ 18.1,
+ 17.93,
+ 18.17,
+ 34.00,
+ 0,
+ 0.07,
+ 0.25,
+ 0.21
+ ],
+ [
+ "2015-11-17",
+ 18.2,
+ 18.14,
+ 18.08,
+ 18.45,
+ 58.00,
+ 0,
+ 0.11,
+ 0.25,
+ 0.20
+ ],
+ [
+ "2015-11-18",
+ 18.23,
+ 18.16,
+ 18.0,
+ 18.45,
+ 47.00,
+ 0,
+ 0.13,
+ 0.25,
+ 0.19
+ ],
+ [
+ "2015-11-19",
+ 18.08,
+ 18.2,
+ 18.05,
+ 18.25,
+ 32.00,
+ 0,
+ 0.15,
+ 0.24,
+ 0.17
+ ],
+ [
+ "2015-11-20",
+ 18.15,
+ 18.15,
+ 18.11,
+ 18.29,
+ 36.00,
+ 0,
+ 0.13,
+ 0.21,
+ 0.15
+ ],
+ [
+ "2015-11-23",
+ 18.16,
+ 18.19,
+ 18.12,
+ 18.34,
+ 47.00,
+ 0,
+ 0.11,
+ 0.18,
+ 0.13
+ ],
+ [
+ "2015-11-24",
+ 18.23,
+ 17.88,
+ 17.7,
+ 18.23,
+ 62.00,
+ 0,
+ 0.03,
+ 0.13,
+ 0.11
+ ],
+ [
+ "2015-11-25",
+ 17.85,
+ 17.73,
+ 17.56,
+ 17.85,
+ 66.00,
+ 0,
+ -0.03,
+ 0.09,
+ 0.11
+ ],
+ [
+ "2015-11-26",
+ 17.79,
+ 17.53,
+ 17.5,
+ 17.92,
+ 63.00,
+ 0,
+ -0.10,
+ 0.06,
+ 0.11
+ ],
+ [
+ "2015-11-27",
+ 17.51,
+ 17.04,
+ 16.9,
+ 17.51,
+ 67.00,
+ 0,
+ -0.16,
+ 0.05,
+ 0.13
+ ],
+ [
+ "2015-11-30",
+ 17.07,
+ 17.2,
+ 16.98,
+ 17.32,
+ 55.00,
+ 0,
+ -0.12,
+ 0.09,
+ 0.15
+ ],
+ [
+ "2015-12-01",
+ 17.28,
+ 17.11,
+ 16.91,
+ 17.28,
+ 39.00,
+ 0,
+ -0.09,
+ 0.12,
+ 0.16
+ ],
+ [
+ "2015-12-02",
+ 17.13,
+ 17.91,
+ 17.05,
+ 17.99,
+ 102.00,
+ 0,
+ -0.01,
+ 0.17,
+ 0.18
+ ],
+ [
+ "2015-12-03",
+ 17.8,
+ 17.78,
+ 17.61,
+ 17.98,
+ 71.00,
+ 0,
+ -0.09,
+ 0.14,
+ 0.18
+ ],
+ [
+ "2015-12-04",
+ 17.6,
+ 17.25,
+ 17.13,
+ 17.69,
+ 51.00,
+ 0,
+ -0.18,
+ 0.10,
+ 0.19
+ ],
+ [
+ "2015-12-07",
+ 17.2,
+ 17.39,
+ 17.15,
+ 17.45,
+ 43.00,
+ 0,
+ -0.19,
+ 0.12,
+ 0.22
+ ],
+ [
+ "2015-12-08",
+ 17.3,
+ 17.42,
+ 17.18,
+ 17.62,
+ 45.00,
+ 0,
+ -0.23,
+ 0.13,
+ 0.24
+ ],
+ [
+ "2015-12-09",
+ 17.33,
+ 17.39,
+ 17.32,
+ 17.59,
+ 44.00,
+ 0,
+ -0.29,
+ 0.13,
+ 0.28
+ ],
+ [
+ "2015-12-10",
+ 17.39,
+ 17.26,
+ 17.21,
+ 17.65,
+ 44.00,
+ 0,
+ -0.37,
+ 0.13,
+ 0.32
+ ],
+ [
+ "2015-12-11",
+ 17.23,
+ 16.92,
+ 16.66,
+ 17.26,
+ 114.00,
+ 1,
+ -0.44,
+ 0.15,
+ 0.37
+ ],
+ [
+ "2015-12-14",
+ 16.75,
+ 17.06,
+ 16.5,
+ 17.09,
+ 94.00,
+ 0,
+ -0.44,
+ 0.21,
+ 0.44
+ ],
+ [
+ "2015-12-15",
+ 17.03,
+ 17.03,
+ 16.9,
+ 17.06,
+ 46.00,
+ 0,
+ -0.44,
+ 0.28,
+ 0.50
+ ],
+ [
+ "2015-12-16",
+ 17.08,
+ 16.96,
+ 16.87,
+ 17.09,
+ 30.00,
+ 0,
+ -0.40,
+ 0.36,
+ 0.56
+ ],
+ [
+ "2015-12-17",
+ 17.0,
+ 17.1,
+ 16.95,
+ 17.12,
+ 50.00,
+ 0,
+ -0.30,
+ 0.47,
+ 0.62
+ ],
+ [
+ "2015-12-18",
+ 17.09,
+ 17.52,
+ 17.04,
+ 18.06,
+ 156.00,
+ 0,
+ -0.14,
+ 0.59,
+ 0.66
+ ],
+ [
+ "2015-12-21",
+ 17.43,
+ 18.23,
+ 17.35,
+ 18.45,
+ 152.00,
+ 1,
+ 0.02,
+ 0.69,
+ 0.68
+ ],
+ [
+ "2015-12-22",
+ 18.14,
+ 18.27,
+ 18.06,
+ 18.32,
+ 94.00,
+ 0,
+ 0.08,
+ 0.72,
+ 0.68
+ ],
+ [
+ "2015-12-23",
+ 18.28,
+ 18.19,
+ 18.17,
+ 18.71,
+ 108.00,
+ 0,
+ 0.13,
+ 0.73,
+ 0.67
+ ],
+ [
+ "2015-12-24",
+ 18.18,
+ 18.14,
+ 18.01,
+ 18.31,
+ 37.00,
+ 0,
+ 0.19,
+ 0.74,
+ 0.65
+ ],
+ [
+ "2015-12-25",
+ 18.22,
+ 18.33,
+ 18.2,
+ 18.36,
+ 48.00,
+ 0,
+ 0.26,
+ 0.75,
+ 0.62
+ ],
+ [
+ "2015-12-28",
+ 18.35,
+ 17.84,
+ 17.8,
+ 18.39,
+ 48.00,
+ 0,
+ 0.27,
+ 0.72,
+ 0.59
+ ],
+ [
+ "2015-12-29",
+ 17.83,
+ 17.94,
+ 17.71,
+ 17.97,
+ 36.00,
+ 0,
+ 0.36,
+ 0.73,
+ 0.55
+ ],
+ [
+ "2015-12-30",
+ 17.9,
+ 18.26,
+ 17.55,
+ 18.3,
+ 71.00,
+ 1,
+ 0.43,
+ 0.71,
+ 0.50
+ ],
+ [
+ "2015-12-31",
+ 18.12,
+ 17.99,
+ 17.91,
+ 18.33,
+ 72.00,
+ 0,
+ 0.40,
+ 0.63,
+ 0.43
+ ],
+ [
+ "2016-01-04",
+ 17.91,
+ 17.28,
+ 17.16,
+ 17.95,
+ 37.00,
+ 1,
+ 0.34,
+ 0.55,
+ 0.38
+ ],
+ [
+ "2016-01-05",
+ 17.17,
+ 17.23,
+ 17.0,
+ 17.55,
+ 51.00,
+ 0,
+ 0.37,
+ 0.51,
+ 0.33
+ ],
+ [
+ "2016-01-06",
+ 17.2,
+ 17.31,
+ 17.06,
+ 17.33,
+ 31.00,
+ 0,
+ 0.37,
+ 0.46,
+ 0.28
+ ],
+ [
+ "2016-01-07",
+ 17.15,
+ 16.67,
+ 16.51,
+ 17.15,
+ 19.00,
+ 0,
+ 0.30,
+ 0.37,
+ 0.22
+ ],
+ [
+ "2016-01-08",
+ 16.8,
+ 16.81,
+ 16.61,
+ 17.06,
+ 60.00,
+ 0,
+ 0.29,
+ 0.32,
+ 0.18
+ ],
+ [
+ "2016-01-11",
+ 16.68,
+ 16.04,
+ 16.0,
+ 16.68,
+ 65.00,
+ 0,
+ 0.20,
+ 0.24,
+ 0.14
+ ],
+ [
+ "2016-01-12",
+ 16.03,
+ 15.98,
+ 15.88,
+ 16.25,
+ 46.00,
+ 0,
+ 0.20,
+ 0.21,
+ 0.11
+ ],
+ [
+ "2016-01-13",
+ 16.21,
+ 15.87,
+ 15.78,
+ 16.21,
+ 57.00,
+ 0,
+ 0.20,
+ 0.18,
+ 0.08
+ ],
+ [
+ "2016-01-14",
+ 15.55,
+ 15.89,
+ 15.52,
+ 15.96,
+ 42.00,
+ 0,
+ 0.20,
+ 0.16,
+ 0.05
+ ],
+ [
+ "2016-01-15",
+ 15.87,
+ 15.48,
+ 15.45,
+ 15.92,
+ 34.00,
+ 1,
+ 0.17,
+ 0.11,
+ 0.02
+ ],
+ [
+ "2016-01-18",
+ 15.39,
+ 15.42,
+ 15.36,
+ 15.7,
+ 26.00,
+ 0,
+ 0.21,
+ 0.10,
+ -0.00
+ ],
+ [
+ "2016-01-19",
+ 15.58,
+ 15.71,
+ 15.35,
+ 15.77,
+ 38.00,
+ 0,
+ 0.25,
+ 0.09,
+ -0.03
+ ],
+ [
+ "2016-01-20",
+ 15.56,
+ 15.52,
+ 15.24,
+ 15.68,
+ 38.00,
+ 0,
+ 0.23,
+ 0.05,
+ -0.07
+ ],
+ [
+ "2016-01-21",
+ 15.41,
+ 15.3,
+ 15.28,
+ 15.68,
+ 35.00,
+ 0,
+ 0.21,
+ 0.00,
+ -0.10
+ ],
+ [
+ "2016-01-22",
+ 15.48,
+ 15.28,
+ 15.13,
+ 15.49,
+ 30.00,
+ 0,
+ 0.21,
+ -0.02,
+ -0.13
+ ],
+ [
+ "2016-01-25",
+ 15.29,
+ 15.48,
+ 15.2,
+ 15.49,
+ 21.00,
+ 0,
+ 0.20,
+ -0.06,
+ -0.16
+ ],
+ [
+ "2016-01-26",
+ 15.33,
+ 14.86,
+ 14.78,
+ 15.39,
+ 30.00,
+ 0,
+ 0.12,
+ -0.13,
+ -0.19
+ ],
+ [
+ "2016-01-27",
+ 14.96,
+ 15.0,
+ 14.84,
+ 15.22,
+ 51.00,
+ 0,
+ 0.13,
+ -0.14,
+ -0.20
+ ],
+ [
+ "2016-01-28",
+ 14.96,
+ 14.72,
+ 14.62,
+ 15.06,
+ 25.00,
+ 0,
+ 0.10,
+ -0.17,
+ -0.22
+ ],
+ [
+ "2016-01-29",
+ 14.75,
+ 14.99,
+ 14.62,
+ 15.08,
+ 36.00,
+ 0,
+ 0.13,
+ -0.17,
+ -0.24
+ ],
+ [
+ "2016-02-01",
+ 14.98,
+ 14.72,
+ 14.48,
+ 15.18,
+ 27.00,
+ 0,
+ 0.10,
+ -0.21,
+ -0.26
+ ],
+ [
+ "2016-02-02",
+ 14.65,
+ 14.85,
+ 14.65,
+ 14.95,
+ 18.00,
+ 0,
+ 0.11,
+ -0.21,
+ -0.27
+ ],
+ [
+ "2016-02-03",
+ 14.72,
+ 14.67,
+ 14.55,
+ 14.8,
+ 23.00,
+ 0,
+ 0.10,
+ -0.24,
+ -0.29
+ ],
+ [
+ "2016-02-04",
+ 14.79,
+ 14.88,
+ 14.69,
+ 14.93,
+ 22.00,
+ 0,
+ 0.13,
+ -0.24,
+ -0.30
+ ],
+ [
+ "2016-02-05",
+ 14.9,
+ 14.86,
+ 14.78,
+ 14.93,
+ 16.00,
+ 0,
+ 0.12,
+ -0.26,
+ -0.32
+ ],
+ [
+ "2016-02-15",
+ 14.5,
+ 14.66,
+ 14.47,
+ 14.82,
+ 19.00,
+ 0,
+ 0.11,
+ -0.28,
+ -0.34
+ ],
+ [
+ "2016-02-16",
+ 14.77,
+ 14.94,
+ 14.72,
+ 15.05,
+ 26.00,
+ 0,
+ 0.14,
+ -0.28,
+ -0.35
+ ],
+ [
+ "2016-02-17",
+ 14.95,
+ 15.03,
+ 14.88,
+ 15.07,
+ 38.00,
+ 0,
+ 0.12,
+ -0.31,
+ -0.37
+ ],
+ [
+ "2016-02-18",
+ 14.95,
+ 14.9,
+ 14.87,
+ 15.06,
+ 28.00,
+ 0,
+ 0.07,
+ -0.35,
+ -0.39
+ ],
+ [
+ "2016-02-19",
+ 14.9,
+ 14.75,
+ 14.68,
+ 14.94,
+ 22.00,
+ 0,
+ 0.03,
+ -0.38,
+ -0.40
+ ],
+ [
+ "2016-02-22",
+ 14.88,
+ 15.01,
+ 14.79,
+ 15.11,
+ 38.00,
+ 1,
+ 0.01,
+ -0.40,
+ -0.40
+ ],
+ [
+ "2016-02-23",
+ 15.01,
+ 14.83,
+ 14.72,
+ 15.01,
+ 24.00,
+ 0,
+ -0.09,
+ -0.45,
+ -0.40
+ ],
+ [
+ "2016-02-24",
+ 14.75,
+ 14.81,
+ 14.67,
+ 14.87,
+ 21.00,
+ 0,
+ -0.17,
+ -0.48,
+ -0.39
+ ],
+ [
+ "2016-02-25",
+ 14.81,
+ 14.25,
+ 14.21,
+ 14.81,
+ 51.00,
+ 1,
+ -0.27,
+ -0.50,
+ -0.37
+ ],
+ [
+ "2016-02-26",
+ 14.35,
+ 14.45,
+ 14.28,
+ 14.57,
+ 28.00,
+ 0,
+ -0.26,
+ -0.46,
+ -0.33
+ ],
+ [
+ "2016-02-29",
+ 14.43,
+ 14.56,
+ 14.04,
+ 14.6,
+ 48.00,
+ 0,
+ -0.25,
+ -0.41,
+ -0.29
+ ],
+ [
+ "2016-03-01",
+ 14.56,
+ 14.65,
+ 14.36,
+ 14.78,
+ 32.00,
+ 0,
+ -0.21,
+ -0.36,
+ -0.25
+ ],
+ [
+ "2016-03-02",
+ 14.79,
+ 14.96,
+ 14.72,
+ 14.97,
+ 60.00,
+ 0,
+ -0.13,
+ -0.29,
+ -0.22
+ ],
+ [
+ "2016-03-03",
+ 14.95,
+ 15.15,
+ 14.91,
+ 15.19,
+ 53.00,
+ 1,
+ -0.05,
+ -0.23,
+ -0.21
+ ],
+ [
+ "2016-03-04",
+ 15.14,
+ 15.97,
+ 15.02,
+ 16.02,
+ 164.00,
+ 1,
+ 0.06,
+ -0.17,
+ -0.20
+ ],
+ [
+ "2016-03-07",
+ 15.9,
+ 15.78,
+ 15.65,
+ 16.0,
+ 41.00,
+ 0,
+ 0.04,
+ -0.19,
+ -0.21
+ ],
+ [
+ "2016-03-08",
+ 15.78,
+ 15.96,
+ 15.21,
+ 15.99,
+ 45.00,
+ 0,
+ 0.05,
+ -0.19,
+ -0.21
+ ],
+ [
+ "2016-03-09",
+ 15.73,
+ 16.05,
+ 15.41,
+ 16.08,
+ 74.00,
+ 0,
+ 0.03,
+ -0.20,
+ -0.22
+ ],
+ [
+ "2016-03-10",
+ 15.82,
+ 15.66,
+ 15.65,
+ 15.98,
+ 19.00,
+ 0,
+ -0.02,
+ -0.23,
+ -0.22
+ ],
+ [
+ "2016-03-11",
+ 15.59,
+ 15.76,
+ 15.42,
+ 15.78,
+ 32.00,
+ 0,
+ 0.01,
+ -0.22,
+ -0.22
+ ],
+ [
+ "2016-03-14",
+ 15.78,
+ 15.72,
+ 15.65,
+ 16.04,
+ 31.00,
+ 0,
+ 0.03,
+ -0.20,
+ -0.22
+ ],
+ [
+ "2016-03-15",
+ 15.81,
+ 15.86,
+ 15.6,
+ 15.99,
+ 35.00,
+ 0,
+ 0.10,
+ -0.18,
+ -0.23
+ ],
+ [
+ "2016-03-16",
+ 15.88,
+ 16.42,
+ 15.79,
+ 16.45,
+ 123.00,
+ 0,
+ 0.17,
+ -0.16,
+ -0.24
+ ],
+ [
+ "2016-03-17",
+ 16.39,
+ 16.23,
+ 16.11,
+ 16.4,
+ 46.00,
+ 0,
+ 0.14,
+ -0.20,
+ -0.26
+ ],
+ [
+ "2016-03-18",
+ 16.39,
+ 16.17,
+ 16.04,
+ 16.4,
+ 59.00,
+ 0,
+ 0.13,
+ -0.22,
+ -0.28
+ ],
+ [
+ "2016-03-21",
+ 16.21,
+ 16.22,
+ 16.11,
+ 16.44,
+ 50.00,
+ 0,
+ 0.12,
+ -0.24,
+ -0.30
+ ],
+ [
+ "2016-03-22",
+ 16.27,
+ 16.19,
+ 16.16,
+ 16.42,
+ 33.00,
+ 0,
+ 0.10,
+ -0.27,
+ -0.32
+ ],
+ [
+ "2016-03-23",
+ 16.26,
+ 16.18,
+ 16.18,
+ 16.29,
+ 19.00,
+ 0,
+ 0.08,
+ -0.30,
+ -0.33
+ ],
+ [
+ "2016-03-24",
+ 16.18,
+ 16.11,
+ 16.01,
+ 16.23,
+ 23.00,
+ 0,
+ 0.04,
+ -0.33,
+ -0.35
+ ],
+ [
+ "2016-03-25",
+ 16.12,
+ 16.13,
+ 16.1,
+ 16.2,
+ 15.00,
+ 0,
+ 0.00,
+ -0.35,
+ -0.35
+ ],
+ [
+ "2016-03-28",
+ 16.15,
+ 15.85,
+ 15.81,
+ 16.2,
+ 22.00,
+ 0,
+ -0.06,
+ -0.38,
+ -0.35
+ ],
+ [
+ "2016-03-29",
+ 15.9,
+ 15.79,
+ 15.76,
+ 16.05,
+ 19.00,
+ 0,
+ -0.06,
+ -0.37,
+ -0.34
+ ],
+ [
+ "2016-03-30",
+ 15.79,
+ 16.24,
+ 15.78,
+ 16.3,
+ 29.00,
+ 0,
+ -0.03,
+ -0.35,
+ -0.33
+ ],
+ [
+ "2016-03-31",
+ 16.3,
+ 16.09,
+ 16.02,
+ 16.35,
+ 25.00,
+ 0,
+ -0.07,
+ -0.37,
+ -0.33
+ ],
+ [
+ "2016-04-01",
+ 16.18,
+ 16.27,
+ 15.98,
+ 16.3,
+ 38.00,
+ 0,
+ -0.08,
+ -0.36,
+ -0.32
+ ],
+ [
+ "2016-04-05",
+ 16.13,
+ 16.34,
+ 16.07,
+ 16.37,
+ 39.00,
+ 0,
+ -0.13,
+ -0.37,
+ -0.31
+ ],
+ [
+ "2016-04-06",
+ 16.21,
+ 16.26,
+ 16.19,
+ 16.35,
+ 30.00,
+ 0,
+ -0.20,
+ -0.39,
+ -0.29
+ ],
+ [
+ "2016-04-07",
+ 16.32,
+ 16.1,
+ 16.05,
+ 16.35,
+ 29.00,
+ 1,
+ -0.26,
+ -0.39,
+ -0.26
+ ],
+ [
+ "2016-04-08",
+ 16.0,
+ 16.16,
+ 15.98,
+ 16.21,
+ 22.00,
+ 0,
+ -0.28,
+ -0.37,
+ -0.23
+ ],
+ [
+ "2016-04-11",
+ 16.16,
+ 16.31,
+ 16.15,
+ 16.57,
+ 31.00,
+ 0,
+ -0.30,
+ -0.33,
+ -0.19
+ ],
+ [
+ "2016-04-12",
+ 16.41,
+ 16.29,
+ 16.12,
+ 16.41,
+ 17.00,
+ 0,
+ -0.31,
+ -0.30,
+ -0.14
+ ],
+ [
+ "2016-04-13",
+ 16.39,
+ 16.48,
+ 16.0,
+ 16.68,
+ 40.00,
+ 0,
+ -0.30,
+ -0.25,
+ -0.10
+ ],
+ [
+ "2016-04-14",
+ 16.5,
+ 16.46,
+ 16.37,
+ 16.68,
+ 22.00,
+ 0,
+ -0.27,
+ -0.19,
+ -0.06
+ ],
+ [
+ "2016-04-15",
+ 16.56,
+ 16.93,
+ 16.46,
+ 17.04,
+ 58.00,
+ 0,
+ -0.20,
+ -0.12,
+ -0.02
+ ],
+ [
+ "2016-04-18",
+ 16.76,
+ 17.06,
+ 16.72,
+ 17.27,
+ 50.00,
+ 0,
+ -0.16,
+ -0.07,
+ 0.01
+ ],
+ [
+ "2016-04-19",
+ 17.21,
+ 17.11,
+ 17.02,
+ 17.23,
+ 30.00,
+ 0,
+ -0.12,
+ -0.02,
+ 0.03
+ ],
+ [
+ "2016-04-20",
+ 17.11,
+ 17.33,
+ 16.8,
+ 17.36,
+ 78.00,
+ 0,
+ -0.04,
+ 0.03,
+ 0.05
+ ],
+ [
+ "2016-04-21",
+ 17.27,
+ 17.69,
+ 17.17,
+ 17.93,
+ 79.00,
+ 0,
+ 0.05,
+ 0.08,
+ 0.06
+ ],
+ [
+ "2016-04-22",
+ 17.6,
+ 17.87,
+ 17.56,
+ 18.02,
+ 55.00,
+ 0,
+ 0.09,
+ 0.10,
+ 0.05
+ ],
+ [
+ "2016-04-25",
+ 17.75,
+ 17.9,
+ 17.41,
+ 17.96,
+ 39.00,
+ 1,
+ 0.11,
+ 0.09,
+ 0.04
+ ],
+ [
+ "2016-04-26",
+ 17.81,
+ 17.91,
+ 17.6,
+ 17.95,
+ 39.00,
+ 0,
+ 0.12,
+ 0.08,
+ 0.02
+ ],
+ [
+ "2016-04-27",
+ 17.9,
+ 17.88,
+ 17.81,
+ 17.95,
+ 25.00,
+ 0,
+ 0.12,
+ 0.06,
+ 0.00
+ ],
+ [
+ "2016-04-28",
+ 17.93,
+ 17.88,
+ 17.67,
+ 17.93,
+ 28.00,
+ 0,
+ 0.11,
+ 0.04,
+ -0.01
+ ],
+ [
+ "2016-04-29",
+ 17.87,
+ 17.75,
+ 17.73,
+ 17.92,
+ 19.00,
+ 0,
+ 0.08,
+ 0.01,
+ -0.03
+ ],
+ [
+ "2016-05-03",
+ 17.79,
+ 17.7,
+ 17.56,
+ 17.85,
+ 35.00,
+ 0,
+ 0.05,
+ -0.01,
+ -0.04
+ ],
+ [
+ "2016-05-04",
+ 17.7,
+ 17.65,
+ 17.59,
+ 17.71,
+ 24.00,
+ 0,
+ 0.02,
+ -0.04,
+ -0.05
+ ],
+ [
+ "2016-05-05",
+ 17.65,
+ 17.62,
+ 17.46,
+ 17.7,
+ 20.00,
+ 0,
+ -0.03,
+ -0.06,
+ -0.05
+ ],
+ [
+ "2016-05-06",
+ 17.62,
+ 17.32,
+ 17.3,
+ 17.65,
+ 29.00,
+ 0,
+ -0.10,
+ -0.09,
+ -0.05
+ ],
+ [
+ "2016-05-09",
+ 17.33,
+ 17.3,
+ 17.21,
+ 17.45,
+ 23.00,
+ 0,
+ -0.13,
+ -0.10,
+ -0.03
+ ],
+ [
+ "2016-05-10",
+ 17.11,
+ 17.04,
+ 16.98,
+ 17.41,
+ 28.00,
+ 0,
+ -0.15,
+ -0.09,
+ -0.01
+ ],
+ [
+ "2016-05-11",
+ 17.06,
+ 17.15,
+ 17.06,
+ 17.32,
+ 20.00,
+ 0,
+ -0.12,
+ -0.05,
+ 0.01
+ ],
+ [
+ "2016-05-12",
+ 17.02,
+ 17.46,
+ 17.02,
+ 17.58,
+ 26.00,
+ 0,
+ -0.07,
+ -0.01,
+ 0.03
+ ],
+ [
+ "2016-05-13",
+ 17.41,
+ 17.57,
+ 17.34,
+ 17.62,
+ 23.00,
+ 0,
+ -0.06,
+ 0.01,
+ 0.03
+ ],
+ [
+ "2016-05-16",
+ 17.55,
+ 17.5,
+ 17.48,
+ 17.64,
+ 37.00,
+ 0,
+ -0.06,
+ 0.01,
+ 0.04
+ ],
+ [
+ "2016-05-17",
+ 17.49,
+ 17.48,
+ 17.39,
+ 17.53,
+ 13.00,
+ 0,
+ -0.03,
+ 0.03,
+ 0.05
+ ],
+ [
+ "2016-05-18",
+ 17.41,
+ 17.82,
+ 17.39,
+ 17.87,
+ 46.00,
+ 0,
+ 0.01,
+ 0.06,
+ 0.06
+ ],
+ [
+ "2016-05-19",
+ 17.74,
+ 17.81,
+ 17.67,
+ 17.86,
+ 17.00,
+ 0,
+ -0.01,
+ 0.05,
+ 0.05
+ ],
+ [
+ "2016-05-20",
+ 17.76,
+ 17.88,
+ 17.7,
+ 17.93,
+ 14.00,
+ 0,
+ -0.03,
+ 0.04,
+ 0.06
+ ],
+ [
+ "2016-05-23",
+ 17.88,
+ 17.52,
+ 17.48,
+ 17.97,
+ 16.00,
+ 0,
+ -0.09,
+ 0.02,
+ 0.06
+ ],
+ [
+ "2016-05-24",
+ 17.51,
+ 17.33,
+ 17.32,
+ 17.51,
+ 8.00,
+ 0,
+ -0.09,
+ 0.03,
+ 0.07
+ ],
+ [
+ "2016-05-25",
+ 17.59,
+ 17.55,
+ 17.44,
+ 17.59,
+ 10.00,
+ 0,
+ -0.03,
+ 0.07,
+ 0.08
+ ],
+ [
+ "2016-05-26",
+ 17.5,
+ 17.69,
+ 17.5,
+ 17.8,
+ 12.00,
+ 0,
+ 0.00,
+ 0.09,
+ 0.09
+ ],
+ [
+ "2016-05-27",
+ 17.77,
+ 17.66,
+ 17.62,
+ 17.77,
+ 7.00,
+ 0,
+ 0.03,
+ 0.10,
+ 0.09
+ ],
+ [
+ "2016-05-30",
+ 17.75,
+ 17.84,
+ 17.62,
+ 17.87,
+ 20.00,
+ 0,
+ 0.08,
+ 0.12,
+ 0.08
+ ],
+ [
+ "2016-05-31",
+ 17.88,
+ 18.0,
+ 17.81,
+ 18.03,
+ 41.00,
+ 0,
+ 0.10,
+ 0.12,
+ 0.07
+ ],
+ [
+ "2016-06-01",
+ 18.09,
+ 17.83,
+ 17.73,
+ 18.09,
+ 22.00,
+ 0,
+ 0.08,
+ 0.10,
+ 0.06
+ ],
+ [
+ "2016-06-02",
+ 17.82,
+ 17.73,
+ 17.66,
+ 17.88,
+ 10.00,
+ 0,
+ 0.07,
+ 0.08,
+ 0.05
+ ],
+ [
+ "2016-06-03",
+ 17.8,
+ 17.78,
+ 17.71,
+ 17.83,
+ 9.00,
+ 0,
+ 0.08,
+ 0.08,
+ 0.04
+ ],
+ [
+ "2016-06-06",
+ 17.73,
+ 17.64,
+ 17.56,
+ 17.83,
+ 12.00,
+ 0,
+ 0.07,
+ 0.06,
+ 0.03
+ ],
+ [
+ "2016-06-07",
+ 17.76,
+ 17.8,
+ 17.59,
+ 17.87,
+ 11.00,
+ 0,
+ 0.08,
+ 0.06,
+ 0.02
+ ],
+ [
+ "2016-06-08",
+ 17.75,
+ 17.77,
+ 17.65,
+ 17.84,
+ 9.00,
+ 0,
+ 0.04,
+ 0.03,
+ 0.01
+ ],
+ [
+ "2016-06-13",
+ 17.58,
+ 17.32,
+ 17.29,
+ 17.79,
+ 16.00,
+ 0,
+ -0.02,
+ -0.01,
+ 0.00
+ ],
+ [
+ "2016-06-14",
+ 17.33,
+ 17.38,
+ 17.29,
+ 17.5,
+ 10.00,
+ 0,
+ -0.01,
+ 0.00,
+ 0.00
+ ],
+ [
+ "2016-06-15",
+ 17.25,
+ 17.39,
+ 17.25,
+ 17.46,
+ 18.00,
+ 0,
+ 0.00,
+ 0.01,
+ 0.00
+ ],
+ [
+ "2016-06-16",
+ 17.26,
+ 17.4,
+ 17.26,
+ 17.46,
+ 22.00,
+ 0,
+ 0.01,
+ 0.01,
+ 0.00
+ ],
+ [
+ "2016-06-17",
+ 17.38,
+ 17.5,
+ 17.37,
+ 17.67,
+ 13.00,
+ 0,
+ 0.03,
+ 0.02,
+ 0.00
+ ],
+ [
+ "2016-06-20",
+ 17.62,
+ 17.51,
+ 17.42,
+ 17.63,
+ 15.00,
+ 0,
+ 0.03,
+ 0.01,
+ -0.00
+ ],
+ [
+ "2016-06-21",
+ 17.53,
+ 17.54,
+ 17.5,
+ 17.7,
+ 11.00,
+ 0,
+ 0.02,
+ 0.00,
+ -0.01
+ ],
+ [
+ "2016-06-22",
+ 17.5,
+ 17.5,
+ 17.46,
+ 17.6,
+ 10.00,
+ 0,
+ -0.01,
+ -0.01,
+ -0.01
+ ],
+ [
+ "2016-06-23",
+ 17.52,
+ 17.26,
+ 17.24,
+ 17.53,
+ 16.00,
+ 0,
+ -0.04,
+ -0.03,
+ -0.01
+ ],
+ [
+ "2016-06-24",
+ 17.26,
+ 17.25,
+ 17.18,
+ 17.38,
+ 60.00,
+ 0,
+ -0.03,
+ -0.02,
+ -0.00
+ ],
+ [
+ "2016-06-27",
+ 17.25,
+ 17.28,
+ 17.18,
+ 17.33,
+ 19.00,
+ 0,
+ -0.01,
+ -0.00,
+ 0.00
+ ],
+ [
+ "2016-06-28",
+ 17.25,
+ 17.29,
+ 17.21,
+ 17.32,
+ 13.00,
+ 0,
+ 0.02,
+ 0.01,
+ 0.00
+ ],
+ [
+ "2016-06-29",
+ 17.31,
+ 17.45,
+ 17.27,
+ 17.49,
+ 21.00,
+ 0,
+ 0.07,
+ 0.04,
+ 0.00
+ ],
+ [
+ "2016-06-30",
+ 17.47,
+ 17.5,
+ 17.39,
+ 17.55,
+ 17.00,
+ 0,
+ 0.11,
+ 0.04,
+ -0.01
+ ],
+ [
+ "2016-07-01",
+ 17.5,
+ 17.63,
+ 17.49,
+ 17.66,
+ 10.00,
+ 0,
+ 0.14,
+ 0.05,
+ -0.03
+ ],
+ [
+ "2016-07-04",
+ 17.63,
+ 17.72,
+ 17.63,
+ 17.92,
+ 17.00,
+ 0,
+ 0.16,
+ 0.03,
+ -0.05
+ ],
+ [
+ "2016-07-05",
+ 17.79,
+ 17.56,
+ 17.45,
+ 17.79,
+ 18.00,
+ 0,
+ 0.14,
+ 0.00,
+ -0.07
+ ],
+ [
+ "2016-07-06",
+ 17.53,
+ 17.42,
+ 17.31,
+ 17.54,
+ 20.00,
+ 0,
+ 0.14,
+ -0.02,
+ -0.09
+ ],
+ [
+ "2016-07-07",
+ 17.41,
+ 17.51,
+ 17.35,
+ 17.52,
+ 15.00,
+ 0,
+ 0.16,
+ -0.03,
+ -0.11
+ ],
+ [
+ "2016-07-08",
+ 17.5,
+ 17.39,
+ 17.35,
+ 17.51,
+ 15.00,
+ 0,
+ 0.16,
+ -0.05,
+ -0.13
+ ],
+ [
+ "2016-07-11",
+ 17.49,
+ 17.48,
+ 17.4,
+ 17.55,
+ 16.00,
+ 0,
+ 0.17,
+ -0.07,
+ -0.15
+ ],
+ [
+ "2016-07-12",
+ 17.48,
+ 17.71,
+ 17.46,
+ 17.75,
+ 25.00,
+ 0,
+ 0.16,
+ -0.10,
+ -0.18
+ ],
+ [
+ "2016-07-13",
+ 17.13,
+ 17.05,
+ 17.02,
+ 17.39,
+ 28.00,
+ 0,
+ 0.07,
+ -0.17,
+ -0.20
+ ],
+ [
+ "2016-07-14",
+ 17.07,
+ 17.09,
+ 17.0,
+ 17.16,
+ 12.00,
+ 0,
+ 0.08,
+ -0.17,
+ -0.21
+ ],
+ [
+ "2016-07-15",
+ 17.08,
+ 17.14,
+ 17.08,
+ 17.17,
+ 11.00,
+ 0,
+ 0.09,
+ -0.18,
+ -0.22
+ ],
+ [
+ "2016-07-18",
+ 17.15,
+ 17.26,
+ 17.13,
+ 17.49,
+ 24.00,
+ 0,
+ 0.10,
+ -0.19,
+ -0.23
+ ],
+ [
+ "2016-07-19",
+ 17.26,
+ 17.12,
+ 17.09,
+ 17.33,
+ 13.00,
+ 0,
+ 0.07,
+ -0.21,
+ -0.25
+ ],
+ [
+ "2016-07-20",
+ 17.1,
+ 17.07,
+ 17.02,
+ 17.14,
+ 11.00,
+ 0,
+ 0.06,
+ -0.23,
+ -0.26
+ ],
+ [
+ "2016-07-21",
+ 17.07,
+ 17.24,
+ 17.07,
+ 17.27,
+ 14.00,
+ 0,
+ 0.07,
+ -0.23,
+ -0.27
+ ],
+ [
+ "2016-07-22",
+ 17.25,
+ 17.08,
+ 17.03,
+ 17.25,
+ 10.00,
+ 0,
+ 0.04,
+ -0.26,
+ -0.28
+ ],
+ [
+ "2016-07-25",
+ 17.09,
+ 17.12,
+ 17.01,
+ 17.18,
+ 8.00,
+ 0,
+ 0.04,
+ -0.26,
+ -0.28
+ ],
+ [
+ "2016-07-26",
+ 17.05,
+ 17.17,
+ 17.05,
+ 17.2,
+ 11.00,
+ 0,
+ 0.04,
+ -0.27,
+ -0.29
+ ],
+ [
+ "2016-07-27",
+ 17.2,
+ 17.37,
+ 16.89,
+ 17.38,
+ 32.00,
+ 0,
+ 0.02,
+ -0.28,
+ -0.29
+ ],
+ [
+ "2016-07-28",
+ 17.19,
+ 17.14,
+ 17.09,
+ 17.29,
+ 19.00,
+ 0,
+ -0.04,
+ -0.32,
+ -0.30
+ ],
+ [
+ "2016-07-29",
+ 17.15,
+ 17.16,
+ 17.04,
+ 17.23,
+ 12.00,
+ 0,
+ -0.08,
+ -0.33,
+ -0.29
+ ],
+ [
+ "2016-08-01",
+ 17.15,
+ 17.18,
+ 17.1,
+ 17.24,
+ 19.00,
+ 0,
+ -0.13,
+ -0.34,
+ -0.28
+ ],
+ [
+ "2016-08-02",
+ 17.21,
+ 17.15,
+ 17.12,
+ 17.25,
+ 9.00,
+ 0,
+ -0.19,
+ -0.36,
+ -0.26
+ ],
+ [
+ "2016-08-03",
+ 17.08,
+ 17.07,
+ 17.01,
+ 17.16,
+ 9.00,
+ 0,
+ -0.25,
+ -0.36,
+ -0.24
+ ],
+ [
+ "2016-08-04",
+ 17.11,
+ 17.06,
+ 16.98,
+ 17.12,
+ 11.00,
+ 1,
+ -0.29,
+ -0.35,
+ -0.20
+ ],
+ [
+ "2016-08-05",
+ 17.06,
+ 17.1,
+ 17.05,
+ 17.15,
+ 16.00,
+ 0,
+ -0.33,
+ -0.32,
+ -0.16
+ ],
+ [
+ "2016-08-08",
+ 17.14,
+ 17.13,
+ 17.07,
+ 17.15,
+ 13.00,
+ 0,
+ -0.35,
+ -0.29,
+ -0.11
+ ],
+ [
+ "2016-08-09",
+ 17.13,
+ 17.17,
+ 17.1,
+ 17.2,
+ 25.00,
+ 0,
+ -0.35,
+ -0.24,
+ -0.06
+ ],
+ [
+ "2016-08-10",
+ 17.17,
+ 17.28,
+ 17.15,
+ 17.29,
+ 18.00,
+ 0,
+ -0.31,
+ -0.17,
+ -0.01
+ ],
+ [
+ "2016-08-11",
+ 17.3,
+ 17.45,
+ 17.26,
+ 17.87,
+ 31.00,
+ 0,
+ -0.24,
+ -0.09,
+ 0.03
+ ],
+ [
+ "2016-08-12",
+ 17.51,
+ 17.99,
+ 17.47,
+ 18.0,
+ 44.00,
+ 0,
+ -0.14,
+ -0.00,
+ 0.07
+ ],
+ [
+ "2016-08-15",
+ 18.1,
+ 18.42,
+ 18.02,
+ 18.99,
+ 81.00,
+ 0,
+ -0.09,
+ 0.04,
+ 0.09
+ ],
+ [
+ "2016-08-16",
+ 18.64,
+ 18.31,
+ 18.12,
+ 18.87,
+ 60.00,
+ 0,
+ -0.10,
+ 0.05,
+ 0.10
+ ],
+ [
+ "2016-08-17",
+ 18.43,
+ 18.4,
+ 18.31,
+ 18.68,
+ 21.00,
+ 0,
+ -0.08,
+ 0.08,
+ 0.11
+ ],
+ [
+ "2016-08-18",
+ 18.33,
+ 18.23,
+ 18.13,
+ 18.65,
+ 32.00,
+ 0,
+ -0.07,
+ 0.09,
+ 0.13
+ ],
+ [
+ "2016-08-19",
+ 18.34,
+ 18.62,
+ 18.31,
+ 18.75,
+ 39.00,
+ 0,
+ 0.00,
+ 0.14,
+ 0.14
+ ],
+ [
+ "2016-08-22",
+ 18.62,
+ 18.69,
+ 18.51,
+ 18.8,
+ 20.00,
+ 0,
+ 0.01,
+ 0.14,
+ 0.13
+ ],
+ [
+ "2016-08-23",
+ 18.61,
+ 18.66,
+ 18.52,
+ 19.0,
+ 28.00,
+ 0,
+ 0.01,
+ 0.14,
+ 0.13
+ ],
+ [
+ "2016-08-24",
+ 18.66,
+ 18.62,
+ 18.43,
+ 18.7,
+ 19.00,
+ 0,
+ 0.00,
+ 0.13,
+ 0.13
+ ],
+ [
+ "2016-08-25",
+ 18.57,
+ 18.51,
+ 18.19,
+ 18.64,
+ 19.00,
+ 0,
+ -0.00,
+ 0.13,
+ 0.13
+ ],
+ [
+ "2016-08-26",
+ 18.49,
+ 18.55,
+ 18.44,
+ 18.6,
+ 16.00,
+ 0,
+ 0.01,
+ 0.13,
+ 0.13
+ ],
+ [
+ "2016-08-29",
+ 18.46,
+ 18.27,
+ 18.03,
+ 18.48,
+ 20.00,
+ 0,
+ 0.01,
+ 0.13,
+ 0.13
+ ],
+ [
+ "2016-08-30",
+ 18.24,
+ 18.44,
+ 18.23,
+ 18.52,
+ 19.00,
+ 0,
+ 0.07,
+ 0.17,
+ 0.13
+ ],
+ [
+ "2016-08-31",
+ 18.36,
+ 18.63,
+ 18.36,
+ 18.76,
+ 15.00,
+ 0,
+ 0.13,
+ 0.18,
+ 0.12
+ ],
+ [
+ "2016-09-01",
+ 18.6,
+ 18.62,
+ 18.55,
+ 18.78,
+ 15.00,
+ 0,
+ 0.16,
+ 0.18,
+ 0.10
+ ],
+ [
+ "2016-09-02",
+ 18.52,
+ 18.68,
+ 18.48,
+ 18.72,
+ 17.00,
+ 0,
+ 0.19,
+ 0.17,
+ 0.08
+ ],
+ [
+ "2016-09-05",
+ 18.68,
+ 18.75,
+ 18.57,
+ 18.82,
+ 19.00,
+ 0,
+ 0.20,
+ 0.15,
+ 0.05
+ ],
+ [
+ "2016-09-06",
+ 18.75,
+ 18.51,
+ 18.43,
+ 18.78,
+ 17.00,
+ 0,
+ 0.18,
+ 0.11,
+ 0.02
+ ],
+ [
+ "2016-09-07",
+ 18.51,
+ 18.56,
+ 18.4,
+ 18.62,
+ 17.00,
+ 0,
+ 0.17,
+ 0.08,
+ -0.00
+ ],
+ [
+ "2016-09-08",
+ 18.58,
+ 18.53,
+ 18.48,
+ 18.63,
+ 8.00,
+ 0,
+ 0.13,
+ 0.04,
+ -0.03
+ ],
+ [
+ "2016-09-09",
+ 18.52,
+ 18.33,
+ 18.31,
+ 18.57,
+ 8.00,
+ 0,
+ 0.06,
+ -0.02,
+ -0.05
+ ],
+ [
+ "2016-09-12",
+ 18.16,
+ 17.9,
+ 17.81,
+ 18.18,
+ 28.00,
+ 0,
+ -0.02,
+ -0.07,
+ -0.06
+ ],
+ [
+ "2016-09-13",
+ 17.91,
+ 17.91,
+ 17.9,
+ 18.08,
+ 13.00,
+ 0,
+ -0.05,
+ -0.08,
+ -0.05
+ ],
+ [
+ "2016-09-14",
+ 17.99,
+ 17.54,
+ 17.48,
+ 17.99,
+ 22.00,
+ 0,
+ -0.09,
+ -0.09,
+ -0.05
+ ],
+ [
+ "2016-09-19",
+ 17.55,
+ 17.81,
+ 17.55,
+ 17.88,
+ 16.00,
+ 0,
+ -0.06,
+ -0.06,
+ -0.03
+ ],
+ [
+ "2016-09-20",
+ 17.8,
+ 17.74,
+ 17.67,
+ 17.85,
+ 10.00,
+ 0,
+ -0.06,
+ -0.05,
+ -0.02
+ ],
+ [
+ "2016-09-21",
+ 17.75,
+ 17.88,
+ 17.75,
+ 17.95,
+ 7.00,
+ 0,
+ -0.03,
+ -0.03,
+ -0.02
+ ],
+ [
+ "2016-09-22",
+ 17.99,
+ 17.97,
+ 17.88,
+ 18.17,
+ 12.00,
+ 0,
+ -0.02,
+ -0.02,
+ -0.01
+ ],
+ [
+ "2016-09-23",
+ 17.99,
+ 17.98,
+ 17.93,
+ 18.09,
+ 13.00,
+ 0,
+ -0.01,
+ -0.01,
+ -0.01
+ ],
+ [
+ "2016-09-26",
+ 17.91,
+ 18.0,
+ 17.85,
+ 18.09,
+ 14.00,
+ 0,
+ -0.00,
+ -0.01,
+ -0.01
+ ],
+ [
+ "2016-09-27",
+ 17.97,
+ 18.07,
+ 17.94,
+ 18.1,
+ 10.00,
+ 0,
+ 0.00,
+ -0.01,
+ -0.01
+ ],
+ [
+ "2016-09-28",
+ 18.06,
+ 17.89,
+ 17.83,
+ 18.06,
+ 10.00,
+ 0,
+ -0.00,
+ -0.01,
+ -0.01
+ ],
+ [
+ "2016-09-29",
+ 17.96,
+ 18.0,
+ 17.92,
+ 18.07,
+ 10.00,
+ 0,
+ 0.03,
+ 0.01,
+ -0.01
+ ],
+ [
+ "2016-09-30",
+ 17.96,
+ 18.0,
+ 17.95,
+ 18.1,
+ 8.00,
+ 0,
+ 0.06,
+ 0.02,
+ -0.01
+ ],
+ [
+ "2016-10-10",
+ 18.03,
+ 18.3,
+ 18.03,
+ 18.38,
+ 19.00,
+ 0,
+ 0.11,
+ 0.04,
+ -0.02
+ ],
+ [
+ "2016-10-11",
+ 18.33,
+ 18.33,
+ 18.26,
+ 18.49,
+ 12.00,
+ 0,
+ 0.10,
+ 0.02,
+ -0.04
+ ],
+ [
+ "2016-10-12",
+ 18.28,
+ 18.15,
+ 18.1,
+ 18.31,
+ 10.00,
+ 0,
+ 0.07,
+ -0.02,
+ -0.05
+ ],
+ [
+ "2016-10-13",
+ 18.15,
+ 18.09,
+ 18.05,
+ 18.21,
+ 10.00,
+ 0,
+ 0.06,
+ -0.03,
+ -0.06
+ ],
+ [
+ "2016-10-14",
+ 18.1,
+ 18.1,
+ 18.0,
+ 18.15,
+ 12.00,
+ 0,
+ 0.04,
+ -0.05,
+ -0.07
+ ],
+ [
+ "2016-10-17",
+ 18.07,
+ 17.86,
+ 17.83,
+ 18.1,
+ 12.00,
+ 0,
+ 0.01,
+ -0.07,
+ -0.08
+ ],
+ [
+ "2016-10-18",
+ 17.86,
+ 17.93,
+ 17.84,
+ 17.99,
+ 14.00,
+ 0,
+ 0.03,
+ -0.07,
+ -0.08
+ ],
+ [
+ "2016-10-19",
+ 17.93,
+ 17.88,
+ 17.83,
+ 18.05,
+ 11.00,
+ 0,
+ 0.03,
+ -0.07,
+ -0.08
+ ],
+ [
+ "2016-10-20",
+ 17.9,
+ 17.89,
+ 17.83,
+ 17.98,
+ 12.00,
+ 0,
+ 0.05,
+ -0.06,
+ -0.09
+ ],
+ [
+ "2016-10-21",
+ 17.91,
+ 17.91,
+ 17.82,
+ 17.93,
+ 12.00,
+ 0,
+ 0.07,
+ -0.06,
+ -0.09
+ ],
+ [
+ "2016-10-24",
+ 17.93,
+ 18.31,
+ 17.86,
+ 18.42,
+ 29.00,
+ 0,
+ 0.11,
+ -0.05,
+ -0.10
+ ],
+ [
+ "2016-10-25",
+ 18.31,
+ 18.13,
+ 18.09,
+ 18.46,
+ 19.00,
+ 0,
+ 0.06,
+ -0.09,
+ -0.12
+ ],
+ [
+ "2016-10-26",
+ 18.12,
+ 17.97,
+ 17.95,
+ 18.15,
+ 14.00,
+ 0,
+ 0.02,
+ -0.12,
+ -0.13
+ ],
+ [
+ "2016-10-27",
+ 18.06,
+ 17.81,
+ 17.77,
+ 18.06,
+ 21.00,
+ 0,
+ -0.01,
+ -0.13,
+ -0.13
+ ],
+ [
+ "2016-10-28",
+ 17.8,
+ 17.9,
+ 17.8,
+ 18.05,
+ 20.00,
+ 0,
+ -0.01,
+ -0.13,
+ -0.13
+ ],
+ [
+ "2016-10-31",
+ 17.87,
+ 17.86,
+ 17.72,
+ 17.96,
+ 12.00,
+ 0,
+ -0.02,
+ -0.14,
+ -0.13
+ ],
+ [
+ "2016-11-01",
+ 17.87,
+ 17.98,
+ 17.79,
+ 17.99,
+ 18.00,
+ 0,
+ -0.03,
+ -0.14,
+ -0.12
+ ],
+ [
+ "2016-11-02",
+ 17.86,
+ 17.84,
+ 17.76,
+ 17.94,
+ 30.00,
+ 0,
+ -0.06,
+ -0.15,
+ -0.12
+ ],
+ [
+ "2016-11-03",
+ 17.83,
+ 17.93,
+ 17.79,
+ 17.97,
+ 27.00,
+ 0,
+ -0.07,
+ -0.14,
+ -0.11
+ ],
+ [
+ "2016-11-04",
+ 17.9,
+ 17.91,
+ 17.87,
+ 18.0,
+ 26.00,
+ 0,
+ -0.09,
+ -0.15,
+ -0.10
+ ],
+ [
+ "2016-11-07",
+ 17.91,
+ 17.89,
+ 17.85,
+ 17.93,
+ 20.00,
+ 0,
+ -0.11,
+ -0.14,
+ -0.09
+ ],
+ [
+ "2016-11-08",
+ 17.92,
+ 17.99,
+ 17.89,
+ 18.06,
+ 26.00,
+ 0,
+ -0.12,
+ -0.13,
+ -0.07
+ ],
+ [
+ "2016-11-09",
+ 18.0,
+ 17.89,
+ 17.77,
+ 18.08,
+ 34.00,
+ 0,
+ -0.15,
+ -0.13,
+ -0.06
+ ],
+ [
+ "2016-11-10",
+ 17.95,
+ 18.0,
+ 17.94,
+ 18.11,
+ 27.00,
+ 0,
+ -0.15,
+ -0.11,
+ -0.03
+ ],
+ [
+ "2016-11-11",
+ 17.95,
+ 18.02,
+ 17.93,
+ 18.08,
+ 27.00,
+ 0,
+ -0.17,
+ -0.10,
+ -0.01
+ ],
+ [
+ "2016-11-14",
+ 18.0,
+ 18.04,
+ 17.95,
+ 18.25,
+ 35.00,
+ 0,
+ -0.18,
+ -0.08,
+ 0.01
+ ],
+ [
+ "2016-11-15",
+ 18.1,
+ 18.18,
+ 18.03,
+ 18.24,
+ 25.00,
+ 0,
+ -0.18,
+ -0.06,
+ 0.04
+ ],
+ [
+ "2016-11-16",
+ 18.23,
+ 18.12,
+ 18.05,
+ 18.29,
+ 23.00,
+ 0,
+ -0.21,
+ -0.04,
+ 0.06
+ ],
+ [
+ "2016-11-17",
+ 18.11,
+ 18.12,
+ 18.01,
+ 18.14,
+ 27.00,
+ 0,
+ -0.21,
+ -0.01,
+ 0.09
+ ],
+ [
+ "2016-11-18",
+ 18.12,
+ 18.1,
+ 18.03,
+ 18.16,
+ 18.00,
+ 0,
+ -0.19,
+ 0.03,
+ 0.12
+ ],
+ [
+ "2016-11-21",
+ 18.08,
+ 18.34,
+ 18.08,
+ 18.68,
+ 41.00,
+ 0,
+ -0.13,
+ 0.08,
+ 0.15
+ ],
+ [
+ "2016-11-22",
+ 18.37,
+ 18.37,
+ 18.28,
+ 18.49,
+ 52.00,
+ 0,
+ -0.09,
+ 0.12,
+ 0.17
+ ],
+ [
+ "2016-11-23",
+ 18.4,
+ 18.84,
+ 18.37,
+ 18.9,
+ 66.00,
+ 0,
+ -0.02,
+ 0.17,
+ 0.18
+ ],
+ [
+ "2016-11-24",
+ 18.77,
+ 18.74,
+ 18.61,
+ 18.97,
+ 26.00,
+ 0,
+ -0.02,
+ 0.17,
+ 0.18
+ ],
+ [
+ "2016-11-25",
+ 18.8,
+ 18.99,
+ 18.66,
+ 19.02,
+ 40.00,
+ 0,
+ -0.01,
+ 0.18,
+ 0.19
+ ],
+ [
+ "2016-11-28",
+ 19.1,
+ 18.65,
+ 18.52,
+ 19.2,
+ 85.00,
+ 0,
+ -0.06,
+ 0.16,
+ 0.19
+ ],
+ [
+ "2016-11-29",
+ 18.65,
+ 18.75,
+ 18.51,
+ 18.76,
+ 49.00,
+ 0,
+ -0.06,
+ 0.17,
+ 0.20
+ ],
+ [
+ "2016-11-30",
+ 18.76,
+ 18.55,
+ 18.47,
+ 18.82,
+ 39.00,
+ 0,
+ -0.08,
+ 0.17,
+ 0.21
+ ],
+ [
+ "2016-12-01",
+ 18.55,
+ 18.49,
+ 18.41,
+ 18.64,
+ 53.00,
+ 0,
+ -0.06,
+ 0.19,
+ 0.22
+ ],
+ [
+ "2016-12-02",
+ 18.53,
+ 18.49,
+ 18.24,
+ 18.54,
+ 48.00,
+ 0,
+ -0.02,
+ 0.21,
+ 0.23
+ ],
+ [
+ "2016-12-05",
+ 18.39,
+ 18.66,
+ 18.34,
+ 18.67,
+ 50.00,
+ 0,
+ 0.03,
+ 0.25,
+ 0.23
+ ],
+ [
+ "2016-12-06",
+ 18.66,
+ 18.6,
+ 18.57,
+ 18.78,
+ 31.00,
+ 0,
+ 0.08,
+ 0.26,
+ 0.23
+ ],
+ [
+ "2016-12-07",
+ 18.65,
+ 18.62,
+ 18.58,
+ 18.71,
+ 12.00,
+ 0,
+ 0.15,
+ 0.29,
+ 0.21
+ ],
+ [
+ "2016-12-08",
+ 18.67,
+ 18.76,
+ 18.62,
+ 18.88,
+ 26.00,
+ 0,
+ 0.25,
+ 0.32,
+ 0.19
+ ],
+ [
+ "2016-12-09",
+ 18.76,
+ 19.2,
+ 18.75,
+ 19.34,
+ 62.00,
+ 0,
+ 0.34,
+ 0.33,
+ 0.16
+ ],
+ [
+ "2016-12-12",
+ 19.16,
+ 19.25,
+ 18.9,
+ 19.65,
+ 79.00,
+ 1,
+ 0.34,
+ 0.28,
+ 0.11
+ ],
+ [
+ "2016-12-13",
+ 19.09,
+ 18.88,
+ 18.81,
+ 19.2,
+ 24.00,
+ 0,
+ 0.27,
+ 0.20,
+ 0.06
+ ],
+ [
+ "2016-12-14",
+ 18.8,
+ 18.82,
+ 18.8,
+ 19.14,
+ 32.00,
+ 0,
+ 0.23,
+ 0.13,
+ 0.02
+ ],
+ [
+ "2016-12-15",
+ 18.73,
+ 18.24,
+ 18.2,
+ 18.73,
+ 36.00,
+ 0,
+ 0.13,
+ 0.05,
+ -0.01
+ ],
+ [
+ "2016-12-16",
+ 18.24,
+ 18.18,
+ 18.12,
+ 18.4,
+ 24.00,
+ 0,
+ 0.10,
+ 0.02,
+ -0.03
+ ],
+ [
+ "2016-12-19",
+ 18.15,
+ 18.01,
+ 17.93,
+ 18.18,
+ 24.00,
+ 0,
+ 0.06,
+ -0.02,
+ -0.05
+ ],
+ [
+ "2016-12-20",
+ 17.99,
+ 17.79,
+ 17.7,
+ 17.99,
+ 29.00,
+ 1,
+ 0.02,
+ -0.05,
+ -0.05
+ ],
+ [
+ "2016-12-21",
+ 17.83,
+ 17.81,
+ 17.77,
+ 17.98,
+ 30.00,
+ 0,
+ 0.00,
+ -0.05,
+ -0.06
+ ],
+ [
+ "2016-12-22",
+ 17.85,
+ 17.72,
+ 17.65,
+ 17.85,
+ 21.00,
+ 0,
+ -0.03,
+ -0.07,
+ -0.06
+ ],
+ [
+ "2016-12-23",
+ 17.77,
+ 17.6,
+ 17.54,
+ 17.77,
+ 18.00,
+ 0,
+ -0.04,
+ -0.08,
+ -0.05
+ ],
+ [
+ "2016-12-26",
+ 17.56,
+ 17.75,
+ 17.39,
+ 17.77,
+ 16.00,
+ 0,
+ -0.04,
+ -0.07,
+ -0.05
+ ],
+ [
+ "2016-12-27",
+ 17.73,
+ 17.71,
+ 17.65,
+ 17.82,
+ 10.00,
+ 0,
+ -0.06,
+ -0.07,
+ -0.04
+ ],
+ [
+ "2016-12-28",
+ 17.72,
+ 17.62,
+ 17.49,
+ 17.77,
+ 26.00,
+ 0,
+ -0.09,
+ -0.07,
+ -0.03
+ ],
+ [
+ "2016-12-29",
+ 17.6,
+ 17.49,
+ 17.43,
+ 17.62,
+ 28.00,
+ 0,
+ -0.09,
+ -0.06,
+ -0.02
+ ],
+ [
+ "2016-12-30",
+ 17.53,
+ 17.6,
+ 17.47,
+ 17.61,
+ 22.00,
+ 0,
+ -0.05,
+ -0.03,
+ -0.01
+ ],
+ [
+ "2017-01-03",
+ 17.6,
+ 17.92,
+ 17.57,
+ 17.98,
+ 28.00,
+ 1,
+ 0.00,
+ 0.00,
+ 0.00
+ ]
+ ]
+}
diff --git a/public/config/jzx.json b/public/config/jzx.json
new file mode 100644
index 0000000..eb41f90
--- /dev/null
+++ b/public/config/jzx.json
@@ -0,0 +1,194 @@
+{
+ "status": "success",
+ "message": "OK",
+ "data": {
+ "locations": [
+ {
+ "id": 1,
+ "name": "Corinto",
+ "state": "Departamento de Chinandega",
+ "country": "Nicaragua",
+ "country_code": "NI",
+ "locode": null,
+ "lat": 12.4825,
+ "lng": -87.17304
+ },
+ {
+ "id": 2,
+ "name": "Managua",
+ "state": "Departamento de Managua",
+ "country": "Nicaragua",
+ "country_code": "NI",
+ "locode": "NIMGA",
+ "lat": 12.13282,
+ "lng": -86.2504
+ },
+ {
+ "id": 3,
+ "name": "Shekou",
+ "state": "Guangdong Sheng",
+ "country": "China",
+ "country_code": "CN",
+ "locode": "CNSHK",
+ "lat": 22.49359,
+ "lng": 113.9156
+ },
+ {
+ "id": 4,
+ "name": "Manzanillo",
+ "state": "Estado de Colima",
+ "country": "Mexico",
+ "country_code": "MX",
+ "locode": "MXZLO",
+ "lat": 19.11695,
+ "lng": -104.34214
+ },
+ {
+ "id": 5,
+ "name": "Balboa",
+ "state": "Provincia de Panama",
+ "country": "Panama",
+ "country_code": "PA",
+ "locode": "PABLB",
+ "lat": 8.94814,
+ "lng": -79.56672
+ }
+ ],
+ "vessels": [
+ {
+ "id": 1,
+ "name": "MSC PHOENIX",
+ "imo": "9267649",
+ "call_sign": "D5HF8",
+ "mmsi": "636016672",
+ "flag": "LR"
+ },
+ {
+ "id": 2,
+ "name": "MELBOURNE STRAIT",
+ "imo": "9362736",
+ "call_sign": "D5GX2",
+ "mmsi": "636016590",
+ "flag": "LR"
+ },
+ {
+ "id": 3,
+ "name": "VARAMO",
+ "imo": "9395044",
+ "call_sign": "C4SQ2",
+ "mmsi": "210950000",
+ "flag": "CY"
+ }
+ ],
+ "container": {
+ "number": "MSCU4634930",
+ "iso_code": "42V0",
+ "events": [
+ {
+ "id": 1,
+ "location": 3,
+ "description": "Empty to Shipper",
+ "status": "CEP",
+ "date": "2021-10-22T00:00:00",
+ "actual": true,
+ "type": "land",
+ "vessel": null,
+ "voyage": null,
+ "vesselCompliance": null,
+ "locationCompliance": 0
+ },
+ {
+ "id": 2,
+ "location": 3,
+ "description": "Export received at CY",
+ "status": "LTS",
+ "date": "2021-10-24T00:00:00",
+ "actual": true,
+ "type": "land",
+ "vessel": null,
+ "voyage": null,
+ "vesselCompliance": null,
+ "locationCompliance": 0
+ },
+ {
+ "id": 3,
+ "location": 3,
+ "description": "Export Loaded on Vessel",
+ "status": "CLL",
+ "date": "2021-11-04T00:00:00",
+ "actual": true,
+ "type": "sea",
+ "vessel": 1,
+ "voyage": "XA142A",
+ "vesselCompliance": 0,
+ "locationCompliance": 0
+ },
+ {
+ "id": 4,
+ "location": 4,
+ "description": "Full Transshipment Discharged",
+ "status": "CDT",
+ "date": "2021-11-28T00:00:00",
+ "actual": true,
+ "type": "sea",
+ "vessel": 1,
+ "voyage": "XA142A",
+ "vesselCompliance": 0,
+ "locationCompliance": 0
+ },
+ {
+ "id": 5,
+ "location": 4,
+ "description": "Full Transshipment Loaded",
+ "status": "CLT",
+ "date": "2021-12-20T00:00:00",
+ "actual": true,
+ "type": "sea",
+ "vessel": 2,
+ "voyage": "419S",
+ "vesselCompliance": 1,
+ "locationCompliance": 0
+ },
+ {
+ "id": 6,
+ "location": 5,
+ "description": "Full Transshipment Discharged",
+ "status": "CDT",
+ "date": "2022-01-03T00:00:00",
+ "actual": true,
+ "type": "sea",
+ "vessel": 2,
+ "voyage": "419N",
+ "vesselCompliance": 1,
+ "locationCompliance": 0
+ },
+ {
+ "id": 7,
+ "location": 5,
+ "description": "Full Transshipment Loaded",
+ "status": "CLT",
+ "date": "2022-01-04T00:00:00",
+ "actual": true,
+ "type": "sea",
+ "vessel": 3,
+ "voyage": "21025N",
+ "vesselCompliance": 0,
+ "locationCompliance": 0
+ },
+ {
+ "id": 8,
+ "location": 1,
+ "description": "Import Discharged from Vessel",
+ "status": "CDD",
+ "date": "2022-01-10T00:00:00",
+ "actual": true,
+ "type": "sea",
+ "vessel": 3,
+ "voyage": "21025R",
+ "vesselCompliance": 0,
+ "locationCompliance": 0
+ }
+ ]
+ }
+ }
+}
diff --git a/public/config/menu.json b/public/config/menu.json
new file mode 100644
index 0000000..dac54b3
--- /dev/null
+++ b/public/config/menu.json
@@ -0,0 +1,165 @@
+{
+ "menu": [
+ {
+ "index": "1",
+ "name": "轨迹记录",
+ "nameEn": "Voyage History",
+ "title": "轨迹记录",
+ "icon": "/img/Voyage-History.png",
+ "type": "TrackRecordLogTemp",
+ "open": false,
+ "children": []
+ },
+ {
+ "index": "2",
+ "name": "区域列表",
+ "nameEn": "Area List",
+ "title": "区域列表",
+ "icon": "/menu-icon/areaList.svg",
+ "type": "AreaListTemp",
+ "open": true,
+ "children": []
+ },
+ {
+ "index": "3",
+ "name": "搜索记录",
+ "nameEn": "Search History",
+ "title": "搜索记录",
+ "icon": "/img/Search-History.png",
+ "type": "SearchListTemp",
+ "open": false,
+ "children": []
+ },
+ {
+ "index": "4",
+ "name": "数据分析",
+ "nameEn": "Data Analysis",
+ "title": "数据分析",
+ "icon": "/menu-icon/dataAnalysis.svg",
+ "type": "DataAnalysisTemp",
+ "open": false,
+ "children": []
+ },
+ {
+ "index": "5",
+ "name": "地图工具",
+ "nameEn": "Map Selection",
+ "title": "地图工具",
+ "icon": "/img/Map-Selection.png",
+ "type": "MapToolTemp",
+ "open": false,
+ "children": []
+ },
+ {
+ "index": "6",
+ "name": "全部船队",
+ "nameEn": "My Fleets",
+ "title": "全部船队",
+ "icon": "/img/All-Fleets.png",
+ "type": "ShipRanksTemp",
+ "open": true,
+ "children": []
+ },
+ {
+ "index": "7",
+ "name": "海况天气",
+ "nameEn": "Marine Weather",
+ "title": "海况天气",
+ "icon": "/img/Weather.png",
+ "type": "WeatherTemp",
+ "open": false,
+ "children": []
+ },
+ {
+ "index": "8",
+ "name": "航线查询",
+ "nameEn": "Voyage",
+ "title": "航线查询",
+ "icon": "/img/Voyage.png",
+ "type": "RouteQueryTemp",
+ "open": false,
+ "children": []
+ },
+ {
+ "index": "9",
+ "name": "集装箱查询",
+ "nameEn": "Container Module",
+ "title": "集装箱查询",
+ "icon": "/menu-icon/jizhuangxiang.png",
+ "type": "ContainerQueryTemp",
+ "open": false,
+ "children": []
+ },
+ {
+ "index": "10",
+ "name": "港口信息",
+ "nameEn": "Ship Movement",
+ "title": "在港动态",
+ "icon": "/img/Ship-Movement.png",
+ "type": "ArriveLeaveQueryTemp",
+ "open": false,
+ "children": [
+ {
+ "index": "10-3",
+ "name": "预计到港",
+ "nameEn": "Arriving",
+ "title": "预计到港",
+ "icon": "/menu-icon/port4.png",
+ "type": "ExpectedArrivalTemp",
+ "open": true,
+ "children": []
+ },
+ {
+ "index": "10-1",
+ "name": "到港查询",
+ "nameEn": "Arrived",
+ "title": "到港查询",
+ "icon": "/menu-icon/port4.png",
+ "type": "ArriveLeaveQueryTemp",
+ "open": true,
+ "children": []
+ },
+ {
+ "index": "10-2",
+ "name": "离港查询",
+ "nameEn": "Departured",
+ "title": "离港查询",
+ "icon": "/menu-icon/port4.png",
+ "type": "DepartureInquiryTemp",
+ "open": true,
+ "children": []
+ },
+ {
+ "index": "10-5",
+ "name": "在泊统计",
+ "nameEn": "Ship at Berths",
+ "title": "在泊统计",
+ "icon": "/menu-icon/mapTool.svg",
+ "type": "NumberOfBerthsTemp",
+ "open": true,
+ "children": []
+ },
+ {
+ "index": "10-4",
+ "name": "原油港口",
+ "nameEn": "Crude Oil Port",
+ "title": "原油港口",
+ "icon": "/menu-icon/mapTool.svg",
+ "type": "ArriveLeaveQueryTemp",
+ "open": false,
+ "children": []
+ }
+ ]
+ },
+ {
+ "index": "11",
+ "name": "航行通告",
+ "nameEn": "Voyage Notices",
+ "title": "航行通告",
+ "icon": "/menu-icon/port3.png",
+ "type": "NotanTemp",
+ "open": false,
+ "children": []
+ }
+ ]
+}
diff --git a/public/config/sys-config.json b/public/config/sys-config.json
new file mode 100644
index 0000000..acad9a8
--- /dev/null
+++ b/public/config/sys-config.json
@@ -0,0 +1,10 @@
+{
+ "projectName": "zero2",
+ "title": "海南零关税交通工具监管系统",
+ "appKey": "4b9d580cc20f41398959c18ac1561350",
+ "publicKey": "MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAKSETfiTgz/BfdoOHsalLwT9Ovyb4eLL8OLLcs7c5pEaL3/FQG44L806IyWBzKlkYZHzb/qXC4I6paaW3hRIXYrurdAd7Yh72Rk4s/+k/M7kbQllaFs+xbHRfQr0ztuk2ezPNJP4LlBsyPlOYU0fD3hDS2WVH27gUECZhTgxk58dAgMBAAECgYA3B9KVDbLfhre0UvjUdbiusI4kpXf/xzxCgM9chuPRMbMlyDNvKvhCa+oJx8tP9jX0/js81X2SCFAU025h1nsDTX64p7VqfZyiknQVDzapBLpkYT16EjOJ4Fj640IoGjLEmVNkuq/QJxG2QSSDFqSIlhmJMDpWuNZ3b57r7kBQQQJBAOxChIa9JN1AVlnJKaJlrBf1/mlqfhSXJQnwy8TfoeJ1NMiTwKa2QXZsrA/YMiO4ZwyYMevr1eDGfvz5MOv+pekCQQCyQz0g5HU9rnTTxOOQhnUWXmnJ60ftOnvTH0dh2z2h2VjZ2xLSLMwP0dWtZTSK6TY5jEbEvkWO+VKOD/gTtwsVAkBcpPzY5SSmigsSbDqiTuI8Bx97cOH96wMAMeeFzPfrGHDZUm8SMJfc+2JBWFLZBP+LxcaVr8YPvWaghorzj8i5AkBWTy3iphqJ0dToz7Rqvl8khHPt+sfpeV6ImuVh4NfXbDeTy3kyX9QxeKRfftfQxhemB2AgVAuzrM2m0N6JFR/9AkAU9WQUI5wK5DkQxxinQf7bWt7adORSMPK7dANUtWeTAog985g9bwXhiYHrvA3DW0Ca3DVZkfqMdblekciO9XSH",
+ "defaultLanguage": "Chinese",
+ "map": {
+ "weatherLayerOpacity": 0.8
+ }
+}
diff --git a/public/config/td.json b/public/config/td.json
new file mode 100644
index 0000000..d3217db
--- /dev/null
+++ b/public/config/td.json
@@ -0,0 +1,756 @@
+{
+ "status": "success",
+ "message": "OK",
+ "data": {
+ "locations": [
+ {
+ "id": 1,
+ "name": "Busan",
+ "state": "Busan",
+ "country": "South Korea",
+ "country_code": "KR",
+ "locode": "KRPUS",
+ "lat": 35.10168,
+ "lng": 129.03004
+ },
+ {
+ "id": 2,
+ "name": "Shanghai",
+ "state": "Shanghai Shi",
+ "country": "China",
+ "country_code": "CN",
+ "locode": "CNSHG",
+ "lat": 31.366365,
+ "lng": 121.61475
+ },
+ {
+ "id": 3,
+ "name": "Gumi",
+ "state": "Gyeongsangbuk-do",
+ "country": "South Korea",
+ "country_code": "KR",
+ "locode": "KRKUI",
+ "lat": 36.1136,
+ "lng": 128.336
+ }
+ ],
+ "vessels": [
+ {
+ "id": 1,
+ "name": "SEABREEZE",
+ "imo": "9472579",
+ "call_sign": "5LCI2",
+ "mmsi": "636021108",
+ "flag": "LR"
+ }
+ ],
+ "containers": [
+ {
+ "number": "BSIU9807691",
+ "iso_code": "42V0",
+ "events": [
+ {
+ "location": 3,
+ "description": "Empty Container Release to Shipper",
+ "status": "CEP",
+ "date": "2021-12-20T13:39:00",
+ "actual": true,
+ "type": "land",
+ "vessel": null,
+ "voyage": null,
+ "vesselCompliance": null,
+ "locationCompliance": 0
+ },
+ {
+ "location": 1,
+ "description": "Gate In to Outbound Terminal",
+ "status": "CGI",
+ "date": "2021-12-29T21:00:00",
+ "actual": true,
+ "type": "land",
+ "vessel": null,
+ "voyage": null,
+ "vesselCompliance": null,
+ "locationCompliance": 0
+ },
+ {
+ "location": 1,
+ "description": "Loaded on at Port of Loading",
+ "status": "CLL",
+ "date": "2021-12-31T16:14:00",
+ "actual": true,
+ "type": "sea",
+ "vessel": 1,
+ "voyage": "170S",
+ "vesselCompliance": 0,
+ "locationCompliance": 0
+ },
+ {
+ "location": 1,
+ "description": "Departure from Port of Loading",
+ "status": "VDL",
+ "date": "2022-01-01T00:00:00",
+ "actual": true,
+ "type": "sea",
+ "vessel": 1,
+ "voyage": "170S",
+ "vesselCompliance": 0,
+ "locationCompliance": 0
+ },
+ {
+ "location": 2,
+ "description": "Arrival at Port of Discharging",
+ "status": "VAD",
+ "date": "2022-01-02T04:30:00",
+ "actual": true,
+ "type": "sea",
+ "vessel": 1,
+ "voyage": "170S",
+ "vesselCompliance": 0,
+ "locationCompliance": 0
+ },
+ {
+ "location": 2,
+ "description": "POD Berthing Destination",
+ "status": "UNK",
+ "date": "2022-01-02T09:30:00",
+ "actual": true,
+ "type": "land",
+ "vessel": 1,
+ "voyage": "170S",
+ "vesselCompliance": 0,
+ "locationCompliance": 0
+ },
+ {
+ "location": 2,
+ "description": "Unloaded from at Port of Discharging",
+ "status": "CDD",
+ "date": "2022-01-02T10:22:00",
+ "actual": true,
+ "type": "sea",
+ "vessel": 1,
+ "voyage": "170S",
+ "vesselCompliance": 0,
+ "locationCompliance": 0
+ },
+ {
+ "location": 2,
+ "description": "Gate Out from Inbound Terminal for Delivery to Consignee (or Port Shuttle)",
+ "status": "CGO",
+ "date": "2022-01-07T06:38:00",
+ "actual": true,
+ "type": "land",
+ "vessel": null,
+ "voyage": null,
+ "vesselCompliance": null,
+ "locationCompliance": 0
+ },
+ {
+ "location": 2,
+ "description": "Empty Container Returned from Customer",
+ "status": "CER",
+ "date": "2022-01-07T12:49:00",
+ "actual": true,
+ "type": "land",
+ "vessel": null,
+ "voyage": null,
+ "vesselCompliance": null,
+ "locationCompliance": 0
+ }
+ ]
+ },
+ {
+ "number": "GAOU6639366",
+ "iso_code": "42V0",
+ "events": [
+ {
+ "location": 3,
+ "description": "Empty Container Release to Shipper",
+ "status": "CEP",
+ "date": "2021-12-17T11:37:00",
+ "actual": true,
+ "type": "land",
+ "vessel": null,
+ "voyage": null,
+ "vesselCompliance": null,
+ "locationCompliance": 0
+ },
+ {
+ "location": 1,
+ "description": "Gate In to Outbound Terminal",
+ "status": "CGI",
+ "date": "2021-12-29T16:53:00",
+ "actual": true,
+ "type": "land",
+ "vessel": null,
+ "voyage": null,
+ "vesselCompliance": null,
+ "locationCompliance": 0
+ },
+ {
+ "location": 1,
+ "description": "Loaded on at Port of Loading",
+ "status": "CLL",
+ "date": "2021-12-31T16:51:00",
+ "actual": true,
+ "type": "sea",
+ "vessel": 1,
+ "voyage": "170S",
+ "vesselCompliance": 0,
+ "locationCompliance": 0
+ },
+ {
+ "location": 1,
+ "description": "Departure from Port of Loading",
+ "status": "VDL",
+ "date": "2022-01-01T00:00:00",
+ "actual": true,
+ "type": "sea",
+ "vessel": 1,
+ "voyage": "170S",
+ "vesselCompliance": 0,
+ "locationCompliance": 0
+ },
+ {
+ "location": 2,
+ "description": "Arrival at Port of Discharging",
+ "status": "VAD",
+ "date": "2022-01-02T04:30:00",
+ "actual": true,
+ "type": "sea",
+ "vessel": 1,
+ "voyage": "170S",
+ "vesselCompliance": 0,
+ "locationCompliance": 0
+ },
+ {
+ "location": 2,
+ "description": "POD Berthing Destination",
+ "status": "UNK",
+ "date": "2022-01-02T09:30:00",
+ "actual": true,
+ "type": "land",
+ "vessel": 1,
+ "voyage": "170S",
+ "vesselCompliance": 0,
+ "locationCompliance": 0
+ },
+ {
+ "location": 2,
+ "description": "Unloaded from at Port of Discharging",
+ "status": "CDD",
+ "date": "2022-01-02T10:00:00",
+ "actual": true,
+ "type": "sea",
+ "vessel": 1,
+ "voyage": "170S",
+ "vesselCompliance": 0,
+ "locationCompliance": 0
+ },
+ {
+ "location": 2,
+ "description": "Gate Out from Inbound Terminal for Delivery to Consignee (or Port Shuttle)",
+ "status": "CGO",
+ "date": "2022-01-08T05:56:00",
+ "actual": true,
+ "type": "land",
+ "vessel": null,
+ "voyage": null,
+ "vesselCompliance": null,
+ "locationCompliance": 0
+ },
+ {
+ "location": 2,
+ "description": "Empty Container Returned from Customer",
+ "status": "CER",
+ "date": "2022-01-08T11:28:00",
+ "actual": true,
+ "type": "land",
+ "vessel": null,
+ "voyage": null,
+ "vesselCompliance": null,
+ "locationCompliance": 0
+ }
+ ]
+ },
+ {
+ "number": "TRHU8216084",
+ "iso_code": "42V0",
+ "events": [
+ {
+ "location": 3,
+ "description": "Empty Container Release to Shipper",
+ "status": "CEP",
+ "date": "2021-12-17T11:37:00",
+ "actual": true,
+ "type": "land",
+ "vessel": null,
+ "voyage": null,
+ "vesselCompliance": null,
+ "locationCompliance": 0
+ },
+ {
+ "location": 1,
+ "description": "Gate In to Outbound Terminal",
+ "status": "CGI",
+ "date": "2021-12-29T18:21:00",
+ "actual": true,
+ "type": "land",
+ "vessel": null,
+ "voyage": null,
+ "vesselCompliance": null,
+ "locationCompliance": 0
+ },
+ {
+ "location": 1,
+ "description": "Loaded on at Port of Loading",
+ "status": "CLL",
+ "date": "2021-12-31T16:57:00",
+ "actual": true,
+ "type": "sea",
+ "vessel": 1,
+ "voyage": "170S",
+ "vesselCompliance": 0,
+ "locationCompliance": 0
+ },
+ {
+ "location": 1,
+ "description": "Departure from Port of Loading",
+ "status": "VDL",
+ "date": "2022-01-01T00:00:00",
+ "actual": true,
+ "type": "sea",
+ "vessel": 1,
+ "voyage": "170S",
+ "vesselCompliance": 0,
+ "locationCompliance": 0
+ },
+ {
+ "location": 2,
+ "description": "Arrival at Port of Discharging",
+ "status": "VAD",
+ "date": "2022-01-02T04:30:00",
+ "actual": true,
+ "type": "sea",
+ "vessel": 1,
+ "voyage": "170S",
+ "vesselCompliance": 0,
+ "locationCompliance": 0
+ },
+ {
+ "location": 2,
+ "description": "POD Berthing Destination",
+ "status": "UNK",
+ "date": "2022-01-02T09:30:00",
+ "actual": true,
+ "type": "land",
+ "vessel": 1,
+ "voyage": "170S",
+ "vesselCompliance": 0,
+ "locationCompliance": 0
+ },
+ {
+ "location": 2,
+ "description": "Unloaded from at Port of Discharging",
+ "status": "CDD",
+ "date": "2022-01-02T09:57:00",
+ "actual": true,
+ "type": "sea",
+ "vessel": 1,
+ "voyage": "170S",
+ "vesselCompliance": 0,
+ "locationCompliance": 0
+ },
+ {
+ "location": 2,
+ "description": "Gate Out from Inbound Terminal for Delivery to Consignee (or Port Shuttle)",
+ "status": "CGO",
+ "date": "2022-01-08T09:28:00",
+ "actual": true,
+ "type": "land",
+ "vessel": null,
+ "voyage": null,
+ "vesselCompliance": null,
+ "locationCompliance": 0
+ },
+ {
+ "location": 2,
+ "description": "Empty Container Returned from Customer",
+ "status": "CER",
+ "date": "2022-01-08T14:08:00",
+ "actual": true,
+ "type": "land",
+ "vessel": null,
+ "voyage": null,
+ "vesselCompliance": null,
+ "locationCompliance": 0
+ }
+ ]
+ },
+ {
+ "number": "TRHU7278950",
+ "iso_code": "42V0",
+ "events": [
+ {
+ "location": 3,
+ "description": "Empty Container Release to Shipper",
+ "status": "CEP",
+ "date": "2021-12-20T13:40:00",
+ "actual": true,
+ "type": "land",
+ "vessel": null,
+ "voyage": null,
+ "vesselCompliance": null,
+ "locationCompliance": 0
+ },
+ {
+ "location": 1,
+ "description": "Gate In to Outbound Terminal",
+ "status": "CGI",
+ "date": "2021-12-29T21:28:00",
+ "actual": true,
+ "type": "land",
+ "vessel": null,
+ "voyage": null,
+ "vesselCompliance": null,
+ "locationCompliance": 0
+ },
+ {
+ "location": 1,
+ "description": "Loaded on at Port of Loading",
+ "status": "CLL",
+ "date": "2021-12-31T16:05:00",
+ "actual": true,
+ "type": "sea",
+ "vessel": 1,
+ "voyage": "170S",
+ "vesselCompliance": 0,
+ "locationCompliance": 0
+ },
+ {
+ "location": 1,
+ "description": "Departure from Port of Loading",
+ "status": "VDL",
+ "date": "2022-01-01T00:00:00",
+ "actual": true,
+ "type": "sea",
+ "vessel": 1,
+ "voyage": "170S",
+ "vesselCompliance": 0,
+ "locationCompliance": 0
+ },
+ {
+ "location": 2,
+ "description": "Arrival at Port of Discharging",
+ "status": "VAD",
+ "date": "2022-01-02T04:30:00",
+ "actual": true,
+ "type": "sea",
+ "vessel": 1,
+ "voyage": "170S",
+ "vesselCompliance": 0,
+ "locationCompliance": 0
+ },
+ {
+ "location": 2,
+ "description": "POD Berthing Destination",
+ "status": "UNK",
+ "date": "2022-01-02T09:30:00",
+ "actual": true,
+ "type": "land",
+ "vessel": 1,
+ "voyage": "170S",
+ "vesselCompliance": 0,
+ "locationCompliance": 0
+ },
+ {
+ "location": 2,
+ "description": "Unloaded from at Port of Discharging",
+ "status": "CDD",
+ "date": "2022-01-02T10:26:00",
+ "actual": true,
+ "type": "sea",
+ "vessel": 1,
+ "voyage": "170S",
+ "vesselCompliance": 0,
+ "locationCompliance": 0
+ },
+ {
+ "location": 2,
+ "description": "Gate Out from Inbound Terminal for Delivery to Consignee (or Port Shuttle)",
+ "status": "CGO",
+ "date": "2022-01-08T06:54:00",
+ "actual": true,
+ "type": "land",
+ "vessel": null,
+ "voyage": null,
+ "vesselCompliance": null,
+ "locationCompliance": 0
+ },
+ {
+ "location": 2,
+ "description": "Empty Container Returned from Customer",
+ "status": "CER",
+ "date": "2022-01-08T13:29:00",
+ "actual": true,
+ "type": "land",
+ "vessel": null,
+ "voyage": null,
+ "vesselCompliance": null,
+ "locationCompliance": 0
+ }
+ ]
+ },
+ {
+ "number": "TRHU8041896",
+ "iso_code": "42V0",
+ "events": [
+ {
+ "location": 3,
+ "description": "Empty Container Release to Shipper",
+ "status": "CEP",
+ "date": "2021-12-17T11:37:00",
+ "actual": true,
+ "type": "land",
+ "vessel": null,
+ "voyage": null,
+ "vesselCompliance": null,
+ "locationCompliance": 0
+ },
+ {
+ "location": 1,
+ "description": "Gate In to Outbound Terminal",
+ "status": "CGI",
+ "date": "2021-12-29T17:41:00",
+ "actual": true,
+ "type": "land",
+ "vessel": null,
+ "voyage": null,
+ "vesselCompliance": null,
+ "locationCompliance": 0
+ },
+ {
+ "location": 1,
+ "description": "Loaded on at Port of Loading",
+ "status": "CLL",
+ "date": "2021-12-31T19:29:00",
+ "actual": true,
+ "type": "sea",
+ "vessel": 1,
+ "voyage": "170S",
+ "vesselCompliance": 0,
+ "locationCompliance": 0
+ },
+ {
+ "location": 1,
+ "description": "Departure from Port of Loading",
+ "status": "VDL",
+ "date": "2022-01-01T00:00:00",
+ "actual": true,
+ "type": "sea",
+ "vessel": 1,
+ "voyage": "170S",
+ "vesselCompliance": 0,
+ "locationCompliance": 0
+ },
+ {
+ "location": 2,
+ "description": "Arrival at Port of Discharging",
+ "status": "VAD",
+ "date": "2022-01-02T04:30:00",
+ "actual": true,
+ "type": "sea",
+ "vessel": 1,
+ "voyage": "170S",
+ "vesselCompliance": 0,
+ "locationCompliance": 0
+ },
+ {
+ "location": 2,
+ "description": "POD Berthing Destination",
+ "status": "UNK",
+ "date": "2022-01-02T09:30:00",
+ "actual": true,
+ "type": "land",
+ "vessel": 1,
+ "voyage": "170S",
+ "vesselCompliance": 0,
+ "locationCompliance": 0
+ },
+ {
+ "location": 2,
+ "description": "Unloaded from at Port of Discharging",
+ "status": "CDD",
+ "date": "2022-01-02T10:30:00",
+ "actual": true,
+ "type": "sea",
+ "vessel": 1,
+ "voyage": "170S",
+ "vesselCompliance": 0,
+ "locationCompliance": 0
+ },
+ {
+ "location": 2,
+ "description": "Gate Out from Inbound Terminal for Delivery to Consignee (or Port Shuttle)",
+ "status": "CGO",
+ "date": "2022-01-07T14:30:00",
+ "actual": true,
+ "type": "land",
+ "vessel": null,
+ "voyage": null,
+ "vesselCompliance": null,
+ "locationCompliance": 0
+ },
+ {
+ "location": 2,
+ "description": "Empty Container Returned from Customer",
+ "status": "CER",
+ "date": "2022-01-08T06:57:00",
+ "actual": true,
+ "type": "land",
+ "vessel": null,
+ "voyage": null,
+ "vesselCompliance": null,
+ "locationCompliance": 0
+ }
+ ]
+ },
+ {
+ "number": "TGBU5312141",
+ "iso_code": "42V0",
+ "events": [
+ {
+ "location": 3,
+ "description": "Empty Container Release to Shipper",
+ "status": "CEP",
+ "date": "2021-12-20T13:39:00",
+ "actual": true,
+ "type": "land",
+ "vessel": null,
+ "voyage": null,
+ "vesselCompliance": null,
+ "locationCompliance": 0
+ },
+ {
+ "location": 1,
+ "description": "Gate In to Outbound Terminal",
+ "status": "CGI",
+ "date": "2021-12-29T19:27:00",
+ "actual": true,
+ "type": "land",
+ "vessel": null,
+ "voyage": null,
+ "vesselCompliance": null,
+ "locationCompliance": 0
+ },
+ {
+ "location": 1,
+ "description": "Loaded on at Port of Loading",
+ "status": "CLL",
+ "date": "2021-12-31T16:43:00",
+ "actual": true,
+ "type": "sea",
+ "vessel": 1,
+ "voyage": "170S",
+ "vesselCompliance": 0,
+ "locationCompliance": 0
+ },
+ {
+ "location": 1,
+ "description": "Departure from Port of Loading",
+ "status": "VDL",
+ "date": "2022-01-01T00:00:00",
+ "actual": true,
+ "type": "sea",
+ "vessel": 1,
+ "voyage": "170S",
+ "vesselCompliance": 0,
+ "locationCompliance": 0
+ },
+ {
+ "location": 2,
+ "description": "Arrival at Port of Discharging",
+ "status": "VAD",
+ "date": "2022-01-02T04:30:00",
+ "actual": true,
+ "type": "sea",
+ "vessel": 1,
+ "voyage": "170S",
+ "vesselCompliance": 0,
+ "locationCompliance": 0
+ },
+ {
+ "location": 2,
+ "description": "POD Berthing Destination",
+ "status": "UNK",
+ "date": "2022-01-02T09:30:00",
+ "actual": true,
+ "type": "land",
+ "vessel": 1,
+ "voyage": "170S",
+ "vesselCompliance": 0,
+ "locationCompliance": 0
+ },
+ {
+ "location": 2,
+ "description": "Unloaded from at Port of Discharging",
+ "status": "CDD",
+ "date": "2022-01-02T10:06:00",
+ "actual": true,
+ "type": "sea",
+ "vessel": 1,
+ "voyage": "170S",
+ "vesselCompliance": 0,
+ "locationCompliance": 0
+ },
+ {
+ "location": 2,
+ "description": "Gate Out from Inbound Terminal for Delivery to Consignee (or Port Shuttle)",
+ "status": "CGO",
+ "date": "2022-01-07T07:28:00",
+ "actual": true,
+ "type": "land",
+ "vessel": null,
+ "voyage": null,
+ "vesselCompliance": null,
+ "locationCompliance": 0
+ },
+ {
+ "location": 2,
+ "description": "Empty Container Returned from Customer",
+ "status": "CER",
+ "date": "2022-01-07T12:49:00",
+ "actual": true,
+ "type": "land",
+ "vessel": null,
+ "voyage": null,
+ "vesselCompliance": null,
+ "locationCompliance": 0
+ }
+ ]
+ }
+ ],
+ "route": {
+ "prepol": {
+ "location": 3,
+ "date": "2021-12-20T13:39:00",
+ "actual": true
+ },
+ "pol": {
+ "location": 1,
+ "date": "2022-01-01T00:00:00",
+ "actual": true
+ },
+ "pod": {
+ "location": 2,
+ "date": "2022-01-02T04:30:00",
+ "actual": true
+ },
+ "postpod": {
+ "location": 2,
+ "date": "2022-01-02T04:30:00",
+ "actual": true
+ }
+ }
+ }
+}
diff --git a/public/country-img/AFG.png b/public/country-img/AFG.png
new file mode 100644
index 0000000..8f43ed9
Binary files /dev/null and b/public/country-img/AFG.png differ
diff --git a/public/country-img/AGO.png b/public/country-img/AGO.png
new file mode 100644
index 0000000..8e09c35
Binary files /dev/null and b/public/country-img/AGO.png differ
diff --git a/public/country-img/AIA.png b/public/country-img/AIA.png
new file mode 100644
index 0000000..bcae48c
Binary files /dev/null and b/public/country-img/AIA.png differ
diff --git a/public/country-img/AKU.png b/public/country-img/AKU.png
new file mode 100644
index 0000000..2a4ab52
Binary files /dev/null and b/public/country-img/AKU.png differ
diff --git a/public/country-img/ALB.png b/public/country-img/ALB.png
new file mode 100644
index 0000000..e9349a0
Binary files /dev/null and b/public/country-img/ALB.png differ
diff --git a/public/country-img/AND.png b/public/country-img/AND.png
new file mode 100644
index 0000000..bb535ee
Binary files /dev/null and b/public/country-img/AND.png differ
diff --git a/public/country-img/ARE.png b/public/country-img/ARE.png
new file mode 100644
index 0000000..8ff7122
Binary files /dev/null and b/public/country-img/ARE.png differ
diff --git a/public/country-img/ARG.png b/public/country-img/ARG.png
new file mode 100644
index 0000000..a409835
Binary files /dev/null and b/public/country-img/ARG.png differ
diff --git a/public/country-img/ARM.png b/public/country-img/ARM.png
new file mode 100644
index 0000000..eba1add
Binary files /dev/null and b/public/country-img/ARM.png differ
diff --git a/public/country-img/ASM.png b/public/country-img/ASM.png
new file mode 100644
index 0000000..354bf3a
Binary files /dev/null and b/public/country-img/ASM.png differ
diff --git a/public/country-img/ATG.png b/public/country-img/ATG.png
new file mode 100644
index 0000000..3570ae9
Binary files /dev/null and b/public/country-img/ATG.png differ
diff --git a/public/country-img/AUS.png b/public/country-img/AUS.png
new file mode 100644
index 0000000..e53a48f
Binary files /dev/null and b/public/country-img/AUS.png differ
diff --git a/public/country-img/AUT.png b/public/country-img/AUT.png
new file mode 100644
index 0000000..f56ac25
Binary files /dev/null and b/public/country-img/AUT.png differ
diff --git a/public/country-img/AZE.png b/public/country-img/AZE.png
new file mode 100644
index 0000000..29da885
Binary files /dev/null and b/public/country-img/AZE.png differ
diff --git a/public/country-img/BDI.png b/public/country-img/BDI.png
new file mode 100644
index 0000000..43d1708
Binary files /dev/null and b/public/country-img/BDI.png differ
diff --git a/public/country-img/BEL.png b/public/country-img/BEL.png
new file mode 100644
index 0000000..cff0bfd
Binary files /dev/null and b/public/country-img/BEL.png differ
diff --git a/public/country-img/BEN.png b/public/country-img/BEN.png
new file mode 100644
index 0000000..7469631
Binary files /dev/null and b/public/country-img/BEN.png differ
diff --git a/public/country-img/BFA.png b/public/country-img/BFA.png
new file mode 100644
index 0000000..0f2961d
Binary files /dev/null and b/public/country-img/BFA.png differ
diff --git a/public/country-img/BGD.png b/public/country-img/BGD.png
new file mode 100644
index 0000000..3e6fcbf
Binary files /dev/null and b/public/country-img/BGD.png differ
diff --git a/public/country-img/BGR.png b/public/country-img/BGR.png
new file mode 100644
index 0000000..68d8cc0
Binary files /dev/null and b/public/country-img/BGR.png differ
diff --git a/public/country-img/BHR.png b/public/country-img/BHR.png
new file mode 100644
index 0000000..f8b7631
Binary files /dev/null and b/public/country-img/BHR.png differ
diff --git a/public/country-img/BHS.png b/public/country-img/BHS.png
new file mode 100644
index 0000000..7774859
Binary files /dev/null and b/public/country-img/BHS.png differ
diff --git a/public/country-img/BIH.png b/public/country-img/BIH.png
new file mode 100644
index 0000000..aeb1125
Binary files /dev/null and b/public/country-img/BIH.png differ
diff --git a/public/country-img/BLR.png b/public/country-img/BLR.png
new file mode 100644
index 0000000..00f0ebf
Binary files /dev/null and b/public/country-img/BLR.png differ
diff --git a/public/country-img/BLZ.png b/public/country-img/BLZ.png
new file mode 100644
index 0000000..9fe8af0
Binary files /dev/null and b/public/country-img/BLZ.png differ
diff --git a/public/country-img/BMU.png b/public/country-img/BMU.png
new file mode 100644
index 0000000..8ce6d07
Binary files /dev/null and b/public/country-img/BMU.png differ
diff --git a/public/country-img/BOL.png b/public/country-img/BOL.png
new file mode 100644
index 0000000..374f126
Binary files /dev/null and b/public/country-img/BOL.png differ
diff --git a/public/country-img/BRA.png b/public/country-img/BRA.png
new file mode 100644
index 0000000..c963963
Binary files /dev/null and b/public/country-img/BRA.png differ
diff --git a/public/country-img/BRB.png b/public/country-img/BRB.png
new file mode 100644
index 0000000..afc1465
Binary files /dev/null and b/public/country-img/BRB.png differ
diff --git a/public/country-img/BRN.png b/public/country-img/BRN.png
new file mode 100644
index 0000000..6b430f2
Binary files /dev/null and b/public/country-img/BRN.png differ
diff --git a/public/country-img/BTN.png b/public/country-img/BTN.png
new file mode 100644
index 0000000..4169b4c
Binary files /dev/null and b/public/country-img/BTN.png differ
diff --git a/public/country-img/BWA.png b/public/country-img/BWA.png
new file mode 100644
index 0000000..5d6b631
Binary files /dev/null and b/public/country-img/BWA.png differ
diff --git a/public/country-img/CAF.png b/public/country-img/CAF.png
new file mode 100644
index 0000000..b62ab6b
Binary files /dev/null and b/public/country-img/CAF.png differ
diff --git a/public/country-img/CAN.png b/public/country-img/CAN.png
new file mode 100644
index 0000000..ae26c25
Binary files /dev/null and b/public/country-img/CAN.png differ
diff --git a/public/country-img/CCK.png b/public/country-img/CCK.png
new file mode 100644
index 0000000..74dffa0
Binary files /dev/null and b/public/country-img/CCK.png differ
diff --git a/public/country-img/CHA.png b/public/country-img/CHA.png
new file mode 100644
index 0000000..3b4e5e2
Binary files /dev/null and b/public/country-img/CHA.png differ
diff --git a/public/country-img/CHE.png b/public/country-img/CHE.png
new file mode 100644
index 0000000..73d5fbb
Binary files /dev/null and b/public/country-img/CHE.png differ
diff --git a/public/country-img/CHL.png b/public/country-img/CHL.png
new file mode 100644
index 0000000..100ccbf
Binary files /dev/null and b/public/country-img/CHL.png differ
diff --git a/public/country-img/CHN.gif b/public/country-img/CHN.gif
new file mode 100644
index 0000000..e988c01
Binary files /dev/null and b/public/country-img/CHN.gif differ
diff --git a/public/country-img/CHN.png b/public/country-img/CHN.png
new file mode 100644
index 0000000..01e4057
Binary files /dev/null and b/public/country-img/CHN.png differ
diff --git a/public/country-img/CIV.png b/public/country-img/CIV.png
new file mode 100644
index 0000000..a29da60
Binary files /dev/null and b/public/country-img/CIV.png differ
diff --git a/public/country-img/CMR.png b/public/country-img/CMR.png
new file mode 100644
index 0000000..23c973e
Binary files /dev/null and b/public/country-img/CMR.png differ
diff --git a/public/country-img/COD.png b/public/country-img/COD.png
new file mode 100644
index 0000000..e5bcb10
Binary files /dev/null and b/public/country-img/COD.png differ
diff --git a/public/country-img/COG.png b/public/country-img/COG.png
new file mode 100644
index 0000000..7ec4022
Binary files /dev/null and b/public/country-img/COG.png differ
diff --git a/public/country-img/COK.png b/public/country-img/COK.png
new file mode 100644
index 0000000..13a3ff1
Binary files /dev/null and b/public/country-img/COK.png differ
diff --git a/public/country-img/COL.png b/public/country-img/COL.png
new file mode 100644
index 0000000..732da94
Binary files /dev/null and b/public/country-img/COL.png differ
diff --git a/public/country-img/COM.png b/public/country-img/COM.png
new file mode 100644
index 0000000..44b68c1
Binary files /dev/null and b/public/country-img/COM.png differ
diff --git a/public/country-img/CPV.png b/public/country-img/CPV.png
new file mode 100644
index 0000000..c78637f
Binary files /dev/null and b/public/country-img/CPV.png differ
diff --git a/public/country-img/CRI.png b/public/country-img/CRI.png
new file mode 100644
index 0000000..2c3cecc
Binary files /dev/null and b/public/country-img/CRI.png differ
diff --git a/public/country-img/CUB.png b/public/country-img/CUB.png
new file mode 100644
index 0000000..bf15a77
Binary files /dev/null and b/public/country-img/CUB.png differ
diff --git a/public/country-img/CXI.png b/public/country-img/CXI.png
new file mode 100644
index 0000000..fc8551c
Binary files /dev/null and b/public/country-img/CXI.png differ
diff --git a/public/country-img/CYM.png b/public/country-img/CYM.png
new file mode 100644
index 0000000..d7ab562
Binary files /dev/null and b/public/country-img/CYM.png differ
diff --git a/public/country-img/CYP.png b/public/country-img/CYP.png
new file mode 100644
index 0000000..8ca3b27
Binary files /dev/null and b/public/country-img/CYP.png differ
diff --git a/public/country-img/CZE.png b/public/country-img/CZE.png
new file mode 100644
index 0000000..b02840a
Binary files /dev/null and b/public/country-img/CZE.png differ
diff --git a/public/country-img/DEU.png b/public/country-img/DEU.png
new file mode 100644
index 0000000..8b5003c
Binary files /dev/null and b/public/country-img/DEU.png differ
diff --git a/public/country-img/DJI.png b/public/country-img/DJI.png
new file mode 100644
index 0000000..237aca4
Binary files /dev/null and b/public/country-img/DJI.png differ
diff --git a/public/country-img/DMA.png b/public/country-img/DMA.png
new file mode 100644
index 0000000..c6723e9
Binary files /dev/null and b/public/country-img/DMA.png differ
diff --git a/public/country-img/DNK.png b/public/country-img/DNK.png
new file mode 100644
index 0000000..dbb703e
Binary files /dev/null and b/public/country-img/DNK.png differ
diff --git a/public/country-img/DOM.png b/public/country-img/DOM.png
new file mode 100644
index 0000000..b3f7da2
Binary files /dev/null and b/public/country-img/DOM.png differ
diff --git a/public/country-img/DZA.png b/public/country-img/DZA.png
new file mode 100644
index 0000000..d921c08
Binary files /dev/null and b/public/country-img/DZA.png differ
diff --git a/public/country-img/ECU.png b/public/country-img/ECU.png
new file mode 100644
index 0000000..4a56ffd
Binary files /dev/null and b/public/country-img/ECU.png differ
diff --git a/public/country-img/EGY.png b/public/country-img/EGY.png
new file mode 100644
index 0000000..597d381
Binary files /dev/null and b/public/country-img/EGY.png differ
diff --git a/public/country-img/ERI.png b/public/country-img/ERI.png
new file mode 100644
index 0000000..635cf09
Binary files /dev/null and b/public/country-img/ERI.png differ
diff --git a/public/country-img/ESH.png b/public/country-img/ESH.png
new file mode 100644
index 0000000..42bc3ba
Binary files /dev/null and b/public/country-img/ESH.png differ
diff --git a/public/country-img/ESP.png b/public/country-img/ESP.png
new file mode 100644
index 0000000..73b7e47
Binary files /dev/null and b/public/country-img/ESP.png differ
diff --git a/public/country-img/EST.png b/public/country-img/EST.png
new file mode 100644
index 0000000..697a46b
Binary files /dev/null and b/public/country-img/EST.png differ
diff --git a/public/country-img/ETH.png b/public/country-img/ETH.png
new file mode 100644
index 0000000..fa99311
Binary files /dev/null and b/public/country-img/ETH.png differ
diff --git a/public/country-img/FIN.png b/public/country-img/FIN.png
new file mode 100644
index 0000000..b0884cb
Binary files /dev/null and b/public/country-img/FIN.png differ
diff --git a/public/country-img/FJI.png b/public/country-img/FJI.png
new file mode 100644
index 0000000..9f9d49c
Binary files /dev/null and b/public/country-img/FJI.png differ
diff --git a/public/country-img/FLK.png b/public/country-img/FLK.png
new file mode 100644
index 0000000..3048d51
Binary files /dev/null and b/public/country-img/FLK.png differ
diff --git a/public/country-img/FRA.png b/public/country-img/FRA.png
new file mode 100644
index 0000000..22e2365
Binary files /dev/null and b/public/country-img/FRA.png differ
diff --git a/public/country-img/FRO.png b/public/country-img/FRO.png
new file mode 100644
index 0000000..2c2a6c7
Binary files /dev/null and b/public/country-img/FRO.png differ
diff --git a/public/country-img/FSM.png b/public/country-img/FSM.png
new file mode 100644
index 0000000..2f4d6aa
Binary files /dev/null and b/public/country-img/FSM.png differ
diff --git a/public/country-img/GAB.png b/public/country-img/GAB.png
new file mode 100644
index 0000000..5366f4b
Binary files /dev/null and b/public/country-img/GAB.png differ
diff --git a/public/country-img/GAF.png b/public/country-img/GAF.png
new file mode 100644
index 0000000..ffcec45
Binary files /dev/null and b/public/country-img/GAF.png differ
diff --git a/public/country-img/GBR.png b/public/country-img/GBR.png
new file mode 100644
index 0000000..47c03e4
Binary files /dev/null and b/public/country-img/GBR.png differ
diff --git a/public/country-img/GEO.png b/public/country-img/GEO.png
new file mode 100644
index 0000000..80cbd12
Binary files /dev/null and b/public/country-img/GEO.png differ
diff --git a/public/country-img/GHA.png b/public/country-img/GHA.png
new file mode 100644
index 0000000..a4f71aa
Binary files /dev/null and b/public/country-img/GHA.png differ
diff --git a/public/country-img/GIB.png b/public/country-img/GIB.png
new file mode 100644
index 0000000..f49a6ce
Binary files /dev/null and b/public/country-img/GIB.png differ
diff --git a/public/country-img/GIN.png b/public/country-img/GIN.png
new file mode 100644
index 0000000..af10b0f
Binary files /dev/null and b/public/country-img/GIN.png differ
diff --git a/public/country-img/GLP.png b/public/country-img/GLP.png
new file mode 100644
index 0000000..d31ef7e
Binary files /dev/null and b/public/country-img/GLP.png differ
diff --git a/public/country-img/GLP1.png b/public/country-img/GLP1.png
new file mode 100644
index 0000000..1b76808
Binary files /dev/null and b/public/country-img/GLP1.png differ
diff --git a/public/country-img/GMB.png b/public/country-img/GMB.png
new file mode 100644
index 0000000..e897a19
Binary files /dev/null and b/public/country-img/GMB.png differ
diff --git a/public/country-img/GNB.png b/public/country-img/GNB.png
new file mode 100644
index 0000000..76828f1
Binary files /dev/null and b/public/country-img/GNB.png differ
diff --git a/public/country-img/GNQ.png b/public/country-img/GNQ.png
new file mode 100644
index 0000000..cec9e4f
Binary files /dev/null and b/public/country-img/GNQ.png differ
diff --git a/public/country-img/GRC.png b/public/country-img/GRC.png
new file mode 100644
index 0000000..ad5f6bd
Binary files /dev/null and b/public/country-img/GRC.png differ
diff --git a/public/country-img/GRD.png b/public/country-img/GRD.png
new file mode 100644
index 0000000..2a0e975
Binary files /dev/null and b/public/country-img/GRD.png differ
diff --git a/public/country-img/GRL.png b/public/country-img/GRL.png
new file mode 100644
index 0000000..c3323e8
Binary files /dev/null and b/public/country-img/GRL.png differ
diff --git a/public/country-img/GTM.png b/public/country-img/GTM.png
new file mode 100644
index 0000000..9b721a1
Binary files /dev/null and b/public/country-img/GTM.png differ
diff --git a/public/country-img/GUY.png b/public/country-img/GUY.png
new file mode 100644
index 0000000..f5ff1a0
Binary files /dev/null and b/public/country-img/GUY.png differ
diff --git a/public/country-img/HKG.png b/public/country-img/HKG.png
new file mode 100644
index 0000000..910ccac
Binary files /dev/null and b/public/country-img/HKG.png differ
diff --git a/public/country-img/HND.png b/public/country-img/HND.png
new file mode 100644
index 0000000..14f001a
Binary files /dev/null and b/public/country-img/HND.png differ
diff --git a/public/country-img/HRV.png b/public/country-img/HRV.png
new file mode 100644
index 0000000..730360b
Binary files /dev/null and b/public/country-img/HRV.png differ
diff --git a/public/country-img/HTI.png b/public/country-img/HTI.png
new file mode 100644
index 0000000..1472a69
Binary files /dev/null and b/public/country-img/HTI.png differ
diff --git a/public/country-img/HUN.png b/public/country-img/HUN.png
new file mode 100644
index 0000000..35c5a05
Binary files /dev/null and b/public/country-img/HUN.png differ
diff --git a/public/country-img/IDN.png b/public/country-img/IDN.png
new file mode 100644
index 0000000..6edc05d
Binary files /dev/null and b/public/country-img/IDN.png differ
diff --git a/public/country-img/IND.png b/public/country-img/IND.png
new file mode 100644
index 0000000..5ad57a6
Binary files /dev/null and b/public/country-img/IND.png differ
diff --git a/public/country-img/IRL.png b/public/country-img/IRL.png
new file mode 100644
index 0000000..7d93b1c
Binary files /dev/null and b/public/country-img/IRL.png differ
diff --git a/public/country-img/IRN.png b/public/country-img/IRN.png
new file mode 100644
index 0000000..77183ed
Binary files /dev/null and b/public/country-img/IRN.png differ
diff --git a/public/country-img/IRQ.png b/public/country-img/IRQ.png
new file mode 100644
index 0000000..e77952e
Binary files /dev/null and b/public/country-img/IRQ.png differ
diff --git a/public/country-img/ISL.png b/public/country-img/ISL.png
new file mode 100644
index 0000000..c326339
Binary files /dev/null and b/public/country-img/ISL.png differ
diff --git a/public/country-img/ISR.png b/public/country-img/ISR.png
new file mode 100644
index 0000000..e21c7f3
Binary files /dev/null and b/public/country-img/ISR.png differ
diff --git a/public/country-img/ITA.png b/public/country-img/ITA.png
new file mode 100644
index 0000000..351de90
Binary files /dev/null and b/public/country-img/ITA.png differ
diff --git a/public/country-img/JAM.png b/public/country-img/JAM.png
new file mode 100644
index 0000000..a63cc0f
Binary files /dev/null and b/public/country-img/JAM.png differ
diff --git a/public/country-img/JOR.png b/public/country-img/JOR.png
new file mode 100644
index 0000000..08579d4
Binary files /dev/null and b/public/country-img/JOR.png differ
diff --git a/public/country-img/JPN.png b/public/country-img/JPN.png
new file mode 100644
index 0000000..59817b3
Binary files /dev/null and b/public/country-img/JPN.png differ
diff --git a/public/country-img/KAZ.png b/public/country-img/KAZ.png
new file mode 100644
index 0000000..4624989
Binary files /dev/null and b/public/country-img/KAZ.png differ
diff --git a/public/country-img/KEN.png b/public/country-img/KEN.png
new file mode 100644
index 0000000..f9e8b75
Binary files /dev/null and b/public/country-img/KEN.png differ
diff --git a/public/country-img/KGZ.png b/public/country-img/KGZ.png
new file mode 100644
index 0000000..11dfce7
Binary files /dev/null and b/public/country-img/KGZ.png differ
diff --git a/public/country-img/KHM.png b/public/country-img/KHM.png
new file mode 100644
index 0000000..5244a58
Binary files /dev/null and b/public/country-img/KHM.png differ
diff --git a/public/country-img/KIR.png b/public/country-img/KIR.png
new file mode 100644
index 0000000..758f441
Binary files /dev/null and b/public/country-img/KIR.png differ
diff --git a/public/country-img/KNA.png b/public/country-img/KNA.png
new file mode 100644
index 0000000..fb72698
Binary files /dev/null and b/public/country-img/KNA.png differ
diff --git a/public/country-img/KOR.png b/public/country-img/KOR.png
new file mode 100644
index 0000000..bcc44bf
Binary files /dev/null and b/public/country-img/KOR.png differ
diff --git a/public/country-img/KWT.png b/public/country-img/KWT.png
new file mode 100644
index 0000000..3ae0f24
Binary files /dev/null and b/public/country-img/KWT.png differ
diff --git a/public/country-img/LAO.png b/public/country-img/LAO.png
new file mode 100644
index 0000000..242dbdc
Binary files /dev/null and b/public/country-img/LAO.png differ
diff --git a/public/country-img/LBN.png b/public/country-img/LBN.png
new file mode 100644
index 0000000..c98880e
Binary files /dev/null and b/public/country-img/LBN.png differ
diff --git a/public/country-img/LBR.png b/public/country-img/LBR.png
new file mode 100644
index 0000000..86e18b9
Binary files /dev/null and b/public/country-img/LBR.png differ
diff --git a/public/country-img/LBY.png b/public/country-img/LBY.png
new file mode 100644
index 0000000..13b396b
Binary files /dev/null and b/public/country-img/LBY.png differ
diff --git a/public/country-img/LCA.png b/public/country-img/LCA.png
new file mode 100644
index 0000000..250031d
Binary files /dev/null and b/public/country-img/LCA.png differ
diff --git a/public/country-img/LIE.png b/public/country-img/LIE.png
new file mode 100644
index 0000000..1ca09e6
Binary files /dev/null and b/public/country-img/LIE.png differ
diff --git a/public/country-img/LKA.png b/public/country-img/LKA.png
new file mode 100644
index 0000000..2f148e8
Binary files /dev/null and b/public/country-img/LKA.png differ
diff --git a/public/country-img/LSO.png b/public/country-img/LSO.png
new file mode 100644
index 0000000..722bd68
Binary files /dev/null and b/public/country-img/LSO.png differ
diff --git a/public/country-img/LTU.png b/public/country-img/LTU.png
new file mode 100644
index 0000000..da23d8d
Binary files /dev/null and b/public/country-img/LTU.png differ
diff --git a/public/country-img/LUX.png b/public/country-img/LUX.png
new file mode 100644
index 0000000..b88e7ff
Binary files /dev/null and b/public/country-img/LUX.png differ
diff --git a/public/country-img/LVA.png b/public/country-img/LVA.png
new file mode 100644
index 0000000..1632b00
Binary files /dev/null and b/public/country-img/LVA.png differ
diff --git a/public/country-img/MAC.png b/public/country-img/MAC.png
new file mode 100644
index 0000000..181ee9c
Binary files /dev/null and b/public/country-img/MAC.png differ
diff --git a/public/country-img/MAR.png b/public/country-img/MAR.png
new file mode 100644
index 0000000..5a91386
Binary files /dev/null and b/public/country-img/MAR.png differ
diff --git a/public/country-img/MCO.png b/public/country-img/MCO.png
new file mode 100644
index 0000000..3afba93
Binary files /dev/null and b/public/country-img/MCO.png differ
diff --git a/public/country-img/MDA.png b/public/country-img/MDA.png
new file mode 100644
index 0000000..a67d145
Binary files /dev/null and b/public/country-img/MDA.png differ
diff --git a/public/country-img/MDG.png b/public/country-img/MDG.png
new file mode 100644
index 0000000..84829ae
Binary files /dev/null and b/public/country-img/MDG.png differ
diff --git a/public/country-img/MDV.png b/public/country-img/MDV.png
new file mode 100644
index 0000000..fa04158
Binary files /dev/null and b/public/country-img/MDV.png differ
diff --git a/public/country-img/MEX.png b/public/country-img/MEX.png
new file mode 100644
index 0000000..e75824e
Binary files /dev/null and b/public/country-img/MEX.png differ
diff --git a/public/country-img/MHL.png b/public/country-img/MHL.png
new file mode 100644
index 0000000..9f90102
Binary files /dev/null and b/public/country-img/MHL.png differ
diff --git a/public/country-img/MKD.png b/public/country-img/MKD.png
new file mode 100644
index 0000000..bdc3ca2
Binary files /dev/null and b/public/country-img/MKD.png differ
diff --git a/public/country-img/MKD1.png b/public/country-img/MKD1.png
new file mode 100644
index 0000000..41287c6
Binary files /dev/null and b/public/country-img/MKD1.png differ
diff --git a/public/country-img/MLI.png b/public/country-img/MLI.png
new file mode 100644
index 0000000..68e645c
Binary files /dev/null and b/public/country-img/MLI.png differ
diff --git a/public/country-img/MLT.png b/public/country-img/MLT.png
new file mode 100644
index 0000000..10d292e
Binary files /dev/null and b/public/country-img/MLT.png differ
diff --git a/public/country-img/MMR.png b/public/country-img/MMR.png
new file mode 100644
index 0000000..81ed701
Binary files /dev/null and b/public/country-img/MMR.png differ
diff --git a/public/country-img/MNE.png b/public/country-img/MNE.png
new file mode 100644
index 0000000..c40f04e
Binary files /dev/null and b/public/country-img/MNE.png differ
diff --git a/public/country-img/MNG.png b/public/country-img/MNG.png
new file mode 100644
index 0000000..e87100c
Binary files /dev/null and b/public/country-img/MNG.png differ
diff --git a/public/country-img/MNP.png b/public/country-img/MNP.png
new file mode 100644
index 0000000..792e9a0
Binary files /dev/null and b/public/country-img/MNP.png differ
diff --git a/public/country-img/MOZ.png b/public/country-img/MOZ.png
new file mode 100644
index 0000000..3101694
Binary files /dev/null and b/public/country-img/MOZ.png differ
diff --git a/public/country-img/MRT.png b/public/country-img/MRT.png
new file mode 100644
index 0000000..a74b58f
Binary files /dev/null and b/public/country-img/MRT.png differ
diff --git a/public/country-img/MSR.png b/public/country-img/MSR.png
new file mode 100644
index 0000000..e32bd50
Binary files /dev/null and b/public/country-img/MSR.png differ
diff --git a/public/country-img/MTQ.png b/public/country-img/MTQ.png
new file mode 100644
index 0000000..78c0e6a
Binary files /dev/null and b/public/country-img/MTQ.png differ
diff --git a/public/country-img/MUS.png b/public/country-img/MUS.png
new file mode 100644
index 0000000..6425543
Binary files /dev/null and b/public/country-img/MUS.png differ
diff --git a/public/country-img/MWI.png b/public/country-img/MWI.png
new file mode 100644
index 0000000..81efcd4
Binary files /dev/null and b/public/country-img/MWI.png differ
diff --git a/public/country-img/MYS.png b/public/country-img/MYS.png
new file mode 100644
index 0000000..509ef75
Binary files /dev/null and b/public/country-img/MYS.png differ
diff --git a/public/country-img/NAM.png b/public/country-img/NAM.png
new file mode 100644
index 0000000..7bc9bfd
Binary files /dev/null and b/public/country-img/NAM.png differ
diff --git a/public/country-img/NCL.png b/public/country-img/NCL.png
new file mode 100644
index 0000000..0b36248
Binary files /dev/null and b/public/country-img/NCL.png differ
diff --git a/public/country-img/NER.png b/public/country-img/NER.png
new file mode 100644
index 0000000..a566f12
Binary files /dev/null and b/public/country-img/NER.png differ
diff --git a/public/country-img/NGA.png b/public/country-img/NGA.png
new file mode 100644
index 0000000..17d192b
Binary files /dev/null and b/public/country-img/NGA.png differ
diff --git a/public/country-img/NIC.png b/public/country-img/NIC.png
new file mode 100644
index 0000000..5b8b25c
Binary files /dev/null and b/public/country-img/NIC.png differ
diff --git a/public/country-img/NIU.png b/public/country-img/NIU.png
new file mode 100644
index 0000000..d533114
Binary files /dev/null and b/public/country-img/NIU.png differ
diff --git a/public/country-img/NLD.png b/public/country-img/NLD.png
new file mode 100644
index 0000000..d5afde5
Binary files /dev/null and b/public/country-img/NLD.png differ
diff --git a/public/country-img/NOR.png b/public/country-img/NOR.png
new file mode 100644
index 0000000..4cb0988
Binary files /dev/null and b/public/country-img/NOR.png differ
diff --git a/public/country-img/NPL.png b/public/country-img/NPL.png
new file mode 100644
index 0000000..584079d
Binary files /dev/null and b/public/country-img/NPL.png differ
diff --git a/public/country-img/NRU.png b/public/country-img/NRU.png
new file mode 100644
index 0000000..3241de4
Binary files /dev/null and b/public/country-img/NRU.png differ
diff --git a/public/country-img/NZL.png b/public/country-img/NZL.png
new file mode 100644
index 0000000..4ac78b2
Binary files /dev/null and b/public/country-img/NZL.png differ
diff --git a/public/country-img/OMN.png b/public/country-img/OMN.png
new file mode 100644
index 0000000..19aea9e
Binary files /dev/null and b/public/country-img/OMN.png differ
diff --git a/public/country-img/PAK.png b/public/country-img/PAK.png
new file mode 100644
index 0000000..09d670f
Binary files /dev/null and b/public/country-img/PAK.png differ
diff --git a/public/country-img/PAN.png b/public/country-img/PAN.png
new file mode 100644
index 0000000..30287ed
Binary files /dev/null and b/public/country-img/PAN.png differ
diff --git a/public/country-img/PCN.png b/public/country-img/PCN.png
new file mode 100644
index 0000000..221e74e
Binary files /dev/null and b/public/country-img/PCN.png differ
diff --git a/public/country-img/PER.png b/public/country-img/PER.png
new file mode 100644
index 0000000..715800e
Binary files /dev/null and b/public/country-img/PER.png differ
diff --git a/public/country-img/PHL.png b/public/country-img/PHL.png
new file mode 100644
index 0000000..597f540
Binary files /dev/null and b/public/country-img/PHL.png differ
diff --git a/public/country-img/PLW.png b/public/country-img/PLW.png
new file mode 100644
index 0000000..23a60b3
Binary files /dev/null and b/public/country-img/PLW.png differ
diff --git a/public/country-img/PNG.png b/public/country-img/PNG.png
new file mode 100644
index 0000000..e9da904
Binary files /dev/null and b/public/country-img/PNG.png differ
diff --git a/public/country-img/POL.png b/public/country-img/POL.png
new file mode 100644
index 0000000..1bf6ae8
Binary files /dev/null and b/public/country-img/POL.png differ
diff --git a/public/country-img/PRK.png b/public/country-img/PRK.png
new file mode 100644
index 0000000..0eeb475
Binary files /dev/null and b/public/country-img/PRK.png differ
diff --git a/public/country-img/PRT.png b/public/country-img/PRT.png
new file mode 100644
index 0000000..f6e928c
Binary files /dev/null and b/public/country-img/PRT.png differ
diff --git a/public/country-img/PRY.png b/public/country-img/PRY.png
new file mode 100644
index 0000000..1acf33a
Binary files /dev/null and b/public/country-img/PRY.png differ
diff --git a/public/country-img/PSE.png b/public/country-img/PSE.png
new file mode 100644
index 0000000..6d4ba3d
Binary files /dev/null and b/public/country-img/PSE.png differ
diff --git a/public/country-img/PYF.png b/public/country-img/PYF.png
new file mode 100644
index 0000000..6cb7174
Binary files /dev/null and b/public/country-img/PYF.png differ
diff --git a/public/country-img/QAT.png b/public/country-img/QAT.png
new file mode 100644
index 0000000..4e13b77
Binary files /dev/null and b/public/country-img/QAT.png differ
diff --git a/public/country-img/REU.png b/public/country-img/REU.png
new file mode 100644
index 0000000..bdb8ecb
Binary files /dev/null and b/public/country-img/REU.png differ
diff --git a/public/country-img/ROU.png b/public/country-img/ROU.png
new file mode 100644
index 0000000..13ffb20
Binary files /dev/null and b/public/country-img/ROU.png differ
diff --git a/public/country-img/RUS.png b/public/country-img/RUS.png
new file mode 100644
index 0000000..8bc3231
Binary files /dev/null and b/public/country-img/RUS.png differ
diff --git a/public/country-img/RWA.png b/public/country-img/RWA.png
new file mode 100644
index 0000000..fd3fff3
Binary files /dev/null and b/public/country-img/RWA.png differ
diff --git a/public/country-img/SAU.png b/public/country-img/SAU.png
new file mode 100644
index 0000000..0ada596
Binary files /dev/null and b/public/country-img/SAU.png differ
diff --git a/public/country-img/SDN.png b/public/country-img/SDN.png
new file mode 100644
index 0000000..e5bf5b1
Binary files /dev/null and b/public/country-img/SDN.png differ
diff --git a/public/country-img/SEN.png b/public/country-img/SEN.png
new file mode 100644
index 0000000..1f40651
Binary files /dev/null and b/public/country-img/SEN.png differ
diff --git a/public/country-img/SGP.png b/public/country-img/SGP.png
new file mode 100644
index 0000000..12f89b7
Binary files /dev/null and b/public/country-img/SGP.png differ
diff --git a/public/country-img/SLB.png b/public/country-img/SLB.png
new file mode 100644
index 0000000..a01fc32
Binary files /dev/null and b/public/country-img/SLB.png differ
diff --git a/public/country-img/SLE.png b/public/country-img/SLE.png
new file mode 100644
index 0000000..6d4734d
Binary files /dev/null and b/public/country-img/SLE.png differ
diff --git a/public/country-img/SLV.png b/public/country-img/SLV.png
new file mode 100644
index 0000000..319236b
Binary files /dev/null and b/public/country-img/SLV.png differ
diff --git a/public/country-img/SMR.png b/public/country-img/SMR.png
new file mode 100644
index 0000000..974dc0b
Binary files /dev/null and b/public/country-img/SMR.png differ
diff --git a/public/country-img/SOM.png b/public/country-img/SOM.png
new file mode 100644
index 0000000..e9e5fe0
Binary files /dev/null and b/public/country-img/SOM.png differ
diff --git a/public/country-img/SRB.png b/public/country-img/SRB.png
new file mode 100644
index 0000000..98b1efb
Binary files /dev/null and b/public/country-img/SRB.png differ
diff --git a/public/country-img/STP.png b/public/country-img/STP.png
new file mode 100644
index 0000000..3a63437
Binary files /dev/null and b/public/country-img/STP.png differ
diff --git a/public/country-img/SUR.png b/public/country-img/SUR.png
new file mode 100644
index 0000000..b538bab
Binary files /dev/null and b/public/country-img/SUR.png differ
diff --git a/public/country-img/SVK.png b/public/country-img/SVK.png
new file mode 100644
index 0000000..2d910d5
Binary files /dev/null and b/public/country-img/SVK.png differ
diff --git a/public/country-img/SVN.png b/public/country-img/SVN.png
new file mode 100644
index 0000000..3ca7d5f
Binary files /dev/null and b/public/country-img/SVN.png differ
diff --git a/public/country-img/SWE.png b/public/country-img/SWE.png
new file mode 100644
index 0000000..32a7faa
Binary files /dev/null and b/public/country-img/SWE.png differ
diff --git a/public/country-img/SWZ.png b/public/country-img/SWZ.png
new file mode 100644
index 0000000..308cb34
Binary files /dev/null and b/public/country-img/SWZ.png differ
diff --git a/public/country-img/SYC.png b/public/country-img/SYC.png
new file mode 100644
index 0000000..f45176c
Binary files /dev/null and b/public/country-img/SYC.png differ
diff --git a/public/country-img/SYR.png b/public/country-img/SYR.png
new file mode 100644
index 0000000..16a2997
Binary files /dev/null and b/public/country-img/SYR.png differ
diff --git a/public/country-img/TCA.png b/public/country-img/TCA.png
new file mode 100644
index 0000000..8fe5874
Binary files /dev/null and b/public/country-img/TCA.png differ
diff --git a/public/country-img/TCD.png b/public/country-img/TCD.png
new file mode 100644
index 0000000..afb9b73
Binary files /dev/null and b/public/country-img/TCD.png differ
diff --git a/public/country-img/TGO.png b/public/country-img/TGO.png
new file mode 100644
index 0000000..f031761
Binary files /dev/null and b/public/country-img/TGO.png differ
diff --git a/public/country-img/THA.png b/public/country-img/THA.png
new file mode 100644
index 0000000..3fa9267
Binary files /dev/null and b/public/country-img/THA.png differ
diff --git a/public/country-img/TJK.png b/public/country-img/TJK.png
new file mode 100644
index 0000000..55b6c54
Binary files /dev/null and b/public/country-img/TJK.png differ
diff --git a/public/country-img/TKM.png b/public/country-img/TKM.png
new file mode 100644
index 0000000..6794bc3
Binary files /dev/null and b/public/country-img/TKM.png differ
diff --git a/public/country-img/TON.png b/public/country-img/TON.png
new file mode 100644
index 0000000..426d331
Binary files /dev/null and b/public/country-img/TON.png differ
diff --git a/public/country-img/TTO.png b/public/country-img/TTO.png
new file mode 100644
index 0000000..a84a7d0
Binary files /dev/null and b/public/country-img/TTO.png differ
diff --git a/public/country-img/TUN.png b/public/country-img/TUN.png
new file mode 100644
index 0000000..5c30f80
Binary files /dev/null and b/public/country-img/TUN.png differ
diff --git a/public/country-img/TUR.png b/public/country-img/TUR.png
new file mode 100644
index 0000000..d7af12b
Binary files /dev/null and b/public/country-img/TUR.png differ
diff --git a/public/country-img/TUV.png b/public/country-img/TUV.png
new file mode 100644
index 0000000..1a6c287
Binary files /dev/null and b/public/country-img/TUV.png differ
diff --git a/public/country-img/TWN.png b/public/country-img/TWN.png
new file mode 100644
index 0000000..81d4f34
Binary files /dev/null and b/public/country-img/TWN.png differ
diff --git a/public/country-img/TZA.png b/public/country-img/TZA.png
new file mode 100644
index 0000000..ff163a0
Binary files /dev/null and b/public/country-img/TZA.png differ
diff --git a/public/country-img/UGA.png b/public/country-img/UGA.png
new file mode 100644
index 0000000..456a79f
Binary files /dev/null and b/public/country-img/UGA.png differ
diff --git a/public/country-img/UKR.png b/public/country-img/UKR.png
new file mode 100644
index 0000000..46b5070
Binary files /dev/null and b/public/country-img/UKR.png differ
diff --git a/public/country-img/URY.png b/public/country-img/URY.png
new file mode 100644
index 0000000..16d469e
Binary files /dev/null and b/public/country-img/URY.png differ
diff --git a/public/country-img/USA.png b/public/country-img/USA.png
new file mode 100644
index 0000000..80b0624
Binary files /dev/null and b/public/country-img/USA.png differ
diff --git a/public/country-img/UZB.png b/public/country-img/UZB.png
new file mode 100644
index 0000000..70bbb52
Binary files /dev/null and b/public/country-img/UZB.png differ
diff --git a/public/country-img/VAT.png b/public/country-img/VAT.png
new file mode 100644
index 0000000..dcfa23d
Binary files /dev/null and b/public/country-img/VAT.png differ
diff --git a/public/country-img/VCT.png b/public/country-img/VCT.png
new file mode 100644
index 0000000..e8b1d40
Binary files /dev/null and b/public/country-img/VCT.png differ
diff --git a/public/country-img/VEN.png b/public/country-img/VEN.png
new file mode 100644
index 0000000..b2d7d76
Binary files /dev/null and b/public/country-img/VEN.png differ
diff --git a/public/country-img/VGB.png b/public/country-img/VGB.png
new file mode 100644
index 0000000..6a5aed9
Binary files /dev/null and b/public/country-img/VGB.png differ
diff --git a/public/country-img/VIR.png b/public/country-img/VIR.png
new file mode 100644
index 0000000..71647c2
Binary files /dev/null and b/public/country-img/VIR.png differ
diff --git a/public/country-img/VNM.png b/public/country-img/VNM.png
new file mode 100644
index 0000000..af1faa5
Binary files /dev/null and b/public/country-img/VNM.png differ
diff --git a/public/country-img/VUT.png b/public/country-img/VUT.png
new file mode 100644
index 0000000..6714676
Binary files /dev/null and b/public/country-img/VUT.png differ
diff --git a/public/country-img/WLF.png b/public/country-img/WLF.png
new file mode 100644
index 0000000..7839773
Binary files /dev/null and b/public/country-img/WLF.png differ
diff --git a/public/country-img/WSM.png b/public/country-img/WSM.png
new file mode 100644
index 0000000..9f51be1
Binary files /dev/null and b/public/country-img/WSM.png differ
diff --git a/public/country-img/YEM.png b/public/country-img/YEM.png
new file mode 100644
index 0000000..0759545
Binary files /dev/null and b/public/country-img/YEM.png differ
diff --git a/public/country-img/ZAF.png b/public/country-img/ZAF.png
new file mode 100644
index 0000000..1e30fbb
Binary files /dev/null and b/public/country-img/ZAF.png differ
diff --git a/public/country-img/ZMB.png b/public/country-img/ZMB.png
new file mode 100644
index 0000000..d873ae6
Binary files /dev/null and b/public/country-img/ZMB.png differ
diff --git a/public/country-img/ZWE.png b/public/country-img/ZWE.png
new file mode 100644
index 0000000..fb528bf
Binary files /dev/null and b/public/country-img/ZWE.png differ
diff --git a/public/country-img/undefined.png b/public/country-img/undefined.png
new file mode 100644
index 0000000..0fd1fe7
Binary files /dev/null and b/public/country-img/undefined.png differ
diff --git a/public/drawArea/duobianxing.png b/public/drawArea/duobianxing.png
new file mode 100644
index 0000000..4b82999
Binary files /dev/null and b/public/drawArea/duobianxing.png differ
diff --git a/public/drawArea/juxing.png b/public/drawArea/juxing.png
new file mode 100644
index 0000000..c6aa3d9
Binary files /dev/null and b/public/drawArea/juxing.png differ
diff --git a/public/drawArea/yuan.png b/public/drawArea/yuan.png
new file mode 100644
index 0000000..c8688f5
Binary files /dev/null and b/public/drawArea/yuan.png differ
diff --git a/public/img/All-Fleets.png b/public/img/All-Fleets.png
new file mode 100644
index 0000000..0b62a23
Binary files /dev/null and b/public/img/All-Fleets.png differ
diff --git a/public/img/Map-Selection.png b/public/img/Map-Selection.png
new file mode 100644
index 0000000..6eab766
Binary files /dev/null and b/public/img/Map-Selection.png differ
diff --git a/public/img/Search-History.png b/public/img/Search-History.png
new file mode 100644
index 0000000..35d8d32
Binary files /dev/null and b/public/img/Search-History.png differ
diff --git a/public/img/Ship-Movement.png b/public/img/Ship-Movement.png
new file mode 100644
index 0000000..8d192ad
Binary files /dev/null and b/public/img/Ship-Movement.png differ
diff --git a/public/img/Voyage-History.png b/public/img/Voyage-History.png
new file mode 100644
index 0000000..1815c17
Binary files /dev/null and b/public/img/Voyage-History.png differ
diff --git a/public/img/Voyage.png b/public/img/Voyage.png
new file mode 100644
index 0000000..324c0f4
Binary files /dev/null and b/public/img/Voyage.png differ
diff --git a/public/img/Weather.png b/public/img/Weather.png
new file mode 100644
index 0000000..e7b667e
Binary files /dev/null and b/public/img/Weather.png differ
diff --git a/public/img/add.png b/public/img/add.png
new file mode 100644
index 0000000..28bf2a2
Binary files /dev/null and b/public/img/add.png differ
diff --git a/public/img/blue.png b/public/img/blue.png
new file mode 100644
index 0000000..afe426a
Binary files /dev/null and b/public/img/blue.png differ
diff --git a/public/img/car.svg b/public/img/car.svg
new file mode 100644
index 0000000..1462573
--- /dev/null
+++ b/public/img/car.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/img/daosanjiao.svg b/public/img/daosanjiao.svg
new file mode 100644
index 0000000..0adfb0b
--- /dev/null
+++ b/public/img/daosanjiao.svg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
diff --git a/public/img/del.png b/public/img/del.png
new file mode 100644
index 0000000..5111acf
Binary files /dev/null and b/public/img/del.png differ
diff --git a/public/img/delay.png b/public/img/delay.png
new file mode 100644
index 0000000..2fcf7a4
Binary files /dev/null and b/public/img/delay.png differ
diff --git a/public/img/draw-point.png b/public/img/draw-point.png
new file mode 100644
index 0000000..c5aaa90
Binary files /dev/null and b/public/img/draw-point.png differ
diff --git a/public/img/duobianxing.png b/public/img/duobianxing.png
new file mode 100644
index 0000000..4b82999
Binary files /dev/null and b/public/img/duobianxing.png differ
diff --git a/public/img/end.png b/public/img/end.png
new file mode 100644
index 0000000..6453b9b
Binary files /dev/null and b/public/img/end.png differ
diff --git a/public/img/eye-close.png b/public/img/eye-close.png
new file mode 100644
index 0000000..8486c46
Binary files /dev/null and b/public/img/eye-close.png differ
diff --git a/public/img/eye-open.png b/public/img/eye-open.png
new file mode 100644
index 0000000..9d2a7cc
Binary files /dev/null and b/public/img/eye-open.png differ
diff --git a/public/img/go-right.png b/public/img/go-right.png
new file mode 100644
index 0000000..bf4157f
Binary files /dev/null and b/public/img/go-right.png differ
diff --git a/public/img/guiji.png b/public/img/guiji.png
new file mode 100644
index 0000000..7c69f0b
Binary files /dev/null and b/public/img/guiji.png differ
diff --git a/public/img/guiji.svg b/public/img/guiji.svg
new file mode 100644
index 0000000..11fbd5e
--- /dev/null
+++ b/public/img/guiji.svg
@@ -0,0 +1,37 @@
+
+
+ 轨迹
+ Created with Sketch.
+
+
+
+
+
+
+
+
+
diff --git a/public/img/jiantou.png b/public/img/jiantou.png
new file mode 100644
index 0000000..c9bcf63
Binary files /dev/null and b/public/img/jiantou.png differ
diff --git a/public/img/jizhuangxiang.png b/public/img/jizhuangxiang.png
new file mode 100644
index 0000000..75ebd9a
Binary files /dev/null and b/public/img/jizhuangxiang.png differ
diff --git a/public/img/juxing.png b/public/img/juxing.png
new file mode 100644
index 0000000..c6aa3d9
Binary files /dev/null and b/public/img/juxing.png differ
diff --git a/public/img/kuang.png b/public/img/kuang.png
new file mode 100644
index 0000000..f7a2172
Binary files /dev/null and b/public/img/kuang.png differ
diff --git a/public/img/laba.png b/public/img/laba.png
new file mode 100644
index 0000000..d69fcbf
Binary files /dev/null and b/public/img/laba.png differ
diff --git a/public/img/line.png b/public/img/line.png
new file mode 100644
index 0000000..a2f5e01
Binary files /dev/null and b/public/img/line.png differ
diff --git a/public/img/logo.png b/public/img/logo.png
new file mode 100644
index 0000000..651689a
Binary files /dev/null and b/public/img/logo.png differ
diff --git a/public/img/logo.svg b/public/img/logo.svg
new file mode 100644
index 0000000..80518f7
--- /dev/null
+++ b/public/img/logo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/img/logo1.png b/public/img/logo1.png
new file mode 100644
index 0000000..0147f67
Binary files /dev/null and b/public/img/logo1.png differ
diff --git a/public/img/mao_ico.png b/public/img/mao_ico.png
new file mode 100644
index 0000000..8965b81
Binary files /dev/null and b/public/img/mao_ico.png differ
diff --git a/public/img/marineWeather.png b/public/img/marineWeather.png
new file mode 100644
index 0000000..3471261
Binary files /dev/null and b/public/img/marineWeather.png differ
diff --git a/public/img/marineWeather.svg b/public/img/marineWeather.svg
new file mode 100644
index 0000000..00c1fea
--- /dev/null
+++ b/public/img/marineWeather.svg
@@ -0,0 +1 @@
+
diff --git a/public/img/point.png b/public/img/point.png
new file mode 100644
index 0000000..704f0e5
Binary files /dev/null and b/public/img/point.png differ
diff --git a/public/img/port.png b/public/img/port.png
new file mode 100644
index 0000000..34f7da8
Binary files /dev/null and b/public/img/port.png differ
diff --git a/public/img/portIcon.png b/public/img/portIcon.png
new file mode 100644
index 0000000..4668710
Binary files /dev/null and b/public/img/portIcon.png differ
diff --git a/public/img/portMenu.png b/public/img/portMenu.png
new file mode 100644
index 0000000..741ed5f
Binary files /dev/null and b/public/img/portMenu.png differ
diff --git a/public/img/pos.png b/public/img/pos.png
new file mode 100644
index 0000000..6a86a89
Binary files /dev/null and b/public/img/pos.png differ
diff --git a/public/img/search-port.svg b/public/img/search-port.svg
new file mode 100644
index 0000000..dfefc1c
--- /dev/null
+++ b/public/img/search-port.svg
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
diff --git a/public/img/search-ship.svg b/public/img/search-ship.svg
new file mode 100644
index 0000000..7c45376
--- /dev/null
+++ b/public/img/search-ship.svg
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
diff --git a/public/img/select.png b/public/img/select.png
new file mode 100644
index 0000000..c2574d2
Binary files /dev/null and b/public/img/select.png differ
diff --git a/public/img/shipAgency.png b/public/img/shipAgency.png
new file mode 100644
index 0000000..f7e9f58
Binary files /dev/null and b/public/img/shipAgency.png differ
diff --git a/public/img/shipAgencybak230302.png b/public/img/shipAgencybak230302.png
new file mode 100644
index 0000000..111f409
Binary files /dev/null and b/public/img/shipAgencybak230302.png differ
diff --git a/public/img/shipIcon.png b/public/img/shipIcon.png
new file mode 100644
index 0000000..d6d2b39
Binary files /dev/null and b/public/img/shipIcon.png differ
diff --git a/public/img/ship_ico.png b/public/img/ship_ico.png
new file mode 100644
index 0000000..2a40f04
Binary files /dev/null and b/public/img/ship_ico.png differ
diff --git a/public/img/start.png b/public/img/start.png
new file mode 100644
index 0000000..17e1894
Binary files /dev/null and b/public/img/start.png differ
diff --git a/public/img/time.png b/public/img/time.png
new file mode 100644
index 0000000..94cbe92
Binary files /dev/null and b/public/img/time.png differ
diff --git a/public/img/time.svg b/public/img/time.svg
new file mode 100644
index 0000000..80f88b1
--- /dev/null
+++ b/public/img/time.svg
@@ -0,0 +1,36 @@
+
+
+ 搜索记录
+ Created with Sketch.
+
+
+
+
+
+
+
+
diff --git a/public/img/tool.png b/public/img/tool.png
new file mode 100644
index 0000000..c103157
Binary files /dev/null and b/public/img/tool.png differ
diff --git a/public/img/tool.svg b/public/img/tool.svg
new file mode 100644
index 0000000..7be008c
--- /dev/null
+++ b/public/img/tool.svg
@@ -0,0 +1,35 @@
+
+ 工具
+ Created with Sketch.
+
+
+
+
+
+
+
+
+
diff --git a/public/img/tt_b3.png b/public/img/tt_b3.png
new file mode 100644
index 0000000..7642f9e
Binary files /dev/null and b/public/img/tt_b3.png differ
diff --git a/public/img/typhoonLegend.png b/public/img/typhoonLegend.png
new file mode 100644
index 0000000..239f8dc
Binary files /dev/null and b/public/img/typhoonLegend.png differ
diff --git a/public/img/yuan.png b/public/img/yuan.png
new file mode 100644
index 0000000..c8688f5
Binary files /dev/null and b/public/img/yuan.png differ
diff --git a/public/index.html b/public/index.html
new file mode 100644
index 0000000..d82c8ea
--- /dev/null
+++ b/public/index.html
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+ <%= htmlWebpackPlugin.options.title %>
+
+
+
+
+
diff --git a/public/logo.png b/public/logo.png
new file mode 100644
index 0000000..f27edbb
Binary files /dev/null and b/public/logo.png differ
diff --git a/public/menu-icon/allShips.svg b/public/menu-icon/allShips.svg
new file mode 100644
index 0000000..af44973
--- /dev/null
+++ b/public/menu-icon/allShips.svg
@@ -0,0 +1,24 @@
+
+ 编组
+ Created with Sketch.
+
+
+
+
+
+
+
+
+
diff --git a/public/menu-icon/areaList.svg b/public/menu-icon/areaList.svg
new file mode 100644
index 0000000..3ddff77
--- /dev/null
+++ b/public/menu-icon/areaList.svg
@@ -0,0 +1,25 @@
+
+ 区域
+ Created with Sketch.
+
+
+
+
+
+
+
+
+
diff --git a/public/menu-icon/dataAnalysis.svg b/public/menu-icon/dataAnalysis.svg
new file mode 100644
index 0000000..e5caa36
--- /dev/null
+++ b/public/menu-icon/dataAnalysis.svg
@@ -0,0 +1,28 @@
+
+ 数据分析
+ Created with Sketch.
+
+
+
+
+
+
+
+
+
+
+
diff --git a/public/menu-icon/guiji.svg b/public/menu-icon/guiji.svg
new file mode 100644
index 0000000..5ec4cdb
--- /dev/null
+++ b/public/menu-icon/guiji.svg
@@ -0,0 +1,27 @@
+
+ 轨迹
+ Created with Sketch.
+
+
+
+
+
+
+
+
+
diff --git a/public/menu-icon/jizhuangxiang.png b/public/menu-icon/jizhuangxiang.png
new file mode 100644
index 0000000..75ebd9a
Binary files /dev/null and b/public/menu-icon/jizhuangxiang.png differ
diff --git a/public/menu-icon/mapTool.svg b/public/menu-icon/mapTool.svg
new file mode 100644
index 0000000..e178d37
--- /dev/null
+++ b/public/menu-icon/mapTool.svg
@@ -0,0 +1,27 @@
+
+ 工具
+ Created with Sketch.
+
+
+
+
+
+
+
+
+
+
+
diff --git a/public/menu-icon/port3.png b/public/menu-icon/port3.png
new file mode 100644
index 0000000..4603174
Binary files /dev/null and b/public/menu-icon/port3.png differ
diff --git a/public/menu-icon/port4.png b/public/menu-icon/port4.png
new file mode 100644
index 0000000..62c77df
Binary files /dev/null and b/public/menu-icon/port4.png differ
diff --git a/public/menu-icon/portInfo.png b/public/menu-icon/portInfo.png
new file mode 100644
index 0000000..8b74f31
Binary files /dev/null and b/public/menu-icon/portInfo.png differ
diff --git a/public/menu-icon/route.svg b/public/menu-icon/route.svg
new file mode 100644
index 0000000..e8e5e55
--- /dev/null
+++ b/public/menu-icon/route.svg
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
diff --git a/public/menu-icon/searchHistory.svg b/public/menu-icon/searchHistory.svg
new file mode 100644
index 0000000..f1ccba4
--- /dev/null
+++ b/public/menu-icon/searchHistory.svg
@@ -0,0 +1,25 @@
+
+ 搜索记录
+ Created with Sketch.
+
+
+
+
+
+
+
+
+
diff --git a/public/menu-icon/weather.png b/public/menu-icon/weather.png
new file mode 100644
index 0000000..ea51e1d
Binary files /dev/null and b/public/menu-icon/weather.png differ
diff --git a/public/menu-icon/weather.svg b/public/menu-icon/weather.svg
new file mode 100644
index 0000000..106a977
--- /dev/null
+++ b/public/menu-icon/weather.svg
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
diff --git a/public/real-info-icon/horn.svg b/public/real-info-icon/horn.svg
new file mode 100644
index 0000000..3b37d81
--- /dev/null
+++ b/public/real-info-icon/horn.svg
@@ -0,0 +1,43 @@
+
+ 编组
+ Created with Sketch.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/App.vue b/src/App.vue
new file mode 100644
index 0000000..89722aa
--- /dev/null
+++ b/src/App.vue
@@ -0,0 +1,32 @@
+
+
+
+
+
+
diff --git a/src/ErrorApp.vue b/src/ErrorApp.vue
new file mode 100644
index 0000000..08d2482
--- /dev/null
+++ b/src/ErrorApp.vue
@@ -0,0 +1,29 @@
+
+ 123
+
+
+
+
+
diff --git a/src/api/data-analysis/index.ts b/src/api/data-analysis/index.ts
new file mode 100644
index 0000000..0c2621c
--- /dev/null
+++ b/src/api/data-analysis/index.ts
@@ -0,0 +1,25 @@
+import CryptoJS from 'crypto-js'
+// @ts-ignore
+import { JSEncrypt } from './jsencrypt'
+const sysConfig = require('../../../public/config/sys-config.json')
+
+// DES 解密
+function decryptByDES (ciphertext: string, key: string) {
+ const keyHex = CryptoJS.enc.Utf8.parse(key)
+ const decrypted = CryptoJS.DES.decrypt(
+ ({ ciphertext: CryptoJS.enc.Base64.parse(ciphertext) }) as any,
+ keyHex, {
+ mode: CryptoJS.mode.ECB,
+ padding: CryptoJS.pad.Pkcs7
+ })
+ return decrypted.toString(CryptoJS.enc.Utf8)
+}
+
+export function decrypt (encrypted: any, DesKey: any) {
+ const publicKey = sysConfig.publicKey
+ const decrypt = new JSEncrypt()
+ decrypt.setPublicKey(publicKey)
+ const desKey = decrypt.decrypt(DesKey) // 解密
+ const message = decryptByDES(encrypted.replace(/[\r\n]/g, ''), desKey)
+ return JSON.parse(message)
+}
diff --git a/src/api/data-analysis/jsencrypt.js b/src/api/data-analysis/jsencrypt.js
new file mode 100644
index 0000000..559f0bd
--- /dev/null
+++ b/src/api/data-analysis/jsencrypt.js
@@ -0,0 +1,5372 @@
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
+ typeof define === 'function' && define.amd ? define(['exports'], factory) :
+ (factory((global.JSEncrypt = {})));
+}(this, (function (exports) {
+ 'use strict';
+
+ var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz";
+ function int2char (n) {
+ return BI_RM.charAt(n);
+ }
+ //#region BIT_OPERATIONS
+ // (public) this & a
+ function op_and (x, y) {
+ return x & y;
+ }
+ // (public) this | a
+ function op_or (x, y) {
+ return x | y;
+ }
+ // (public) this ^ a
+ function op_xor (x, y) {
+ return x ^ y;
+ }
+ // (public) this & ~a
+ function op_andnot (x, y) {
+ return x & ~y;
+ }
+ // return index of lowest 1-bit in x, x < 2^31
+ function lbit (x) {
+ if (x == 0) {
+ return -1;
+ }
+ var r = 0;
+ if ((x & 0xffff) == 0) {
+ x >>= 16;
+ r += 16;
+ }
+ if ((x & 0xff) == 0) {
+ x >>= 8;
+ r += 8;
+ }
+ if ((x & 0xf) == 0) {
+ x >>= 4;
+ r += 4;
+ }
+ if ((x & 3) == 0) {
+ x >>= 2;
+ r += 2;
+ }
+ if ((x & 1) == 0) {
+ ++r;
+ }
+ return r;
+ }
+ // return number of 1 bits in x
+ function cbit (x) {
+ var r = 0;
+ while (x != 0) {
+ x &= x - 1;
+ ++r;
+ }
+ return r;
+ }
+ //#endregion BIT_OPERATIONS
+
+ var b64map = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+ var b64pad = "=";
+ function hex2b64 (h) {
+ var i;
+ var c;
+ var ret = "";
+ for (i = 0; i + 3 <= h.length; i += 3) {
+ c = parseInt(h.substring(i, i + 3), 16);
+ ret += b64map.charAt(c >> 6) + b64map.charAt(c & 63);
+ }
+ if (i + 1 == h.length) {
+ c = parseInt(h.substring(i, i + 1), 16);
+ ret += b64map.charAt(c << 2);
+ }
+ else if (i + 2 == h.length) {
+ c = parseInt(h.substring(i, i + 2), 16);
+ ret += b64map.charAt(c >> 2) + b64map.charAt((c & 3) << 4);
+ }
+ while ((ret.length & 3) > 0) {
+ ret += b64pad;
+ }
+ return ret;
+ }
+ // convert a base64 string to hex
+ function b64tohex (s) {
+ var ret = "";
+ var i;
+ var k = 0; // b64 state, 0-3
+ var slop = 0;
+ for (i = 0; i < s.length; ++i) {
+ if (s.charAt(i) == b64pad) {
+ break;
+ }
+ var v = b64map.indexOf(s.charAt(i));
+ if (v < 0) {
+ continue;
+ }
+ if (k == 0) {
+ ret += int2char(v >> 2);
+ slop = v & 3;
+ k = 1;
+ }
+ else if (k == 1) {
+ ret += int2char((slop << 2) | (v >> 4));
+ slop = v & 0xf;
+ k = 2;
+ }
+ else if (k == 2) {
+ ret += int2char(slop);
+ ret += int2char(v >> 2);
+ slop = v & 3;
+ k = 3;
+ }
+ else {
+ ret += int2char((slop << 2) | (v >> 4));
+ ret += int2char(v & 0xf);
+ k = 0;
+ }
+ }
+ if (k == 1) {
+ ret += int2char(slop << 2);
+ }
+ return ret;
+ }
+
+ /*! *****************************************************************************
+ Copyright (c) Microsoft Corporation. All rights reserved.
+ Licensed under the Apache License, Version 2.0 (the "License"); you may not use
+ this file except in compliance with the License. You may obtain a copy of the
+ License at http://www.apache.org/licenses/LICENSE-2.0
+ THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
+ WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
+ MERCHANTABLITY OR NON-INFRINGEMENT.
+ See the Apache Version 2.0 License for specific language governing permissions
+ and limitations under the License.
+ ***************************************************************************** */
+ /* global Reflect, Promise */
+
+ var extendStatics = function (d, b) {
+ extendStatics = Object.setPrototypeOf ||
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+ function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+ return extendStatics(d, b);
+ };
+
+ function __extends (d, b) {
+ extendStatics(d, b);
+ function __ () { this.constructor = d; }
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+ }
+
+ // Hex JavaScript decoder
+ // Copyright (c) 2008-2013 Lapo Luchini
+ // Permission to use, copy, modify, and/or distribute this software for any
+ // purpose with or without fee is hereby granted, provided that the above
+ // copyright notice and this permission notice appear in all copies.
+ //
+ // THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ // WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ // MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ // ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ // WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ // ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ // OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ /*jshint browser: true, strict: true, immed: true, latedef: true, undef: true, regexdash: false */
+ var decoder;
+ var Hex = {
+ decode: function (a) {
+ var i;
+ if (decoder === undefined) {
+ var hex = "0123456789ABCDEF";
+ var ignore = " \f\n\r\t\u00A0\u2028\u2029";
+ decoder = {};
+ for (i = 0; i < 16; ++i) {
+ decoder[hex.charAt(i)] = i;
+ }
+ hex = hex.toLowerCase();
+ for (i = 10; i < 16; ++i) {
+ decoder[hex.charAt(i)] = i;
+ }
+ for (i = 0; i < ignore.length; ++i) {
+ decoder[ignore.charAt(i)] = -1;
+ }
+ }
+ var out = [];
+ var bits = 0;
+ var char_count = 0;
+ for (i = 0; i < a.length; ++i) {
+ var c = a.charAt(i);
+ if (c == "=") {
+ break;
+ }
+ c = decoder[c];
+ if (c == -1) {
+ continue;
+ }
+ if (c === undefined) {
+ throw new Error("Illegal character at offset " + i);
+ }
+ bits |= c;
+ if (++char_count >= 2) {
+ out[out.length] = bits;
+ bits = 0;
+ char_count = 0;
+ }
+ else {
+ bits <<= 4;
+ }
+ }
+ if (char_count) {
+ throw new Error("Hex encoding incomplete: 4 bits missing");
+ }
+ return out;
+ }
+ };
+
+ // Base64 JavaScript decoder
+ // Copyright (c) 2008-2013 Lapo Luchini
+ // Permission to use, copy, modify, and/or distribute this software for any
+ // purpose with or without fee is hereby granted, provided that the above
+ // copyright notice and this permission notice appear in all copies.
+ //
+ // THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ // WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ // MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ // ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ // WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ // ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ // OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ /*jshint browser: true, strict: true, immed: true, latedef: true, undef: true, regexdash: false */
+ var decoder$1;
+ var Base64 = {
+ decode: function (a) {
+ var i;
+ if (decoder$1 === undefined) {
+ var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+ var ignore = "= \f\n\r\t\u00A0\u2028\u2029";
+ decoder$1 = Object.create(null);
+ for (i = 0; i < 64; ++i) {
+ decoder$1[b64.charAt(i)] = i;
+ }
+ for (i = 0; i < ignore.length; ++i) {
+ decoder$1[ignore.charAt(i)] = -1;
+ }
+ }
+ var out = [];
+ var bits = 0;
+ var char_count = 0;
+ for (i = 0; i < a.length; ++i) {
+ var c = a.charAt(i);
+ if (c == "=") {
+ break;
+ }
+ c = decoder$1[c];
+ if (c == -1) {
+ continue;
+ }
+ if (c === undefined) {
+ throw new Error("Illegal character at offset " + i);
+ }
+ bits |= c;
+ if (++char_count >= 4) {
+ out[out.length] = (bits >> 16);
+ out[out.length] = (bits >> 8) & 0xFF;
+ out[out.length] = bits & 0xFF;
+ bits = 0;
+ char_count = 0;
+ }
+ else {
+ bits <<= 6;
+ }
+ }
+ switch (char_count) {
+ case 1:
+ throw new Error("Base64 encoding incomplete: at least 2 bits missing");
+ case 2:
+ out[out.length] = (bits >> 10);
+ break;
+ case 3:
+ out[out.length] = (bits >> 16);
+ out[out.length] = (bits >> 8) & 0xFF;
+ break;
+ }
+ return out;
+ },
+ re: /-----BEGIN [^-]+-----([A-Za-z0-9+\/=\s]+)-----END [^-]+-----|begin-base64[^\n]+\n([A-Za-z0-9+\/=\s]+)====/,
+ unarmor: function (a) {
+ var m = Base64.re.exec(a);
+ if (m) {
+ if (m[1]) {
+ a = m[1];
+ }
+ else if (m[2]) {
+ a = m[2];
+ }
+ else {
+ throw new Error("RegExp out of sync");
+ }
+ }
+ return Base64.decode(a);
+ }
+ };
+
+ // Big integer base-10 printing library
+ // Copyright (c) 2014 Lapo Luchini
+ // Permission to use, copy, modify, and/or distribute this software for any
+ // purpose with or without fee is hereby granted, provided that the above
+ // copyright notice and this permission notice appear in all copies.
+ //
+ // THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ // WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ // MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ // ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ // WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ // ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ // OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ /*jshint browser: true, strict: true, immed: true, latedef: true, undef: true, regexdash: false */
+ var max = 10000000000000; // biggest integer that can still fit 2^53 when multiplied by 256
+ var Int10 = /** @class */ (function () {
+ function Int10 (value) {
+ this.buf = [+value || 0];
+ }
+ Int10.prototype.mulAdd = function (m, c) {
+ // assert(m <= 256)
+ var b = this.buf;
+ var l = b.length;
+ var i;
+ var t;
+ for (i = 0; i < l; ++i) {
+ t = b[i] * m + c;
+ if (t < max) {
+ c = 0;
+ }
+ else {
+ c = 0 | (t / max);
+ t -= c * max;
+ }
+ b[i] = t;
+ }
+ if (c > 0) {
+ b[i] = c;
+ }
+ };
+ Int10.prototype.sub = function (c) {
+ // assert(m <= 256)
+ var b = this.buf;
+ var l = b.length;
+ var i;
+ var t;
+ for (i = 0; i < l; ++i) {
+ t = b[i] - c;
+ if (t < 0) {
+ t += max;
+ c = 1;
+ }
+ else {
+ c = 0;
+ }
+ b[i] = t;
+ }
+ while (b[b.length - 1] === 0) {
+ b.pop();
+ }
+ };
+ Int10.prototype.toString = function (base) {
+ if ((base || 10) != 10) {
+ throw new Error("only base 10 is supported");
+ }
+ var b = this.buf;
+ var s = b[b.length - 1].toString();
+ for (var i = b.length - 2; i >= 0; --i) {
+ s += (max + b[i]).toString().substring(1);
+ }
+ return s;
+ };
+ Int10.prototype.valueOf = function () {
+ var b = this.buf;
+ var v = 0;
+ for (var i = b.length - 1; i >= 0; --i) {
+ v = v * max + b[i];
+ }
+ return v;
+ };
+ Int10.prototype.simplify = function () {
+ var b = this.buf;
+ return (b.length == 1) ? b[0] : this;
+ };
+ return Int10;
+ }());
+
+ // ASN.1 JavaScript decoder
+ var ellipsis = "\u2026";
+ var reTimeS = /^(\d\d)(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])([01]\d|2[0-3])(?:([0-5]\d)(?:([0-5]\d)(?:[.,](\d{1,3}))?)?)?(Z|[-+](?:[0]\d|1[0-2])([0-5]\d)?)?$/;
+ var reTimeL = /^(\d\d\d\d)(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])([01]\d|2[0-3])(?:([0-5]\d)(?:([0-5]\d)(?:[.,](\d{1,3}))?)?)?(Z|[-+](?:[0]\d|1[0-2])([0-5]\d)?)?$/;
+ function stringCut (str, len) {
+ if (str.length > len) {
+ str = str.substring(0, len) + ellipsis;
+ }
+ return str;
+ }
+ var Stream = /** @class */ (function () {
+ function Stream (enc, pos) {
+ this.hexDigits = "0123456789ABCDEF";
+ if (enc instanceof Stream) {
+ this.enc = enc.enc;
+ this.pos = enc.pos;
+ }
+ else {
+ // enc should be an array or a binary string
+ this.enc = enc;
+ this.pos = pos;
+ }
+ }
+ Stream.prototype.get = function (pos) {
+ if (pos === undefined) {
+ pos = this.pos++;
+ }
+ if (pos >= this.enc.length) {
+ throw new Error("Requesting byte offset " + pos + " on a stream of length " + this.enc.length);
+ }
+ return ("string" === typeof this.enc) ? this.enc.charCodeAt(pos) : this.enc[pos];
+ };
+ Stream.prototype.hexByte = function (b) {
+ return this.hexDigits.charAt((b >> 4) & 0xF) + this.hexDigits.charAt(b & 0xF);
+ };
+ Stream.prototype.hexDump = function (start, end, raw) {
+ var s = "";
+ for (var i = start; i < end; ++i) {
+ s += this.hexByte(this.get(i));
+ if (raw !== true) {
+ switch (i & 0xF) {
+ case 0x7:
+ s += " ";
+ break;
+ case 0xF:
+ s += "\n";
+ break;
+ default:
+ s += " ";
+ }
+ }
+ }
+ return s;
+ };
+ Stream.prototype.isASCII = function (start, end) {
+ for (var i = start; i < end; ++i) {
+ var c = this.get(i);
+ if (c < 32 || c > 176) {
+ return false;
+ }
+ }
+ return true;
+ };
+ Stream.prototype.parseStringISO = function (start, end) {
+ var s = "";
+ for (var i = start; i < end; ++i) {
+ s += String.fromCharCode(this.get(i));
+ }
+ return s;
+ };
+ Stream.prototype.parseStringUTF = function (start, end) {
+ var s = "";
+ for (var i = start; i < end;) {
+ var c = this.get(i++);
+ if (c < 128) {
+ s += String.fromCharCode(c);
+ }
+ else if ((c > 191) && (c < 224)) {
+ s += String.fromCharCode(((c & 0x1F) << 6) | (this.get(i++) & 0x3F));
+ }
+ else {
+ s += String.fromCharCode(((c & 0x0F) << 12) | ((this.get(i++) & 0x3F) << 6) | (this.get(i++) & 0x3F));
+ }
+ }
+ return s;
+ };
+ Stream.prototype.parseStringBMP = function (start, end) {
+ var str = "";
+ var hi;
+ var lo;
+ for (var i = start; i < end;) {
+ hi = this.get(i++);
+ lo = this.get(i++);
+ str += String.fromCharCode((hi << 8) | lo);
+ }
+ return str;
+ };
+ Stream.prototype.parseTime = function (start, end, shortYear) {
+ var s = this.parseStringISO(start, end);
+ var m = (shortYear ? reTimeS : reTimeL).exec(s);
+ if (!m) {
+ return "Unrecognized time: " + s;
+ }
+ if (shortYear) {
+ // to avoid querying the timer, use the fixed range [1970, 2069]
+ // it will conform with ITU X.400 [-10, +40] sliding window until 2030
+ m[1] = +m[1];
+ m[1] += (+m[1] < 70) ? 2000 : 1900;
+ }
+ s = m[1] + "-" + m[2] + "-" + m[3] + " " + m[4];
+ if (m[5]) {
+ s += ":" + m[5];
+ if (m[6]) {
+ s += ":" + m[6];
+ if (m[7]) {
+ s += "." + m[7];
+ }
+ }
+ }
+ if (m[8]) {
+ s += " UTC";
+ if (m[8] != "Z") {
+ s += m[8];
+ if (m[9]) {
+ s += ":" + m[9];
+ }
+ }
+ }
+ return s;
+ };
+ Stream.prototype.parseInteger = function (start, end) {
+ var v = this.get(start);
+ var neg = (v > 127);
+ var pad = neg ? 255 : 0;
+ var len;
+ var s = "";
+ // skip unuseful bits (not allowed in DER)
+ while (v == pad && ++start < end) {
+ v = this.get(start);
+ }
+ len = end - start;
+ if (len === 0) {
+ return neg ? -1 : 0;
+ }
+ // show bit length of huge integers
+ if (len > 4) {
+ s = v;
+ len <<= 3;
+ while (((+s ^ pad) & 0x80) == 0) {
+ s = +s << 1;
+ --len;
+ }
+ s = "(" + len + " bit)\n";
+ }
+ // decode the integer
+ if (neg) {
+ v = v - 256;
+ }
+ var n = new Int10(v);
+ for (var i = start + 1; i < end; ++i) {
+ n.mulAdd(256, this.get(i));
+ }
+ return s + n.toString();
+ };
+ Stream.prototype.parseBitString = function (start, end, maxLength) {
+ var unusedBit = this.get(start);
+ var lenBit = ((end - start - 1) << 3) - unusedBit;
+ var intro = "(" + lenBit + " bit)\n";
+ var s = "";
+ for (var i = start + 1; i < end; ++i) {
+ var b = this.get(i);
+ var skip = (i == end - 1) ? unusedBit : 0;
+ for (var j = 7; j >= skip; --j) {
+ s += (b >> j) & 1 ? "1" : "0";
+ }
+ if (s.length > maxLength) {
+ return intro + stringCut(s, maxLength);
+ }
+ }
+ return intro + s;
+ };
+ Stream.prototype.parseOctetString = function (start, end, maxLength) {
+ if (this.isASCII(start, end)) {
+ return stringCut(this.parseStringISO(start, end), maxLength);
+ }
+ var len = end - start;
+ var s = "(" + len + " byte)\n";
+ maxLength /= 2; // we work in bytes
+ if (len > maxLength) {
+ end = start + maxLength;
+ }
+ for (var i = start; i < end; ++i) {
+ s += this.hexByte(this.get(i));
+ }
+ if (len > maxLength) {
+ s += ellipsis;
+ }
+ return s;
+ };
+ Stream.prototype.parseOID = function (start, end, maxLength) {
+ var s = "";
+ var n = new Int10();
+ var bits = 0;
+ for (var i = start; i < end; ++i) {
+ var v = this.get(i);
+ n.mulAdd(128, v & 0x7F);
+ bits += 7;
+ if (!(v & 0x80)) { // finished
+ if (s === "") {
+ n = n.simplify();
+ if (n instanceof Int10) {
+ n.sub(80);
+ s = "2." + n.toString();
+ }
+ else {
+ var m = n < 80 ? n < 40 ? 0 : 1 : 2;
+ s = m + "." + (n - m * 40);
+ }
+ }
+ else {
+ s += "." + n.toString();
+ }
+ if (s.length > maxLength) {
+ return stringCut(s, maxLength);
+ }
+ n = new Int10();
+ bits = 0;
+ }
+ }
+ if (bits > 0) {
+ s += ".incomplete";
+ }
+ return s;
+ };
+ return Stream;
+ }());
+ var ASN1 = /** @class */ (function () {
+ function ASN1 (stream, header, length, tag, sub) {
+ if (!(tag instanceof ASN1Tag)) {
+ throw new Error("Invalid tag value.");
+ }
+ this.stream = stream;
+ this.header = header;
+ this.length = length;
+ this.tag = tag;
+ this.sub = sub;
+ }
+ ASN1.prototype.typeName = function () {
+ switch (this.tag.tagClass) {
+ case 0: // universal
+ switch (this.tag.tagNumber) {
+ case 0x00:
+ return "EOC";
+ case 0x01:
+ return "BOOLEAN";
+ case 0x02:
+ return "INTEGER";
+ case 0x03:
+ return "BIT_STRING";
+ case 0x04:
+ return "OCTET_STRING";
+ case 0x05:
+ return "NULL";
+ case 0x06:
+ return "OBJECT_IDENTIFIER";
+ case 0x07:
+ return "ObjectDescriptor";
+ case 0x08:
+ return "EXTERNAL";
+ case 0x09:
+ return "REAL";
+ case 0x0A:
+ return "ENUMERATED";
+ case 0x0B:
+ return "EMBEDDED_PDV";
+ case 0x0C:
+ return "UTF8String";
+ case 0x10:
+ return "SEQUENCE";
+ case 0x11:
+ return "SET";
+ case 0x12:
+ return "NumericString";
+ case 0x13:
+ return "PrintableString"; // ASCII subset
+ case 0x14:
+ return "TeletexString"; // aka T61String
+ case 0x15:
+ return "VideotexString";
+ case 0x16:
+ return "IA5String"; // ASCII
+ case 0x17:
+ return "UTCTime";
+ case 0x18:
+ return "GeneralizedTime";
+ case 0x19:
+ return "GraphicString";
+ case 0x1A:
+ return "VisibleString"; // ASCII subset
+ case 0x1B:
+ return "GeneralString";
+ case 0x1C:
+ return "UniversalString";
+ case 0x1E:
+ return "BMPString";
+ }
+ return "Universal_" + this.tag.tagNumber.toString();
+ case 1:
+ return "Application_" + this.tag.tagNumber.toString();
+ case 2:
+ return "[" + this.tag.tagNumber.toString() + "]"; // Context
+ case 3:
+ return "Private_" + this.tag.tagNumber.toString();
+ }
+ };
+ ASN1.prototype.content = function (maxLength) {
+ if (this.tag === undefined) {
+ return null;
+ }
+ if (maxLength === undefined) {
+ maxLength = Infinity;
+ }
+ var content = this.posContent();
+ var len = Math.abs(this.length);
+ if (!this.tag.isUniversal()) {
+ if (this.sub !== null) {
+ return "(" + this.sub.length + " elem)";
+ }
+ return this.stream.parseOctetString(content, content + len, maxLength);
+ }
+ switch (this.tag.tagNumber) {
+ case 0x01: // BOOLEAN
+ return (this.stream.get(content) === 0) ? "false" : "true";
+ case 0x02: // INTEGER
+ return this.stream.parseInteger(content, content + len);
+ case 0x03: // BIT_STRING
+ return this.sub ? "(" + this.sub.length + " elem)" :
+ this.stream.parseBitString(content, content + len, maxLength);
+ case 0x04: // OCTET_STRING
+ return this.sub ? "(" + this.sub.length + " elem)" :
+ this.stream.parseOctetString(content, content + len, maxLength);
+ // case 0x05: // NULL
+ case 0x06: // OBJECT_IDENTIFIER
+ return this.stream.parseOID(content, content + len, maxLength);
+ // case 0x07: // ObjectDescriptor
+ // case 0x08: // EXTERNAL
+ // case 0x09: // REAL
+ // case 0x0A: // ENUMERATED
+ // case 0x0B: // EMBEDDED_PDV
+ case 0x10: // SEQUENCE
+ case 0x11: // SET
+ if (this.sub !== null) {
+ return "(" + this.sub.length + " elem)";
+ }
+ else {
+ return "(no elem)";
+ }
+ case 0x0C: // UTF8String
+ return stringCut(this.stream.parseStringUTF(content, content + len), maxLength);
+ case 0x12: // NumericString
+ case 0x13: // PrintableString
+ case 0x14: // TeletexString
+ case 0x15: // VideotexString
+ case 0x16: // IA5String
+ // case 0x19: // GraphicString
+ case 0x1A: // VisibleString
+ // case 0x1B: // GeneralString
+ // case 0x1C: // UniversalString
+ return stringCut(this.stream.parseStringISO(content, content + len), maxLength);
+ case 0x1E: // BMPString
+ return stringCut(this.stream.parseStringBMP(content, content + len), maxLength);
+ case 0x17: // UTCTime
+ case 0x18: // GeneralizedTime
+ return this.stream.parseTime(content, content + len, (this.tag.tagNumber == 0x17));
+ }
+ return null;
+ };
+ ASN1.prototype.toString = function () {
+ return this.typeName() + "@" + this.stream.pos + "[header:" + this.header + ",length:" + this.length + ",sub:" + ((this.sub === null) ? "null" : this.sub.length) + "]";
+ };
+ ASN1.prototype.toPrettyString = function (indent) {
+ if (indent === undefined) {
+ indent = "";
+ }
+ var s = indent + this.typeName() + " @" + this.stream.pos;
+ if (this.length >= 0) {
+ s += "+";
+ }
+ s += this.length;
+ if (this.tag.tagConstructed) {
+ s += " (constructed)";
+ }
+ else if ((this.tag.isUniversal() && ((this.tag.tagNumber == 0x03) || (this.tag.tagNumber == 0x04))) && (this.sub !== null)) {
+ s += " (encapsulates)";
+ }
+ s += "\n";
+ if (this.sub !== null) {
+ indent += " ";
+ for (var i = 0, max = this.sub.length; i < max; ++i) {
+ s += this.sub[i].toPrettyString(indent);
+ }
+ }
+ return s;
+ };
+ ASN1.prototype.posStart = function () {
+ return this.stream.pos;
+ };
+ ASN1.prototype.posContent = function () {
+ return this.stream.pos + this.header;
+ };
+ ASN1.prototype.posEnd = function () {
+ return this.stream.pos + this.header + Math.abs(this.length);
+ };
+ ASN1.prototype.toHexString = function () {
+ return this.stream.hexDump(this.posStart(), this.posEnd(), true);
+ };
+ ASN1.decodeLength = function (stream) {
+ var buf = stream.get();
+ var len = buf & 0x7F;
+ if (len == buf) {
+ return len;
+ }
+ // no reason to use Int10, as it would be a huge buffer anyways
+ if (len > 6) {
+ throw new Error("Length over 48 bits not supported at position " + (stream.pos - 1));
+ }
+ if (len === 0) {
+ return null;
+ } // undefined
+ buf = 0;
+ for (var i = 0; i < len; ++i) {
+ buf = (buf * 256) + stream.get();
+ }
+ return buf;
+ };
+ /**
+ * Retrieve the hexadecimal value (as a string) of the current ASN.1 element
+ * @returns {string}
+ * @public
+ */
+ ASN1.prototype.getHexStringValue = function () {
+ var hexString = this.toHexString();
+ var offset = this.header * 2;
+ var length = this.length * 2;
+ return hexString.substr(offset, length);
+ };
+ ASN1.decode = function (str) {
+ var stream;
+ if (!(str instanceof Stream)) {
+ stream = new Stream(str, 0);
+ }
+ else {
+ stream = str;
+ }
+ var streamStart = new Stream(stream);
+ var tag = new ASN1Tag(stream);
+ var len = ASN1.decodeLength(stream);
+ var start = stream.pos;
+ var header = start - streamStart.pos;
+ var sub = null;
+ var getSub = function () {
+ var ret = [];
+ if (len !== null) {
+ // definite length
+ var end = start + len;
+ while (stream.pos < end) {
+ ret[ret.length] = ASN1.decode(stream);
+ }
+ if (stream.pos != end) {
+ throw new Error("Content size is not correct for container starting at offset " + start);
+ }
+ }
+ else {
+ // undefined length
+ try {
+ for (; ;) {
+ var s = ASN1.decode(stream);
+ if (s.tag.isEOC()) {
+ break;
+ }
+ ret[ret.length] = s;
+ }
+ len = start - stream.pos; // undefined lengths are represented as negative values
+ }
+ catch (e) {
+ throw new Error("Exception while decoding undefined length content: " + e);
+ }
+ }
+ return ret;
+ };
+ if (tag.tagConstructed) {
+ // must have valid content
+ sub = getSub();
+ }
+ else if (tag.isUniversal() && ((tag.tagNumber == 0x03) || (tag.tagNumber == 0x04))) {
+ // sometimes BitString and OctetString are used to encapsulate ASN.1
+ try {
+ if (tag.tagNumber == 0x03) {
+ if (stream.get() != 0) {
+ throw new Error("BIT STRINGs with unused bits cannot encapsulate.");
+ }
+ }
+ sub = getSub();
+ for (var i = 0; i < sub.length; ++i) {
+ if (sub[i].tag.isEOC()) {
+ throw new Error("EOC is not supposed to be actual content.");
+ }
+ }
+ }
+ catch (e) {
+ // but silently ignore when they don't
+ sub = null;
+ }
+ }
+ if (sub === null) {
+ if (len === null) {
+ throw new Error("We can't skip over an invalid tag with undefined length at offset " + start);
+ }
+ stream.pos = start + Math.abs(len);
+ }
+ return new ASN1(streamStart, header, len, tag, sub);
+ };
+ return ASN1;
+ }());
+ var ASN1Tag = /** @class */ (function () {
+ function ASN1Tag (stream) {
+ var buf = stream.get();
+ this.tagClass = buf >> 6;
+ this.tagConstructed = ((buf & 0x20) !== 0);
+ this.tagNumber = buf & 0x1F;
+ if (this.tagNumber == 0x1F) { // long tag
+ var n = new Int10();
+ do {
+ buf = stream.get();
+ n.mulAdd(128, buf & 0x7F);
+ } while (buf & 0x80);
+ this.tagNumber = n.simplify();
+ }
+ }
+ ASN1Tag.prototype.isUniversal = function () {
+ return this.tagClass === 0x00;
+ };
+ ASN1Tag.prototype.isEOC = function () {
+ return this.tagClass === 0x00 && this.tagNumber === 0x00;
+ };
+ return ASN1Tag;
+ }());
+
+ // Copyright (c) 2005 Tom Wu
+ // Bits per digit
+ var dbits;
+ // JavaScript engine analysis
+ var canary = 0xdeadbeefcafe;
+ var j_lm = ((canary & 0xffffff) == 0xefcafe);
+ //#region
+ var lowprimes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997];
+ var lplim = (1 << 26) / lowprimes[lowprimes.length - 1];
+ //#endregion
+ // (public) Constructor
+ var BigInteger = /** @class */ (function () {
+ function BigInteger (a, b, c) {
+ if (a != null) {
+ if ("number" == typeof a) {
+ this.fromNumber(a, b, c);
+ }
+ else if (b == null && "string" != typeof a) {
+ this.fromString(a, 256);
+ }
+ else {
+ this.fromString(a, b);
+ }
+ }
+ }
+ //#region PUBLIC
+ // BigInteger.prototype.toString = bnToString;
+ // (public) return string representation in given radix
+ BigInteger.prototype.toString = function (b) {
+ if (this.s < 0) {
+ return "-" + this.negate().toString(b);
+ }
+ var k;
+ if (b == 16) {
+ k = 4;
+ }
+ else if (b == 8) {
+ k = 3;
+ }
+ else if (b == 2) {
+ k = 1;
+ }
+ else if (b == 32) {
+ k = 5;
+ }
+ else if (b == 4) {
+ k = 2;
+ }
+ else {
+ return this.toRadix(b);
+ }
+ var km = (1 << k) - 1;
+ var d;
+ var m = false;
+ var r = "";
+ var i = this.t;
+ var p = this.DB - (i * this.DB) % k;
+ if (i-- > 0) {
+ if (p < this.DB && (d = this[i] >> p) > 0) {
+ m = true;
+ r = int2char(d);
+ }
+ while (i >= 0) {
+ if (p < k) {
+ d = (this[i] & ((1 << p) - 1)) << (k - p);
+ d |= this[--i] >> (p += this.DB - k);
+ }
+ else {
+ d = (this[i] >> (p -= k)) & km;
+ if (p <= 0) {
+ p += this.DB;
+ --i;
+ }
+ }
+ if (d > 0) {
+ m = true;
+ }
+ if (m) {
+ r += int2char(d);
+ }
+ }
+ }
+ return m ? r : "0";
+ };
+ // BigInteger.prototype.negate = bnNegate;
+ // (public) -this
+ BigInteger.prototype.negate = function () {
+ var r = nbi();
+ BigInteger.ZERO.subTo(this, r);
+ return r;
+ };
+ // BigInteger.prototype.abs = bnAbs;
+ // (public) |this|
+ BigInteger.prototype.abs = function () {
+ return (this.s < 0) ? this.negate() : this;
+ };
+ // BigInteger.prototype.compareTo = bnCompareTo;
+ // (public) return + if this > a, - if this < a, 0 if equal
+ BigInteger.prototype.compareTo = function (a) {
+ var r = this.s - a.s;
+ if (r != 0) {
+ return r;
+ }
+ var i = this.t;
+ r = i - a.t;
+ if (r != 0) {
+ return (this.s < 0) ? -r : r;
+ }
+ while (--i >= 0) {
+ if ((r = this[i] - a[i]) != 0) {
+ return r;
+ }
+ }
+ return 0;
+ };
+ // BigInteger.prototype.bitLength = bnBitLength;
+ // (public) return the number of bits in "this"
+ BigInteger.prototype.bitLength = function () {
+ if (this.t <= 0) {
+ return 0;
+ }
+ return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM));
+ };
+ // BigInteger.prototype.mod = bnMod;
+ // (public) this mod a
+ BigInteger.prototype.mod = function (a) {
+ var r = nbi();
+ this.abs().divRemTo(a, null, r);
+ if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) {
+ a.subTo(r, r);
+ }
+ return r;
+ };
+ // BigInteger.prototype.modPowInt = bnModPowInt;
+ // (public) this^e % m, 0 <= e < 2^32
+ BigInteger.prototype.modPowInt = function (e, m) {
+ var z;
+ if (e < 256 || m.isEven()) {
+ z = new Classic(m);
+ }
+ else {
+ z = new Montgomery(m);
+ }
+ return this.exp(e, z);
+ };
+ // BigInteger.prototype.clone = bnClone;
+ // (public)
+ BigInteger.prototype.clone = function () {
+ var r = nbi();
+ this.copyTo(r);
+ return r;
+ };
+ // BigInteger.prototype.intValue = bnIntValue;
+ // (public) return value as integer
+ BigInteger.prototype.intValue = function () {
+ if (this.s < 0) {
+ if (this.t == 1) {
+ return this[0] - this.DV;
+ }
+ else if (this.t == 0) {
+ return -1;
+ }
+ }
+ else if (this.t == 1) {
+ return this[0];
+ }
+ else if (this.t == 0) {
+ return 0;
+ }
+ // assumes 16 < DB < 32
+ return ((this[1] & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0];
+ };
+ // BigInteger.prototype.byteValue = bnByteValue;
+ // (public) return value as byte
+ BigInteger.prototype.byteValue = function () {
+ return (this.t == 0) ? this.s : (this[0] << 24) >> 24;
+ };
+ // BigInteger.prototype.shortValue = bnShortValue;
+ // (public) return value as short (assumes DB>=16)
+ BigInteger.prototype.shortValue = function () {
+ return (this.t == 0) ? this.s : (this[0] << 16) >> 16;
+ };
+ // BigInteger.prototype.signum = bnSigNum;
+ // (public) 0 if this == 0, 1 if this > 0
+ BigInteger.prototype.signum = function () {
+ if (this.s < 0) {
+ return -1;
+ }
+ else if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) {
+ return 0;
+ }
+ else {
+ return 1;
+ }
+ };
+ // BigInteger.prototype.toByteArray = bnToByteArray;
+ // (public) convert to bigendian byte array
+ BigInteger.prototype.toByteArray = function () {
+ var i = this.t;
+ var r = [];
+ r[0] = this.s;
+ var p = this.DB - (i * this.DB) % 8;
+ var d;
+ var k = 0;
+ if (i-- > 0) {
+ if (p < this.DB && (d = this[i] >> p) != (this.s & this.DM) >> p) {
+ r[k++] = d | (this.s << (this.DB - p));
+ }
+ while (i >= 0) {
+ if (p < 8) {
+ d = (this[i] & ((1 << p) - 1)) << (8 - p);
+ d |= this[--i] >> (p += this.DB - 8);
+ }
+ else {
+ d = (this[i] >> (p -= 8)) & 0xff;
+ if (p <= 0) {
+ p += this.DB;
+ --i;
+ }
+ }
+ if ((d & 0x80) != 0) {
+ d |= -256;
+ }
+ if (k == 0 && (this.s & 0x80) != (d & 0x80)) {
+ ++k;
+ }
+ if (k > 0 || d != this.s) {
+ r[k++] = d;
+ }
+ }
+ }
+ return r;
+ };
+ // BigInteger.prototype.equals = bnEquals;
+ BigInteger.prototype.equals = function (a) {
+ return (this.compareTo(a) == 0);
+ };
+ // BigInteger.prototype.min = bnMin;
+ BigInteger.prototype.min = function (a) {
+ return (this.compareTo(a) < 0) ? this : a;
+ };
+ // BigInteger.prototype.max = bnMax;
+ BigInteger.prototype.max = function (a) {
+ return (this.compareTo(a) > 0) ? this : a;
+ };
+ // BigInteger.prototype.and = bnAnd;
+ BigInteger.prototype.and = function (a) {
+ var r = nbi();
+ this.bitwiseTo(a, op_and, r);
+ return r;
+ };
+ // BigInteger.prototype.or = bnOr;
+ BigInteger.prototype.or = function (a) {
+ var r = nbi();
+ this.bitwiseTo(a, op_or, r);
+ return r;
+ };
+ // BigInteger.prototype.xor = bnXor;
+ BigInteger.prototype.xor = function (a) {
+ var r = nbi();
+ this.bitwiseTo(a, op_xor, r);
+ return r;
+ };
+ // BigInteger.prototype.andNot = bnAndNot;
+ BigInteger.prototype.andNot = function (a) {
+ var r = nbi();
+ this.bitwiseTo(a, op_andnot, r);
+ return r;
+ };
+ // BigInteger.prototype.not = bnNot;
+ // (public) ~this
+ BigInteger.prototype.not = function () {
+ var r = nbi();
+ for (var i = 0; i < this.t; ++i) {
+ r[i] = this.DM & ~this[i];
+ }
+ r.t = this.t;
+ r.s = ~this.s;
+ return r;
+ };
+ // BigInteger.prototype.shiftLeft = bnShiftLeft;
+ // (public) this << n
+ BigInteger.prototype.shiftLeft = function (n) {
+ var r = nbi();
+ if (n < 0) {
+ this.rShiftTo(-n, r);
+ }
+ else {
+ this.lShiftTo(n, r);
+ }
+ return r;
+ };
+ // BigInteger.prototype.shiftRight = bnShiftRight;
+ // (public) this >> n
+ BigInteger.prototype.shiftRight = function (n) {
+ var r = nbi();
+ if (n < 0) {
+ this.lShiftTo(-n, r);
+ }
+ else {
+ this.rShiftTo(n, r);
+ }
+ return r;
+ };
+ // BigInteger.prototype.getLowestSetBit = bnGetLowestSetBit;
+ // (public) returns index of lowest 1-bit (or -1 if none)
+ BigInteger.prototype.getLowestSetBit = function () {
+ for (var i = 0; i < this.t; ++i) {
+ if (this[i] != 0) {
+ return i * this.DB + lbit(this[i]);
+ }
+ }
+ if (this.s < 0) {
+ return this.t * this.DB;
+ }
+ return -1;
+ };
+ // BigInteger.prototype.bitCount = bnBitCount;
+ // (public) return number of set bits
+ BigInteger.prototype.bitCount = function () {
+ var r = 0;
+ var x = this.s & this.DM;
+ for (var i = 0; i < this.t; ++i) {
+ r += cbit(this[i] ^ x);
+ }
+ return r;
+ };
+ // BigInteger.prototype.testBit = bnTestBit;
+ // (public) true iff nth bit is set
+ BigInteger.prototype.testBit = function (n) {
+ var j = Math.floor(n / this.DB);
+ if (j >= this.t) {
+ return (this.s != 0);
+ }
+ return ((this[j] & (1 << (n % this.DB))) != 0);
+ };
+ // BigInteger.prototype.setBit = bnSetBit;
+ // (public) this | (1< 1) {
+ var g2 = nbi();
+ z.sqrTo(g[1], g2);
+ while (n <= km) {
+ g[n] = nbi();
+ z.mulTo(g2, g[n - 2], g[n]);
+ n += 2;
+ }
+ }
+ var j = e.t - 1;
+ var w;
+ var is1 = true;
+ var r2 = nbi();
+ var t;
+ i = nbits(e[j]) - 1;
+ while (j >= 0) {
+ if (i >= k1) {
+ w = (e[j] >> (i - k1)) & km;
+ }
+ else {
+ w = (e[j] & ((1 << (i + 1)) - 1)) << (k1 - i);
+ if (j > 0) {
+ w |= e[j - 1] >> (this.DB + i - k1);
+ }
+ }
+ n = k;
+ while ((w & 1) == 0) {
+ w >>= 1;
+ --n;
+ }
+ if ((i -= n) < 0) {
+ i += this.DB;
+ --j;
+ }
+ if (is1) { // ret == 1, don't bother squaring or multiplying it
+ g[w].copyTo(r);
+ is1 = false;
+ }
+ else {
+ while (n > 1) {
+ z.sqrTo(r, r2);
+ z.sqrTo(r2, r);
+ n -= 2;
+ }
+ if (n > 0) {
+ z.sqrTo(r, r2);
+ }
+ else {
+ t = r;
+ r = r2;
+ r2 = t;
+ }
+ z.mulTo(r2, g[w], r);
+ }
+ while (j >= 0 && (e[j] & (1 << i)) == 0) {
+ z.sqrTo(r, r2);
+ t = r;
+ r = r2;
+ r2 = t;
+ if (--i < 0) {
+ i = this.DB - 1;
+ --j;
+ }
+ }
+ }
+ return z.revert(r);
+ };
+ // BigInteger.prototype.modInverse = bnModInverse;
+ // (public) 1/this % m (HAC 14.61)
+ BigInteger.prototype.modInverse = function (m) {
+ var ac = m.isEven();
+ if ((this.isEven() && ac) || m.signum() == 0) {
+ return BigInteger.ZERO;
+ }
+ var u = m.clone();
+ var v = this.clone();
+ var a = nbv(1);
+ var b = nbv(0);
+ var c = nbv(0);
+ var d = nbv(1);
+ while (u.signum() != 0) {
+ while (u.isEven()) {
+ u.rShiftTo(1, u);
+ if (ac) {
+ if (!a.isEven() || !b.isEven()) {
+ a.addTo(this, a);
+ b.subTo(m, b);
+ }
+ a.rShiftTo(1, a);
+ }
+ else if (!b.isEven()) {
+ b.subTo(m, b);
+ }
+ b.rShiftTo(1, b);
+ }
+ while (v.isEven()) {
+ v.rShiftTo(1, v);
+ if (ac) {
+ if (!c.isEven() || !d.isEven()) {
+ c.addTo(this, c);
+ d.subTo(m, d);
+ }
+ c.rShiftTo(1, c);
+ }
+ else if (!d.isEven()) {
+ d.subTo(m, d);
+ }
+ d.rShiftTo(1, d);
+ }
+ if (u.compareTo(v) >= 0) {
+ u.subTo(v, u);
+ if (ac) {
+ a.subTo(c, a);
+ }
+ b.subTo(d, b);
+ }
+ else {
+ v.subTo(u, v);
+ if (ac) {
+ c.subTo(a, c);
+ }
+ d.subTo(b, d);
+ }
+ }
+ if (v.compareTo(BigInteger.ONE) != 0) {
+ return BigInteger.ZERO;
+ }
+ if (d.compareTo(m) >= 0) {
+ return d.subtract(m);
+ }
+ if (d.signum() < 0) {
+ d.addTo(m, d);
+ }
+ else {
+ return d;
+ }
+ if (d.signum() < 0) {
+ return d.add(m);
+ }
+ else {
+ return d;
+ }
+ };
+ // BigInteger.prototype.pow = bnPow;
+ // (public) this^e
+ BigInteger.prototype.pow = function (e) {
+ return this.exp(e, new NullExp());
+ };
+ // BigInteger.prototype.gcd = bnGCD;
+ // (public) gcd(this,a) (HAC 14.54)
+ BigInteger.prototype.gcd = function (a) {
+ var x = (this.s < 0) ? this.negate() : this.clone();
+ var y = (a.s < 0) ? a.negate() : a.clone();
+ if (x.compareTo(y) < 0) {
+ var t = x;
+ x = y;
+ y = t;
+ }
+ var i = x.getLowestSetBit();
+ var g = y.getLowestSetBit();
+ if (g < 0) {
+ return x;
+ }
+ if (i < g) {
+ g = i;
+ }
+ if (g > 0) {
+ x.rShiftTo(g, x);
+ y.rShiftTo(g, y);
+ }
+ while (x.signum() > 0) {
+ if ((i = x.getLowestSetBit()) > 0) {
+ x.rShiftTo(i, x);
+ }
+ if ((i = y.getLowestSetBit()) > 0) {
+ y.rShiftTo(i, y);
+ }
+ if (x.compareTo(y) >= 0) {
+ x.subTo(y, x);
+ x.rShiftTo(1, x);
+ }
+ else {
+ y.subTo(x, y);
+ y.rShiftTo(1, y);
+ }
+ }
+ if (g > 0) {
+ y.lShiftTo(g, y);
+ }
+ return y;
+ };
+ // BigInteger.prototype.isProbablePrime = bnIsProbablePrime;
+ // (public) test primality with certainty >= 1-.5^t
+ BigInteger.prototype.isProbablePrime = function (t) {
+ var i;
+ var x = this.abs();
+ if (x.t == 1 && x[0] <= lowprimes[lowprimes.length - 1]) {
+ for (i = 0; i < lowprimes.length; ++i) {
+ if (x[0] == lowprimes[i]) {
+ return true;
+ }
+ }
+ return false;
+ }
+ if (x.isEven()) {
+ return false;
+ }
+ i = 1;
+ while (i < lowprimes.length) {
+ var m = lowprimes[i];
+ var j = i + 1;
+ while (j < lowprimes.length && m < lplim) {
+ m *= lowprimes[j++];
+ }
+ m = x.modInt(m);
+ while (i < j) {
+ if (m % lowprimes[i++] == 0) {
+ return false;
+ }
+ }
+ }
+ return x.millerRabin(t);
+ };
+ //#endregion PUBLIC
+ //#region PROTECTED
+ // BigInteger.prototype.copyTo = bnpCopyTo;
+ // (protected) copy this to r
+ BigInteger.prototype.copyTo = function (r) {
+ for (var i = this.t - 1; i >= 0; --i) {
+ r[i] = this[i];
+ }
+ r.t = this.t;
+ r.s = this.s;
+ };
+ // BigInteger.prototype.fromInt = bnpFromInt;
+ // (protected) set from integer value x, -DV <= x < DV
+ BigInteger.prototype.fromInt = function (x) {
+ this.t = 1;
+ this.s = (x < 0) ? -1 : 0;
+ if (x > 0) {
+ this[0] = x;
+ }
+ else if (x < -1) {
+ this[0] = x + this.DV;
+ }
+ else {
+ this.t = 0;
+ }
+ };
+ // BigInteger.prototype.fromString = bnpFromString;
+ // (protected) set from string and radix
+ BigInteger.prototype.fromString = function (s, b) {
+ var k;
+ if (b == 16) {
+ k = 4;
+ }
+ else if (b == 8) {
+ k = 3;
+ }
+ else if (b == 256) {
+ k = 8;
+ /* byte array */
+ }
+ else if (b == 2) {
+ k = 1;
+ }
+ else if (b == 32) {
+ k = 5;
+ }
+ else if (b == 4) {
+ k = 2;
+ }
+ else {
+ this.fromRadix(s, b);
+ return;
+ }
+ this.t = 0;
+ this.s = 0;
+ var i = s.length;
+ var mi = false;
+ var sh = 0;
+ while (--i >= 0) {
+ var x = (k == 8) ? (+s[i]) & 0xff : intAt(s, i);
+ if (x < 0) {
+ if (s.charAt(i) == "-") {
+ mi = true;
+ }
+ continue;
+ }
+ mi = false;
+ if (sh == 0) {
+ this[this.t++] = x;
+ }
+ else if (sh + k > this.DB) {
+ this[this.t - 1] |= (x & ((1 << (this.DB - sh)) - 1)) << sh;
+ this[this.t++] = (x >> (this.DB - sh));
+ }
+ else {
+ this[this.t - 1] |= x << sh;
+ }
+ sh += k;
+ if (sh >= this.DB) {
+ sh -= this.DB;
+ }
+ }
+ if (k == 8 && ((+s[0]) & 0x80) != 0) {
+ this.s = -1;
+ if (sh > 0) {
+ this[this.t - 1] |= ((1 << (this.DB - sh)) - 1) << sh;
+ }
+ }
+ this.clamp();
+ if (mi) {
+ BigInteger.ZERO.subTo(this, this);
+ }
+ };
+ // BigInteger.prototype.clamp = bnpClamp;
+ // (protected) clamp off excess high words
+ BigInteger.prototype.clamp = function () {
+ var c = this.s & this.DM;
+ while (this.t > 0 && this[this.t - 1] == c) {
+ --this.t;
+ }
+ };
+ // BigInteger.prototype.dlShiftTo = bnpDLShiftTo;
+ // (protected) r = this << n*DB
+ BigInteger.prototype.dlShiftTo = function (n, r) {
+ var i;
+ for (i = this.t - 1; i >= 0; --i) {
+ r[i + n] = this[i];
+ }
+ for (i = n - 1; i >= 0; --i) {
+ r[i] = 0;
+ }
+ r.t = this.t + n;
+ r.s = this.s;
+ };
+ // BigInteger.prototype.drShiftTo = bnpDRShiftTo;
+ // (protected) r = this >> n*DB
+ BigInteger.prototype.drShiftTo = function (n, r) {
+ for (var i = n; i < this.t; ++i) {
+ r[i - n] = this[i];
+ }
+ r.t = Math.max(this.t - n, 0);
+ r.s = this.s;
+ };
+ // BigInteger.prototype.lShiftTo = bnpLShiftTo;
+ // (protected) r = this << n
+ BigInteger.prototype.lShiftTo = function (n, r) {
+ var bs = n % this.DB;
+ var cbs = this.DB - bs;
+ var bm = (1 << cbs) - 1;
+ var ds = Math.floor(n / this.DB);
+ var c = (this.s << bs) & this.DM;
+ for (var i = this.t - 1; i >= 0; --i) {
+ r[i + ds + 1] = (this[i] >> cbs) | c;
+ c = (this[i] & bm) << bs;
+ }
+ for (var i = ds - 1; i >= 0; --i) {
+ r[i] = 0;
+ }
+ r[ds] = c;
+ r.t = this.t + ds + 1;
+ r.s = this.s;
+ r.clamp();
+ };
+ // BigInteger.prototype.rShiftTo = bnpRShiftTo;
+ // (protected) r = this >> n
+ BigInteger.prototype.rShiftTo = function (n, r) {
+ r.s = this.s;
+ var ds = Math.floor(n / this.DB);
+ if (ds >= this.t) {
+ r.t = 0;
+ return;
+ }
+ var bs = n % this.DB;
+ var cbs = this.DB - bs;
+ var bm = (1 << bs) - 1;
+ r[0] = this[ds] >> bs;
+ for (var i = ds + 1; i < this.t; ++i) {
+ r[i - ds - 1] |= (this[i] & bm) << cbs;
+ r[i - ds] = this[i] >> bs;
+ }
+ if (bs > 0) {
+ r[this.t - ds - 1] |= (this.s & bm) << cbs;
+ }
+ r.t = this.t - ds;
+ r.clamp();
+ };
+ // BigInteger.prototype.subTo = bnpSubTo;
+ // (protected) r = this - a
+ BigInteger.prototype.subTo = function (a, r) {
+ var i = 0;
+ var c = 0;
+ var m = Math.min(a.t, this.t);
+ while (i < m) {
+ c += this[i] - a[i];
+ r[i++] = c & this.DM;
+ c >>= this.DB;
+ }
+ if (a.t < this.t) {
+ c -= a.s;
+ while (i < this.t) {
+ c += this[i];
+ r[i++] = c & this.DM;
+ c >>= this.DB;
+ }
+ c += this.s;
+ }
+ else {
+ c += this.s;
+ while (i < a.t) {
+ c -= a[i];
+ r[i++] = c & this.DM;
+ c >>= this.DB;
+ }
+ c -= a.s;
+ }
+ r.s = (c < 0) ? -1 : 0;
+ if (c < -1) {
+ r[i++] = this.DV + c;
+ }
+ else if (c > 0) {
+ r[i++] = c;
+ }
+ r.t = i;
+ r.clamp();
+ };
+ // BigInteger.prototype.multiplyTo = bnpMultiplyTo;
+ // (protected) r = this * a, r != this,a (HAC 14.12)
+ // "this" should be the larger one if appropriate.
+ BigInteger.prototype.multiplyTo = function (a, r) {
+ var x = this.abs();
+ var y = a.abs();
+ var i = x.t;
+ r.t = i + y.t;
+ while (--i >= 0) {
+ r[i] = 0;
+ }
+ for (i = 0; i < y.t; ++i) {
+ r[i + x.t] = x.am(0, y[i], r, i, 0, x.t);
+ }
+ r.s = 0;
+ r.clamp();
+ if (this.s != a.s) {
+ BigInteger.ZERO.subTo(r, r);
+ }
+ };
+ // BigInteger.prototype.squareTo = bnpSquareTo;
+ // (protected) r = this^2, r != this (HAC 14.16)
+ BigInteger.prototype.squareTo = function (r) {
+ var x = this.abs();
+ var i = r.t = 2 * x.t;
+ while (--i >= 0) {
+ r[i] = 0;
+ }
+ for (i = 0; i < x.t - 1; ++i) {
+ var c = x.am(i, x[i], r, 2 * i, 0, 1);
+ if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) {
+ r[i + x.t] -= x.DV;
+ r[i + x.t + 1] = 1;
+ }
+ }
+ if (r.t > 0) {
+ r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1);
+ }
+ r.s = 0;
+ r.clamp();
+ };
+ // BigInteger.prototype.divRemTo = bnpDivRemTo;
+ // (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)
+ // r != q, this != m. q or r may be null.
+ BigInteger.prototype.divRemTo = function (m, q, r) {
+ var pm = m.abs();
+ if (pm.t <= 0) {
+ return;
+ }
+ var pt = this.abs();
+ if (pt.t < pm.t) {
+ if (q != null) {
+ q.fromInt(0);
+ }
+ if (r != null) {
+ this.copyTo(r);
+ }
+ return;
+ }
+ if (r == null) {
+ r = nbi();
+ }
+ var y = nbi();
+ var ts = this.s;
+ var ms = m.s;
+ var nsh = this.DB - nbits(pm[pm.t - 1]); // normalize modulus
+ if (nsh > 0) {
+ pm.lShiftTo(nsh, y);
+ pt.lShiftTo(nsh, r);
+ }
+ else {
+ pm.copyTo(y);
+ pt.copyTo(r);
+ }
+ var ys = y.t;
+ var y0 = y[ys - 1];
+ if (y0 == 0) {
+ return;
+ }
+ var yt = y0 * (1 << this.F1) + ((ys > 1) ? y[ys - 2] >> this.F2 : 0);
+ var d1 = this.FV / yt;
+ var d2 = (1 << this.F1) / yt;
+ var e = 1 << this.F2;
+ var i = r.t;
+ var j = i - ys;
+ var t = (q == null) ? nbi() : q;
+ y.dlShiftTo(j, t);
+ if (r.compareTo(t) >= 0) {
+ r[r.t++] = 1;
+ r.subTo(t, r);
+ }
+ BigInteger.ONE.dlShiftTo(ys, t);
+ t.subTo(y, y); // "negative" y so we can replace sub with am later
+ while (y.t < ys) {
+ y[y.t++] = 0;
+ }
+ while (--j >= 0) {
+ // Estimate quotient digit
+ var qd = (r[--i] == y0) ? this.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2);
+ if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) { // Try it out
+ y.dlShiftTo(j, t);
+ r.subTo(t, r);
+ while (r[i] < --qd) {
+ r.subTo(t, r);
+ }
+ }
+ }
+ if (q != null) {
+ r.drShiftTo(ys, q);
+ if (ts != ms) {
+ BigInteger.ZERO.subTo(q, q);
+ }
+ }
+ r.t = ys;
+ r.clamp();
+ if (nsh > 0) {
+ r.rShiftTo(nsh, r);
+ } // Denormalize remainder
+ if (ts < 0) {
+ BigInteger.ZERO.subTo(r, r);
+ }
+ };
+ // BigInteger.prototype.invDigit = bnpInvDigit;
+ // (protected) return "-1/this % 2^DB"; useful for Mont. reduction
+ // justification:
+ // xy == 1 (mod m)
+ // xy = 1+km
+ // xy(2-xy) = (1+km)(1-km)
+ // x[y(2-xy)] = 1-k^2m^2
+ // x[y(2-xy)] == 1 (mod m^2)
+ // if y is 1/x mod m, then y(2-xy) is 1/x mod m^2
+ // should reduce x and y(2-xy) by m^2 at each step to keep size bounded.
+ // JS multiply "overflows" differently from C/C++, so care is needed here.
+ BigInteger.prototype.invDigit = function () {
+ if (this.t < 1) {
+ return 0;
+ }
+ var x = this[0];
+ if ((x & 1) == 0) {
+ return 0;
+ }
+ var y = x & 3; // y == 1/x mod 2^2
+ y = (y * (2 - (x & 0xf) * y)) & 0xf; // y == 1/x mod 2^4
+ y = (y * (2 - (x & 0xff) * y)) & 0xff; // y == 1/x mod 2^8
+ y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff; // y == 1/x mod 2^16
+ // last step - calculate inverse mod DV directly;
+ // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints
+ y = (y * (2 - x * y % this.DV)) % this.DV; // y == 1/x mod 2^dbits
+ // we really want the negative inverse, and -DV < y < DV
+ return (y > 0) ? this.DV - y : -y;
+ };
+ // BigInteger.prototype.isEven = bnpIsEven;
+ // (protected) true iff this is even
+ BigInteger.prototype.isEven = function () {
+ return ((this.t > 0) ? (this[0] & 1) : this.s) == 0;
+ };
+ // BigInteger.prototype.exp = bnpExp;
+ // (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79)
+ BigInteger.prototype.exp = function (e, z) {
+ if (e > 0xffffffff || e < 1) {
+ return BigInteger.ONE;
+ }
+ var r = nbi();
+ var r2 = nbi();
+ var g = z.convert(this);
+ var i = nbits(e) - 1;
+ g.copyTo(r);
+ while (--i >= 0) {
+ z.sqrTo(r, r2);
+ if ((e & (1 << i)) > 0) {
+ z.mulTo(r2, g, r);
+ }
+ else {
+ var t = r;
+ r = r2;
+ r2 = t;
+ }
+ }
+ return z.revert(r);
+ };
+ // BigInteger.prototype.chunkSize = bnpChunkSize;
+ // (protected) return x s.t. r^x < DV
+ BigInteger.prototype.chunkSize = function (r) {
+ return Math.floor(Math.LN2 * this.DB / Math.log(r));
+ };
+ // BigInteger.prototype.toRadix = bnpToRadix;
+ // (protected) convert to radix string
+ BigInteger.prototype.toRadix = function (b) {
+ if (b == null) {
+ b = 10;
+ }
+ if (this.signum() == 0 || b < 2 || b > 36) {
+ return "0";
+ }
+ var cs = this.chunkSize(b);
+ var a = Math.pow(b, cs);
+ var d = nbv(a);
+ var y = nbi();
+ var z = nbi();
+ var r = "";
+ this.divRemTo(d, y, z);
+ while (y.signum() > 0) {
+ r = (a + z.intValue()).toString(b).substr(1) + r;
+ y.divRemTo(d, y, z);
+ }
+ return z.intValue().toString(b) + r;
+ };
+ // BigInteger.prototype.fromRadix = bnpFromRadix;
+ // (protected) convert from radix string
+ BigInteger.prototype.fromRadix = function (s, b) {
+ this.fromInt(0);
+ if (b == null) {
+ b = 10;
+ }
+ var cs = this.chunkSize(b);
+ var d = Math.pow(b, cs);
+ var mi = false;
+ var j = 0;
+ var w = 0;
+ for (var i = 0; i < s.length; ++i) {
+ var x = intAt(s, i);
+ if (x < 0) {
+ if (s.charAt(i) == "-" && this.signum() == 0) {
+ mi = true;
+ }
+ continue;
+ }
+ w = b * w + x;
+ if (++j >= cs) {
+ this.dMultiply(d);
+ this.dAddOffset(w, 0);
+ j = 0;
+ w = 0;
+ }
+ }
+ if (j > 0) {
+ this.dMultiply(Math.pow(b, j));
+ this.dAddOffset(w, 0);
+ }
+ if (mi) {
+ BigInteger.ZERO.subTo(this, this);
+ }
+ };
+ // BigInteger.prototype.fromNumber = bnpFromNumber;
+ // (protected) alternate constructor
+ BigInteger.prototype.fromNumber = function (a, b, c) {
+ if ("number" == typeof b) {
+ // new BigInteger(int,int,RNG)
+ if (a < 2) {
+ this.fromInt(1);
+ }
+ else {
+ this.fromNumber(a, c);
+ if (!this.testBit(a - 1)) {
+ // force MSB set
+ this.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), op_or, this);
+ }
+ if (this.isEven()) {
+ this.dAddOffset(1, 0);
+ } // force odd
+ while (!this.isProbablePrime(b)) {
+ this.dAddOffset(2, 0);
+ if (this.bitLength() > a) {
+ this.subTo(BigInteger.ONE.shiftLeft(a - 1), this);
+ }
+ }
+ }
+ }
+ else {
+ // new BigInteger(int,RNG)
+ var x = [];
+ var t = a & 7;
+ x.length = (a >> 3) + 1;
+ b.nextBytes(x);
+ if (t > 0) {
+ x[0] &= ((1 << t) - 1);
+ }
+ else {
+ x[0] = 0;
+ }
+ this.fromString(x, 256);
+ }
+ };
+ // BigInteger.prototype.bitwiseTo = bnpBitwiseTo;
+ // (protected) r = this op a (bitwise)
+ BigInteger.prototype.bitwiseTo = function (a, op, r) {
+ var i;
+ var f;
+ var m = Math.min(a.t, this.t);
+ for (i = 0; i < m; ++i) {
+ r[i] = op(this[i], a[i]);
+ }
+ if (a.t < this.t) {
+ f = a.s & this.DM;
+ for (i = m; i < this.t; ++i) {
+ r[i] = op(this[i], f);
+ }
+ r.t = this.t;
+ }
+ else {
+ f = this.s & this.DM;
+ for (i = m; i < a.t; ++i) {
+ r[i] = op(f, a[i]);
+ }
+ r.t = a.t;
+ }
+ r.s = op(this.s, a.s);
+ r.clamp();
+ };
+ // BigInteger.prototype.changeBit = bnpChangeBit;
+ // (protected) this op (1<>= this.DB;
+ }
+ if (a.t < this.t) {
+ c += a.s;
+ while (i < this.t) {
+ c += this[i];
+ r[i++] = c & this.DM;
+ c >>= this.DB;
+ }
+ c += this.s;
+ }
+ else {
+ c += this.s;
+ while (i < a.t) {
+ c += a[i];
+ r[i++] = c & this.DM;
+ c >>= this.DB;
+ }
+ c += a.s;
+ }
+ r.s = (c < 0) ? -1 : 0;
+ if (c > 0) {
+ r[i++] = c;
+ }
+ else if (c < -1) {
+ r[i++] = this.DV + c;
+ }
+ r.t = i;
+ r.clamp();
+ };
+ // BigInteger.prototype.dMultiply = bnpDMultiply;
+ // (protected) this *= n, this >= 0, 1 < n < DV
+ BigInteger.prototype.dMultiply = function (n) {
+ this[this.t] = this.am(0, n - 1, this, 0, 0, this.t);
+ ++this.t;
+ this.clamp();
+ };
+ // BigInteger.prototype.dAddOffset = bnpDAddOffset;
+ // (protected) this += n << w words, this >= 0
+ BigInteger.prototype.dAddOffset = function (n, w) {
+ if (n == 0) {
+ return;
+ }
+ while (this.t <= w) {
+ this[this.t++] = 0;
+ }
+ this[w] += n;
+ while (this[w] >= this.DV) {
+ this[w] -= this.DV;
+ if (++w >= this.t) {
+ this[this.t++] = 0;
+ }
+ ++this[w];
+ }
+ };
+ // BigInteger.prototype.multiplyLowerTo = bnpMultiplyLowerTo;
+ // (protected) r = lower n words of "this * a", a.t <= n
+ // "this" should be the larger one if appropriate.
+ BigInteger.prototype.multiplyLowerTo = function (a, n, r) {
+ var i = Math.min(this.t + a.t, n);
+ r.s = 0; // assumes a,this >= 0
+ r.t = i;
+ while (i > 0) {
+ r[--i] = 0;
+ }
+ for (var j = r.t - this.t; i < j; ++i) {
+ r[i + this.t] = this.am(0, a[i], r, i, 0, this.t);
+ }
+ for (var j = Math.min(a.t, n); i < j; ++i) {
+ this.am(0, a[i], r, i, 0, n - i);
+ }
+ r.clamp();
+ };
+ // BigInteger.prototype.multiplyUpperTo = bnpMultiplyUpperTo;
+ // (protected) r = "this * a" without lower n words, n > 0
+ // "this" should be the larger one if appropriate.
+ BigInteger.prototype.multiplyUpperTo = function (a, n, r) {
+ --n;
+ var i = r.t = this.t + a.t - n;
+ r.s = 0; // assumes a,this >= 0
+ while (--i >= 0) {
+ r[i] = 0;
+ }
+ for (i = Math.max(n - this.t, 0); i < a.t; ++i) {
+ r[this.t + i - n] = this.am(n - i, a[i], r, 0, 0, this.t + i - n);
+ }
+ r.clamp();
+ r.drShiftTo(1, r);
+ };
+ // BigInteger.prototype.modInt = bnpModInt;
+ // (protected) this % n, n < 2^26
+ BigInteger.prototype.modInt = function (n) {
+ if (n <= 0) {
+ return 0;
+ }
+ var d = this.DV % n;
+ var r = (this.s < 0) ? n - 1 : 0;
+ if (this.t > 0) {
+ if (d == 0) {
+ r = this[0] % n;
+ }
+ else {
+ for (var i = this.t - 1; i >= 0; --i) {
+ r = (d * r + this[i]) % n;
+ }
+ }
+ }
+ return r;
+ };
+ // BigInteger.prototype.millerRabin = bnpMillerRabin;
+ // (protected) true if probably prime (HAC 4.24, Miller-Rabin)
+ BigInteger.prototype.millerRabin = function (t) {
+ var n1 = this.subtract(BigInteger.ONE);
+ var k = n1.getLowestSetBit();
+ if (k <= 0) {
+ return false;
+ }
+ var r = n1.shiftRight(k);
+ t = (t + 1) >> 1;
+ if (t > lowprimes.length) {
+ t = lowprimes.length;
+ }
+ var a = nbi();
+ for (var i = 0; i < t; ++i) {
+ // Pick bases at random, instead of starting at 2
+ a.fromInt(lowprimes[Math.floor(Math.random() * lowprimes.length)]);
+ var y = a.modPow(r, this);
+ if (y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {
+ var j = 1;
+ while (j++ < k && y.compareTo(n1) != 0) {
+ y = y.modPowInt(2, this);
+ if (y.compareTo(BigInteger.ONE) == 0) {
+ return false;
+ }
+ }
+ if (y.compareTo(n1) != 0) {
+ return false;
+ }
+ }
+ }
+ return true;
+ };
+ // BigInteger.prototype.square = bnSquare;
+ // (public) this^2
+ BigInteger.prototype.square = function () {
+ var r = nbi();
+ this.squareTo(r);
+ return r;
+ };
+ //#region ASYNC
+ // Public API method
+ BigInteger.prototype.gcda = function (a, callback) {
+ var x = (this.s < 0) ? this.negate() : this.clone();
+ var y = (a.s < 0) ? a.negate() : a.clone();
+ if (x.compareTo(y) < 0) {
+ var t = x;
+ x = y;
+ y = t;
+ }
+ var i = x.getLowestSetBit();
+ var g = y.getLowestSetBit();
+ if (g < 0) {
+ callback(x);
+ return;
+ }
+ if (i < g) {
+ g = i;
+ }
+ if (g > 0) {
+ x.rShiftTo(g, x);
+ y.rShiftTo(g, y);
+ }
+ // Workhorse of the algorithm, gets called 200 - 800 times per 512 bit keygen.
+ var gcda1 = function () {
+ if ((i = x.getLowestSetBit()) > 0) {
+ x.rShiftTo(i, x);
+ }
+ if ((i = y.getLowestSetBit()) > 0) {
+ y.rShiftTo(i, y);
+ }
+ if (x.compareTo(y) >= 0) {
+ x.subTo(y, x);
+ x.rShiftTo(1, x);
+ }
+ else {
+ y.subTo(x, y);
+ y.rShiftTo(1, y);
+ }
+ if (!(x.signum() > 0)) {
+ if (g > 0) {
+ y.lShiftTo(g, y);
+ }
+ setTimeout(function () { callback(y); }, 0); // escape
+ }
+ else {
+ setTimeout(gcda1, 0);
+ }
+ };
+ setTimeout(gcda1, 10);
+ };
+ // (protected) alternate constructor
+ BigInteger.prototype.fromNumberAsync = function (a, b, c, callback) {
+ if ("number" == typeof b) {
+ if (a < 2) {
+ this.fromInt(1);
+ }
+ else {
+ this.fromNumber(a, c);
+ if (!this.testBit(a - 1)) {
+ this.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), op_or, this);
+ }
+ if (this.isEven()) {
+ this.dAddOffset(1, 0);
+ }
+ var bnp_1 = this;
+ var bnpfn1_1 = function () {
+ bnp_1.dAddOffset(2, 0);
+ if (bnp_1.bitLength() > a) {
+ bnp_1.subTo(BigInteger.ONE.shiftLeft(a - 1), bnp_1);
+ }
+ if (bnp_1.isProbablePrime(b)) {
+ setTimeout(function () { callback(); }, 0); // escape
+ }
+ else {
+ setTimeout(bnpfn1_1, 0);
+ }
+ };
+ setTimeout(bnpfn1_1, 0);
+ }
+ }
+ else {
+ var x = [];
+ var t = a & 7;
+ x.length = (a >> 3) + 1;
+ b.nextBytes(x);
+ if (t > 0) {
+ x[0] &= ((1 << t) - 1);
+ }
+ else {
+ x[0] = 0;
+ }
+ this.fromString(x, 256);
+ }
+ };
+ return BigInteger;
+ }());
+ //#region REDUCERS
+ //#region NullExp
+ var NullExp = /** @class */ (function () {
+ function NullExp () {
+ }
+ // NullExp.prototype.convert = nNop;
+ NullExp.prototype.convert = function (x) {
+ return x;
+ };
+ // NullExp.prototype.revert = nNop;
+ NullExp.prototype.revert = function (x) {
+ return x;
+ };
+ // NullExp.prototype.mulTo = nMulTo;
+ NullExp.prototype.mulTo = function (x, y, r) {
+ x.multiplyTo(y, r);
+ };
+ // NullExp.prototype.sqrTo = nSqrTo;
+ NullExp.prototype.sqrTo = function (x, r) {
+ x.squareTo(r);
+ };
+ return NullExp;
+ }());
+ // Modular reduction using "classic" algorithm
+ var Classic = /** @class */ (function () {
+ function Classic (m) {
+ this.m = m;
+ }
+ // Classic.prototype.convert = cConvert;
+ Classic.prototype.convert = function (x) {
+ if (x.s < 0 || x.compareTo(this.m) >= 0) {
+ return x.mod(this.m);
+ }
+ else {
+ return x;
+ }
+ };
+ // Classic.prototype.revert = cRevert;
+ Classic.prototype.revert = function (x) {
+ return x;
+ };
+ // Classic.prototype.reduce = cReduce;
+ Classic.prototype.reduce = function (x) {
+ x.divRemTo(this.m, null, x);
+ };
+ // Classic.prototype.mulTo = cMulTo;
+ Classic.prototype.mulTo = function (x, y, r) {
+ x.multiplyTo(y, r);
+ this.reduce(r);
+ };
+ // Classic.prototype.sqrTo = cSqrTo;
+ Classic.prototype.sqrTo = function (x, r) {
+ x.squareTo(r);
+ this.reduce(r);
+ };
+ return Classic;
+ }());
+ //#endregion
+ //#region Montgomery
+ // Montgomery reduction
+ var Montgomery = /** @class */ (function () {
+ function Montgomery (m) {
+ this.m = m;
+ this.mp = m.invDigit();
+ this.mpl = this.mp & 0x7fff;
+ this.mph = this.mp >> 15;
+ this.um = (1 << (m.DB - 15)) - 1;
+ this.mt2 = 2 * m.t;
+ }
+ // Montgomery.prototype.convert = montConvert;
+ // xR mod m
+ Montgomery.prototype.convert = function (x) {
+ var r = nbi();
+ x.abs().dlShiftTo(this.m.t, r);
+ r.divRemTo(this.m, null, r);
+ if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) {
+ this.m.subTo(r, r);
+ }
+ return r;
+ };
+ // Montgomery.prototype.revert = montRevert;
+ // x/R mod m
+ Montgomery.prototype.revert = function (x) {
+ var r = nbi();
+ x.copyTo(r);
+ this.reduce(r);
+ return r;
+ };
+ // Montgomery.prototype.reduce = montReduce;
+ // x = x/R mod m (HAC 14.32)
+ Montgomery.prototype.reduce = function (x) {
+ while (x.t <= this.mt2) {
+ // pad x so am has enough room later
+ x[x.t++] = 0;
+ }
+ for (var i = 0; i < this.m.t; ++i) {
+ // faster way of calculating u0 = x[i]*mp mod DV
+ var j = x[i] & 0x7fff;
+ var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM;
+ // use am to combine the multiply-shift-add into one call
+ j = i + this.m.t;
+ x[j] += this.m.am(0, u0, x, i, 0, this.m.t);
+ // propagate carry
+ while (x[j] >= x.DV) {
+ x[j] -= x.DV;
+ x[++j]++;
+ }
+ }
+ x.clamp();
+ x.drShiftTo(this.m.t, x);
+ if (x.compareTo(this.m) >= 0) {
+ x.subTo(this.m, x);
+ }
+ };
+ // Montgomery.prototype.mulTo = montMulTo;
+ // r = "xy/R mod m"; x,y != r
+ Montgomery.prototype.mulTo = function (x, y, r) {
+ x.multiplyTo(y, r);
+ this.reduce(r);
+ };
+ // Montgomery.prototype.sqrTo = montSqrTo;
+ // r = "x^2/R mod m"; x != r
+ Montgomery.prototype.sqrTo = function (x, r) {
+ x.squareTo(r);
+ this.reduce(r);
+ };
+ return Montgomery;
+ }());
+ //#endregion Montgomery
+ //#region Barrett
+ // Barrett modular reduction
+ var Barrett = /** @class */ (function () {
+ function Barrett (m) {
+ this.m = m;
+ // setup Barrett
+ this.r2 = nbi();
+ this.q3 = nbi();
+ BigInteger.ONE.dlShiftTo(2 * m.t, this.r2);
+ this.mu = this.r2.divide(m);
+ }
+ // Barrett.prototype.convert = barrettConvert;
+ Barrett.prototype.convert = function (x) {
+ if (x.s < 0 || x.t > 2 * this.m.t) {
+ return x.mod(this.m);
+ }
+ else if (x.compareTo(this.m) < 0) {
+ return x;
+ }
+ else {
+ var r = nbi();
+ x.copyTo(r);
+ this.reduce(r);
+ return r;
+ }
+ };
+ // Barrett.prototype.revert = barrettRevert;
+ Barrett.prototype.revert = function (x) {
+ return x;
+ };
+ // Barrett.prototype.reduce = barrettReduce;
+ // x = x mod m (HAC 14.42)
+ Barrett.prototype.reduce = function (x) {
+ x.drShiftTo(this.m.t - 1, this.r2);
+ if (x.t > this.m.t + 1) {
+ x.t = this.m.t + 1;
+ x.clamp();
+ }
+ this.mu.multiplyUpperTo(this.r2, this.m.t + 1, this.q3);
+ this.m.multiplyLowerTo(this.q3, this.m.t + 1, this.r2);
+ while (x.compareTo(this.r2) < 0) {
+ x.dAddOffset(1, this.m.t + 1);
+ }
+ x.subTo(this.r2, x);
+ while (x.compareTo(this.m) >= 0) {
+ x.subTo(this.m, x);
+ }
+ };
+ // Barrett.prototype.mulTo = barrettMulTo;
+ // r = x*y mod m; x,y != r
+ Barrett.prototype.mulTo = function (x, y, r) {
+ x.multiplyTo(y, r);
+ this.reduce(r);
+ };
+ // Barrett.prototype.sqrTo = barrettSqrTo;
+ // r = x^2 mod m; x != r
+ Barrett.prototype.sqrTo = function (x, r) {
+ x.squareTo(r);
+ this.reduce(r);
+ };
+ return Barrett;
+ }());
+ //#endregion
+ //#endregion REDUCERS
+ // return new, unset BigInteger
+ function nbi () { return new BigInteger(null); }
+ function parseBigInt (str, r) {
+ return new BigInteger(str, r);
+ }
+ // am: Compute w_j += (x*this_i), propagate carries,
+ // c is initial carry, returns final carry.
+ // c < 3*dvalue, x < 2*dvalue, this_i < dvalue
+ // We need to select the fastest one that works in this environment.
+ // am1: use a single mult and divide to get the high bits,
+ // max digit bits should be 26 because
+ // max internal value = 2*dvalue^2-2*dvalue (< 2^53)
+ function am1 (i, x, w, j, c, n) {
+ while (--n >= 0) {
+ var v = x * this[i++] + w[j] + c;
+ c = Math.floor(v / 0x4000000);
+ w[j++] = v & 0x3ffffff;
+ }
+ return c;
+ }
+ // am2 avoids a big mult-and-extract completely.
+ // Max digit bits should be <= 30 because we do bitwise ops
+ // on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)
+ function am2 (i, x, w, j, c, n) {
+ var xl = x & 0x7fff;
+ var xh = x >> 15;
+ while (--n >= 0) {
+ var l = this[i] & 0x7fff;
+ var h = this[i++] >> 15;
+ var m = xh * l + h * xl;
+ l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff);
+ c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30);
+ w[j++] = l & 0x3fffffff;
+ }
+ return c;
+ }
+ // Alternately, set max digit bits to 28 since some
+ // browsers slow down when dealing with 32-bit numbers.
+ function am3 (i, x, w, j, c, n) {
+ var xl = x & 0x3fff;
+ var xh = x >> 14;
+ while (--n >= 0) {
+ var l = this[i] & 0x3fff;
+ var h = this[i++] >> 14;
+ var m = xh * l + h * xl;
+ l = xl * l + ((m & 0x3fff) << 14) + w[j] + c;
+ c = (l >> 28) + (m >> 14) + xh * h;
+ w[j++] = l & 0xfffffff;
+ }
+ return c;
+ }
+ if (j_lm && (navigator.appName == "Microsoft Internet Explorer")) {
+ BigInteger.prototype.am = am2;
+ dbits = 30;
+ }
+ else if (j_lm && (navigator.appName != "Netscape")) {
+ BigInteger.prototype.am = am1;
+ dbits = 26;
+ }
+ else { // Mozilla/Netscape seems to prefer am3
+ BigInteger.prototype.am = am3;
+ dbits = 28;
+ }
+ BigInteger.prototype.DB = dbits;
+ BigInteger.prototype.DM = ((1 << dbits) - 1);
+ BigInteger.prototype.DV = (1 << dbits);
+ var BI_FP = 52;
+ BigInteger.prototype.FV = Math.pow(2, BI_FP);
+ BigInteger.prototype.F1 = BI_FP - dbits;
+ BigInteger.prototype.F2 = 2 * dbits - BI_FP;
+ // Digit conversions
+ var BI_RC = [];
+ var rr;
+ var vv;
+ rr = "0".charCodeAt(0);
+ for (vv = 0; vv <= 9; ++vv) {
+ BI_RC[rr++] = vv;
+ }
+ rr = "a".charCodeAt(0);
+ for (vv = 10; vv < 36; ++vv) {
+ BI_RC[rr++] = vv;
+ }
+ rr = "A".charCodeAt(0);
+ for (vv = 10; vv < 36; ++vv) {
+ BI_RC[rr++] = vv;
+ }
+ function intAt (s, i) {
+ var c = BI_RC[s.charCodeAt(i)];
+ return (c == null) ? -1 : c;
+ }
+ // return bigint initialized to value
+ function nbv (i) {
+ var r = nbi();
+ r.fromInt(i);
+ return r;
+ }
+ // returns bit length of the integer x
+ function nbits (x) {
+ var r = 1;
+ var t;
+ if ((t = x >>> 16) != 0) {
+ x = t;
+ r += 16;
+ }
+ if ((t = x >> 8) != 0) {
+ x = t;
+ r += 8;
+ }
+ if ((t = x >> 4) != 0) {
+ x = t;
+ r += 4;
+ }
+ if ((t = x >> 2) != 0) {
+ x = t;
+ r += 2;
+ }
+ if ((t = x >> 1) != 0) {
+ x = t;
+ r += 1;
+ }
+ return r;
+ }
+ // "constants"
+ BigInteger.ZERO = nbv(0);
+ BigInteger.ONE = nbv(1);
+
+ // prng4.js - uses Arcfour as a PRNG
+ var Arcfour = /** @class */ (function () {
+ function Arcfour () {
+ this.i = 0;
+ this.j = 0;
+ this.S = [];
+ }
+ // Arcfour.prototype.init = ARC4init;
+ // Initialize arcfour context from key, an array of ints, each from [0..255]
+ Arcfour.prototype.init = function (key) {
+ var i;
+ var j;
+ var t;
+ for (i = 0; i < 256; ++i) {
+ this.S[i] = i;
+ }
+ j = 0;
+ for (i = 0; i < 256; ++i) {
+ j = (j + this.S[i] + key[i % key.length]) & 255;
+ t = this.S[i];
+ this.S[i] = this.S[j];
+ this.S[j] = t;
+ }
+ this.i = 0;
+ this.j = 0;
+ };
+ // Arcfour.prototype.next = ARC4next;
+ Arcfour.prototype.next = function () {
+ var t;
+ this.i = (this.i + 1) & 255;
+ this.j = (this.j + this.S[this.i]) & 255;
+ t = this.S[this.i];
+ this.S[this.i] = this.S[this.j];
+ this.S[this.j] = t;
+ return this.S[(t + this.S[this.i]) & 255];
+ };
+ return Arcfour;
+ }());
+ // Plug in your RNG constructor here
+ function prng_newstate () {
+ return new Arcfour();
+ }
+ // Pool size must be a multiple of 4 and greater than 32.
+ // An array of bytes the size of the pool will be passed to init()
+ var rng_psize = 256;
+
+ // Random number generator - requires a PRNG backend, e.g. prng4.js
+ var rng_state;
+ var rng_pool = null;
+ var rng_pptr;
+ // Initialize the pool with junk if needed.
+ if (rng_pool == null) {
+ rng_pool = [];
+ rng_pptr = 0;
+ var t = void 0;
+ if (window.crypto && window.crypto.getRandomValues) {
+ // Extract entropy (2048 bits) from RNG if available
+ var z = new Uint32Array(256);
+ window.crypto.getRandomValues(z);
+ for (t = 0; t < z.length; ++t) {
+ rng_pool[rng_pptr++] = z[t] & 255;
+ }
+ }
+ // Use mouse events for entropy, if we do not have enough entropy by the time
+ // we need it, entropy will be generated by Math.random.
+ var onMouseMoveListener_1 = function (ev) {
+ this.count = this.count || 0;
+ if (this.count >= 256 || rng_pptr >= rng_psize) {
+ if (window.removeEventListener) {
+ window.removeEventListener("mousemove", onMouseMoveListener_1, false);
+ }
+ else if (window.detachEvent) {
+ window.detachEvent("onmousemove", onMouseMoveListener_1);
+ }
+ return;
+ }
+ try {
+ var mouseCoordinates = ev.x + ev.y;
+ rng_pool[rng_pptr++] = mouseCoordinates & 255;
+ this.count += 1;
+ }
+ catch (e) {
+ // Sometimes Firefox will deny permission to access event properties for some reason. Ignore.
+ }
+ };
+ if (window.addEventListener) {
+ window.addEventListener("mousemove", onMouseMoveListener_1, false);
+ }
+ else if (window.attachEvent) {
+ window.attachEvent("onmousemove", onMouseMoveListener_1);
+ }
+ }
+ function rng_get_byte () {
+ if (rng_state == null) {
+ rng_state = prng_newstate();
+ // At this point, we may not have collected enough entropy. If not, fall back to Math.random
+ while (rng_pptr < rng_psize) {
+ var random = Math.floor(65536 * Math.random());
+ rng_pool[rng_pptr++] = random & 255;
+ }
+ rng_state.init(rng_pool);
+ for (rng_pptr = 0; rng_pptr < rng_pool.length; ++rng_pptr) {
+ rng_pool[rng_pptr] = 0;
+ }
+ rng_pptr = 0;
+ }
+ // TODO: allow reseeding after first request
+ return rng_state.next();
+ }
+ var SecureRandom = /** @class */ (function () {
+ function SecureRandom () {
+ }
+ SecureRandom.prototype.nextBytes = function (ba) {
+ for (var i = 0; i < ba.length; ++i) {
+ ba[i] = rng_get_byte();
+ }
+ };
+ return SecureRandom;
+ }());
+
+ // Depends on jsbn.js and rng.js
+ // function linebrk(s,n) {
+ // var ret = "";
+ // var i = 0;
+ // while(i + n < s.length) {
+ // ret += s.substring(i,i+n) + "\n";
+ // i += n;
+ // }
+ // return ret + s.substring(i,s.length);
+ // }
+ // function byte2Hex(b) {
+ // if(b < 0x10)
+ // return "0" + b.toString(16);
+ // else
+ // return b.toString(16);
+ // }
+ function pkcs1pad1 (s, n) {
+ if (n < s.length + 22) {
+ console.error("Message too long for RSA");
+ return null;
+ }
+ var len = n - s.length - 6;
+ var filler = "";
+ for (var f = 0; f < len; f += 2) {
+ filler += "ff";
+ }
+ var m = "0001" + filler + "00" + s;
+ return parseBigInt(m, 16);
+ }
+ // PKCS#1 (type 2, random) pad input string s to n bytes, and return a bigint
+ function pkcs1pad2 (s, n) {
+ if (n < s.length + 11) { // TODO: fix for utf-8
+ console.error("Message too long for RSA");
+ return null;
+ }
+ var ba = [];
+ var i = s.length - 1;
+ while (i >= 0 && n > 0) {
+ var c = s.charCodeAt(i--);
+ if (c < 128) { // encode using utf-8
+ ba[--n] = c;
+ }
+ else if ((c > 127) && (c < 2048)) {
+ ba[--n] = (c & 63) | 128;
+ ba[--n] = (c >> 6) | 192;
+ }
+ else {
+ ba[--n] = (c & 63) | 128;
+ ba[--n] = ((c >> 6) & 63) | 128;
+ ba[--n] = (c >> 12) | 224;
+ }
+ }
+ ba[--n] = 0;
+ var rng = new SecureRandom();
+ var x = [];
+ while (n > 2) { // random non-zero pad
+ x[0] = 0;
+ while (x[0] == 0) {
+ rng.nextBytes(x);
+ }
+ ba[--n] = x[0];
+ }
+ ba[--n] = 2;
+ ba[--n] = 0;
+ return new BigInteger(ba);
+ }
+ // "empty" RSA key constructor
+ var RSAKey = /** @class */ (function () {
+ function RSAKey () {
+ this.n = null;
+ this.e = 0;
+ this.d = null;
+ this.p = null;
+ this.q = null;
+ this.dmp1 = null;
+ this.dmq1 = null;
+ this.coeff = null;
+ }
+ //#region PROTECTED
+ // protected
+ // RSAKey.prototype.doPublic = RSADoPublic;
+ // Perform raw public operation on "x": return x^e (mod n)
+ RSAKey.prototype.doPublic = function (x) {
+ return x.modPowInt(this.e, this.n);
+ };
+ // RSAKey.prototype.doPrivate = RSADoPrivate;
+ // Perform raw private operation on "x": return x^d (mod n)
+ RSAKey.prototype.doPrivate = function (x) {
+ if (this.p == null || this.q == null) {
+ return x.modPow(this.d, this.n);
+ }
+ // TODO: re-calculate any missing CRT params
+ var xp = x.mod(this.p).modPow(this.dmp1, this.p);
+ var xq = x.mod(this.q).modPow(this.dmq1, this.q);
+ while (xp.compareTo(xq) < 0) {
+ xp = xp.add(this.p);
+ }
+ return xp.subtract(xq).multiply(this.coeff).mod(this.p).multiply(this.q).add(xq);
+ };
+ //#endregion PROTECTED
+ //#region PUBLIC
+ // RSAKey.prototype.setPublic = RSASetPublic;
+ // Set the public key fields N and e from hex strings
+ RSAKey.prototype.setPublic = function (N, E) {
+ if (N != null && E != null && N.length > 0 && E.length > 0) {
+ this.n = parseBigInt(N, 16);
+ this.e = parseInt(E, 16);
+ }
+ else {
+ console.error("Invalid RSA public key");
+ }
+ };
+ // RSAKey.prototype.encrypt = RSAEncrypt;
+ // Return the PKCS#1 RSA encryption of "text" as an even-length hex string
+ RSAKey.prototype.encrypt = function (text) {
+ var m = pkcs1pad2(text, (this.n.bitLength() + 7) >> 3);
+ if (m == null) {
+ return null;
+ }
+ var c = this.doPublic(m);
+ if (c == null) {
+ return null;
+ }
+ var h = c.toString(16);
+ if ((h.length & 1) == 0) {
+ return h;
+ }
+ else {
+ return "0" + h;
+ }
+ };
+ // RSAKey.prototype.setPrivate = RSASetPrivate;
+ // Set the private key fields N, e, and d from hex strings
+ RSAKey.prototype.setPrivate = function (N, E, D) {
+ if (N != null && E != null && N.length > 0 && E.length > 0) {
+ this.n = parseBigInt(N, 16);
+ this.e = parseInt(E, 16);
+ this.d = parseBigInt(D, 16);
+ }
+ else {
+ console.error("Invalid RSA private key");
+ }
+ };
+ // RSAKey.prototype.setPrivateEx = RSASetPrivateEx;
+ // Set the private key fields N, e, d and CRT params from hex strings
+ RSAKey.prototype.setPrivateEx = function (N, E, D, P, Q, DP, DQ, C) {
+ if (N != null && E != null && N.length > 0 && E.length > 0) {
+ this.n = parseBigInt(N, 16);
+ this.e = parseInt(E, 16);
+ this.d = parseBigInt(D, 16);
+ this.p = parseBigInt(P, 16);
+ this.q = parseBigInt(Q, 16);
+ this.dmp1 = parseBigInt(DP, 16);
+ this.dmq1 = parseBigInt(DQ, 16);
+ this.coeff = parseBigInt(C, 16);
+ }
+ else {
+ console.error("Invalid RSA private key");
+ }
+ };
+ // RSAKey.prototype.generate = RSAGenerate;
+ // Generate a new random private key B bits long, using public expt E
+ RSAKey.prototype.generate = function (B, E) {
+ var rng = new SecureRandom();
+ var qs = B >> 1;
+ this.e = parseInt(E, 16);
+ var ee = new BigInteger(E, 16);
+ for (; ;) {
+ for (; ;) {
+ this.p = new BigInteger(B - qs, 1, rng);
+ if (this.p.subtract(BigInteger.ONE).gcd(ee).compareTo(BigInteger.ONE) == 0 && this.p.isProbablePrime(10)) {
+ break;
+ }
+ }
+ for (; ;) {
+ this.q = new BigInteger(qs, 1, rng);
+ if (this.q.subtract(BigInteger.ONE).gcd(ee).compareTo(BigInteger.ONE) == 0 && this.q.isProbablePrime(10)) {
+ break;
+ }
+ }
+ if (this.p.compareTo(this.q) <= 0) {
+ var t = this.p;
+ this.p = this.q;
+ this.q = t;
+ }
+ var p1 = this.p.subtract(BigInteger.ONE);
+ var q1 = this.q.subtract(BigInteger.ONE);
+ var phi = p1.multiply(q1);
+ if (phi.gcd(ee).compareTo(BigInteger.ONE) == 0) {
+ this.n = this.p.multiply(this.q);
+ this.d = ee.modInverse(phi);
+ this.dmp1 = this.d.mod(p1);
+ this.dmq1 = this.d.mod(q1);
+ this.coeff = this.q.modInverse(this.p);
+ break;
+ }
+ }
+ };
+ // RSAKey.prototype.decrypt = RSADecrypt;
+ // Return the PKCS#1 RSA decryption of "ctext".
+ // "ctext" is an even-length hex string and the output is a plain string.
+ RSAKey.prototype.decrypt = function (ctext) {
+ var c = parseBigInt(ctext, 16);
+ var m = this.doPublic(c);
+ //var m = this.doPrivate(c);
+ if (m == null) {
+ return null;
+ }
+
+ return pkcs1unpad2(m, (this.n.bitLength() + 7) >> 3);
+
+ };
+ // Generate a new random private key B bits long, using public expt E
+ RSAKey.prototype.generateAsync = function (B, E, callback) {
+ var rng = new SecureRandom();
+ var qs = B >> 1;
+ this.e = parseInt(E, 16);
+ var ee = new BigInteger(E, 16);
+ var rsa = this;
+ // These functions have non-descript names because they were originally for(;;) loops.
+ // I don't know about cryptography to give them better names than loop1-4.
+ var loop1 = function () {
+ var loop4 = function () {
+ if (rsa.p.compareTo(rsa.q) <= 0) {
+ var t = rsa.p;
+ rsa.p = rsa.q;
+ rsa.q = t;
+ }
+ var p1 = rsa.p.subtract(BigInteger.ONE);
+ var q1 = rsa.q.subtract(BigInteger.ONE);
+ var phi = p1.multiply(q1);
+ if (phi.gcd(ee).compareTo(BigInteger.ONE) == 0) {
+ rsa.n = rsa.p.multiply(rsa.q);
+ rsa.d = ee.modInverse(phi);
+ rsa.dmp1 = rsa.d.mod(p1);
+ rsa.dmq1 = rsa.d.mod(q1);
+ rsa.coeff = rsa.q.modInverse(rsa.p);
+ setTimeout(function () { callback(); }, 0); // escape
+ }
+ else {
+ setTimeout(loop1, 0);
+ }
+ };
+ var loop3 = function () {
+ rsa.q = nbi();
+ rsa.q.fromNumberAsync(qs, 1, rng, function () {
+ rsa.q.subtract(BigInteger.ONE).gcda(ee, function (r) {
+ if (r.compareTo(BigInteger.ONE) == 0 && rsa.q.isProbablePrime(10)) {
+ setTimeout(loop4, 0);
+ }
+ else {
+ setTimeout(loop3, 0);
+ }
+ });
+ });
+ };
+ var loop2 = function () {
+ rsa.p = nbi();
+ rsa.p.fromNumberAsync(B - qs, 1, rng, function () {
+ rsa.p.subtract(BigInteger.ONE).gcda(ee, function (r) {
+ if (r.compareTo(BigInteger.ONE) == 0 && rsa.p.isProbablePrime(10)) {
+ setTimeout(loop3, 0);
+ }
+ else {
+ setTimeout(loop2, 0);
+ }
+ });
+ });
+ };
+ setTimeout(loop2, 0);
+ };
+ setTimeout(loop1, 0);
+ };
+ RSAKey.prototype.sign = function (text, digestMethod, digestName) {
+ var header = getDigestHeader(digestName);
+ var digest = header + digestMethod(text).toString();
+ var m = pkcs1pad1(digest, this.n.bitLength() / 4);
+ if (m == null) {
+ return null;
+ }
+ var c = this.doPrivate(m);
+ if (c == null) {
+ return null;
+ }
+ var h = c.toString(16);
+ if ((h.length & 1) == 0) {
+ return h;
+ }
+ else {
+ return "0" + h;
+ }
+ };
+ RSAKey.prototype.verify = function (text, signature, digestMethod) {
+ var c = parseBigInt(signature, 16);
+ var m = this.doPublic(c);
+ if (m == null) {
+ return null;
+ }
+ var unpadded = m.toString(16).replace(/^1f+00/, "");
+ var digest = removeDigestHeader(unpadded);
+ return digest == digestMethod(text).toString();
+ };
+ return RSAKey;
+ }());
+ // Undo PKCS#1 (type 2, random) padding and, if valid, return the plaintext
+ function pkcs1unpad2 (d, n) {
+ var b = d.toByteArray();
+ var i = 0;
+ while (i < b.length && b[i] == 0) {
+ ++i;
+ }
+ // if (b.length - i != n - 1 || b[i] != 2) {
+ // return null;
+ // }
+ ++i;
+ while (b[i] != 0) {
+ if (++i >= b.length) {
+ return null;
+ }
+ }
+ var ret = "";
+ while (++i < b.length) {
+ var c = b[i] & 255;
+ if (c < 128) { // utf-8 decode
+ ret += String.fromCharCode(c);
+ }
+ else if ((c > 191) && (c < 224)) {
+ ret += String.fromCharCode(((c & 31) << 6) | (b[i + 1] & 63));
+ ++i;
+ }
+ else {
+ ret += String.fromCharCode(((c & 15) << 12) | ((b[i + 1] & 63) << 6) | (b[i + 2] & 63));
+ i += 2;
+ }
+ }
+ return ret;
+ }
+ // https://tools.ietf.org/html/rfc3447#page-43
+ var DIGEST_HEADERS = {
+ md2: "3020300c06082a864886f70d020205000410",
+ md5: "3020300c06082a864886f70d020505000410",
+ sha1: "3021300906052b0e03021a05000414",
+ sha224: "302d300d06096086480165030402040500041c",
+ sha256: "3031300d060960864801650304020105000420",
+ sha384: "3041300d060960864801650304020205000430",
+ sha512: "3051300d060960864801650304020305000440",
+ ripemd160: "3021300906052b2403020105000414",
+ };
+ function getDigestHeader (name) {
+ return DIGEST_HEADERS[name] || "";
+ }
+ function removeDigestHeader (str) {
+ for (var name_1 in DIGEST_HEADERS) {
+ if (DIGEST_HEADERS.hasOwnProperty(name_1)) {
+ var header = DIGEST_HEADERS[name_1];
+ var len = header.length;
+ if (str.substr(0, len) == header) {
+ return str.substr(len);
+ }
+ }
+ }
+ return str;
+ }
+ // Return the PKCS#1 RSA encryption of "text" as a Base64-encoded string
+ // function RSAEncryptB64(text) {
+ // var h = this.encrypt(text);
+ // if(h) return hex2b64(h); else return null;
+ // }
+ // public
+ // RSAKey.prototype.encrypt_b64 = RSAEncryptB64;
+
+ /*!
+ Copyright (c) 2011, Yahoo! Inc. All rights reserved.
+ Code licensed under the BSD License:
+ http://developer.yahoo.com/yui/license.html
+ version: 2.9.0
+ */
+ var YAHOO = {};
+ YAHOO.lang = {
+ /**
+ * Utility to set up the prototype, constructor and superclass properties to
+ * support an inheritance strategy that can chain constructors and methods.
+ * Static members will not be inherited.
+ *
+ * @method extend
+ * @static
+ * @param {Function} subc the object to modify
+ * @param {Function} superc the object to inherit
+ * @param {Object} overrides additional properties/methods to add to the
+ * subclass prototype. These will override the
+ * matching items obtained from the superclass
+ * if present.
+ */
+ extend: function (subc, superc, overrides) {
+ if (!superc || !subc) {
+ throw new Error("YAHOO.lang.extend failed, please check that " +
+ "all dependencies are included.");
+ }
+
+ var F = function () { };
+ F.prototype = superc.prototype;
+ subc.prototype = new F();
+ subc.prototype.constructor = subc;
+ subc.superclass = superc.prototype;
+
+ if (superc.prototype.constructor == Object.prototype.constructor) {
+ superc.prototype.constructor = superc;
+ }
+
+ if (overrides) {
+ var i;
+ for (i in overrides) {
+ subc.prototype[i] = overrides[i];
+ }
+
+ /*
+ * IE will not enumerate native functions in a derived object even if the
+ * function was overridden. This is a workaround for specific functions
+ * we care about on the Object prototype.
+ * @property _IEEnumFix
+ * @param {Function} r the object to receive the augmentation
+ * @param {Function} s the object that supplies the properties to augment
+ * @static
+ * @private
+ */
+ var _IEEnumFix = function () { },
+ ADD = ["toString", "valueOf"];
+ try {
+ if (/MSIE/.test(navigator.userAgent)) {
+ _IEEnumFix = function (r, s) {
+ for (i = 0; i < ADD.length; i = i + 1) {
+ var fname = ADD[i], f = s[fname];
+ if (typeof f === 'function' && f != Object.prototype[fname]) {
+ r[fname] = f;
+ }
+ }
+ };
+ }
+ } catch (ex) { } _IEEnumFix(subc.prototype, overrides);
+ }
+ }
+ };
+
+ /* asn1-1.0.13.js (c) 2013-2017 Kenji Urushima | kjur.github.com/jsrsasign/license
+ */
+
+ /**
+ * @fileOverview
+ * @name asn1-1.0.js
+ * @author Kenji Urushima kenji.urushima@gmail.com
+ * @version asn1 1.0.13 (2017-Jun-02)
+ * @since jsrsasign 2.1
+ * @license MIT License
+ */
+
+ /**
+ * kjur's class library name space
+ *
+ * This name space provides following name spaces:
+ *
+ * {@link KJUR.asn1} - ASN.1 primitive hexadecimal encoder
+ * {@link KJUR.asn1.x509} - ASN.1 structure for X.509 certificate and CRL
+ * {@link KJUR.crypto} - Java Cryptographic Extension(JCE) style MessageDigest/Signature
+ * class and utilities
+ *
+ *
+ * NOTE: Please ignore method summary and document of this namespace. This caused by a bug of jsdoc2.
+ * @name KJUR
+ * @namespace kjur's class library name space
+ */
+ var KJUR = {};
+
+ /**
+ * kjur's ASN.1 class library name space
+ *
+ * This is ITU-T X.690 ASN.1 DER encoder class library and
+ * class structure and methods is very similar to
+ * org.bouncycastle.asn1 package of
+ * well known BouncyCaslte Cryptography Library.
+ *
PROVIDING ASN.1 PRIMITIVES
+ * Here are ASN.1 DER primitive classes.
+ *
+ * 0x01 {@link KJUR.asn1.DERBoolean}
+ * 0x02 {@link KJUR.asn1.DERInteger}
+ * 0x03 {@link KJUR.asn1.DERBitString}
+ * 0x04 {@link KJUR.asn1.DEROctetString}
+ * 0x05 {@link KJUR.asn1.DERNull}
+ * 0x06 {@link KJUR.asn1.DERObjectIdentifier}
+ * 0x0a {@link KJUR.asn1.DEREnumerated}
+ * 0x0c {@link KJUR.asn1.DERUTF8String}
+ * 0x12 {@link KJUR.asn1.DERNumericString}
+ * 0x13 {@link KJUR.asn1.DERPrintableString}
+ * 0x14 {@link KJUR.asn1.DERTeletexString}
+ * 0x16 {@link KJUR.asn1.DERIA5String}
+ * 0x17 {@link KJUR.asn1.DERUTCTime}
+ * 0x18 {@link KJUR.asn1.DERGeneralizedTime}
+ * 0x30 {@link KJUR.asn1.DERSequence}
+ * 0x31 {@link KJUR.asn1.DERSet}
+ *
+ * OTHER ASN.1 CLASSES
+ *
+ * {@link KJUR.asn1.ASN1Object}
+ * {@link KJUR.asn1.DERAbstractString}
+ * {@link KJUR.asn1.DERAbstractTime}
+ * {@link KJUR.asn1.DERAbstractStructured}
+ * {@link KJUR.asn1.DERTaggedObject}
+ *
+ * SUB NAME SPACES
+ *
+ * {@link KJUR.asn1.cades} - CAdES long term signature format
+ * {@link KJUR.asn1.cms} - Cryptographic Message Syntax
+ * {@link KJUR.asn1.csr} - Certificate Signing Request (CSR/PKCS#10)
+ * {@link KJUR.asn1.tsp} - RFC 3161 Timestamping Protocol Format
+ * {@link KJUR.asn1.x509} - RFC 5280 X.509 certificate and CRL
+ *
+ *
+ * NOTE: Please ignore method summary and document of this namespace.
+ * This caused by a bug of jsdoc2.
+ * @name KJUR.asn1
+ * @namespace
+ */
+ if (typeof KJUR.asn1 == "undefined" || !KJUR.asn1) KJUR.asn1 = {};
+
+ /**
+ * ASN1 utilities class
+ * @name KJUR.asn1.ASN1Util
+ * @class ASN1 utilities class
+ * @since asn1 1.0.2
+ */
+ KJUR.asn1.ASN1Util = new function () {
+ this.integerToByteHex = function (i) {
+ var h = i.toString(16);
+ if ((h.length % 2) == 1) h = '0' + h;
+ return h;
+ };
+ this.bigIntToMinTwosComplementsHex = function (bigIntegerValue) {
+ var h = bigIntegerValue.toString(16);
+ if (h.substr(0, 1) != '-') {
+ if (h.length % 2 == 1) {
+ h = '0' + h;
+ } else {
+ if (!h.match(/^[0-7]/)) {
+ h = '00' + h;
+ }
+ }
+ } else {
+ var hPos = h.substr(1);
+ var xorLen = hPos.length;
+ if (xorLen % 2 == 1) {
+ xorLen += 1;
+ } else {
+ if (!h.match(/^[0-7]/)) {
+ xorLen += 2;
+ }
+ }
+ var hMask = '';
+ for (var i = 0; i < xorLen; i++) {
+ hMask += 'f';
+ }
+ var biMask = new BigInteger(hMask, 16);
+ var biNeg = biMask.xor(bigIntegerValue).add(BigInteger.ONE);
+ h = biNeg.toString(16).replace(/^-/, '');
+ }
+ return h;
+ };
+ /**
+ * get PEM string from hexadecimal data and header string
+ * @name getPEMStringFromHex
+ * @memberOf KJUR.asn1.ASN1Util
+ * @function
+ * @param {String} dataHex hexadecimal string of PEM body
+ * @param {String} pemHeader PEM header string (ex. 'RSA PRIVATE KEY')
+ * @return {String} PEM formatted string of input data
+ * @description
+ * This method converts a hexadecimal string to a PEM string with
+ * a specified header. Its line break will be CRLF("\r\n").
+ * @example
+ * var pem = KJUR.asn1.ASN1Util.getPEMStringFromHex('616161', 'RSA PRIVATE KEY');
+ * // value of pem will be:
+ * -----BEGIN PRIVATE KEY-----
+ * YWFh
+ * -----END PRIVATE KEY-----
+ */
+ this.getPEMStringFromHex = function (dataHex, pemHeader) {
+ return hextopem(dataHex, pemHeader);
+ };
+
+ /**
+ * generate ASN1Object specifed by JSON parameters
+ * @name newObject
+ * @memberOf KJUR.asn1.ASN1Util
+ * @function
+ * @param {Array} param JSON parameter to generate ASN1Object
+ * @return {KJUR.asn1.ASN1Object} generated object
+ * @since asn1 1.0.3
+ * @description
+ * generate any ASN1Object specified by JSON param
+ * including ASN.1 primitive or structured.
+ * Generally 'param' can be described as follows:
+ *
+ * {TYPE-OF-ASNOBJ: ASN1OBJ-PARAMETER}
+ *
+ * 'TYPE-OF-ASN1OBJ' can be one of following symbols:
+ *
+ * 'bool' - DERBoolean
+ * 'int' - DERInteger
+ * 'bitstr' - DERBitString
+ * 'octstr' - DEROctetString
+ * 'null' - DERNull
+ * 'oid' - DERObjectIdentifier
+ * 'enum' - DEREnumerated
+ * 'utf8str' - DERUTF8String
+ * 'numstr' - DERNumericString
+ * 'prnstr' - DERPrintableString
+ * 'telstr' - DERTeletexString
+ * 'ia5str' - DERIA5String
+ * 'utctime' - DERUTCTime
+ * 'gentime' - DERGeneralizedTime
+ * 'seq' - DERSequence
+ * 'set' - DERSet
+ * 'tag' - DERTaggedObject
+ *
+ * @example
+ * newObject({'prnstr': 'aaa'});
+ * newObject({'seq': [{'int': 3}, {'prnstr': 'aaa'}]})
+ * // ASN.1 Tagged Object
+ * newObject({'tag': {'tag': 'a1',
+ * 'explicit': true,
+ * 'obj': {'seq': [{'int': 3}, {'prnstr': 'aaa'}]}}});
+ * // more simple representation of ASN.1 Tagged Object
+ * newObject({'tag': ['a1',
+ * true,
+ * {'seq': [
+ * {'int': 3},
+ * {'prnstr': 'aaa'}]}
+ * ]});
+ */
+ this.newObject = function (param) {
+ var _KJUR = KJUR,
+ _KJUR_asn1 = _KJUR.asn1,
+ _DERBoolean = _KJUR_asn1.DERBoolean,
+ _DERInteger = _KJUR_asn1.DERInteger,
+ _DERBitString = _KJUR_asn1.DERBitString,
+ _DEROctetString = _KJUR_asn1.DEROctetString,
+ _DERNull = _KJUR_asn1.DERNull,
+ _DERObjectIdentifier = _KJUR_asn1.DERObjectIdentifier,
+ _DEREnumerated = _KJUR_asn1.DEREnumerated,
+ _DERUTF8String = _KJUR_asn1.DERUTF8String,
+ _DERNumericString = _KJUR_asn1.DERNumericString,
+ _DERPrintableString = _KJUR_asn1.DERPrintableString,
+ _DERTeletexString = _KJUR_asn1.DERTeletexString,
+ _DERIA5String = _KJUR_asn1.DERIA5String,
+ _DERUTCTime = _KJUR_asn1.DERUTCTime,
+ _DERGeneralizedTime = _KJUR_asn1.DERGeneralizedTime,
+ _DERSequence = _KJUR_asn1.DERSequence,
+ _DERSet = _KJUR_asn1.DERSet,
+ _DERTaggedObject = _KJUR_asn1.DERTaggedObject,
+ _newObject = _KJUR_asn1.ASN1Util.newObject;
+
+ var keys = Object.keys(param);
+ if (keys.length != 1)
+ throw "key of param shall be only one.";
+ var key = keys[0];
+
+ if (":bool:int:bitstr:octstr:null:oid:enum:utf8str:numstr:prnstr:telstr:ia5str:utctime:gentime:seq:set:tag:".indexOf(":" + key + ":") == -1)
+ throw "undefined key: " + key;
+
+ if (key == "bool") return new _DERBoolean(param[key]);
+ if (key == "int") return new _DERInteger(param[key]);
+ if (key == "bitstr") return new _DERBitString(param[key]);
+ if (key == "octstr") return new _DEROctetString(param[key]);
+ if (key == "null") return new _DERNull(param[key]);
+ if (key == "oid") return new _DERObjectIdentifier(param[key]);
+ if (key == "enum") return new _DEREnumerated(param[key]);
+ if (key == "utf8str") return new _DERUTF8String(param[key]);
+ if (key == "numstr") return new _DERNumericString(param[key]);
+ if (key == "prnstr") return new _DERPrintableString(param[key]);
+ if (key == "telstr") return new _DERTeletexString(param[key]);
+ if (key == "ia5str") return new _DERIA5String(param[key]);
+ if (key == "utctime") return new _DERUTCTime(param[key]);
+ if (key == "gentime") return new _DERGeneralizedTime(param[key]);
+
+ if (key == "seq") {
+ var paramList = param[key];
+ var a = [];
+ for (var i = 0; i < paramList.length; i++) {
+ var asn1Obj = _newObject(paramList[i]);
+ a.push(asn1Obj);
+ }
+ return new _DERSequence({ 'array': a });
+ }
+
+ if (key == "set") {
+ var paramList = param[key];
+ var a = [];
+ for (var i = 0; i < paramList.length; i++) {
+ var asn1Obj = _newObject(paramList[i]);
+ a.push(asn1Obj);
+ }
+ return new _DERSet({ 'array': a });
+ }
+
+ if (key == "tag") {
+ var tagParam = param[key];
+ if (Object.prototype.toString.call(tagParam) === '[object Array]' &&
+ tagParam.length == 3) {
+ var obj = _newObject(tagParam[2]);
+ return new _DERTaggedObject({
+ tag: tagParam[0],
+ explicit: tagParam[1],
+ obj: obj
+ });
+ } else {
+ var newParam = {};
+ if (tagParam.explicit !== undefined)
+ newParam.explicit = tagParam.explicit;
+ if (tagParam.tag !== undefined)
+ newParam.tag = tagParam.tag;
+ if (tagParam.obj === undefined)
+ throw "obj shall be specified for 'tag'.";
+ newParam.obj = _newObject(tagParam.obj);
+ return new _DERTaggedObject(newParam);
+ }
+ }
+ };
+
+ /**
+ * get encoded hexadecimal string of ASN1Object specifed by JSON parameters
+ * @name jsonToASN1HEX
+ * @memberOf KJUR.asn1.ASN1Util
+ * @function
+ * @param {Array} param JSON parameter to generate ASN1Object
+ * @return hexadecimal string of ASN1Object
+ * @since asn1 1.0.4
+ * @description
+ * As for ASN.1 object representation of JSON object,
+ * please see {@link newObject}.
+ * @example
+ * jsonToASN1HEX({'prnstr': 'aaa'});
+ */
+ this.jsonToASN1HEX = function (param) {
+ var asn1Obj = this.newObject(param);
+ return asn1Obj.getEncodedHex();
+ };
+ };
+
+ /**
+ * get dot noted oid number string from hexadecimal value of OID
+ * @name oidHexToInt
+ * @memberOf KJUR.asn1.ASN1Util
+ * @function
+ * @param {String} hex hexadecimal value of object identifier
+ * @return {String} dot noted string of object identifier
+ * @since jsrsasign 4.8.3 asn1 1.0.7
+ * @description
+ * This static method converts from hexadecimal string representation of
+ * ASN.1 value of object identifier to oid number string.
+ * @example
+ * KJUR.asn1.ASN1Util.oidHexToInt('550406') → "2.5.4.6"
+ */
+ KJUR.asn1.ASN1Util.oidHexToInt = function (hex) {
+ var s = "";
+ var i01 = parseInt(hex.substr(0, 2), 16);
+ var i0 = Math.floor(i01 / 40);
+ var i1 = i01 % 40;
+ var s = i0 + "." + i1;
+
+ var binbuf = "";
+ for (var i = 2; i < hex.length; i += 2) {
+ var value = parseInt(hex.substr(i, 2), 16);
+ var bin = ("00000000" + value.toString(2)).slice(- 8);
+ binbuf = binbuf + bin.substr(1, 7);
+ if (bin.substr(0, 1) == "0") {
+ var bi = new BigInteger(binbuf, 2);
+ s = s + "." + bi.toString(10);
+ binbuf = "";
+ }
+ }
+ return s;
+ };
+
+ /**
+ * get hexadecimal value of object identifier from dot noted oid value
+ * @name oidIntToHex
+ * @memberOf KJUR.asn1.ASN1Util
+ * @function
+ * @param {String} oidString dot noted string of object identifier
+ * @return {String} hexadecimal value of object identifier
+ * @since jsrsasign 4.8.3 asn1 1.0.7
+ * @description
+ * This static method converts from object identifier value string.
+ * to hexadecimal string representation of it.
+ * @example
+ * KJUR.asn1.ASN1Util.oidIntToHex("2.5.4.6") → "550406"
+ */
+ KJUR.asn1.ASN1Util.oidIntToHex = function (oidString) {
+ var itox = function (i) {
+ var h = i.toString(16);
+ if (h.length == 1) h = '0' + h;
+ return h;
+ };
+
+ var roidtox = function (roid) {
+ var h = '';
+ var bi = new BigInteger(roid, 10);
+ var b = bi.toString(2);
+ var padLen = 7 - b.length % 7;
+ if (padLen == 7) padLen = 0;
+ var bPad = '';
+ for (var i = 0; i < padLen; i++) bPad += '0';
+ b = bPad + b;
+ for (var i = 0; i < b.length - 1; i += 7) {
+ var b8 = b.substr(i, 7);
+ if (i != b.length - 7) b8 = '1' + b8;
+ h += itox(parseInt(b8, 2));
+ }
+ return h;
+ };
+
+ if (!oidString.match(/^[0-9.]+$/)) {
+ throw "malformed oid string: " + oidString;
+ }
+ var h = '';
+ var a = oidString.split('.');
+ var i0 = parseInt(a[0]) * 40 + parseInt(a[1]);
+ h += itox(i0);
+ a.splice(0, 2);
+ for (var i = 0; i < a.length; i++) {
+ h += roidtox(a[i]);
+ }
+ return h;
+ };
+
+
+ // ********************************************************************
+ // Abstract ASN.1 Classes
+ // ********************************************************************
+
+ // ********************************************************************
+
+ /**
+ * base class for ASN.1 DER encoder object
+ * @name KJUR.asn1.ASN1Object
+ * @class base class for ASN.1 DER encoder object
+ * @property {Boolean} isModified flag whether internal data was changed
+ * @property {String} hTLV hexadecimal string of ASN.1 TLV
+ * @property {String} hT hexadecimal string of ASN.1 TLV tag(T)
+ * @property {String} hL hexadecimal string of ASN.1 TLV length(L)
+ * @property {String} hV hexadecimal string of ASN.1 TLV value(V)
+ * @description
+ */
+ KJUR.asn1.ASN1Object = function () {
+ var hV = '';
+
+ /**
+ * get hexadecimal ASN.1 TLV length(L) bytes from TLV value(V)
+ * @name getLengthHexFromValue
+ * @memberOf KJUR.asn1.ASN1Object#
+ * @function
+ * @return {String} hexadecimal string of ASN.1 TLV length(L)
+ */
+ this.getLengthHexFromValue = function () {
+ if (typeof this.hV == "undefined" || this.hV == null) {
+ throw "this.hV is null or undefined.";
+ }
+ if (this.hV.length % 2 == 1) {
+ throw "value hex must be even length: n=" + hV.length + ",v=" + this.hV;
+ }
+ var n = this.hV.length / 2;
+ var hN = n.toString(16);
+ if (hN.length % 2 == 1) {
+ hN = "0" + hN;
+ }
+ if (n < 128) {
+ return hN;
+ } else {
+ var hNlen = hN.length / 2;
+ if (hNlen > 15) {
+ throw "ASN.1 length too long to represent by 8x: n = " + n.toString(16);
+ }
+ var head = 128 + hNlen;
+ return head.toString(16) + hN;
+ }
+ };
+
+ /**
+ * get hexadecimal string of ASN.1 TLV bytes
+ * @name getEncodedHex
+ * @memberOf KJUR.asn1.ASN1Object#
+ * @function
+ * @return {String} hexadecimal string of ASN.1 TLV
+ */
+ this.getEncodedHex = function () {
+ if (this.hTLV == null || this.isModified) {
+ this.hV = this.getFreshValueHex();
+ this.hL = this.getLengthHexFromValue();
+ this.hTLV = this.hT + this.hL + this.hV;
+ this.isModified = false;
+ //alert("first time: " + this.hTLV);
+ }
+ return this.hTLV;
+ };
+
+ /**
+ * get hexadecimal string of ASN.1 TLV value(V) bytes
+ * @name getValueHex
+ * @memberOf KJUR.asn1.ASN1Object#
+ * @function
+ * @return {String} hexadecimal string of ASN.1 TLV value(V) bytes
+ */
+ this.getValueHex = function () {
+ this.getEncodedHex();
+ return this.hV;
+ };
+
+ this.getFreshValueHex = function () {
+ return '';
+ };
+ };
+
+ // == BEGIN DERAbstractString ================================================
+ /**
+ * base class for ASN.1 DER string classes
+ * @name KJUR.asn1.DERAbstractString
+ * @class base class for ASN.1 DER string classes
+ * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})
+ * @property {String} s internal string of value
+ * @extends KJUR.asn1.ASN1Object
+ * @description
+ *
+ * As for argument 'params' for constructor, you can specify one of
+ * following properties:
+ *
+ * str - specify initial ASN.1 value(V) by a string
+ * hex - specify initial ASN.1 value(V) by a hexadecimal string
+ *
+ * NOTE: 'params' can be omitted.
+ */
+ KJUR.asn1.DERAbstractString = function (params) {
+ KJUR.asn1.DERAbstractString.superclass.constructor.call(this);
+
+ /**
+ * get string value of this string object
+ * @name getString
+ * @memberOf KJUR.asn1.DERAbstractString#
+ * @function
+ * @return {String} string value of this string object
+ */
+ this.getString = function () {
+ return this.s;
+ };
+
+ /**
+ * set value by a string
+ * @name setString
+ * @memberOf KJUR.asn1.DERAbstractString#
+ * @function
+ * @param {String} newS value by a string to set
+ */
+ this.setString = function (newS) {
+ this.hTLV = null;
+ this.isModified = true;
+ this.s = newS;
+ this.hV = stohex(this.s);
+ };
+
+ /**
+ * set value by a hexadecimal string
+ * @name setStringHex
+ * @memberOf KJUR.asn1.DERAbstractString#
+ * @function
+ * @param {String} newHexString value by a hexadecimal string to set
+ */
+ this.setStringHex = function (newHexString) {
+ this.hTLV = null;
+ this.isModified = true;
+ this.s = null;
+ this.hV = newHexString;
+ };
+
+ this.getFreshValueHex = function () {
+ return this.hV;
+ };
+
+ if (typeof params != "undefined") {
+ if (typeof params == "string") {
+ this.setString(params);
+ } else if (typeof params['str'] != "undefined") {
+ this.setString(params['str']);
+ } else if (typeof params['hex'] != "undefined") {
+ this.setStringHex(params['hex']);
+ }
+ }
+ };
+ YAHOO.lang.extend(KJUR.asn1.DERAbstractString, KJUR.asn1.ASN1Object);
+ // == END DERAbstractString ================================================
+
+ // == BEGIN DERAbstractTime ==================================================
+ /**
+ * base class for ASN.1 DER Generalized/UTCTime class
+ * @name KJUR.asn1.DERAbstractTime
+ * @class base class for ASN.1 DER Generalized/UTCTime class
+ * @param {Array} params associative array of parameters (ex. {'str': '130430235959Z'})
+ * @extends KJUR.asn1.ASN1Object
+ * @description
+ * @see KJUR.asn1.ASN1Object - superclass
+ */
+ KJUR.asn1.DERAbstractTime = function (params) {
+ KJUR.asn1.DERAbstractTime.superclass.constructor.call(this);
+
+ // --- PRIVATE METHODS --------------------
+ this.localDateToUTC = function (d) {
+ utc = d.getTime() + (d.getTimezoneOffset() * 60000);
+ var utcDate = new Date(utc);
+ return utcDate;
+ };
+
+ /*
+ * format date string by Data object
+ * @name formatDate
+ * @memberOf KJUR.asn1.AbstractTime;
+ * @param {Date} dateObject
+ * @param {string} type 'utc' or 'gen'
+ * @param {boolean} withMillis flag for with millisections or not
+ * @description
+ * 'withMillis' flag is supported from asn1 1.0.6.
+ */
+ this.formatDate = function (dateObject, type, withMillis) {
+ var pad = this.zeroPadding;
+ var d = this.localDateToUTC(dateObject);
+ var year = String(d.getFullYear());
+ if (type == 'utc') year = year.substr(2, 2);
+ var month = pad(String(d.getMonth() + 1), 2);
+ var day = pad(String(d.getDate()), 2);
+ var hour = pad(String(d.getHours()), 2);
+ var min = pad(String(d.getMinutes()), 2);
+ var sec = pad(String(d.getSeconds()), 2);
+ var s = year + month + day + hour + min + sec;
+ if (withMillis === true) {
+ var millis = d.getMilliseconds();
+ if (millis != 0) {
+ var sMillis = pad(String(millis), 3);
+ sMillis = sMillis.replace(/[0]+$/, "");
+ s = s + "." + sMillis;
+ }
+ }
+ return s + "Z";
+ };
+
+ this.zeroPadding = function (s, len) {
+ if (s.length >= len) return s;
+ return new Array(len - s.length + 1).join('0') + s;
+ };
+
+ // --- PUBLIC METHODS --------------------
+ /**
+ * get string value of this string object
+ * @name getString
+ * @memberOf KJUR.asn1.DERAbstractTime#
+ * @function
+ * @return {String} string value of this time object
+ */
+ this.getString = function () {
+ return this.s;
+ };
+
+ /**
+ * set value by a string
+ * @name setString
+ * @memberOf KJUR.asn1.DERAbstractTime#
+ * @function
+ * @param {String} newS value by a string to set such like "130430235959Z"
+ */
+ this.setString = function (newS) {
+ this.hTLV = null;
+ this.isModified = true;
+ this.s = newS;
+ this.hV = stohex(newS);
+ };
+
+ /**
+ * set value by a Date object
+ * @name setByDateValue
+ * @memberOf KJUR.asn1.DERAbstractTime#
+ * @function
+ * @param {Integer} year year of date (ex. 2013)
+ * @param {Integer} month month of date between 1 and 12 (ex. 12)
+ * @param {Integer} day day of month
+ * @param {Integer} hour hours of date
+ * @param {Integer} min minutes of date
+ * @param {Integer} sec seconds of date
+ */
+ this.setByDateValue = function (year, month, day, hour, min, sec) {
+ var dateObject = new Date(Date.UTC(year, month - 1, day, hour, min, sec, 0));
+ this.setByDate(dateObject);
+ };
+
+ this.getFreshValueHex = function () {
+ return this.hV;
+ };
+ };
+ YAHOO.lang.extend(KJUR.asn1.DERAbstractTime, KJUR.asn1.ASN1Object);
+ // == END DERAbstractTime ==================================================
+
+ // == BEGIN DERAbstractStructured ============================================
+ /**
+ * base class for ASN.1 DER structured class
+ * @name KJUR.asn1.DERAbstractStructured
+ * @class base class for ASN.1 DER structured class
+ * @property {Array} asn1Array internal array of ASN1Object
+ * @extends KJUR.asn1.ASN1Object
+ * @description
+ * @see KJUR.asn1.ASN1Object - superclass
+ */
+ KJUR.asn1.DERAbstractStructured = function (params) {
+ KJUR.asn1.DERAbstractString.superclass.constructor.call(this);
+
+ /**
+ * set value by array of ASN1Object
+ * @name setByASN1ObjectArray
+ * @memberOf KJUR.asn1.DERAbstractStructured#
+ * @function
+ * @param {array} asn1ObjectArray array of ASN1Object to set
+ */
+ this.setByASN1ObjectArray = function (asn1ObjectArray) {
+ this.hTLV = null;
+ this.isModified = true;
+ this.asn1Array = asn1ObjectArray;
+ };
+
+ /**
+ * append an ASN1Object to internal array
+ * @name appendASN1Object
+ * @memberOf KJUR.asn1.DERAbstractStructured#
+ * @function
+ * @param {ASN1Object} asn1Object to add
+ */
+ this.appendASN1Object = function (asn1Object) {
+ this.hTLV = null;
+ this.isModified = true;
+ this.asn1Array.push(asn1Object);
+ };
+
+ this.asn1Array = new Array();
+ if (typeof params != "undefined") {
+ if (typeof params['array'] != "undefined") {
+ this.asn1Array = params['array'];
+ }
+ }
+ };
+ YAHOO.lang.extend(KJUR.asn1.DERAbstractStructured, KJUR.asn1.ASN1Object);
+
+
+ // ********************************************************************
+ // ASN.1 Object Classes
+ // ********************************************************************
+
+ // ********************************************************************
+ /**
+ * class for ASN.1 DER Boolean
+ * @name KJUR.asn1.DERBoolean
+ * @class class for ASN.1 DER Boolean
+ * @extends KJUR.asn1.ASN1Object
+ * @description
+ * @see KJUR.asn1.ASN1Object - superclass
+ */
+ KJUR.asn1.DERBoolean = function () {
+ KJUR.asn1.DERBoolean.superclass.constructor.call(this);
+ this.hT = "01";
+ this.hTLV = "0101ff";
+ };
+ YAHOO.lang.extend(KJUR.asn1.DERBoolean, KJUR.asn1.ASN1Object);
+
+ // ********************************************************************
+ /**
+ * class for ASN.1 DER Integer
+ * @name KJUR.asn1.DERInteger
+ * @class class for ASN.1 DER Integer
+ * @extends KJUR.asn1.ASN1Object
+ * @description
+ *
+ * As for argument 'params' for constructor, you can specify one of
+ * following properties:
+ *
+ * int - specify initial ASN.1 value(V) by integer value
+ * bigint - specify initial ASN.1 value(V) by BigInteger object
+ * hex - specify initial ASN.1 value(V) by a hexadecimal string
+ *
+ * NOTE: 'params' can be omitted.
+ */
+ KJUR.asn1.DERInteger = function (params) {
+ KJUR.asn1.DERInteger.superclass.constructor.call(this);
+ this.hT = "02";
+
+ /**
+ * set value by Tom Wu's BigInteger object
+ * @name setByBigInteger
+ * @memberOf KJUR.asn1.DERInteger#
+ * @function
+ * @param {BigInteger} bigIntegerValue to set
+ */
+ this.setByBigInteger = function (bigIntegerValue) {
+ this.hTLV = null;
+ this.isModified = true;
+ this.hV = KJUR.asn1.ASN1Util.bigIntToMinTwosComplementsHex(bigIntegerValue);
+ };
+
+ /**
+ * set value by integer value
+ * @name setByInteger
+ * @memberOf KJUR.asn1.DERInteger
+ * @function
+ * @param {Integer} integer value to set
+ */
+ this.setByInteger = function (intValue) {
+ var bi = new BigInteger(String(intValue), 10);
+ this.setByBigInteger(bi);
+ };
+
+ /**
+ * set value by integer value
+ * @name setValueHex
+ * @memberOf KJUR.asn1.DERInteger#
+ * @function
+ * @param {String} hexadecimal string of integer value
+ * @description
+ *
+ * NOTE: Value shall be represented by minimum octet length of
+ * two's complement representation.
+ * @example
+ * new KJUR.asn1.DERInteger(123);
+ * new KJUR.asn1.DERInteger({'int': 123});
+ * new KJUR.asn1.DERInteger({'hex': '1fad'});
+ */
+ this.setValueHex = function (newHexString) {
+ this.hV = newHexString;
+ };
+
+ this.getFreshValueHex = function () {
+ return this.hV;
+ };
+
+ if (typeof params != "undefined") {
+ if (typeof params['bigint'] != "undefined") {
+ this.setByBigInteger(params['bigint']);
+ } else if (typeof params['int'] != "undefined") {
+ this.setByInteger(params['int']);
+ } else if (typeof params == "number") {
+ this.setByInteger(params);
+ } else if (typeof params['hex'] != "undefined") {
+ this.setValueHex(params['hex']);
+ }
+ }
+ };
+ YAHOO.lang.extend(KJUR.asn1.DERInteger, KJUR.asn1.ASN1Object);
+
+ // ********************************************************************
+ /**
+ * class for ASN.1 DER encoded BitString primitive
+ * @name KJUR.asn1.DERBitString
+ * @class class for ASN.1 DER encoded BitString primitive
+ * @extends KJUR.asn1.ASN1Object
+ * @description
+ *
+ * As for argument 'params' for constructor, you can specify one of
+ * following properties:
+ *
+ * bin - specify binary string (ex. '10111')
+ * array - specify array of boolean (ex. [true,false,true,true])
+ * hex - specify hexadecimal string of ASN.1 value(V) including unused bits
+ * obj - specify {@link KJUR.asn1.ASN1Util.newObject}
+ * argument for "BitString encapsulates" structure.
+ *
+ * NOTE1: 'params' can be omitted.
+ * NOTE2: 'obj' parameter have been supported since
+ * asn1 1.0.11, jsrsasign 6.1.1 (2016-Sep-25).
+ * @example
+ * // default constructor
+ * o = new KJUR.asn1.DERBitString();
+ * // initialize with binary string
+ * o = new KJUR.asn1.DERBitString({bin: "1011"});
+ * // initialize with boolean array
+ * o = new KJUR.asn1.DERBitString({array: [true,false,true,true]});
+ * // initialize with hexadecimal string (04 is unused bits)
+ * o = new KJUR.asn1.DEROctetString({hex: "04bac0"});
+ * // initialize with ASN1Util.newObject argument for encapsulated
+ * o = new KJUR.asn1.DERBitString({obj: {seq: [{int: 3}, {prnstr: 'aaa'}]}});
+ * // above generates a ASN.1 data like this:
+ * // BIT STRING, encapsulates {
+ * // SEQUENCE {
+ * // INTEGER 3
+ * // PrintableString 'aaa'
+ * // }
+ * // }
+ */
+ KJUR.asn1.DERBitString = function (params) {
+ if (params !== undefined && typeof params.obj !== "undefined") {
+ var o = KJUR.asn1.ASN1Util.newObject(params.obj);
+ params.hex = "00" + o.getEncodedHex();
+ }
+ KJUR.asn1.DERBitString.superclass.constructor.call(this);
+ this.hT = "03";
+
+ /**
+ * set ASN.1 value(V) by a hexadecimal string including unused bits
+ * @name setHexValueIncludingUnusedBits
+ * @memberOf KJUR.asn1.DERBitString#
+ * @function
+ * @param {String} newHexStringIncludingUnusedBits
+ */
+ this.setHexValueIncludingUnusedBits = function (newHexStringIncludingUnusedBits) {
+ this.hTLV = null;
+ this.isModified = true;
+ this.hV = newHexStringIncludingUnusedBits;
+ };
+
+ /**
+ * set ASN.1 value(V) by unused bit and hexadecimal string of value
+ * @name setUnusedBitsAndHexValue
+ * @memberOf KJUR.asn1.DERBitString#
+ * @function
+ * @param {Integer} unusedBits
+ * @param {String} hValue
+ */
+ this.setUnusedBitsAndHexValue = function (unusedBits, hValue) {
+ if (unusedBits < 0 || 7 < unusedBits) {
+ throw "unused bits shall be from 0 to 7: u = " + unusedBits;
+ }
+ var hUnusedBits = "0" + unusedBits;
+ this.hTLV = null;
+ this.isModified = true;
+ this.hV = hUnusedBits + hValue;
+ };
+
+ /**
+ * set ASN.1 DER BitString by binary string
+ * @name setByBinaryString
+ * @memberOf KJUR.asn1.DERBitString#
+ * @function
+ * @param {String} binaryString binary value string (i.e. '10111')
+ * @description
+ * Its unused bits will be calculated automatically by length of
+ * 'binaryValue'.
+ * NOTE: Trailing zeros '0' will be ignored.
+ * @example
+ * o = new KJUR.asn1.DERBitString();
+ * o.setByBooleanArray("01011");
+ */
+ this.setByBinaryString = function (binaryString) {
+ binaryString = binaryString.replace(/0+$/, '');
+ var unusedBits = 8 - binaryString.length % 8;
+ if (unusedBits == 8) unusedBits = 0;
+ for (var i = 0; i <= unusedBits; i++) {
+ binaryString += '0';
+ }
+ var h = '';
+ for (var i = 0; i < binaryString.length - 1; i += 8) {
+ var b = binaryString.substr(i, 8);
+ var x = parseInt(b, 2).toString(16);
+ if (x.length == 1) x = '0' + x;
+ h += x;
+ }
+ this.hTLV = null;
+ this.isModified = true;
+ this.hV = '0' + unusedBits + h;
+ };
+
+ /**
+ * set ASN.1 TLV value(V) by an array of boolean
+ * @name setByBooleanArray
+ * @memberOf KJUR.asn1.DERBitString#
+ * @function
+ * @param {array} booleanArray array of boolean (ex. [true, false, true])
+ * @description
+ * NOTE: Trailing falses will be ignored in the ASN.1 DER Object.
+ * @example
+ * o = new KJUR.asn1.DERBitString();
+ * o.setByBooleanArray([false, true, false, true, true]);
+ */
+ this.setByBooleanArray = function (booleanArray) {
+ var s = '';
+ for (var i = 0; i < booleanArray.length; i++) {
+ if (booleanArray[i] == true) {
+ s += '1';
+ } else {
+ s += '0';
+ }
+ }
+ this.setByBinaryString(s);
+ };
+
+ /**
+ * generate an array of falses with specified length
+ * @name newFalseArray
+ * @memberOf KJUR.asn1.DERBitString
+ * @function
+ * @param {Integer} nLength length of array to generate
+ * @return {array} array of boolean falses
+ * @description
+ * This static method may be useful to initialize boolean array.
+ * @example
+ * o = new KJUR.asn1.DERBitString();
+ * o.newFalseArray(3) → [false, false, false]
+ */
+ this.newFalseArray = function (nLength) {
+ var a = new Array(nLength);
+ for (var i = 0; i < nLength; i++) {
+ a[i] = false;
+ }
+ return a;
+ };
+
+ this.getFreshValueHex = function () {
+ return this.hV;
+ };
+
+ if (typeof params != "undefined") {
+ if (typeof params == "string" && params.toLowerCase().match(/^[0-9a-f]+$/)) {
+ this.setHexValueIncludingUnusedBits(params);
+ } else if (typeof params['hex'] != "undefined") {
+ this.setHexValueIncludingUnusedBits(params['hex']);
+ } else if (typeof params['bin'] != "undefined") {
+ this.setByBinaryString(params['bin']);
+ } else if (typeof params['array'] != "undefined") {
+ this.setByBooleanArray(params['array']);
+ }
+ }
+ };
+ YAHOO.lang.extend(KJUR.asn1.DERBitString, KJUR.asn1.ASN1Object);
+
+ // ********************************************************************
+ /**
+ * class for ASN.1 DER OctetString
+ * @name KJUR.asn1.DEROctetString
+ * @class class for ASN.1 DER OctetString
+ * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})
+ * @extends KJUR.asn1.DERAbstractString
+ * @description
+ * This class provides ASN.1 OctetString simple type.
+ * Supported "params" attributes are:
+ *
+ * str - to set a string as a value
+ * hex - to set a hexadecimal string as a value
+ * obj - to set a encapsulated ASN.1 value by JSON object
+ * which is defined in {@link KJUR.asn1.ASN1Util.newObject}
+ *
+ * NOTE: A parameter 'obj' have been supported
+ * for "OCTET STRING, encapsulates" structure.
+ * since asn1 1.0.11, jsrsasign 6.1.1 (2016-Sep-25).
+ * @see KJUR.asn1.DERAbstractString - superclass
+ * @example
+ * // default constructor
+ * o = new KJUR.asn1.DEROctetString();
+ * // initialize with string
+ * o = new KJUR.asn1.DEROctetString({str: "aaa"});
+ * // initialize with hexadecimal string
+ * o = new KJUR.asn1.DEROctetString({hex: "616161"});
+ * // initialize with ASN1Util.newObject argument
+ * o = new KJUR.asn1.DEROctetString({obj: {seq: [{int: 3}, {prnstr: 'aaa'}]}});
+ * // above generates a ASN.1 data like this:
+ * // OCTET STRING, encapsulates {
+ * // SEQUENCE {
+ * // INTEGER 3
+ * // PrintableString 'aaa'
+ * // }
+ * // }
+ */
+ KJUR.asn1.DEROctetString = function (params) {
+ if (params !== undefined && typeof params.obj !== "undefined") {
+ var o = KJUR.asn1.ASN1Util.newObject(params.obj);
+ params.hex = o.getEncodedHex();
+ }
+ KJUR.asn1.DEROctetString.superclass.constructor.call(this, params);
+ this.hT = "04";
+ };
+ YAHOO.lang.extend(KJUR.asn1.DEROctetString, KJUR.asn1.DERAbstractString);
+
+ // ********************************************************************
+ /**
+ * class for ASN.1 DER Null
+ * @name KJUR.asn1.DERNull
+ * @class class for ASN.1 DER Null
+ * @extends KJUR.asn1.ASN1Object
+ * @description
+ * @see KJUR.asn1.ASN1Object - superclass
+ */
+ KJUR.asn1.DERNull = function () {
+ KJUR.asn1.DERNull.superclass.constructor.call(this);
+ this.hT = "05";
+ this.hTLV = "0500";
+ };
+ YAHOO.lang.extend(KJUR.asn1.DERNull, KJUR.asn1.ASN1Object);
+
+ // ********************************************************************
+ /**
+ * class for ASN.1 DER ObjectIdentifier
+ * @name KJUR.asn1.DERObjectIdentifier
+ * @class class for ASN.1 DER ObjectIdentifier
+ * @param {Array} params associative array of parameters (ex. {'oid': '2.5.4.5'})
+ * @extends KJUR.asn1.ASN1Object
+ * @description
+ *
+ * As for argument 'params' for constructor, you can specify one of
+ * following properties:
+ *
+ * oid - specify initial ASN.1 value(V) by a oid string (ex. 2.5.4.13)
+ * hex - specify initial ASN.1 value(V) by a hexadecimal string
+ *
+ * NOTE: 'params' can be omitted.
+ */
+ KJUR.asn1.DERObjectIdentifier = function (params) {
+ var itox = function (i) {
+ var h = i.toString(16);
+ if (h.length == 1) h = '0' + h;
+ return h;
+ };
+ var roidtox = function (roid) {
+ var h = '';
+ var bi = new BigInteger(roid, 10);
+ var b = bi.toString(2);
+ var padLen = 7 - b.length % 7;
+ if (padLen == 7) padLen = 0;
+ var bPad = '';
+ for (var i = 0; i < padLen; i++) bPad += '0';
+ b = bPad + b;
+ for (var i = 0; i < b.length - 1; i += 7) {
+ var b8 = b.substr(i, 7);
+ if (i != b.length - 7) b8 = '1' + b8;
+ h += itox(parseInt(b8, 2));
+ }
+ return h;
+ };
+
+ KJUR.asn1.DERObjectIdentifier.superclass.constructor.call(this);
+ this.hT = "06";
+
+ /**
+ * set value by a hexadecimal string
+ * @name setValueHex
+ * @memberOf KJUR.asn1.DERObjectIdentifier#
+ * @function
+ * @param {String} newHexString hexadecimal value of OID bytes
+ */
+ this.setValueHex = function (newHexString) {
+ this.hTLV = null;
+ this.isModified = true;
+ this.s = null;
+ this.hV = newHexString;
+ };
+
+ /**
+ * set value by a OID string
+ * @name setValueOidString
+ * @memberOf KJUR.asn1.DERObjectIdentifier#
+ * @function
+ * @param {String} oidString OID string (ex. 2.5.4.13)
+ * @example
+ * o = new KJUR.asn1.DERObjectIdentifier();
+ * o.setValueOidString("2.5.4.13");
+ */
+ this.setValueOidString = function (oidString) {
+ if (!oidString.match(/^[0-9.]+$/)) {
+ throw "malformed oid string: " + oidString;
+ }
+ var h = '';
+ var a = oidString.split('.');
+ var i0 = parseInt(a[0]) * 40 + parseInt(a[1]);
+ h += itox(i0);
+ a.splice(0, 2);
+ for (var i = 0; i < a.length; i++) {
+ h += roidtox(a[i]);
+ }
+ this.hTLV = null;
+ this.isModified = true;
+ this.s = null;
+ this.hV = h;
+ };
+
+ /**
+ * set value by a OID name
+ * @name setValueName
+ * @memberOf KJUR.asn1.DERObjectIdentifier#
+ * @function
+ * @param {String} oidName OID name (ex. 'serverAuth')
+ * @since 1.0.1
+ * @description
+ * OID name shall be defined in 'KJUR.asn1.x509.OID.name2oidList'.
+ * Otherwise raise error.
+ * @example
+ * o = new KJUR.asn1.DERObjectIdentifier();
+ * o.setValueName("serverAuth");
+ */
+ this.setValueName = function (oidName) {
+ var oid = KJUR.asn1.x509.OID.name2oid(oidName);
+ if (oid !== '') {
+ this.setValueOidString(oid);
+ } else {
+ throw "DERObjectIdentifier oidName undefined: " + oidName;
+ }
+ };
+
+ this.getFreshValueHex = function () {
+ return this.hV;
+ };
+
+ if (params !== undefined) {
+ if (typeof params === "string") {
+ if (params.match(/^[0-2].[0-9.]+$/)) {
+ this.setValueOidString(params);
+ } else {
+ this.setValueName(params);
+ }
+ } else if (params.oid !== undefined) {
+ this.setValueOidString(params.oid);
+ } else if (params.hex !== undefined) {
+ this.setValueHex(params.hex);
+ } else if (params.name !== undefined) {
+ this.setValueName(params.name);
+ }
+ }
+ };
+ YAHOO.lang.extend(KJUR.asn1.DERObjectIdentifier, KJUR.asn1.ASN1Object);
+
+ // ********************************************************************
+ /**
+ * class for ASN.1 DER Enumerated
+ * @name KJUR.asn1.DEREnumerated
+ * @class class for ASN.1 DER Enumerated
+ * @extends KJUR.asn1.ASN1Object
+ * @description
+ *
+ * As for argument 'params' for constructor, you can specify one of
+ * following properties:
+ *
+ * int - specify initial ASN.1 value(V) by integer value
+ * hex - specify initial ASN.1 value(V) by a hexadecimal string
+ *
+ * NOTE: 'params' can be omitted.
+ * @example
+ * new KJUR.asn1.DEREnumerated(123);
+ * new KJUR.asn1.DEREnumerated({int: 123});
+ * new KJUR.asn1.DEREnumerated({hex: '1fad'});
+ */
+ KJUR.asn1.DEREnumerated = function (params) {
+ KJUR.asn1.DEREnumerated.superclass.constructor.call(this);
+ this.hT = "0a";
+
+ /**
+ * set value by Tom Wu's BigInteger object
+ * @name setByBigInteger
+ * @memberOf KJUR.asn1.DEREnumerated#
+ * @function
+ * @param {BigInteger} bigIntegerValue to set
+ */
+ this.setByBigInteger = function (bigIntegerValue) {
+ this.hTLV = null;
+ this.isModified = true;
+ this.hV = KJUR.asn1.ASN1Util.bigIntToMinTwosComplementsHex(bigIntegerValue);
+ };
+
+ /**
+ * set value by integer value
+ * @name setByInteger
+ * @memberOf KJUR.asn1.DEREnumerated#
+ * @function
+ * @param {Integer} integer value to set
+ */
+ this.setByInteger = function (intValue) {
+ var bi = new BigInteger(String(intValue), 10);
+ this.setByBigInteger(bi);
+ };
+
+ /**
+ * set value by integer value
+ * @name setValueHex
+ * @memberOf KJUR.asn1.DEREnumerated#
+ * @function
+ * @param {String} hexadecimal string of integer value
+ * @description
+ *
+ * NOTE: Value shall be represented by minimum octet length of
+ * two's complement representation.
+ */
+ this.setValueHex = function (newHexString) {
+ this.hV = newHexString;
+ };
+
+ this.getFreshValueHex = function () {
+ return this.hV;
+ };
+
+ if (typeof params != "undefined") {
+ if (typeof params['int'] != "undefined") {
+ this.setByInteger(params['int']);
+ } else if (typeof params == "number") {
+ this.setByInteger(params);
+ } else if (typeof params['hex'] != "undefined") {
+ this.setValueHex(params['hex']);
+ }
+ }
+ };
+ YAHOO.lang.extend(KJUR.asn1.DEREnumerated, KJUR.asn1.ASN1Object);
+
+ // ********************************************************************
+ /**
+ * class for ASN.1 DER UTF8String
+ * @name KJUR.asn1.DERUTF8String
+ * @class class for ASN.1 DER UTF8String
+ * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})
+ * @extends KJUR.asn1.DERAbstractString
+ * @description
+ * @see KJUR.asn1.DERAbstractString - superclass
+ */
+ KJUR.asn1.DERUTF8String = function (params) {
+ KJUR.asn1.DERUTF8String.superclass.constructor.call(this, params);
+ this.hT = "0c";
+ };
+ YAHOO.lang.extend(KJUR.asn1.DERUTF8String, KJUR.asn1.DERAbstractString);
+
+ // ********************************************************************
+ /**
+ * class for ASN.1 DER NumericString
+ * @name KJUR.asn1.DERNumericString
+ * @class class for ASN.1 DER NumericString
+ * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})
+ * @extends KJUR.asn1.DERAbstractString
+ * @description
+ * @see KJUR.asn1.DERAbstractString - superclass
+ */
+ KJUR.asn1.DERNumericString = function (params) {
+ KJUR.asn1.DERNumericString.superclass.constructor.call(this, params);
+ this.hT = "12";
+ };
+ YAHOO.lang.extend(KJUR.asn1.DERNumericString, KJUR.asn1.DERAbstractString);
+
+ // ********************************************************************
+ /**
+ * class for ASN.1 DER PrintableString
+ * @name KJUR.asn1.DERPrintableString
+ * @class class for ASN.1 DER PrintableString
+ * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})
+ * @extends KJUR.asn1.DERAbstractString
+ * @description
+ * @see KJUR.asn1.DERAbstractString - superclass
+ */
+ KJUR.asn1.DERPrintableString = function (params) {
+ KJUR.asn1.DERPrintableString.superclass.constructor.call(this, params);
+ this.hT = "13";
+ };
+ YAHOO.lang.extend(KJUR.asn1.DERPrintableString, KJUR.asn1.DERAbstractString);
+
+ // ********************************************************************
+ /**
+ * class for ASN.1 DER TeletexString
+ * @name KJUR.asn1.DERTeletexString
+ * @class class for ASN.1 DER TeletexString
+ * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})
+ * @extends KJUR.asn1.DERAbstractString
+ * @description
+ * @see KJUR.asn1.DERAbstractString - superclass
+ */
+ KJUR.asn1.DERTeletexString = function (params) {
+ KJUR.asn1.DERTeletexString.superclass.constructor.call(this, params);
+ this.hT = "14";
+ };
+ YAHOO.lang.extend(KJUR.asn1.DERTeletexString, KJUR.asn1.DERAbstractString);
+
+ // ********************************************************************
+ /**
+ * class for ASN.1 DER IA5String
+ * @name KJUR.asn1.DERIA5String
+ * @class class for ASN.1 DER IA5String
+ * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})
+ * @extends KJUR.asn1.DERAbstractString
+ * @description
+ * @see KJUR.asn1.DERAbstractString - superclass
+ */
+ KJUR.asn1.DERIA5String = function (params) {
+ KJUR.asn1.DERIA5String.superclass.constructor.call(this, params);
+ this.hT = "16";
+ };
+ YAHOO.lang.extend(KJUR.asn1.DERIA5String, KJUR.asn1.DERAbstractString);
+
+ // ********************************************************************
+ /**
+ * class for ASN.1 DER UTCTime
+ * @name KJUR.asn1.DERUTCTime
+ * @class class for ASN.1 DER UTCTime
+ * @param {Array} params associative array of parameters (ex. {'str': '130430235959Z'})
+ * @extends KJUR.asn1.DERAbstractTime
+ * @description
+ *
+ * As for argument 'params' for constructor, you can specify one of
+ * following properties:
+ *
+ * str - specify initial ASN.1 value(V) by a string (ex.'130430235959Z')
+ * hex - specify initial ASN.1 value(V) by a hexadecimal string
+ * date - specify Date object.
+ *
+ * NOTE: 'params' can be omitted.
+ * EXAMPLES
+ * @example
+ * d1 = new KJUR.asn1.DERUTCTime();
+ * d1.setString('130430125959Z');
+ *
+ * d2 = new KJUR.asn1.DERUTCTime({'str': '130430125959Z'});
+ * d3 = new KJUR.asn1.DERUTCTime({'date': new Date(Date.UTC(2015, 0, 31, 0, 0, 0, 0))});
+ * d4 = new KJUR.asn1.DERUTCTime('130430125959Z');
+ */
+ KJUR.asn1.DERUTCTime = function (params) {
+ KJUR.asn1.DERUTCTime.superclass.constructor.call(this, params);
+ this.hT = "17";
+
+ /**
+ * set value by a Date object
+ * @name setByDate
+ * @memberOf KJUR.asn1.DERUTCTime#
+ * @function
+ * @param {Date} dateObject Date object to set ASN.1 value(V)
+ * @example
+ * o = new KJUR.asn1.DERUTCTime();
+ * o.setByDate(new Date("2016/12/31"));
+ */
+ this.setByDate = function (dateObject) {
+ this.hTLV = null;
+ this.isModified = true;
+ this.date = dateObject;
+ this.s = this.formatDate(this.date, 'utc');
+ this.hV = stohex(this.s);
+ };
+
+ this.getFreshValueHex = function () {
+ if (typeof this.date == "undefined" && typeof this.s == "undefined") {
+ this.date = new Date();
+ this.s = this.formatDate(this.date, 'utc');
+ this.hV = stohex(this.s);
+ }
+ return this.hV;
+ };
+
+ if (params !== undefined) {
+ if (params.str !== undefined) {
+ this.setString(params.str);
+ } else if (typeof params == "string" && params.match(/^[0-9]{12}Z$/)) {
+ this.setString(params);
+ } else if (params.hex !== undefined) {
+ this.setStringHex(params.hex);
+ } else if (params.date !== undefined) {
+ this.setByDate(params.date);
+ }
+ }
+ };
+ YAHOO.lang.extend(KJUR.asn1.DERUTCTime, KJUR.asn1.DERAbstractTime);
+
+ // ********************************************************************
+ /**
+ * class for ASN.1 DER GeneralizedTime
+ * @name KJUR.asn1.DERGeneralizedTime
+ * @class class for ASN.1 DER GeneralizedTime
+ * @param {Array} params associative array of parameters (ex. {'str': '20130430235959Z'})
+ * @property {Boolean} withMillis flag to show milliseconds or not
+ * @extends KJUR.asn1.DERAbstractTime
+ * @description
+ *
+ * As for argument 'params' for constructor, you can specify one of
+ * following properties:
+ *
+ * str - specify initial ASN.1 value(V) by a string (ex.'20130430235959Z')
+ * hex - specify initial ASN.1 value(V) by a hexadecimal string
+ * date - specify Date object.
+ * millis - specify flag to show milliseconds (from 1.0.6)
+ *
+ * NOTE1: 'params' can be omitted.
+ * NOTE2: 'withMillis' property is supported from asn1 1.0.6.
+ */
+ KJUR.asn1.DERGeneralizedTime = function (params) {
+ KJUR.asn1.DERGeneralizedTime.superclass.constructor.call(this, params);
+ this.hT = "18";
+ this.withMillis = false;
+
+ /**
+ * set value by a Date object
+ * @name setByDate
+ * @memberOf KJUR.asn1.DERGeneralizedTime#
+ * @function
+ * @param {Date} dateObject Date object to set ASN.1 value(V)
+ * @example
+ * When you specify UTC time, use 'Date.UTC' method like this:
+ * o1 = new DERUTCTime();
+ * o1.setByDate(date);
+ *
+ * date = new Date(Date.UTC(2015, 0, 31, 23, 59, 59, 0)); #2015JAN31 23:59:59
+ */
+ this.setByDate = function (dateObject) {
+ this.hTLV = null;
+ this.isModified = true;
+ this.date = dateObject;
+ this.s = this.formatDate(this.date, 'gen', this.withMillis);
+ this.hV = stohex(this.s);
+ };
+
+ this.getFreshValueHex = function () {
+ if (this.date === undefined && this.s === undefined) {
+ this.date = new Date();
+ this.s = this.formatDate(this.date, 'gen', this.withMillis);
+ this.hV = stohex(this.s);
+ }
+ return this.hV;
+ };
+
+ if (params !== undefined) {
+ if (params.str !== undefined) {
+ this.setString(params.str);
+ } else if (typeof params == "string" && params.match(/^[0-9]{14}Z$/)) {
+ this.setString(params);
+ } else if (params.hex !== undefined) {
+ this.setStringHex(params.hex);
+ } else if (params.date !== undefined) {
+ this.setByDate(params.date);
+ }
+ if (params.millis === true) {
+ this.withMillis = true;
+ }
+ }
+ };
+ YAHOO.lang.extend(KJUR.asn1.DERGeneralizedTime, KJUR.asn1.DERAbstractTime);
+
+ // ********************************************************************
+ /**
+ * class for ASN.1 DER Sequence
+ * @name KJUR.asn1.DERSequence
+ * @class class for ASN.1 DER Sequence
+ * @extends KJUR.asn1.DERAbstractStructured
+ * @description
+ *
+ * As for argument 'params' for constructor, you can specify one of
+ * following properties:
+ *
+ * array - specify array of ASN1Object to set elements of content
+ *
+ * NOTE: 'params' can be omitted.
+ */
+ KJUR.asn1.DERSequence = function (params) {
+ KJUR.asn1.DERSequence.superclass.constructor.call(this, params);
+ this.hT = "30";
+ this.getFreshValueHex = function () {
+ var h = '';
+ for (var i = 0; i < this.asn1Array.length; i++) {
+ var asn1Obj = this.asn1Array[i];
+ h += asn1Obj.getEncodedHex();
+ }
+ this.hV = h;
+ return this.hV;
+ };
+ };
+ YAHOO.lang.extend(KJUR.asn1.DERSequence, KJUR.asn1.DERAbstractStructured);
+
+ // ********************************************************************
+ /**
+ * class for ASN.1 DER Set
+ * @name KJUR.asn1.DERSet
+ * @class class for ASN.1 DER Set
+ * @extends KJUR.asn1.DERAbstractStructured
+ * @description
+ *
+ * As for argument 'params' for constructor, you can specify one of
+ * following properties:
+ *
+ * array - specify array of ASN1Object to set elements of content
+ * sortflag - flag for sort (default: true). ASN.1 BER is not sorted in 'SET OF'.
+ *
+ * NOTE1: 'params' can be omitted.
+ * NOTE2: sortflag is supported since 1.0.5.
+ */
+ KJUR.asn1.DERSet = function (params) {
+ KJUR.asn1.DERSet.superclass.constructor.call(this, params);
+ this.hT = "31";
+ this.sortFlag = true; // item shall be sorted only in ASN.1 DER
+ this.getFreshValueHex = function () {
+ var a = new Array();
+ for (var i = 0; i < this.asn1Array.length; i++) {
+ var asn1Obj = this.asn1Array[i];
+ a.push(asn1Obj.getEncodedHex());
+ }
+ if (this.sortFlag == true) a.sort();
+ this.hV = a.join('');
+ return this.hV;
+ };
+
+ if (typeof params != "undefined") {
+ if (typeof params.sortflag != "undefined" &&
+ params.sortflag == false)
+ this.sortFlag = false;
+ }
+ };
+ YAHOO.lang.extend(KJUR.asn1.DERSet, KJUR.asn1.DERAbstractStructured);
+
+ // ********************************************************************
+ /**
+ * class for ASN.1 DER TaggedObject
+ * @name KJUR.asn1.DERTaggedObject
+ * @class class for ASN.1 DER TaggedObject
+ * @extends KJUR.asn1.ASN1Object
+ * @description
+ *
+ * Parameter 'tagNoNex' is ASN.1 tag(T) value for this object.
+ * For example, if you find '[1]' tag in a ASN.1 dump,
+ * 'tagNoHex' will be 'a1'.
+ *
+ * As for optional argument 'params' for constructor, you can specify *ANY* of
+ * following properties:
+ *
+ * explicit - specify true if this is explicit tag otherwise false
+ * (default is 'true').
+ * tag - specify tag (default is 'a0' which means [0])
+ * obj - specify ASN1Object which is tagged
+ *
+ * @example
+ * d1 = new KJUR.asn1.DERUTF8String({'str':'a'});
+ * d2 = new KJUR.asn1.DERTaggedObject({'obj': d1});
+ * hex = d2.getEncodedHex();
+ */
+ KJUR.asn1.DERTaggedObject = function (params) {
+ KJUR.asn1.DERTaggedObject.superclass.constructor.call(this);
+ this.hT = "a0";
+ this.hV = '';
+ this.isExplicit = true;
+ this.asn1Object = null;
+
+ /**
+ * set value by an ASN1Object
+ * @name setString
+ * @memberOf KJUR.asn1.DERTaggedObject#
+ * @function
+ * @param {Boolean} isExplicitFlag flag for explicit/implicit tag
+ * @param {Integer} tagNoHex hexadecimal string of ASN.1 tag
+ * @param {ASN1Object} asn1Object ASN.1 to encapsulate
+ */
+ this.setASN1Object = function (isExplicitFlag, tagNoHex, asn1Object) {
+ this.hT = tagNoHex;
+ this.isExplicit = isExplicitFlag;
+ this.asn1Object = asn1Object;
+ if (this.isExplicit) {
+ this.hV = this.asn1Object.getEncodedHex();
+ this.hTLV = null;
+ this.isModified = true;
+ } else {
+ this.hV = null;
+ this.hTLV = asn1Object.getEncodedHex();
+ this.hTLV = this.hTLV.replace(/^../, tagNoHex);
+ this.isModified = false;
+ }
+ };
+
+ this.getFreshValueHex = function () {
+ return this.hV;
+ };
+
+ if (typeof params != "undefined") {
+ if (typeof params['tag'] != "undefined") {
+ this.hT = params['tag'];
+ }
+ if (typeof params['explicit'] != "undefined") {
+ this.isExplicit = params['explicit'];
+ }
+ if (typeof params['obj'] != "undefined") {
+ this.asn1Object = params['obj'];
+ this.setASN1Object(this.isExplicit, this.hT, this.asn1Object);
+ }
+ }
+ };
+ YAHOO.lang.extend(KJUR.asn1.DERTaggedObject, KJUR.asn1.ASN1Object);
+
+ /**
+ * Create a new JSEncryptRSAKey that extends Tom Wu's RSA key object.
+ * This object is just a decorator for parsing the key parameter
+ * @param {string|Object} key - The key in string format, or an object containing
+ * the parameters needed to build a RSAKey object.
+ * @constructor
+ */
+ var JSEncryptRSAKey = /** @class */ (function (_super) {
+ __extends(JSEncryptRSAKey, _super);
+ function JSEncryptRSAKey (key) {
+ var _this = _super.call(this) || this;
+ // Call the super constructor.
+ // RSAKey.call(this);
+ // If a key key was provided.
+ if (key) {
+ // If this is a string...
+ if (typeof key === "string") {
+ _this.parseKey(key);
+ }
+ else if (JSEncryptRSAKey.hasPrivateKeyProperty(key) ||
+ JSEncryptRSAKey.hasPublicKeyProperty(key)) {
+ // Set the values for the key.
+ _this.parsePropertiesFrom(key);
+ }
+ }
+ return _this;
+ }
+ /**
+ * Method to parse a pem encoded string containing both a public or private key.
+ * The method will translate the pem encoded string in a der encoded string and
+ * will parse private key and public key parameters. This method accepts public key
+ * in the rsaencryption pkcs #1 format (oid: 1.2.840.113549.1.1.1).
+ *
+ * @todo Check how many rsa formats use the same format of pkcs #1.
+ *
+ * The format is defined as:
+ * PublicKeyInfo ::= SEQUENCE {
+ * algorithm AlgorithmIdentifier,
+ * PublicKey BIT STRING
+ * }
+ * Where AlgorithmIdentifier is:
+ * AlgorithmIdentifier ::= SEQUENCE {
+ * algorithm OBJECT IDENTIFIER, the OID of the enc algorithm
+ * parameters ANY DEFINED BY algorithm OPTIONAL (NULL for PKCS #1)
+ * }
+ * and PublicKey is a SEQUENCE encapsulated in a BIT STRING
+ * RSAPublicKey ::= SEQUENCE {
+ * modulus INTEGER, -- n
+ * publicExponent INTEGER -- e
+ * }
+ * it's possible to examine the structure of the keys obtained from openssl using
+ * an asn.1 dumper as the one used here to parse the components: http://lapo.it/asn1js/
+ * @argument {string} pem the pem encoded string, can include the BEGIN/END header/footer
+ * @private
+ */
+ JSEncryptRSAKey.prototype.parseKey = function (pem) {
+ try {
+ var modulus = 0;
+ var public_exponent = 0;
+ var reHex = /^\s*(?:[0-9A-Fa-f][0-9A-Fa-f]\s*)+$/;
+ var der = reHex.test(pem) ? Hex.decode(pem) : Base64.unarmor(pem);
+ var asn1 = ASN1.decode(der);
+ // Fixes a bug with OpenSSL 1.0+ private keys
+ if (asn1.sub.length === 3) {
+ asn1 = asn1.sub[2].sub[0];
+ }
+ if (asn1.sub.length === 9) {
+ // Parse the private key.
+ modulus = asn1.sub[1].getHexStringValue(); // bigint
+ this.n = parseBigInt(modulus, 16);
+ public_exponent = asn1.sub[2].getHexStringValue(); // int
+ this.e = parseInt(public_exponent, 16);
+ var private_exponent = asn1.sub[3].getHexStringValue(); // bigint
+ this.d = parseBigInt(private_exponent, 16);
+ var prime1 = asn1.sub[4].getHexStringValue(); // bigint
+ this.p = parseBigInt(prime1, 16);
+ var prime2 = asn1.sub[5].getHexStringValue(); // bigint
+ this.q = parseBigInt(prime2, 16);
+ var exponent1 = asn1.sub[6].getHexStringValue(); // bigint
+ this.dmp1 = parseBigInt(exponent1, 16);
+ var exponent2 = asn1.sub[7].getHexStringValue(); // bigint
+ this.dmq1 = parseBigInt(exponent2, 16);
+ var coefficient = asn1.sub[8].getHexStringValue(); // bigint
+ this.coeff = parseBigInt(coefficient, 16);
+ }
+ else if (asn1.sub.length === 2) {
+ // Parse the public key.
+ var bit_string = asn1.sub[1];
+ var sequence = bit_string.sub[0];
+ modulus = sequence.sub[0].getHexStringValue();
+ this.n = parseBigInt(modulus, 16);
+ public_exponent = sequence.sub[1].getHexStringValue();
+ this.e = parseInt(public_exponent, 16);
+ }
+ else {
+ return false;
+ }
+ return true;
+ }
+ catch (ex) {
+ return false;
+ }
+ };
+ /**
+ * Translate rsa parameters in a hex encoded string representing the rsa key.
+ *
+ * The translation follow the ASN.1 notation :
+ * RSAPrivateKey ::= SEQUENCE {
+ * version Version,
+ * modulus INTEGER, -- n
+ * publicExponent INTEGER, -- e
+ * privateExponent INTEGER, -- d
+ * prime1 INTEGER, -- p
+ * prime2 INTEGER, -- q
+ * exponent1 INTEGER, -- d mod (p1)
+ * exponent2 INTEGER, -- d mod (q-1)
+ * coefficient INTEGER, -- (inverse of q) mod p
+ * }
+ * @returns {string} DER Encoded String representing the rsa private key
+ * @private
+ */
+ JSEncryptRSAKey.prototype.getPrivateBaseKey = function () {
+ var options = {
+ array: [
+ new KJUR.asn1.DERInteger({ int: 0 }),
+ new KJUR.asn1.DERInteger({ bigint: this.n }),
+ new KJUR.asn1.DERInteger({ int: this.e }),
+ new KJUR.asn1.DERInteger({ bigint: this.d }),
+ new KJUR.asn1.DERInteger({ bigint: this.p }),
+ new KJUR.asn1.DERInteger({ bigint: this.q }),
+ new KJUR.asn1.DERInteger({ bigint: this.dmp1 }),
+ new KJUR.asn1.DERInteger({ bigint: this.dmq1 }),
+ new KJUR.asn1.DERInteger({ bigint: this.coeff })
+ ]
+ };
+ var seq = new KJUR.asn1.DERSequence(options);
+ return seq.getEncodedHex();
+ };
+ /**
+ * base64 (pem) encoded version of the DER encoded representation
+ * @returns {string} pem encoded representation without header and footer
+ * @public
+ */
+ JSEncryptRSAKey.prototype.getPrivateBaseKeyB64 = function () {
+ return hex2b64(this.getPrivateBaseKey());
+ };
+ /**
+ * Translate rsa parameters in a hex encoded string representing the rsa public key.
+ * The representation follow the ASN.1 notation :
+ * PublicKeyInfo ::= SEQUENCE {
+ * algorithm AlgorithmIdentifier,
+ * PublicKey BIT STRING
+ * }
+ * Where AlgorithmIdentifier is:
+ * AlgorithmIdentifier ::= SEQUENCE {
+ * algorithm OBJECT IDENTIFIER, the OID of the enc algorithm
+ * parameters ANY DEFINED BY algorithm OPTIONAL (NULL for PKCS #1)
+ * }
+ * and PublicKey is a SEQUENCE encapsulated in a BIT STRING
+ * RSAPublicKey ::= SEQUENCE {
+ * modulus INTEGER, -- n
+ * publicExponent INTEGER -- e
+ * }
+ * @returns {string} DER Encoded String representing the rsa public key
+ * @private
+ */
+ JSEncryptRSAKey.prototype.getPublicBaseKey = function () {
+ var first_sequence = new KJUR.asn1.DERSequence({
+ array: [
+ new KJUR.asn1.DERObjectIdentifier({ oid: "1.2.840.113549.1.1.1" }),
+ new KJUR.asn1.DERNull()
+ ]
+ });
+ var second_sequence = new KJUR.asn1.DERSequence({
+ array: [
+ new KJUR.asn1.DERInteger({ bigint: this.n }),
+ new KJUR.asn1.DERInteger({ int: this.e })
+ ]
+ });
+ var bit_string = new KJUR.asn1.DERBitString({
+ hex: "00" + second_sequence.getEncodedHex()
+ });
+ var seq = new KJUR.asn1.DERSequence({
+ array: [
+ first_sequence,
+ bit_string
+ ]
+ });
+ return seq.getEncodedHex();
+ };
+ /**
+ * base64 (pem) encoded version of the DER encoded representation
+ * @returns {string} pem encoded representation without header and footer
+ * @public
+ */
+ JSEncryptRSAKey.prototype.getPublicBaseKeyB64 = function () {
+ return hex2b64(this.getPublicBaseKey());
+ };
+ /**
+ * wrap the string in block of width chars. The default value for rsa keys is 64
+ * characters.
+ * @param {string} str the pem encoded string without header and footer
+ * @param {Number} [width=64] - the length the string has to be wrapped at
+ * @returns {string}
+ * @private
+ */
+ JSEncryptRSAKey.wordwrap = function (str, width) {
+ width = width || 64;
+ if (!str) {
+ return str;
+ }
+ var regex = "(.{1," + width + "})( +|$\n?)|(.{1," + width + "})";
+ return str.match(RegExp(regex, "g")).join("\n");
+ };
+ /**
+ * Retrieve the pem encoded private key
+ * @returns {string} the pem encoded private key with header/footer
+ * @public
+ */
+ JSEncryptRSAKey.prototype.getPrivateKey = function () {
+ var key = "-----BEGIN RSA PRIVATE KEY-----\n";
+ key += JSEncryptRSAKey.wordwrap(this.getPrivateBaseKeyB64()) + "\n";
+ key += "-----END RSA PRIVATE KEY-----";
+ return key;
+ };
+ /**
+ * Retrieve the pem encoded public key
+ * @returns {string} the pem encoded public key with header/footer
+ * @public
+ */
+ JSEncryptRSAKey.prototype.getPublicKey = function () {
+ var key = "-----BEGIN PUBLIC KEY-----\n";
+ key += JSEncryptRSAKey.wordwrap(this.getPublicBaseKeyB64()) + "\n";
+ key += "-----END PUBLIC KEY-----";
+ return key;
+ };
+ /**
+ * Check if the object contains the necessary parameters to populate the rsa modulus
+ * and public exponent parameters.
+ * @param {Object} [obj={}] - An object that may contain the two public key
+ * parameters
+ * @returns {boolean} true if the object contains both the modulus and the public exponent
+ * properties (n and e)
+ * @todo check for types of n and e. N should be a parseable bigInt object, E should
+ * be a parseable integer number
+ * @private
+ */
+ JSEncryptRSAKey.hasPublicKeyProperty = function (obj) {
+ obj = obj || {};
+ return (obj.hasOwnProperty("n") &&
+ obj.hasOwnProperty("e"));
+ };
+ /**
+ * Check if the object contains ALL the parameters of an RSA key.
+ * @param {Object} [obj={}] - An object that may contain nine rsa key
+ * parameters
+ * @returns {boolean} true if the object contains all the parameters needed
+ * @todo check for types of the parameters all the parameters but the public exponent
+ * should be parseable bigint objects, the public exponent should be a parseable integer number
+ * @private
+ */
+ JSEncryptRSAKey.hasPrivateKeyProperty = function (obj) {
+ obj = obj || {};
+ return (obj.hasOwnProperty("n") &&
+ obj.hasOwnProperty("e") &&
+ obj.hasOwnProperty("d") &&
+ obj.hasOwnProperty("p") &&
+ obj.hasOwnProperty("q") &&
+ obj.hasOwnProperty("dmp1") &&
+ obj.hasOwnProperty("dmq1") &&
+ obj.hasOwnProperty("coeff"));
+ };
+ /**
+ * Parse the properties of obj in the current rsa object. Obj should AT LEAST
+ * include the modulus and public exponent (n, e) parameters.
+ * @param {Object} obj - the object containing rsa parameters
+ * @private
+ */
+ JSEncryptRSAKey.prototype.parsePropertiesFrom = function (obj) {
+ this.n = obj.n;
+ this.e = obj.e;
+ if (obj.hasOwnProperty("d")) {
+ this.d = obj.d;
+ this.p = obj.p;
+ this.q = obj.q;
+ this.dmp1 = obj.dmp1;
+ this.dmq1 = obj.dmq1;
+ this.coeff = obj.coeff;
+ }
+ };
+ return JSEncryptRSAKey;
+ }(RSAKey));
+
+ /**
+ *
+ * @param {Object} [options = {}] - An object to customize JSEncrypt behaviour
+ * possible parameters are:
+ * - default_key_size {number} default: 1024 the key size in bit
+ * - default_public_exponent {string} default: '010001' the hexadecimal representation of the public exponent
+ * - log {boolean} default: false whether log warn/error or not
+ * @constructor
+ */
+ var JSEncrypt = /** @class */ (function () {
+ function JSEncrypt (options) {
+ options = options || {};
+ this.default_key_size = parseInt(options.default_key_size, 10) || 1024;
+ this.default_public_exponent = options.default_public_exponent || "010001"; // 65537 default openssl public exponent for rsa key type
+ this.log = options.log || false;
+ // The private and public key.
+ this.key = null;
+ }
+ /**
+ * Method to set the rsa key parameter (one method is enough to set both the public
+ * and the private key, since the private key contains the public key paramenters)
+ * Log a warning if logs are enabled
+ * @param {Object|string} key the pem encoded string or an object (with or without header/footer)
+ * @public
+ */
+ JSEncrypt.prototype.setKey = function (key) {
+ if (this.log && this.key) {
+ console.warn("A key was already set, overriding existing.");
+ }
+ this.key = new JSEncryptRSAKey(key);
+ };
+ /**
+ * Proxy method for setKey, for api compatibility
+ * @see setKey
+ * @public
+ */
+ JSEncrypt.prototype.setPrivateKey = function (privkey) {
+ // Create the key.
+ this.setKey(privkey);
+ };
+ /**
+ * Proxy method for setKey, for api compatibility
+ * @see setKey
+ * @public
+ */
+ JSEncrypt.prototype.setPublicKey = function (pubkey) {
+ // Sets the public key.
+ this.setKey(pubkey);
+ };
+ /**
+ * Proxy method for RSAKey object's decrypt, decrypt the string using the private
+ * components of the rsa key object. Note that if the object was not set will be created
+ * on the fly (by the getKey method) using the parameters passed in the JSEncrypt constructor
+ * @param {string} str base64 encoded crypted string to decrypt
+ * @return {string} the decrypted string
+ * @public
+ */
+ JSEncrypt.prototype.decrypt = function (str) {
+ // Return the decrypted string.
+ try {
+ return this.getKey().decrypt(b64tohex(str));
+ }
+ catch (ex) {
+ return false;
+ }
+ };
+ /**
+ * Proxy method for RSAKey object's encrypt, encrypt the string using the public
+ * components of the rsa key object. Note that if the object was not set will be created
+ * on the fly (by the getKey method) using the parameters passed in the JSEncrypt constructor
+ * @param {string} str the string to encrypt
+ * @return {string} the encrypted string encoded in base64
+ * @public
+ */
+ JSEncrypt.prototype.encrypt = function (str) {
+ // Return the encrypted string.
+ try {
+ return hex2b64(this.getKey().encrypt(str));
+ }
+ catch (ex) {
+ return false;
+ }
+ };
+ /**
+ * Proxy method for RSAKey object's sign.
+ * @param {string} str the string to sign
+ * @param {function} digestMethod hash method
+ * @param {string} digestName the name of the hash algorithm
+ * @return {string} the signature encoded in base64
+ * @public
+ */
+ JSEncrypt.prototype.sign = function (str, digestMethod, digestName) {
+ // return the RSA signature of 'str' in 'hex' format.
+ try {
+ return hex2b64(this.getKey().sign(str, digestMethod, digestName));
+ }
+ catch (ex) {
+ return false;
+ }
+ };
+ /**
+ * Proxy method for RSAKey object's verify.
+ * @param {string} str the string to verify
+ * @param {string} signature the signature encoded in base64 to compare the string to
+ * @param {function} digestMethod hash method
+ * @return {boolean} whether the data and signature match
+ * @public
+ */
+ JSEncrypt.prototype.verify = function (str, signature, digestMethod) {
+ // Return the decrypted 'digest' of the signature.
+ try {
+ return this.getKey().verify(str, b64tohex(signature), digestMethod);
+ }
+ catch (ex) {
+ return false;
+ }
+ };
+ /**
+ * Getter for the current JSEncryptRSAKey object. If it doesn't exists a new object
+ * will be created and returned
+ * @param {callback} [cb] the callback to be called if we want the key to be generated
+ * in an async fashion
+ * @returns {JSEncryptRSAKey} the JSEncryptRSAKey object
+ * @public
+ */
+ JSEncrypt.prototype.getKey = function (cb) {
+ // Only create new if it does not exist.
+ if (!this.key) {
+ // Get a new private key.
+ this.key = new JSEncryptRSAKey();
+ if (cb && {}.toString.call(cb) === "[object Function]") {
+ this.key.generateAsync(this.default_key_size, this.default_public_exponent, cb);
+ return;
+ }
+ // Generate the key.
+ this.key.generate(this.default_key_size, this.default_public_exponent);
+ }
+ return this.key;
+ };
+ /**
+ * Returns the pem encoded representation of the private key
+ * If the key doesn't exists a new key will be created
+ * @returns {string} pem encoded representation of the private key WITH header and footer
+ * @public
+ */
+ JSEncrypt.prototype.getPrivateKey = function () {
+ // Return the private representation of this key.
+ return this.getKey().getPrivateKey();
+ };
+ /**
+ * Returns the pem encoded representation of the private key
+ * If the key doesn't exists a new key will be created
+ * @returns {string} pem encoded representation of the private key WITHOUT header and footer
+ * @public
+ */
+ JSEncrypt.prototype.getPrivateKeyB64 = function () {
+ // Return the private representation of this key.
+ return this.getKey().getPrivateBaseKeyB64();
+ };
+ /**
+ * Returns the pem encoded representation of the public key
+ * If the key doesn't exists a new key will be created
+ * @returns {string} pem encoded representation of the public key WITH header and footer
+ * @public
+ */
+ JSEncrypt.prototype.getPublicKey = function () {
+ // Return the private representation of this key.
+ return this.getKey().getPublicKey();
+ };
+ /**
+ * Returns the pem encoded representation of the public key
+ * If the key doesn't exists a new key will be created
+ * @returns {string} pem encoded representation of the public key WITHOUT header and footer
+ * @public
+ */
+ JSEncrypt.prototype.getPublicKeyB64 = function () {
+ // Return the private representation of this key.
+ return this.getKey().getPublicBaseKeyB64();
+ };
+ JSEncrypt.version = "3.0.0-rc.1";
+ return JSEncrypt;
+ }());
+
+ window.JSEncrypt = JSEncrypt;
+ exports.JSEncrypt = JSEncrypt;
+ exports.default = JSEncrypt;
+ Object.defineProperty(exports, '__esModule', { value: true });
+
+})));
\ No newline at end of file
diff --git a/src/api/index.ts b/src/api/index.ts
new file mode 100644
index 0000000..0cce3ec
--- /dev/null
+++ b/src/api/index.ts
@@ -0,0 +1,674 @@
+import Http from '@/util/axios'
+import {decrypt} from './data-analysis'
+import md5 from 'md5';
+
+const prefix = '/zero2/myships'
+const icdPrefix = 'https://sinoagent.i.sinotrans.com' // 生产
+// const icdPrefix = 'http://sinoicd.i.sinotrans.com' // 测试
+class Api {
+
+ public getInfoByDestPort(data: any) {
+ return Http.post(prefix + '/sp/ports/getDestPort', data).then((res: any) => {
+ const DesKey = res.headers.deskey
+ const data = decrypt(res.data, DesKey)
+ if (data.code === '0') {
+ return data.data
+ }
+ })
+ }
+
+ /**
+ * 查询单日新增靠泊船舶列表
+ */
+ public getBerthsOfNumber(data: any) {
+ return Http.post(prefix + '/exapi/berth/berth/vessel', data).then((res: any) => {
+ const DesKey = res.headers.deskey
+ const data = decrypt(res.data, DesKey)
+ if (data.code === '0') {
+ return data.data
+ }
+ })
+ }
+
+ /**
+ * 查询单日港外待靠泊数量及时长
+ */
+ public getMoorsOfNumber(data: any) {
+ return Http.post(prefix + '/exapi/berth/wait/num', data).then((res: any) => {
+ const DesKey = res.headers.deskey
+ const data = decrypt(res.data, DesKey)
+ if (data.code === '0') {
+ return data.data
+ }
+ })
+ }
+
+ /**
+ * 4.2查询单日新增离泊数量及靠泊时长
+ * @param data
+ */
+ public getLeaveBerth(data: any) {
+ return Http.post(prefix + '/exapi/berth/unberth/num', data).then((res: any) => {
+ const DesKey = res.headers.deskey
+ const data = decrypt(res.data, DesKey)
+ if (data.code === '0') {
+ return data.data
+ }
+ })
+ }
+
+ /**
+ * 获取船舶事件
+ * @param data
+ */
+ public getShipEvent(data: any) {
+ return Http.post(prefix + '/sp/ships/ihs/event', data).then((res: any) => {
+ const DesKey = res.headers.deskey
+ const data = decrypt(res.data, DesKey)
+ if (data.code === '0') {
+ return data.data
+ }
+ })
+ }
+
+ /**
+ * 集装箱查询接口
+ * @param data
+ */
+ public getContainersScreening(data: any) {
+ return Http.post(prefix + '/exapi/movements/containersScreening', data).then((res: any) => {
+ const DesKey = res.headers.deskey
+ const data = decrypt(res.data, DesKey)
+ if (data.code === '0') {
+ return data.data
+ }
+ })
+ }
+
+ /**
+ * 提单号查询接口
+ * @param data
+ */
+ public getContainersBillOfLadingScreening(data: any) {
+ return Http.post(prefix + '/exapi/movements/billofLadingScreening', data).then((res: any) => {
+ const DesKey = res.headers.deskey
+ const data = decrypt(res.data, DesKey)
+ if (data.code === '0') {
+ return data.data
+ }
+ })
+ }
+
+ /**
+ * 获取内贸船舶信息
+ * @param data
+ */
+ public getInnerShipData(data: string) {
+ return Http.post(prefix + '/sp/ships/cert/mmsi', {mmsi: data}).then((res: any) => {
+ const DesKey = res.headers.deskey
+ const data = decrypt(res.data, DesKey)
+ if (data.code === '0') {
+ return data.data
+ }
+ })
+ }
+
+ /**
+ * 查询具体船舶静态详情
+ * @param data 参数
+ */
+ public async getShipMessage(data: any) {
+ return await Http.post(prefix + '/sp/ships/posAndAissta', data).then((res: any) => {
+ const DesKey = res.headers.deskey
+ const data = decrypt(res.data, DesKey)
+ if (data.code === '0') {
+ return data.data
+ }
+ })
+ }
+
+ /**
+ * 模糊搜索 AIS 船舶库
+ * @param data 参数
+ */
+ public async searchBoathouse(data: any) {
+ let shipData: any[] = []
+
+ await Http.post(prefix + '/sp/search/shipAisWithTime', data).then((res: any) => {
+ const data = this.decryptUtil(res)
+ if (data.code) {
+ shipData = data.data
+ this.searchDictionary('2').then((res: any) => {
+ if (res) {
+ shipData.forEach((item2: any) => {
+ for (let i = 0, j = res.length; i < j; i++) {
+ if (item2.aisShiptypeId + '' === res[i].id + '') {
+ item2.type = res[i].valueChs
+ }
+ if (!item2.type) {
+ item2.type = '其他类型'
+ }
+ }
+ })
+ }
+ })
+ }
+ })
+ return shipData
+ }
+
+ /**
+ * 模糊查询港口
+ * @param keyword
+ */
+ public searchPortKeyWord(keyword: any) {
+ return Http.post(prefix + '/sp/search/ports', {keyword: keyword})
+ }
+
+ /**
+ * 到港查询
+ * @param data
+ */
+ public getArrivePortQuery(data: any) {
+ return Http.post(prefix + '/sp/ports/arrivalStatistics', data).then((res: any) => {
+ const DesKey = res.headers.deskey
+ const data = decrypt(res.data, DesKey)
+ if (data.code === '0') {
+ return data.data
+ }
+ }).catch((err) => {
+ return err
+ })
+ }
+
+ /**
+ * 离港查询
+ * @param data
+ */
+ public getLeavePortQuery(data: any) {
+ return Http.post(prefix + '/sp/ports/departureStatistics', data).then((res: any) => {
+ const DesKey = res.headers.deskey
+ const data = decrypt(res.data, DesKey)
+ if (data.code === '0') {
+ return data.data
+ }
+ }).catch((err) => {
+ return err
+ })
+ }
+
+ /**
+ * 预计到港查询
+ * @param data
+ */
+ public getYjPortQuery(data: any) {
+ return Http.post(prefix + '/sp/ports/expectedArrivalStatistics', data).then((res: any) => {
+ const DesKey = res.headers.deskey
+ const data = decrypt(res.data, DesKey)
+ if (data.code === '0') {
+ return data.data
+ }
+ }).catch((err) => {
+ return err
+ })
+ }
+
+ public getPortList(data: any) {
+ data.portLevelId = '1'
+ return Http.post(prefix + '/sp/ports/search', data).then((res: any) => {
+ const DesKey = res.headers.deskey
+ const data = decrypt(res.data, DesKey)
+ if (data.code === '0') {
+ return data.data
+ }
+ })
+ }
+
+ public getPortWeather(data: any) {
+ return Http.post(prefix + '/exapi/weather/singleMomentData', data).then((res: any) => {
+ const DesKey = res.headers.deskey
+ const data = decrypt(res.data, DesKey)
+ if (data.code === '0') {
+ return data.data
+ }
+ })
+ }
+
+ public getWeather(data: any) {
+ return Http.post(prefix + '/exapi/weather/singleMomentData', data).then((res: any) => {
+ const DesKey = res.headers.deskey
+ const data = decrypt(res.data, DesKey)
+ if (data.code === '0') {
+ return data.data
+ }
+ })
+ }
+
+ /**
+ * 获取字典
+ * type
+ * 1: // 获取船舶国籍字典
+ * 2: // 获取船舶类型字典
+ * 3: // 获取航行状态字典
+ */
+ public searchDictionary(type: string) {
+ const param: { name: string } = {name: ''}
+ if (type === '1') {
+ param.name = 'ais_nationality_id'
+ } else if (type === '2') {
+ param.name = 'ais_ship_type_id'
+ } else if (type === '3') {
+ param.name = 'ais_nav_status_id'
+ }
+ return Http.post(prefix + '/sp/dict', param).then((res: any) => {
+ const data = this.decryptUtil(res)
+ if (data.code === '0') {
+ return data.data
+ }
+ })
+ }
+
+ /**
+ * 查询船舶历史轨迹
+ * @param data
+ */
+ public getHistoryTrack(data: any) {
+ return Http.post(prefix + '/sp/ships/position/history', data).then((res: any) => {
+ const data = this.decryptUtil(res)
+ if (data.code === '0') {
+ return data.data
+ }
+ })
+ }
+
+ public getShipHistoryInterval(data: any) {
+ return Http.post(prefix + '/sp/ships/position/history/intervalHour', data).then((res: any) => {
+ const data = this.decryptUtil(res)
+ if (data.code === '0') {
+ return data.data
+ }
+ })
+ }
+
+ /**
+ * 获取最新的提醒新信息
+ * @param data
+ */
+ public getLastRemindInfo(data: any) {
+ return Http.post(prefix + '/ms/event/getAllEventByTime', data).then((res: any) => {
+ const data = this.decryptUtil(res)
+ return data
+ })
+ }
+
+ /**
+ * 获取船舶港口历史
+ * @param data
+ */
+ public getShipPort(data: any) {
+ return Http.post(prefix + '/sp/ships/port/history', data).then((res: any) => {
+ const data = this.decryptUtil(res)
+ if (data.code === '0') {
+ return data.data
+ }
+ })
+ }
+
+ public getShipCnName(data: any) {
+ return Http.post(prefix + '/sp/ships/getCnNameByMMSI', data).then((res: any) => {
+ const data = this.decryptUtil(res)
+ if (data.code === '0') {
+ return data.data
+ }
+ })
+ }
+
+ public getDestPort(data: any) {
+ return Http.post(prefix + '/sp/ports/getDestPort', data).then((res: any) => {
+ const data = this.decryptUtil(res)
+ if (data.code === '0') {
+ return data.data
+ }
+ })
+ }
+
+ /**
+ * 获取数据分析图片地址
+ * @param data
+ * @private
+ */
+ public getDataAnalysisImg(data: any) {
+ return Http.post(prefix + '/uc/public/getMotImg', data).then((res: any) => {
+ const data = this.decryptUtil(res)
+ if (data.code === '0') {
+ return data.data.url
+ }
+ })
+ }
+
+ /**
+ * 获取最新的提醒消息
+ * @param data
+ */
+ public getMessageLast(data: any) {
+ return Http.post(prefix + '/ms/event/getLatestAreaEvent', data).then((res: any) => {
+ const data = this.decryptUtil(res)
+ if (data.code === '0') {
+ return data.data
+ }
+ })
+ }
+
+ /**
+ * 获取船舶挂靠港记录
+ * @param data
+ */
+ public getPortReport(data: any) {
+ return Http.post(prefix + '/sp/auth/ships/port/v2/history_api', data).then((res: any) => {
+ const data = this.decryptUtil(res)
+ if (data.code === '0') {
+ return data.data
+ }
+ })
+ }
+
+ /**
+ * 获取用户区域列表菜单
+ * @param data
+ */
+ public getAreaMenuList(data: any) {
+ return Http.post(prefix + '/ms/label/getAreaGroup', data).then((res: any) => {
+ const data = this.decryptUtil(res)
+ if (data.code === '0') {
+ return data.data
+ }
+ })
+ }
+
+ /**
+ * 查询区域范围内的船舶数据
+ */
+ public getAreaData(data: any) {
+ return Http.post(prefix + '/sp/auth/region/latest/dataAalysis', data).then((res: any) => {
+ const data = this.decryptUtil(res)
+ if (data.code === '0') {
+ return data.data
+ }
+ })
+ }
+
+ /**
+ * 获取船队数据
+ */
+ public async getShipRanks(data: any) {
+ return await Http.post(prefix + '/ms/business/getFollowShip', data).then((res: any) => {
+ const data = this.decryptUtil(res)
+ if (data.code === '0') {
+ return data.data
+ }
+ })
+ }
+
+ private decryptUtil(data: any) {
+ const DesKey = data.headers['deskey']
+ return decrypt(data.data, DesKey)
+ }
+
+ /**
+ * 模糊查询港口信息
+ * @param keyword
+ */
+ public getPort(keyword: string) {
+ return Http.post(prefix + '/sp/search/ports', {keyword: keyword}).then((res: any) => {
+ const data = this.decryptUtil(res)
+ if (data.code === '0') {
+ return data.data
+ }
+ })
+ }
+
+ /**
+ * 通过港口id获取港口的信息
+ * @param data
+ */
+ public getPortInfo(data: any) {
+ return Http.post(prefix + '/sp/ports/ihs/port', {portId: data}).then((res: any) => {
+ const result = this.decryptUtil(res)
+ if (result.code === '0') {
+ return result.data
+ }
+ })
+ }
+
+ public getShipRouteSearch(data: any) {
+ return Http.post(prefix + '/exapi/shipRoute/search', data).then((res: any) => {
+ const result = this.decryptUtil(res)
+ if (result.code === '0') {
+ return result
+ }
+ })
+ }
+
+ public getFollowFlag(data: any) {
+ return Http.post(prefix + '/ms/shipRoute/getFollowFlag', data)
+ }
+
+ public getPortRouteList() {
+ return Http.post(prefix + '/ms/shipRoute/getFollow', 'POST', {})
+ }
+
+ public getRouteInfo(data: any) {
+ return Http.post(prefix + '/ms/shipRoute/get', data)
+ }
+
+ public getStatusTrack(data: any) {
+ return Http.post(prefix + '/exapi/shipRoute/statusTrack', data).then((res: any) => {
+ const result = this.decryptUtil(res)
+ if (result.code === '0') {
+ return result
+ }
+ })
+ }
+
+ public getShipDoc(data: any) {
+ return Http.post(prefix + '/sp/ihs/v2/shipArchive', data).then((res: any) => {
+ const result = this.decryptUtil(res)
+ if (result.code === '0') {
+ return result.data
+ }
+ })
+ }
+
+ public testToken(appToken: string) {
+ return Http.get(icdPrefix + '/isa/sysClient/checkToken?appToken=' + appToken).then((res: any) => {
+ return res.data
+ })
+ }
+
+ public getShipFleet(token: string, companyId: string) {
+ return Http.get(icdPrefix + '/isa/sysClientFleet/getShipsMmsi?companyId=' + companyId, {
+ headers: {
+ Authorization: token
+ }
+ }).then((res: any) => {
+ return res.data
+ })
+ }
+
+ public getShipIdByMmmsi(mmsi: string) {
+ return Http.post(prefix + '/sp/ships/getShipIdByMMSI', {mmsiList: mmsi}).then((res: any) => {
+ const result = this.decryptUtil(res)
+ if (result.code === '0') {
+ return result
+ }
+ })
+ }
+
+ /**
+ * 根据mmsi查询船舶静态信息
+ * @param mmsi
+ */
+ public getShipBymmsi(mmsi: string) {
+ return Http.post(prefix + '/sp/auth/ships/getAisStaticLatest', {mmsiList: mmsi}).then((res: any) => {
+ const result = this.decryptUtil(res)
+ if (result.code === '0') {
+ return result
+ }
+ })
+ }
+
+ /**
+ * 预测船舶目的港及剩余里程和时长
+ */
+ public getPredictTime(data: any) {
+ return Http.post(prefix + '/exapi/shipRoute/predict', data).then((res: any) => {
+ const result = this.decryptUtil(res)
+ if (result.code === '0') {
+ return result
+ }
+ })
+ }
+
+ /**
+ * 获取台风列表
+ */
+ public getTyphoonList() {
+ return Http.post(prefix + '/weather/typhoonList', {daysnumber: -1}).then((res: any) => {
+ const result = this.decryptUtil(res)
+ if (result.code === '0') {
+ return result
+ }
+ })
+ }
+
+ /**
+ * 获取台风详情
+ */
+ public getTyphoonInfo(id: string) {
+ return Http.post(prefix + '/weather/typhoonData', {id: id}).then((res: any) => {
+ const result = this.decryptUtil(res)
+ if (result.code === '0') {
+ return result
+ }
+ })
+ }
+
+ /**
+ * 根据节点查询航线路由
+ */
+ public getRouteByNodes(data: any) {
+ return Http.post(prefix + '/exapi/shipRoute/routingNodes', data).then((res: any) => {
+ const result = this.decryptUtil(res)
+ if (result.code === '0') {
+ return result
+ }
+ })
+ }
+
+ /**
+ * 通告预警地区和分类标签下通告预警条数(用于柱状图)
+ */
+ public getIncidentCount() {
+ const id = 'al00009'
+ const key = '99bd0e09e068a19600fb4ef1e1890200'
+ const time = parseInt(new Date().getTime() / 1000 + '')
+ return Http.post('https://talk.anlantech.cn/standard/incident/count', {}, {
+ headers: {
+ 'anlan-version': 'v2',
+ 'anlan-appid': id,
+ 'anlan-timestamp': time,
+ 'anlan-token': md5('' + id + time + key)
+ }
+ }).then((res) => {
+ return res.data
+ })
+ }
+
+ /**
+ * 通告预警地区和分类标签下通告预警条数(用于柱状图)
+ */
+ public getIncidentInfo(param?: any) {
+ const id = 'al00009'
+ const key = '99bd0e09e068a19600fb4ef1e1890200'
+ const time = parseInt(new Date().getTime() / 1000 + '')
+ let typeIds = param && param.typeIds ? param.typeIds : '';
+ let org = param && param.org ? param.org : '';
+ let begin = param && param.begin ? param.begin : '';
+ let end = param && param.end ? param.end : '';
+ let page = param && param.page ? param.page : '';
+ let size = param && param.size ? param.size : '';
+ return Http.get('https://talk.anlantech.cn/standard/incidentInfo?' + `typeIds=${typeIds}&org=${org}&begin=${begin}&end=${end}&page=${page}&size=${size}`, {
+ headers: {
+ 'anlan-version': 'v2',
+ 'anlan-appid': id,
+ 'anlan-timestamp': time,
+ 'anlan-token': md5('' + id + time + key)
+ }
+ }).then((res) => {
+ return res.data
+ })
+ }
+
+ /**
+ * 分类标签地址
+ */
+ public getIncidentTypeTags() {
+ const id = 'al00009'
+ const key = '99bd0e09e068a19600fb4ef1e1890200'
+ const time = parseInt(new Date().getTime() / 1000 + '')
+ return Http.get('https://talk.anlantech.cn/standard/incident/tags', {
+ headers: {
+ 'anlan-version': 'v2',
+ 'anlan-appid': id,
+ 'anlan-timestamp': time,
+ 'anlan-token': md5('' + id + time + key)
+ }
+ }).then((res) => {
+ return res.data
+ })
+ }
+
+ /**
+ * 地区列表地址
+ */
+ public getIncidentOrgsTags() {
+ const id = 'al00009'
+ const key = '99bd0e09e068a19600fb4ef1e1890200'
+ const time = parseInt(new Date().getTime() / 1000 + '')
+ return Http.get('https://talk.anlantech.cn/standard/incident/orgs', {
+ headers: {
+ 'anlan-version': 'v2',
+ 'anlan-appid': id,
+ 'anlan-timestamp': time,
+ 'anlan-token': md5('' + id + time + key)
+ }
+ }).then((res) => {
+ return res.data
+ })
+ }
+
+ /**
+ * 获取车辆信息
+ */
+ // public getCarInfo() {
+ // return Http.post('/car/carhisttrack/car/track/getCarHistoricalTrackSingle',{carNum: '琼A2AJ02'}).then((res: any) => {
+ // console.log(res)
+ // })
+ // }
+ /**
+ * 获取车辆信息
+ */
+ public getCarInfo() {
+ return Http.post('/zero2/car/carhisttrack/car/track/getCarHistoricalTrack').then((res: any) => {
+ return res.data
+ })
+ }
+ public getCarTrack (data: any) {
+ return Http.post('/zeroi/free/freetrade/api/getCarTrack', data).then(res => {
+ return res.data
+ })
+ }
+}
+
+const HttpApi = new Api()
+export default HttpApi
diff --git a/src/components/arrive-leave-query/index.vue b/src/components/arrive-leave-query/index.vue
new file mode 100644
index 0000000..578b603
--- /dev/null
+++ b/src/components/arrive-leave-query/index.vue
@@ -0,0 +1,1066 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
{{ $t('message.arriveLeave.export') }}
+
+
+
+
+ {{ scope.row.shipNameEn || scope.row.shipName }}
+
+
+
+
+
+
+
+
+
+ {{ language === 'zh' ? filterShipType(scope.row.shipType) : filterShipType(scope.row.shipType, true) }}
+
+
+
+
+ {{ (Number(scope.row.inDraught / 10) || Number(scope.row.outDraught / 10)) + 'm' }}
+
+
+
+
+ {{ Number(scope.row.draught / 10) + 'm' }}
+
+
+
+
+ {{ Number(scope.row.sog / 10) + 'kn' }}
+
+
+
+
+
+
+
+
+
+
+ {{ dateFormat(Number(scope.row.time)) }}
+
+
+
+
+ {{ dateFormat(Number(scope.row.time)) }}
+
+
+
+
+ {{ Number(scope.row.shipLength) + 'm' }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ dateFormat(Number(scope.row.lastOutTime)) }}
+
+
+
+
+ {{ dateFormat(Number(scope.row.nextInTime)) }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/dialog/index.vue b/src/components/dialog/index.vue
new file mode 100644
index 0000000..8d43781
--- /dev/null
+++ b/src/components/dialog/index.vue
@@ -0,0 +1,193 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/header/index.vue b/src/components/header/index.vue
new file mode 100644
index 0000000..c6447c7
--- /dev/null
+++ b/src/components/header/index.vue
@@ -0,0 +1,179 @@
+
+
+
+
+
+
+
diff --git a/src/components/menu/analysis.ts b/src/components/menu/analysis.ts
new file mode 100644
index 0000000..2b54121
--- /dev/null
+++ b/src/components/menu/analysis.ts
@@ -0,0 +1,96 @@
+import {MenuType} from "@/module/menu";
+import HttpApi from "@/api";
+import {Vue} from "vue-property-decorator";
+
+interface MenuOption {
+ title: string,
+ icon: string,
+ children: MenuOption[],
+ type: string,
+
+ [key: string]: any
+}
+
+const config = require('../../../public/config/menu.json')
+const menu: MenuType[] = config.menu
+const menuList: MenuType[] = []
+
+function analysisMenu(menus: MenuType[]) {
+ for (let i = 0; i < menus.length; i++) {
+ const menuItem = menus[i]
+ if (menuItem.open) {
+ if (!menuItem.children.length) {
+ // if (menuItem.nameEn === 'My Fleets' && !Vue.prototype.$myFleet.length) {
+ // continue
+ // }
+ menuList.push(menuItem)
+ } else {
+ menuList.push(analysisMenuChildren(menuItem))
+ }
+ }
+
+ }
+}
+
+function analysisMenuChildren(menu: MenuType) {
+ const menuTemp: MenuType = JSON.parse(JSON.stringify(menu));
+ menuTemp.children = []
+ for (let child of menu.children) {
+ if (child.open) {
+ if (!child.children.length) {
+ menuTemp.children.push(child)
+ } else {
+ menuTemp.children.push(analysisMenuChildren(child))
+ }
+ }
+ }
+ return menuTemp
+}
+
+analysisMenu(menu)
+
+HttpApi.getAreaMenuList({}).then((res: any) => {
+ if (res) {
+ const tempMenuAll: MenuOption[] = []
+ res.forEach((item: any, index1: number) => {
+ const tempData: MenuOption = {
+ title: item.name,
+ id: item.id,
+ index: 'area-' + index1,
+ icon: '',
+ children: [],
+ type: 'AreaListTemp',
+ hasMini: false
+ }
+ if (item.tsCustomAreaList) {
+ item.tsCustomAreaList.forEach((res: any, index: any) => {
+ const tempData2: MenuOption = {
+ title: '',
+ icon: '',
+ children: [],
+ type: 'AreaListTemp',
+ hasMini: false
+ }
+ tempData2.title = res.name
+ tempData2.area = res.area
+ tempData2.cLat = res.cLat
+ tempData2.cLon = res.cLon
+ tempData2.cagid = res.cagid
+ tempData2.check = res.check
+ tempData2.id = res.id
+ tempData2.useType = res.useType
+ tempData2.index = 'area-' + index1 + '-' + index
+ tempData.children.push(tempData2)
+ })
+ }
+ tempMenuAll.push(tempData)
+ })
+
+ menuList.forEach((item: any) => {
+ if (item.title === '区域列表') {
+ item.children = tempMenuAll
+ }
+ })
+ }
+})
+export {menuList}
diff --git a/src/components/menu/index.vue b/src/components/menu/index.vue
new file mode 100644
index 0000000..4b40116
--- /dev/null
+++ b/src/components/menu/index.vue
@@ -0,0 +1,68 @@
+
+
+
+
+
+
diff --git a/src/components/menu/menu-item/index.vue b/src/components/menu/menu-item/index.vue
new file mode 100644
index 0000000..5b0f11c
--- /dev/null
+++ b/src/components/menu/menu-item/index.vue
@@ -0,0 +1,170 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/menu/menu-temp/index.vue b/src/components/menu/menu-temp/index.vue
new file mode 100644
index 0000000..391fad6
--- /dev/null
+++ b/src/components/menu/menu-temp/index.vue
@@ -0,0 +1,57 @@
+
+
+
+
+
+
+
{{ language === 'zh' ? sumMenu.title : sumMenu.nameEn || sumMenu.title }}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/menu/style.css b/src/components/menu/style.css
new file mode 100644
index 0000000..e55f852
--- /dev/null
+++ b/src/components/menu/style.css
@@ -0,0 +1,6 @@
+.menu-item-box-c .menu-icon-c {
+ width: 1.875rem !important;
+ text-align: center;
+ box-sizing: border-box;
+ padding-right: 0.625rem;
+}
diff --git a/src/components/menu/submenu-item/index.vue b/src/components/menu/submenu-item/index.vue
new file mode 100644
index 0000000..7c8e5c5
--- /dev/null
+++ b/src/components/menu/submenu-item/index.vue
@@ -0,0 +1,57 @@
+
+
+
+
+
+
+
{{ language === 'zh' ? sumMenu.title : sumMenu.nameEn || sumMenu.title }}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/on-map-view/MapBottomMousePos.vue b/src/components/on-map-view/MapBottomMousePos.vue
new file mode 100644
index 0000000..093a343
--- /dev/null
+++ b/src/components/on-map-view/MapBottomMousePos.vue
@@ -0,0 +1,34 @@
+
+
+
+
82° 18′15″
+
112° 18′15″
+
+
+
+
+
+
+
diff --git a/src/components/on-map-view/MapBottomShipType.vue b/src/components/on-map-view/MapBottomShipType.vue
new file mode 100644
index 0000000..72aec97
--- /dev/null
+++ b/src/components/on-map-view/MapBottomShipType.vue
@@ -0,0 +1,78 @@
+
+
+
+
+
+ {{ language === 'zh' ? item.name : item.tran }}
+
+
+
+
+
+
+
+
diff --git a/src/components/on-map-view/MiniBox.vue b/src/components/on-map-view/MiniBox.vue
new file mode 100644
index 0000000..2949f68
--- /dev/null
+++ b/src/components/on-map-view/MiniBox.vue
@@ -0,0 +1,91 @@
+
+
+
+
+
+ {{ $t(`message.menu.${item.type}`) }}
+ {{ item.title }}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/on-map-view/OnClickWeather.vue b/src/components/on-map-view/OnClickWeather.vue
new file mode 100644
index 0000000..97a97fd
--- /dev/null
+++ b/src/components/on-map-view/OnClickWeather.vue
@@ -0,0 +1,82 @@
+
+
+
+
+
+
+
diff --git a/src/components/on-map-view/PortHoverView.vue b/src/components/on-map-view/PortHoverView.vue
new file mode 100644
index 0000000..e4809a3
--- /dev/null
+++ b/src/components/on-map-view/PortHoverView.vue
@@ -0,0 +1,45 @@
+
+
+
{{ $t('message.portHoverView.chineseName') }}: {{ shipFloatMes.portNameCn }}
+
{{ $t('message.portHoverView.englishName') }}: {{ shipFloatMes.portNameEn }}
+
{{ $t('message.portHoverView.portCode') }}: {{ shipFloatMes.portCode }}
+
{{ $t('message.portHoverView.portPos') }}: {{ shipFloatMes.portLatLon }}
+
+
+
+
+
+
diff --git a/src/components/on-map-view/ShipHoverView.vue b/src/components/on-map-view/ShipHoverView.vue
new file mode 100644
index 0000000..3df40e9
--- /dev/null
+++ b/src/components/on-map-view/ShipHoverView.vue
@@ -0,0 +1,52 @@
+
+
+
{{ $t('message.ShipHoverView.shipName') }} {{ shipFloatMes.shipnameEn }}
+
{{ $t('message.ShipHoverView.mmsi') }} {{ shipFloatMes.mmsi }}
+
{{ $t('message.ShipHoverView.lon') }} {{ shipFloatMes.lon }}
+
{{ $t('message.ShipHoverView.lat') }} {{ shipFloatMes.lat }}
+
{{ $t('message.ShipHoverView.time') }} {{ formatDate(shipFloatMes.time) }}
+
+
+
+
+
+
+
diff --git a/src/components/on-map-view/TrackHoverView.vue b/src/components/on-map-view/TrackHoverView.vue
new file mode 100644
index 0000000..ef689fb
--- /dev/null
+++ b/src/components/on-map-view/TrackHoverView.vue
@@ -0,0 +1,49 @@
+
+
+
{{ $t('message.TrackHoverView.course') }} {{ shipFloatMes.heading }}°
+
{{ $t('message.TrackHoverView.Speed') }} {{ shipFloatMes.sog }}knot
+
{{ $t('message.TrackHoverView.time') }} {{ formatDate(shipFloatMes.time) }}
+
+
+
+
+
+
diff --git a/src/components/on-map-view/ViewAllPort.vue b/src/components/on-map-view/ViewAllPort.vue
new file mode 100644
index 0000000..d1543c2
--- /dev/null
+++ b/src/components/on-map-view/ViewAllPort.vue
@@ -0,0 +1,147 @@
+
+
+ {{
+ viewPort ? $t('message.closeAllPort') : $t('message.allPort')
+ }}
+
+
+
+
+
+
+
diff --git a/src/components/real-time-info/realTimeInfo.vue b/src/components/real-time-info/realTimeInfo.vue
new file mode 100644
index 0000000..87d6c7a
--- /dev/null
+++ b/src/components/real-time-info/realTimeInfo.vue
@@ -0,0 +1,111 @@
+
+
+
+
+
+
+
+
+
+ {{ item.shipName }} {{ status(item.eventType) }}{{ item.areaName }}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/search/index.vue b/src/components/search/index.vue
new file mode 100644
index 0000000..598da69
--- /dev/null
+++ b/src/components/search/index.vue
@@ -0,0 +1,338 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/ship-fleet/index.vue b/src/components/ship-fleet/index.vue
new file mode 100644
index 0000000..6b9179f
--- /dev/null
+++ b/src/components/ship-fleet/index.vue
@@ -0,0 +1,89 @@
+
+
+
+
+
+
+
diff --git a/src/components/table/index.vue b/src/components/table/index.vue
new file mode 100644
index 0000000..f387f5d
--- /dev/null
+++ b/src/components/table/index.vue
@@ -0,0 +1,102 @@
+
+
+
+
+
+
+
+
diff --git a/src/css/element/index.scss b/src/css/element/index.scss
new file mode 100644
index 0000000..36f8cf7
--- /dev/null
+++ b/src/css/element/index.scss
@@ -0,0 +1,454 @@
+.el-aside {
+ background: var(--aside-bg) !important;
+ height: 100% !important;
+ border: none !important;
+ overflow-x: hidden !important;
+}
+
+.el-table-filter .el-table-filter__content .el-checkbox__label{
+ color: black;
+}
+
+.el-container {
+ width: 100% !important;
+ height: 100% !important;
+}
+
+.el-main {
+ overflow: hidden !important;
+ width: 100% !important;
+ height: 100% !important;
+ padding: unset !important;
+}
+.el-tabs__item {
+ font-size: 0.875rem!important;
+}
+/* el-tabs 样式开始*/
+/*去掉切换时el-tab-pane底部的蓝色下划线*/
+/*//.el-tabs__active-bar {
+// background-color: transparent !important;
+//}
+
+!*去掉tabs底部的下划线*!
+//.el-tabs__nav-wrap::after {
+// position: static !important;
+//}
+
+!*tabs 居中*!
+//.el-tabs__header {
+// display: flex !important;
+// justify-content: center !important;
+// background: rgba(52, 51, 82, 0.7) !important;
+// //border-radius: 0.12rem 0.12rem 0 0;
+// border-radius: 12px 12px 0 0;
+//}
+
+!* tabs 选中字体颜色 *!
+//.el-tabs__item {
+// color: var(--theme-color-no) !important;
+//}
+
+!* tabs 选中字体颜色 *!
+//.el-tabs__item.is-active {
+// color: #ffffff !important;
+//}
+
+!* tabs 选中字体颜色 *!
+//.el-tabs__item:hover {
+// color: var(--theme-color) !important;
+//}
+
+//.el-tabs__content {
+// //padding: 0 0.2rem !important;;
+// padding: 0 20px !important;
+//}*/
+
+/* el-tabs 样式结束*/
+
+
+/* el-button 样式开始 */
+.el-button {
+ height: 1.875rem;
+ width: 8.125rem;
+ line-height: unset;
+ display: flex !important;
+ align-items: center;
+ justify-content: center;
+ background: var(--theme-color) !important;
+ border-color: var(--theme-color) !important;
+ color: #ffffff !important;
+ margin-right: 0.62rem !important;
+}
+
+.cancel-btn .el-button {
+ background: var(--cancel-btn-gb) !important;
+ color: var(--theme-color) !important;
+ border-color: var(--theme-color) !important;
+}
+
+
+.el-button:hover {
+ opacity: 0.75 !important;
+}
+
+/* el-button 样式结束 */
+
+
+/* el-select 样式开始 */
+.el-select {
+ height: 1.875rem !important;
+}
+
+.el-select .el-input__inner {
+ height: 1.875rem;
+ background: rgba(255, 255, 255, 0.6);
+ color: black;
+ border-color: var(--aside-bg);
+}
+
+.el-select .el-input__suffix-inner {
+ height: 100%;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+}
+
+.el-select .el-input__suffix-inner .el-select__caret {
+ line-height: unset !important;
+}
+
+.el-select-dropdown__item.selected {
+ color: var(--theme-color) !important;
+}
+
+/* el-select 样式结束 */
+
+
+/* el-form 样式开始 */
+.el-form {
+ margin-top: 1.25rem;
+}
+
+.el-form .el-form-item {
+ height: 1.875rem !important;
+ margin-bottom: 0.62rem !important;
+}
+
+.el-form .el-form-item .el-form-item__label {
+ height: 1.875rem;
+ color: #ffffff;
+ line-height: 1.875rem;
+}
+
+.el-form .el-form-item .el-form-item__content {
+ line-height: 1.875rem;
+}
+
+/* el-form 样式结束*/
+
+
+/* el-input 样式开始*/
+
+.el-input .el-input__inner {
+ height: 2.5rem !important;
+ background: rgba(255, 255, 255, 0.2) !important;
+ color: black !important;
+ border-color: var(--aside-bg) !important;
+}
+
+.el-input .el-input__inner:focus {
+ border-color: var(--theme-color) !important;
+}
+
+.el-input__inner .el-input__icon {
+ height: 100% !important;
+ display: flex !important;
+ align-items: center !important;
+}
+
+/* el-input 样式结束*/
+
+/* .el-textarea 样式开始*/
+.el-textarea .el-textarea__inner {
+ background: rgba(255, 255, 255, 0.2);
+ color: var(--white-font);
+ border-color: var(--aside-bg);
+}
+
+.el-textarea .el-textarea__inner:hover {
+ background: rgba(255, 255, 255, 0.2);
+ color: var(--white-font);
+ border-color: var(--aside-bg);
+}
+
+.el-textarea .el-textarea__inner:focus {
+ border-color: var(--theme-color) !important;
+}
+
+/* .el-textarea 样式结束*/
+
+
+/* 颜色选取器样式开始*/
+.el-color-picker, .el-color-picker .el-color-picker__trigger {
+ width: 1.875rem !important;
+ height: 1.875rem !important;
+}
+
+.el-color-dropdown__btns {
+ display: flex;
+}
+
+.el-color-dropdown__btns .el-button {
+ width: 3.125rem;
+ height: 1.875rem;
+}
+
+/* 颜色选取器样式结束*/
+
+
+/* el-menu 样式开始*/
+
+.el-menu {
+ border: none !important;
+}
+
+.el-submenu__title {
+ height: 2.5rem !important;
+ line-height: 2.5rem !important;
+ font-size: 0.875rem!important;
+}
+
+
+.el-menu-item {
+ height: 2.5rem !important;
+ line-height: 2.5rem !important;
+ font-size: 0.875rem!important;
+}
+
+
+.vxe-modal--body .el-menu {
+ background: transparent !important;
+}
+
+/* el-menu 样式结束*/
+
+
+/* 时间组件样式开始 */
+.el-date-editor {
+ width: 10.5rem !important;
+ height: 100% !important;
+}
+
+.el-date-editor .el-range-separator {
+ height: 100% !important;
+ display: flex !important;
+ align-items: center !important;
+ justify-content: center;
+}
+
+.el-picker-panel__footer {
+ display: flex;
+ align-items: center;
+ justify-content: flex-end;
+}
+
+.el-picker-panel__footer .el-button {
+ width: 5rem !important;
+}
+
+.el-picker-panel__footer .el-button:nth-child(1) {
+ background: transparent !important;
+ border: none !important;
+ color: var(--theme-color) !important;
+ width: 5rem;
+}
+
+.el-date-table td.today span {
+ color: var(--theme-color) !important;
+}
+
+.el-date-table td.available:hover {
+ color: var(--theme-color) !important;
+}
+
+.el-date-table td.end-date span, .el-date-table td.start-date span {
+ background: var(--theme-color) !important;
+}
+
+.el-date-range-picker__editor .el-input__inner {
+ //color: var(--white-font) !important;
+ color: black !important;
+}
+
+.el-table.el-table__body-wrapper.el-table__cell.el-table__body.el-table__row {
+ height: 2.5rem !important;
+}
+
+.el-range-editor.is-active {
+ border-color: var(--theme-color) !important;
+}
+
+.el-date-editor {
+ background: rgba(255, 255, 255, 0.2) !important;
+ //border: none !important;
+}
+
+.el-date-editor .el-range-input {
+ background: unset !important;
+ //color: var(--white-font) !important;
+}
+
+.el-range-separator {
+ //color: var(--white-font) !important;
+}
+
+/* 时间组件样式结束*/
+
+
+/*checkbox 样式开始*/
+.el-checkbox .el-checkbox__label {
+ color: var(--white-font);
+}
+
+.is-checked .el-checkbox__label {
+ color: var(--theme-color) !important;
+}
+
+.is-checked .el-checkbox__inner {
+ background: var(--theme-color) !important;
+ border-color: var(--theme-color) !important;
+}
+
+/*checkbox 样式结束*/
+
+
+/* loading 样式开始*/
+.el-loading-mask {
+ height: 100%;
+}
+
+.el-loading-mask .el-loading-spinner .circular {
+ width: 1.875rem;
+ height: 1.875rem;
+}
+
+.el-loading-mask .el-loading-spinner {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ top: unset;
+ margin: unset;
+}
+
+.el-loading-spinner .path {
+ stroke: var(--theme-color) !important;
+}
+
+/* loading 样式结束*/
+
+
+/* message 开始*/
+.el-message-box {
+ background: transparent !important;
+ border: unset !important;
+ padding: 0 !important;
+ position: relative;
+ border-radius: 0.875rem !important;
+}
+
+.el-message-box .el-message-box__header {
+ background: var(--theme-color) !important;
+}
+
+.el-message-box .el-message-box__header .el-message-box__title {
+ color: var(--white-font) !important;
+ font-family: "Microsoft YaHei", serif !important;
+ font-weight: 400 !important;
+}
+
+.el-message-box .el-message-box__header .el-message-box__headerbtn .el-message-box__close {
+ color: var(--white-font) !important;
+}
+
+.el-message-box .el-message-box__header .el-message-box__headerbtn .el-message-box__close:hover {
+ opacity: 0.7 !important;
+}
+
+.el-message-box .el-message-box__content .el-message-box__container {
+ color: var(--white-font) !important;
+}
+
+.el-message-box .el-message-box__content, .el-message-box .el-message-box__btns {
+ background: var(--modal-bg-color) !important;
+}
+
+.el-message-box .el-message-box__content {
+ font-size: 0.9rem !important;
+ height: 5rem !important;
+}
+
+.el-message-box .el-message-box__btns {
+ height: 3.125rem;
+}
+
+
+.el-message-box .el-message-box__btns {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ flex-direction: row-reverse
+}
+
+.el-message-box .el-message-box__btns .el-button:nth-child(1) {
+ background: transparent !important;
+}
+
+/* message 结束*/
+
+
+/* 分页 开始*/
+.el-pagination {
+ height: 1.875rem !important;
+ box-sizing: border-box;
+ padding: 0 !important;
+ display: flex;
+ align-items: center;
+}
+
+.el-pagination .el-pagination__sizes {
+ height: 1.375rem !important;
+ box-sizing: border-box;
+}
+
+.el-pagination .el-pagination__sizes .el-select {
+ height: 1.375rem !important;
+}
+
+.el-pagination .el-pagination__sizes .el-select .el-input {
+ height: 1.375rem !important;
+}
+
+.el-pagination .el-pagination__sizes .el-select .el-input .el-input__inner {
+ height: 1.375rem !important;
+ box-sizing: border-box;
+}
+
+.el-pagination .el-pager .number {
+ color: var(--theme-color) !important;
+}
+
+.el-pagination .el-pagination__jump {
+ height: 1.375rem !important;
+ display: flex !important;
+ align-items: center !important;
+}
+
+.el-pagination .el-pagination__jump .el-input {
+ height: 1.375rem !important;
+}
+
+.el-pagination .el-pagination__jump .el-input .el-input__inner {
+ height: 1.375rem !important;
+}
+
+/* 分页 结束*/
diff --git a/src/css/element/source-index.css b/src/css/element/source-index.css
new file mode 100644
index 0000000..8752bb5
--- /dev/null
+++ b/src/css/element/source-index.css
@@ -0,0 +1 @@
+@font-face{font-family:vxeiconfont;src:url("data:application/x-font-woff2;charset=utf-8;base64,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 0.4375remxcQhT6JtOltxQqd1RaWylF5jSTYpvCkBUFkj0pyuAIKBKJdWIxiiImGClF5JwJkBqilQ7ZxjJ4ycKpoML1IOWnW5RFh2ICKUeVfC1m3rt0Z4MZCx8TPrajz0ZlEI/VENljqKHCSFQJliuDVl1qNEmsFR5aPLMYHAVFD1FzEsIZ7R2xyiGPgDRnz0Zk6JxTRZIuYJ+ex95KK+dboBFkkjwEG7ZSOq/vrZQ0QFNrt93VJuIMacPt858WK1LIByeWLOjvSwIRusf/BrWtxLXveV+qhamUR7cs2NVofVQfWVK7HWUCvWA2zqJlWOCwmdStyjMU+aPufflZHg0LBjmuzhnD1VI1++Gjz+t5W0l25DsqZ75VXxZHEVyaA04IqFOGavGA6IVUAVFILMI61EAm8ru13a3FtIPI1meGGd 0.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") format("woff2")}@-webkit-keyframes rollCircle{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes rollCircle{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}[class*=vxe-icon-]{font-family:vxeiconfont!important;font-style:normal;font-weight:400;font-size:1.1em;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}[class*=vxe-icon-].animat,[class*=vxe-icon-].roll{display:inline-block}[class*=vxe-icon-].animat{-webkit-transition:-webkit-transform .25s ease-in-out;transition:-webkit-transform .25s ease-in-out;transition:transform .25s ease-in-out;transition:transform .25s ease-in-out,-webkit-transform .25s ease-in-out}[class*=vxe-icon-].rotate45{-webkit-transform:rotate(45deg);transform:rotate(45deg)}[class*=vxe-icon-].rotate90{-webkit-transform:rotate(90deg);transform:rotate(90deg)}[class*=vxe-icon-].rotate180{-webkit-transform:rotate(180deg);transform:rotate(180deg)}[class*=vxe-icon-].roll{-webkit-animation:rollCircle 1s linear infinite;animation:rollCircle 1s linear infinite}.vxe-icon-lightning:before{content:""}.vxe-icon-cloudy:before{content:""}.vxe-icon-heavy-rain:before{content:""}.vxe-icon-moon:before{content:""}.vxe-icon-sunny:before{content:""}.vxe-icon-location:before{content:""}.vxe-icon-location-fill:before{content:""}.vxe-icon-microphone-fill:before{content:""}.vxe-icon-microphone:before{content:""}.vxe-icon-share:before{content:""}.vxe-icon-share-fill:before{content:""}.vxe-icon-flag:before{content:""}.vxe-icon-flag-fill:before{content:""}.vxe-icon-platform:before{content:""}.vxe-icon-goods-fill:before{content:""}.vxe-icon-goods:before{content:""}.vxe-icon-funnel-clear:before{content:""}.vxe-icon-envelope:before{content:""}.vxe-icon-envelope-open-fill:before{content:""}.vxe-icon-envelope-open:before{content:""}.vxe-icon-envelope-fill:before{content:""}.vxe-icon-message-fill:before{content:""}.vxe-icon-chat:before{content:""}.vxe-icon-chat-fill:before{content:""}.vxe-icon-send:before{content:""}.vxe-icon-send-fill:before{content:""}.vxe-icon-user:before{content:""}.vxe-icon-user-fill:before{content:""}.vxe-icon-wechat:before{content:""}.vxe-icon-alipay:before{content:""}.vxe-icon-indicator:before{content:""}.vxe-icon-file-excel:before{content:""}.vxe-icon-file-pdf:before{content:""}.vxe-icon-file-image:before{content:""}.vxe-icon-file-markdown:before{content:""}.vxe-icon-file-ppt:before{content:""}.vxe-icon-file-word:before{content:""}.vxe-icon-file-zip:before{content:""}.vxe-icon-file-txt:before{content:""}.vxe-icon-refresh:before{content:""}.vxe-icon-checkbox-unchecked:before{content:""}.vxe-icon-information:before{content:""}.vxe-icon-info-circle-fill:before{content:""}.vxe-icon-info-circle:before{content:""}.vxe-icon-chart-radar:before{content:""}.vxe-icon-chart-bar-x:before{content:""}.vxe-icon-repeat:before{content:""}.vxe-icon-voice-fill:before{content:""}.vxe-icon-voice:before{content:""}.vxe-icon-flow-branch:before{content:""}.vxe-icon-comment:before{content:""}.vxe-icon-folder:before{content:""}.vxe-icon-folder-open:before{content:""}.vxe-icon-picture:before{content:""}.vxe-icon-picture-fill:before{content:""}.vxe-icon-bell:before{content:""}.vxe-icon-bell-fill:before{content:""}.vxe-icon-undo:before{content:""}.vxe-icon-home:before{content:""}.vxe-icon-home-fill:before{content:""}.vxe-icon-checkbox-checked:before{content:""}.vxe-icon-checkbox-indeterminate:before{content:""}.vxe-icon-fullscreen:before{content:""}.vxe-icon-minimize:before{content:""}.vxe-icon-print:before{content:""}.vxe-icon-upload:before{content:""}.vxe-icon-download:before{content:""}.vxe-icon-cloud-upload:before{content:""}.vxe-icon-cloud-download:before{content:""}.vxe-icon-spinner:before{content:""}.vxe-icon-close:before{content:""}.vxe-icon-custom-column:before{content:""}.vxe-icon-edit:before{content:""}.vxe-icon-zoom-in:before{content:""}.vxe-icon-caret-down:before{content:""}.vxe-icon-caret-up:before{content:""}.vxe-icon-caret-right:before{content:""}.vxe-icon-caret-left:before{content:""}.vxe-icon-square-checked-fill:before{content:""}.vxe-icon-square-close:before{content:""}.vxe-icon-square-down:before{content:""}.vxe-icon-square-left:before{content:""}.vxe-icon-square-caret-right:before{content:""}.vxe-icon-square-minus:before{content:""}.vxe-icon-square-plus:before{content:""}.vxe-icon-square-right:before{content:""}.vxe-icon-square-up:before{content:""}.vxe-icon-square-checked:before{content:""}.vxe-icon-square-down-fill:before{content:""}.vxe-icon-square-minus-fill:before{content:""}.vxe-icon-square-close-fill:before{content:""}.vxe-icon-square-left-fill:before{content:""}.vxe-icon-square-caret-right-fill:before{content:""}.vxe-icon-square-up-fill:before{content:""}.vxe-icon-square-right-fill:before{content:""}.vxe-icon-square-plus-fill:before{content:""}.vxe-icon-square-plus-square:before{content:""}.vxe-icon-square-fill:before{content:""}.vxe-icon-square-square:before{content:""}.vxe-icon-sort-alpha-desc:before{content:""}.vxe-icon-sort-alpha-asc:before{content:""}.vxe-icon-sort-numeric-asc:before{content:""}.vxe-icon-sort-numeric-desc:before{content:""}.vxe-icon-star-fill:before{content:""}.vxe-icon-star:before{content:""}.vxe-icon-star-half:before{content:""}.vxe-icon-lock-fill:before{content:""}.vxe-icon-unlock-fill:before{content:""}.vxe-icon-question:before{content:""}.vxe-icon-exclamation:before{content:""}.vxe-icon-ellipsis-h:before{content:""}.vxe-icon-ellipsis-v:before{content:""}.vxe-icon-save:before{content:""}.vxe-icon-setting:before{content:""}.vxe-icon-setting-fill:before{content:""}.vxe-icon-link:before{content:""}.vxe-icon-sort:before{content:""}.vxe-icon-chart-pie:before{content:""}.vxe-icon-chart-line:before{content:""}.vxe-icon-swap:before{content:""}.vxe-icon-num-list:before{content:""}.vxe-icon-copy:before{content:""}.vxe-icon-company:before{content:""}.vxe-icon-swap-right:before{content:""}.vxe-icon-swap-left:before{content:""}.vxe-icon-table:before{content:""}.vxe-icon-merge-cells:before{content:""}.vxe-icon-paste:before{content:""}.vxe-icon-cut:before{content:""}.vxe-icon-lock:before{content:""}.vxe-icon-unlock:before{content:""}.vxe-icon-chart-bar-y:before{content:""}.vxe-icon-fixed-fill:before{content:""}.vxe-icon-fixed:before{content:""}.vxe-icon-square:before{content:""}.vxe-icon-check:before{content:""}.vxe-icon-question-circle-fill:before{content:""}.vxe-icon-error-circle-fill:before{content:""}.vxe-icon-delete:before{content:""}.vxe-icon-dot:before{content:""}.vxe-icon-success-circle:before{content:""}.vxe-icon-delete-fill:before{content:""}.vxe-icon-minus:before{content:""}.vxe-icon-maximize:before{content:""}.vxe-icon-question-circle:before{content:""}.vxe-icon-warning-circle:before{content:""}.vxe-icon-warnion-circle-fill:before{content:""}.vxe-icon-eye-fill:before{content:""}.vxe-icon-search:before{content:""}.vxe-icon-funnel:before{content:""}.vxe-icon-eye-fill-close:before{content:""}.vxe-icon-search-zoom-in:before{content:""}.vxe-icon-arrow-right:before{content:""}.vxe-icon-arrow-left:before{content:""}.vxe-icon-arrow-up:before{content:""}.vxe-icon-calendar:before{content:""}.vxe-icon-arrow-down:before{content:""}.vxe-icon-warning-triangle:before{content:""}.vxe-icon-add:before{content:""}.vxe-icon-arrow-double-left:before{content:""}.vxe-icon-arrow-double-right:before{content:""}.vxe-icon-menu:before{content:""}.vxe-icon-warning-triangle-fill:before{content:""}.vxe-icon-error-circle:before{content:""}.vxe-icon-zoom-out:before{content:""}.vxe-icon-success-circle-fill:before{content:""}.vxe-icon-radio-checked:before{content:""}.vxe-icon-radio-unchecked:before{content:""}.vxe-cell--filter{padding:0 .1em 0 .25em;text-align:center;vertical-align:middle;display:inline-block;line-height:0}.vxe-cell--filter.col--filter .vxe-filter--btn{color:#606266}.vxe-cell--filter .vxe-filter--btn{color:#c0c4cc;cursor:pointer}.vxe-cell--filter .vxe-filter--btn:hover{color:#606266}.is--filter-active .vxe-cell--filter .vxe-filter--btn{color:#409eff}.vxe-table--filter-wrapper{display:none;position:absolute;top:0;min-width: 6.25rem;border-radius: 0.25rem;background-color:#fff;border: 0.0625rem solid #dadce0;-webkit-box-shadow:0 0.0625rem 0.375rem rgba(0,0,0,.2);box-shadow:0 0.0625rem 0.375rem rgba(0,0,0,.2);z-index:10}.vxe-table--filter-wrapper:not(.is--multiple){text-align:center}.vxe-table--filter-wrapper.is--active{display:block}.vxe-table--filter-wrapper .vxe-table--filter-body>li,.vxe-table--filter-wrapper .vxe-table--filter-header>li{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width: 22.5rem;padding:.25em .8em;cursor:pointer}.vxe-table--filter-wrapper .vxe-table--filter-body>li.is--checked,.vxe-table--filter-wrapper .vxe-table--filter-header>li.is--checked{color:#409eff}.vxe-table--filter-wrapper .vxe-table--filter-body>li:hover,.vxe-table--filter-wrapper .vxe-table--filter-header>li:hover{background-color:#f5f7fa}.vxe-table--filter-wrapper .vxe-table--filter-header{padding-top:.2em}.vxe-table--filter-wrapper .vxe-table--filter-body{max-height: 12.5rem;padding-bottom:.2em}.vxe-table--filter-wrapper>ul{list-style-type:none;padding:0;margin:0;overflow:auto;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.vxe-table--filter-wrapper.is--multiple>ul>li{padding:.25em .8em .25em 1em}.vxe-table--filter-wrapper .vxe-table--filter-footer{border-top: 0.0625rem solid #dadce0;padding:.6em;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.vxe-table--filter-wrapper .vxe-table--filter-footer button{background-color:transparent;padding:0 .4em;border:0;color:#606266;cursor:pointer}.vxe-table--filter-wrapper .vxe-table--filter-footer button:focus{outline:none}.vxe-table--filter-wrapper .vxe-table--filter-footer button:hover{color:#409eff}.vxe-table--filter-wrapper .vxe-table--filter-footer button.is--disabled{color:#bfbfbf;cursor:not-allowed}.vxe-table--context-menu-clild-wrapper,.vxe-table--context-menu-wrapper{position:absolute;top:0;left:0;font-size: 0.75rem;border: 0.0625rem solid #dadce0;-webkit-box-shadow: 0.1875rem 0.1875rem 0.25rem -0.125rem rgba(0,0,0,.6);box-shadow: 0.1875rem 0.1875rem 0.25rem -0.125rem rgba(0,0,0,.6);padding:0 0.0625rem;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;color:#606266;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Helvetica Neue,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;background-color:#fff}.vxe-context-menu--link{display:block;padding:0 2.5em;width: 11.125rem;line-height: 1.625rem;color:#606266;cursor:pointer}.vxe-context-menu--link .vxe-context-menu--link-prefix,.vxe-context-menu--link .vxe-context-menu--link-suffix{position:absolute;top: 0.3125rem;margin-right: 0.3125rem;font-size: 1rem}.vxe-context-menu--link .vxe-context-menu--link-prefix{left: 0.3125rem}.vxe-context-menu--link .vxe-context-menu--link-suffix{right: 0.3125rem}.vxe-context-menu--link .vxe-context-menu--link-suffix.suffix--haschild{top: 0.5rem}.vxe-context-menu--link .vxe-context-menu--link-suffix.suffix--haschild:before{position:absolute;content:"";border: 0.25rem solid transparent;border-left-color:#727272}.vxe-context-menu--link .vxe-context-menu--link-content{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vxe-table--context-menu-clild-wrapper .vxe-context-menu--link{padding:0 2em 0 2.5em}.vxe-context-menu--option-wrapper,.vxe-table--context-menu-clild-wrapper{margin:0;padding:0;list-style-type:none;border-bottom: 0.0625rem solid #e8eaed}.vxe-context-menu--option-wrapper li,.vxe-table--context-menu-clild-wrapper li{position:relative;margin: 0.0625rem 0;border: 0.0625rem solid transparent}.vxe-context-menu--option-wrapper li:last-child,.vxe-table--context-menu-clild-wrapper li:last-child{border:0}.vxe-context-menu--option-wrapper li.link--active,.vxe-table--context-menu-clild-wrapper li.link--active{background-color:#c5c5c5;border-color:#c5c5c5}.vxe-context-menu--option-wrapper li.link--active>.vxe-context-menu--link,.vxe-table--context-menu-clild-wrapper li.link--active>.vxe-context-menu--link{color:#2b2b2b}.vxe-context-menu--option-wrapper li.link--disabled>.vxe-context-menu--link,.vxe-table--context-menu-clild-wrapper li.link--disabled>.vxe-context-menu--link{color:#bfbfbf;cursor:no-drop}.vxe-context-menu--option-wrapper li.link--disabled.link--active,.vxe-table--context-menu-clild-wrapper li.link--disabled.link--active{border-color:#c0c1c2;background-color:#eee}.vxe-context-menu--option-wrapper li.link--disabled.link--active:hover,.vxe-table--context-menu-clild-wrapper li.link--disabled.link--active:hover{background-color:inherit}.vxe-table--context-menu-clild-wrapper{display:none;top:0;left:100%}.vxe-table--context-menu-clild-wrapper.is--show{display:block}.vxe-export--panel-column>ul{list-style-type:none;overflow:auto;margin:0;padding:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.vxe-export--panel-column>ul>li{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;cursor:pointer}.vxe-export--panel>table{width:100%;border:0;table-layout:fixed}.vxe-export--panel>table tr td{padding:0 0.625rem}.vxe-export--panel>table tr td:first-child{text-align:right;width:30%;font-weight:700;padding: 0.5rem 0.625rem}.vxe-export--panel>table tr td:nth-child(2){width:70%}.vxe-export--panel>table tr td>.vxe-input,.vxe-export--panel>table tr td>.vxe-select{width:80%}.vxe-export--panel>table tr td>.vxe-export--panel-option-row{padding:.25em 0}.vxe-export--panel .vxe-export--panel-column{width:80%;border: 0.0625rem solid #dcdfe6;margin: 0.1875rem 0;border-radius: 0.25rem;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.vxe-export--panel .vxe-export--panel-column>ul>li{padding:.2em 1em .2em 1em}.vxe-export--panel .vxe-export--panel-column>ul>li.level--2{padding-left:3.5em}.vxe-export--panel .vxe-export--panel-column>ul>li.level--2 .vxe-checkbox--icon{left:1.8em}.vxe-export--panel .vxe-export--panel-column>ul>li.level--3{padding-left:4.5em}.vxe-export--panel .vxe-export--panel-column>ul>li.level--3 .vxe-checkbox--icon{left:2.8em}.vxe-export--panel .vxe-export--panel-column>ul>li.level--4{padding-left:5.5em}.vxe-export--panel .vxe-export--panel-column>ul>li.level--4 .vxe-checkbox--icon{left:3.8em}.vxe-export--panel .vxe-export--panel-column>ul>li.level--5{padding-left:6.5em}.vxe-export--panel .vxe-export--panel-column>ul>li.level--5 .vxe-checkbox--icon{left:4.8em}.vxe-export--panel .vxe-export--panel-column>ul>li.level--6{padding-left:7.5em}.vxe-export--panel .vxe-export--panel-column>ul>li.level--6 .vxe-checkbox--icon{left:5.8em}.vxe-export--panel .vxe-export--panel-column>ul>li.level--7{padding-left:8.5em}.vxe-export--panel .vxe-export--panel-column>ul>li.level--7 .vxe-checkbox--icon{left:6.8em}.vxe-export--panel .vxe-export--panel-column>ul>li.level--8{padding-left:9.5em}.vxe-export--panel .vxe-export--panel-column>ul>li.level--8 .vxe-checkbox--icon{left:7.8em}.vxe-export--panel .vxe-export--panel-column .vxe-export--panel-column-header{padding:.1em 0;background-color:#f8f8f9;font-weight:700;border-bottom: 0.0625rem solid #e8eaec}.vxe-export--panel .vxe-export--panel-column .vxe-export--panel-column-body{padding:.2em 0;min-height:10em;max-height:17.6em}.vxe-export--panel .vxe-import-selected--file{padding-right: 2.5rem;position:relative;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.vxe-export--panel .vxe-import-selected--file>i{display:none;position:absolute;top:50%;right: 0.9375rem;-webkit-transform:translateY(-50%);transform:translateY(-50%);font-size: 1rem;cursor:pointer}.vxe-export--panel .vxe-import-selected--file:hover{color:#409eff}.vxe-export--panel .vxe-import-selected--file:hover>i{display:block}.vxe-export--panel .vxe-import-select--file{border: 0.0625rem dashed #dcdfe6;padding: 0.375rem 2.125rem;outline:0;border-radius: 0.25rem;background-color:#fff;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer}.vxe-export--panel .vxe-import-select--file:focus{border-color:#409eff;-webkit-box-shadow:0 0 .25em 0 #409eff;box-shadow:0 0 .25em 0 #409eff}.vxe-export--panel .vxe-import-select--file:hover{color:#409eff;border-color:#409eff}.vxe-export--panel .vxe-export--panel-btns{text-align:right;padding:.25em}.vxe-loading{display:none;position:absolute;width:100%;height:100%;top:0;left:0;z-index:99;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:hsla(0,0%,100%,.5)}.vxe-loading.is--visible{display:block}.vxe-loading>.vxe-loading--chunk{width:100%;position:absolute;top:50%;left:0;-webkit-transform:translateY(-50%);transform:translateY(-50%);text-align:center;color:#409eff}.vxe-loading .vxe-loading--default-icon{font-size:1.4em}.vxe-loading .vxe-loading--text{padding:.4em 0}.vxe-loading .vxe-loading--spinner{display:inline-block;position:relative;width: 3.5rem;height: 3.5rem}.vxe-loading .vxe-loading--spinner:after,.vxe-loading .vxe-loading--spinner:before{content:"";width:100%;height:100%;border-radius:50%;background-color:#409eff;opacity:.6;position:absolute;top:0;left:0;-webkit-animation:bounce 2s ease-in-out infinite;animation:bounce 2s ease-in-out infinite}.vxe-loading .vxe-loading--spinner:after{-webkit-animation-delay:-1s;animation-delay:-1s}@-webkit-keyframes bounce{0%,to{-webkit-transform:scale(0);transform:scale(0)}50%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes bounce{0%,to{-webkit-transform:scale(0);transform:scale(0)}50%{-webkit-transform:scale(1);transform:scale(1)}}.size--mini .vxe-loading .vxe-loading--spinner{width: 2.375rem;height: 2.375rem}.size--small .vxe-loading .vxe-loading--spinner{width: 2.75rem;height: 2.75rem}.size--medium .vxe-loading .vxe-loading--spinner{width: 3.125rem;height: 3.125rem}.vxe-table--render-default .vxe-body--column.col--ellipsis,.vxe-table--render-default.vxe-editable .vxe-body--column,.vxe-table--render-default .vxe-footer--column.col--ellipsis,.vxe-table--render-default .vxe-header--column.col--ellipsis{height: 3rem}.vxe-table--render-default.size--medium .vxe-body--column.col--ellipsis,.vxe-table--render-default.size--medium .vxe-footer--column.col--ellipsis,.vxe-table--render-default.size--medium .vxe-header--column.col--ellipsis,.vxe-table--render-default.vxe-editable.size--medium .vxe-body--column{height: 2.75rem}.vxe-table--render-default.size--small .vxe-body--column.col--ellipsis,.vxe-table--render-default.size--small .vxe-footer--column.col--ellipsis,.vxe-table--render-default.size--small .vxe-header--column.col--ellipsis,.vxe-table--render-default.vxe-editable.size--small .vxe-body--column{height: 2.5rem}.vxe-table--render-default.size--mini .vxe-body--column.col--ellipsis,.vxe-table--render-default.size--mini .vxe-footer--column.col--ellipsis,.vxe-table--render-default.size--mini .vxe-header--column.col--ellipsis,.vxe-table--render-default.vxe-editable.size--mini .vxe-body--column{height: 2.25rem}.vxe-table--file-form,.vxe-table-slots{display:none}.vxe-table--print-frame{position:fixed;bottom:-100%;left:-100%;height:0;width:0;border:0}.vxe-table--body-wrapper{scroll-behavior:auto}.vxe-table--body-wrapper,.vxe-table--fixed-left-body-wrapper,.vxe-table--fixed-right-body-wrapper{overflow-y:auto;overflow-x:auto}.vxe-cell .vxe-default-input,.vxe-cell .vxe-default-textarea,.vxe-table--filter-wrapper .vxe-default-input,.vxe-table--filter-wrapper .vxe-default-textarea{background-color:#fff}.vxe-cell .vxe-default-input,.vxe-cell .vxe-default-select,.vxe-cell .vxe-default-textarea,.vxe-table--filter-wrapper .vxe-default-input,.vxe-table--filter-wrapper .vxe-default-select,.vxe-table--filter-wrapper .vxe-default-textarea{outline:0;padding:0 0.125rem;width:100%;color:#606266;border-radius: 0.25rem;border: 0.0625rem solid #dcdfe6}.vxe-cell .vxe-default-input:focus,.vxe-cell .vxe-default-select:focus,.vxe-cell .vxe-default-textarea:focus,.vxe-table--filter-wrapper .vxe-default-input:focus,.vxe-table--filter-wrapper .vxe-default-select:focus,.vxe-table--filter-wrapper .vxe-default-textarea:focus{border: 0.0625rem solid #409eff}.vxe-cell .vxe-default-input[disabled],.vxe-cell .vxe-default-select[disabled],.vxe-cell .vxe-default-textarea[disabled],.vxe-table--filter-wrapper .vxe-default-input[disabled],.vxe-table--filter-wrapper .vxe-default-select[disabled],.vxe-table--filter-wrapper .vxe-default-textarea[disabled]{cursor:not-allowed;background-color:#f3f3f3}.vxe-cell .vxe-default-input,.vxe-cell .vxe-default-select,.vxe-cell .vxe-default-textarea,.vxe-table--filter-wrapper .vxe-default-input,.vxe-table--filter-wrapper .vxe-default-select,.vxe-table--filter-wrapper .vxe-default-textarea{height: 2.125rem}.vxe-cell .vxe-default-input[type=date]::-webkit-inner-spin-button,.vxe-table--filter-wrapper .vxe-default-input[type=date]::-webkit-inner-spin-button{margin-top: 0.25rem}.vxe-cell .vxe-default-input[type=date]::-webkit-inner-spin-button,.vxe-cell .vxe-default-input[type=number]::-webkit-inner-spin-button,.vxe-table--filter-wrapper .vxe-default-input[type=date]::-webkit-inner-spin-button,.vxe-table--filter-wrapper .vxe-default-input[type=number]::-webkit-inner-spin-button{height: 1.5rem}.vxe-cell .vxe-default-input::-webkit-input-placeholder,.vxe-table--filter-wrapper .vxe-default-input::-webkit-input-placeholder{color:#c0c4cc}.vxe-cell .vxe-default-input::-moz-placeholder,.vxe-table--filter-wrapper .vxe-default-input::-moz-placeholder{color:#c0c4cc}.vxe-cell .vxe-default-input:-ms-input-placeholder,.vxe-table--filter-wrapper .vxe-default-input:-ms-input-placeholder{color:#c0c4cc}.vxe-cell .vxe-default-input::-ms-input-placeholder,.vxe-table--filter-wrapper .vxe-default-input::-ms-input-placeholder{color:#c0c4cc}.vxe-cell .vxe-default-input::placeholder,.vxe-table--filter-wrapper .vxe-default-input::placeholder{color:#c0c4cc}.vxe-cell .vxe-default-textarea,.vxe-table--filter-wrapper .vxe-default-textarea{resize:none;vertical-align:middle}.vxe-cell .vxe-input,.vxe-cell .vxe-select,.vxe-cell .vxe-textarea,.vxe-table--filter-wrapper .vxe-input,.vxe-table--filter-wrapper .vxe-select,.vxe-table--filter-wrapper .vxe-textarea{width:100%;display:block}.vxe-cell .vxe-input>.vxe-input--inner,.vxe-cell .vxe-textarea>.vxe-textarea--inner,.vxe-table--filter-wrapper .vxe-input>.vxe-input--inner,.vxe-table--filter-wrapper .vxe-textarea>.vxe-textarea--inner{padding:0 0.125rem}.vxe-cell .vxe-default-textarea,.vxe-cell .vxe-textarea--inner,.vxe-table--filter-wrapper .vxe-default-textarea,.vxe-table--filter-wrapper .vxe-textarea--inner{resize:none}.vxe-table--cell-active-area,.vxe-table--cell-copy-area,.vxe-table--cell-extend-area,.vxe-table--cell-main-area,.vxe-table--checkbox-range{display:none;position:absolute;pointer-events:none;z-index:1}.vxe-table--fixed-left-wrapper .vxe-table--cell-active-area,.vxe-table--fixed-left-wrapper .vxe-table--cell-copy-area,.vxe-table--fixed-left-wrapper .vxe-table--cell-extend-area,.vxe-table--fixed-left-wrapper .vxe-table--cell-main-area,.vxe-table--fixed-left-wrapper .vxe-table--checkbox-range,.vxe-table--fixed-right-wrapper .vxe-table--cell-active-area,.vxe-table--fixed-right-wrapper .vxe-table--cell-copy-area,.vxe-table--fixed-right-wrapper .vxe-table--cell-extend-area,.vxe-table--fixed-right-wrapper .vxe-table--cell-main-area,.vxe-table--fixed-right-wrapper .vxe-table--checkbox-range{z-index:2}.vxe-table--fixed-left-wrapper .vxe-table--cell-active-area[half="1"],.vxe-table--fixed-left-wrapper .vxe-table--cell-extend-area[half="1"],.vxe-table--fixed-left-wrapper .vxe-table--cell-main-area[half="1"]{border-right:0}.vxe-table--fixed-left-wrapper .vxe-table--cell-copy-area[half="1"]{background-size: 0.1875rem 0.75rem,0 0.75rem, 0.75rem 0.1875rem, 0.75rem 0.1875rem}.vxe-table--fixed-right-wrapper .vxe-table--cell-active-area[half="1"],.vxe-table--fixed-right-wrapper .vxe-table--cell-extend-area[half="1"],.vxe-table--fixed-right-wrapper .vxe-table--cell-main-area[half="1"]{border-left:0}.vxe-table--fixed-right-wrapper .vxe-table--cell-copy-area[half="1"]{background-size:0 0.75rem, 0.1875rem 0.75rem, 0.75rem 0.1875rem, 0.75rem 0.1875rem}.vxe-table--checkbox-range{background-color:rgba(50,128,252,.2);border: 0.0625rem solid #006af1}.vxe-table--cell-area{height:0;font-size:0;display:none}.vxe-table--cell-area>.vxe-table--cell-main-area{background-color:rgba(64,158,255,.2);border: 0.0625rem solid #409eff}.vxe-table--cell-area .vxe-table--cell-main-area-btn{display:none;position:absolute;right: -0.0625rem;bottom: -0.0625rem;width: 0.4375rem;height: 0.4375rem;border-style:solid;border-color:#fff;border-width: 0.0625rem 0 0 0.0625rem;background-color:#409eff;pointer-events:auto;cursor:crosshair}.vxe-table--cell-area .vxe-table--cell-extend-area{border: 0.125rem solid #409eff}@-webkit-keyframes moveCopyCellBorder{to{background-position:0 -0.75rem,100% 0.75rem, 0.75rem 0, -0.75rem 100%}}@keyframes moveCopyCellBorder{to{background-position:0 -0.75rem,100% 0.75rem, 0.75rem 0, -0.75rem 100%}}.vxe-table--cell-copy-area{background:linear-gradient(0deg,transparent 0.375rem,#409eff 0) repeat-y,linear-gradient(0deg,transparent 50%,#409eff 0) repeat-y,linear-gradient(90deg,transparent 50%,#409eff 0) repeat-x,linear-gradient(90deg,transparent 50%,#409eff 0) repeat-x;background-size: 0.1875rem 0.75rem, 0.1875rem 0.75rem, 0.75rem 0.1875rem, 0.75rem 0.1875rem;background-position:0 0,100% 0,0 0,0 100%;-webkit-animation:moveCopyCellBorder .5s linear infinite;animation:moveCopyCellBorder .5s linear infinite}.vxe-table--cell-active-area{border: 0.125rem solid #409eff}.vxe-table--cell-multi-area>.vxe-table--cell-main-area{background-color:rgba(64,158,255,.2)}.vxe-table--render-default.is--round .vxe-table--border-line,.vxe-table--render-default.is--round .vxe-table--render-default.is--round,.vxe-table--render-default.is--round:not(.is--header):not(.is--footer) .vxe-table--body-wrapper.body--wrapper{border-radius: 0.25rem}.vxe-table--render-default.is--round.is--footer:not(.is--header) .vxe-table--body-wrapper.body--wrapper,.vxe-table--render-default.is--round.is--header .vxe-table--header-wrapper.body--wrapper{border-radius: 0.25rem 0.25rem 0 0}.vxe-table--render-default.is--round.is--header .vxe-table--header-wrapper.fixed-left--wrapper{border-radius: 0.25rem 0 0 0}.vxe-table--render-default.is--round.is--header .vxe-table--header-wrapper.fixed-right--wrapper{border-radius:0 0.25rem 0 0}.vxe-table--render-default.is--round.is--footer .vxe-table--footer-wrapper.body--wrapper,.vxe-table--render-default.is--round.is--header:not(.is--footer) .vxe-table--body-wrapper.body--wrapper{border-radius:0 0 0.25rem 0.25rem}.vxe-table--render-default.is--round.is--footer .vxe-table--footer-wrapper.fixed-left--wrapper,.vxe-table--render-default.is--round.is--footer:not(.is--header) .vxe-table--body-wrapper.fixed-left--wrapper,.vxe-table--render-default.is--round.is--header:not(.is--footer) .vxe-table--body-wrapper.fixed-left--wrapper{border-radius:0 0 0 0.25rem}.vxe-table--render-default.is--round.is--footer .vxe-table--footer-wrapper.fixed-right--wrapper,.vxe-table--render-default.is--round.is--footer:not(.is--header) .vxe-table--body-wrapper.fixed-right--wrapper,.vxe-table--render-default.is--round.is--header:not(.is--footer) .vxe-table--body-wrapper.fixed-right--wrapper{border-radius:0 0 0.25rem 0}.vxe-table .vxe-table--header-wrapper{color:#606266}.vxe-table .vxe-table--header-wrapper .vxe-table--header-border-line{position:absolute;left:0;bottom:0;height:0;border-bottom: 0.0625rem solid #e8eaec}.vxe-table .vxe-cell--sort{width:1.5em;height:1.35em;vertical-align:middle;text-align:center;display:inline-block;position:relative}.vxe-table .vxe-sort--asc-btn,.vxe-table .vxe-sort--desc-btn{position:absolute;left:.2em;color:#c0c4cc;width:1em;text-align:center;height:.8em;line-height:.8em;cursor:pointer}.vxe-table .vxe-sort--asc-btn:hover,.vxe-table .vxe-sort--desc-btn:hover{color:#606266}.vxe-table .vxe-sort--asc-btn.sort--active,.vxe-table .vxe-sort--desc-btn.sort--active{color:#409eff}.vxe-table .vxe-sort--asc-btn{top:-.1em}.vxe-table .vxe-sort--desc-btn{bottom:-.2em}.vxe-header--column{position:relative;font-weight:700}.vxe-header--column.col--ellipsis>.vxe-cell{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.vxe-header--column.col--ellipsis>.vxe-cell .vxe-cell--title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vxe-header--column.col--ellipsis>.vxe-cell>i:not(.vxe-cell--title),.vxe-header--column.col--ellipsis>.vxe-cell>span:not(.vxe-cell--title){-ms-flex-negative:0;flex-shrink:0}.vxe-header--column .vxe-cell--required-icon{display:inline-block;color:#f56c6c;width:.8em;height:1em;line-height:1em;font-family:Verdana,Arial,Tahoma;font-weight:400;position:relative}.vxe-header--column .vxe-cell--required-icon:before{content:"*";position:absolute;left:0;top:.2em}.vxe-header--column .vxe-cell--required-icon{margin-right:.1em}.vxe-header--column .vxe-cell--edit-icon,.vxe-header--column .vxe-cell-help-icon{margin-right:.2em}.vxe-header--column .vxe-cell-help-icon{cursor:help}.vxe-header--column .vxe-resizable{position:absolute;right: -0.4375rem;bottom:0;width: 0.875rem;height:100%;text-align:center;z-index:1;cursor:col-resize}.vxe-header--column .vxe-resizable.is--line:after,.vxe-header--column .vxe-resizable.is--line:before{content:"";display:inline-block;vertical-align:middle}.vxe-header--column .vxe-resizable.is--line:before{width: 0.0625rem;height:50%;background-color:#d9dddf}.vxe-header--column .vxe-resizable.is--line:after{width:0;height:100%}.vxe-table--fixed-right-wrapper .vxe-header--column .vxe-resizable{right:auto;left: -0.4375rem}.vxe-table--render-default{position:relative;font-size: 0.875rem;color:#606266;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Helvetica Neue,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;direction:ltr}.vxe-table--render-default .vxe-table--body-wrapper,.vxe-table--render-default .vxe-table--footer-wrapper{background-color:#fff}.vxe-table--render-default .vxe-table--body,.vxe-table--render-default .vxe-table--footer,.vxe-table--render-default .vxe-table--header{border:0;border-spacing:0;border-collapse:separate;table-layout:fixed}.vxe-table--render-default .vxe-table--footer-wrapper,.vxe-table--render-default .vxe-table--header-wrapper{overflow-x:hidden;overflow-y:hidden}.vxe-table--render-default:not(.is--empty).is--footer.is--scroll-x .vxe-table--body-wrapper{overflow-x:scroll}.vxe-table--render-default .vxe-body--row.row--stripe{background-color:#fafafa}.vxe-table--render-default .vxe-body--row.row--checked,.vxe-table--render-default .vxe-body--row.row--radio{background-color:#fff3e0}.vxe-table--render-default .vxe-body--row.row--current{background-color:#e6f7ff}.vxe-table--render-default .vxe-body--row.row--hover,.vxe-table--render-default .vxe-body--row.row--hover.row--stripe{background-color:#f5f7fa}.vxe-table--render-default .vxe-body--row.row--hover.row--checked,.vxe-table--render-default .vxe-body--row.row--hover.row--radio{background-color:#ffebbc}.vxe-table--render-default .vxe-body--row.row--hover.row--current{background-color:#d7effb}.vxe-table--render-default.drag--resize .vxe-table--fixed-left-wrapper *,.vxe-table--render-default.drag--resize .vxe-table--fixed-right-wrapper *,.vxe-table--render-default.drag--resize .vxe-table--main-wrapper *{cursor:col-resize}.vxe-table--render-default.drag--area .vxe-table--fixed-left-wrapper *,.vxe-table--render-default.drag--area .vxe-table--fixed-right-wrapper *,.vxe-table--render-default.drag--area .vxe-table--main-wrapper *,.vxe-table--render-default.drag--range .vxe-table--fixed-left-wrapper *,.vxe-table--render-default.drag--range .vxe-table--fixed-right-wrapper *,.vxe-table--render-default.drag--range .vxe-table--main-wrapper *{cursor:default}.vxe-table--render-default.drag--extend-range .vxe-table--fixed-left-wrapper *,.vxe-table--render-default.drag--extend-range .vxe-table--fixed-right-wrapper *,.vxe-table--render-default.drag--extend-range .vxe-table--main-wrapper *{cursor:crosshair}.vxe-table--render-default.column--highlight .vxe-header--column:not(.col--seq):hover{background-color:#d7effb}.vxe-table--render-default.cell--area .vxe-table--main-wrapper{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.vxe-table--render-default .vxe-body--column,.vxe-table--render-default .vxe-footer--column,.vxe-table--render-default .vxe-header--column{position:relative;line-height: 1.375rem;text-align:left}.vxe-table--render-default .vxe-body--column:not(.col--ellipsis),.vxe-table--render-default .vxe-footer--column:not(.col--ellipsis),.vxe-table--render-default .vxe-header--column:not(.col--ellipsis){padding: 0.8125rem 0}.vxe-table--render-default .vxe-body--column.col--current,.vxe-table--render-default .vxe-footer--column.col--current,.vxe-table--render-default .vxe-header--column.col--current{background-color:#e6f7ff}.vxe-table--render-default .vxe-body--column.col--center,.vxe-table--render-default .vxe-footer--column.col--center,.vxe-table--render-default .vxe-header--column.col--center{text-align:center}.vxe-table--render-default .vxe-body--column.col--right,.vxe-table--render-default .vxe-footer--column.col--right,.vxe-table--render-default .vxe-header--column.col--right{text-align:right}.vxe-table--render-default .vxe-footer--column.col--ellipsis.col--center .vxe-cell,.vxe-table--render-default .vxe-header--column.col--ellipsis.col--center .vxe-cell{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.vxe-table--render-default .vxe-footer--column.col--ellipsis.col--right .vxe-cell,.vxe-table--render-default .vxe-header--column.col--ellipsis.col--right .vxe-cell{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.vxe-table--render-default .vxe-body--column.col--checkbox{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.vxe-table--render-default .vxe-table--footer-wrapper{border-top: 0.0625rem solid #e8eaec}.vxe-table--render-default.border--default .vxe-table--header-wrapper,.vxe-table--render-default.border--full .vxe-table--header-wrapper,.vxe-table--render-default.border--outer .vxe-table--header-wrapper{background-color:#f8f8f9}.vxe-table--render-default.border--default .vxe-body--column,.vxe-table--render-default.border--default .vxe-footer--column,.vxe-table--render-default.border--default .vxe-header--column,.vxe-table--render-default.border--inner .vxe-body--column,.vxe-table--render-default.border--inner .vxe-footer--column,.vxe-table--render-default.border--inner .vxe-header--column{background-image:-webkit-gradient(linear,left top,left bottom,from(#e8eaec),to(#e8eaec));background-image:linear-gradient(#e8eaec,#e8eaec);background-repeat:no-repeat;background-size:100% 0.0625rem;background-position:100% 100%}.vxe-table--render-default.border--full .vxe-body--column,.vxe-table--render-default.border--full .vxe-footer--column,.vxe-table--render-default.border--full .vxe-header--column{background-image:-webkit-gradient(linear,left top,left bottom,from(#e8eaec),to(#e8eaec)),-webkit-gradient(linear,left top,left bottom,from(#e8eaec),to(#e8eaec));background-image:linear-gradient(#e8eaec,#e8eaec),linear-gradient(#e8eaec,#e8eaec);background-repeat:no-repeat;background-size: 0.0625rem 100%,100% 0.0625rem;background-position:100% 0,100% 100%}.vxe-table--render-default.border--full .vxe-table--fixed-left-wrapper .vxe-body--column{border-right-color:#e8eaec}.vxe-table--render-default.border--default .vxe-table--header-wrapper .vxe-header--row:last-child .vxe-header--gutter,.vxe-table--render-default.border--full .vxe-table--header-wrapper .vxe-header--row:last-child .vxe-header--gutter,.vxe-table--render-default.border--inner .vxe-table--header-wrapper .vxe-header--row:last-child .vxe-header--gutter,.vxe-table--render-default.border--outer .vxe-table--header-wrapper .vxe-header--row:last-child .vxe-header--gutter{background-image:-webkit-gradient(linear,left top,left bottom,from(#e8eaec),to(#e8eaec));background-image:linear-gradient(#e8eaec,#e8eaec);background-repeat:no-repeat;background-size:100% 0.0625rem;background-position:100% 100%}.vxe-table--render-default.border--inner .vxe-table--header-wrapper,.vxe-table--render-default.border--none .vxe-table--header-wrapper{background-color:#fff}.vxe-table--render-default.border--inner .vxe-table--fixed-left-wrapper,.vxe-table--render-default.border--none .vxe-table--fixed-left-wrapper{border-right:0}.vxe-table--render-default.border--inner .vxe-table--border-line{border-width:0 0 0.0625rem 0}.vxe-table--render-default.border--none .vxe-table--border-line,.vxe-table--render-default.border--none .vxe-table--header-border-line{display:none}.vxe-table--render-default.size--medium{font-size: 0.875rem}.vxe-table--render-default.size--medium .vxe-table--empty-block,.vxe-table--render-default.size--medium .vxe-table--empty-placeholder{min-height: 2.75rem}.vxe-table--render-default.size--medium .vxe-body--column:not(.col--ellipsis),.vxe-table--render-default.size--medium .vxe-footer--column:not(.col--ellipsis),.vxe-table--render-default.size--medium .vxe-header--column:not(.col--ellipsis){padding: 0.6875rem 0}.vxe-table--render-default.size--medium .vxe-cell .vxe-default-input,.vxe-table--render-default.size--medium .vxe-cell .vxe-default-select,.vxe-table--render-default.size--medium .vxe-cell .vxe-default-textarea{height: 2rem}.vxe-table--render-default.size--medium .vxe-cell .vxe-default-input[type=date]::-webkit-inner-spin-button{margin-top: 0.1875rem}.vxe-table--render-default.size--small{font-size: 0.8125rem}.vxe-table--render-default.size--small .vxe-table--empty-block,.vxe-table--render-default.size--small .vxe-table--empty-placeholder{min-height: 2.5rem}.vxe-table--render-default.size--small .vxe-body--column:not(.col--ellipsis),.vxe-table--render-default.size--small .vxe-footer--column:not(.col--ellipsis),.vxe-table--render-default.size--small .vxe-header--column:not(.col--ellipsis){padding: 0.5625rem 0}.vxe-table--render-default.size--small .vxe-cell .vxe-default-input,.vxe-table--render-default.size--small .vxe-cell .vxe-default-select,.vxe-table--render-default.size--small .vxe-cell .vxe-default-textarea{height: 1.875rem}.vxe-table--render-default.size--small .vxe-cell .vxe-default-input[type=date]::-webkit-inner-spin-button{margin-top: 0.125rem}.vxe-table--render-default.size--mini{font-size: 0.75rem}.vxe-table--render-default.size--mini .vxe-table--empty-block,.vxe-table--render-default.size--mini .vxe-table--empty-placeholder{min-height: 2.25rem}.vxe-table--render-default.size--mini .vxe-body--column:not(.col--ellipsis),.vxe-table--render-default.size--mini .vxe-footer--column:not(.col--ellipsis),.vxe-table--render-default.size--mini .vxe-header--column:not(.col--ellipsis){padding: 0.4375rem 0}.vxe-table--render-default.size--mini .vxe-cell .vxe-default-input,.vxe-table--render-default.size--mini .vxe-cell .vxe-default-select,.vxe-table--render-default.size--mini .vxe-cell .vxe-default-textarea{height: 1.75rem}.vxe-table--render-default.size--mini .vxe-cell .vxe-default-input[type=date]::-webkit-inner-spin-button{margin-top: 0.0625rem}.vxe-table--render-default .vxe-cell{white-space:pre-line;word-break:break-all;padding-left: 0.625rem;padding-right: 0.625rem}.vxe-table--render-default .vxe-cell--placeholder{color:#c0c4cc}.vxe-table--render-default .fixed--hidden{visibility:hidden}.vxe-table--render-default .vxe-table--fixed-left-wrapper,.vxe-table--render-default .vxe-table--fixed-right-wrapper{width:100%;position:absolute;top:0;z-index:5;overflow:hidden;background-color:inherit;-webkit-transition:box-shadow .3s;transition:box-shadow .3s}.vxe-table--render-default .vxe-table--fixed-left-wrapper .vxe-table--body-wrapper,.vxe-table--render-default .vxe-table--fixed-right-wrapper .vxe-table--body-wrapper{overflow-x:hidden}.vxe-table--render-default .vxe-table--fixed-left-wrapper .vxe-table--body-wrapper{width:calc(100% + 2.5rem)}.vxe-table--render-default.is--header .vxe-table--fixed-left-wrapper .vxe-table--body-wrapper:before,.vxe-table--render-default.is--header .vxe-table--fixed-right-wrapper .vxe-table--body-wrapper:before{display:none}.vxe-table--render-default .vxe-table--fixed-left-wrapper{left:0;width: 12.5rem}.vxe-table--render-default .vxe-table--fixed-left-wrapper.scrolling--middle{-webkit-box-shadow: 0.25rem 0.1875rem 0.25rem 0 rgba(0,0,0,.12);box-shadow: 0.25rem 0.1875rem 0.25rem 0 rgba(0,0,0,.12)}.vxe-table--render-default .vxe-table--fixed-right-wrapper{right:0}.vxe-table--render-default .vxe-table--fixed-right-wrapper.scrolling--middle{-webkit-box-shadow: -0.25rem 0.1875rem 0.25rem 0 rgba(0,0,0,.12);box-shadow: -0.25rem 0.1875rem 0.25rem 0 rgba(0,0,0,.12)}.vxe-table--render-default .vxe-table--body-wrapper,.vxe-table--render-default .vxe-table--footer-wrapper,.vxe-table--render-default .vxe-table--header-wrapper{position:relative}.vxe-table--render-default .vxe-table--body-wrapper.fixed-left--wrapper,.vxe-table--render-default .vxe-table--body-wrapper.fixed-right--wrapper,.vxe-table--render-default .vxe-table--footer-wrapper.fixed-left--wrapper,.vxe-table--render-default .vxe-table--footer-wrapper.fixed-right--wrapper,.vxe-table--render-default .vxe-table--header-wrapper.fixed-left--wrapper,.vxe-table--render-default .vxe-table--header-wrapper.fixed-right--wrapper{position:absolute;top:0}.vxe-table--render-default .vxe-table--body-wrapper.fixed-left--wrapper,.vxe-table--render-default .vxe-table--footer-wrapper.fixed-left--wrapper,.vxe-table--render-default .vxe-table--header-wrapper.fixed-left--wrapper{left:0}.vxe-table--render-default .vxe-table--body-wrapper.fixed-right--wrapper,.vxe-table--render-default .vxe-table--footer-wrapper.fixed-right--wrapper,.vxe-table--render-default .vxe-table--header-wrapper.fixed-right--wrapper{right:0;overflow-y:auto}.vxe-table--render-default .vxe-body--x-space{width:100%;height: 0.0625rem;margin-bottom: -0.0625rem}.vxe-table--render-default .vxe-body--y-space{width:0;float:left}.vxe-table--render-default .vxe-table--resizable-bar{display:none;position:absolute;top:0;left:0;width: 0.0625rem;height:100%;z-index:9;cursor:col-resize}.vxe-table--render-default .vxe-table--resizable-bar:before{content:"";display:block;height:100%;background-color:#409eff}.vxe-table--render-default .vxe-table--border-line{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10;pointer-events:none;border: 0.0625rem solid #e8eaec}.vxe-table--render-default.is--tree-line .vxe-body--row:first-child .vxe-tree--line{border-width:0 0 0.0625rem 0}.vxe-table--render-default.is--tree-line .vxe-body--row .vxe-body--column{background-image:none}.vxe-table--render-default .vxe-tree--line-wrapper{position:relative;display:block;height:0}.vxe-table--render-default .vxe-tree--line{content:"";position:absolute;bottom:-.9em;width:.8em;border-width:0 0 0.0625rem 0.0625rem;border-style:dotted;border-color:#909399;pointer-events:none}.vxe-table--render-default .vxe-cell--tree-node{position:relative}.vxe-table--render-default .vxe-tree--btn-wrapper{position:absolute;top:50%;width:1em;height:1em;text-align:center;-webkit-transform:translateY(-50%);transform:translateY(-50%);z-index:1;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer}.vxe-table--render-default .vxe-tree--node-btn{display:block;color:#939599}.vxe-table--render-default .vxe-tree--node-btn:hover{color:#606266}.vxe-table--render-default .vxe-tree-cell{display:block;padding-left:1.5em}.vxe-table--render-default .vxe-body--column.col--ellipsis>.vxe-cell .vxe-tree-cell{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vxe-table--render-default .vxe-table--expanded{cursor:pointer}.vxe-table--render-default .vxe-table--expanded .vxe-table--expand-btn{display:inline-block;width:1em;height:1em;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;color:#939599}.vxe-table--render-default .vxe-table--expanded .vxe-table--expand-btn:hover{color:#606266}.vxe-table--render-default .vxe-table--expanded+.vxe-table--expand-label{padding-left:.5em}.vxe-table--render-default .vxe-body--expanded-column{border-bottom: 0.0625rem solid #e8eaec}.vxe-table--render-default .vxe-body--expanded-column.col--ellipsis>.vxe-body--expanded-cell{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vxe-table--render-default .vxe-body--expanded-cell{position:relative;z-index:1}.vxe-table--render-default .vxe-body--expanded-cell.is--ellipsis{overflow:auto}.vxe-table--render-default .vxe-body--column.col--ellipsis>.vxe-cell,.vxe-table--render-default .vxe-footer--column.col--ellipsis>.vxe-cell,.vxe-table--render-default .vxe-header--column.col--ellipsis>.vxe-cell{max-height: 3rem}.vxe-table--render-default.size--medium .vxe-body--column.col--ellipsis>.vxe-cell,.vxe-table--render-default.size--medium .vxe-footer--column.col--ellipsis>.vxe-cell,.vxe-table--render-default.size--medium .vxe-header--column.col--ellipsis>.vxe-cell{max-height: 2.75rem}.vxe-table--render-default.size--medium .vxe-cell--checkbox,.vxe-table--render-default.size--medium .vxe-cell--radio{font-size: 0.875rem}.vxe-table--render-default.size--small .vxe-body--column.col--ellipsis>.vxe-cell,.vxe-table--render-default.size--small .vxe-footer--column.col--ellipsis>.vxe-cell,.vxe-table--render-default.size--small .vxe-header--column.col--ellipsis>.vxe-cell{max-height: 2.5rem}.vxe-table--render-default.size--small .vxe-cell--checkbox,.vxe-table--render-default.size--small .vxe-cell--radio{font-size: 0.8125rem}.vxe-table--render-default.size--mini .vxe-body--column.col--ellipsis>.vxe-cell,.vxe-table--render-default.size--mini .vxe-footer--column.col--ellipsis>.vxe-cell,.vxe-table--render-default.size--mini .vxe-header--column.col--ellipsis>.vxe-cell{max-height: 2.25rem}.vxe-table--render-default.size--mini .vxe-cell--checkbox,.vxe-table--render-default.size--mini .vxe-cell--radio{font-size: 0.75rem}.vxe-table--render-default .vxe-table--empty-block,.vxe-table--render-default .vxe-table--empty-placeholder{min-height: 3rem;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;text-align:center;overflow:hidden;width:100%;pointer-events:none}.vxe-table--render-default .vxe-table--empty-block{display:none;visibility:hidden}.vxe-table--render-default .vxe-table--empty-placeholder{display:none;position:absolute;top:0;z-index:5}.vxe-table--render-default .vxe-table--empty-content{display:block;width:50%;pointer-events:auto}.vxe-table--render-default.is--empty .vxe-table--empty-block,.vxe-table--render-default.is--empty .vxe-table--empty-placeholder{display:-webkit-box;display:-ms-flexbox;display:flex}.vxe-table--render-default .vxe-body--column.col--selected{-webkit-box-shadow:inset 0 0 0 0.125rem #409eff;box-shadow:inset 0 0 0 0.125rem #409eff}.vxe-table--render-default .vxe-body--column.col--actived,.vxe-table--render-default .vxe-body--column.col--selected{position:relative}.vxe-table--render-default .vxe-body--column.col--valid-error .vxe-cell--valid{width: 20rem;position:absolute;bottom:calc(100% + 0.25rem);left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);text-align:center;pointer-events:none;z-index:4}.vxe-table--render-default .vxe-body--column.col--valid-error .vxe-cell--valid .vxe-cell--valid-msg{display:inline-block;border-radius: 0.25rem;padding: 0.5rem 0.75rem;color:#fff;background-color:#f56c6c;pointer-events:auto}.vxe-table--render-default .vxe-body--column.col--valid-error .vxe-default-input,.vxe-table--render-default .vxe-body--column.col--valid-error .vxe-default-select,.vxe-table--render-default .vxe-body--column.col--valid-error .vxe-default-textarea,.vxe-table--render-default .vxe-body--column.col--valid-error .vxe-input>.vxe-input--inner{border-color:#f56c6c}.vxe-table--render-default .vxe-body--row:first-child .vxe-cell--valid{bottom:auto;top:calc(100% + 0.25rem)}.vxe-table--render-default .vxe-body--column:first-child .vxe-cell--valid{left: 0.625rem;-webkit-transform:translateX(0);transform:translateX(0);text-align:left}.vxe-table--render-default .vxe-body--row.row--new>.vxe-body--column{position:relative}.vxe-table--render-default .vxe-body--row.row--new>.vxe-body--column:before{content:"";top: -0.3125rem;left: -0.3125rem;position:absolute;border-width: 0.3125rem;border-style:solid;border-color:transparent #19a15f transparent transparent;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.vxe-table--render-default .vxe-body--column.col--dirty{position:relative}.vxe-table--render-default .vxe-body--column.col--dirty:before{content:"";top: -0.3125rem;left: -0.3125rem;position:absolute;border-width: 0.3125rem;border-style:solid;border-color:transparent #f56c6c transparent transparent;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.vxe-table--render-default.vxe-editable.cell--highlight .vxe-body--column.col--actived{-webkit-box-shadow:inset 0 0 0 0.125rem #409eff;box-shadow:inset 0 0 0 0.125rem #409eff}.vxe-table--render-default.vxe-editable.cell--highlight .vxe-body--column.col--actived.col--valid-error{-webkit-box-shadow:inset 0 0 0 0.125rem #f56c6c;box-shadow:inset 0 0 0 0.125rem #f56c6c}.vxe-table--render-default.vxe-editable.cell--highlight .vxe-body--column.col--actived .vxe-cell .vxe-default-input,.vxe-table--render-default.vxe-editable.cell--highlight .vxe-body--column.col--actived .vxe-cell .vxe-default-textarea{border:0;padding:0}.vxe-table--render-default.vxe-editable.cell--highlight .vxe-body--column.col--actived .vxe-cell .vxe-default-input{height: 1.375rem}.vxe-table--render-default.vxe-editable.cell--highlight .vxe-body--column.col--actived .vxe-cell .vxe-input .vxe-input--inner{border:0;padding-left:0}.vxe-table--render-default.vxe-editable.cell--highlight .vxe-body--column.col--actived .vxe-cell .vxe-textarea{height: 1.3125rem}.vxe-table--render-default.vxe-editable.cell--highlight .vxe-body--column.col--actived .vxe-cell .vxe-textarea .vxe-textarea--inner{border:0}.vxe-table--render-default.vxe-editable .vxe-body--column,.vxe-table--render-default.vxe-editable .vxe-body--column.col--actived{padding:0}.vxe-table--footer-wrapper{color:#606266;margin-top: -0.0625rem}.vxe-table--footer-wrapper.body--wrapper{overflow-x:auto}.vxe-footer--column.col--ellipsis>.vxe-cell{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.vxe-footer--column.col--ellipsis>.vxe-cell .vxe-cell--item{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vxe-grid{position:relative}.vxe-grid.is--loading:before{content:"";position:absolute;top:0;left:0;width:100%;height:100%;z-index:99;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:hsla(0,0%,100%,.5)}.vxe-grid.is--loading>.vxe-table .vxe-loading{background-color:transparent}.vxe-grid.is--maximize{position:fixed;top:0;left:0;width:100%;height:100%;padding:.5em 1em;background-color:#fff}.vxe-grid .vxe-body--row.row--pending{color:#f56c6c;text-decoration:line-through;cursor:no-drop}.vxe-grid .vxe-body--row.row--pending .vxe-body--column{position:relative}.vxe-grid .vxe-body--row.row--pending .vxe-body--column:after{content:"";position:absolute;top:50%;left:0;width:100%;height:0;border-bottom: 0.0625rem solid #f56c6c;z-index:1}.vxe-grid .vxe-grid--bottom-wrapper,.vxe-grid .vxe-grid--form-wrapper,.vxe-grid .vxe-grid--top-wrapper{position:relative}.vxe-grid,.vxe-grid.size--medium{font-size: 0.875rem}.vxe-grid.size--small{font-size: 0.8125rem}.vxe-grid.size--mini{font-size: 0.75rem}.vxe-toolbar{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:.6em 0;color:#606266;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Helvetica Neue,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;background-color:#fff}.vxe-toolbar:after{content:"";display:block;clear:both;height:0;overflow:hidden;visibility:hidden}.vxe-toolbar.is--perfect{border: 0.0625rem solid #e8eaec;border-bottom-width:0;background-color:#f8f8f9}.vxe-toolbar.is--loading:before{content:"";position:absolute;top:0;left:0;width:100%;height:100%;z-index:999;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:hsla(0,0%,100%,.5)}.vxe-toolbar .vxe-buttons--wrapper{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.vxe-toolbar .vxe-buttons--wrapper>.vxe-button+.vxe-button--item,.vxe-toolbar .vxe-buttons--wrapper>.vxe-button--item+.vxe-button,.vxe-toolbar .vxe-buttons--wrapper>.vxe-button--item+.vxe-button--item{margin-left:.8em}.vxe-toolbar .vxe-buttons--wrapper>.vxe-button--item{display:inline-block}.vxe-toolbar .vxe-tools--wrapper>.vxe-button+.vxe-tool--item,.vxe-toolbar .vxe-tools--wrapper>.vxe-tool--item+.vxe-button,.vxe-toolbar .vxe-tools--wrapper>.vxe-tool--item+.vxe-tool--item{margin-left:.8em}.vxe-toolbar .vxe-tools--wrapper>.vxe-tool--item{display:inline-block}.vxe-toolbar .vxe-tools--wrapper>.vxe-button{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.vxe-toolbar .vxe-buttons--wrapper,.vxe-toolbar .vxe-tools--operate,.vxe-toolbar .vxe-tools--wrapper,.vxe-toolbar .vxe-tools--wrapper>.vxe-button{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.vxe-toolbar .vxe-buttons--wrapper,.vxe-toolbar .vxe-tools--wrapper{-ms-flex-wrap:wrap;flex-wrap:wrap}.vxe-toolbar .vxe-tools--operate{-ms-flex-negative:0;flex-shrink:0}.vxe-toolbar .vxe-custom--wrapper{position:relative;margin-left:.8em}.vxe-toolbar .vxe-custom--wrapper.is--active>.vxe-button{background-color:#d9dadb;border-radius:50%}.vxe-toolbar .vxe-custom--wrapper.is--active .vxe-custom--option-wrapper{display:block}.vxe-toolbar .vxe-custom--option-wrapper{display:none;position:absolute;right: 0.125rem;text-align:left;background-color:#fff;z-index:19;border: 0.0625rem solid #e8eaec;border-radius: 0.25rem;-webkit-box-shadow:0 0.0625rem 0.375rem rgba(0,0,0,.2);box-shadow:0 0.0625rem 0.375rem rgba(0,0,0,.2)}.vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--header{padding:.28em 0;font-weight:700;border-bottom: 0.0625rem solid #dadce0}.vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--body{padding:.2em 0;max-height:17.6em}.vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--body .vxe-custom--option:hover{background-color:#f5f7fa}.vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--body>li,.vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--header>li{max-width:16em;min-width:12.5em;padding:.2em 1em .2em 1em}.vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--body>li.level--2,.vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--header>li.level--2{padding-left:3.5em}.vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--body>li.level--2 .vxe-checkbox--icon,.vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--header>li.level--2 .vxe-checkbox--icon{left:1.8em}.vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--body>li.level--3,.vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--header>li.level--3{padding-left:4.5em}.vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--body>li.level--3 .vxe-checkbox--icon,.vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--header>li.level--3 .vxe-checkbox--icon{left:2.8em}.vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--body>li.level--4,.vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--header>li.level--4{padding-left:5.5em}.vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--body>li.level--4 .vxe-checkbox--icon,.vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--header>li.level--4 .vxe-checkbox--icon{left:3.8em}.vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--body>li.level--5,.vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--header>li.level--5{padding-left:6.5em}.vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--body>li.level--5 .vxe-checkbox--icon,.vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--header>li.level--5 .vxe-checkbox--icon{left:4.8em}.vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--body>li.level--6,.vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--header>li.level--6{padding-left:7.5em}.vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--body>li.level--6 .vxe-checkbox--icon,.vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--header>li.level--6 .vxe-checkbox--icon{left:5.8em}.vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--body>li.level--7,.vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--header>li.level--7{padding-left:8.5em}.vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--body>li.level--7 .vxe-checkbox--icon,.vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--header>li.level--7 .vxe-checkbox--icon{left:6.8em}.vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--body>li.level--8,.vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--header>li.level--8{padding-left:9.5em}.vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--body>li.level--8 .vxe-checkbox--icon,.vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--header>li.level--8 .vxe-checkbox--icon{left:7.8em}.vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--footer{border-top: 0.0625rem solid #dadce0;text-align:right}.vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--footer button{background-color:transparent;width:50%;height:2.5em;border:0;color:#606266;text-align:center;cursor:pointer}.vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--footer button:focus{outline:none}.vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--footer button:hover{color:#409eff}.vxe-custom--option-wrapper .vxe-custom--body,.vxe-custom--option-wrapper .vxe-custom--header{list-style-type:none;overflow-x:hidden;overflow-y:auto;margin:0;padding:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.vxe-custom--option-wrapper .vxe-custom--body>li,.vxe-custom--option-wrapper .vxe-custom--header>li{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vxe-toolbar,.vxe-toolbar.size--medium{font-size: 0.875rem}.vxe-toolbar.size--small{font-size: 0.8125rem}.vxe-toolbar.size--mini{font-size: 0.75rem}.vxe-pager{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#606266;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Helvetica Neue,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;text-align:right;background-color:#fff}.vxe-pager.is--hidden{display:none}.vxe-pager.align--left{text-align:left}.vxe-pager.align--center{text-align:center}.vxe-pager.is--loading:after{content:"";position:absolute;top:0;left:0;width:100%;height:100%;z-index:999;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:hsla(0,0%,100%,.5)}.vxe-pager .vxe-pager--jump-next,.vxe-pager .vxe-pager--jump-prev,.vxe-pager .vxe-pager--next-btn,.vxe-pager .vxe-pager--num-btn,.vxe-pager .vxe-pager--prev-btn{color:inherit;outline:0;padding:0;border: 0.0625rem solid transparent}.vxe-pager .vxe-pager--jump-next:not(.is--disabled):focus,.vxe-pager .vxe-pager--jump-prev:not(.is--disabled):focus,.vxe-pager .vxe-pager--next-btn:not(.is--disabled):focus,.vxe-pager .vxe-pager--num-btn:not(.is--disabled):focus,.vxe-pager .vxe-pager--prev-btn:not(.is--disabled):focus{-webkit-box-shadow:0 0 .25em 0 #409eff;box-shadow:0 0 .25em 0 #409eff}.vxe-pager .vxe-pager--jump-next:not(.is--disabled):active,.vxe-pager .vxe-pager--jump-prev:not(.is--disabled):active,.vxe-pager .vxe-pager--next-btn:not(.is--disabled):active,.vxe-pager .vxe-pager--num-btn:not(.is--disabled):active,.vxe-pager .vxe-pager--prev-btn:not(.is--disabled):active{background-color:#f7f7f7}.vxe-pager.is--border:not(.is--background) .vxe-pager--jump-next,.vxe-pager.is--border:not(.is--background) .vxe-pager--jump-prev,.vxe-pager.is--border:not(.is--background) .vxe-pager--next-btn,.vxe-pager.is--border:not(.is--background) .vxe-pager--num-btn,.vxe-pager.is--border:not(.is--background) .vxe-pager--prev-btn,.vxe-pager.is--perfect:not(.is--background) .vxe-pager--jump-next,.vxe-pager.is--perfect:not(.is--background) .vxe-pager--jump-prev,.vxe-pager.is--perfect:not(.is--background) .vxe-pager--next-btn,.vxe-pager.is--perfect:not(.is--background) .vxe-pager--num-btn,.vxe-pager.is--perfect:not(.is--background) .vxe-pager--prev-btn{border-color:#dcdfe6}.vxe-pager.is--background .vxe-pager--jump-next,.vxe-pager.is--background .vxe-pager--jump-prev,.vxe-pager.is--background .vxe-pager--next-btn,.vxe-pager.is--background .vxe-pager--num-btn,.vxe-pager.is--background .vxe-pager--prev-btn,.vxe-pager.is--perfect .vxe-pager--jump-next,.vxe-pager.is--perfect .vxe-pager--jump-prev,.vxe-pager.is--perfect .vxe-pager--next-btn,.vxe-pager.is--perfect .vxe-pager--num-btn,.vxe-pager.is--perfect .vxe-pager--prev-btn{background-color:#f4f4f5}.vxe-pager.is--background .vxe-pager--jump-next:not(.is--disabled).is--active,.vxe-pager.is--background .vxe-pager--jump-prev:not(.is--disabled).is--active,.vxe-pager.is--background .vxe-pager--num-btn:not(.is--disabled).is--active,.vxe-pager.is--perfect .vxe-pager--jump-next:not(.is--disabled).is--active,.vxe-pager.is--perfect .vxe-pager--jump-prev:not(.is--disabled).is--active,.vxe-pager.is--perfect .vxe-pager--num-btn:not(.is--disabled).is--active{color:#fff;background-color:#409eff}.vxe-pager.is--background .vxe-pager--jump-next:not(.is--disabled).is--active:hover,.vxe-pager.is--background .vxe-pager--jump-prev:not(.is--disabled).is--active:hover,.vxe-pager.is--background .vxe-pager--num-btn:not(.is--disabled).is--active:hover,.vxe-pager.is--perfect .vxe-pager--jump-next:not(.is--disabled).is--active:hover,.vxe-pager.is--perfect .vxe-pager--jump-prev:not(.is--disabled).is--active:hover,.vxe-pager.is--perfect .vxe-pager--num-btn:not(.is--disabled).is--active:hover{background-color:#5faeff}.vxe-pager.is--background .vxe-pager--jump-next:not(.is--disabled).is--active:focus,.vxe-pager.is--background .vxe-pager--jump-prev:not(.is--disabled).is--active:focus,.vxe-pager.is--background .vxe-pager--num-btn:not(.is--disabled).is--active:focus,.vxe-pager.is--perfect .vxe-pager--jump-next:not(.is--disabled).is--active:focus,.vxe-pager.is--perfect .vxe-pager--jump-prev:not(.is--disabled).is--active:focus,.vxe-pager.is--perfect .vxe-pager--num-btn:not(.is--disabled).is--active:focus{border-color:#409eff}.vxe-pager.is--background .vxe-pager--jump-next:not(.is--disabled).is--active:active,.vxe-pager.is--background .vxe-pager--jump-prev:not(.is--disabled).is--active:active,.vxe-pager.is--background .vxe-pager--num-btn:not(.is--disabled).is--active:active,.vxe-pager.is--perfect .vxe-pager--jump-next:not(.is--disabled).is--active:active,.vxe-pager.is--perfect .vxe-pager--jump-prev:not(.is--disabled).is--active:active,.vxe-pager.is--perfect .vxe-pager--num-btn:not(.is--disabled).is--active:active{border-color:#3196ff;background-color:#3196ff}.vxe-pager.is--perfect{border: 0.0625rem solid #e8eaec;border-top-width:0;background-color:#fff}.vxe-pager.is--border .vxe-pager--num-btn.is--active{border-color:#409eff}.vxe-pager .vxe-pager--wrapper{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.vxe-pager .vxe-pager--btn-icon,.vxe-pager .vxe-pager--jump-icon{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.vxe-pager .vxe-pager--count,.vxe-pager .vxe-pager--jump,.vxe-pager .vxe-pager--jump-next,.vxe-pager .vxe-pager--jump-prev,.vxe-pager .vxe-pager--left-wrapper,.vxe-pager .vxe-pager--next-btn,.vxe-pager .vxe-pager--prev-btn,.vxe-pager .vxe-pager--right-wrapper,.vxe-pager .vxe-pager--sizes,.vxe-pager .vxe-pager--total{margin:0 .4em;vertical-align:middle;display:inline-block}.vxe-pager .vxe-pager--jump-next,.vxe-pager .vxe-pager--jump-prev,.vxe-pager .vxe-pager--next-btn,.vxe-pager .vxe-pager--num-btn,.vxe-pager .vxe-pager--prev-btn{position:relative;cursor:pointer}.vxe-pager .vxe-pager--count,.vxe-pager .vxe-pager--jump-next,.vxe-pager .vxe-pager--jump-prev,.vxe-pager .vxe-pager--left-wrapper,.vxe-pager .vxe-pager--next-btn,.vxe-pager .vxe-pager--num-btn,.vxe-pager .vxe-pager--prev-btn,.vxe-pager .vxe-pager--right-wrapper{height:2.15em;line-height:2em;display:inline-block}.vxe-pager .vxe-pager--jump .vxe-pager--goto,.vxe-pager .vxe-pager--sizes>.vxe-input{height:2.15em;line-height:2.15em}.vxe-pager .vxe-pager--sizes>.vxe-select--panel .vxe-select-option{text-align:center}.vxe-pager .vxe-pager--count,.vxe-pager .vxe-pager--jump-next,.vxe-pager .vxe-pager--jump-prev,.vxe-pager .vxe-pager--next-btn,.vxe-pager .vxe-pager--num-btn,.vxe-pager .vxe-pager--prev-btn{min-width:2.15em}.vxe-pager .vxe-pager--btn-wrapper{padding:0;margin:0;display:inline-block;text-align:center}.vxe-pager .vxe-pager--btn-wrapper .vxe-pager--jump-next:hover .vxe-pager--jump-more-icon,.vxe-pager .vxe-pager--btn-wrapper .vxe-pager--jump-prev:hover .vxe-pager--jump-more-icon{display:none}.vxe-pager .vxe-pager--btn-wrapper .vxe-pager--jump-next:hover .vxe-pager--jump-icon,.vxe-pager .vxe-pager--btn-wrapper .vxe-pager--jump-prev:hover .vxe-pager--jump-icon{display:inline-block}.vxe-pager .vxe-pager--btn-wrapper .vxe-pager--jump-icon{display:none}.vxe-pager .vxe-pager--jump-next,.vxe-pager .vxe-pager--jump-prev,.vxe-pager .vxe-pager--next-btn,.vxe-pager .vxe-pager--num-btn,.vxe-pager .vxe-pager--prev-btn{text-align:center;border-radius: 0.25rem;margin:0 .25em;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#fff}.vxe-pager .vxe-pager--jump-next:not(.is--disabled):hover,.vxe-pager .vxe-pager--jump-prev:not(.is--disabled):hover,.vxe-pager .vxe-pager--next-btn:not(.is--disabled):hover,.vxe-pager .vxe-pager--num-btn:not(.is--disabled):hover,.vxe-pager .vxe-pager--prev-btn:not(.is--disabled):hover{color:#5faeff}.vxe-pager .vxe-pager--jump-next:not(.is--disabled).is--active,.vxe-pager .vxe-pager--jump-next:not(.is--disabled):focus,.vxe-pager .vxe-pager--jump-prev:not(.is--disabled).is--active,.vxe-pager .vxe-pager--jump-prev:not(.is--disabled):focus,.vxe-pager .vxe-pager--next-btn:not(.is--disabled).is--active,.vxe-pager .vxe-pager--next-btn:not(.is--disabled):focus,.vxe-pager .vxe-pager--num-btn:not(.is--disabled).is--active,.vxe-pager .vxe-pager--num-btn:not(.is--disabled):focus,.vxe-pager .vxe-pager--prev-btn:not(.is--disabled).is--active,.vxe-pager .vxe-pager--prev-btn:not(.is--disabled):focus{color:#409eff}.vxe-pager .vxe-pager--jump-next:not(.is--disabled):active,.vxe-pager .vxe-pager--jump-prev:not(.is--disabled):active,.vxe-pager .vxe-pager--next-btn:not(.is--disabled):active,.vxe-pager .vxe-pager--num-btn:not(.is--disabled):active,.vxe-pager .vxe-pager--prev-btn:not(.is--disabled):active{color:#3196ff}.vxe-pager .vxe-pager--jump-next.is--disabled,.vxe-pager .vxe-pager--jump-prev.is--disabled,.vxe-pager .vxe-pager--next-btn.is--disabled,.vxe-pager .vxe-pager--num-btn.is--disabled,.vxe-pager .vxe-pager--prev-btn.is--disabled{cursor:no-drop;color:#bfbfbf}.vxe-pager .vxe-pager--jump-next.is--disabled:hover,.vxe-pager .vxe-pager--jump-prev.is--disabled:hover,.vxe-pager .vxe-pager--next-btn.is--disabled:hover,.vxe-pager .vxe-pager--num-btn.is--disabled:hover,.vxe-pager .vxe-pager--prev-btn.is--disabled:hover{color:#bfbfbf}.vxe-pager .vxe-pager--num-btn{vertical-align:middle}.vxe-pager .vxe-pager--num-btn.is--active{font-weight:700}.vxe-pager .vxe-pager--sizes{width:7em;text-align:center;cursor:pointer}.vxe-pager .vxe-pager--count,.vxe-pager .vxe-pager--sizes .vxe-input--inner{text-align:center}.vxe-pager .vxe-pager--count>span{vertical-align:middle}.vxe-pager .vxe-pager--count .vxe-pager--separator{margin-right:.2em}.vxe-pager .vxe-pager--count .vxe-pager--separator:before{content:"/"}.vxe-pager .vxe-pager--jump .vxe-pager--goto{border-radius: 0.25rem;border: 0.0625rem solid #dcdfe6;color:#606266;-webkit-transition:border .2s ease-in-out;transition:border .2s ease-in-out;padding:0 .4em;background-color:#fff}.vxe-pager .vxe-pager--jump .vxe-pager--goto:focus{border: 0.0625rem solid #409eff;outline:0}.vxe-pager .vxe-pager--jump .vxe-pager--goto-text{margin-right:.25em}.vxe-pager .vxe-pager--jump .vxe-pager--classifier-text{margin-left:.25em}.vxe-pager .vxe-pager--jump .vxe-pager--goto{width:3.2em;text-align:center}.vxe-pager{font-size: 0.875rem;height: 3rem}.vxe-pager.size--medium{font-size: 0.875rem;height: 2.75rem}.vxe-pager.size--small{font-size: 0.8125rem;height: 2.5rem}.vxe-pager.size--mini{font-size: 0.75rem;height: 2.25rem}.vxe-checkbox,.vxe-checkbox-group{display:inline-block;vertical-align:middle;line-height:1}.vxe-checkbox{white-space:nowrap}.vxe-checkbox+.vxe-checkbox{margin-left: 0.625rem}.vxe-checkbox>input[type=checkbox]{position:absolute;width:0;height:0;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}.vxe-checkbox.is--indeterminate>input:not(:checked)+.vxe-checkbox--icon{color:#409eff}.vxe-checkbox:not(.is--disabled)>input:focus+.vxe-checkbox--icon{color:#409eff;-webkit-box-shadow:0 0 .2em 0 #409eff;box-shadow:0 0 .2em 0 #409eff}.vxe-checkbox:not(.is--disabled):hover>input+.vxe-checkbox--icon{border-color:#409eff}.vxe-checkbox.is--disabled{cursor:not-allowed}.vxe-checkbox.is--disabled>input+.vxe-checkbox--icon{color:#dcdfe6}.vxe-checkbox.is--disabled>input+.vxe-checkbox--icon+.vxe-checkbox--label{color:#bfbfbf}.vxe-checkbox.is--disabled>input:checked+.vxe-checkbox--icon{color:#dcdfe6}.vxe-checkbox .vxe-checkbox--label{padding-left:.5em;vertical-align:middle;display:inline-block;max-width:50em}.vxe-checkbox,.vxe-checkbox.size--medium{font-size: 0.875rem}.vxe-checkbox.size--small{font-size: 0.8125rem}.vxe-checkbox.size--mini{font-size: 0.75rem}[class*=vxe-],[class*=vxe-]:after,[class*=vxe-] :after,[class*=vxe-]:before,[class*=vxe-] :before{-webkit-box-sizing:border-box;box-sizing:border-box}.vxe-checkbox .vxe-checkbox--label,.vxe-radio-button .vxe-radio--label,.vxe-radio .vxe-radio--label,.vxe-table--render-default .vxe-body--column.col--ellipsis:not(.col--actived)>.vxe-cell,.vxe-table--render-default .vxe-footer--column.col--ellipsis:not(.col--actived)>.vxe-cell,.vxe-table--render-default .vxe-header--column.col--ellipsis:not(.col--actived)>.vxe-cell{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}[class*=vxe-]{font-variant:tabular-nums;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum"}.vxe-primary-color{color:#409eff}.vxe-success-color{color:#67c23a}.vxe-info-color{color:#909399}.vxe-warning-color{color:#e6a23c}.vxe-danger-color{color:#f56c6c}.vxe-perfect-color{color:#f8f8f9}.vxe-row:after{content:"";display:block;clear:both;height:0;overflow:hidden;visibility:hidden}.vxe-row>.vxe-col--1{float:left;width:4.16667%}.vxe-row>.vxe-col--2{float:left;width:8.33333%}.vxe-row>.vxe-col--3{float:left;width:12.5%}.vxe-row>.vxe-col--4{float:left;width:16.66667%}.vxe-row>.vxe-col--5{float:left;width:20.83333%}.vxe-row>.vxe-col--6{float:left;width:25%}.vxe-row>.vxe-col--7{float:left;width:29.16667%}.vxe-row>.vxe-col--8{float:left;width:33.33333%}.vxe-row>.vxe-col--9{float:left;width:37.5%}.vxe-row>.vxe-col--10{float:left;width:41.66667%}.vxe-row>.vxe-col--11{float:left;width:45.83333%}.vxe-row>.vxe-col--12{float:left;width:50%}.vxe-row>.vxe-col--13{float:left;width:54.16667%}.vxe-row>.vxe-col--14{float:left;width:58.33333%}.vxe-row>.vxe-col--15{float:left;width:62.5%}.vxe-row>.vxe-col--16{float:left;width:66.66667%}.vxe-row>.vxe-col--17{float:left;width:70.83333%}.vxe-row>.vxe-col--18{float:left;width:75%}.vxe-row>.vxe-col--19{float:left;width:79.16667%}.vxe-row>.vxe-col--20{float:left;width:83.33333%}.vxe-row>.vxe-col--21{float:left;width:87.5%}.vxe-row>.vxe-col--22{float:left;width:91.66667%}.vxe-row>.vxe-col--23{float:left;width:95.83333%}.vxe-row>.vxe-col--24{float:left;width:100%}.is--animat .vxe-filter--btn:after,.is--animat .vxe-filter--btn:before,.is--animat .vxe-input--wrapper .vxe-input,.is--animat .vxe-sort--asc-btn:after,.is--animat .vxe-sort--asc-btn:before,.is--animat .vxe-sort--desc-btn:after,.is--animat .vxe-sort--desc-btn:before{-webkit-transition:border .1s ease-in-out;transition:border .1s ease-in-out}.is--animat .vxe-table--expand-btn,.is--animat .vxe-tree--node-btn{-webkit-transition:-webkit-transform .1s ease-in-out;transition:-webkit-transform .1s ease-in-out;transition:transform .1s ease-in-out;transition:transform .1s ease-in-out,-webkit-transform .1s ease-in-out}.is--animat .vxe-checkbox>input:checked+span,.is--animat .vxe-radio>input:checked+span{-webkit-transition:background-color .1s ease-in-out;transition:background-color .1s ease-in-out}.vxe-checkbox .vxe-checkbox--icon,.vxe-custom--option .vxe-checkbox--icon,.vxe-export--panel-column-option .vxe-checkbox--icon,.vxe-table--filter-option .vxe-checkbox--icon,.vxe-table--render-default .vxe-cell--checkbox .vxe-checkbox--icon{font-size:1.34em;color:#dcdfe6;vertical-align:middle;font-weight:700;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.is--checked.vxe-checkbox,.is--checked.vxe-checkbox .vxe-checkbox--icon,.is--checked.vxe-custom--option,.is--checked.vxe-custom--option .vxe-checkbox--icon,.is--checked.vxe-export--panel-column-option,.is--checked.vxe-export--panel-column-option .vxe-checkbox--icon,.is--checked.vxe-table--filter-option,.is--checked.vxe-table--filter-option .vxe-checkbox--icon,.is--indeterminate.vxe-checkbox,.is--indeterminate.vxe-checkbox .vxe-checkbox--icon,.is--indeterminate.vxe-custom--option,.is--indeterminate.vxe-custom--option .vxe-checkbox--icon,.is--indeterminate.vxe-export--panel-column-option,.is--indeterminate.vxe-export--panel-column-option .vxe-checkbox--icon,.is--indeterminate.vxe-table--filter-option,.is--indeterminate.vxe-table--filter-option .vxe-checkbox--icon,.vxe-table--render-default .is--checked.vxe-cell--checkbox,.vxe-table--render-default .is--checked.vxe-cell--checkbox .vxe-checkbox--icon,.vxe-table--render-default .is--indeterminate.vxe-cell--checkbox,.vxe-table--render-default .is--indeterminate.vxe-cell--checkbox .vxe-checkbox--icon{color:#409eff}.vxe-checkbox:not(.is--disabled),.vxe-custom--option:not(.is--disabled),.vxe-export--panel-column-option:not(.is--disabled),.vxe-table--filter-option:not(.is--disabled),.vxe-table--render-default .vxe-cell--checkbox:not(.is--disabled){cursor:pointer}.vxe-checkbox:not(.is--disabled):hover .vxe-checkbox--icon,.vxe-custom--option:not(.is--disabled):hover .vxe-checkbox--icon,.vxe-export--panel-column-option:not(.is--disabled):hover .vxe-checkbox--icon,.vxe-table--filter-option:not(.is--disabled):hover .vxe-checkbox--icon,.vxe-table--render-default .vxe-cell--checkbox:not(.is--disabled):hover .vxe-checkbox--icon{color:#409eff}.is--disabled.vxe-checkbox,.is--disabled.vxe-custom--option,.is--disabled.vxe-export--panel-column-option,.is--disabled.vxe-table--filter-option,.vxe-table--render-default .is--disabled.vxe-cell--checkbox{color:#bfbfbf;cursor:not-allowed}.is--disabled.vxe-checkbox .vxe-checkbox--icon,.is--disabled.vxe-custom--option .vxe-checkbox--icon,.is--disabled.vxe-export--panel-column-option .vxe-checkbox--icon,.is--disabled.vxe-table--filter-option .vxe-checkbox--icon,.vxe-table--render-default .is--disabled.vxe-cell--checkbox .vxe-checkbox--icon{color:#dcdfe6}.vxe-checkbox .vxe-checkbox--label,.vxe-custom--option .vxe-checkbox--label,.vxe-export--panel-column-option .vxe-checkbox--label,.vxe-table--filter-option .vxe-checkbox--label,.vxe-table--render-default .vxe-cell--checkbox .vxe-checkbox--label{padding-left:.5em;vertical-align:middle}.vxe-radio,.vxe-table--render-default .vxe-cell--radio{cursor:pointer}.vxe-radio .vxe-radio--icon,.vxe-table--render-default .vxe-cell--radio .vxe-radio--icon{font-size:1.4em;color:#dcdfe6;vertical-align:middle;font-weight:700;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.is--checked.vxe-radio,.is--checked.vxe-radio .vxe-radio--icon,.vxe-table--render-default .is--checked.vxe-cell--radio,.vxe-table--render-default .is--checked.vxe-cell--radio .vxe-radio--icon{color:#409eff}.vxe-radio:not(.is--disabled),.vxe-table--render-default .vxe-cell--radio:not(.is--disabled){cursor:pointer}.vxe-radio:not(.is--disabled):hover .vxe-radio--icon,.vxe-table--render-default .vxe-cell--radio:not(.is--disabled):hover .vxe-radio--icon{color:#409eff}.is--disabled.vxe-radio,.vxe-table--render-default .is--disabled.vxe-cell--radio{color:#bfbfbf;cursor:not-allowed}.is--disabled.vxe-radio .vxe-radio--icon,.vxe-table--render-default .is--disabled.vxe-cell--radio .vxe-radio--icon{color:#dcdfe6}.vxe-radio .vxe-radio--label,.vxe-table--render-default .vxe-cell--radio .vxe-radio--label{padding-left:.5em;vertical-align:middle}.vxe-radio-group{display:inline-block;vertical-align:middle;line-height:1;font-size:0}.vxe-radio-group+.vxe-radio-group{margin-left: 0.625rem}.vxe-radio{display:inline-block;vertical-align:middle;white-space:nowrap;line-height:1}.vxe-radio>input[type=radio]{position:absolute;width:0;height:0;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}.vxe-radio .vxe-radio--label{vertical-align:middle;display:inline-block;max-width:50em}.vxe-radio:not(.is--disabled)>input:focus+.vxe-radio--icon{color:#409eff}.vxe-radio:not(.vxe-radio-button)+.vxe-radio{margin-left: 0.625rem}.vxe-radio-button .vxe-radio--label{background-color:#fff}.vxe-radio-button:first-child .vxe-radio--label{border-left: 0.0625rem solid #dcdfe6;border-radius: 0.25rem 0 0 0.25rem}.vxe-radio-button:last-child .vxe-radio--label{border-radius:0 0.25rem 0.25rem 0}.vxe-radio-button>input:checked+.vxe-radio--label{color:#fff;background-color:#409eff;border-color:#409eff}.vxe-radio-button .vxe-radio--label{padding:0 1em;line-height: 2rem;display:inline-block;border-style:solid;border-color:#dcdfe6;border-width: 0.0625rem 0.0625rem 0.0625rem 0;max-width:50em}.vxe-radio-button.is--disabled{cursor:not-allowed}.vxe-radio-button.is--disabled>input:not(:checked)+.vxe-radio--label{color:#dcdfe6}.vxe-radio-button.is--disabled>input:checked+.vxe-radio--label{border-color:#a6d2ff;background-color:#a6d2ff}.vxe-radio-button:not(.is--disabled)>input:focus+.vxe-radio--label{border-color:#409eff;-webkit-box-shadow:0 0 .2em 0 #409eff;box-shadow:0 0 .2em 0 #409eff}.vxe-radio-button:not(.is--disabled):hover>input:not(:checked)+.vxe-radio--label{color:#409eff}.vxe-radio-button.size--medium .vxe-radio--label{line-height: 1.875rem}.vxe-radio-button.size--small .vxe-radio--label{line-height: 1.75rem}.vxe-radio-button.size--mini .vxe-radio--label{line-height: 1.625rem}.vxe-radio,.vxe-radio.size--medium{font-size: 0.875rem}.vxe-radio.size--small{font-size: 0.8125rem}.vxe-radio.size--mini{font-size: 0.75rem}.vxe-input--inner{width:100%;height:100%;border-radius: 0.25rem;outline:0;margin:0;font-size:inherit;font-family:inherit;line-height:inherit;padding:0 .6em;color:#606266;border: 0.0625rem solid #dcdfe6;background-color:#fff;-webkit-box-shadow:none;box-shadow:none}.vxe-input--inner::-webkit-input-placeholder{color:#c0c4cc}.vxe-input--inner::-moz-placeholder{color:#c0c4cc}.vxe-input--inner:-ms-input-placeholder{color:#c0c4cc}.vxe-input--inner::-ms-input-placeholder{color:#c0c4cc}.vxe-input--inner::placeholder{color:#c0c4cc}.vxe-input--inner::-webkit-autofill{background-color:#fff}.vxe-input--inner[type=number]{-webkit-appearance:none;appearance:none;-moz-appearance:textfield}.vxe-input--inner[type=number]::-webkit-inner-spin-button,.vxe-input--inner[type=number]::-webkit-outer-spin-button,.vxe-input--inner[type=search],.vxe-input--inner[type=search]::-webkit-search-cancel-button{-webkit-appearance:none;appearance:none}.vxe-input--inner[disabled]{cursor:not-allowed;color:#bfbfbf;background-color:#f3f3f3}.vxe-input{display:inline-block;position:relative;width: 11.25rem}.vxe-input.is--disabled .vxe-input--date-picker-suffix,.vxe-input.is--disabled .vxe-input--number-suffix,.vxe-input.is--disabled .vxe-input--password-suffix,.vxe-input.is--disabled .vxe-input--search-suffix,.vxe-input.is--disabled .vxe-input--suffix{cursor:no-drop}.vxe-input:not(.is--disabled) .vxe-input--clear-icon,.vxe-input:not(.is--disabled) .vxe-input--number-suffix,.vxe-input:not(.is--disabled) .vxe-input--password-suffix,.vxe-input:not(.is--disabled) .vxe-input--search-suffix{cursor:pointer}.vxe-input:not(.is--disabled).is--active .vxe-input--inner{border: 0.0625rem solid #409eff}.vxe-input .vxe-input--extra-suffix,.vxe-input .vxe-input--prefix,.vxe-input .vxe-input--suffix{display:-webkit-box;display:-ms-flexbox;display:flex;position:absolute;top:0;width:1.6em;height:100%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;color:#c0c4cc}.vxe-input .vxe-input--prefix{left:.2em}.vxe-input.is--prefix .vxe-input--inner{padding-left:1.8em}.vxe-input .vxe-input--clear-icon{display:none}.vxe-input .vxe-input--extra-suffix,.vxe-input .vxe-input--suffix{right:.2em}.vxe-input.is--suffix .vxe-input--inner{padding-right:1.8em}.vxe-input.is--left .vxe-input--inner{text-align:left}.vxe-input.is--center .vxe-input--inner{text-align:center}.vxe-input.is--right .vxe-input--inner{text-align:right}.vxe-input.is--controls.type--date .vxe-input--inner,.vxe-input.is--controls.type--datetime .vxe-input--inner,.vxe-input.is--controls.type--float .vxe-input--inner,.vxe-input.is--controls.type--integer .vxe-input--inner,.vxe-input.is--controls.type--month .vxe-input--inner,.vxe-input.is--controls.type--number .vxe-input--inner,.vxe-input.is--controls.type--password .vxe-input--inner,.vxe-input.is--controls.type--quarter .vxe-input--inner,.vxe-input.is--controls.type--search .vxe-input--inner,.vxe-input.is--controls.type--time .vxe-input--inner,.vxe-input.is--controls.type--week .vxe-input--inner,.vxe-input.is--controls.type--year .vxe-input--inner{padding-right:1.8em}.vxe-input.is--controls.type--date .vxe-input--suffix,.vxe-input.is--controls.type--datetime .vxe-input--suffix,.vxe-input.is--controls.type--float .vxe-input--suffix,.vxe-input.is--controls.type--integer .vxe-input--suffix,.vxe-input.is--controls.type--month .vxe-input--suffix,.vxe-input.is--controls.type--number .vxe-input--suffix,.vxe-input.is--controls.type--password .vxe-input--suffix,.vxe-input.is--controls.type--quarter .vxe-input--suffix,.vxe-input.is--controls.type--search .vxe-input--suffix,.vxe-input.is--controls.type--time .vxe-input--suffix,.vxe-input.is--controls.type--week .vxe-input--suffix,.vxe-input.is--controls.type--year .vxe-input--suffix{right:1.6em}.vxe-input.is--suffix.is--controls.type--date .vxe-input--inner,.vxe-input.is--suffix.is--controls.type--datetime .vxe-input--inner,.vxe-input.is--suffix.is--controls.type--float .vxe-input--inner,.vxe-input.is--suffix.is--controls.type--integer .vxe-input--inner,.vxe-input.is--suffix.is--controls.type--month .vxe-input--inner,.vxe-input.is--suffix.is--controls.type--number .vxe-input--inner,.vxe-input.is--suffix.is--controls.type--password .vxe-input--inner,.vxe-input.is--suffix.is--controls.type--quarter .vxe-input--inner,.vxe-input.is--suffix.is--controls.type--search .vxe-input--inner,.vxe-input.is--suffix.is--controls.type--time .vxe-input--inner,.vxe-input.is--suffix.is--controls.type--week .vxe-input--inner,.vxe-input.is--suffix.is--controls.type--year .vxe-input--inner{padding-right:3.2em}.vxe-input.is--suffix:hover .vxe-input--suffix.is--clear .vxe-input--suffix-icon{display:none}.vxe-input.is--suffix:hover .vxe-input--suffix.is--clear .vxe-input--clear-icon{display:inline}.vxe-input:not(.is--disabled) .vxe-input--suffix:hover .vxe-input--clear-icon{color:#606266}.vxe-input:not(.is--disabled) .vxe-input--suffix:active .vxe-input--clear-icon{color:#409eff}.vxe-input:not(.is--disabled) .vxe-input--extra-suffix:hover .vxe-input--password-suffix,.vxe-input:not(.is--disabled) .vxe-input--extra-suffix:hover .vxe-input--search-suffix{color:#606266}.vxe-input:not(.is--disabled) .vxe-input--extra-suffix:active .vxe-input--password-suffix,.vxe-input:not(.is--disabled) .vxe-input--extra-suffix:active .vxe-input--search-suffix{color:#409eff}.vxe-input:not(.is--disabled) .vxe-input--number-next:hover,.vxe-input:not(.is--disabled) .vxe-input--number-prev:hover{color:#606266}.vxe-input:not(.is--disabled) .vxe-input--number-next:active,.vxe-input:not(.is--disabled) .vxe-input--number-prev:active{color:#409eff}.vxe-input:not(.is--disabled) .vxe-input--number-next.is--disabled,.vxe-input:not(.is--disabled) .vxe-input--number-prev.is--disabled{cursor:no-drop;color:#e4e7ed}.vxe-input .vxe-input--date-picker-suffix,.vxe-input .vxe-input--number-suffix,.vxe-input .vxe-input--password-suffix,.vxe-input .vxe-input--search-suffix{position:relative;width:100%;height:100%}.vxe-input .vxe-input--date-picker-icon,.vxe-input .vxe-input--password-icon,.vxe-input .vxe-input--search-icon{position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.vxe-input .vxe-input--date-picker-icon[class*=vxe-icon-],.vxe-input .vxe-input--password-icon[class*=vxe-icon-],.vxe-input .vxe-input--search-icon[class*=vxe-icon-]{font-size:1.2em}.vxe-input .vxe-input--date-picker-suffix{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.vxe-input .vxe-input--date-picker-suffix .vxe-input--panel-icon{-webkit-transition:-webkit-transform .2s ease-in-out;transition:-webkit-transform .2s ease-in-out;transition:transform .2s ease-in-out;transition:transform .2s ease-in-out,-webkit-transform .2s ease-in-out}.vxe-input .vxe-input--number-next,.vxe-input .vxe-input--number-prev{position:relative;display:block;height:50%;width:100%;text-align:center}.vxe-input .vxe-input--number-next-icon,.vxe-input .vxe-input--number-prev-icon{line-height:.8em;position:absolute;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.vxe-input .vxe-input--number-prev-icon{bottom:0}.vxe-input .vxe-input--number-next-icon{top:0}.vxe-input--panel{display:none;position:absolute;left:0;padding: 0.25rem 0;color:#606266;text-align:left}.vxe-input--panel:not(.is--transfer){min-width:100%}.vxe-input--panel.is--transfer{position:fixed}.vxe-input--panel.animat--leave{display:block;opacity:0;-webkit-transform:scaleY(.5);transform:scaleY(.5);-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);-webkit-transform-origin:center top;transform-origin:center top;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}.vxe-input--panel.animat--leave[placement=top]{-webkit-transform-origin:center bottom;transform-origin:center bottom}.vxe-input--panel.animat--enter{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1)}.vxe-input--panel-layout-wrapper,.vxe-input--panel-wrapper{background-color:#fff;border: 0.0625rem solid #dadce0;-webkit-box-shadow:0 0 0.375rem 0.125rem rgba(0,0,0,.1);box-shadow:0 0 0.375rem 0.125rem rgba(0,0,0,.1);border-radius: 0.25rem}.vxe-input--panel-wrapper{overflow-x:hidden;overflow-y:auto}.vxe-input--panel-layout-wrapper{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.vxe-input--panel.type--date,.vxe-input--panel.type--month,.vxe-input--panel.type--quarter,.vxe-input--panel.type--week,.vxe-input--panel.type--year{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.vxe-input--panel.type--datetime .vxe-input--panel-right-wrapper{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;border-left: 0.0625rem solid #dcdfe6}.vxe-input--panel.type--date .vxe-input--date-picker-body th,.vxe-input--panel.type--datetime .vxe-input--date-picker-body th{width:14.28571%}.vxe-input--panel.type--week .vxe-input--date-picker-body table th{width:12%}.vxe-input--panel.type--week .vxe-input--date-picker-body table th:first-child{width:14%}.vxe-input--panel.type--quarter .vxe-input--date-picker-body table th{width:50%}.vxe-input--panel.type--month .vxe-input--date-picker-body td,.vxe-input--panel.type--year .vxe-input--date-picker-body td{width:25%}.vxe-input--time-picker-title{display:inline-block;text-align:center;border: 0.0625rem solid #dcdfe6;border-radius: 0.25rem}.vxe-input--time-picker-confirm{position:absolute;right:0;top:0}.vxe-input--date-picker-confirm,.vxe-input--time-picker-confirm{outline:0;border: 0.0625rem solid #dcdfe6;border-radius: 0.25rem;cursor:pointer;color:#fff;border-color:#409eff;background-color:#409eff}.vxe-input--date-picker-confirm:hover,.vxe-input--time-picker-confirm:hover{background-color:#5faeff;border-color:#5faeff}.vxe-input--date-picker-confirm:active,.vxe-input--time-picker-confirm:active{background-color:#3196ff;border-color:#3196ff}.vxe-input--time-picker-header{display:-webkit-box;display:-ms-flexbox;display:flex;position:relative;-ms-flex-negative:0;flex-shrink:0}.vxe-input--date-picker-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.vxe-input--date-picker-header .vxe-input--date-picker-type-wrapper{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.vxe-input--date-picker-header .vxe-input--date-picker-btn-wrapper{-ms-flex-negative:0;flex-shrink:0;text-align:center}.vxe-input--date-picker-type-wrapper .vxe-input--date-picker-btn,.vxe-input--date-picker-type-wrapper .vxe-input--date-picker-label{display:inline-block}.vxe-input--date-picker-btn-wrapper{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.vxe-input--date-picker-btn,.vxe-input--date-picker-label{display:inline-block;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;background-color:#fff}.vxe-input--date-picker-btn.is--disabled{color:#bfbfbf;cursor:no-drop}.vxe-input--date-picker-btn:not(.is--disabled){cursor:pointer}.vxe-input--date-picker-btn:not(.is--disabled):hover{background-color:#fff}.vxe-input--date-picker-btn:not(.is--disabled):active{background-color:#f7f7f7}.vxe-input--date-picker-body{border-radius: 0.25rem;border: 0.0625rem solid #dadce0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.vxe-input--date-picker-body table{border:0;width:100%;border-spacing:0;border-collapse:separate;text-align:center;table-layout:fixed}.vxe-input--date-picker-body td,.vxe-input--date-picker-body th{font-weight:400}.vxe-input--date-picker-body th{-webkit-box-shadow:inset 0 -0.0625rem 0 0 #dadce0;box-shadow:inset 0 -0.0625rem 0 0 #dadce0}.vxe-input--date-picker-body td.is--next,.vxe-input--date-picker-body td.is--next .vxe-input--date-festival,.vxe-input--date-picker-body td.is--next .vxe-input--date-label,.vxe-input--date-picker-body td.is--prev,.vxe-input--date-picker-body td.is--prev .vxe-input--date-festival,.vxe-input--date-picker-body td.is--prev .vxe-input--date-label{color:#bfbfbf}.vxe-input--date-picker-body td.is--now{-webkit-box-shadow:inset 0 0 0 0.0625rem #dadce0;box-shadow:inset 0 0 0 0.0625rem #dadce0}.vxe-input--date-picker-body td.is--now:not(.is--selected).is--current,.vxe-input--date-picker-body td.is--now:not(.is--selected).is--current .vxe-input--date-festival,.vxe-input--date-picker-body td.is--now:not(.is--selected).is--current .vxe-input--date-label{color:#409eff}.vxe-input--date-picker-body td.is--hover{background-color:#f2f6fc}.vxe-input--date-picker-body td.is--selected{color:#fff;background-color:#409eff}.vxe-input--date-picker-body td.is--selected.is--next,.vxe-input--date-picker-body td.is--selected.is--prev{background-color:#73b8ff}.vxe-input--date-picker-body td.is--selected .vxe-input--date-festival,.vxe-input--date-picker-body td.is--selected .vxe-input--date-label{color:#fff}.vxe-input--date-picker-body td.is--selected .vxe-input--date-label.is-notice:before{background-color:#fff}.vxe-input--date-picker-body td:not(.is--disabled){cursor:pointer}.vxe-input--date-picker-body td.is--disabled{cursor:no-drop;color:#dcdfe6;background-color:#f3f3f3}.vxe-input--date-picker-body td.is--disabled .vxe-input--date-festival,.vxe-input--date-picker-body td.is--disabled .vxe-input--date-label{color:#dcdfe6}.vxe-input--date-week-view th:first-child{-webkit-box-shadow:inset -0.0625rem -0.0625rem 0 0 #dadce0;box-shadow:inset -0.0625rem -0.0625rem 0 0 #dadce0}.vxe-input--date-week-view td:first-child{-webkit-box-shadow:inset -0.0625rem 0 0 0 #dadce0;box-shadow:inset -0.0625rem 0 0 0 #dadce0}.vxe-input--date-festival,.vxe-input--date-label{display:block;overflow:hidden}.vxe-input--date-label{position:relative}.vxe-input--date-label.is-notice:before{content:"";position:absolute;width: 0.25rem;height: 0.25rem;left:.8em;top:.1em;-webkit-transform:translateX(-50%);transform:translateX(-50%);border-radius:100%;background-color:red}.vxe-input--date-label--extra{position:absolute;right:.1em;top:-.2em;font-size: 0.75rem;line-height: 0.75rem;-webkit-transform:scale(.7);transform:scale(.7);color:#67c23a}.vxe-input--date-label--extra.is-important{color:#fd2222}.vxe-input--date-festival{color:#999;height: 0.875rem;line-height:1;overflow:hidden}.vxe-input--date-festival.is-important{color:#409eff}.vxe-input--date-festival--label{display:block;font-size: 0.75rem;-webkit-transform:scale(.8);transform:scale(.8)}@-webkit-keyframes festivalOverlap2{0%,45%,to{-webkit-transform:translateY(0);transform:translateY(0)}50%,95%{-webkit-transform:translateY( -0.875rem);transform:translateY( -0.875rem)}}@keyframes festivalOverlap2{0%,45%,to{-webkit-transform:translateY(0);transform:translateY(0)}50%,95%{-webkit-transform:translateY( -0.875rem);transform:translateY( -0.875rem)}}@-webkit-keyframes festivalOverlap3{0%,20%,to{-webkit-transform:translateY(0);transform:translateY(0)}25%,45%,75%,95%{-webkit-transform:translateY( -0.875rem);transform:translateY( -0.875rem)}50%,70%{-webkit-transform:translateY( -1.75rem);transform:translateY( -1.75rem)}}@keyframes festivalOverlap3{0%,20%,to{-webkit-transform:translateY(0);transform:translateY(0)}25%,45%,75%,95%{-webkit-transform:translateY( -0.875rem);transform:translateY( -0.875rem)}50%,70%{-webkit-transform:translateY( -1.75rem);transform:translateY( -1.75rem)}}.vxe-input--date-festival--overlap{display:block;font-size: 0.75rem}.vxe-input--date-festival--overlap.overlap--2{-webkit-animation:festivalOverlap2 6s ease-in-out infinite;animation:festivalOverlap2 6s ease-in-out infinite}.vxe-input--date-festival--overlap.overlap--3{-webkit-animation:festivalOverlap3 9s ease-in-out infinite;animation:festivalOverlap3 9s ease-in-out infinite}.vxe-input--date-festival--overlap>span{height: 0.875rem;display:block;-webkit-transform:scale(.8);transform:scale(.8)}.vxe-input--time-picker-body{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;border: 0.0625rem solid #dadce0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;border-radius: 0.25rem;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.vxe-input--time-picker-body>ul{height:100%;overflow:hidden;margin:0;padding:0}.vxe-input--time-picker-body>ul:after,.vxe-input--time-picker-body>ul:before{content:" ";display:block}.vxe-input--time-picker-body>ul:hover{overflow-y:auto}.vxe-input--time-picker-body>ul>li{display:block}.vxe-input--time-picker-body>ul>li:hover{background-color:#f2f6fc;cursor:pointer}.vxe-input--time-picker-body>ul>li.is--selected{font-weight:700;color:#409eff}.vxe-input--time-picker-body .vxe-input--time-picker-minute-list,.vxe-input--time-picker-body .vxe-input--time-picker-second-list{border-left: 0.0625rem solid #dadce0}.vxe-input{font-size: 0.875rem;height: 2.125rem;line-height: 2.125rem}.vxe-input .vxe-input--inner[type=date]::-webkit-inner-spin-button,.vxe-input .vxe-input--inner[type=month]::-webkit-inner-spin-button,.vxe-input .vxe-input--inner[type=week]::-webkit-inner-spin-button{margin-top: 0.375rem}.vxe-input .vxe-input--inner[type=date]::-webkit-inner-spin-button,.vxe-input .vxe-input--inner[type=month]::-webkit-inner-spin-button,.vxe-input .vxe-input--inner[type=number]::-webkit-inner-spin-button,.vxe-input .vxe-input--inner[type=week]::-webkit-inner-spin-button{height: 1.5rem}.vxe-input.size--medium{font-size: 0.875rem;height: 2rem;line-height: 2rem}.vxe-input.size--medium .vxe-input--inner[type=date]::-webkit-inner-spin-button,.vxe-input.size--medium .vxe-input--inner[type=month]::-webkit-inner-spin-button,.vxe-input.size--medium .vxe-input--inner[type=week]::-webkit-inner-spin-button{margin-top: 0.25rem}.vxe-input.size--small{font-size: 0.8125rem;height: 1.875rem;line-height: 1.875rem}.vxe-input.size--small .vxe-input--inner[type=date]::-webkit-inner-spin-button,.vxe-input.size--small .vxe-input--inner[type=month]::-webkit-inner-spin-button,.vxe-input.size--small .vxe-input--inner[type=week]::-webkit-inner-spin-button{margin-top: 0.125rem}.vxe-input.size--mini{font-size: 0.75rem;height: 1.75rem;line-height: 1.75rem}.vxe-input.size--mini .vxe-input--inner[type=date]::-webkit-inner-spin-button,.vxe-input.size--mini .vxe-input--inner[type=month]::-webkit-inner-spin-button,.vxe-input.size--mini .vxe-input--inner[type=week]::-webkit-inner-spin-button{margin-top:0}.vxe-input--panel{font-size: 0.875rem}.vxe-input--panel .vxe-input--panel-wrapper{max-height: 23.75rem}.vxe-input--panel.type--date .vxe-input--panel-wrapper,.vxe-input--panel.type--month .vxe-input--panel-wrapper,.vxe-input--panel.type--quarter .vxe-input--panel-wrapper,.vxe-input--panel.type--time .vxe-input--panel-wrapper,.vxe-input--panel.type--week .vxe-input--panel-wrapper,.vxe-input--panel.type--year .vxe-input--panel-wrapper{padding: 0.6875rem}.vxe-input--panel.type--date .vxe-input--panel-wrapper,.vxe-input--panel.type--month .vxe-input--panel-wrapper,.vxe-input--panel.type--quarter .vxe-input--panel-wrapper,.vxe-input--panel.type--year .vxe-input--panel-wrapper{width: 21rem}.vxe-input--panel.type--week .vxe-input--panel-wrapper{width: 23.75rem}.vxe-input--panel.type--time .vxe-input--panel-wrapper{width: 10.625rem}.vxe-input--panel.type--datetime .vxe-input--panel-left-wrapper{width: 21rem}.vxe-input--panel.type--datetime .vxe-input--panel-left-wrapper,.vxe-input--panel.type--datetime .vxe-input--panel-right-wrapper{padding: 0.6875rem}.vxe-input--panel .vxe-input--time-picker-title{height: 1.875rem;line-height: 1.875rem;padding:0 0.6875rem}.vxe-input--panel .vxe-input--date-picker-btn,.vxe-input--panel .vxe-input--date-picker-label{height: 1.875rem;line-height: 1.875rem}.vxe-input--panel .vxe-input--date-picker-btn-wrapper .vxe-input--date-picker-btn{margin-left: 0.5rem}.vxe-input--panel .vxe-input--date-picker-btn-wrapper .vxe-input--date-picker-current-btn,.vxe-input--panel .vxe-input--date-picker-btn-wrapper .vxe-input--date-picker-next-btn,.vxe-input--panel .vxe-input--date-picker-btn-wrapper .vxe-input--date-picker-prev-btn{width: 1.875rem;border-radius: 0.25rem;border: 0.0625rem solid #dcdfe6}.vxe-input--panel .vxe-input--date-picker-type-wrapper .vxe-input--date-picker-btn,.vxe-input--panel .vxe-input--date-picker-type-wrapper .vxe-input--date-picker-label{padding:0 0.5625rem}.vxe-input--panel .vxe-input--date-picker-header,.vxe-input--panel .vxe-input--time-picker-header{padding-bottom: 0.5rem}.vxe-input--panel .vxe-input--date-picker-body table,.vxe-input--panel .vxe-input--time-picker-body{height: 16.125rem}.vxe-input--panel .vxe-input--time-picker-body>ul{width: 3rem}.vxe-input--panel .vxe-input--time-picker-body>ul:after,.vxe-input--panel .vxe-input--time-picker-body>ul:before{height: 7.5rem}.vxe-input--panel .vxe-input--time-picker-body>ul>li{height: 1.625rem;padding-left: 0.5625rem}.vxe-input--panel .vxe-input--time-picker-body .vxe-input--time-picker-minute-list{left: 3rem}.vxe-input--panel .vxe-input--time-picker-body .vxe-input--time-picker-second-list{left: 6rem}.vxe-input--panel .vxe-input--date-day-view td,.vxe-input--panel .vxe-input--date-week-view td{height: 2.375rem}.vxe-input--panel .vxe-input--date-quarter-view td{height: 3.75rem}.vxe-input--panel .vxe-input--date-month-view td,.vxe-input--panel .vxe-input--date-year-view td{height: 3rem}.vxe-input--panel .vxe-input--date-picker-body th{height: 1.875rem}.vxe-input--panel .vxe-input--date-picker-confirm,.vxe-input--panel .vxe-input--time-picker-confirm{height: 1.875rem;padding:0 0.5625rem}.vxe-input--panel .vxe-input--date-label{line-height: 0.9375rem}.vxe-input--panel.size--medium{font-size: 0.875rem}.vxe-input--panel.size--medium .vxe-input--panel-wrapper{max-height: 22.5rem}.vxe-input--panel.size--medium.type--date .vxe-input--panel-wrapper,.vxe-input--panel.size--medium.type--month .vxe-input--panel-wrapper,.vxe-input--panel.size--medium.type--quarter .vxe-input--panel-wrapper,.vxe-input--panel.size--medium.type--time .vxe-input--panel-wrapper,.vxe-input--panel.size--medium.type--week .vxe-input--panel-wrapper,.vxe-input--panel.size--medium.type--year .vxe-input--panel-wrapper{padding: 0.625rem}.vxe-input--panel.size--medium.type--date .vxe-input--panel-wrapper,.vxe-input--panel.size--medium.type--month .vxe-input--panel-wrapper,.vxe-input--panel.size--medium.type--quarter .vxe-input--panel-wrapper,.vxe-input--panel.size--medium.type--year .vxe-input--panel-wrapper{width: 21rem}.vxe-input--panel.size--medium.type--week .vxe-input--panel-wrapper{width: 23.75rem}.vxe-input--panel.size--medium.type--time .vxe-input--panel-wrapper{width: 10.5rem}.vxe-input--panel.size--medium.type--datetime .vxe-input--panel-left-wrapper{width: 21rem}.vxe-input--panel.size--medium.type--datetime .vxe-input--panel-left-wrapper,.vxe-input--panel.size--medium.type--datetime .vxe-input--panel-right-wrapper{padding: 0.625rem}.vxe-input--panel.size--medium .vxe-input--time-picker-title{height: 1.8125rem;line-height: 1.8125rem;padding:0 0.625rem}.vxe-input--panel.size--medium .vxe-input--date-picker-btn,.vxe-input--panel.size--medium .vxe-input--date-picker-label{height: 1.8125rem;line-height: 1.8125rem}.vxe-input--panel.size--medium .vxe-input--date-picker-btn-wrapper .vxe-input--date-picker-btn{margin-left: 0.4375rem}.vxe-input--panel.size--medium .vxe-input--date-picker-btn-wrapper .vxe-input--date-picker-current-btn,.vxe-input--panel.size--medium .vxe-input--date-picker-btn-wrapper .vxe-input--date-picker-next-btn,.vxe-input--panel.size--medium .vxe-input--date-picker-btn-wrapper .vxe-input--date-picker-prev-btn{width: 1.8125rem;border-radius: 0.25rem;border: 0.0625rem solid #dcdfe6}.vxe-input--panel.size--medium .vxe-input--date-picker-type-wrapper .vxe-input--date-picker-btn,.vxe-input--panel.size--medium .vxe-input--date-picker-type-wrapper .vxe-input--date-picker-label{padding:0 0.5rem}.vxe-input--panel.size--medium .vxe-input--date-picker-header,.vxe-input--panel.size--medium .vxe-input--time-picker-header{padding-bottom: 0.4375rem}.vxe-input--panel.size--medium .vxe-input--date-picker-body table,.vxe-input--panel.size--medium .vxe-input--time-picker-body{height: 15.3125rem}.vxe-input--panel.size--medium .vxe-input--time-picker-body>ul{width: 3rem}.vxe-input--panel.size--medium .vxe-input--time-picker-body>ul:after,.vxe-input--panel.size--medium .vxe-input--time-picker-body>ul:before{height: 7.5rem}.vxe-input--panel.size--medium .vxe-input--time-picker-body>ul>li{height: 1.625rem;padding-left: 0.5rem}.vxe-input--panel.size--medium .vxe-input--time-picker-body .vxe-input--time-picker-minute-list{left: 3rem}.vxe-input--panel.size--medium .vxe-input--time-picker-body .vxe-input--time-picker-second-list{left: 6rem}.vxe-input--panel.size--medium .vxe-input--date-day-view td,.vxe-input--panel.size--medium .vxe-input--date-week-view td{height: 2.25rem}.vxe-input--panel.size--medium .vxe-input--date-quarter-view td{height: 3.625rem}.vxe-input--panel.size--medium .vxe-input--date-month-view td,.vxe-input--panel.size--medium .vxe-input--date-year-view td{height: 2.875rem}.vxe-input--panel.size--medium .vxe-input--date-picker-body th{height: 1.8125rem}.vxe-input--panel.size--medium .vxe-input--date-picker-confirm,.vxe-input--panel.size--medium .vxe-input--time-picker-confirm{height: 1.8125rem;padding:0 0.5rem}.vxe-input--panel.size--medium .vxe-input--date-label{line-height: 0.9375rem}.vxe-input--panel.size--small{font-size: 0.8125rem}.vxe-input--panel.size--small .vxe-input--panel-wrapper{max-height: 21.25rem}.vxe-input--panel.size--small.type--date .vxe-input--panel-wrapper,.vxe-input--panel.size--small.type--month .vxe-input--panel-wrapper,.vxe-input--panel.size--small.type--quarter .vxe-input--panel-wrapper,.vxe-input--panel.size--small.type--time .vxe-input--panel-wrapper,.vxe-input--panel.size--small.type--week .vxe-input--panel-wrapper,.vxe-input--panel.size--small.type--year .vxe-input--panel-wrapper{padding: 0.5625rem}.vxe-input--panel.size--small.type--date .vxe-input--panel-wrapper,.vxe-input--panel.size--small.type--month .vxe-input--panel-wrapper,.vxe-input--panel.size--small.type--quarter .vxe-input--panel-wrapper,.vxe-input--panel.size--small.type--year .vxe-input--panel-wrapper{width: 19.5rem}.vxe-input--panel.size--small.type--week .vxe-input--panel-wrapper{width: 22.125rem}.vxe-input--panel.size--small.type--time .vxe-input--panel-wrapper{width: 9.625rem}.vxe-input--panel.size--small.type--datetime .vxe-input--panel-left-wrapper{width: 19.5rem}.vxe-input--panel.size--small.type--datetime .vxe-input--panel-left-wrapper,.vxe-input--panel.size--small.type--datetime .vxe-input--panel-right-wrapper{padding: 0.5625rem}.vxe-input--panel.size--small .vxe-input--time-picker-title{height: 1.75rem;line-height: 1.75rem;padding:0 0.5625rem}.vxe-input--panel.size--small .vxe-input--date-picker-btn,.vxe-input--panel.size--small .vxe-input--date-picker-label{height: 1.75rem;line-height: 1.75rem}.vxe-input--panel.size--small .vxe-input--date-picker-btn-wrapper .vxe-input--date-picker-btn{margin-left: 0.375rem}.vxe-input--panel.size--small .vxe-input--date-picker-btn-wrapper .vxe-input--date-picker-current-btn,.vxe-input--panel.size--small .vxe-input--date-picker-btn-wrapper .vxe-input--date-picker-next-btn,.vxe-input--panel.size--small .vxe-input--date-picker-btn-wrapper .vxe-input--date-picker-prev-btn{width: 1.75rem;border-radius: 0.25rem;border: 0.0625rem solid #dcdfe6}.vxe-input--panel.size--small .vxe-input--date-picker-type-wrapper .vxe-input--date-picker-btn,.vxe-input--panel.size--small .vxe-input--date-picker-type-wrapper .vxe-input--date-picker-label{padding:0 0.4375rem}.vxe-input--panel.size--small .vxe-input--date-picker-header,.vxe-input--panel.size--small .vxe-input--time-picker-header{padding-bottom: 0.375rem}.vxe-input--panel.size--small .vxe-input--date-picker-body table,.vxe-input--panel.size--small .vxe-input--time-picker-body{height: 14.5rem}.vxe-input--panel.size--small .vxe-input--time-picker-body>ul{width: 2.75rem}.vxe-input--panel.size--small .vxe-input--time-picker-body>ul:after,.vxe-input--panel.size--small .vxe-input--time-picker-body>ul:before{height: 6.875rem}.vxe-input--panel.size--small .vxe-input--time-picker-body>ul>li{height: 1.625rem;padding-left: 0.4375rem}.vxe-input--panel.size--small .vxe-input--time-picker-body .vxe-input--time-picker-minute-list{left: 2.75rem}.vxe-input--panel.size--small .vxe-input--time-picker-body .vxe-input--time-picker-second-list{left: 5.5rem}.vxe-input--panel.size--small .vxe-input--date-day-view td,.vxe-input--panel.size--small .vxe-input--date-week-view td{height: 2.125rem}.vxe-input--panel.size--small .vxe-input--date-quarter-view td{height: 3.5rem}.vxe-input--panel.size--small .vxe-input--date-month-view td,.vxe-input--panel.size--small .vxe-input--date-year-view td{height: 2.75rem}.vxe-input--panel.size--small .vxe-input--date-picker-body th{height: 1.75rem}.vxe-input--panel.size--small .vxe-input--date-picker-confirm,.vxe-input--panel.size--small .vxe-input--time-picker-confirm{height: 1.75rem;padding:0 0.4375rem}.vxe-input--panel.size--small .vxe-input--date-label{line-height: 0.875rem}.vxe-input--panel.size--mini{font-size: 0.75rem}.vxe-input--panel.size--mini .vxe-input--panel-wrapper{max-height: 20rem}.vxe-input--panel.size--mini.type--date .vxe-input--panel-wrapper,.vxe-input--panel.size--mini.type--month .vxe-input--panel-wrapper,.vxe-input--panel.size--mini.type--quarter .vxe-input--panel-wrapper,.vxe-input--panel.size--mini.type--time .vxe-input--panel-wrapper,.vxe-input--panel.size--mini.type--week .vxe-input--panel-wrapper,.vxe-input--panel.size--mini.type--year .vxe-input--panel-wrapper{padding: 0.5rem}.vxe-input--panel.size--mini.type--date .vxe-input--panel-wrapper,.vxe-input--panel.size--mini.type--month .vxe-input--panel-wrapper,.vxe-input--panel.size--mini.type--quarter .vxe-input--panel-wrapper,.vxe-input--panel.size--mini.type--year .vxe-input--panel-wrapper{width: 18rem}.vxe-input--panel.size--mini.type--week .vxe-input--panel-wrapper{width: 20.375rem}.vxe-input--panel.size--mini.type--time .vxe-input--panel-wrapper{width: 9.125rem}.vxe-input--panel.size--mini.type--datetime .vxe-input--panel-left-wrapper{width: 18rem}.vxe-input--panel.size--mini.type--datetime .vxe-input--panel-left-wrapper,.vxe-input--panel.size--mini.type--datetime .vxe-input--panel-right-wrapper{padding: 0.5rem}.vxe-input--panel.size--mini .vxe-input--time-picker-title{height: 1.6875rem;line-height: 1.6875rem;padding:0 0.5rem}.vxe-input--panel.size--mini .vxe-input--date-picker-btn,.vxe-input--panel.size--mini .vxe-input--date-picker-label{height: 1.6875rem;line-height: 1.6875rem}.vxe-input--panel.size--mini .vxe-input--date-picker-btn-wrapper .vxe-input--date-picker-btn{margin-left: 0.3125rem}.vxe-input--panel.size--mini .vxe-input--date-picker-btn-wrapper .vxe-input--date-picker-current-btn,.vxe-input--panel.size--mini .vxe-input--date-picker-btn-wrapper .vxe-input--date-picker-next-btn,.vxe-input--panel.size--mini .vxe-input--date-picker-btn-wrapper .vxe-input--date-picker-prev-btn{width: 1.6875rem;border-radius: 0.25rem;border: 0.0625rem solid #dcdfe6}.vxe-input--panel.size--mini .vxe-input--date-picker-type-wrapper .vxe-input--date-picker-btn,.vxe-input--panel.size--mini .vxe-input--date-picker-type-wrapper .vxe-input--date-picker-label{padding:0 0.375rem}.vxe-input--panel.size--mini .vxe-input--date-picker-header,.vxe-input--panel.size--mini .vxe-input--time-picker-header{padding-bottom: 0.3125rem}.vxe-input--panel.size--mini .vxe-input--date-picker-body table,.vxe-input--panel.size--mini .vxe-input--time-picker-body{height: 13.625rem}.vxe-input--panel.size--mini .vxe-input--time-picker-body>ul{width: 2.625rem}.vxe-input--panel.size--mini .vxe-input--time-picker-body>ul:after,.vxe-input--panel.size--mini .vxe-input--time-picker-body>ul:before{height: 6.25rem}.vxe-input--panel.size--mini .vxe-input--time-picker-body>ul>li{height: 1.625rem;padding-left: 0.375rem}.vxe-input--panel.size--mini .vxe-input--time-picker-body .vxe-input--time-picker-minute-list{left: 2.625rem}.vxe-input--panel.size--mini .vxe-input--time-picker-body .vxe-input--time-picker-second-list{left: 5.25rem}.vxe-input--panel.size--mini .vxe-input--date-day-view td,.vxe-input--panel.size--mini .vxe-input--date-week-view td{height: 2rem}.vxe-input--panel.size--mini .vxe-input--date-quarter-view td{height: 3.375rem}.vxe-input--panel.size--mini .vxe-input--date-month-view td,.vxe-input--panel.size--mini .vxe-input--date-year-view td{height: 2.625rem}.vxe-input--panel.size--mini .vxe-input--date-picker-body th{height: 1.625rem}.vxe-input--panel.size--mini .vxe-input--date-picker-confirm,.vxe-input--panel.size--mini .vxe-input--time-picker-confirm{height: 1.6875rem;padding:0 0.375rem}.vxe-input--panel.size--mini .vxe-input--date-label{line-height: 0.8125rem}.vxe-textarea{position:relative;display:inline-block}.vxe-textarea:not(.def--cols),.vxe-textarea:not(.def--cols) .vxe-textarea--inner{width:100%}.vxe-textarea--inner{border-radius: 0.25rem;outline:0;font-size:inherit;padding:0 .6em;color:#606266;line-height:inherit;border: 0.0625rem solid #dcdfe6;background-color:#fff;display:block;padding:.3em .6em}.vxe-textarea--inner::-webkit-input-placeholder{color:#c0c4cc}.vxe-textarea--inner::-moz-placeholder{color:#c0c4cc}.vxe-textarea--inner:-ms-input-placeholder{color:#c0c4cc}.vxe-textarea--inner::-ms-input-placeholder{color:#c0c4cc}.vxe-textarea--inner::placeholder{color:#c0c4cc}.vxe-textarea--inner:focus{border: 0.0625rem solid #409eff}.vxe-textarea--inner[disabled]{cursor:not-allowed;background-color:#f3f3f3}.vxe-textarea--autosize,.vxe-textarea--inner{line-height:1.5715;color:#606266;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Helvetica Neue,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol}.vxe-textarea--autosize{display:block;position:fixed;top:0;left:0;width:100%;margin:0;padding:.3em .6em;word-wrap:break-word;white-space:pre-wrap;z-index:-1;visibility:hidden}.vxe-textarea--count{position:absolute;bottom:.2em;right:1.4em;padding-left:.2em;color:#999;background-color:#fff}.vxe-textarea--count.is--error{color:#f56c6c}.vxe-textarea,.vxe-textarea--autosize,.vxe-textarea--autosize.size--medium,.vxe-textarea.size--medium{font-size: 0.875rem}.vxe-textarea--autosize.size--small,.vxe-textarea.size--small{font-size: 0.8125rem}.vxe-textarea--autosize.size--mini,.vxe-textarea.size--mini{font-size: 0.75rem}.vxe-textarea:not(.is--autosize){min-height: 2.125rem}.vxe-textarea.size--medium{font-size: 0.875rem}.vxe-textarea.size--medium:not(.is--autosize){min-height: 2rem}.vxe-textarea.size--small:not(.is--autosize){min-height: 1.875rem}.vxe-textarea.size--mini:not(.is--autosize){min-height: 1.75rem}.vxe-button{position:relative;text-align:center;background-color:#fff;outline:0;font-size: 0.875rem;max-width: 31.25rem;line-height:1.5;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.vxe-button:not(.is--disabled){color:#606266;cursor:pointer}.vxe-button.is--loading{cursor:progress}.vxe-button.is--loading:before{content:"";position:absolute;left: -0.0625rem;top: -0.0625rem;right: -0.0625rem;bottom: -0.0625rem;border-radius:inherit;background-color:hsla(0,0%,100%,.35);pointer-events:none}.vxe-button.is--disabled{color:#bfbfbf}.vxe-button.is--disabled:not(.is--loading){cursor:no-drop}.vxe-button.type--text{text-decoration:none;border:0;padding:.1em .5em;background-color:transparent}.vxe-button.type--text:not(.is--disabled):focus{color:#2f3031}.vxe-button.type--text:not(.is--disabled):hover{color:#73b8ff}.vxe-button.type--text.theme--primary{color:#409eff}.vxe-button.type--text.theme--primary:not(.is--disabled):focus{color:#0d84ff}.vxe-button.type--text.theme--primary:not(.is--disabled):hover{color:#73b8ff}.vxe-button.type--text.theme--primary.is--disabled{color:#a6d2ff}.vxe-button.type--text.theme--success{color:#67c23a}.vxe-button.type--text.theme--success:not(.is--disabled):focus{color:#529b2e}.vxe-button.type--text.theme--success:not(.is--disabled):hover{color:#85cf60}.vxe-button.type--text.theme--success.is--disabled{color:#a3db87}.vxe-button.type--text.theme--info{color:#909399}.vxe-button.type--text.theme--info:not(.is--disabled):focus{color:#767980}.vxe-button.type--text.theme--info:not(.is--disabled):hover{color:#abadb1}.vxe-button.type--text.theme--info.is--disabled{color:#c5c7ca}.vxe-button.type--text.theme--warning{color:#e6a23c}.vxe-button.type--text.theme--warning:not(.is--disabled):focus{color:#d48a1b}.vxe-button.type--text.theme--warning:not(.is--disabled):hover{color:#ecb869}.vxe-button.type--text.theme--warning.is--disabled{color:#f2cd96}.vxe-button.type--text.theme--danger{color:#f56c6c}.vxe-button.type--text.theme--danger:not(.is--disabled):focus{color:#f23c3c}.vxe-button.type--text.theme--danger:not(.is--disabled):hover{color:#f89c9c}.vxe-button.type--text.theme--danger.is--disabled{color:#fbcccc}.vxe-button.type--text.theme--perfect{color:#f8f8f9}.vxe-button.type--text.theme--perfect:not(.is--disabled):focus{color:#dddde1}.vxe-button.type--text.theme--perfect.is--disabled,.vxe-button.type--text.theme--perfect:not(.is--disabled):hover{color:#fff}.vxe-button.type--button{font-family:inherit;height: 2.125rem;line-height:1;border: 0.0625rem solid #dcdfe6}.vxe-button.type--button.is--round{border-radius: 1.0625rem}.vxe-button.type--button:not(.is--round){border-radius: 0.25rem}.vxe-button.type--button.is--circle{padding:0 .5em;min-width: 2.125rem;border-radius:50%}.vxe-button.type--button:not(.is--circle){padding:0 1em}.vxe-button.type--button:not(.is--disabled):hover{color:#5faeff}.vxe-button.type--button:not(.is--disabled):focus{border-color:#409eff}.vxe-button.type--button:not(.is--disabled):active{color:#3196ff;border-color:#3196ff;background-color:#f7f7f7}.vxe-button.type--button.theme--primary{color:#fff}.vxe-button.type--button.theme--primary:not(.is--disabled){border-color:#409eff;background-color:#409eff}.vxe-button.type--button.theme--primary:not(.is--disabled):hover{color:#fff;background-color:#5faeff;border-color:#5faeff}.vxe-button.type--button.theme--primary:not(.is--disabled):active{color:#fff;background-color:#3196ff;border-color:#3196ff}.vxe-button.type--button.theme--primary.is--disabled{border-color:#a6d2ff;background-color:#a6d2ff}.vxe-button.type--button.theme--primary.is--loading{border-color:#409eff;background-color:#409eff}.vxe-button.type--button.theme--success{color:#fff}.vxe-button.type--button.theme--success:not(.is--disabled){border-color:#67c23a;background-color:#67c23a}.vxe-button.type--button.theme--success:not(.is--disabled):hover{color:#fff;background-color:#79cb50;border-color:#79cb50}.vxe-button.type--button.theme--success:not(.is--disabled):active{color:#fff;background-color:#61b636;border-color:#61b636}.vxe-button.type--button.theme--success.is--disabled{border-color:#a3db87;background-color:#a3db87}.vxe-button.type--button.theme--success.is--loading{border-color:#67c23a;background-color:#67c23a}.vxe-button.type--button.theme--info{color:#fff}.vxe-button.type--button.theme--info:not(.is--disabled){border-color:#909399;background-color:#909399}.vxe-button.type--button.theme--info:not(.is--disabled):hover{color:#fff;background-color:#a0a3a8;border-color:#a0a3a8}.vxe-button.type--button.theme--info:not(.is--disabled):active{color:#fff;background-color:#888b92;border-color:#888b92}.vxe-button.type--button.theme--info.is--disabled{border-color:#c5c7ca;background-color:#c5c7ca}.vxe-button.type--button.theme--info.is--loading{border-color:#909399;background-color:#909399}.vxe-button.type--button.theme--warning{color:#fff}.vxe-button.type--button.theme--warning:not(.is--disabled){border-color:#e6a23c;background-color:#e6a23c}.vxe-button.type--button.theme--warning:not(.is--disabled):hover{color:#fff;background-color:#e9af57;border-color:#e9af57}.vxe-button.type--button.theme--warning:not(.is--disabled):active{color:#fff;background-color:#e49c2e;border-color:#e49c2e}.vxe-button.type--button.theme--warning.is--disabled{border-color:#f2cd96;background-color:#f2cd96}.vxe-button.type--button.theme--warning.is--loading{border-color:#e6a23c;background-color:#e6a23c}.vxe-button.type--button.theme--danger{color:#fff}.vxe-button.type--button.theme--danger:not(.is--disabled){border-color:#f56c6c;background-color:#f56c6c}.vxe-button.type--button.theme--danger:not(.is--disabled):hover{color:#fff;background-color:#f78989;border-color:#f78989}.vxe-button.type--button.theme--danger:not(.is--disabled):active{color:#fff;background-color:#f45e5e;border-color:#f45e5e}.vxe-button.type--button.theme--danger.is--disabled{border-color:#fbcccc;background-color:#fbcccc}.vxe-button.type--button.theme--danger.is--loading{border-color:#f56c6c;background-color:#f56c6c}.vxe-button.type--button.theme--perfect{color:#606266}.vxe-button.type--button.theme--perfect:not(.is--disabled){border-color:#f8f8f9;background-color:#f8f8f9}.vxe-button.type--button.theme--perfect:not(.is--disabled):hover{color:#606266;background-color:#fff;border-color:#fff}.vxe-button.type--button.theme--perfect:not(.is--disabled):active{color:#606266;background-color:#f0f0f2;border-color:#f0f0f2}.vxe-button.type--button.theme--perfect.is--disabled{border-color:#fff;background-color:#fff}.vxe-button.type--button.theme--perfect.is--loading{border-color:#f8f8f9;background-color:#f8f8f9}.vxe-button.size--medium{font-size: 0.875rem}.vxe-button.size--medium.type--button{height: 2rem}.vxe-button.size--medium.type--button.is--circle{min-width: 2rem}.vxe-button.size--medium.type--button.is--round{border-radius: 1rem}.vxe-button.size--medium .vxe-button--icon,.vxe-button.size--medium .vxe-button--loading-icon{min-width: 0.875rem}.vxe-button.size--small{font-size: 0.8125rem}.vxe-button.size--small.type--button{height: 1.875rem}.vxe-button.size--small.type--button.is--circle{min-width: 1.875rem}.vxe-button.size--small.type--button.is--round{border-radius: 0.9375rem}.vxe-button.size--small .vxe-button--icon,.vxe-button.size--small .vxe-button--loading-icon{min-width: 0.8125rem}.vxe-button.size--mini{font-size: 0.75rem}.vxe-button.size--mini.type--button{height: 1.75rem}.vxe-button.size--mini.type--button.is--circle{min-width: 1.75rem}.vxe-button.size--mini.type--button.is--round{border-radius: 0.875rem}.vxe-button.size--mini .vxe-button--icon,.vxe-button.size--mini .vxe-button--loading-icon{min-width: 0.75rem}.vxe-button+.vxe-button,.vxe-button+.vxe-button--dropdown,.vxe-input+.vxe-button,.vxe-input+.vxe-button--dropdown{margin-left: 0.75rem}.vxe-button--icon,.vxe-button--loading-icon{min-width: 0.875rem}.vxe-button--icon+.vxe-button--content,.vxe-button--loading-icon+.vxe-button--content{margin-left: 0.25rem}.vxe-button--dropdown,.vxe-button--wrapper{display:inline-block}.vxe-button--dropdown{position:relative}.vxe-button--dropdown+.vxe-button,.vxe-button--dropdown+.vxe-button--dropdown{margin-left: 0.75rem}.vxe-button--dropdown>.vxe-button.type--button.theme--danger,.vxe-button--dropdown>.vxe-button.type--button.theme--info,.vxe-button--dropdown>.vxe-button.type--button.theme--primary,.vxe-button--dropdown>.vxe-button.type--button.theme--success,.vxe-button--dropdown>.vxe-button.type--button.theme--warning{color:#fff}.vxe-button--dropdown>.vxe-button.type--button.theme--perfect{color:#606266}.vxe-button--dropdown.is--active>.vxe-button:not(.is--disabled){color:#5faeff}.vxe-button--dropdown.is--active>.vxe-button.type--text.theme--primary{color:#73b8ff}.vxe-button--dropdown.is--active>.vxe-button.type--text.theme--success{color:#85cf60}.vxe-button--dropdown.is--active>.vxe-button.type--text.theme--info{color:#abadb1}.vxe-button--dropdown.is--active>.vxe-button.type--text.theme--warning{color:#ecb869}.vxe-button--dropdown.is--active>.vxe-button.type--text.theme--danger{color:#f89c9c}.vxe-button--dropdown.is--active>.vxe-button.type--text.theme--perfect{color:#fff}.vxe-button--dropdown.is--active>.vxe-button.type--button.theme--primary{color:#fff;background-color:#5faeff;border-color:#5faeff}.vxe-button--dropdown.is--active>.vxe-button.type--button.theme--success{color:#fff;background-color:#79cb50;border-color:#79cb50}.vxe-button--dropdown.is--active>.vxe-button.type--button.theme--info{color:#fff;background-color:#a0a3a8;border-color:#a0a3a8}.vxe-button--dropdown.is--active>.vxe-button.type--button.theme--warning{color:#fff;background-color:#e9af57;border-color:#e9af57}.vxe-button--dropdown.is--active>.vxe-button.type--button.theme--danger{color:#fff;background-color:#f78989;border-color:#f78989}.vxe-button--dropdown.is--active>.vxe-button.type--button.theme--perfect{color:#606266;background-color:#fff;border-color:#fff}.vxe-button--dropdown.is--active .vxe-button--dropdown-arrow{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.vxe-button--dropdown-arrow{display:inline-block;font-size: 0.75rem;margin-left: 0.25rem;-webkit-transition:-webkit-transform .2s ease-in-out;transition:-webkit-transform .2s ease-in-out;transition:transform .2s ease-in-out;transition:transform .2s ease-in-out,-webkit-transform .2s ease-in-out}.vxe-button--dropdown-panel{display:none;position:absolute;right:0;padding: 0.25rem 0}.vxe-button--dropdown-panel.animat--leave{display:block;opacity:0;-webkit-transform:scaleY(.5);transform:scaleY(.5);-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);-webkit-transform-origin:center top;transform-origin:center top;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}.vxe-button--dropdown-panel.animat--leave[placement=top]{-webkit-transform-origin:center bottom;transform-origin:center bottom}.vxe-button--dropdown-panel.animat--enter{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1)}.vxe-button--dropdown-wrapper{padding: 0.3125rem;background-color:#fff;border-radius: 0.25rem;border: 0.0625rem solid #dcdfe6;-webkit-box-shadow:0 0.0625rem 0.375rem rgba(0,0,0,.2);box-shadow:0 0.0625rem 0.375rem rgba(0,0,0,.2)}.vxe-button--dropdown-wrapper>.vxe-button{margin-left:0;margin-top:.4em;display:block;width:100%;border:0}.vxe-button--dropdown-wrapper>.vxe-button.type--text{padding: 0.125rem 0.5rem}.vxe-button--dropdown-wrapper>.vxe-button:first-child{margin-top:0}.vxe-button--dropdown-wrapper>.vxe-button:last-child{margin-bottom:0}.vxe-modal--wrapper{display:none;position:fixed;top:0;left:0;line-height:1.5;width:calc(100% + 1.125rem);height:calc(100% + 1.125rem);color:#606266;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Helvetica Neue,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;-webkit-transition:top .4s ease-in-out;transition:top .4s ease-in-out}.vxe-modal--wrapper.is--active{display:block}.vxe-modal--wrapper.is--visible.is--mask:before{background-color:rgba(0,0,0,.5)}.vxe-modal--wrapper.is--visible.type--message .vxe-modal--box{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}.vxe-modal--wrapper.is--visible .vxe-modal--box{opacity:1;visibility:visible}.vxe-modal--wrapper.is--loading .vxe-modal--footer,.vxe-modal--wrapper.is--loading .vxe-modal--header{position:relative;border-bottom-color:hsla(0,0%,100%,.5)}.vxe-modal--wrapper.is--loading .vxe-modal--footer:before,.vxe-modal--wrapper.is--loading .vxe-modal--header:before{content:"";position:absolute;top:0;left:0;width:100%;height:100%;z-index:1;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:hsla(0,0%,100%,.5)}.vxe-modal--wrapper:not(.lock--view){pointer-events:none}.vxe-modal--wrapper:not(.type--message).lock--scroll{overflow:hidden}.vxe-modal--wrapper:not(.type--message):not(.lock--scroll){overflow:auto}.vxe-modal--wrapper.is--mask:before,.vxe-modal--wrapper.lock--view:before{content:"";position:fixed;top:0;left:0;width:100%;height:100%;z-index:-1;pointer-events:auto}.vxe-modal--wrapper.is--mask:before{background-color:transparent}.vxe-modal--wrapper.is--animat.is--mask:before{-webkit-transition:background-color .2s ease-in-out;transition:background-color .2s ease-in-out}.vxe-modal--wrapper.is--animat.type--message .vxe-modal--box:not(.is--drag){-webkit-transition:all .4s ease-out;transition:all .4s ease-out}.vxe-modal--wrapper.type--alert .vxe-modal--body,.vxe-modal--wrapper.type--confirm .vxe-modal--body,.vxe-modal--wrapper.type--message .vxe-modal--body{white-space:normal;word-break:break-word}.vxe-modal--wrapper.type--message{text-align:center}.vxe-modal--wrapper.type--message .vxe-modal--box{display:inline-block;padding: 0.125rem 0;margin-top:0;width:auto;-webkit-box-shadow:0 0 0.5rem 0 rgba(0,0,0,.1);box-shadow:0 0 0.5rem 0 rgba(0,0,0,.1);opacity:0;-webkit-transform:translateY(-100%);transform:translateY(-100%)}.vxe-modal--wrapper.type--message .vxe-modal--box .vxe-modal--body:after{content:"";display:block;clear:both;height:0;overflow:hidden;visibility:hidden}.vxe-modal--wrapper.type--message .vxe-modal--box .vxe-modal--content{max-width: 50rem;float:left}.vxe-modal--wrapper.type--message .vxe-modal--status-wrapper{font-size:1.4em;padding-left: 0.625rem}.vxe-modal--wrapper.type--alert .vxe-modal--box,.vxe-modal--wrapper.type--confirm .vxe-modal--box,.vxe-modal--wrapper.type--modal .vxe-modal--box{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;position:fixed;left:50%;top:0;-webkit-box-shadow:0 0 0.625rem 0 rgba(0,0,0,.2);box-shadow:0 0 0.625rem 0 rgba(0,0,0,.2)}.vxe-modal--wrapper.type--alert .vxe-modal--body,.vxe-modal--wrapper.type--alert .vxe-modal--body .vxe-modal--content,.vxe-modal--wrapper.type--confirm .vxe-modal--body,.vxe-modal--wrapper.type--confirm .vxe-modal--body .vxe-modal--content,.vxe-modal--wrapper.type--modal .vxe-modal--body,.vxe-modal--wrapper.type--modal .vxe-modal--body .vxe-modal--content{overflow:auto}.vxe-modal--wrapper.type--alert .vxe-modal--status-wrapper,.vxe-modal--wrapper.type--confirm .vxe-modal--status-wrapper{font-size:1.6em;padding-left: 0.625rem}.vxe-modal--wrapper .vxe-modal--box{visibility:hidden;width: 26.25rem;background-color:#fff;border-radius: 0.25rem;border: 0.0625rem solid #ebeef5;text-align:left;pointer-events:auto;opacity:0}.vxe-modal--wrapper .vxe-modal--box.is--drag{cursor:move}.vxe-modal--wrapper .vxe-modal--box.is--drag .vxe-modal--body:after,.vxe-modal--wrapper .vxe-modal--box.is--drag .vxe-modal--footer:after{content:"";position:absolute;top:0;left:0;width:100%;height:100%}.vxe-modal--wrapper .vxe-modal--box.is--drag .vxe-modal--body,.vxe-modal--wrapper .vxe-modal--box.is--drag .vxe-modal--body .vxe-modal--content{overflow:hidden}.vxe-modal--wrapper.status--info .vxe-modal--status-wrapper{color:#909399}.vxe-modal--wrapper.status--question .vxe-modal--status-wrapper,.vxe-modal--wrapper.status--warning .vxe-modal--status-wrapper{color:#e6a23c}.vxe-modal--wrapper.status--success .vxe-modal--status-wrapper{color:#67c23a}.vxe-modal--wrapper.status--error .vxe-modal--status-wrapper{color:#f56c6c}.vxe-modal--wrapper.status--loading .vxe-modal--status-wrapper{color:#bfbfbf}.vxe-modal--wrapper .vxe-modal--status-wrapper{-ms-flex-negative:0;flex-shrink:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.vxe-modal--wrapper .vxe-modal--content{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;padding:.8em 1em;white-space:pre-line}.vxe-modal--wrapper .vxe-modal--body,.vxe-modal--wrapper .vxe-modal--footer,.vxe-modal--wrapper .vxe-modal--header{position:relative}.vxe-modal--wrapper .vxe-modal--body{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.vxe-modal--wrapper .vxe-modal--header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-negative:0;flex-shrink:0;font-size:1.1em;font-weight:700;border-bottom: 0.0625rem solid #ebeef5;background-color:#f8f8f8;border-radius: 0.25rem 0.25rem 0 0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.vxe-modal--wrapper .vxe-modal--header.is--draggable .vxe-modal--header-title{cursor:move}.vxe-modal--wrapper .vxe-modal--header.is--ellipsis .vxe-modal--header-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vxe-modal--wrapper .vxe-modal--header-title{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;padding:.6em 0 .6em 1em}.vxe-modal--wrapper .vxe-modal--header-right{-ms-flex-negative:0;flex-shrink:0;padding:.6em 1em .6em 0}.vxe-modal--wrapper .vxe-modal--close-btn,.vxe-modal--wrapper .vxe-modal--zoom-btn{cursor:pointer;margin-left:.6em}.vxe-modal--wrapper .vxe-modal--close-btn:hover,.vxe-modal--wrapper .vxe-modal--zoom-btn:hover{color:#409eff}.vxe-modal--wrapper .vxe-modal--footer{-ms-flex-negative:0;flex-shrink:0;text-align:right;padding:.4em 1em .8em 1em}.vxe-modal--wrapper.is--maximize .vxe-modal--box .vxe-modal--header{cursor:default}.vxe-modal--wrapper.is--maximize .vxe-modal--resize .sb-resize,.vxe-modal--wrapper.is--maximize .vxe-modal--resize .selb-resize,.vxe-modal--wrapper.is--maximize .vxe-modal--resize .sest-resize,.vxe-modal--wrapper.is--maximize .vxe-modal--resize .st-resize,.vxe-modal--wrapper.is--maximize .vxe-modal--resize .swlb-resize,.vxe-modal--wrapper.is--maximize .vxe-modal--resize .swst-resize,.vxe-modal--wrapper.is--maximize .vxe-modal--resize .wl-resize,.vxe-modal--wrapper.is--maximize .vxe-modal--resize .wr-resize{display:none}.vxe-modal--wrapper .vxe-modal--resize .sb-resize,.vxe-modal--wrapper .vxe-modal--resize .selb-resize,.vxe-modal--wrapper .vxe-modal--resize .sest-resize,.vxe-modal--wrapper .vxe-modal--resize .st-resize,.vxe-modal--wrapper .vxe-modal--resize .swlb-resize,.vxe-modal--wrapper .vxe-modal--resize .swst-resize,.vxe-modal--wrapper .vxe-modal--resize .wl-resize,.vxe-modal--wrapper .vxe-modal--resize .wr-resize{position:absolute;z-index:100}.vxe-modal--wrapper .vxe-modal--resize .wl-resize,.vxe-modal--wrapper .vxe-modal--resize .wr-resize{width: 0.5rem;height:100%;top:0;cursor:w-resize}.vxe-modal--wrapper .vxe-modal--resize .wl-resize{left: -0.3125rem}.vxe-modal--wrapper .vxe-modal--resize .wr-resize{right: -0.3125rem}.vxe-modal--wrapper .vxe-modal--resize .selb-resize,.vxe-modal--wrapper .vxe-modal--resize .sest-resize,.vxe-modal--wrapper .vxe-modal--resize .swlb-resize,.vxe-modal--wrapper .vxe-modal--resize .swst-resize{width: 0.625rem;height: 0.625rem;z-index:101}.vxe-modal--wrapper .vxe-modal--resize .sest-resize,.vxe-modal--wrapper .vxe-modal--resize .swst-resize{top: -0.5rem}.vxe-modal--wrapper .vxe-modal--resize .selb-resize,.vxe-modal--wrapper .vxe-modal--resize .swlb-resize{bottom: -0.5rem}.vxe-modal--wrapper .vxe-modal--resize .sest-resize,.vxe-modal--wrapper .vxe-modal--resize .swlb-resize{cursor:sw-resize}.vxe-modal--wrapper .vxe-modal--resize .selb-resize,.vxe-modal--wrapper .vxe-modal--resize .swst-resize{cursor:se-resize}.vxe-modal--wrapper .vxe-modal--resize .swlb-resize,.vxe-modal--wrapper .vxe-modal--resize .swst-resize{left: -0.5rem}.vxe-modal--wrapper .vxe-modal--resize .selb-resize,.vxe-modal--wrapper .vxe-modal--resize .sest-resize{right: -0.5rem}.vxe-modal--wrapper .vxe-modal--resize .sb-resize,.vxe-modal--wrapper .vxe-modal--resize .st-resize{width:100%;height: 0.5rem;left:0;cursor:s-resize}.vxe-modal--wrapper .vxe-modal--resize .st-resize{top: -0.3125rem}.vxe-modal--wrapper .vxe-modal--resize .sb-resize{bottom: -0.3125rem}.vxe-modal--wrapper,.vxe-modal--wrapper.size--medium{font-size: 0.875rem}.vxe-modal--wrapper.size--small{font-size: 0.8125rem}.vxe-modal--wrapper.size--mini{font-size: 0.75rem}.vxe-table--tooltip-wrapper{display:none;position:absolute;top:-100%;left:-100%;font-size: 0.75rem;max-width: 37.5rem;border-radius: 0.25rem;padding: 0.5rem 0.75rem;white-space:normal;word-break:break-word;-webkit-box-shadow: 0.125rem 0.125rem 0.25rem -0.125rem rgba(0,0,0,.2);box-shadow: 0.125rem 0.125rem 0.25rem -0.125rem rgba(0,0,0,.2);color:#606266;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Helvetica Neue,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol}.vxe-table--tooltip-wrapper:not(.is--enterable){pointer-events:none}.vxe-table--tooltip-wrapper.is--arrow .vxe-table--tooltip-arrow,.vxe-table--tooltip-wrapper.is--visible{display:block}.vxe-table--tooltip-wrapper.is--enterable:after{content:"";position:absolute;left:0;width:100%;height: 0.375rem;background-color:transparent}.vxe-table--tooltip-wrapper .vxe-table--tooltip-content{white-space:pre-line}.vxe-table--tooltip-wrapper .vxe-table--tooltip-arrow{display:none;position:absolute;border-color:transparent;border-width: 0.375rem;border-style:solid;left:50%;-webkit-transform:translateX( -0.375rem);transform:translateX( -0.375rem)}.vxe-table--tooltip-wrapper .vxe-table--tooltip-arrow:before{content:"";position:absolute;border-color:transparent;border-width: 0.3125rem;border-style:solid;left: -0.3125rem}.vxe-table--tooltip-wrapper.placement--top.is--enterable:after{bottom: -0.375rem}.vxe-table--tooltip-wrapper.placement--top .vxe-table--tooltip-arrow{bottom: -0.75rem}.vxe-table--tooltip-wrapper.placement--top .vxe-table--tooltip-arrow:before{top: -0.4375rem}.vxe-table--tooltip-wrapper.placement--bottom.is--enterable:after{top: -0.375rem}.vxe-table--tooltip-wrapper.placement--bottom .vxe-table--tooltip-arrow{top: -0.75rem}.vxe-table--tooltip-wrapper.placement--bottom .vxe-table--tooltip-arrow:before{top: -0.25rem}.vxe-table--tooltip-wrapper.theme--light{background-color:#fff;border: 0.0625rem solid #dcdfe6}.vxe-table--tooltip-wrapper.theme--light.placement--top .vxe-table--tooltip-arrow{border-top-color:#dcdfe6}.vxe-table--tooltip-wrapper.theme--light.placement--top .vxe-table--tooltip-arrow:before{border-top-color:#fff}.vxe-table--tooltip-wrapper.theme--light.placement--bottom .vxe-table--tooltip-arrow{border-bottom-color:#dcdfe6}.vxe-table--tooltip-wrapper.theme--light.placement--bottom .vxe-table--tooltip-arrow:before{border-bottom-color:#fff}.vxe-table--tooltip-wrapper.theme--dark{background:#303133;color:#fff}.vxe-table--tooltip-wrapper.theme--dark.placement--top .vxe-table--tooltip-arrow,.vxe-table--tooltip-wrapper.theme--dark.placement--top .vxe-table--tooltip-arrow:before{border-top-color:#303133}.vxe-table--tooltip-wrapper.theme--dark.placement--bottom .vxe-table--tooltip-arrow,.vxe-table--tooltip-wrapper.theme--dark.placement--bottom .vxe-table--tooltip-arrow:before{border-bottom-color:#303133}.vxe-table--tooltip-wrapper.vxe-table--valid-error{background-color:#f56c6c;color:#fff}.vxe-form--item .vxe-default-input[type=reset]:hover,.vxe-form--item .vxe-default-input[type=submit]:hover{color:#5faeff;border-color:#73b8ff}.vxe-form{position:relative;font-size: 0.875rem;color:#606266;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Helvetica Neue,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;background-color:#fff;text-align:left}.vxe-form-slots{display:none}.vxe-form--item-content,.vxe-form--item-trigger-node{display:inline-block;vertical-align:middle}.vxe-form--item-title{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;max-width: 20rem;padding-right:.8em}.vxe-form--item-title.is--ellipsis .vxe-form--item-title-content{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vxe-form--item-title .vxe-form--item-title-postfix,.vxe-form--item-title .vxe-form--item-title-prefix,.vxe-form--item-title .vxe-form--item-title-suffix{-ms-flex-negative:0;flex-shrink:0}.vxe-form--item-title .vxe-form--item-title-prefix,.vxe-form--item-title .vxe-form--item-title-suffix{cursor:help;vertical-align:middle}.vxe-form--item-title .vxe-form--item-title-prefix{margin-right:.25em}.vxe-form--item-title .vxe-form--item-title-suffix{margin-left:.2em}.vxe-form--item-title .vxe-form--item-title-postfix{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.vxe-form--item-title .vxe-form--item-title-content{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.vxe-form--item-title .vxe-form--item-title-label{vertical-align:middle}.vxe-form--item-trigger-node{font-size: 0.75rem;min-width: 6.25rem;color:#909399;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer}.vxe-form--item-trigger-node .vxe-form--item-trigger-icon{display:inline-block;margin:0 .25em;-webkit-transition:all .1s;transition:all .1s}.vxe-form--item-valid{position:absolute;width:100%;font-size: 0.75rem;line-height:1.2em;color:#f56c6c;background-color:inherit;z-index:1;opacity:0;-webkit-transform-origin:center top;transform-origin:center top;-webkit-transform:scaleY(0);transform:scaleY(0);-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.vxe-form .vxe-form--gather{display:inline-block}.vxe-form .vxe-form--item{display:none;padding:.5em .8em .5em 0}.vxe-form .vxe-form--item.is--active:not(.is--hidden){display:inline-block}.vxe-form--item.is--colon .vxe-form--item-title-postfix:after{content:":";font-weight:400;margin-left:.2em}.vxe-form--item.is--asterisk.is--required .vxe-form--item-title-content:before{content:"*";color:#f56c6c;font-family:Verdana,Arial,Tahoma;margin-right:.2em;font-weight:400;vertical-align:middle}.vxe-form--item.is--span .vxe-default-input:not([type=submit]):not([type=reset]),.vxe-form--item.is--span .vxe-default-select,.vxe-form--item.is--span .vxe-default-textarea,.vxe-form--item.is--span .vxe-input,.vxe-form--item.is--span .vxe-select,.vxe-form--item.is--span .vxe-textarea{width:100%}.vxe-form--item.is--error .vxe-default-input,.vxe-form--item.is--error .vxe-default-input[type=search]:focus,.vxe-form--item.is--error .vxe-default-input[type=text]:focus,.vxe-form--item.is--error .vxe-default-select,.vxe-form--item.is--error .vxe-default-select:focus,.vxe-form--item.is--error .vxe-default-textarea,.vxe-form--item.is--error .vxe-default-textarea:focus,.vxe-form--item.is--error .vxe-input>.vxe-input--inner,.vxe-form--item.is--error .vxe-input>.vxe-input--inner:focus,.vxe-form--item.is--error .vxe-select,.vxe-form--item.is--error .vxe-select.is--active>.vxe-input .vxe-input--inner,.vxe-form--item.is--error .vxe-textarea>.vxe-textarea--inner,.vxe-form--item.is--error .vxe-textarea>.vxe-textarea--inner:focus{border-color:#f56c6c}.vxe-form--item.is--error .vxe-form--item-valid{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1)}.vxe-form--item .vxe-form--item-inner{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.vxe-form--item .vxe-form--item-inner .vxe-form--item-title{-ms-flex-negative:0;flex-shrink:0}.vxe-form--item .vxe-form--item-inner .vxe-form--item-content{position:relative;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;word-break:break-all}.vxe-form--item .vxe-default-input,.vxe-form--item .vxe-default-select,.vxe-form--item .vxe-default-textarea{outline:0;border: 0.0625rem solid #dcdfe6;border-radius: 0.25rem}.vxe-form--item .vxe-default-input,.vxe-form--item .vxe-default-select{height: 2.125rem}.vxe-form--item .vxe-default-input{padding:0 .8em}.vxe-form--item .vxe-default-textarea{padding:.3em .6em}.vxe-form--item .vxe-default-input[type=number]{padding-right:.2em}.vxe-form--item .vxe-default-input[type=search],.vxe-form--item .vxe-default-input[type=text]{padding:0 1em}.vxe-form--item .vxe-default-input[type=search],.vxe-form--item .vxe-default-input[type=text],.vxe-form--item .vxe-default-select,.vxe-form--item .vxe-default-textarea{color:#606266}.vxe-form--item .vxe-default-input[type=search]:focus,.vxe-form--item .vxe-default-input[type=text]:focus,.vxe-form--item .vxe-default-select:focus,.vxe-form--item .vxe-default-textarea:focus{border: 0.0625rem solid #409eff}.vxe-form--item .vxe-default-input[type=search][disabled],.vxe-form--item .vxe-default-input[type=text][disabled],.vxe-form--item .vxe-default-select[disabled],.vxe-form--item .vxe-default-textarea[disabled]{cursor:not-allowed;background-color:#f3f3f3}.vxe-form--item .vxe-default-input[type=reset],.vxe-form--item .vxe-default-input[type=submit]{line-height: 2rem;background-color:#fff;cursor:pointer}.vxe-form--item .vxe-default-input[type=reset]:active,.vxe-form--item .vxe-default-input[type=submit]:active{color:#3699ff;border-color:#3699ff}.vxe-form--item .vxe-default-input[type=date]::-webkit-inner-spin-button{margin-top: 0.375rem}.vxe-form--item .vxe-default-input[type=date]::-webkit-inner-spin-button,.vxe-form--item .vxe-default-input[type=number]::-webkit-inner-spin-button{height: 1.5rem}.vxe-form--item .vxe-default-input::-webkit-input-placeholder{color:#c0c4cc}.vxe-form--item .vxe-default-input::-moz-placeholder{color:#c0c4cc}.vxe-form--item .vxe-default-input:-ms-input-placeholder{color:#c0c4cc}.vxe-form--item .vxe-default-input::-ms-input-placeholder{color:#c0c4cc}.vxe-form--item .vxe-default-input::placeholder{color:#c0c4cc}.vxe-form--item .vxe-default-input[type=search],.vxe-form--item .vxe-default-input[type=text],.vxe-form--item .vxe-default-select,.vxe-form--item .vxe-default-textarea{width: 11.25rem}.vxe-form--item .vxe-default-textarea{resize:none;vertical-align:middle}.vxe-form--item .vxe-default-textarea::-webkit-input-placeholder{color:#c0c4cc}.vxe-form--item .vxe-default-textarea::-moz-placeholder{color:#c0c4cc}.vxe-form--item .vxe-default-textarea:-ms-input-placeholder{color:#c0c4cc}.vxe-form--item .vxe-default-textarea::-ms-input-placeholder{color:#c0c4cc}.vxe-form--item .vxe-default-textarea::placeholder{color:#c0c4cc}.vxe-form .vxe-form--item-inner{min-height: 2.25rem}.vxe-form .vxe-form--item-inner>.align--center{text-align:center}.vxe-form .vxe-form--item-inner>.align--left{text-align:left}.vxe-form .vxe-form--item-inner>.align--right{text-align:right}.vxe-form.size--medium{font-size: 0.875rem}.vxe-form.size--medium .vxe-form--item-inner{min-height: 2.125rem}.vxe-form.size--medium .vxe-default-input[type=reset],.vxe-form.size--medium .vxe-default-input[type=submit]{line-height: 1.875rem}.vxe-form.size--medium .vxe-default-input,.vxe-form.size--medium .vxe-default-select{height: 2rem}.vxe-form.size--small{font-size: 0.8125rem}.vxe-form.size--small .vxe-form--item-inner{min-height: 2rem}.vxe-form.size--small .vxe-default-input[type=reset],.vxe-form.size--small .vxe-default-input[type=submit]{line-height: 1.75rem}.vxe-form.size--small .vxe-default-input,.vxe-form.size--small .vxe-default-select{height: 1.875rem}.vxe-form.size--mini{font-size: 0.75rem}.vxe-form.size--mini .vxe-form--item-inner{min-height: 1.875rem}.vxe-form.size--mini .vxe-default-input[type=reset],.vxe-form.size--mini .vxe-default-input[type=submit]{line-height: 1.625rem}.vxe-form.size--mini .vxe-default-input,.vxe-form.size--mini .vxe-default-select{height: 1.75rem}.vxe-select{position:relative;display:inline-block;width: 11.25rem;color:#606266;text-align:left}.vxe-select>.vxe-input .vxe-input--inner{cursor:pointer}.vxe-select.is--disabled>.vxe-input .vxe-input--inner{cursor:no-drop}.vxe-select.is--loading>.vxe-input .vxe-input--inner{cursor:progress}.vxe-select>.vxe-input{width:100%}.vxe-select>.vxe-input .vxe-input--suffix-icon{display:inline-block;-webkit-transition:-webkit-transform .2s ease-in-out;transition:-webkit-transform .2s ease-in-out;transition:transform .2s ease-in-out;transition:transform .2s ease-in-out,-webkit-transform .2s ease-in-out}.vxe-select.is--active:not(.is--filter)>.vxe-input .vxe-input--inner{border: 0.0625rem solid #409eff}.vxe-select-slots{display:none}.vxe-select--panel{display:none;position:absolute;left:0;padding: 0.25rem 0;color:#606266;text-align:left}.vxe-select--panel:not(.is--transfer){min-width:100%}.vxe-select--panel.is--transfer{position:fixed}.vxe-select--panel.animat--leave{display:block;opacity:0;-webkit-transform:scaleY(.5);transform:scaleY(.5);-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);-webkit-transform-origin:center top;transform-origin:center top;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}.vxe-select--panel.animat--leave[placement=top]{-webkit-transform-origin:center bottom;transform-origin:center bottom}.vxe-select--panel.animat--enter{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1)}.vxe-select-filter--wrapper{display:block}.vxe-select-filter--wrapper .vxe-select-filter--input{width:100%}.vxe-select-option--wrapper{position:relative;overflow-x:hidden;overflow-y:auto;padding: 0.25rem 0;max-height: 12.5rem;border-radius: 0.25rem;border: 0.0625rem solid #dadce0;-webkit-box-shadow:0 0 0.375rem 0.125rem rgba(0,0,0,.1);box-shadow:0 0 0.375rem 0.125rem rgba(0,0,0,.1);background-color:#fff}.vxe-optgroup .vxe-optgroup--title{padding:0 0.375rem;color:#909399;font-size: 0.75rem}.vxe-optgroup--wrapper .vxe-select-option{padding:0 1.25rem}.vxe-select-option{padding:0 .6em;max-width: 37.5rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.vxe-select-option.is--selected{font-weight:700;color:#409eff}.vxe-select-option:not(.is--disabled){cursor:pointer}.vxe-select-option:not(.is--disabled).is--hover{background-color:#f5f7fa}.vxe-select-option.is--disabled{color:#bfbfbf;cursor:no-drop}.vxe-select--search-icon{margin-right:.5em}.vxe-select--empty-placeholder,.vxe-select--search-loading{padding:0 .6em;text-align:center;color:#c0c4cc}.vxe-select,.vxe-select--panel,.vxe-select--panel.size--medium,.vxe-select.size--medium{font-size: 0.875rem}.vxe-select--panel.size--small,.vxe-select.size--small{font-size: 0.8125rem}.vxe-select--panel.size--mini,.vxe-select.size--mini{font-size: 0.75rem}.vxe-select--panel .vxe-optgroup--title,.vxe-select--panel .vxe-select-option{height: 1.875rem}.vxe-select--panel .vxe-optgroup--title,.vxe-select--panel .vxe-select--empty-placeholder,.vxe-select--panel .vxe-select--search-loading,.vxe-select--panel .vxe-select-option{line-height: 1.875rem}.vxe-select--panel.size--medium .vxe-optgroup--title,.vxe-select--panel.size--medium .vxe-select-option{height: 1.75rem}.vxe-select--panel.size--medium .vxe-optgroup--title,.vxe-select--panel.size--medium .vxe-select--empty-placeholder,.vxe-select--panel.size--medium .vxe-select--search-loading,.vxe-select--panel.size--medium .vxe-select-option{line-height: 1.75rem}.vxe-select--panel.size--small .vxe-optgroup--title,.vxe-select--panel.size--small .vxe-select-option{height: 1.625rem}.vxe-select--panel.size--small .vxe-optgroup--title,.vxe-select--panel.size--small .vxe-select--empty-placeholder,.vxe-select--panel.size--small .vxe-select--search-loading,.vxe-select--panel.size--small .vxe-select-option{line-height: 1.625rem}.vxe-select--panel.size--mini .vxe-optgroup--title,.vxe-select--panel.size--mini .vxe-select-option{height: 1.5rem}.vxe-select--panel.size--mini .vxe-optgroup--title,.vxe-select--panel.size--mini .vxe-select--empty-placeholder,.vxe-select--panel.size--mini .vxe-select--search-loading,.vxe-select--panel.size--mini .vxe-select-option{line-height: 1.5rem}.vxe-switch{display:inline-block;color:#606266;vertical-align:middle;padding:.4em;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-align:center}.vxe-switch.is--animat .vxe-switch--button{-webkit-transition:border-color .3s,background-color .3s;transition:border-color .3s,background-color .3s}.vxe-switch.is--animat .vxe-switch--icon{-webkit-transition:all .3s;transition:all .3s}.vxe-switch.is--on .vxe-switch--button{padding-right:1.7em;background-color:#409eff}.vxe-switch.is--on .vxe-switch--icon{left:100%;-webkit-transform:translateX(-1.4em);transform:translateX(-1.4em)}.vxe-switch.is--off .vxe-switch--button{padding-left:1.7em;background-color:rgba(0,0,0,.35)}.vxe-switch.is--off .vxe-switch--icon{left:.2em;-webkit-transform:translateX(0);transform:translateX(0)}.vxe-switch.is--off .vxe-switch--label-on,.vxe-switch.is--on .vxe-switch--label-off{height:0;visibility:hidden;overflow:hidden}.vxe-switch.is--off .vxe-switch--label,.vxe-switch.is--on .vxe-switch--label{opacity:1}.vxe-switch:not(.is--disabled) .vxe-switch--button{cursor:pointer}.vxe-switch:not(.is--disabled) .vxe-switch--button:focus{-webkit-box-shadow:0 0 .4em 0 #409eff;box-shadow:0 0 .4em 0 #409eff}.vxe-switch.is--disabled .vxe-switch--button{cursor:no-drop}.vxe-switch.is--disabled.is--on .vxe-switch--button{background-color:#a6d2ff}.vxe-switch.is--disabled.is--off .vxe-switch--button{background-color:rgba(0,0,0,.15)}.vxe-switch .vxe-switch--button{display:block;position:relative;height:1.6em;line-height:1;min-width:3.2em;padding:0 .6em;border-radius:1em;border:0;outline:0}.vxe-switch .vxe-switch--label{opacity:0;display:block;color:#fff;font-size:.8em}.vxe-switch .vxe-switch--icon{position:absolute;top:.2em;left:0;width:1.2em;height:1.2em;border-radius:50%;background-color:#fff}.vxe-switch .vxe-switch--label-icon{margin-right:.25em}.vxe-switch,.vxe-switch.size--medium{font-size: 0.875rem}.vxe-switch.size--small{font-size: 0.8125rem}.vxe-switch.size--mini{font-size: 0.75rem}.vxe-list{position:relative;display:block;padding:0;color:#606266;direction:ltr}.vxe-list .vxe-list--virtual-wrapper{position:relative;overflow:auto}.vxe-list .vxe-list--y-space{width:0;float:left}.vxe-list .vxe-list--body,.vxe-list .vxe-list--virtual-wrapper{padding:0;margin:0;border:0;outline:0}.vxe-list--virtual-wrapper{height: 6.25rem}.vxe-pulldown{position:relative;display:inline-block;color:#606266;text-align:left}.vxe-pulldown--panel{display:none;position:absolute;left:0;padding: 0.25rem 0;color:#606266;text-align:left}.vxe-pulldown--panel:not(.is--transfer){min-width:100%}.vxe-pulldown--panel.is--transfer{position:fixed}.vxe-pulldown--panel.animat--leave{display:block;opacity:0;-webkit-transform:scaleY(.5);transform:scaleY(.5);-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);-webkit-transform-origin:center top;transform-origin:center top;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}.vxe-pulldown--panel.animat--leave[placement=top]{-webkit-transform-origin:center bottom;transform-origin:center bottom}.vxe-pulldown--panel.animat--enter{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1)}.vxe-pulldown--wrapper{background-color:#fff}.vxe-pulldown,.vxe-pulldown--panel,.vxe-pulldown--panel.size--medium,.vxe-pulldown.size--medium{font-size: 0.875rem}.vxe-pulldown--panel.size--small,.vxe-pulldown.size--small{font-size: 0.8125rem}.vxe-pulldown--panel.size--mini,.vxe-pulldown.size--mini{font-size: 0.75rem}
\ No newline at end of file
diff --git a/src/css/global/index.scss b/src/css/global/index.scss
new file mode 100644
index 0000000..7f1a92f
--- /dev/null
+++ b/src/css/global/index.scss
@@ -0,0 +1,157 @@
+html, body, #app {
+ width: 100%;
+ height: 100%;
+ padding: 0;
+ margin: 0;
+}
+
+html {
+ font-size: 16px;
+}
+
+#__testStringWide {
+ display: none;
+ height: 1.375rem !important;
+ visibility: unset;
+ font-size: 0.875rem !important;
+}
+
+
+.confirm-btn-box {
+ display: flex;
+ flex-direction: row;
+ justify-content: center;
+ margin-top: 1.25rem;
+}
+
+/* 字体图标样式开始*/
+.iconfont {
+ color: #ffffff;
+ margin-left: 0.7rem;
+ font-size: 1.25rem !important;
+}
+
+.iconfont:hover {
+ color: var(--theme-color);
+}
+
+/* 字体图标样式结束*/
+
+
+.flex {
+ display: flex;
+}
+
+.flex-center {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+}
+
+.flex-column-center {
+ display: flex;
+ align-items: center;
+}
+
+.is-can-click {
+ cursor: pointer;
+}
+
+
+.static-title {
+ background: linear-gradient(to right, #703AAC 0%, rgba(112, 58, 172, 0) 100%);
+ box-shadow: 0 0 0.06rem 0 rgba(41, 137, 248, 0.5) inset;
+ width: 16.88rem;
+ height: 1.56rem;
+ font-size: 1rem;
+ font-family: MicrosoftYaHei-Bold, MicrosoftYaHei, serif;
+ font-weight: bold;
+ color: #FFFFFF;
+}
+
+/* 滚动条样式 开始*/
+::-webkit-scrollbar {
+ height: 0.5rem;
+ width: 0.5rem;
+ background: var(--gun-dong-tiao-gb);
+}
+
+::-webkit-scrollbar-thumb {
+ background: var(--theme-color);
+ border-radius: 0.31rem;
+}
+
+::-webkit-scrollbar-thumb:hover {
+ cursor: pointer !important;
+}
+
+/* 滚动条样式 结束*/
+
+.mb-10 {
+ //margin-bottom: 0.1rem !important;
+ margin-bottom: 0.62rem !important;
+}
+
+.ml-10 {
+ margin-left: 0.62rem !important;
+}
+
+.ml-20 {
+ margin-left: 0.125rem !important;
+}
+
+.mr-10 {
+ margin-right: 0.62rem !important;
+}
+
+.mr-20 {
+ margin-right: 1.25rem !important;
+}
+
+.mr-5 {
+ margin-right: 0.31rem !important;
+}
+
+.mt-10 {
+ margin-top: 0.62rem !important;
+}
+
+.w-100 {
+ width: 100% !important;
+}
+
+.h-100 {
+ height: 100% !important;
+}
+
+.center {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+}
+
+.token-box {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+}
+
+
+.el-pagination {
+ display: flex;
+ align-content: center;
+ justify-content: center;
+}
+
+.el-table__header-wrapper {
+ height: 40px !important;
+
+ .el-table__header {
+ height: 40px !important;
+ }
+}
+
+.el-table .el-table__cell {
+ padding: 0 !important;
+}
diff --git a/src/css/index.css b/src/css/index.css
new file mode 100644
index 0000000..859f1fd
--- /dev/null
+++ b/src/css/index.css
@@ -0,0 +1,24 @@
+@import url('./global/index.scss');
+@import url('./element/index.scss');
+@import url('./vxe-table/index.scss');
+@import url('./message/index.scss');
+
+:root {
+ --theme-color: rgb(44, 70, 155);
+ --modal-bg-color: rgba(27, 26, 72, 0.75);
+ --white-font: #ffffff;
+ --aside-bg: rgb(44, 70, 155);
+ --cancel-btn-gb: rgba(0, 0, 0, 0);
+ --follow-list-bg: rgba(242, 242, 242, 0.9);
+ --table-header-row-bg: rgba(40, 39, 72, 1);
+ --gun-dong-tiao-gb: rgba(242, 242, 242, 0.9);
+ --aside-gbc: #2c469b;
+ --aside-font-color: #FFFFFF;
+ --map-control-gb: rgba(0, 60, 136, 0.3);
+ --map-control-font-color: #eee;
+ --dialog-bg: rgba(255, 255, 255, 0.6);
+ --dialog-header-bg: var(--aside-gbc);
+ --dialog-header-font-color: #FFFFFF;
+ --dialog-body-gb: rgba(255, 255, 255, 0.6)
+}
+
diff --git a/src/css/message/index.scss b/src/css/message/index.scss
new file mode 100644
index 0000000..6078010
--- /dev/null
+++ b/src/css/message/index.scss
@@ -0,0 +1,3 @@
+.toast-message {
+ font-size: 1rem !important;
+}
diff --git a/src/css/vxe-table/index.scss b/src/css/vxe-table/index.scss
new file mode 100644
index 0000000..2a275ef
--- /dev/null
+++ b/src/css/vxe-table/index.scss
@@ -0,0 +1,138 @@
+.vxe-modal--wrapper {
+}
+
+.vxe-modal--body {
+ background: rgba(255, 255, 255, 0.95);
+ border-radius: 0 0 0.75rem 0.75rem !important;
+}
+
+.vxe-modal--header {
+ background: #2c469b !important;
+ color: #ffffff !important;
+ border: none !important;
+ border-radius: 0.75rem 0.75rem 0 0 !important;
+ height: 2.5rem;
+ padding-left: 0.9rem;
+}
+
+.vxe-modal--box {
+ background: transparent !important;
+ border: none !important;
+}
+
+
+/* table 样式开始*/
+.table-header-row-css {
+ background: rgb(148, 161, 204);
+ color: var(--white-font);
+ border: none !important;
+}
+
+.vxe-table--main-wrapper {
+ border: none !important;
+}
+
+.vxe-table--body-wrapper {
+ color: black;
+}
+
+.custom-table-page {
+ background: transparent !important;
+ color: var(--white-font) !important;
+}
+
+.vxe-table--border-line {
+}
+
+.vxe-table .vxe-table--header-wrapper .vxe-table--header-border-line {
+ display: none !important;
+}
+
+.vxe-header--gutter {
+ background-position: unset !important;
+}
+
+.vxe-header--column {
+ border-bottom: none !important;
+ background-position: unset !important;
+}
+
+.table-row-css {
+ border: none !important;
+ height: 2.5rem !important;
+}
+
+.table-row-css:nth-child(odd) {
+ background: #343352 !important;
+ color: #B2B1CE !important;
+}
+
+.table-cell-css {
+ height: 2.5rem !important;
+ border-bottom: none !important;
+}
+
+.table-row-css:nth-child(even) {
+ background: #3C3B5B !important;
+ color: #B2B1CE !important;
+ border: none !important;
+}
+
+/* table 样式结束*/
+
+
+/* header 按钮样式开始*/
+.is--filter-active .vxe-cell--filter .vxe-filter--btn {
+ color: var(--theme-color) !important;
+}
+
+/* header 按钮样式结束*/
+
+
+/* 分页样式 开始*/
+.vxe-pager--wrapper .vxe-pager--prev-btn, .vxe-pager--wrapper .vxe-pager--next-btn {
+ background: var(--theme-color) !important;
+ color: var(--white-font) !important;
+}
+
+.vxe-pager--wrapper .vxe-pager--prev-btn:hover, .vxe-pager--wrapper .vxe-pager--next-btn:hover {
+ background: var(--theme-color) !important;
+ color: var(--white-font) !important;
+ opacity: 0.7 !important;
+}
+
+.vxe-pager--wrapper .vxe-pager--prev-btn:focus, .vxe-pager--wrapper .vxe-pager--next-btn:focus {
+ background: var(--theme-color) !important;
+ color: var(--white-font) !important;
+ opacity: 0.7 !important;
+}
+
+.vxe-pager--wrapper .vxe-pager--sizes {
+
+}
+
+.vxe-pager--wrapper .vxe-pager--sizes .vxe-select--panel .vxe-select-option--wrapper .is--selected {
+ color: var(--theme-color) !important;
+}
+
+.vxe-pager--wrapper .vxe-pager--sizes .vxe-select--panel .vxe-select-option--wrapper .is--hover {
+ color: var(--theme-color) !important;
+}
+
+.vxe-pager--wrapper .vxe-pager--sizes .vxe-input .vxe-input--inner:focus {
+ border-color: var(--theme-color) !important;
+}
+
+.vxe-pager--wrapper .vxe-pager--goto:focus {
+ border-color: var(--theme-color) !important;
+}
+
+/* 分页样式 结束*/
+
+
+/* 表格中的加载 开始*/
+.vxe-loading .vxe-loading--spinner:after, .vxe-loading .vxe-loading--spinner:before {
+ background: var(--theme-color) !important;
+}
+
+/* 表格中的加载 结束*/
diff --git a/src/css/vxe-table/source-index.css b/src/css/vxe-table/source-index.css
new file mode 100644
index 0000000..8752bb5
--- /dev/null
+++ b/src/css/vxe-table/source-index.css
@@ -0,0 +1 @@
+@font-face{font-family:vxeiconfont;src:url("data:application/x-font-woff2;charset=utf-8;base64,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 0.4375remxcQhT6JtOltxQqd1RaWylF5jSTYpvCkBUFkj0pyuAIKBKJdWIxiiImGClF5JwJkBqilQ7ZxjJ4ycKpoML1IOWnW5RFh2ICKUeVfC1m3rt0Z4MZCx8TPrajz0ZlEI/VENljqKHCSFQJliuDVl1qNEmsFR5aPLMYHAVFD1FzEsIZ7R2xyiGPgDRnz0Zk6JxTRZIuYJ+ex95KK+dboBFkkjwEG7ZSOq/vrZQ0QFNrt93VJuIMacPt858WK1LIByeWLOjvSwIRusf/BrWtxLXveV+qhamUR7cs2NVofVQfWVK7HWUCvWA2zqJlWOCwmdStyjMU+aPufflZHg0LBjmuzhnD1VI1++Gjz+t5W0l25DsqZ75VXxZHEVyaA04IqFOGavGA6IVUAVFILMI61EAm8ru13a3FtIPI1meGGd 0.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") format("woff2")}@-webkit-keyframes rollCircle{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes rollCircle{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}[class*=vxe-icon-]{font-family:vxeiconfont!important;font-style:normal;font-weight:400;font-size:1.1em;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}[class*=vxe-icon-].animat,[class*=vxe-icon-].roll{display:inline-block}[class*=vxe-icon-].animat{-webkit-transition:-webkit-transform .25s ease-in-out;transition:-webkit-transform .25s ease-in-out;transition:transform .25s ease-in-out;transition:transform .25s ease-in-out,-webkit-transform .25s ease-in-out}[class*=vxe-icon-].rotate45{-webkit-transform:rotate(45deg);transform:rotate(45deg)}[class*=vxe-icon-].rotate90{-webkit-transform:rotate(90deg);transform:rotate(90deg)}[class*=vxe-icon-].rotate180{-webkit-transform:rotate(180deg);transform:rotate(180deg)}[class*=vxe-icon-].roll{-webkit-animation:rollCircle 1s linear infinite;animation:rollCircle 1s linear infinite}.vxe-icon-lightning:before{content:""}.vxe-icon-cloudy:before{content:""}.vxe-icon-heavy-rain:before{content:""}.vxe-icon-moon:before{content:""}.vxe-icon-sunny:before{content:""}.vxe-icon-location:before{content:""}.vxe-icon-location-fill:before{content:""}.vxe-icon-microphone-fill:before{content:""}.vxe-icon-microphone:before{content:""}.vxe-icon-share:before{content:""}.vxe-icon-share-fill:before{content:""}.vxe-icon-flag:before{content:""}.vxe-icon-flag-fill:before{content:""}.vxe-icon-platform:before{content:""}.vxe-icon-goods-fill:before{content:""}.vxe-icon-goods:before{content:""}.vxe-icon-funnel-clear:before{content:""}.vxe-icon-envelope:before{content:""}.vxe-icon-envelope-open-fill:before{content:""}.vxe-icon-envelope-open:before{content:""}.vxe-icon-envelope-fill:before{content:""}.vxe-icon-message-fill:before{content:""}.vxe-icon-chat:before{content:""}.vxe-icon-chat-fill:before{content:""}.vxe-icon-send:before{content:""}.vxe-icon-send-fill:before{content:""}.vxe-icon-user:before{content:""}.vxe-icon-user-fill:before{content:""}.vxe-icon-wechat:before{content:""}.vxe-icon-alipay:before{content:""}.vxe-icon-indicator:before{content:""}.vxe-icon-file-excel:before{content:""}.vxe-icon-file-pdf:before{content:""}.vxe-icon-file-image:before{content:""}.vxe-icon-file-markdown:before{content:""}.vxe-icon-file-ppt:before{content:""}.vxe-icon-file-word:before{content:""}.vxe-icon-file-zip:before{content:""}.vxe-icon-file-txt:before{content:""}.vxe-icon-refresh:before{content:""}.vxe-icon-checkbox-unchecked:before{content:""}.vxe-icon-information:before{content:""}.vxe-icon-info-circle-fill:before{content:""}.vxe-icon-info-circle:before{content:""}.vxe-icon-chart-radar:before{content:""}.vxe-icon-chart-bar-x:before{content:""}.vxe-icon-repeat:before{content:""}.vxe-icon-voice-fill:before{content:""}.vxe-icon-voice:before{content:""}.vxe-icon-flow-branch:before{content:""}.vxe-icon-comment:before{content:""}.vxe-icon-folder:before{content:""}.vxe-icon-folder-open:before{content:""}.vxe-icon-picture:before{content:""}.vxe-icon-picture-fill:before{content:""}.vxe-icon-bell:before{content:""}.vxe-icon-bell-fill:before{content:""}.vxe-icon-undo:before{content:""}.vxe-icon-home:before{content:""}.vxe-icon-home-fill:before{content:""}.vxe-icon-checkbox-checked:before{content:""}.vxe-icon-checkbox-indeterminate:before{content:""}.vxe-icon-fullscreen:before{content:""}.vxe-icon-minimize:before{content:""}.vxe-icon-print:before{content:""}.vxe-icon-upload:before{content:""}.vxe-icon-download:before{content:""}.vxe-icon-cloud-upload:before{content:""}.vxe-icon-cloud-download:before{content:""}.vxe-icon-spinner:before{content:""}.vxe-icon-close:before{content:""}.vxe-icon-custom-column:before{content:""}.vxe-icon-edit:before{content:""}.vxe-icon-zoom-in:before{content:""}.vxe-icon-caret-down:before{content:""}.vxe-icon-caret-up:before{content:""}.vxe-icon-caret-right:before{content:""}.vxe-icon-caret-left:before{content:""}.vxe-icon-square-checked-fill:before{content:""}.vxe-icon-square-close:before{content:""}.vxe-icon-square-down:before{content:""}.vxe-icon-square-left:before{content:""}.vxe-icon-square-caret-right:before{content:""}.vxe-icon-square-minus:before{content:""}.vxe-icon-square-plus:before{content:""}.vxe-icon-square-right:before{content:""}.vxe-icon-square-up:before{content:""}.vxe-icon-square-checked:before{content:""}.vxe-icon-square-down-fill:before{content:""}.vxe-icon-square-minus-fill:before{content:""}.vxe-icon-square-close-fill:before{content:""}.vxe-icon-square-left-fill:before{content:""}.vxe-icon-square-caret-right-fill:before{content:""}.vxe-icon-square-up-fill:before{content:""}.vxe-icon-square-right-fill:before{content:""}.vxe-icon-square-plus-fill:before{content:""}.vxe-icon-square-plus-square:before{content:""}.vxe-icon-square-fill:before{content:""}.vxe-icon-square-square:before{content:""}.vxe-icon-sort-alpha-desc:before{content:""}.vxe-icon-sort-alpha-asc:before{content:""}.vxe-icon-sort-numeric-asc:before{content:""}.vxe-icon-sort-numeric-desc:before{content:""}.vxe-icon-star-fill:before{content:""}.vxe-icon-star:before{content:""}.vxe-icon-star-half:before{content:""}.vxe-icon-lock-fill:before{content:""}.vxe-icon-unlock-fill:before{content:""}.vxe-icon-question:before{content:""}.vxe-icon-exclamation:before{content:""}.vxe-icon-ellipsis-h:before{content:""}.vxe-icon-ellipsis-v:before{content:""}.vxe-icon-save:before{content:""}.vxe-icon-setting:before{content:""}.vxe-icon-setting-fill:before{content:""}.vxe-icon-link:before{content:""}.vxe-icon-sort:before{content:""}.vxe-icon-chart-pie:before{content:""}.vxe-icon-chart-line:before{content:""}.vxe-icon-swap:before{content:""}.vxe-icon-num-list:before{content:""}.vxe-icon-copy:before{content:""}.vxe-icon-company:before{content:""}.vxe-icon-swap-right:before{content:""}.vxe-icon-swap-left:before{content:""}.vxe-icon-table:before{content:""}.vxe-icon-merge-cells:before{content:""}.vxe-icon-paste:before{content:""}.vxe-icon-cut:before{content:""}.vxe-icon-lock:before{content:""}.vxe-icon-unlock:before{content:""}.vxe-icon-chart-bar-y:before{content:""}.vxe-icon-fixed-fill:before{content:""}.vxe-icon-fixed:before{content:""}.vxe-icon-square:before{content:""}.vxe-icon-check:before{content:""}.vxe-icon-question-circle-fill:before{content:""}.vxe-icon-error-circle-fill:before{content:""}.vxe-icon-delete:before{content:""}.vxe-icon-dot:before{content:""}.vxe-icon-success-circle:before{content:""}.vxe-icon-delete-fill:before{content:""}.vxe-icon-minus:before{content:""}.vxe-icon-maximize:before{content:""}.vxe-icon-question-circle:before{content:""}.vxe-icon-warning-circle:before{content:""}.vxe-icon-warnion-circle-fill:before{content:""}.vxe-icon-eye-fill:before{content:""}.vxe-icon-search:before{content:""}.vxe-icon-funnel:before{content:""}.vxe-icon-eye-fill-close:before{content:""}.vxe-icon-search-zoom-in:before{content:""}.vxe-icon-arrow-right:before{content:""}.vxe-icon-arrow-left:before{content:""}.vxe-icon-arrow-up:before{content:""}.vxe-icon-calendar:before{content:""}.vxe-icon-arrow-down:before{content:""}.vxe-icon-warning-triangle:before{content:""}.vxe-icon-add:before{content:""}.vxe-icon-arrow-double-left:before{content:""}.vxe-icon-arrow-double-right:before{content:""}.vxe-icon-menu:before{content:""}.vxe-icon-warning-triangle-fill:before{content:""}.vxe-icon-error-circle:before{content:""}.vxe-icon-zoom-out:before{content:""}.vxe-icon-success-circle-fill:before{content:""}.vxe-icon-radio-checked:before{content:""}.vxe-icon-radio-unchecked:before{content:""}.vxe-cell--filter{padding:0 .1em 0 .25em;text-align:center;vertical-align:middle;display:inline-block;line-height:0}.vxe-cell--filter.col--filter .vxe-filter--btn{color:#606266}.vxe-cell--filter .vxe-filter--btn{color:#c0c4cc;cursor:pointer}.vxe-cell--filter .vxe-filter--btn:hover{color:#606266}.is--filter-active .vxe-cell--filter .vxe-filter--btn{color:#409eff}.vxe-table--filter-wrapper{display:none;position:absolute;top:0;min-width: 6.25rem;border-radius: 0.25rem;background-color:#fff;border: 0.0625rem solid #dadce0;-webkit-box-shadow:0 0.0625rem 0.375rem rgba(0,0,0,.2);box-shadow:0 0.0625rem 0.375rem rgba(0,0,0,.2);z-index:10}.vxe-table--filter-wrapper:not(.is--multiple){text-align:center}.vxe-table--filter-wrapper.is--active{display:block}.vxe-table--filter-wrapper .vxe-table--filter-body>li,.vxe-table--filter-wrapper .vxe-table--filter-header>li{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width: 22.5rem;padding:.25em .8em;cursor:pointer}.vxe-table--filter-wrapper .vxe-table--filter-body>li.is--checked,.vxe-table--filter-wrapper .vxe-table--filter-header>li.is--checked{color:#409eff}.vxe-table--filter-wrapper .vxe-table--filter-body>li:hover,.vxe-table--filter-wrapper .vxe-table--filter-header>li:hover{background-color:#f5f7fa}.vxe-table--filter-wrapper .vxe-table--filter-header{padding-top:.2em}.vxe-table--filter-wrapper .vxe-table--filter-body{max-height: 12.5rem;padding-bottom:.2em}.vxe-table--filter-wrapper>ul{list-style-type:none;padding:0;margin:0;overflow:auto;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.vxe-table--filter-wrapper.is--multiple>ul>li{padding:.25em .8em .25em 1em}.vxe-table--filter-wrapper .vxe-table--filter-footer{border-top: 0.0625rem solid #dadce0;padding:.6em;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.vxe-table--filter-wrapper .vxe-table--filter-footer button{background-color:transparent;padding:0 .4em;border:0;color:#606266;cursor:pointer}.vxe-table--filter-wrapper .vxe-table--filter-footer button:focus{outline:none}.vxe-table--filter-wrapper .vxe-table--filter-footer button:hover{color:#409eff}.vxe-table--filter-wrapper .vxe-table--filter-footer button.is--disabled{color:#bfbfbf;cursor:not-allowed}.vxe-table--context-menu-clild-wrapper,.vxe-table--context-menu-wrapper{position:absolute;top:0;left:0;font-size: 0.75rem;border: 0.0625rem solid #dadce0;-webkit-box-shadow: 0.1875rem 0.1875rem 0.25rem -0.125rem rgba(0,0,0,.6);box-shadow: 0.1875rem 0.1875rem 0.25rem -0.125rem rgba(0,0,0,.6);padding:0 0.0625rem;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;color:#606266;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Helvetica Neue,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;background-color:#fff}.vxe-context-menu--link{display:block;padding:0 2.5em;width: 11.125rem;line-height: 1.625rem;color:#606266;cursor:pointer}.vxe-context-menu--link .vxe-context-menu--link-prefix,.vxe-context-menu--link .vxe-context-menu--link-suffix{position:absolute;top: 0.3125rem;margin-right: 0.3125rem;font-size: 1rem}.vxe-context-menu--link .vxe-context-menu--link-prefix{left: 0.3125rem}.vxe-context-menu--link .vxe-context-menu--link-suffix{right: 0.3125rem}.vxe-context-menu--link .vxe-context-menu--link-suffix.suffix--haschild{top: 0.5rem}.vxe-context-menu--link .vxe-context-menu--link-suffix.suffix--haschild:before{position:absolute;content:"";border: 0.25rem solid transparent;border-left-color:#727272}.vxe-context-menu--link .vxe-context-menu--link-content{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vxe-table--context-menu-clild-wrapper .vxe-context-menu--link{padding:0 2em 0 2.5em}.vxe-context-menu--option-wrapper,.vxe-table--context-menu-clild-wrapper{margin:0;padding:0;list-style-type:none;border-bottom: 0.0625rem solid #e8eaed}.vxe-context-menu--option-wrapper li,.vxe-table--context-menu-clild-wrapper li{position:relative;margin: 0.0625rem 0;border: 0.0625rem solid transparent}.vxe-context-menu--option-wrapper li:last-child,.vxe-table--context-menu-clild-wrapper li:last-child{border:0}.vxe-context-menu--option-wrapper li.link--active,.vxe-table--context-menu-clild-wrapper li.link--active{background-color:#c5c5c5;border-color:#c5c5c5}.vxe-context-menu--option-wrapper li.link--active>.vxe-context-menu--link,.vxe-table--context-menu-clild-wrapper li.link--active>.vxe-context-menu--link{color:#2b2b2b}.vxe-context-menu--option-wrapper li.link--disabled>.vxe-context-menu--link,.vxe-table--context-menu-clild-wrapper li.link--disabled>.vxe-context-menu--link{color:#bfbfbf;cursor:no-drop}.vxe-context-menu--option-wrapper li.link--disabled.link--active,.vxe-table--context-menu-clild-wrapper li.link--disabled.link--active{border-color:#c0c1c2;background-color:#eee}.vxe-context-menu--option-wrapper li.link--disabled.link--active:hover,.vxe-table--context-menu-clild-wrapper li.link--disabled.link--active:hover{background-color:inherit}.vxe-table--context-menu-clild-wrapper{display:none;top:0;left:100%}.vxe-table--context-menu-clild-wrapper.is--show{display:block}.vxe-export--panel-column>ul{list-style-type:none;overflow:auto;margin:0;padding:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.vxe-export--panel-column>ul>li{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;cursor:pointer}.vxe-export--panel>table{width:100%;border:0;table-layout:fixed}.vxe-export--panel>table tr td{padding:0 0.625rem}.vxe-export--panel>table tr td:first-child{text-align:right;width:30%;font-weight:700;padding: 0.5rem 0.625rem}.vxe-export--panel>table tr td:nth-child(2){width:70%}.vxe-export--panel>table tr td>.vxe-input,.vxe-export--panel>table tr td>.vxe-select{width:80%}.vxe-export--panel>table tr td>.vxe-export--panel-option-row{padding:.25em 0}.vxe-export--panel .vxe-export--panel-column{width:80%;border: 0.0625rem solid #dcdfe6;margin: 0.1875rem 0;border-radius: 0.25rem;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.vxe-export--panel .vxe-export--panel-column>ul>li{padding:.2em 1em .2em 1em}.vxe-export--panel .vxe-export--panel-column>ul>li.level--2{padding-left:3.5em}.vxe-export--panel .vxe-export--panel-column>ul>li.level--2 .vxe-checkbox--icon{left:1.8em}.vxe-export--panel .vxe-export--panel-column>ul>li.level--3{padding-left:4.5em}.vxe-export--panel .vxe-export--panel-column>ul>li.level--3 .vxe-checkbox--icon{left:2.8em}.vxe-export--panel .vxe-export--panel-column>ul>li.level--4{padding-left:5.5em}.vxe-export--panel .vxe-export--panel-column>ul>li.level--4 .vxe-checkbox--icon{left:3.8em}.vxe-export--panel .vxe-export--panel-column>ul>li.level--5{padding-left:6.5em}.vxe-export--panel .vxe-export--panel-column>ul>li.level--5 .vxe-checkbox--icon{left:4.8em}.vxe-export--panel .vxe-export--panel-column>ul>li.level--6{padding-left:7.5em}.vxe-export--panel .vxe-export--panel-column>ul>li.level--6 .vxe-checkbox--icon{left:5.8em}.vxe-export--panel .vxe-export--panel-column>ul>li.level--7{padding-left:8.5em}.vxe-export--panel .vxe-export--panel-column>ul>li.level--7 .vxe-checkbox--icon{left:6.8em}.vxe-export--panel .vxe-export--panel-column>ul>li.level--8{padding-left:9.5em}.vxe-export--panel .vxe-export--panel-column>ul>li.level--8 .vxe-checkbox--icon{left:7.8em}.vxe-export--panel .vxe-export--panel-column .vxe-export--panel-column-header{padding:.1em 0;background-color:#f8f8f9;font-weight:700;border-bottom: 0.0625rem solid #e8eaec}.vxe-export--panel .vxe-export--panel-column .vxe-export--panel-column-body{padding:.2em 0;min-height:10em;max-height:17.6em}.vxe-export--panel .vxe-import-selected--file{padding-right: 2.5rem;position:relative;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.vxe-export--panel .vxe-import-selected--file>i{display:none;position:absolute;top:50%;right: 0.9375rem;-webkit-transform:translateY(-50%);transform:translateY(-50%);font-size: 1rem;cursor:pointer}.vxe-export--panel .vxe-import-selected--file:hover{color:#409eff}.vxe-export--panel .vxe-import-selected--file:hover>i{display:block}.vxe-export--panel .vxe-import-select--file{border: 0.0625rem dashed #dcdfe6;padding: 0.375rem 2.125rem;outline:0;border-radius: 0.25rem;background-color:#fff;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer}.vxe-export--panel .vxe-import-select--file:focus{border-color:#409eff;-webkit-box-shadow:0 0 .25em 0 #409eff;box-shadow:0 0 .25em 0 #409eff}.vxe-export--panel .vxe-import-select--file:hover{color:#409eff;border-color:#409eff}.vxe-export--panel .vxe-export--panel-btns{text-align:right;padding:.25em}.vxe-loading{display:none;position:absolute;width:100%;height:100%;top:0;left:0;z-index:99;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:hsla(0,0%,100%,.5)}.vxe-loading.is--visible{display:block}.vxe-loading>.vxe-loading--chunk{width:100%;position:absolute;top:50%;left:0;-webkit-transform:translateY(-50%);transform:translateY(-50%);text-align:center;color:#409eff}.vxe-loading .vxe-loading--default-icon{font-size:1.4em}.vxe-loading .vxe-loading--text{padding:.4em 0}.vxe-loading .vxe-loading--spinner{display:inline-block;position:relative;width: 3.5rem;height: 3.5rem}.vxe-loading .vxe-loading--spinner:after,.vxe-loading .vxe-loading--spinner:before{content:"";width:100%;height:100%;border-radius:50%;background-color:#409eff;opacity:.6;position:absolute;top:0;left:0;-webkit-animation:bounce 2s ease-in-out infinite;animation:bounce 2s ease-in-out infinite}.vxe-loading .vxe-loading--spinner:after{-webkit-animation-delay:-1s;animation-delay:-1s}@-webkit-keyframes bounce{0%,to{-webkit-transform:scale(0);transform:scale(0)}50%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes bounce{0%,to{-webkit-transform:scale(0);transform:scale(0)}50%{-webkit-transform:scale(1);transform:scale(1)}}.size--mini .vxe-loading .vxe-loading--spinner{width: 2.375rem;height: 2.375rem}.size--small .vxe-loading .vxe-loading--spinner{width: 2.75rem;height: 2.75rem}.size--medium .vxe-loading .vxe-loading--spinner{width: 3.125rem;height: 3.125rem}.vxe-table--render-default .vxe-body--column.col--ellipsis,.vxe-table--render-default.vxe-editable .vxe-body--column,.vxe-table--render-default .vxe-footer--column.col--ellipsis,.vxe-table--render-default .vxe-header--column.col--ellipsis{height: 3rem}.vxe-table--render-default.size--medium .vxe-body--column.col--ellipsis,.vxe-table--render-default.size--medium .vxe-footer--column.col--ellipsis,.vxe-table--render-default.size--medium .vxe-header--column.col--ellipsis,.vxe-table--render-default.vxe-editable.size--medium .vxe-body--column{height: 2.75rem}.vxe-table--render-default.size--small .vxe-body--column.col--ellipsis,.vxe-table--render-default.size--small .vxe-footer--column.col--ellipsis,.vxe-table--render-default.size--small .vxe-header--column.col--ellipsis,.vxe-table--render-default.vxe-editable.size--small .vxe-body--column{height: 2.5rem}.vxe-table--render-default.size--mini .vxe-body--column.col--ellipsis,.vxe-table--render-default.size--mini .vxe-footer--column.col--ellipsis,.vxe-table--render-default.size--mini .vxe-header--column.col--ellipsis,.vxe-table--render-default.vxe-editable.size--mini .vxe-body--column{height: 2.25rem}.vxe-table--file-form,.vxe-table-slots{display:none}.vxe-table--print-frame{position:fixed;bottom:-100%;left:-100%;height:0;width:0;border:0}.vxe-table--body-wrapper{scroll-behavior:auto}.vxe-table--body-wrapper,.vxe-table--fixed-left-body-wrapper,.vxe-table--fixed-right-body-wrapper{overflow-y:auto;overflow-x:auto}.vxe-cell .vxe-default-input,.vxe-cell .vxe-default-textarea,.vxe-table--filter-wrapper .vxe-default-input,.vxe-table--filter-wrapper .vxe-default-textarea{background-color:#fff}.vxe-cell .vxe-default-input,.vxe-cell .vxe-default-select,.vxe-cell .vxe-default-textarea,.vxe-table--filter-wrapper .vxe-default-input,.vxe-table--filter-wrapper .vxe-default-select,.vxe-table--filter-wrapper .vxe-default-textarea{outline:0;padding:0 0.125rem;width:100%;color:#606266;border-radius: 0.25rem;border: 0.0625rem solid #dcdfe6}.vxe-cell .vxe-default-input:focus,.vxe-cell .vxe-default-select:focus,.vxe-cell .vxe-default-textarea:focus,.vxe-table--filter-wrapper .vxe-default-input:focus,.vxe-table--filter-wrapper .vxe-default-select:focus,.vxe-table--filter-wrapper .vxe-default-textarea:focus{border: 0.0625rem solid #409eff}.vxe-cell .vxe-default-input[disabled],.vxe-cell .vxe-default-select[disabled],.vxe-cell .vxe-default-textarea[disabled],.vxe-table--filter-wrapper .vxe-default-input[disabled],.vxe-table--filter-wrapper .vxe-default-select[disabled],.vxe-table--filter-wrapper .vxe-default-textarea[disabled]{cursor:not-allowed;background-color:#f3f3f3}.vxe-cell .vxe-default-input,.vxe-cell .vxe-default-select,.vxe-cell .vxe-default-textarea,.vxe-table--filter-wrapper .vxe-default-input,.vxe-table--filter-wrapper .vxe-default-select,.vxe-table--filter-wrapper .vxe-default-textarea{height: 2.125rem}.vxe-cell .vxe-default-input[type=date]::-webkit-inner-spin-button,.vxe-table--filter-wrapper .vxe-default-input[type=date]::-webkit-inner-spin-button{margin-top: 0.25rem}.vxe-cell .vxe-default-input[type=date]::-webkit-inner-spin-button,.vxe-cell .vxe-default-input[type=number]::-webkit-inner-spin-button,.vxe-table--filter-wrapper .vxe-default-input[type=date]::-webkit-inner-spin-button,.vxe-table--filter-wrapper .vxe-default-input[type=number]::-webkit-inner-spin-button{height: 1.5rem}.vxe-cell .vxe-default-input::-webkit-input-placeholder,.vxe-table--filter-wrapper .vxe-default-input::-webkit-input-placeholder{color:#c0c4cc}.vxe-cell .vxe-default-input::-moz-placeholder,.vxe-table--filter-wrapper .vxe-default-input::-moz-placeholder{color:#c0c4cc}.vxe-cell .vxe-default-input:-ms-input-placeholder,.vxe-table--filter-wrapper .vxe-default-input:-ms-input-placeholder{color:#c0c4cc}.vxe-cell .vxe-default-input::-ms-input-placeholder,.vxe-table--filter-wrapper .vxe-default-input::-ms-input-placeholder{color:#c0c4cc}.vxe-cell .vxe-default-input::placeholder,.vxe-table--filter-wrapper .vxe-default-input::placeholder{color:#c0c4cc}.vxe-cell .vxe-default-textarea,.vxe-table--filter-wrapper .vxe-default-textarea{resize:none;vertical-align:middle}.vxe-cell .vxe-input,.vxe-cell .vxe-select,.vxe-cell .vxe-textarea,.vxe-table--filter-wrapper .vxe-input,.vxe-table--filter-wrapper .vxe-select,.vxe-table--filter-wrapper .vxe-textarea{width:100%;display:block}.vxe-cell .vxe-input>.vxe-input--inner,.vxe-cell .vxe-textarea>.vxe-textarea--inner,.vxe-table--filter-wrapper .vxe-input>.vxe-input--inner,.vxe-table--filter-wrapper .vxe-textarea>.vxe-textarea--inner{padding:0 0.125rem}.vxe-cell .vxe-default-textarea,.vxe-cell .vxe-textarea--inner,.vxe-table--filter-wrapper .vxe-default-textarea,.vxe-table--filter-wrapper .vxe-textarea--inner{resize:none}.vxe-table--cell-active-area,.vxe-table--cell-copy-area,.vxe-table--cell-extend-area,.vxe-table--cell-main-area,.vxe-table--checkbox-range{display:none;position:absolute;pointer-events:none;z-index:1}.vxe-table--fixed-left-wrapper .vxe-table--cell-active-area,.vxe-table--fixed-left-wrapper .vxe-table--cell-copy-area,.vxe-table--fixed-left-wrapper .vxe-table--cell-extend-area,.vxe-table--fixed-left-wrapper .vxe-table--cell-main-area,.vxe-table--fixed-left-wrapper .vxe-table--checkbox-range,.vxe-table--fixed-right-wrapper .vxe-table--cell-active-area,.vxe-table--fixed-right-wrapper .vxe-table--cell-copy-area,.vxe-table--fixed-right-wrapper .vxe-table--cell-extend-area,.vxe-table--fixed-right-wrapper .vxe-table--cell-main-area,.vxe-table--fixed-right-wrapper .vxe-table--checkbox-range{z-index:2}.vxe-table--fixed-left-wrapper .vxe-table--cell-active-area[half="1"],.vxe-table--fixed-left-wrapper .vxe-table--cell-extend-area[half="1"],.vxe-table--fixed-left-wrapper .vxe-table--cell-main-area[half="1"]{border-right:0}.vxe-table--fixed-left-wrapper .vxe-table--cell-copy-area[half="1"]{background-size: 0.1875rem 0.75rem,0 0.75rem, 0.75rem 0.1875rem, 0.75rem 0.1875rem}.vxe-table--fixed-right-wrapper .vxe-table--cell-active-area[half="1"],.vxe-table--fixed-right-wrapper .vxe-table--cell-extend-area[half="1"],.vxe-table--fixed-right-wrapper .vxe-table--cell-main-area[half="1"]{border-left:0}.vxe-table--fixed-right-wrapper .vxe-table--cell-copy-area[half="1"]{background-size:0 0.75rem, 0.1875rem 0.75rem, 0.75rem 0.1875rem, 0.75rem 0.1875rem}.vxe-table--checkbox-range{background-color:rgba(50,128,252,.2);border: 0.0625rem solid #006af1}.vxe-table--cell-area{height:0;font-size:0;display:none}.vxe-table--cell-area>.vxe-table--cell-main-area{background-color:rgba(64,158,255,.2);border: 0.0625rem solid #409eff}.vxe-table--cell-area .vxe-table--cell-main-area-btn{display:none;position:absolute;right: -0.0625rem;bottom: -0.0625rem;width: 0.4375rem;height: 0.4375rem;border-style:solid;border-color:#fff;border-width: 0.0625rem 0 0 0.0625rem;background-color:#409eff;pointer-events:auto;cursor:crosshair}.vxe-table--cell-area .vxe-table--cell-extend-area{border: 0.125rem solid #409eff}@-webkit-keyframes moveCopyCellBorder{to{background-position:0 -0.75rem,100% 0.75rem, 0.75rem 0, -0.75rem 100%}}@keyframes moveCopyCellBorder{to{background-position:0 -0.75rem,100% 0.75rem, 0.75rem 0, -0.75rem 100%}}.vxe-table--cell-copy-area{background:linear-gradient(0deg,transparent 0.375rem,#409eff 0) repeat-y,linear-gradient(0deg,transparent 50%,#409eff 0) repeat-y,linear-gradient(90deg,transparent 50%,#409eff 0) repeat-x,linear-gradient(90deg,transparent 50%,#409eff 0) repeat-x;background-size: 0.1875rem 0.75rem, 0.1875rem 0.75rem, 0.75rem 0.1875rem, 0.75rem 0.1875rem;background-position:0 0,100% 0,0 0,0 100%;-webkit-animation:moveCopyCellBorder .5s linear infinite;animation:moveCopyCellBorder .5s linear infinite}.vxe-table--cell-active-area{border: 0.125rem solid #409eff}.vxe-table--cell-multi-area>.vxe-table--cell-main-area{background-color:rgba(64,158,255,.2)}.vxe-table--render-default.is--round .vxe-table--border-line,.vxe-table--render-default.is--round .vxe-table--render-default.is--round,.vxe-table--render-default.is--round:not(.is--header):not(.is--footer) .vxe-table--body-wrapper.body--wrapper{border-radius: 0.25rem}.vxe-table--render-default.is--round.is--footer:not(.is--header) .vxe-table--body-wrapper.body--wrapper,.vxe-table--render-default.is--round.is--header .vxe-table--header-wrapper.body--wrapper{border-radius: 0.25rem 0.25rem 0 0}.vxe-table--render-default.is--round.is--header .vxe-table--header-wrapper.fixed-left--wrapper{border-radius: 0.25rem 0 0 0}.vxe-table--render-default.is--round.is--header .vxe-table--header-wrapper.fixed-right--wrapper{border-radius:0 0.25rem 0 0}.vxe-table--render-default.is--round.is--footer .vxe-table--footer-wrapper.body--wrapper,.vxe-table--render-default.is--round.is--header:not(.is--footer) .vxe-table--body-wrapper.body--wrapper{border-radius:0 0 0.25rem 0.25rem}.vxe-table--render-default.is--round.is--footer .vxe-table--footer-wrapper.fixed-left--wrapper,.vxe-table--render-default.is--round.is--footer:not(.is--header) .vxe-table--body-wrapper.fixed-left--wrapper,.vxe-table--render-default.is--round.is--header:not(.is--footer) .vxe-table--body-wrapper.fixed-left--wrapper{border-radius:0 0 0 0.25rem}.vxe-table--render-default.is--round.is--footer .vxe-table--footer-wrapper.fixed-right--wrapper,.vxe-table--render-default.is--round.is--footer:not(.is--header) .vxe-table--body-wrapper.fixed-right--wrapper,.vxe-table--render-default.is--round.is--header:not(.is--footer) .vxe-table--body-wrapper.fixed-right--wrapper{border-radius:0 0 0.25rem 0}.vxe-table .vxe-table--header-wrapper{color:#606266}.vxe-table .vxe-table--header-wrapper .vxe-table--header-border-line{position:absolute;left:0;bottom:0;height:0;border-bottom: 0.0625rem solid #e8eaec}.vxe-table .vxe-cell--sort{width:1.5em;height:1.35em;vertical-align:middle;text-align:center;display:inline-block;position:relative}.vxe-table .vxe-sort--asc-btn,.vxe-table .vxe-sort--desc-btn{position:absolute;left:.2em;color:#c0c4cc;width:1em;text-align:center;height:.8em;line-height:.8em;cursor:pointer}.vxe-table .vxe-sort--asc-btn:hover,.vxe-table .vxe-sort--desc-btn:hover{color:#606266}.vxe-table .vxe-sort--asc-btn.sort--active,.vxe-table .vxe-sort--desc-btn.sort--active{color:#409eff}.vxe-table .vxe-sort--asc-btn{top:-.1em}.vxe-table .vxe-sort--desc-btn{bottom:-.2em}.vxe-header--column{position:relative;font-weight:700}.vxe-header--column.col--ellipsis>.vxe-cell{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.vxe-header--column.col--ellipsis>.vxe-cell .vxe-cell--title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vxe-header--column.col--ellipsis>.vxe-cell>i:not(.vxe-cell--title),.vxe-header--column.col--ellipsis>.vxe-cell>span:not(.vxe-cell--title){-ms-flex-negative:0;flex-shrink:0}.vxe-header--column .vxe-cell--required-icon{display:inline-block;color:#f56c6c;width:.8em;height:1em;line-height:1em;font-family:Verdana,Arial,Tahoma;font-weight:400;position:relative}.vxe-header--column .vxe-cell--required-icon:before{content:"*";position:absolute;left:0;top:.2em}.vxe-header--column .vxe-cell--required-icon{margin-right:.1em}.vxe-header--column .vxe-cell--edit-icon,.vxe-header--column .vxe-cell-help-icon{margin-right:.2em}.vxe-header--column .vxe-cell-help-icon{cursor:help}.vxe-header--column .vxe-resizable{position:absolute;right: -0.4375rem;bottom:0;width: 0.875rem;height:100%;text-align:center;z-index:1;cursor:col-resize}.vxe-header--column .vxe-resizable.is--line:after,.vxe-header--column .vxe-resizable.is--line:before{content:"";display:inline-block;vertical-align:middle}.vxe-header--column .vxe-resizable.is--line:before{width: 0.0625rem;height:50%;background-color:#d9dddf}.vxe-header--column .vxe-resizable.is--line:after{width:0;height:100%}.vxe-table--fixed-right-wrapper .vxe-header--column .vxe-resizable{right:auto;left: -0.4375rem}.vxe-table--render-default{position:relative;font-size: 0.875rem;color:#606266;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Helvetica Neue,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;direction:ltr}.vxe-table--render-default .vxe-table--body-wrapper,.vxe-table--render-default .vxe-table--footer-wrapper{background-color:#fff}.vxe-table--render-default .vxe-table--body,.vxe-table--render-default .vxe-table--footer,.vxe-table--render-default .vxe-table--header{border:0;border-spacing:0;border-collapse:separate;table-layout:fixed}.vxe-table--render-default .vxe-table--footer-wrapper,.vxe-table--render-default .vxe-table--header-wrapper{overflow-x:hidden;overflow-y:hidden}.vxe-table--render-default:not(.is--empty).is--footer.is--scroll-x .vxe-table--body-wrapper{overflow-x:scroll}.vxe-table--render-default .vxe-body--row.row--stripe{background-color:#fafafa}.vxe-table--render-default .vxe-body--row.row--checked,.vxe-table--render-default .vxe-body--row.row--radio{background-color:#fff3e0}.vxe-table--render-default .vxe-body--row.row--current{background-color:#e6f7ff}.vxe-table--render-default .vxe-body--row.row--hover,.vxe-table--render-default .vxe-body--row.row--hover.row--stripe{background-color:#f5f7fa}.vxe-table--render-default .vxe-body--row.row--hover.row--checked,.vxe-table--render-default .vxe-body--row.row--hover.row--radio{background-color:#ffebbc}.vxe-table--render-default .vxe-body--row.row--hover.row--current{background-color:#d7effb}.vxe-table--render-default.drag--resize .vxe-table--fixed-left-wrapper *,.vxe-table--render-default.drag--resize .vxe-table--fixed-right-wrapper *,.vxe-table--render-default.drag--resize .vxe-table--main-wrapper *{cursor:col-resize}.vxe-table--render-default.drag--area .vxe-table--fixed-left-wrapper *,.vxe-table--render-default.drag--area .vxe-table--fixed-right-wrapper *,.vxe-table--render-default.drag--area .vxe-table--main-wrapper *,.vxe-table--render-default.drag--range .vxe-table--fixed-left-wrapper *,.vxe-table--render-default.drag--range .vxe-table--fixed-right-wrapper *,.vxe-table--render-default.drag--range .vxe-table--main-wrapper *{cursor:default}.vxe-table--render-default.drag--extend-range .vxe-table--fixed-left-wrapper *,.vxe-table--render-default.drag--extend-range .vxe-table--fixed-right-wrapper *,.vxe-table--render-default.drag--extend-range .vxe-table--main-wrapper *{cursor:crosshair}.vxe-table--render-default.column--highlight .vxe-header--column:not(.col--seq):hover{background-color:#d7effb}.vxe-table--render-default.cell--area .vxe-table--main-wrapper{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.vxe-table--render-default .vxe-body--column,.vxe-table--render-default .vxe-footer--column,.vxe-table--render-default .vxe-header--column{position:relative;line-height: 1.375rem;text-align:left}.vxe-table--render-default .vxe-body--column:not(.col--ellipsis),.vxe-table--render-default .vxe-footer--column:not(.col--ellipsis),.vxe-table--render-default .vxe-header--column:not(.col--ellipsis){padding: 0.8125rem 0}.vxe-table--render-default .vxe-body--column.col--current,.vxe-table--render-default .vxe-footer--column.col--current,.vxe-table--render-default .vxe-header--column.col--current{background-color:#e6f7ff}.vxe-table--render-default .vxe-body--column.col--center,.vxe-table--render-default .vxe-footer--column.col--center,.vxe-table--render-default .vxe-header--column.col--center{text-align:center}.vxe-table--render-default .vxe-body--column.col--right,.vxe-table--render-default .vxe-footer--column.col--right,.vxe-table--render-default .vxe-header--column.col--right{text-align:right}.vxe-table--render-default .vxe-footer--column.col--ellipsis.col--center .vxe-cell,.vxe-table--render-default .vxe-header--column.col--ellipsis.col--center .vxe-cell{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.vxe-table--render-default .vxe-footer--column.col--ellipsis.col--right .vxe-cell,.vxe-table--render-default .vxe-header--column.col--ellipsis.col--right .vxe-cell{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.vxe-table--render-default .vxe-body--column.col--checkbox{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.vxe-table--render-default .vxe-table--footer-wrapper{border-top: 0.0625rem solid #e8eaec}.vxe-table--render-default.border--default .vxe-table--header-wrapper,.vxe-table--render-default.border--full .vxe-table--header-wrapper,.vxe-table--render-default.border--outer .vxe-table--header-wrapper{background-color:#f8f8f9}.vxe-table--render-default.border--default .vxe-body--column,.vxe-table--render-default.border--default .vxe-footer--column,.vxe-table--render-default.border--default .vxe-header--column,.vxe-table--render-default.border--inner .vxe-body--column,.vxe-table--render-default.border--inner .vxe-footer--column,.vxe-table--render-default.border--inner .vxe-header--column{background-image:-webkit-gradient(linear,left top,left bottom,from(#e8eaec),to(#e8eaec));background-image:linear-gradient(#e8eaec,#e8eaec);background-repeat:no-repeat;background-size:100% 0.0625rem;background-position:100% 100%}.vxe-table--render-default.border--full .vxe-body--column,.vxe-table--render-default.border--full .vxe-footer--column,.vxe-table--render-default.border--full .vxe-header--column{background-image:-webkit-gradient(linear,left top,left bottom,from(#e8eaec),to(#e8eaec)),-webkit-gradient(linear,left top,left bottom,from(#e8eaec),to(#e8eaec));background-image:linear-gradient(#e8eaec,#e8eaec),linear-gradient(#e8eaec,#e8eaec);background-repeat:no-repeat;background-size: 0.0625rem 100%,100% 0.0625rem;background-position:100% 0,100% 100%}.vxe-table--render-default.border--full .vxe-table--fixed-left-wrapper .vxe-body--column{border-right-color:#e8eaec}.vxe-table--render-default.border--default .vxe-table--header-wrapper .vxe-header--row:last-child .vxe-header--gutter,.vxe-table--render-default.border--full .vxe-table--header-wrapper .vxe-header--row:last-child .vxe-header--gutter,.vxe-table--render-default.border--inner .vxe-table--header-wrapper .vxe-header--row:last-child .vxe-header--gutter,.vxe-table--render-default.border--outer .vxe-table--header-wrapper .vxe-header--row:last-child .vxe-header--gutter{background-image:-webkit-gradient(linear,left top,left bottom,from(#e8eaec),to(#e8eaec));background-image:linear-gradient(#e8eaec,#e8eaec);background-repeat:no-repeat;background-size:100% 0.0625rem;background-position:100% 100%}.vxe-table--render-default.border--inner .vxe-table--header-wrapper,.vxe-table--render-default.border--none .vxe-table--header-wrapper{background-color:#fff}.vxe-table--render-default.border--inner .vxe-table--fixed-left-wrapper,.vxe-table--render-default.border--none .vxe-table--fixed-left-wrapper{border-right:0}.vxe-table--render-default.border--inner .vxe-table--border-line{border-width:0 0 0.0625rem 0}.vxe-table--render-default.border--none .vxe-table--border-line,.vxe-table--render-default.border--none .vxe-table--header-border-line{display:none}.vxe-table--render-default.size--medium{font-size: 0.875rem}.vxe-table--render-default.size--medium .vxe-table--empty-block,.vxe-table--render-default.size--medium .vxe-table--empty-placeholder{min-height: 2.75rem}.vxe-table--render-default.size--medium .vxe-body--column:not(.col--ellipsis),.vxe-table--render-default.size--medium .vxe-footer--column:not(.col--ellipsis),.vxe-table--render-default.size--medium .vxe-header--column:not(.col--ellipsis){padding: 0.6875rem 0}.vxe-table--render-default.size--medium .vxe-cell .vxe-default-input,.vxe-table--render-default.size--medium .vxe-cell .vxe-default-select,.vxe-table--render-default.size--medium .vxe-cell .vxe-default-textarea{height: 2rem}.vxe-table--render-default.size--medium .vxe-cell .vxe-default-input[type=date]::-webkit-inner-spin-button{margin-top: 0.1875rem}.vxe-table--render-default.size--small{font-size: 0.8125rem}.vxe-table--render-default.size--small .vxe-table--empty-block,.vxe-table--render-default.size--small .vxe-table--empty-placeholder{min-height: 2.5rem}.vxe-table--render-default.size--small .vxe-body--column:not(.col--ellipsis),.vxe-table--render-default.size--small .vxe-footer--column:not(.col--ellipsis),.vxe-table--render-default.size--small .vxe-header--column:not(.col--ellipsis){padding: 0.5625rem 0}.vxe-table--render-default.size--small .vxe-cell .vxe-default-input,.vxe-table--render-default.size--small .vxe-cell .vxe-default-select,.vxe-table--render-default.size--small .vxe-cell .vxe-default-textarea{height: 1.875rem}.vxe-table--render-default.size--small .vxe-cell .vxe-default-input[type=date]::-webkit-inner-spin-button{margin-top: 0.125rem}.vxe-table--render-default.size--mini{font-size: 0.75rem}.vxe-table--render-default.size--mini .vxe-table--empty-block,.vxe-table--render-default.size--mini .vxe-table--empty-placeholder{min-height: 2.25rem}.vxe-table--render-default.size--mini .vxe-body--column:not(.col--ellipsis),.vxe-table--render-default.size--mini .vxe-footer--column:not(.col--ellipsis),.vxe-table--render-default.size--mini .vxe-header--column:not(.col--ellipsis){padding: 0.4375rem 0}.vxe-table--render-default.size--mini .vxe-cell .vxe-default-input,.vxe-table--render-default.size--mini .vxe-cell .vxe-default-select,.vxe-table--render-default.size--mini .vxe-cell .vxe-default-textarea{height: 1.75rem}.vxe-table--render-default.size--mini .vxe-cell .vxe-default-input[type=date]::-webkit-inner-spin-button{margin-top: 0.0625rem}.vxe-table--render-default .vxe-cell{white-space:pre-line;word-break:break-all;padding-left: 0.625rem;padding-right: 0.625rem}.vxe-table--render-default .vxe-cell--placeholder{color:#c0c4cc}.vxe-table--render-default .fixed--hidden{visibility:hidden}.vxe-table--render-default .vxe-table--fixed-left-wrapper,.vxe-table--render-default .vxe-table--fixed-right-wrapper{width:100%;position:absolute;top:0;z-index:5;overflow:hidden;background-color:inherit;-webkit-transition:box-shadow .3s;transition:box-shadow .3s}.vxe-table--render-default .vxe-table--fixed-left-wrapper .vxe-table--body-wrapper,.vxe-table--render-default .vxe-table--fixed-right-wrapper .vxe-table--body-wrapper{overflow-x:hidden}.vxe-table--render-default .vxe-table--fixed-left-wrapper .vxe-table--body-wrapper{width:calc(100% + 2.5rem)}.vxe-table--render-default.is--header .vxe-table--fixed-left-wrapper .vxe-table--body-wrapper:before,.vxe-table--render-default.is--header .vxe-table--fixed-right-wrapper .vxe-table--body-wrapper:before{display:none}.vxe-table--render-default .vxe-table--fixed-left-wrapper{left:0;width: 12.5rem}.vxe-table--render-default .vxe-table--fixed-left-wrapper.scrolling--middle{-webkit-box-shadow: 0.25rem 0.1875rem 0.25rem 0 rgba(0,0,0,.12);box-shadow: 0.25rem 0.1875rem 0.25rem 0 rgba(0,0,0,.12)}.vxe-table--render-default .vxe-table--fixed-right-wrapper{right:0}.vxe-table--render-default .vxe-table--fixed-right-wrapper.scrolling--middle{-webkit-box-shadow: -0.25rem 0.1875rem 0.25rem 0 rgba(0,0,0,.12);box-shadow: -0.25rem 0.1875rem 0.25rem 0 rgba(0,0,0,.12)}.vxe-table--render-default .vxe-table--body-wrapper,.vxe-table--render-default .vxe-table--footer-wrapper,.vxe-table--render-default .vxe-table--header-wrapper{position:relative}.vxe-table--render-default .vxe-table--body-wrapper.fixed-left--wrapper,.vxe-table--render-default .vxe-table--body-wrapper.fixed-right--wrapper,.vxe-table--render-default .vxe-table--footer-wrapper.fixed-left--wrapper,.vxe-table--render-default .vxe-table--footer-wrapper.fixed-right--wrapper,.vxe-table--render-default .vxe-table--header-wrapper.fixed-left--wrapper,.vxe-table--render-default .vxe-table--header-wrapper.fixed-right--wrapper{position:absolute;top:0}.vxe-table--render-default .vxe-table--body-wrapper.fixed-left--wrapper,.vxe-table--render-default .vxe-table--footer-wrapper.fixed-left--wrapper,.vxe-table--render-default .vxe-table--header-wrapper.fixed-left--wrapper{left:0}.vxe-table--render-default .vxe-table--body-wrapper.fixed-right--wrapper,.vxe-table--render-default .vxe-table--footer-wrapper.fixed-right--wrapper,.vxe-table--render-default .vxe-table--header-wrapper.fixed-right--wrapper{right:0;overflow-y:auto}.vxe-table--render-default .vxe-body--x-space{width:100%;height: 0.0625rem;margin-bottom: -0.0625rem}.vxe-table--render-default .vxe-body--y-space{width:0;float:left}.vxe-table--render-default .vxe-table--resizable-bar{display:none;position:absolute;top:0;left:0;width: 0.0625rem;height:100%;z-index:9;cursor:col-resize}.vxe-table--render-default .vxe-table--resizable-bar:before{content:"";display:block;height:100%;background-color:#409eff}.vxe-table--render-default .vxe-table--border-line{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10;pointer-events:none;border: 0.0625rem solid #e8eaec}.vxe-table--render-default.is--tree-line .vxe-body--row:first-child .vxe-tree--line{border-width:0 0 0.0625rem 0}.vxe-table--render-default.is--tree-line .vxe-body--row .vxe-body--column{background-image:none}.vxe-table--render-default .vxe-tree--line-wrapper{position:relative;display:block;height:0}.vxe-table--render-default .vxe-tree--line{content:"";position:absolute;bottom:-.9em;width:.8em;border-width:0 0 0.0625rem 0.0625rem;border-style:dotted;border-color:#909399;pointer-events:none}.vxe-table--render-default .vxe-cell--tree-node{position:relative}.vxe-table--render-default .vxe-tree--btn-wrapper{position:absolute;top:50%;width:1em;height:1em;text-align:center;-webkit-transform:translateY(-50%);transform:translateY(-50%);z-index:1;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer}.vxe-table--render-default .vxe-tree--node-btn{display:block;color:#939599}.vxe-table--render-default .vxe-tree--node-btn:hover{color:#606266}.vxe-table--render-default .vxe-tree-cell{display:block;padding-left:1.5em}.vxe-table--render-default .vxe-body--column.col--ellipsis>.vxe-cell .vxe-tree-cell{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vxe-table--render-default .vxe-table--expanded{cursor:pointer}.vxe-table--render-default .vxe-table--expanded .vxe-table--expand-btn{display:inline-block;width:1em;height:1em;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;color:#939599}.vxe-table--render-default .vxe-table--expanded .vxe-table--expand-btn:hover{color:#606266}.vxe-table--render-default .vxe-table--expanded+.vxe-table--expand-label{padding-left:.5em}.vxe-table--render-default .vxe-body--expanded-column{border-bottom: 0.0625rem solid #e8eaec}.vxe-table--render-default .vxe-body--expanded-column.col--ellipsis>.vxe-body--expanded-cell{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vxe-table--render-default .vxe-body--expanded-cell{position:relative;z-index:1}.vxe-table--render-default .vxe-body--expanded-cell.is--ellipsis{overflow:auto}.vxe-table--render-default .vxe-body--column.col--ellipsis>.vxe-cell,.vxe-table--render-default .vxe-footer--column.col--ellipsis>.vxe-cell,.vxe-table--render-default .vxe-header--column.col--ellipsis>.vxe-cell{max-height: 3rem}.vxe-table--render-default.size--medium .vxe-body--column.col--ellipsis>.vxe-cell,.vxe-table--render-default.size--medium .vxe-footer--column.col--ellipsis>.vxe-cell,.vxe-table--render-default.size--medium .vxe-header--column.col--ellipsis>.vxe-cell{max-height: 2.75rem}.vxe-table--render-default.size--medium .vxe-cell--checkbox,.vxe-table--render-default.size--medium .vxe-cell--radio{font-size: 0.875rem}.vxe-table--render-default.size--small .vxe-body--column.col--ellipsis>.vxe-cell,.vxe-table--render-default.size--small .vxe-footer--column.col--ellipsis>.vxe-cell,.vxe-table--render-default.size--small .vxe-header--column.col--ellipsis>.vxe-cell{max-height: 2.5rem}.vxe-table--render-default.size--small .vxe-cell--checkbox,.vxe-table--render-default.size--small .vxe-cell--radio{font-size: 0.8125rem}.vxe-table--render-default.size--mini .vxe-body--column.col--ellipsis>.vxe-cell,.vxe-table--render-default.size--mini .vxe-footer--column.col--ellipsis>.vxe-cell,.vxe-table--render-default.size--mini .vxe-header--column.col--ellipsis>.vxe-cell{max-height: 2.25rem}.vxe-table--render-default.size--mini .vxe-cell--checkbox,.vxe-table--render-default.size--mini .vxe-cell--radio{font-size: 0.75rem}.vxe-table--render-default .vxe-table--empty-block,.vxe-table--render-default .vxe-table--empty-placeholder{min-height: 3rem;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;text-align:center;overflow:hidden;width:100%;pointer-events:none}.vxe-table--render-default .vxe-table--empty-block{display:none;visibility:hidden}.vxe-table--render-default .vxe-table--empty-placeholder{display:none;position:absolute;top:0;z-index:5}.vxe-table--render-default .vxe-table--empty-content{display:block;width:50%;pointer-events:auto}.vxe-table--render-default.is--empty .vxe-table--empty-block,.vxe-table--render-default.is--empty .vxe-table--empty-placeholder{display:-webkit-box;display:-ms-flexbox;display:flex}.vxe-table--render-default .vxe-body--column.col--selected{-webkit-box-shadow:inset 0 0 0 0.125rem #409eff;box-shadow:inset 0 0 0 0.125rem #409eff}.vxe-table--render-default .vxe-body--column.col--actived,.vxe-table--render-default .vxe-body--column.col--selected{position:relative}.vxe-table--render-default .vxe-body--column.col--valid-error .vxe-cell--valid{width: 20rem;position:absolute;bottom:calc(100% + 0.25rem);left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);text-align:center;pointer-events:none;z-index:4}.vxe-table--render-default .vxe-body--column.col--valid-error .vxe-cell--valid .vxe-cell--valid-msg{display:inline-block;border-radius: 0.25rem;padding: 0.5rem 0.75rem;color:#fff;background-color:#f56c6c;pointer-events:auto}.vxe-table--render-default .vxe-body--column.col--valid-error .vxe-default-input,.vxe-table--render-default .vxe-body--column.col--valid-error .vxe-default-select,.vxe-table--render-default .vxe-body--column.col--valid-error .vxe-default-textarea,.vxe-table--render-default .vxe-body--column.col--valid-error .vxe-input>.vxe-input--inner{border-color:#f56c6c}.vxe-table--render-default .vxe-body--row:first-child .vxe-cell--valid{bottom:auto;top:calc(100% + 0.25rem)}.vxe-table--render-default .vxe-body--column:first-child .vxe-cell--valid{left: 0.625rem;-webkit-transform:translateX(0);transform:translateX(0);text-align:left}.vxe-table--render-default .vxe-body--row.row--new>.vxe-body--column{position:relative}.vxe-table--render-default .vxe-body--row.row--new>.vxe-body--column:before{content:"";top: -0.3125rem;left: -0.3125rem;position:absolute;border-width: 0.3125rem;border-style:solid;border-color:transparent #19a15f transparent transparent;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.vxe-table--render-default .vxe-body--column.col--dirty{position:relative}.vxe-table--render-default .vxe-body--column.col--dirty:before{content:"";top: -0.3125rem;left: -0.3125rem;position:absolute;border-width: 0.3125rem;border-style:solid;border-color:transparent #f56c6c transparent transparent;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.vxe-table--render-default.vxe-editable.cell--highlight .vxe-body--column.col--actived{-webkit-box-shadow:inset 0 0 0 0.125rem #409eff;box-shadow:inset 0 0 0 0.125rem #409eff}.vxe-table--render-default.vxe-editable.cell--highlight .vxe-body--column.col--actived.col--valid-error{-webkit-box-shadow:inset 0 0 0 0.125rem #f56c6c;box-shadow:inset 0 0 0 0.125rem #f56c6c}.vxe-table--render-default.vxe-editable.cell--highlight .vxe-body--column.col--actived .vxe-cell .vxe-default-input,.vxe-table--render-default.vxe-editable.cell--highlight .vxe-body--column.col--actived .vxe-cell .vxe-default-textarea{border:0;padding:0}.vxe-table--render-default.vxe-editable.cell--highlight .vxe-body--column.col--actived .vxe-cell .vxe-default-input{height: 1.375rem}.vxe-table--render-default.vxe-editable.cell--highlight .vxe-body--column.col--actived .vxe-cell .vxe-input .vxe-input--inner{border:0;padding-left:0}.vxe-table--render-default.vxe-editable.cell--highlight .vxe-body--column.col--actived .vxe-cell .vxe-textarea{height: 1.3125rem}.vxe-table--render-default.vxe-editable.cell--highlight .vxe-body--column.col--actived .vxe-cell .vxe-textarea .vxe-textarea--inner{border:0}.vxe-table--render-default.vxe-editable .vxe-body--column,.vxe-table--render-default.vxe-editable .vxe-body--column.col--actived{padding:0}.vxe-table--footer-wrapper{color:#606266;margin-top: -0.0625rem}.vxe-table--footer-wrapper.body--wrapper{overflow-x:auto}.vxe-footer--column.col--ellipsis>.vxe-cell{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.vxe-footer--column.col--ellipsis>.vxe-cell .vxe-cell--item{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vxe-grid{position:relative}.vxe-grid.is--loading:before{content:"";position:absolute;top:0;left:0;width:100%;height:100%;z-index:99;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:hsla(0,0%,100%,.5)}.vxe-grid.is--loading>.vxe-table .vxe-loading{background-color:transparent}.vxe-grid.is--maximize{position:fixed;top:0;left:0;width:100%;height:100%;padding:.5em 1em;background-color:#fff}.vxe-grid .vxe-body--row.row--pending{color:#f56c6c;text-decoration:line-through;cursor:no-drop}.vxe-grid .vxe-body--row.row--pending .vxe-body--column{position:relative}.vxe-grid .vxe-body--row.row--pending .vxe-body--column:after{content:"";position:absolute;top:50%;left:0;width:100%;height:0;border-bottom: 0.0625rem solid #f56c6c;z-index:1}.vxe-grid .vxe-grid--bottom-wrapper,.vxe-grid .vxe-grid--form-wrapper,.vxe-grid .vxe-grid--top-wrapper{position:relative}.vxe-grid,.vxe-grid.size--medium{font-size: 0.875rem}.vxe-grid.size--small{font-size: 0.8125rem}.vxe-grid.size--mini{font-size: 0.75rem}.vxe-toolbar{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:.6em 0;color:#606266;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Helvetica Neue,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;background-color:#fff}.vxe-toolbar:after{content:"";display:block;clear:both;height:0;overflow:hidden;visibility:hidden}.vxe-toolbar.is--perfect{border: 0.0625rem solid #e8eaec;border-bottom-width:0;background-color:#f8f8f9}.vxe-toolbar.is--loading:before{content:"";position:absolute;top:0;left:0;width:100%;height:100%;z-index:999;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:hsla(0,0%,100%,.5)}.vxe-toolbar .vxe-buttons--wrapper{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.vxe-toolbar .vxe-buttons--wrapper>.vxe-button+.vxe-button--item,.vxe-toolbar .vxe-buttons--wrapper>.vxe-button--item+.vxe-button,.vxe-toolbar .vxe-buttons--wrapper>.vxe-button--item+.vxe-button--item{margin-left:.8em}.vxe-toolbar .vxe-buttons--wrapper>.vxe-button--item{display:inline-block}.vxe-toolbar .vxe-tools--wrapper>.vxe-button+.vxe-tool--item,.vxe-toolbar .vxe-tools--wrapper>.vxe-tool--item+.vxe-button,.vxe-toolbar .vxe-tools--wrapper>.vxe-tool--item+.vxe-tool--item{margin-left:.8em}.vxe-toolbar .vxe-tools--wrapper>.vxe-tool--item{display:inline-block}.vxe-toolbar .vxe-tools--wrapper>.vxe-button{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.vxe-toolbar .vxe-buttons--wrapper,.vxe-toolbar .vxe-tools--operate,.vxe-toolbar .vxe-tools--wrapper,.vxe-toolbar .vxe-tools--wrapper>.vxe-button{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.vxe-toolbar .vxe-buttons--wrapper,.vxe-toolbar .vxe-tools--wrapper{-ms-flex-wrap:wrap;flex-wrap:wrap}.vxe-toolbar .vxe-tools--operate{-ms-flex-negative:0;flex-shrink:0}.vxe-toolbar .vxe-custom--wrapper{position:relative;margin-left:.8em}.vxe-toolbar .vxe-custom--wrapper.is--active>.vxe-button{background-color:#d9dadb;border-radius:50%}.vxe-toolbar .vxe-custom--wrapper.is--active .vxe-custom--option-wrapper{display:block}.vxe-toolbar .vxe-custom--option-wrapper{display:none;position:absolute;right: 0.125rem;text-align:left;background-color:#fff;z-index:19;border: 0.0625rem solid #e8eaec;border-radius: 0.25rem;-webkit-box-shadow:0 0.0625rem 0.375rem rgba(0,0,0,.2);box-shadow:0 0.0625rem 0.375rem rgba(0,0,0,.2)}.vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--header{padding:.28em 0;font-weight:700;border-bottom: 0.0625rem solid #dadce0}.vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--body{padding:.2em 0;max-height:17.6em}.vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--body .vxe-custom--option:hover{background-color:#f5f7fa}.vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--body>li,.vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--header>li{max-width:16em;min-width:12.5em;padding:.2em 1em .2em 1em}.vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--body>li.level--2,.vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--header>li.level--2{padding-left:3.5em}.vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--body>li.level--2 .vxe-checkbox--icon,.vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--header>li.level--2 .vxe-checkbox--icon{left:1.8em}.vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--body>li.level--3,.vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--header>li.level--3{padding-left:4.5em}.vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--body>li.level--3 .vxe-checkbox--icon,.vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--header>li.level--3 .vxe-checkbox--icon{left:2.8em}.vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--body>li.level--4,.vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--header>li.level--4{padding-left:5.5em}.vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--body>li.level--4 .vxe-checkbox--icon,.vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--header>li.level--4 .vxe-checkbox--icon{left:3.8em}.vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--body>li.level--5,.vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--header>li.level--5{padding-left:6.5em}.vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--body>li.level--5 .vxe-checkbox--icon,.vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--header>li.level--5 .vxe-checkbox--icon{left:4.8em}.vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--body>li.level--6,.vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--header>li.level--6{padding-left:7.5em}.vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--body>li.level--6 .vxe-checkbox--icon,.vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--header>li.level--6 .vxe-checkbox--icon{left:5.8em}.vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--body>li.level--7,.vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--header>li.level--7{padding-left:8.5em}.vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--body>li.level--7 .vxe-checkbox--icon,.vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--header>li.level--7 .vxe-checkbox--icon{left:6.8em}.vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--body>li.level--8,.vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--header>li.level--8{padding-left:9.5em}.vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--body>li.level--8 .vxe-checkbox--icon,.vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--header>li.level--8 .vxe-checkbox--icon{left:7.8em}.vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--footer{border-top: 0.0625rem solid #dadce0;text-align:right}.vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--footer button{background-color:transparent;width:50%;height:2.5em;border:0;color:#606266;text-align:center;cursor:pointer}.vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--footer button:focus{outline:none}.vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--footer button:hover{color:#409eff}.vxe-custom--option-wrapper .vxe-custom--body,.vxe-custom--option-wrapper .vxe-custom--header{list-style-type:none;overflow-x:hidden;overflow-y:auto;margin:0;padding:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.vxe-custom--option-wrapper .vxe-custom--body>li,.vxe-custom--option-wrapper .vxe-custom--header>li{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vxe-toolbar,.vxe-toolbar.size--medium{font-size: 0.875rem}.vxe-toolbar.size--small{font-size: 0.8125rem}.vxe-toolbar.size--mini{font-size: 0.75rem}.vxe-pager{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#606266;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Helvetica Neue,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;text-align:right;background-color:#fff}.vxe-pager.is--hidden{display:none}.vxe-pager.align--left{text-align:left}.vxe-pager.align--center{text-align:center}.vxe-pager.is--loading:after{content:"";position:absolute;top:0;left:0;width:100%;height:100%;z-index:999;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:hsla(0,0%,100%,.5)}.vxe-pager .vxe-pager--jump-next,.vxe-pager .vxe-pager--jump-prev,.vxe-pager .vxe-pager--next-btn,.vxe-pager .vxe-pager--num-btn,.vxe-pager .vxe-pager--prev-btn{color:inherit;outline:0;padding:0;border: 0.0625rem solid transparent}.vxe-pager .vxe-pager--jump-next:not(.is--disabled):focus,.vxe-pager .vxe-pager--jump-prev:not(.is--disabled):focus,.vxe-pager .vxe-pager--next-btn:not(.is--disabled):focus,.vxe-pager .vxe-pager--num-btn:not(.is--disabled):focus,.vxe-pager .vxe-pager--prev-btn:not(.is--disabled):focus{-webkit-box-shadow:0 0 .25em 0 #409eff;box-shadow:0 0 .25em 0 #409eff}.vxe-pager .vxe-pager--jump-next:not(.is--disabled):active,.vxe-pager .vxe-pager--jump-prev:not(.is--disabled):active,.vxe-pager .vxe-pager--next-btn:not(.is--disabled):active,.vxe-pager .vxe-pager--num-btn:not(.is--disabled):active,.vxe-pager .vxe-pager--prev-btn:not(.is--disabled):active{background-color:#f7f7f7}.vxe-pager.is--border:not(.is--background) .vxe-pager--jump-next,.vxe-pager.is--border:not(.is--background) .vxe-pager--jump-prev,.vxe-pager.is--border:not(.is--background) .vxe-pager--next-btn,.vxe-pager.is--border:not(.is--background) .vxe-pager--num-btn,.vxe-pager.is--border:not(.is--background) .vxe-pager--prev-btn,.vxe-pager.is--perfect:not(.is--background) .vxe-pager--jump-next,.vxe-pager.is--perfect:not(.is--background) .vxe-pager--jump-prev,.vxe-pager.is--perfect:not(.is--background) .vxe-pager--next-btn,.vxe-pager.is--perfect:not(.is--background) .vxe-pager--num-btn,.vxe-pager.is--perfect:not(.is--background) .vxe-pager--prev-btn{border-color:#dcdfe6}.vxe-pager.is--background .vxe-pager--jump-next,.vxe-pager.is--background .vxe-pager--jump-prev,.vxe-pager.is--background .vxe-pager--next-btn,.vxe-pager.is--background .vxe-pager--num-btn,.vxe-pager.is--background .vxe-pager--prev-btn,.vxe-pager.is--perfect .vxe-pager--jump-next,.vxe-pager.is--perfect .vxe-pager--jump-prev,.vxe-pager.is--perfect .vxe-pager--next-btn,.vxe-pager.is--perfect .vxe-pager--num-btn,.vxe-pager.is--perfect .vxe-pager--prev-btn{background-color:#f4f4f5}.vxe-pager.is--background .vxe-pager--jump-next:not(.is--disabled).is--active,.vxe-pager.is--background .vxe-pager--jump-prev:not(.is--disabled).is--active,.vxe-pager.is--background .vxe-pager--num-btn:not(.is--disabled).is--active,.vxe-pager.is--perfect .vxe-pager--jump-next:not(.is--disabled).is--active,.vxe-pager.is--perfect .vxe-pager--jump-prev:not(.is--disabled).is--active,.vxe-pager.is--perfect .vxe-pager--num-btn:not(.is--disabled).is--active{color:#fff;background-color:#409eff}.vxe-pager.is--background .vxe-pager--jump-next:not(.is--disabled).is--active:hover,.vxe-pager.is--background .vxe-pager--jump-prev:not(.is--disabled).is--active:hover,.vxe-pager.is--background .vxe-pager--num-btn:not(.is--disabled).is--active:hover,.vxe-pager.is--perfect .vxe-pager--jump-next:not(.is--disabled).is--active:hover,.vxe-pager.is--perfect .vxe-pager--jump-prev:not(.is--disabled).is--active:hover,.vxe-pager.is--perfect .vxe-pager--num-btn:not(.is--disabled).is--active:hover{background-color:#5faeff}.vxe-pager.is--background .vxe-pager--jump-next:not(.is--disabled).is--active:focus,.vxe-pager.is--background .vxe-pager--jump-prev:not(.is--disabled).is--active:focus,.vxe-pager.is--background .vxe-pager--num-btn:not(.is--disabled).is--active:focus,.vxe-pager.is--perfect .vxe-pager--jump-next:not(.is--disabled).is--active:focus,.vxe-pager.is--perfect .vxe-pager--jump-prev:not(.is--disabled).is--active:focus,.vxe-pager.is--perfect .vxe-pager--num-btn:not(.is--disabled).is--active:focus{border-color:#409eff}.vxe-pager.is--background .vxe-pager--jump-next:not(.is--disabled).is--active:active,.vxe-pager.is--background .vxe-pager--jump-prev:not(.is--disabled).is--active:active,.vxe-pager.is--background .vxe-pager--num-btn:not(.is--disabled).is--active:active,.vxe-pager.is--perfect .vxe-pager--jump-next:not(.is--disabled).is--active:active,.vxe-pager.is--perfect .vxe-pager--jump-prev:not(.is--disabled).is--active:active,.vxe-pager.is--perfect .vxe-pager--num-btn:not(.is--disabled).is--active:active{border-color:#3196ff;background-color:#3196ff}.vxe-pager.is--perfect{border: 0.0625rem solid #e8eaec;border-top-width:0;background-color:#fff}.vxe-pager.is--border .vxe-pager--num-btn.is--active{border-color:#409eff}.vxe-pager .vxe-pager--wrapper{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.vxe-pager .vxe-pager--btn-icon,.vxe-pager .vxe-pager--jump-icon{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.vxe-pager .vxe-pager--count,.vxe-pager .vxe-pager--jump,.vxe-pager .vxe-pager--jump-next,.vxe-pager .vxe-pager--jump-prev,.vxe-pager .vxe-pager--left-wrapper,.vxe-pager .vxe-pager--next-btn,.vxe-pager .vxe-pager--prev-btn,.vxe-pager .vxe-pager--right-wrapper,.vxe-pager .vxe-pager--sizes,.vxe-pager .vxe-pager--total{margin:0 .4em;vertical-align:middle;display:inline-block}.vxe-pager .vxe-pager--jump-next,.vxe-pager .vxe-pager--jump-prev,.vxe-pager .vxe-pager--next-btn,.vxe-pager .vxe-pager--num-btn,.vxe-pager .vxe-pager--prev-btn{position:relative;cursor:pointer}.vxe-pager .vxe-pager--count,.vxe-pager .vxe-pager--jump-next,.vxe-pager .vxe-pager--jump-prev,.vxe-pager .vxe-pager--left-wrapper,.vxe-pager .vxe-pager--next-btn,.vxe-pager .vxe-pager--num-btn,.vxe-pager .vxe-pager--prev-btn,.vxe-pager .vxe-pager--right-wrapper{height:2.15em;line-height:2em;display:inline-block}.vxe-pager .vxe-pager--jump .vxe-pager--goto,.vxe-pager .vxe-pager--sizes>.vxe-input{height:2.15em;line-height:2.15em}.vxe-pager .vxe-pager--sizes>.vxe-select--panel .vxe-select-option{text-align:center}.vxe-pager .vxe-pager--count,.vxe-pager .vxe-pager--jump-next,.vxe-pager .vxe-pager--jump-prev,.vxe-pager .vxe-pager--next-btn,.vxe-pager .vxe-pager--num-btn,.vxe-pager .vxe-pager--prev-btn{min-width:2.15em}.vxe-pager .vxe-pager--btn-wrapper{padding:0;margin:0;display:inline-block;text-align:center}.vxe-pager .vxe-pager--btn-wrapper .vxe-pager--jump-next:hover .vxe-pager--jump-more-icon,.vxe-pager .vxe-pager--btn-wrapper .vxe-pager--jump-prev:hover .vxe-pager--jump-more-icon{display:none}.vxe-pager .vxe-pager--btn-wrapper .vxe-pager--jump-next:hover .vxe-pager--jump-icon,.vxe-pager .vxe-pager--btn-wrapper .vxe-pager--jump-prev:hover .vxe-pager--jump-icon{display:inline-block}.vxe-pager .vxe-pager--btn-wrapper .vxe-pager--jump-icon{display:none}.vxe-pager .vxe-pager--jump-next,.vxe-pager .vxe-pager--jump-prev,.vxe-pager .vxe-pager--next-btn,.vxe-pager .vxe-pager--num-btn,.vxe-pager .vxe-pager--prev-btn{text-align:center;border-radius: 0.25rem;margin:0 .25em;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#fff}.vxe-pager .vxe-pager--jump-next:not(.is--disabled):hover,.vxe-pager .vxe-pager--jump-prev:not(.is--disabled):hover,.vxe-pager .vxe-pager--next-btn:not(.is--disabled):hover,.vxe-pager .vxe-pager--num-btn:not(.is--disabled):hover,.vxe-pager .vxe-pager--prev-btn:not(.is--disabled):hover{color:#5faeff}.vxe-pager .vxe-pager--jump-next:not(.is--disabled).is--active,.vxe-pager .vxe-pager--jump-next:not(.is--disabled):focus,.vxe-pager .vxe-pager--jump-prev:not(.is--disabled).is--active,.vxe-pager .vxe-pager--jump-prev:not(.is--disabled):focus,.vxe-pager .vxe-pager--next-btn:not(.is--disabled).is--active,.vxe-pager .vxe-pager--next-btn:not(.is--disabled):focus,.vxe-pager .vxe-pager--num-btn:not(.is--disabled).is--active,.vxe-pager .vxe-pager--num-btn:not(.is--disabled):focus,.vxe-pager .vxe-pager--prev-btn:not(.is--disabled).is--active,.vxe-pager .vxe-pager--prev-btn:not(.is--disabled):focus{color:#409eff}.vxe-pager .vxe-pager--jump-next:not(.is--disabled):active,.vxe-pager .vxe-pager--jump-prev:not(.is--disabled):active,.vxe-pager .vxe-pager--next-btn:not(.is--disabled):active,.vxe-pager .vxe-pager--num-btn:not(.is--disabled):active,.vxe-pager .vxe-pager--prev-btn:not(.is--disabled):active{color:#3196ff}.vxe-pager .vxe-pager--jump-next.is--disabled,.vxe-pager .vxe-pager--jump-prev.is--disabled,.vxe-pager .vxe-pager--next-btn.is--disabled,.vxe-pager .vxe-pager--num-btn.is--disabled,.vxe-pager .vxe-pager--prev-btn.is--disabled{cursor:no-drop;color:#bfbfbf}.vxe-pager .vxe-pager--jump-next.is--disabled:hover,.vxe-pager .vxe-pager--jump-prev.is--disabled:hover,.vxe-pager .vxe-pager--next-btn.is--disabled:hover,.vxe-pager .vxe-pager--num-btn.is--disabled:hover,.vxe-pager .vxe-pager--prev-btn.is--disabled:hover{color:#bfbfbf}.vxe-pager .vxe-pager--num-btn{vertical-align:middle}.vxe-pager .vxe-pager--num-btn.is--active{font-weight:700}.vxe-pager .vxe-pager--sizes{width:7em;text-align:center;cursor:pointer}.vxe-pager .vxe-pager--count,.vxe-pager .vxe-pager--sizes .vxe-input--inner{text-align:center}.vxe-pager .vxe-pager--count>span{vertical-align:middle}.vxe-pager .vxe-pager--count .vxe-pager--separator{margin-right:.2em}.vxe-pager .vxe-pager--count .vxe-pager--separator:before{content:"/"}.vxe-pager .vxe-pager--jump .vxe-pager--goto{border-radius: 0.25rem;border: 0.0625rem solid #dcdfe6;color:#606266;-webkit-transition:border .2s ease-in-out;transition:border .2s ease-in-out;padding:0 .4em;background-color:#fff}.vxe-pager .vxe-pager--jump .vxe-pager--goto:focus{border: 0.0625rem solid #409eff;outline:0}.vxe-pager .vxe-pager--jump .vxe-pager--goto-text{margin-right:.25em}.vxe-pager .vxe-pager--jump .vxe-pager--classifier-text{margin-left:.25em}.vxe-pager .vxe-pager--jump .vxe-pager--goto{width:3.2em;text-align:center}.vxe-pager{font-size: 0.875rem;height: 3rem}.vxe-pager.size--medium{font-size: 0.875rem;height: 2.75rem}.vxe-pager.size--small{font-size: 0.8125rem;height: 2.5rem}.vxe-pager.size--mini{font-size: 0.75rem;height: 2.25rem}.vxe-checkbox,.vxe-checkbox-group{display:inline-block;vertical-align:middle;line-height:1}.vxe-checkbox{white-space:nowrap}.vxe-checkbox+.vxe-checkbox{margin-left: 0.625rem}.vxe-checkbox>input[type=checkbox]{position:absolute;width:0;height:0;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}.vxe-checkbox.is--indeterminate>input:not(:checked)+.vxe-checkbox--icon{color:#409eff}.vxe-checkbox:not(.is--disabled)>input:focus+.vxe-checkbox--icon{color:#409eff;-webkit-box-shadow:0 0 .2em 0 #409eff;box-shadow:0 0 .2em 0 #409eff}.vxe-checkbox:not(.is--disabled):hover>input+.vxe-checkbox--icon{border-color:#409eff}.vxe-checkbox.is--disabled{cursor:not-allowed}.vxe-checkbox.is--disabled>input+.vxe-checkbox--icon{color:#dcdfe6}.vxe-checkbox.is--disabled>input+.vxe-checkbox--icon+.vxe-checkbox--label{color:#bfbfbf}.vxe-checkbox.is--disabled>input:checked+.vxe-checkbox--icon{color:#dcdfe6}.vxe-checkbox .vxe-checkbox--label{padding-left:.5em;vertical-align:middle;display:inline-block;max-width:50em}.vxe-checkbox,.vxe-checkbox.size--medium{font-size: 0.875rem}.vxe-checkbox.size--small{font-size: 0.8125rem}.vxe-checkbox.size--mini{font-size: 0.75rem}[class*=vxe-],[class*=vxe-]:after,[class*=vxe-] :after,[class*=vxe-]:before,[class*=vxe-] :before{-webkit-box-sizing:border-box;box-sizing:border-box}.vxe-checkbox .vxe-checkbox--label,.vxe-radio-button .vxe-radio--label,.vxe-radio .vxe-radio--label,.vxe-table--render-default .vxe-body--column.col--ellipsis:not(.col--actived)>.vxe-cell,.vxe-table--render-default .vxe-footer--column.col--ellipsis:not(.col--actived)>.vxe-cell,.vxe-table--render-default .vxe-header--column.col--ellipsis:not(.col--actived)>.vxe-cell{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}[class*=vxe-]{font-variant:tabular-nums;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum"}.vxe-primary-color{color:#409eff}.vxe-success-color{color:#67c23a}.vxe-info-color{color:#909399}.vxe-warning-color{color:#e6a23c}.vxe-danger-color{color:#f56c6c}.vxe-perfect-color{color:#f8f8f9}.vxe-row:after{content:"";display:block;clear:both;height:0;overflow:hidden;visibility:hidden}.vxe-row>.vxe-col--1{float:left;width:4.16667%}.vxe-row>.vxe-col--2{float:left;width:8.33333%}.vxe-row>.vxe-col--3{float:left;width:12.5%}.vxe-row>.vxe-col--4{float:left;width:16.66667%}.vxe-row>.vxe-col--5{float:left;width:20.83333%}.vxe-row>.vxe-col--6{float:left;width:25%}.vxe-row>.vxe-col--7{float:left;width:29.16667%}.vxe-row>.vxe-col--8{float:left;width:33.33333%}.vxe-row>.vxe-col--9{float:left;width:37.5%}.vxe-row>.vxe-col--10{float:left;width:41.66667%}.vxe-row>.vxe-col--11{float:left;width:45.83333%}.vxe-row>.vxe-col--12{float:left;width:50%}.vxe-row>.vxe-col--13{float:left;width:54.16667%}.vxe-row>.vxe-col--14{float:left;width:58.33333%}.vxe-row>.vxe-col--15{float:left;width:62.5%}.vxe-row>.vxe-col--16{float:left;width:66.66667%}.vxe-row>.vxe-col--17{float:left;width:70.83333%}.vxe-row>.vxe-col--18{float:left;width:75%}.vxe-row>.vxe-col--19{float:left;width:79.16667%}.vxe-row>.vxe-col--20{float:left;width:83.33333%}.vxe-row>.vxe-col--21{float:left;width:87.5%}.vxe-row>.vxe-col--22{float:left;width:91.66667%}.vxe-row>.vxe-col--23{float:left;width:95.83333%}.vxe-row>.vxe-col--24{float:left;width:100%}.is--animat .vxe-filter--btn:after,.is--animat .vxe-filter--btn:before,.is--animat .vxe-input--wrapper .vxe-input,.is--animat .vxe-sort--asc-btn:after,.is--animat .vxe-sort--asc-btn:before,.is--animat .vxe-sort--desc-btn:after,.is--animat .vxe-sort--desc-btn:before{-webkit-transition:border .1s ease-in-out;transition:border .1s ease-in-out}.is--animat .vxe-table--expand-btn,.is--animat .vxe-tree--node-btn{-webkit-transition:-webkit-transform .1s ease-in-out;transition:-webkit-transform .1s ease-in-out;transition:transform .1s ease-in-out;transition:transform .1s ease-in-out,-webkit-transform .1s ease-in-out}.is--animat .vxe-checkbox>input:checked+span,.is--animat .vxe-radio>input:checked+span{-webkit-transition:background-color .1s ease-in-out;transition:background-color .1s ease-in-out}.vxe-checkbox .vxe-checkbox--icon,.vxe-custom--option .vxe-checkbox--icon,.vxe-export--panel-column-option .vxe-checkbox--icon,.vxe-table--filter-option .vxe-checkbox--icon,.vxe-table--render-default .vxe-cell--checkbox .vxe-checkbox--icon{font-size:1.34em;color:#dcdfe6;vertical-align:middle;font-weight:700;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.is--checked.vxe-checkbox,.is--checked.vxe-checkbox .vxe-checkbox--icon,.is--checked.vxe-custom--option,.is--checked.vxe-custom--option .vxe-checkbox--icon,.is--checked.vxe-export--panel-column-option,.is--checked.vxe-export--panel-column-option .vxe-checkbox--icon,.is--checked.vxe-table--filter-option,.is--checked.vxe-table--filter-option .vxe-checkbox--icon,.is--indeterminate.vxe-checkbox,.is--indeterminate.vxe-checkbox .vxe-checkbox--icon,.is--indeterminate.vxe-custom--option,.is--indeterminate.vxe-custom--option .vxe-checkbox--icon,.is--indeterminate.vxe-export--panel-column-option,.is--indeterminate.vxe-export--panel-column-option .vxe-checkbox--icon,.is--indeterminate.vxe-table--filter-option,.is--indeterminate.vxe-table--filter-option .vxe-checkbox--icon,.vxe-table--render-default .is--checked.vxe-cell--checkbox,.vxe-table--render-default .is--checked.vxe-cell--checkbox .vxe-checkbox--icon,.vxe-table--render-default .is--indeterminate.vxe-cell--checkbox,.vxe-table--render-default .is--indeterminate.vxe-cell--checkbox .vxe-checkbox--icon{color:#409eff}.vxe-checkbox:not(.is--disabled),.vxe-custom--option:not(.is--disabled),.vxe-export--panel-column-option:not(.is--disabled),.vxe-table--filter-option:not(.is--disabled),.vxe-table--render-default .vxe-cell--checkbox:not(.is--disabled){cursor:pointer}.vxe-checkbox:not(.is--disabled):hover .vxe-checkbox--icon,.vxe-custom--option:not(.is--disabled):hover .vxe-checkbox--icon,.vxe-export--panel-column-option:not(.is--disabled):hover .vxe-checkbox--icon,.vxe-table--filter-option:not(.is--disabled):hover .vxe-checkbox--icon,.vxe-table--render-default .vxe-cell--checkbox:not(.is--disabled):hover .vxe-checkbox--icon{color:#409eff}.is--disabled.vxe-checkbox,.is--disabled.vxe-custom--option,.is--disabled.vxe-export--panel-column-option,.is--disabled.vxe-table--filter-option,.vxe-table--render-default .is--disabled.vxe-cell--checkbox{color:#bfbfbf;cursor:not-allowed}.is--disabled.vxe-checkbox .vxe-checkbox--icon,.is--disabled.vxe-custom--option .vxe-checkbox--icon,.is--disabled.vxe-export--panel-column-option .vxe-checkbox--icon,.is--disabled.vxe-table--filter-option .vxe-checkbox--icon,.vxe-table--render-default .is--disabled.vxe-cell--checkbox .vxe-checkbox--icon{color:#dcdfe6}.vxe-checkbox .vxe-checkbox--label,.vxe-custom--option .vxe-checkbox--label,.vxe-export--panel-column-option .vxe-checkbox--label,.vxe-table--filter-option .vxe-checkbox--label,.vxe-table--render-default .vxe-cell--checkbox .vxe-checkbox--label{padding-left:.5em;vertical-align:middle}.vxe-radio,.vxe-table--render-default .vxe-cell--radio{cursor:pointer}.vxe-radio .vxe-radio--icon,.vxe-table--render-default .vxe-cell--radio .vxe-radio--icon{font-size:1.4em;color:#dcdfe6;vertical-align:middle;font-weight:700;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.is--checked.vxe-radio,.is--checked.vxe-radio .vxe-radio--icon,.vxe-table--render-default .is--checked.vxe-cell--radio,.vxe-table--render-default .is--checked.vxe-cell--radio .vxe-radio--icon{color:#409eff}.vxe-radio:not(.is--disabled),.vxe-table--render-default .vxe-cell--radio:not(.is--disabled){cursor:pointer}.vxe-radio:not(.is--disabled):hover .vxe-radio--icon,.vxe-table--render-default .vxe-cell--radio:not(.is--disabled):hover .vxe-radio--icon{color:#409eff}.is--disabled.vxe-radio,.vxe-table--render-default .is--disabled.vxe-cell--radio{color:#bfbfbf;cursor:not-allowed}.is--disabled.vxe-radio .vxe-radio--icon,.vxe-table--render-default .is--disabled.vxe-cell--radio .vxe-radio--icon{color:#dcdfe6}.vxe-radio .vxe-radio--label,.vxe-table--render-default .vxe-cell--radio .vxe-radio--label{padding-left:.5em;vertical-align:middle}.vxe-radio-group{display:inline-block;vertical-align:middle;line-height:1;font-size:0}.vxe-radio-group+.vxe-radio-group{margin-left: 0.625rem}.vxe-radio{display:inline-block;vertical-align:middle;white-space:nowrap;line-height:1}.vxe-radio>input[type=radio]{position:absolute;width:0;height:0;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}.vxe-radio .vxe-radio--label{vertical-align:middle;display:inline-block;max-width:50em}.vxe-radio:not(.is--disabled)>input:focus+.vxe-radio--icon{color:#409eff}.vxe-radio:not(.vxe-radio-button)+.vxe-radio{margin-left: 0.625rem}.vxe-radio-button .vxe-radio--label{background-color:#fff}.vxe-radio-button:first-child .vxe-radio--label{border-left: 0.0625rem solid #dcdfe6;border-radius: 0.25rem 0 0 0.25rem}.vxe-radio-button:last-child .vxe-radio--label{border-radius:0 0.25rem 0.25rem 0}.vxe-radio-button>input:checked+.vxe-radio--label{color:#fff;background-color:#409eff;border-color:#409eff}.vxe-radio-button .vxe-radio--label{padding:0 1em;line-height: 2rem;display:inline-block;border-style:solid;border-color:#dcdfe6;border-width: 0.0625rem 0.0625rem 0.0625rem 0;max-width:50em}.vxe-radio-button.is--disabled{cursor:not-allowed}.vxe-radio-button.is--disabled>input:not(:checked)+.vxe-radio--label{color:#dcdfe6}.vxe-radio-button.is--disabled>input:checked+.vxe-radio--label{border-color:#a6d2ff;background-color:#a6d2ff}.vxe-radio-button:not(.is--disabled)>input:focus+.vxe-radio--label{border-color:#409eff;-webkit-box-shadow:0 0 .2em 0 #409eff;box-shadow:0 0 .2em 0 #409eff}.vxe-radio-button:not(.is--disabled):hover>input:not(:checked)+.vxe-radio--label{color:#409eff}.vxe-radio-button.size--medium .vxe-radio--label{line-height: 1.875rem}.vxe-radio-button.size--small .vxe-radio--label{line-height: 1.75rem}.vxe-radio-button.size--mini .vxe-radio--label{line-height: 1.625rem}.vxe-radio,.vxe-radio.size--medium{font-size: 0.875rem}.vxe-radio.size--small{font-size: 0.8125rem}.vxe-radio.size--mini{font-size: 0.75rem}.vxe-input--inner{width:100%;height:100%;border-radius: 0.25rem;outline:0;margin:0;font-size:inherit;font-family:inherit;line-height:inherit;padding:0 .6em;color:#606266;border: 0.0625rem solid #dcdfe6;background-color:#fff;-webkit-box-shadow:none;box-shadow:none}.vxe-input--inner::-webkit-input-placeholder{color:#c0c4cc}.vxe-input--inner::-moz-placeholder{color:#c0c4cc}.vxe-input--inner:-ms-input-placeholder{color:#c0c4cc}.vxe-input--inner::-ms-input-placeholder{color:#c0c4cc}.vxe-input--inner::placeholder{color:#c0c4cc}.vxe-input--inner::-webkit-autofill{background-color:#fff}.vxe-input--inner[type=number]{-webkit-appearance:none;appearance:none;-moz-appearance:textfield}.vxe-input--inner[type=number]::-webkit-inner-spin-button,.vxe-input--inner[type=number]::-webkit-outer-spin-button,.vxe-input--inner[type=search],.vxe-input--inner[type=search]::-webkit-search-cancel-button{-webkit-appearance:none;appearance:none}.vxe-input--inner[disabled]{cursor:not-allowed;color:#bfbfbf;background-color:#f3f3f3}.vxe-input{display:inline-block;position:relative;width: 11.25rem}.vxe-input.is--disabled .vxe-input--date-picker-suffix,.vxe-input.is--disabled .vxe-input--number-suffix,.vxe-input.is--disabled .vxe-input--password-suffix,.vxe-input.is--disabled .vxe-input--search-suffix,.vxe-input.is--disabled .vxe-input--suffix{cursor:no-drop}.vxe-input:not(.is--disabled) .vxe-input--clear-icon,.vxe-input:not(.is--disabled) .vxe-input--number-suffix,.vxe-input:not(.is--disabled) .vxe-input--password-suffix,.vxe-input:not(.is--disabled) .vxe-input--search-suffix{cursor:pointer}.vxe-input:not(.is--disabled).is--active .vxe-input--inner{border: 0.0625rem solid #409eff}.vxe-input .vxe-input--extra-suffix,.vxe-input .vxe-input--prefix,.vxe-input .vxe-input--suffix{display:-webkit-box;display:-ms-flexbox;display:flex;position:absolute;top:0;width:1.6em;height:100%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;color:#c0c4cc}.vxe-input .vxe-input--prefix{left:.2em}.vxe-input.is--prefix .vxe-input--inner{padding-left:1.8em}.vxe-input .vxe-input--clear-icon{display:none}.vxe-input .vxe-input--extra-suffix,.vxe-input .vxe-input--suffix{right:.2em}.vxe-input.is--suffix .vxe-input--inner{padding-right:1.8em}.vxe-input.is--left .vxe-input--inner{text-align:left}.vxe-input.is--center .vxe-input--inner{text-align:center}.vxe-input.is--right .vxe-input--inner{text-align:right}.vxe-input.is--controls.type--date .vxe-input--inner,.vxe-input.is--controls.type--datetime .vxe-input--inner,.vxe-input.is--controls.type--float .vxe-input--inner,.vxe-input.is--controls.type--integer .vxe-input--inner,.vxe-input.is--controls.type--month .vxe-input--inner,.vxe-input.is--controls.type--number .vxe-input--inner,.vxe-input.is--controls.type--password .vxe-input--inner,.vxe-input.is--controls.type--quarter .vxe-input--inner,.vxe-input.is--controls.type--search .vxe-input--inner,.vxe-input.is--controls.type--time .vxe-input--inner,.vxe-input.is--controls.type--week .vxe-input--inner,.vxe-input.is--controls.type--year .vxe-input--inner{padding-right:1.8em}.vxe-input.is--controls.type--date .vxe-input--suffix,.vxe-input.is--controls.type--datetime .vxe-input--suffix,.vxe-input.is--controls.type--float .vxe-input--suffix,.vxe-input.is--controls.type--integer .vxe-input--suffix,.vxe-input.is--controls.type--month .vxe-input--suffix,.vxe-input.is--controls.type--number .vxe-input--suffix,.vxe-input.is--controls.type--password .vxe-input--suffix,.vxe-input.is--controls.type--quarter .vxe-input--suffix,.vxe-input.is--controls.type--search .vxe-input--suffix,.vxe-input.is--controls.type--time .vxe-input--suffix,.vxe-input.is--controls.type--week .vxe-input--suffix,.vxe-input.is--controls.type--year .vxe-input--suffix{right:1.6em}.vxe-input.is--suffix.is--controls.type--date .vxe-input--inner,.vxe-input.is--suffix.is--controls.type--datetime .vxe-input--inner,.vxe-input.is--suffix.is--controls.type--float .vxe-input--inner,.vxe-input.is--suffix.is--controls.type--integer .vxe-input--inner,.vxe-input.is--suffix.is--controls.type--month .vxe-input--inner,.vxe-input.is--suffix.is--controls.type--number .vxe-input--inner,.vxe-input.is--suffix.is--controls.type--password .vxe-input--inner,.vxe-input.is--suffix.is--controls.type--quarter .vxe-input--inner,.vxe-input.is--suffix.is--controls.type--search .vxe-input--inner,.vxe-input.is--suffix.is--controls.type--time .vxe-input--inner,.vxe-input.is--suffix.is--controls.type--week .vxe-input--inner,.vxe-input.is--suffix.is--controls.type--year .vxe-input--inner{padding-right:3.2em}.vxe-input.is--suffix:hover .vxe-input--suffix.is--clear .vxe-input--suffix-icon{display:none}.vxe-input.is--suffix:hover .vxe-input--suffix.is--clear .vxe-input--clear-icon{display:inline}.vxe-input:not(.is--disabled) .vxe-input--suffix:hover .vxe-input--clear-icon{color:#606266}.vxe-input:not(.is--disabled) .vxe-input--suffix:active .vxe-input--clear-icon{color:#409eff}.vxe-input:not(.is--disabled) .vxe-input--extra-suffix:hover .vxe-input--password-suffix,.vxe-input:not(.is--disabled) .vxe-input--extra-suffix:hover .vxe-input--search-suffix{color:#606266}.vxe-input:not(.is--disabled) .vxe-input--extra-suffix:active .vxe-input--password-suffix,.vxe-input:not(.is--disabled) .vxe-input--extra-suffix:active .vxe-input--search-suffix{color:#409eff}.vxe-input:not(.is--disabled) .vxe-input--number-next:hover,.vxe-input:not(.is--disabled) .vxe-input--number-prev:hover{color:#606266}.vxe-input:not(.is--disabled) .vxe-input--number-next:active,.vxe-input:not(.is--disabled) .vxe-input--number-prev:active{color:#409eff}.vxe-input:not(.is--disabled) .vxe-input--number-next.is--disabled,.vxe-input:not(.is--disabled) .vxe-input--number-prev.is--disabled{cursor:no-drop;color:#e4e7ed}.vxe-input .vxe-input--date-picker-suffix,.vxe-input .vxe-input--number-suffix,.vxe-input .vxe-input--password-suffix,.vxe-input .vxe-input--search-suffix{position:relative;width:100%;height:100%}.vxe-input .vxe-input--date-picker-icon,.vxe-input .vxe-input--password-icon,.vxe-input .vxe-input--search-icon{position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.vxe-input .vxe-input--date-picker-icon[class*=vxe-icon-],.vxe-input .vxe-input--password-icon[class*=vxe-icon-],.vxe-input .vxe-input--search-icon[class*=vxe-icon-]{font-size:1.2em}.vxe-input .vxe-input--date-picker-suffix{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.vxe-input .vxe-input--date-picker-suffix .vxe-input--panel-icon{-webkit-transition:-webkit-transform .2s ease-in-out;transition:-webkit-transform .2s ease-in-out;transition:transform .2s ease-in-out;transition:transform .2s ease-in-out,-webkit-transform .2s ease-in-out}.vxe-input .vxe-input--number-next,.vxe-input .vxe-input--number-prev{position:relative;display:block;height:50%;width:100%;text-align:center}.vxe-input .vxe-input--number-next-icon,.vxe-input .vxe-input--number-prev-icon{line-height:.8em;position:absolute;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.vxe-input .vxe-input--number-prev-icon{bottom:0}.vxe-input .vxe-input--number-next-icon{top:0}.vxe-input--panel{display:none;position:absolute;left:0;padding: 0.25rem 0;color:#606266;text-align:left}.vxe-input--panel:not(.is--transfer){min-width:100%}.vxe-input--panel.is--transfer{position:fixed}.vxe-input--panel.animat--leave{display:block;opacity:0;-webkit-transform:scaleY(.5);transform:scaleY(.5);-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);-webkit-transform-origin:center top;transform-origin:center top;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}.vxe-input--panel.animat--leave[placement=top]{-webkit-transform-origin:center bottom;transform-origin:center bottom}.vxe-input--panel.animat--enter{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1)}.vxe-input--panel-layout-wrapper,.vxe-input--panel-wrapper{background-color:#fff;border: 0.0625rem solid #dadce0;-webkit-box-shadow:0 0 0.375rem 0.125rem rgba(0,0,0,.1);box-shadow:0 0 0.375rem 0.125rem rgba(0,0,0,.1);border-radius: 0.25rem}.vxe-input--panel-wrapper{overflow-x:hidden;overflow-y:auto}.vxe-input--panel-layout-wrapper{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.vxe-input--panel.type--date,.vxe-input--panel.type--month,.vxe-input--panel.type--quarter,.vxe-input--panel.type--week,.vxe-input--panel.type--year{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.vxe-input--panel.type--datetime .vxe-input--panel-right-wrapper{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;border-left: 0.0625rem solid #dcdfe6}.vxe-input--panel.type--date .vxe-input--date-picker-body th,.vxe-input--panel.type--datetime .vxe-input--date-picker-body th{width:14.28571%}.vxe-input--panel.type--week .vxe-input--date-picker-body table th{width:12%}.vxe-input--panel.type--week .vxe-input--date-picker-body table th:first-child{width:14%}.vxe-input--panel.type--quarter .vxe-input--date-picker-body table th{width:50%}.vxe-input--panel.type--month .vxe-input--date-picker-body td,.vxe-input--panel.type--year .vxe-input--date-picker-body td{width:25%}.vxe-input--time-picker-title{display:inline-block;text-align:center;border: 0.0625rem solid #dcdfe6;border-radius: 0.25rem}.vxe-input--time-picker-confirm{position:absolute;right:0;top:0}.vxe-input--date-picker-confirm,.vxe-input--time-picker-confirm{outline:0;border: 0.0625rem solid #dcdfe6;border-radius: 0.25rem;cursor:pointer;color:#fff;border-color:#409eff;background-color:#409eff}.vxe-input--date-picker-confirm:hover,.vxe-input--time-picker-confirm:hover{background-color:#5faeff;border-color:#5faeff}.vxe-input--date-picker-confirm:active,.vxe-input--time-picker-confirm:active{background-color:#3196ff;border-color:#3196ff}.vxe-input--time-picker-header{display:-webkit-box;display:-ms-flexbox;display:flex;position:relative;-ms-flex-negative:0;flex-shrink:0}.vxe-input--date-picker-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.vxe-input--date-picker-header .vxe-input--date-picker-type-wrapper{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.vxe-input--date-picker-header .vxe-input--date-picker-btn-wrapper{-ms-flex-negative:0;flex-shrink:0;text-align:center}.vxe-input--date-picker-type-wrapper .vxe-input--date-picker-btn,.vxe-input--date-picker-type-wrapper .vxe-input--date-picker-label{display:inline-block}.vxe-input--date-picker-btn-wrapper{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.vxe-input--date-picker-btn,.vxe-input--date-picker-label{display:inline-block;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;background-color:#fff}.vxe-input--date-picker-btn.is--disabled{color:#bfbfbf;cursor:no-drop}.vxe-input--date-picker-btn:not(.is--disabled){cursor:pointer}.vxe-input--date-picker-btn:not(.is--disabled):hover{background-color:#fff}.vxe-input--date-picker-btn:not(.is--disabled):active{background-color:#f7f7f7}.vxe-input--date-picker-body{border-radius: 0.25rem;border: 0.0625rem solid #dadce0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.vxe-input--date-picker-body table{border:0;width:100%;border-spacing:0;border-collapse:separate;text-align:center;table-layout:fixed}.vxe-input--date-picker-body td,.vxe-input--date-picker-body th{font-weight:400}.vxe-input--date-picker-body th{-webkit-box-shadow:inset 0 -0.0625rem 0 0 #dadce0;box-shadow:inset 0 -0.0625rem 0 0 #dadce0}.vxe-input--date-picker-body td.is--next,.vxe-input--date-picker-body td.is--next .vxe-input--date-festival,.vxe-input--date-picker-body td.is--next .vxe-input--date-label,.vxe-input--date-picker-body td.is--prev,.vxe-input--date-picker-body td.is--prev .vxe-input--date-festival,.vxe-input--date-picker-body td.is--prev .vxe-input--date-label{color:#bfbfbf}.vxe-input--date-picker-body td.is--now{-webkit-box-shadow:inset 0 0 0 0.0625rem #dadce0;box-shadow:inset 0 0 0 0.0625rem #dadce0}.vxe-input--date-picker-body td.is--now:not(.is--selected).is--current,.vxe-input--date-picker-body td.is--now:not(.is--selected).is--current .vxe-input--date-festival,.vxe-input--date-picker-body td.is--now:not(.is--selected).is--current .vxe-input--date-label{color:#409eff}.vxe-input--date-picker-body td.is--hover{background-color:#f2f6fc}.vxe-input--date-picker-body td.is--selected{color:#fff;background-color:#409eff}.vxe-input--date-picker-body td.is--selected.is--next,.vxe-input--date-picker-body td.is--selected.is--prev{background-color:#73b8ff}.vxe-input--date-picker-body td.is--selected .vxe-input--date-festival,.vxe-input--date-picker-body td.is--selected .vxe-input--date-label{color:#fff}.vxe-input--date-picker-body td.is--selected .vxe-input--date-label.is-notice:before{background-color:#fff}.vxe-input--date-picker-body td:not(.is--disabled){cursor:pointer}.vxe-input--date-picker-body td.is--disabled{cursor:no-drop;color:#dcdfe6;background-color:#f3f3f3}.vxe-input--date-picker-body td.is--disabled .vxe-input--date-festival,.vxe-input--date-picker-body td.is--disabled .vxe-input--date-label{color:#dcdfe6}.vxe-input--date-week-view th:first-child{-webkit-box-shadow:inset -0.0625rem -0.0625rem 0 0 #dadce0;box-shadow:inset -0.0625rem -0.0625rem 0 0 #dadce0}.vxe-input--date-week-view td:first-child{-webkit-box-shadow:inset -0.0625rem 0 0 0 #dadce0;box-shadow:inset -0.0625rem 0 0 0 #dadce0}.vxe-input--date-festival,.vxe-input--date-label{display:block;overflow:hidden}.vxe-input--date-label{position:relative}.vxe-input--date-label.is-notice:before{content:"";position:absolute;width: 0.25rem;height: 0.25rem;left:.8em;top:.1em;-webkit-transform:translateX(-50%);transform:translateX(-50%);border-radius:100%;background-color:red}.vxe-input--date-label--extra{position:absolute;right:.1em;top:-.2em;font-size: 0.75rem;line-height: 0.75rem;-webkit-transform:scale(.7);transform:scale(.7);color:#67c23a}.vxe-input--date-label--extra.is-important{color:#fd2222}.vxe-input--date-festival{color:#999;height: 0.875rem;line-height:1;overflow:hidden}.vxe-input--date-festival.is-important{color:#409eff}.vxe-input--date-festival--label{display:block;font-size: 0.75rem;-webkit-transform:scale(.8);transform:scale(.8)}@-webkit-keyframes festivalOverlap2{0%,45%,to{-webkit-transform:translateY(0);transform:translateY(0)}50%,95%{-webkit-transform:translateY( -0.875rem);transform:translateY( -0.875rem)}}@keyframes festivalOverlap2{0%,45%,to{-webkit-transform:translateY(0);transform:translateY(0)}50%,95%{-webkit-transform:translateY( -0.875rem);transform:translateY( -0.875rem)}}@-webkit-keyframes festivalOverlap3{0%,20%,to{-webkit-transform:translateY(0);transform:translateY(0)}25%,45%,75%,95%{-webkit-transform:translateY( -0.875rem);transform:translateY( -0.875rem)}50%,70%{-webkit-transform:translateY( -1.75rem);transform:translateY( -1.75rem)}}@keyframes festivalOverlap3{0%,20%,to{-webkit-transform:translateY(0);transform:translateY(0)}25%,45%,75%,95%{-webkit-transform:translateY( -0.875rem);transform:translateY( -0.875rem)}50%,70%{-webkit-transform:translateY( -1.75rem);transform:translateY( -1.75rem)}}.vxe-input--date-festival--overlap{display:block;font-size: 0.75rem}.vxe-input--date-festival--overlap.overlap--2{-webkit-animation:festivalOverlap2 6s ease-in-out infinite;animation:festivalOverlap2 6s ease-in-out infinite}.vxe-input--date-festival--overlap.overlap--3{-webkit-animation:festivalOverlap3 9s ease-in-out infinite;animation:festivalOverlap3 9s ease-in-out infinite}.vxe-input--date-festival--overlap>span{height: 0.875rem;display:block;-webkit-transform:scale(.8);transform:scale(.8)}.vxe-input--time-picker-body{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;border: 0.0625rem solid #dadce0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;border-radius: 0.25rem;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.vxe-input--time-picker-body>ul{height:100%;overflow:hidden;margin:0;padding:0}.vxe-input--time-picker-body>ul:after,.vxe-input--time-picker-body>ul:before{content:" ";display:block}.vxe-input--time-picker-body>ul:hover{overflow-y:auto}.vxe-input--time-picker-body>ul>li{display:block}.vxe-input--time-picker-body>ul>li:hover{background-color:#f2f6fc;cursor:pointer}.vxe-input--time-picker-body>ul>li.is--selected{font-weight:700;color:#409eff}.vxe-input--time-picker-body .vxe-input--time-picker-minute-list,.vxe-input--time-picker-body .vxe-input--time-picker-second-list{border-left: 0.0625rem solid #dadce0}.vxe-input{font-size: 0.875rem;height: 2.125rem;line-height: 2.125rem}.vxe-input .vxe-input--inner[type=date]::-webkit-inner-spin-button,.vxe-input .vxe-input--inner[type=month]::-webkit-inner-spin-button,.vxe-input .vxe-input--inner[type=week]::-webkit-inner-spin-button{margin-top: 0.375rem}.vxe-input .vxe-input--inner[type=date]::-webkit-inner-spin-button,.vxe-input .vxe-input--inner[type=month]::-webkit-inner-spin-button,.vxe-input .vxe-input--inner[type=number]::-webkit-inner-spin-button,.vxe-input .vxe-input--inner[type=week]::-webkit-inner-spin-button{height: 1.5rem}.vxe-input.size--medium{font-size: 0.875rem;height: 2rem;line-height: 2rem}.vxe-input.size--medium .vxe-input--inner[type=date]::-webkit-inner-spin-button,.vxe-input.size--medium .vxe-input--inner[type=month]::-webkit-inner-spin-button,.vxe-input.size--medium .vxe-input--inner[type=week]::-webkit-inner-spin-button{margin-top: 0.25rem}.vxe-input.size--small{font-size: 0.8125rem;height: 1.875rem;line-height: 1.875rem}.vxe-input.size--small .vxe-input--inner[type=date]::-webkit-inner-spin-button,.vxe-input.size--small .vxe-input--inner[type=month]::-webkit-inner-spin-button,.vxe-input.size--small .vxe-input--inner[type=week]::-webkit-inner-spin-button{margin-top: 0.125rem}.vxe-input.size--mini{font-size: 0.75rem;height: 1.75rem;line-height: 1.75rem}.vxe-input.size--mini .vxe-input--inner[type=date]::-webkit-inner-spin-button,.vxe-input.size--mini .vxe-input--inner[type=month]::-webkit-inner-spin-button,.vxe-input.size--mini .vxe-input--inner[type=week]::-webkit-inner-spin-button{margin-top:0}.vxe-input--panel{font-size: 0.875rem}.vxe-input--panel .vxe-input--panel-wrapper{max-height: 23.75rem}.vxe-input--panel.type--date .vxe-input--panel-wrapper,.vxe-input--panel.type--month .vxe-input--panel-wrapper,.vxe-input--panel.type--quarter .vxe-input--panel-wrapper,.vxe-input--panel.type--time .vxe-input--panel-wrapper,.vxe-input--panel.type--week .vxe-input--panel-wrapper,.vxe-input--panel.type--year .vxe-input--panel-wrapper{padding: 0.6875rem}.vxe-input--panel.type--date .vxe-input--panel-wrapper,.vxe-input--panel.type--month .vxe-input--panel-wrapper,.vxe-input--panel.type--quarter .vxe-input--panel-wrapper,.vxe-input--panel.type--year .vxe-input--panel-wrapper{width: 21rem}.vxe-input--panel.type--week .vxe-input--panel-wrapper{width: 23.75rem}.vxe-input--panel.type--time .vxe-input--panel-wrapper{width: 10.625rem}.vxe-input--panel.type--datetime .vxe-input--panel-left-wrapper{width: 21rem}.vxe-input--panel.type--datetime .vxe-input--panel-left-wrapper,.vxe-input--panel.type--datetime .vxe-input--panel-right-wrapper{padding: 0.6875rem}.vxe-input--panel .vxe-input--time-picker-title{height: 1.875rem;line-height: 1.875rem;padding:0 0.6875rem}.vxe-input--panel .vxe-input--date-picker-btn,.vxe-input--panel .vxe-input--date-picker-label{height: 1.875rem;line-height: 1.875rem}.vxe-input--panel .vxe-input--date-picker-btn-wrapper .vxe-input--date-picker-btn{margin-left: 0.5rem}.vxe-input--panel .vxe-input--date-picker-btn-wrapper .vxe-input--date-picker-current-btn,.vxe-input--panel .vxe-input--date-picker-btn-wrapper .vxe-input--date-picker-next-btn,.vxe-input--panel .vxe-input--date-picker-btn-wrapper .vxe-input--date-picker-prev-btn{width: 1.875rem;border-radius: 0.25rem;border: 0.0625rem solid #dcdfe6}.vxe-input--panel .vxe-input--date-picker-type-wrapper .vxe-input--date-picker-btn,.vxe-input--panel .vxe-input--date-picker-type-wrapper .vxe-input--date-picker-label{padding:0 0.5625rem}.vxe-input--panel .vxe-input--date-picker-header,.vxe-input--panel .vxe-input--time-picker-header{padding-bottom: 0.5rem}.vxe-input--panel .vxe-input--date-picker-body table,.vxe-input--panel .vxe-input--time-picker-body{height: 16.125rem}.vxe-input--panel .vxe-input--time-picker-body>ul{width: 3rem}.vxe-input--panel .vxe-input--time-picker-body>ul:after,.vxe-input--panel .vxe-input--time-picker-body>ul:before{height: 7.5rem}.vxe-input--panel .vxe-input--time-picker-body>ul>li{height: 1.625rem;padding-left: 0.5625rem}.vxe-input--panel .vxe-input--time-picker-body .vxe-input--time-picker-minute-list{left: 3rem}.vxe-input--panel .vxe-input--time-picker-body .vxe-input--time-picker-second-list{left: 6rem}.vxe-input--panel .vxe-input--date-day-view td,.vxe-input--panel .vxe-input--date-week-view td{height: 2.375rem}.vxe-input--panel .vxe-input--date-quarter-view td{height: 3.75rem}.vxe-input--panel .vxe-input--date-month-view td,.vxe-input--panel .vxe-input--date-year-view td{height: 3rem}.vxe-input--panel .vxe-input--date-picker-body th{height: 1.875rem}.vxe-input--panel .vxe-input--date-picker-confirm,.vxe-input--panel .vxe-input--time-picker-confirm{height: 1.875rem;padding:0 0.5625rem}.vxe-input--panel .vxe-input--date-label{line-height: 0.9375rem}.vxe-input--panel.size--medium{font-size: 0.875rem}.vxe-input--panel.size--medium .vxe-input--panel-wrapper{max-height: 22.5rem}.vxe-input--panel.size--medium.type--date .vxe-input--panel-wrapper,.vxe-input--panel.size--medium.type--month .vxe-input--panel-wrapper,.vxe-input--panel.size--medium.type--quarter .vxe-input--panel-wrapper,.vxe-input--panel.size--medium.type--time .vxe-input--panel-wrapper,.vxe-input--panel.size--medium.type--week .vxe-input--panel-wrapper,.vxe-input--panel.size--medium.type--year .vxe-input--panel-wrapper{padding: 0.625rem}.vxe-input--panel.size--medium.type--date .vxe-input--panel-wrapper,.vxe-input--panel.size--medium.type--month .vxe-input--panel-wrapper,.vxe-input--panel.size--medium.type--quarter .vxe-input--panel-wrapper,.vxe-input--panel.size--medium.type--year .vxe-input--panel-wrapper{width: 21rem}.vxe-input--panel.size--medium.type--week .vxe-input--panel-wrapper{width: 23.75rem}.vxe-input--panel.size--medium.type--time .vxe-input--panel-wrapper{width: 10.5rem}.vxe-input--panel.size--medium.type--datetime .vxe-input--panel-left-wrapper{width: 21rem}.vxe-input--panel.size--medium.type--datetime .vxe-input--panel-left-wrapper,.vxe-input--panel.size--medium.type--datetime .vxe-input--panel-right-wrapper{padding: 0.625rem}.vxe-input--panel.size--medium .vxe-input--time-picker-title{height: 1.8125rem;line-height: 1.8125rem;padding:0 0.625rem}.vxe-input--panel.size--medium .vxe-input--date-picker-btn,.vxe-input--panel.size--medium .vxe-input--date-picker-label{height: 1.8125rem;line-height: 1.8125rem}.vxe-input--panel.size--medium .vxe-input--date-picker-btn-wrapper .vxe-input--date-picker-btn{margin-left: 0.4375rem}.vxe-input--panel.size--medium .vxe-input--date-picker-btn-wrapper .vxe-input--date-picker-current-btn,.vxe-input--panel.size--medium .vxe-input--date-picker-btn-wrapper .vxe-input--date-picker-next-btn,.vxe-input--panel.size--medium .vxe-input--date-picker-btn-wrapper .vxe-input--date-picker-prev-btn{width: 1.8125rem;border-radius: 0.25rem;border: 0.0625rem solid #dcdfe6}.vxe-input--panel.size--medium .vxe-input--date-picker-type-wrapper .vxe-input--date-picker-btn,.vxe-input--panel.size--medium .vxe-input--date-picker-type-wrapper .vxe-input--date-picker-label{padding:0 0.5rem}.vxe-input--panel.size--medium .vxe-input--date-picker-header,.vxe-input--panel.size--medium .vxe-input--time-picker-header{padding-bottom: 0.4375rem}.vxe-input--panel.size--medium .vxe-input--date-picker-body table,.vxe-input--panel.size--medium .vxe-input--time-picker-body{height: 15.3125rem}.vxe-input--panel.size--medium .vxe-input--time-picker-body>ul{width: 3rem}.vxe-input--panel.size--medium .vxe-input--time-picker-body>ul:after,.vxe-input--panel.size--medium .vxe-input--time-picker-body>ul:before{height: 7.5rem}.vxe-input--panel.size--medium .vxe-input--time-picker-body>ul>li{height: 1.625rem;padding-left: 0.5rem}.vxe-input--panel.size--medium .vxe-input--time-picker-body .vxe-input--time-picker-minute-list{left: 3rem}.vxe-input--panel.size--medium .vxe-input--time-picker-body .vxe-input--time-picker-second-list{left: 6rem}.vxe-input--panel.size--medium .vxe-input--date-day-view td,.vxe-input--panel.size--medium .vxe-input--date-week-view td{height: 2.25rem}.vxe-input--panel.size--medium .vxe-input--date-quarter-view td{height: 3.625rem}.vxe-input--panel.size--medium .vxe-input--date-month-view td,.vxe-input--panel.size--medium .vxe-input--date-year-view td{height: 2.875rem}.vxe-input--panel.size--medium .vxe-input--date-picker-body th{height: 1.8125rem}.vxe-input--panel.size--medium .vxe-input--date-picker-confirm,.vxe-input--panel.size--medium .vxe-input--time-picker-confirm{height: 1.8125rem;padding:0 0.5rem}.vxe-input--panel.size--medium .vxe-input--date-label{line-height: 0.9375rem}.vxe-input--panel.size--small{font-size: 0.8125rem}.vxe-input--panel.size--small .vxe-input--panel-wrapper{max-height: 21.25rem}.vxe-input--panel.size--small.type--date .vxe-input--panel-wrapper,.vxe-input--panel.size--small.type--month .vxe-input--panel-wrapper,.vxe-input--panel.size--small.type--quarter .vxe-input--panel-wrapper,.vxe-input--panel.size--small.type--time .vxe-input--panel-wrapper,.vxe-input--panel.size--small.type--week .vxe-input--panel-wrapper,.vxe-input--panel.size--small.type--year .vxe-input--panel-wrapper{padding: 0.5625rem}.vxe-input--panel.size--small.type--date .vxe-input--panel-wrapper,.vxe-input--panel.size--small.type--month .vxe-input--panel-wrapper,.vxe-input--panel.size--small.type--quarter .vxe-input--panel-wrapper,.vxe-input--panel.size--small.type--year .vxe-input--panel-wrapper{width: 19.5rem}.vxe-input--panel.size--small.type--week .vxe-input--panel-wrapper{width: 22.125rem}.vxe-input--panel.size--small.type--time .vxe-input--panel-wrapper{width: 9.625rem}.vxe-input--panel.size--small.type--datetime .vxe-input--panel-left-wrapper{width: 19.5rem}.vxe-input--panel.size--small.type--datetime .vxe-input--panel-left-wrapper,.vxe-input--panel.size--small.type--datetime .vxe-input--panel-right-wrapper{padding: 0.5625rem}.vxe-input--panel.size--small .vxe-input--time-picker-title{height: 1.75rem;line-height: 1.75rem;padding:0 0.5625rem}.vxe-input--panel.size--small .vxe-input--date-picker-btn,.vxe-input--panel.size--small .vxe-input--date-picker-label{height: 1.75rem;line-height: 1.75rem}.vxe-input--panel.size--small .vxe-input--date-picker-btn-wrapper .vxe-input--date-picker-btn{margin-left: 0.375rem}.vxe-input--panel.size--small .vxe-input--date-picker-btn-wrapper .vxe-input--date-picker-current-btn,.vxe-input--panel.size--small .vxe-input--date-picker-btn-wrapper .vxe-input--date-picker-next-btn,.vxe-input--panel.size--small .vxe-input--date-picker-btn-wrapper .vxe-input--date-picker-prev-btn{width: 1.75rem;border-radius: 0.25rem;border: 0.0625rem solid #dcdfe6}.vxe-input--panel.size--small .vxe-input--date-picker-type-wrapper .vxe-input--date-picker-btn,.vxe-input--panel.size--small .vxe-input--date-picker-type-wrapper .vxe-input--date-picker-label{padding:0 0.4375rem}.vxe-input--panel.size--small .vxe-input--date-picker-header,.vxe-input--panel.size--small .vxe-input--time-picker-header{padding-bottom: 0.375rem}.vxe-input--panel.size--small .vxe-input--date-picker-body table,.vxe-input--panel.size--small .vxe-input--time-picker-body{height: 14.5rem}.vxe-input--panel.size--small .vxe-input--time-picker-body>ul{width: 2.75rem}.vxe-input--panel.size--small .vxe-input--time-picker-body>ul:after,.vxe-input--panel.size--small .vxe-input--time-picker-body>ul:before{height: 6.875rem}.vxe-input--panel.size--small .vxe-input--time-picker-body>ul>li{height: 1.625rem;padding-left: 0.4375rem}.vxe-input--panel.size--small .vxe-input--time-picker-body .vxe-input--time-picker-minute-list{left: 2.75rem}.vxe-input--panel.size--small .vxe-input--time-picker-body .vxe-input--time-picker-second-list{left: 5.5rem}.vxe-input--panel.size--small .vxe-input--date-day-view td,.vxe-input--panel.size--small .vxe-input--date-week-view td{height: 2.125rem}.vxe-input--panel.size--small .vxe-input--date-quarter-view td{height: 3.5rem}.vxe-input--panel.size--small .vxe-input--date-month-view td,.vxe-input--panel.size--small .vxe-input--date-year-view td{height: 2.75rem}.vxe-input--panel.size--small .vxe-input--date-picker-body th{height: 1.75rem}.vxe-input--panel.size--small .vxe-input--date-picker-confirm,.vxe-input--panel.size--small .vxe-input--time-picker-confirm{height: 1.75rem;padding:0 0.4375rem}.vxe-input--panel.size--small .vxe-input--date-label{line-height: 0.875rem}.vxe-input--panel.size--mini{font-size: 0.75rem}.vxe-input--panel.size--mini .vxe-input--panel-wrapper{max-height: 20rem}.vxe-input--panel.size--mini.type--date .vxe-input--panel-wrapper,.vxe-input--panel.size--mini.type--month .vxe-input--panel-wrapper,.vxe-input--panel.size--mini.type--quarter .vxe-input--panel-wrapper,.vxe-input--panel.size--mini.type--time .vxe-input--panel-wrapper,.vxe-input--panel.size--mini.type--week .vxe-input--panel-wrapper,.vxe-input--panel.size--mini.type--year .vxe-input--panel-wrapper{padding: 0.5rem}.vxe-input--panel.size--mini.type--date .vxe-input--panel-wrapper,.vxe-input--panel.size--mini.type--month .vxe-input--panel-wrapper,.vxe-input--panel.size--mini.type--quarter .vxe-input--panel-wrapper,.vxe-input--panel.size--mini.type--year .vxe-input--panel-wrapper{width: 18rem}.vxe-input--panel.size--mini.type--week .vxe-input--panel-wrapper{width: 20.375rem}.vxe-input--panel.size--mini.type--time .vxe-input--panel-wrapper{width: 9.125rem}.vxe-input--panel.size--mini.type--datetime .vxe-input--panel-left-wrapper{width: 18rem}.vxe-input--panel.size--mini.type--datetime .vxe-input--panel-left-wrapper,.vxe-input--panel.size--mini.type--datetime .vxe-input--panel-right-wrapper{padding: 0.5rem}.vxe-input--panel.size--mini .vxe-input--time-picker-title{height: 1.6875rem;line-height: 1.6875rem;padding:0 0.5rem}.vxe-input--panel.size--mini .vxe-input--date-picker-btn,.vxe-input--panel.size--mini .vxe-input--date-picker-label{height: 1.6875rem;line-height: 1.6875rem}.vxe-input--panel.size--mini .vxe-input--date-picker-btn-wrapper .vxe-input--date-picker-btn{margin-left: 0.3125rem}.vxe-input--panel.size--mini .vxe-input--date-picker-btn-wrapper .vxe-input--date-picker-current-btn,.vxe-input--panel.size--mini .vxe-input--date-picker-btn-wrapper .vxe-input--date-picker-next-btn,.vxe-input--panel.size--mini .vxe-input--date-picker-btn-wrapper .vxe-input--date-picker-prev-btn{width: 1.6875rem;border-radius: 0.25rem;border: 0.0625rem solid #dcdfe6}.vxe-input--panel.size--mini .vxe-input--date-picker-type-wrapper .vxe-input--date-picker-btn,.vxe-input--panel.size--mini .vxe-input--date-picker-type-wrapper .vxe-input--date-picker-label{padding:0 0.375rem}.vxe-input--panel.size--mini .vxe-input--date-picker-header,.vxe-input--panel.size--mini .vxe-input--time-picker-header{padding-bottom: 0.3125rem}.vxe-input--panel.size--mini .vxe-input--date-picker-body table,.vxe-input--panel.size--mini .vxe-input--time-picker-body{height: 13.625rem}.vxe-input--panel.size--mini .vxe-input--time-picker-body>ul{width: 2.625rem}.vxe-input--panel.size--mini .vxe-input--time-picker-body>ul:after,.vxe-input--panel.size--mini .vxe-input--time-picker-body>ul:before{height: 6.25rem}.vxe-input--panel.size--mini .vxe-input--time-picker-body>ul>li{height: 1.625rem;padding-left: 0.375rem}.vxe-input--panel.size--mini .vxe-input--time-picker-body .vxe-input--time-picker-minute-list{left: 2.625rem}.vxe-input--panel.size--mini .vxe-input--time-picker-body .vxe-input--time-picker-second-list{left: 5.25rem}.vxe-input--panel.size--mini .vxe-input--date-day-view td,.vxe-input--panel.size--mini .vxe-input--date-week-view td{height: 2rem}.vxe-input--panel.size--mini .vxe-input--date-quarter-view td{height: 3.375rem}.vxe-input--panel.size--mini .vxe-input--date-month-view td,.vxe-input--panel.size--mini .vxe-input--date-year-view td{height: 2.625rem}.vxe-input--panel.size--mini .vxe-input--date-picker-body th{height: 1.625rem}.vxe-input--panel.size--mini .vxe-input--date-picker-confirm,.vxe-input--panel.size--mini .vxe-input--time-picker-confirm{height: 1.6875rem;padding:0 0.375rem}.vxe-input--panel.size--mini .vxe-input--date-label{line-height: 0.8125rem}.vxe-textarea{position:relative;display:inline-block}.vxe-textarea:not(.def--cols),.vxe-textarea:not(.def--cols) .vxe-textarea--inner{width:100%}.vxe-textarea--inner{border-radius: 0.25rem;outline:0;font-size:inherit;padding:0 .6em;color:#606266;line-height:inherit;border: 0.0625rem solid #dcdfe6;background-color:#fff;display:block;padding:.3em .6em}.vxe-textarea--inner::-webkit-input-placeholder{color:#c0c4cc}.vxe-textarea--inner::-moz-placeholder{color:#c0c4cc}.vxe-textarea--inner:-ms-input-placeholder{color:#c0c4cc}.vxe-textarea--inner::-ms-input-placeholder{color:#c0c4cc}.vxe-textarea--inner::placeholder{color:#c0c4cc}.vxe-textarea--inner:focus{border: 0.0625rem solid #409eff}.vxe-textarea--inner[disabled]{cursor:not-allowed;background-color:#f3f3f3}.vxe-textarea--autosize,.vxe-textarea--inner{line-height:1.5715;color:#606266;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Helvetica Neue,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol}.vxe-textarea--autosize{display:block;position:fixed;top:0;left:0;width:100%;margin:0;padding:.3em .6em;word-wrap:break-word;white-space:pre-wrap;z-index:-1;visibility:hidden}.vxe-textarea--count{position:absolute;bottom:.2em;right:1.4em;padding-left:.2em;color:#999;background-color:#fff}.vxe-textarea--count.is--error{color:#f56c6c}.vxe-textarea,.vxe-textarea--autosize,.vxe-textarea--autosize.size--medium,.vxe-textarea.size--medium{font-size: 0.875rem}.vxe-textarea--autosize.size--small,.vxe-textarea.size--small{font-size: 0.8125rem}.vxe-textarea--autosize.size--mini,.vxe-textarea.size--mini{font-size: 0.75rem}.vxe-textarea:not(.is--autosize){min-height: 2.125rem}.vxe-textarea.size--medium{font-size: 0.875rem}.vxe-textarea.size--medium:not(.is--autosize){min-height: 2rem}.vxe-textarea.size--small:not(.is--autosize){min-height: 1.875rem}.vxe-textarea.size--mini:not(.is--autosize){min-height: 1.75rem}.vxe-button{position:relative;text-align:center;background-color:#fff;outline:0;font-size: 0.875rem;max-width: 31.25rem;line-height:1.5;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.vxe-button:not(.is--disabled){color:#606266;cursor:pointer}.vxe-button.is--loading{cursor:progress}.vxe-button.is--loading:before{content:"";position:absolute;left: -0.0625rem;top: -0.0625rem;right: -0.0625rem;bottom: -0.0625rem;border-radius:inherit;background-color:hsla(0,0%,100%,.35);pointer-events:none}.vxe-button.is--disabled{color:#bfbfbf}.vxe-button.is--disabled:not(.is--loading){cursor:no-drop}.vxe-button.type--text{text-decoration:none;border:0;padding:.1em .5em;background-color:transparent}.vxe-button.type--text:not(.is--disabled):focus{color:#2f3031}.vxe-button.type--text:not(.is--disabled):hover{color:#73b8ff}.vxe-button.type--text.theme--primary{color:#409eff}.vxe-button.type--text.theme--primary:not(.is--disabled):focus{color:#0d84ff}.vxe-button.type--text.theme--primary:not(.is--disabled):hover{color:#73b8ff}.vxe-button.type--text.theme--primary.is--disabled{color:#a6d2ff}.vxe-button.type--text.theme--success{color:#67c23a}.vxe-button.type--text.theme--success:not(.is--disabled):focus{color:#529b2e}.vxe-button.type--text.theme--success:not(.is--disabled):hover{color:#85cf60}.vxe-button.type--text.theme--success.is--disabled{color:#a3db87}.vxe-button.type--text.theme--info{color:#909399}.vxe-button.type--text.theme--info:not(.is--disabled):focus{color:#767980}.vxe-button.type--text.theme--info:not(.is--disabled):hover{color:#abadb1}.vxe-button.type--text.theme--info.is--disabled{color:#c5c7ca}.vxe-button.type--text.theme--warning{color:#e6a23c}.vxe-button.type--text.theme--warning:not(.is--disabled):focus{color:#d48a1b}.vxe-button.type--text.theme--warning:not(.is--disabled):hover{color:#ecb869}.vxe-button.type--text.theme--warning.is--disabled{color:#f2cd96}.vxe-button.type--text.theme--danger{color:#f56c6c}.vxe-button.type--text.theme--danger:not(.is--disabled):focus{color:#f23c3c}.vxe-button.type--text.theme--danger:not(.is--disabled):hover{color:#f89c9c}.vxe-button.type--text.theme--danger.is--disabled{color:#fbcccc}.vxe-button.type--text.theme--perfect{color:#f8f8f9}.vxe-button.type--text.theme--perfect:not(.is--disabled):focus{color:#dddde1}.vxe-button.type--text.theme--perfect.is--disabled,.vxe-button.type--text.theme--perfect:not(.is--disabled):hover{color:#fff}.vxe-button.type--button{font-family:inherit;height: 2.125rem;line-height:1;border: 0.0625rem solid #dcdfe6}.vxe-button.type--button.is--round{border-radius: 1.0625rem}.vxe-button.type--button:not(.is--round){border-radius: 0.25rem}.vxe-button.type--button.is--circle{padding:0 .5em;min-width: 2.125rem;border-radius:50%}.vxe-button.type--button:not(.is--circle){padding:0 1em}.vxe-button.type--button:not(.is--disabled):hover{color:#5faeff}.vxe-button.type--button:not(.is--disabled):focus{border-color:#409eff}.vxe-button.type--button:not(.is--disabled):active{color:#3196ff;border-color:#3196ff;background-color:#f7f7f7}.vxe-button.type--button.theme--primary{color:#fff}.vxe-button.type--button.theme--primary:not(.is--disabled){border-color:#409eff;background-color:#409eff}.vxe-button.type--button.theme--primary:not(.is--disabled):hover{color:#fff;background-color:#5faeff;border-color:#5faeff}.vxe-button.type--button.theme--primary:not(.is--disabled):active{color:#fff;background-color:#3196ff;border-color:#3196ff}.vxe-button.type--button.theme--primary.is--disabled{border-color:#a6d2ff;background-color:#a6d2ff}.vxe-button.type--button.theme--primary.is--loading{border-color:#409eff;background-color:#409eff}.vxe-button.type--button.theme--success{color:#fff}.vxe-button.type--button.theme--success:not(.is--disabled){border-color:#67c23a;background-color:#67c23a}.vxe-button.type--button.theme--success:not(.is--disabled):hover{color:#fff;background-color:#79cb50;border-color:#79cb50}.vxe-button.type--button.theme--success:not(.is--disabled):active{color:#fff;background-color:#61b636;border-color:#61b636}.vxe-button.type--button.theme--success.is--disabled{border-color:#a3db87;background-color:#a3db87}.vxe-button.type--button.theme--success.is--loading{border-color:#67c23a;background-color:#67c23a}.vxe-button.type--button.theme--info{color:#fff}.vxe-button.type--button.theme--info:not(.is--disabled){border-color:#909399;background-color:#909399}.vxe-button.type--button.theme--info:not(.is--disabled):hover{color:#fff;background-color:#a0a3a8;border-color:#a0a3a8}.vxe-button.type--button.theme--info:not(.is--disabled):active{color:#fff;background-color:#888b92;border-color:#888b92}.vxe-button.type--button.theme--info.is--disabled{border-color:#c5c7ca;background-color:#c5c7ca}.vxe-button.type--button.theme--info.is--loading{border-color:#909399;background-color:#909399}.vxe-button.type--button.theme--warning{color:#fff}.vxe-button.type--button.theme--warning:not(.is--disabled){border-color:#e6a23c;background-color:#e6a23c}.vxe-button.type--button.theme--warning:not(.is--disabled):hover{color:#fff;background-color:#e9af57;border-color:#e9af57}.vxe-button.type--button.theme--warning:not(.is--disabled):active{color:#fff;background-color:#e49c2e;border-color:#e49c2e}.vxe-button.type--button.theme--warning.is--disabled{border-color:#f2cd96;background-color:#f2cd96}.vxe-button.type--button.theme--warning.is--loading{border-color:#e6a23c;background-color:#e6a23c}.vxe-button.type--button.theme--danger{color:#fff}.vxe-button.type--button.theme--danger:not(.is--disabled){border-color:#f56c6c;background-color:#f56c6c}.vxe-button.type--button.theme--danger:not(.is--disabled):hover{color:#fff;background-color:#f78989;border-color:#f78989}.vxe-button.type--button.theme--danger:not(.is--disabled):active{color:#fff;background-color:#f45e5e;border-color:#f45e5e}.vxe-button.type--button.theme--danger.is--disabled{border-color:#fbcccc;background-color:#fbcccc}.vxe-button.type--button.theme--danger.is--loading{border-color:#f56c6c;background-color:#f56c6c}.vxe-button.type--button.theme--perfect{color:#606266}.vxe-button.type--button.theme--perfect:not(.is--disabled){border-color:#f8f8f9;background-color:#f8f8f9}.vxe-button.type--button.theme--perfect:not(.is--disabled):hover{color:#606266;background-color:#fff;border-color:#fff}.vxe-button.type--button.theme--perfect:not(.is--disabled):active{color:#606266;background-color:#f0f0f2;border-color:#f0f0f2}.vxe-button.type--button.theme--perfect.is--disabled{border-color:#fff;background-color:#fff}.vxe-button.type--button.theme--perfect.is--loading{border-color:#f8f8f9;background-color:#f8f8f9}.vxe-button.size--medium{font-size: 0.875rem}.vxe-button.size--medium.type--button{height: 2rem}.vxe-button.size--medium.type--button.is--circle{min-width: 2rem}.vxe-button.size--medium.type--button.is--round{border-radius: 1rem}.vxe-button.size--medium .vxe-button--icon,.vxe-button.size--medium .vxe-button--loading-icon{min-width: 0.875rem}.vxe-button.size--small{font-size: 0.8125rem}.vxe-button.size--small.type--button{height: 1.875rem}.vxe-button.size--small.type--button.is--circle{min-width: 1.875rem}.vxe-button.size--small.type--button.is--round{border-radius: 0.9375rem}.vxe-button.size--small .vxe-button--icon,.vxe-button.size--small .vxe-button--loading-icon{min-width: 0.8125rem}.vxe-button.size--mini{font-size: 0.75rem}.vxe-button.size--mini.type--button{height: 1.75rem}.vxe-button.size--mini.type--button.is--circle{min-width: 1.75rem}.vxe-button.size--mini.type--button.is--round{border-radius: 0.875rem}.vxe-button.size--mini .vxe-button--icon,.vxe-button.size--mini .vxe-button--loading-icon{min-width: 0.75rem}.vxe-button+.vxe-button,.vxe-button+.vxe-button--dropdown,.vxe-input+.vxe-button,.vxe-input+.vxe-button--dropdown{margin-left: 0.75rem}.vxe-button--icon,.vxe-button--loading-icon{min-width: 0.875rem}.vxe-button--icon+.vxe-button--content,.vxe-button--loading-icon+.vxe-button--content{margin-left: 0.25rem}.vxe-button--dropdown,.vxe-button--wrapper{display:inline-block}.vxe-button--dropdown{position:relative}.vxe-button--dropdown+.vxe-button,.vxe-button--dropdown+.vxe-button--dropdown{margin-left: 0.75rem}.vxe-button--dropdown>.vxe-button.type--button.theme--danger,.vxe-button--dropdown>.vxe-button.type--button.theme--info,.vxe-button--dropdown>.vxe-button.type--button.theme--primary,.vxe-button--dropdown>.vxe-button.type--button.theme--success,.vxe-button--dropdown>.vxe-button.type--button.theme--warning{color:#fff}.vxe-button--dropdown>.vxe-button.type--button.theme--perfect{color:#606266}.vxe-button--dropdown.is--active>.vxe-button:not(.is--disabled){color:#5faeff}.vxe-button--dropdown.is--active>.vxe-button.type--text.theme--primary{color:#73b8ff}.vxe-button--dropdown.is--active>.vxe-button.type--text.theme--success{color:#85cf60}.vxe-button--dropdown.is--active>.vxe-button.type--text.theme--info{color:#abadb1}.vxe-button--dropdown.is--active>.vxe-button.type--text.theme--warning{color:#ecb869}.vxe-button--dropdown.is--active>.vxe-button.type--text.theme--danger{color:#f89c9c}.vxe-button--dropdown.is--active>.vxe-button.type--text.theme--perfect{color:#fff}.vxe-button--dropdown.is--active>.vxe-button.type--button.theme--primary{color:#fff;background-color:#5faeff;border-color:#5faeff}.vxe-button--dropdown.is--active>.vxe-button.type--button.theme--success{color:#fff;background-color:#79cb50;border-color:#79cb50}.vxe-button--dropdown.is--active>.vxe-button.type--button.theme--info{color:#fff;background-color:#a0a3a8;border-color:#a0a3a8}.vxe-button--dropdown.is--active>.vxe-button.type--button.theme--warning{color:#fff;background-color:#e9af57;border-color:#e9af57}.vxe-button--dropdown.is--active>.vxe-button.type--button.theme--danger{color:#fff;background-color:#f78989;border-color:#f78989}.vxe-button--dropdown.is--active>.vxe-button.type--button.theme--perfect{color:#606266;background-color:#fff;border-color:#fff}.vxe-button--dropdown.is--active .vxe-button--dropdown-arrow{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.vxe-button--dropdown-arrow{display:inline-block;font-size: 0.75rem;margin-left: 0.25rem;-webkit-transition:-webkit-transform .2s ease-in-out;transition:-webkit-transform .2s ease-in-out;transition:transform .2s ease-in-out;transition:transform .2s ease-in-out,-webkit-transform .2s ease-in-out}.vxe-button--dropdown-panel{display:none;position:absolute;right:0;padding: 0.25rem 0}.vxe-button--dropdown-panel.animat--leave{display:block;opacity:0;-webkit-transform:scaleY(.5);transform:scaleY(.5);-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);-webkit-transform-origin:center top;transform-origin:center top;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}.vxe-button--dropdown-panel.animat--leave[placement=top]{-webkit-transform-origin:center bottom;transform-origin:center bottom}.vxe-button--dropdown-panel.animat--enter{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1)}.vxe-button--dropdown-wrapper{padding: 0.3125rem;background-color:#fff;border-radius: 0.25rem;border: 0.0625rem solid #dcdfe6;-webkit-box-shadow:0 0.0625rem 0.375rem rgba(0,0,0,.2);box-shadow:0 0.0625rem 0.375rem rgba(0,0,0,.2)}.vxe-button--dropdown-wrapper>.vxe-button{margin-left:0;margin-top:.4em;display:block;width:100%;border:0}.vxe-button--dropdown-wrapper>.vxe-button.type--text{padding: 0.125rem 0.5rem}.vxe-button--dropdown-wrapper>.vxe-button:first-child{margin-top:0}.vxe-button--dropdown-wrapper>.vxe-button:last-child{margin-bottom:0}.vxe-modal--wrapper{display:none;position:fixed;top:0;left:0;line-height:1.5;width:calc(100% + 1.125rem);height:calc(100% + 1.125rem);color:#606266;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Helvetica Neue,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;-webkit-transition:top .4s ease-in-out;transition:top .4s ease-in-out}.vxe-modal--wrapper.is--active{display:block}.vxe-modal--wrapper.is--visible.is--mask:before{background-color:rgba(0,0,0,.5)}.vxe-modal--wrapper.is--visible.type--message .vxe-modal--box{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}.vxe-modal--wrapper.is--visible .vxe-modal--box{opacity:1;visibility:visible}.vxe-modal--wrapper.is--loading .vxe-modal--footer,.vxe-modal--wrapper.is--loading .vxe-modal--header{position:relative;border-bottom-color:hsla(0,0%,100%,.5)}.vxe-modal--wrapper.is--loading .vxe-modal--footer:before,.vxe-modal--wrapper.is--loading .vxe-modal--header:before{content:"";position:absolute;top:0;left:0;width:100%;height:100%;z-index:1;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:hsla(0,0%,100%,.5)}.vxe-modal--wrapper:not(.lock--view){pointer-events:none}.vxe-modal--wrapper:not(.type--message).lock--scroll{overflow:hidden}.vxe-modal--wrapper:not(.type--message):not(.lock--scroll){overflow:auto}.vxe-modal--wrapper.is--mask:before,.vxe-modal--wrapper.lock--view:before{content:"";position:fixed;top:0;left:0;width:100%;height:100%;z-index:-1;pointer-events:auto}.vxe-modal--wrapper.is--mask:before{background-color:transparent}.vxe-modal--wrapper.is--animat.is--mask:before{-webkit-transition:background-color .2s ease-in-out;transition:background-color .2s ease-in-out}.vxe-modal--wrapper.is--animat.type--message .vxe-modal--box:not(.is--drag){-webkit-transition:all .4s ease-out;transition:all .4s ease-out}.vxe-modal--wrapper.type--alert .vxe-modal--body,.vxe-modal--wrapper.type--confirm .vxe-modal--body,.vxe-modal--wrapper.type--message .vxe-modal--body{white-space:normal;word-break:break-word}.vxe-modal--wrapper.type--message{text-align:center}.vxe-modal--wrapper.type--message .vxe-modal--box{display:inline-block;padding: 0.125rem 0;margin-top:0;width:auto;-webkit-box-shadow:0 0 0.5rem 0 rgba(0,0,0,.1);box-shadow:0 0 0.5rem 0 rgba(0,0,0,.1);opacity:0;-webkit-transform:translateY(-100%);transform:translateY(-100%)}.vxe-modal--wrapper.type--message .vxe-modal--box .vxe-modal--body:after{content:"";display:block;clear:both;height:0;overflow:hidden;visibility:hidden}.vxe-modal--wrapper.type--message .vxe-modal--box .vxe-modal--content{max-width: 50rem;float:left}.vxe-modal--wrapper.type--message .vxe-modal--status-wrapper{font-size:1.4em;padding-left: 0.625rem}.vxe-modal--wrapper.type--alert .vxe-modal--box,.vxe-modal--wrapper.type--confirm .vxe-modal--box,.vxe-modal--wrapper.type--modal .vxe-modal--box{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;position:fixed;left:50%;top:0;-webkit-box-shadow:0 0 0.625rem 0 rgba(0,0,0,.2);box-shadow:0 0 0.625rem 0 rgba(0,0,0,.2)}.vxe-modal--wrapper.type--alert .vxe-modal--body,.vxe-modal--wrapper.type--alert .vxe-modal--body .vxe-modal--content,.vxe-modal--wrapper.type--confirm .vxe-modal--body,.vxe-modal--wrapper.type--confirm .vxe-modal--body .vxe-modal--content,.vxe-modal--wrapper.type--modal .vxe-modal--body,.vxe-modal--wrapper.type--modal .vxe-modal--body .vxe-modal--content{overflow:auto}.vxe-modal--wrapper.type--alert .vxe-modal--status-wrapper,.vxe-modal--wrapper.type--confirm .vxe-modal--status-wrapper{font-size:1.6em;padding-left: 0.625rem}.vxe-modal--wrapper .vxe-modal--box{visibility:hidden;width: 26.25rem;background-color:#fff;border-radius: 0.25rem;border: 0.0625rem solid #ebeef5;text-align:left;pointer-events:auto;opacity:0}.vxe-modal--wrapper .vxe-modal--box.is--drag{cursor:move}.vxe-modal--wrapper .vxe-modal--box.is--drag .vxe-modal--body:after,.vxe-modal--wrapper .vxe-modal--box.is--drag .vxe-modal--footer:after{content:"";position:absolute;top:0;left:0;width:100%;height:100%}.vxe-modal--wrapper .vxe-modal--box.is--drag .vxe-modal--body,.vxe-modal--wrapper .vxe-modal--box.is--drag .vxe-modal--body .vxe-modal--content{overflow:hidden}.vxe-modal--wrapper.status--info .vxe-modal--status-wrapper{color:#909399}.vxe-modal--wrapper.status--question .vxe-modal--status-wrapper,.vxe-modal--wrapper.status--warning .vxe-modal--status-wrapper{color:#e6a23c}.vxe-modal--wrapper.status--success .vxe-modal--status-wrapper{color:#67c23a}.vxe-modal--wrapper.status--error .vxe-modal--status-wrapper{color:#f56c6c}.vxe-modal--wrapper.status--loading .vxe-modal--status-wrapper{color:#bfbfbf}.vxe-modal--wrapper .vxe-modal--status-wrapper{-ms-flex-negative:0;flex-shrink:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.vxe-modal--wrapper .vxe-modal--content{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;padding:.8em 1em;white-space:pre-line}.vxe-modal--wrapper .vxe-modal--body,.vxe-modal--wrapper .vxe-modal--footer,.vxe-modal--wrapper .vxe-modal--header{position:relative}.vxe-modal--wrapper .vxe-modal--body{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.vxe-modal--wrapper .vxe-modal--header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-negative:0;flex-shrink:0;font-size:1.1em;font-weight:700;border-bottom: 0.0625rem solid #ebeef5;background-color:#f8f8f8;border-radius: 0.25rem 0.25rem 0 0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.vxe-modal--wrapper .vxe-modal--header.is--draggable .vxe-modal--header-title{cursor:move}.vxe-modal--wrapper .vxe-modal--header.is--ellipsis .vxe-modal--header-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vxe-modal--wrapper .vxe-modal--header-title{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;padding:.6em 0 .6em 1em}.vxe-modal--wrapper .vxe-modal--header-right{-ms-flex-negative:0;flex-shrink:0;padding:.6em 1em .6em 0}.vxe-modal--wrapper .vxe-modal--close-btn,.vxe-modal--wrapper .vxe-modal--zoom-btn{cursor:pointer;margin-left:.6em}.vxe-modal--wrapper .vxe-modal--close-btn:hover,.vxe-modal--wrapper .vxe-modal--zoom-btn:hover{color:#409eff}.vxe-modal--wrapper .vxe-modal--footer{-ms-flex-negative:0;flex-shrink:0;text-align:right;padding:.4em 1em .8em 1em}.vxe-modal--wrapper.is--maximize .vxe-modal--box .vxe-modal--header{cursor:default}.vxe-modal--wrapper.is--maximize .vxe-modal--resize .sb-resize,.vxe-modal--wrapper.is--maximize .vxe-modal--resize .selb-resize,.vxe-modal--wrapper.is--maximize .vxe-modal--resize .sest-resize,.vxe-modal--wrapper.is--maximize .vxe-modal--resize .st-resize,.vxe-modal--wrapper.is--maximize .vxe-modal--resize .swlb-resize,.vxe-modal--wrapper.is--maximize .vxe-modal--resize .swst-resize,.vxe-modal--wrapper.is--maximize .vxe-modal--resize .wl-resize,.vxe-modal--wrapper.is--maximize .vxe-modal--resize .wr-resize{display:none}.vxe-modal--wrapper .vxe-modal--resize .sb-resize,.vxe-modal--wrapper .vxe-modal--resize .selb-resize,.vxe-modal--wrapper .vxe-modal--resize .sest-resize,.vxe-modal--wrapper .vxe-modal--resize .st-resize,.vxe-modal--wrapper .vxe-modal--resize .swlb-resize,.vxe-modal--wrapper .vxe-modal--resize .swst-resize,.vxe-modal--wrapper .vxe-modal--resize .wl-resize,.vxe-modal--wrapper .vxe-modal--resize .wr-resize{position:absolute;z-index:100}.vxe-modal--wrapper .vxe-modal--resize .wl-resize,.vxe-modal--wrapper .vxe-modal--resize .wr-resize{width: 0.5rem;height:100%;top:0;cursor:w-resize}.vxe-modal--wrapper .vxe-modal--resize .wl-resize{left: -0.3125rem}.vxe-modal--wrapper .vxe-modal--resize .wr-resize{right: -0.3125rem}.vxe-modal--wrapper .vxe-modal--resize .selb-resize,.vxe-modal--wrapper .vxe-modal--resize .sest-resize,.vxe-modal--wrapper .vxe-modal--resize .swlb-resize,.vxe-modal--wrapper .vxe-modal--resize .swst-resize{width: 0.625rem;height: 0.625rem;z-index:101}.vxe-modal--wrapper .vxe-modal--resize .sest-resize,.vxe-modal--wrapper .vxe-modal--resize .swst-resize{top: -0.5rem}.vxe-modal--wrapper .vxe-modal--resize .selb-resize,.vxe-modal--wrapper .vxe-modal--resize .swlb-resize{bottom: -0.5rem}.vxe-modal--wrapper .vxe-modal--resize .sest-resize,.vxe-modal--wrapper .vxe-modal--resize .swlb-resize{cursor:sw-resize}.vxe-modal--wrapper .vxe-modal--resize .selb-resize,.vxe-modal--wrapper .vxe-modal--resize .swst-resize{cursor:se-resize}.vxe-modal--wrapper .vxe-modal--resize .swlb-resize,.vxe-modal--wrapper .vxe-modal--resize .swst-resize{left: -0.5rem}.vxe-modal--wrapper .vxe-modal--resize .selb-resize,.vxe-modal--wrapper .vxe-modal--resize .sest-resize{right: -0.5rem}.vxe-modal--wrapper .vxe-modal--resize .sb-resize,.vxe-modal--wrapper .vxe-modal--resize .st-resize{width:100%;height: 0.5rem;left:0;cursor:s-resize}.vxe-modal--wrapper .vxe-modal--resize .st-resize{top: -0.3125rem}.vxe-modal--wrapper .vxe-modal--resize .sb-resize{bottom: -0.3125rem}.vxe-modal--wrapper,.vxe-modal--wrapper.size--medium{font-size: 0.875rem}.vxe-modal--wrapper.size--small{font-size: 0.8125rem}.vxe-modal--wrapper.size--mini{font-size: 0.75rem}.vxe-table--tooltip-wrapper{display:none;position:absolute;top:-100%;left:-100%;font-size: 0.75rem;max-width: 37.5rem;border-radius: 0.25rem;padding: 0.5rem 0.75rem;white-space:normal;word-break:break-word;-webkit-box-shadow: 0.125rem 0.125rem 0.25rem -0.125rem rgba(0,0,0,.2);box-shadow: 0.125rem 0.125rem 0.25rem -0.125rem rgba(0,0,0,.2);color:#606266;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Helvetica Neue,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol}.vxe-table--tooltip-wrapper:not(.is--enterable){pointer-events:none}.vxe-table--tooltip-wrapper.is--arrow .vxe-table--tooltip-arrow,.vxe-table--tooltip-wrapper.is--visible{display:block}.vxe-table--tooltip-wrapper.is--enterable:after{content:"";position:absolute;left:0;width:100%;height: 0.375rem;background-color:transparent}.vxe-table--tooltip-wrapper .vxe-table--tooltip-content{white-space:pre-line}.vxe-table--tooltip-wrapper .vxe-table--tooltip-arrow{display:none;position:absolute;border-color:transparent;border-width: 0.375rem;border-style:solid;left:50%;-webkit-transform:translateX( -0.375rem);transform:translateX( -0.375rem)}.vxe-table--tooltip-wrapper .vxe-table--tooltip-arrow:before{content:"";position:absolute;border-color:transparent;border-width: 0.3125rem;border-style:solid;left: -0.3125rem}.vxe-table--tooltip-wrapper.placement--top.is--enterable:after{bottom: -0.375rem}.vxe-table--tooltip-wrapper.placement--top .vxe-table--tooltip-arrow{bottom: -0.75rem}.vxe-table--tooltip-wrapper.placement--top .vxe-table--tooltip-arrow:before{top: -0.4375rem}.vxe-table--tooltip-wrapper.placement--bottom.is--enterable:after{top: -0.375rem}.vxe-table--tooltip-wrapper.placement--bottom .vxe-table--tooltip-arrow{top: -0.75rem}.vxe-table--tooltip-wrapper.placement--bottom .vxe-table--tooltip-arrow:before{top: -0.25rem}.vxe-table--tooltip-wrapper.theme--light{background-color:#fff;border: 0.0625rem solid #dcdfe6}.vxe-table--tooltip-wrapper.theme--light.placement--top .vxe-table--tooltip-arrow{border-top-color:#dcdfe6}.vxe-table--tooltip-wrapper.theme--light.placement--top .vxe-table--tooltip-arrow:before{border-top-color:#fff}.vxe-table--tooltip-wrapper.theme--light.placement--bottom .vxe-table--tooltip-arrow{border-bottom-color:#dcdfe6}.vxe-table--tooltip-wrapper.theme--light.placement--bottom .vxe-table--tooltip-arrow:before{border-bottom-color:#fff}.vxe-table--tooltip-wrapper.theme--dark{background:#303133;color:#fff}.vxe-table--tooltip-wrapper.theme--dark.placement--top .vxe-table--tooltip-arrow,.vxe-table--tooltip-wrapper.theme--dark.placement--top .vxe-table--tooltip-arrow:before{border-top-color:#303133}.vxe-table--tooltip-wrapper.theme--dark.placement--bottom .vxe-table--tooltip-arrow,.vxe-table--tooltip-wrapper.theme--dark.placement--bottom .vxe-table--tooltip-arrow:before{border-bottom-color:#303133}.vxe-table--tooltip-wrapper.vxe-table--valid-error{background-color:#f56c6c;color:#fff}.vxe-form--item .vxe-default-input[type=reset]:hover,.vxe-form--item .vxe-default-input[type=submit]:hover{color:#5faeff;border-color:#73b8ff}.vxe-form{position:relative;font-size: 0.875rem;color:#606266;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Helvetica Neue,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;background-color:#fff;text-align:left}.vxe-form-slots{display:none}.vxe-form--item-content,.vxe-form--item-trigger-node{display:inline-block;vertical-align:middle}.vxe-form--item-title{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;max-width: 20rem;padding-right:.8em}.vxe-form--item-title.is--ellipsis .vxe-form--item-title-content{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vxe-form--item-title .vxe-form--item-title-postfix,.vxe-form--item-title .vxe-form--item-title-prefix,.vxe-form--item-title .vxe-form--item-title-suffix{-ms-flex-negative:0;flex-shrink:0}.vxe-form--item-title .vxe-form--item-title-prefix,.vxe-form--item-title .vxe-form--item-title-suffix{cursor:help;vertical-align:middle}.vxe-form--item-title .vxe-form--item-title-prefix{margin-right:.25em}.vxe-form--item-title .vxe-form--item-title-suffix{margin-left:.2em}.vxe-form--item-title .vxe-form--item-title-postfix{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.vxe-form--item-title .vxe-form--item-title-content{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.vxe-form--item-title .vxe-form--item-title-label{vertical-align:middle}.vxe-form--item-trigger-node{font-size: 0.75rem;min-width: 6.25rem;color:#909399;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer}.vxe-form--item-trigger-node .vxe-form--item-trigger-icon{display:inline-block;margin:0 .25em;-webkit-transition:all .1s;transition:all .1s}.vxe-form--item-valid{position:absolute;width:100%;font-size: 0.75rem;line-height:1.2em;color:#f56c6c;background-color:inherit;z-index:1;opacity:0;-webkit-transform-origin:center top;transform-origin:center top;-webkit-transform:scaleY(0);transform:scaleY(0);-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.vxe-form .vxe-form--gather{display:inline-block}.vxe-form .vxe-form--item{display:none;padding:.5em .8em .5em 0}.vxe-form .vxe-form--item.is--active:not(.is--hidden){display:inline-block}.vxe-form--item.is--colon .vxe-form--item-title-postfix:after{content:":";font-weight:400;margin-left:.2em}.vxe-form--item.is--asterisk.is--required .vxe-form--item-title-content:before{content:"*";color:#f56c6c;font-family:Verdana,Arial,Tahoma;margin-right:.2em;font-weight:400;vertical-align:middle}.vxe-form--item.is--span .vxe-default-input:not([type=submit]):not([type=reset]),.vxe-form--item.is--span .vxe-default-select,.vxe-form--item.is--span .vxe-default-textarea,.vxe-form--item.is--span .vxe-input,.vxe-form--item.is--span .vxe-select,.vxe-form--item.is--span .vxe-textarea{width:100%}.vxe-form--item.is--error .vxe-default-input,.vxe-form--item.is--error .vxe-default-input[type=search]:focus,.vxe-form--item.is--error .vxe-default-input[type=text]:focus,.vxe-form--item.is--error .vxe-default-select,.vxe-form--item.is--error .vxe-default-select:focus,.vxe-form--item.is--error .vxe-default-textarea,.vxe-form--item.is--error .vxe-default-textarea:focus,.vxe-form--item.is--error .vxe-input>.vxe-input--inner,.vxe-form--item.is--error .vxe-input>.vxe-input--inner:focus,.vxe-form--item.is--error .vxe-select,.vxe-form--item.is--error .vxe-select.is--active>.vxe-input .vxe-input--inner,.vxe-form--item.is--error .vxe-textarea>.vxe-textarea--inner,.vxe-form--item.is--error .vxe-textarea>.vxe-textarea--inner:focus{border-color:#f56c6c}.vxe-form--item.is--error .vxe-form--item-valid{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1)}.vxe-form--item .vxe-form--item-inner{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.vxe-form--item .vxe-form--item-inner .vxe-form--item-title{-ms-flex-negative:0;flex-shrink:0}.vxe-form--item .vxe-form--item-inner .vxe-form--item-content{position:relative;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;word-break:break-all}.vxe-form--item .vxe-default-input,.vxe-form--item .vxe-default-select,.vxe-form--item .vxe-default-textarea{outline:0;border: 0.0625rem solid #dcdfe6;border-radius: 0.25rem}.vxe-form--item .vxe-default-input,.vxe-form--item .vxe-default-select{height: 2.125rem}.vxe-form--item .vxe-default-input{padding:0 .8em}.vxe-form--item .vxe-default-textarea{padding:.3em .6em}.vxe-form--item .vxe-default-input[type=number]{padding-right:.2em}.vxe-form--item .vxe-default-input[type=search],.vxe-form--item .vxe-default-input[type=text]{padding:0 1em}.vxe-form--item .vxe-default-input[type=search],.vxe-form--item .vxe-default-input[type=text],.vxe-form--item .vxe-default-select,.vxe-form--item .vxe-default-textarea{color:#606266}.vxe-form--item .vxe-default-input[type=search]:focus,.vxe-form--item .vxe-default-input[type=text]:focus,.vxe-form--item .vxe-default-select:focus,.vxe-form--item .vxe-default-textarea:focus{border: 0.0625rem solid #409eff}.vxe-form--item .vxe-default-input[type=search][disabled],.vxe-form--item .vxe-default-input[type=text][disabled],.vxe-form--item .vxe-default-select[disabled],.vxe-form--item .vxe-default-textarea[disabled]{cursor:not-allowed;background-color:#f3f3f3}.vxe-form--item .vxe-default-input[type=reset],.vxe-form--item .vxe-default-input[type=submit]{line-height: 2rem;background-color:#fff;cursor:pointer}.vxe-form--item .vxe-default-input[type=reset]:active,.vxe-form--item .vxe-default-input[type=submit]:active{color:#3699ff;border-color:#3699ff}.vxe-form--item .vxe-default-input[type=date]::-webkit-inner-spin-button{margin-top: 0.375rem}.vxe-form--item .vxe-default-input[type=date]::-webkit-inner-spin-button,.vxe-form--item .vxe-default-input[type=number]::-webkit-inner-spin-button{height: 1.5rem}.vxe-form--item .vxe-default-input::-webkit-input-placeholder{color:#c0c4cc}.vxe-form--item .vxe-default-input::-moz-placeholder{color:#c0c4cc}.vxe-form--item .vxe-default-input:-ms-input-placeholder{color:#c0c4cc}.vxe-form--item .vxe-default-input::-ms-input-placeholder{color:#c0c4cc}.vxe-form--item .vxe-default-input::placeholder{color:#c0c4cc}.vxe-form--item .vxe-default-input[type=search],.vxe-form--item .vxe-default-input[type=text],.vxe-form--item .vxe-default-select,.vxe-form--item .vxe-default-textarea{width: 11.25rem}.vxe-form--item .vxe-default-textarea{resize:none;vertical-align:middle}.vxe-form--item .vxe-default-textarea::-webkit-input-placeholder{color:#c0c4cc}.vxe-form--item .vxe-default-textarea::-moz-placeholder{color:#c0c4cc}.vxe-form--item .vxe-default-textarea:-ms-input-placeholder{color:#c0c4cc}.vxe-form--item .vxe-default-textarea::-ms-input-placeholder{color:#c0c4cc}.vxe-form--item .vxe-default-textarea::placeholder{color:#c0c4cc}.vxe-form .vxe-form--item-inner{min-height: 2.25rem}.vxe-form .vxe-form--item-inner>.align--center{text-align:center}.vxe-form .vxe-form--item-inner>.align--left{text-align:left}.vxe-form .vxe-form--item-inner>.align--right{text-align:right}.vxe-form.size--medium{font-size: 0.875rem}.vxe-form.size--medium .vxe-form--item-inner{min-height: 2.125rem}.vxe-form.size--medium .vxe-default-input[type=reset],.vxe-form.size--medium .vxe-default-input[type=submit]{line-height: 1.875rem}.vxe-form.size--medium .vxe-default-input,.vxe-form.size--medium .vxe-default-select{height: 2rem}.vxe-form.size--small{font-size: 0.8125rem}.vxe-form.size--small .vxe-form--item-inner{min-height: 2rem}.vxe-form.size--small .vxe-default-input[type=reset],.vxe-form.size--small .vxe-default-input[type=submit]{line-height: 1.75rem}.vxe-form.size--small .vxe-default-input,.vxe-form.size--small .vxe-default-select{height: 1.875rem}.vxe-form.size--mini{font-size: 0.75rem}.vxe-form.size--mini .vxe-form--item-inner{min-height: 1.875rem}.vxe-form.size--mini .vxe-default-input[type=reset],.vxe-form.size--mini .vxe-default-input[type=submit]{line-height: 1.625rem}.vxe-form.size--mini .vxe-default-input,.vxe-form.size--mini .vxe-default-select{height: 1.75rem}.vxe-select{position:relative;display:inline-block;width: 11.25rem;color:#606266;text-align:left}.vxe-select>.vxe-input .vxe-input--inner{cursor:pointer}.vxe-select.is--disabled>.vxe-input .vxe-input--inner{cursor:no-drop}.vxe-select.is--loading>.vxe-input .vxe-input--inner{cursor:progress}.vxe-select>.vxe-input{width:100%}.vxe-select>.vxe-input .vxe-input--suffix-icon{display:inline-block;-webkit-transition:-webkit-transform .2s ease-in-out;transition:-webkit-transform .2s ease-in-out;transition:transform .2s ease-in-out;transition:transform .2s ease-in-out,-webkit-transform .2s ease-in-out}.vxe-select.is--active:not(.is--filter)>.vxe-input .vxe-input--inner{border: 0.0625rem solid #409eff}.vxe-select-slots{display:none}.vxe-select--panel{display:none;position:absolute;left:0;padding: 0.25rem 0;color:#606266;text-align:left}.vxe-select--panel:not(.is--transfer){min-width:100%}.vxe-select--panel.is--transfer{position:fixed}.vxe-select--panel.animat--leave{display:block;opacity:0;-webkit-transform:scaleY(.5);transform:scaleY(.5);-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);-webkit-transform-origin:center top;transform-origin:center top;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}.vxe-select--panel.animat--leave[placement=top]{-webkit-transform-origin:center bottom;transform-origin:center bottom}.vxe-select--panel.animat--enter{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1)}.vxe-select-filter--wrapper{display:block}.vxe-select-filter--wrapper .vxe-select-filter--input{width:100%}.vxe-select-option--wrapper{position:relative;overflow-x:hidden;overflow-y:auto;padding: 0.25rem 0;max-height: 12.5rem;border-radius: 0.25rem;border: 0.0625rem solid #dadce0;-webkit-box-shadow:0 0 0.375rem 0.125rem rgba(0,0,0,.1);box-shadow:0 0 0.375rem 0.125rem rgba(0,0,0,.1);background-color:#fff}.vxe-optgroup .vxe-optgroup--title{padding:0 0.375rem;color:#909399;font-size: 0.75rem}.vxe-optgroup--wrapper .vxe-select-option{padding:0 1.25rem}.vxe-select-option{padding:0 .6em;max-width: 37.5rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.vxe-select-option.is--selected{font-weight:700;color:#409eff}.vxe-select-option:not(.is--disabled){cursor:pointer}.vxe-select-option:not(.is--disabled).is--hover{background-color:#f5f7fa}.vxe-select-option.is--disabled{color:#bfbfbf;cursor:no-drop}.vxe-select--search-icon{margin-right:.5em}.vxe-select--empty-placeholder,.vxe-select--search-loading{padding:0 .6em;text-align:center;color:#c0c4cc}.vxe-select,.vxe-select--panel,.vxe-select--panel.size--medium,.vxe-select.size--medium{font-size: 0.875rem}.vxe-select--panel.size--small,.vxe-select.size--small{font-size: 0.8125rem}.vxe-select--panel.size--mini,.vxe-select.size--mini{font-size: 0.75rem}.vxe-select--panel .vxe-optgroup--title,.vxe-select--panel .vxe-select-option{height: 1.875rem}.vxe-select--panel .vxe-optgroup--title,.vxe-select--panel .vxe-select--empty-placeholder,.vxe-select--panel .vxe-select--search-loading,.vxe-select--panel .vxe-select-option{line-height: 1.875rem}.vxe-select--panel.size--medium .vxe-optgroup--title,.vxe-select--panel.size--medium .vxe-select-option{height: 1.75rem}.vxe-select--panel.size--medium .vxe-optgroup--title,.vxe-select--panel.size--medium .vxe-select--empty-placeholder,.vxe-select--panel.size--medium .vxe-select--search-loading,.vxe-select--panel.size--medium .vxe-select-option{line-height: 1.75rem}.vxe-select--panel.size--small .vxe-optgroup--title,.vxe-select--panel.size--small .vxe-select-option{height: 1.625rem}.vxe-select--panel.size--small .vxe-optgroup--title,.vxe-select--panel.size--small .vxe-select--empty-placeholder,.vxe-select--panel.size--small .vxe-select--search-loading,.vxe-select--panel.size--small .vxe-select-option{line-height: 1.625rem}.vxe-select--panel.size--mini .vxe-optgroup--title,.vxe-select--panel.size--mini .vxe-select-option{height: 1.5rem}.vxe-select--panel.size--mini .vxe-optgroup--title,.vxe-select--panel.size--mini .vxe-select--empty-placeholder,.vxe-select--panel.size--mini .vxe-select--search-loading,.vxe-select--panel.size--mini .vxe-select-option{line-height: 1.5rem}.vxe-switch{display:inline-block;color:#606266;vertical-align:middle;padding:.4em;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-align:center}.vxe-switch.is--animat .vxe-switch--button{-webkit-transition:border-color .3s,background-color .3s;transition:border-color .3s,background-color .3s}.vxe-switch.is--animat .vxe-switch--icon{-webkit-transition:all .3s;transition:all .3s}.vxe-switch.is--on .vxe-switch--button{padding-right:1.7em;background-color:#409eff}.vxe-switch.is--on .vxe-switch--icon{left:100%;-webkit-transform:translateX(-1.4em);transform:translateX(-1.4em)}.vxe-switch.is--off .vxe-switch--button{padding-left:1.7em;background-color:rgba(0,0,0,.35)}.vxe-switch.is--off .vxe-switch--icon{left:.2em;-webkit-transform:translateX(0);transform:translateX(0)}.vxe-switch.is--off .vxe-switch--label-on,.vxe-switch.is--on .vxe-switch--label-off{height:0;visibility:hidden;overflow:hidden}.vxe-switch.is--off .vxe-switch--label,.vxe-switch.is--on .vxe-switch--label{opacity:1}.vxe-switch:not(.is--disabled) .vxe-switch--button{cursor:pointer}.vxe-switch:not(.is--disabled) .vxe-switch--button:focus{-webkit-box-shadow:0 0 .4em 0 #409eff;box-shadow:0 0 .4em 0 #409eff}.vxe-switch.is--disabled .vxe-switch--button{cursor:no-drop}.vxe-switch.is--disabled.is--on .vxe-switch--button{background-color:#a6d2ff}.vxe-switch.is--disabled.is--off .vxe-switch--button{background-color:rgba(0,0,0,.15)}.vxe-switch .vxe-switch--button{display:block;position:relative;height:1.6em;line-height:1;min-width:3.2em;padding:0 .6em;border-radius:1em;border:0;outline:0}.vxe-switch .vxe-switch--label{opacity:0;display:block;color:#fff;font-size:.8em}.vxe-switch .vxe-switch--icon{position:absolute;top:.2em;left:0;width:1.2em;height:1.2em;border-radius:50%;background-color:#fff}.vxe-switch .vxe-switch--label-icon{margin-right:.25em}.vxe-switch,.vxe-switch.size--medium{font-size: 0.875rem}.vxe-switch.size--small{font-size: 0.8125rem}.vxe-switch.size--mini{font-size: 0.75rem}.vxe-list{position:relative;display:block;padding:0;color:#606266;direction:ltr}.vxe-list .vxe-list--virtual-wrapper{position:relative;overflow:auto}.vxe-list .vxe-list--y-space{width:0;float:left}.vxe-list .vxe-list--body,.vxe-list .vxe-list--virtual-wrapper{padding:0;margin:0;border:0;outline:0}.vxe-list--virtual-wrapper{height: 6.25rem}.vxe-pulldown{position:relative;display:inline-block;color:#606266;text-align:left}.vxe-pulldown--panel{display:none;position:absolute;left:0;padding: 0.25rem 0;color:#606266;text-align:left}.vxe-pulldown--panel:not(.is--transfer){min-width:100%}.vxe-pulldown--panel.is--transfer{position:fixed}.vxe-pulldown--panel.animat--leave{display:block;opacity:0;-webkit-transform:scaleY(.5);transform:scaleY(.5);-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);-webkit-transform-origin:center top;transform-origin:center top;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}.vxe-pulldown--panel.animat--leave[placement=top]{-webkit-transform-origin:center bottom;transform-origin:center bottom}.vxe-pulldown--panel.animat--enter{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1)}.vxe-pulldown--wrapper{background-color:#fff}.vxe-pulldown,.vxe-pulldown--panel,.vxe-pulldown--panel.size--medium,.vxe-pulldown.size--medium{font-size: 0.875rem}.vxe-pulldown--panel.size--small,.vxe-pulldown.size--small{font-size: 0.8125rem}.vxe-pulldown--panel.size--mini,.vxe-pulldown.size--mini{font-size: 0.75rem}
\ No newline at end of file
diff --git a/src/font-icon/demo.css b/src/font-icon/demo.css
new file mode 100644
index 0000000..a67054a
--- /dev/null
+++ b/src/font-icon/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;
+}
diff --git a/src/font-icon/demo_index.html b/src/font-icon/demo_index.html
new file mode 100644
index 0000000..66d76bb
--- /dev/null
+++ b/src/font-icon/demo_index.html
@@ -0,0 +1,901 @@
+
+
+
+
+ iconfont Demo
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Unicode
+ Font class
+ Symbol
+
+
+
查看项目
+
+
+
+
+
+
+
+
+ 绘制
+ 
+
+
+
+
+ 211铃铛
+ 
+
+
+
+
+ 下拉
+ 
+
+
+
+
+ 用户-圆
+ 
+
+
+
+
+ 钥匙
+ 
+
+
+
+
+ 港口
+ 
+
+
+
+
+ list_码头
+ 
+
+
+
+
+ 码头
+ 
+
+
+
+
+ 固定顺岸码头
+ 
+
+
+
+
+ 浮码头
+ 
+
+
+
+
+ 港口物流
+ 
+
+
+
+
+ 长三角港口群
+ 
+
+
+
+
+ 9船舶
+ 
+
+
+
+
+ 导入
+ 
+
+
+
+
+ 导出
+ 
+
+
+
+
+ 删除
+ 
+
+
+
+
+ 提醒
+ 
+
+
+
+
+ 编辑
+ 
+
+
+
+
+ 眼睛_隐藏_o
+ 
+
+
+
+
+ 眼睛-可见
+ 
+
+
+
+
+ user
+ 
+
+
+
+
+ 301加-圆框
+ 
+
+
+
+
+ 302减-方框
+ 
+
+
+
+
+ 302减-圆框
+ 
+
+
+
+
+ 301加-方框
+ 
+
+
+
+
+ 加号
+ 
+
+
+
+
+ 减号
+ 
+
+
+
+
+ 最大化
+ 
+
+
+
+
+ 最小化
+ 
+
+
+
+
+ 操作-全屏-展开
+ 
+
+
+
+
+ 关闭
+ 
+
+
+
+
+
Unicode 引用
+
+
+
Unicode 是字体在网页端最原始的应用方式,特点是:
+
+ 支持按字体的方式去动态调整图标大小,颜色等等。
+ 默认情况下不支持多色,直接添加多色图标会自动去色。
+
+
+ 注意:新版 iconfont 支持两种方式引用多色图标:SVG symbol 引用方式和彩色字体图标模式。(使用彩色字体图标需要在「编辑项目」中开启「彩色」选项后并重新生成。)
+
+
Unicode 使用步骤如下:
+
第一步:拷贝项目下面生成的 @font-face
+
@font-face {
+ font-family: 'iconfont';
+ src: url('iconfont.woff2?t=1659951671698') format('woff2'),
+ url('iconfont.woff?t=1659951671698') format('woff'),
+ url('iconfont.ttf?t=1659951671698') format('truetype');
+}
+
+
第二步:定义使用 iconfont 的样式
+
.iconfont {
+ font-family: "iconfont" !important;
+ font-size: 16px;
+ font-style: normal;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+
第三步:挑选相应图标并获取字体编码,应用于页面
+
+<span class="iconfont">3</span>
+
+
+ "iconfont" 是你项目下的 font-family。可以通过编辑项目查看,默认是 "iconfont"。
+
+
+
+
+
+
+
+
+
+ 绘制
+
+ .icon-huizhi
+
+
+
+
+
+
+ 211铃铛
+
+ .icon-lingdang
+
+
+
+
+
+
+ 下拉
+
+ .icon-xiala
+
+
+
+
+
+
+ 用户-圆
+
+ .icon-yonghu-yuan
+
+
+
+
+
+
+ 钥匙
+
+ .icon-yuechi
+
+
+
+
+
+
+ 港口
+
+ .icon-gangkou
+
+
+
+
+
+
+ list_码头
+
+ .icon-listmatou
+
+
+
+
+
+
+ 码头
+
+ .icon-matou
+
+
+
+
+
+
+ 固定顺岸码头
+
+ .icon-gudingshunanmatou
+
+
+
+
+
+
+ 浮码头
+
+ .icon-fumatou
+
+
+
+
+
+
+ 港口物流
+
+ .icon-gangkouwuliu
+
+
+
+
+
+
+ 长三角港口群
+
+ .icon-changsanjiaogangkouqun
+
+
+
+
+
+
+ 9船舶
+
+ .icon-chuanbo
+
+
+
+
+
+
+ 导入
+
+ .icon-daoru
+
+
+
+
+
+
+ 导出
+
+ .icon-daochu
+
+
+
+
+
+
+ 删除
+
+ .icon-shanchu
+
+
+
+
+
+
+ 提醒
+
+ .icon-tixing
+
+
+
+
+
+
+ 编辑
+
+ .icon-bianji
+
+
+
+
+
+
+ 眼睛_隐藏_o
+
+ .icon-yanjing_yincang_o
+
+
+
+
+
+
+ 眼睛-可见
+
+ .icon-yanjing-kejian
+
+
+
+
+
+
+ user
+
+ .icon-user
+
+
+
+
+
+
+ 301加-圆框
+
+ .icon-jia-yuankuang
+
+
+
+
+
+
+ 302减-方框
+
+ .icon-jian-fangkuang
+
+
+
+
+
+
+ 302减-圆框
+
+ .icon-jian-yuankuang
+
+
+
+
+
+
+ 301加-方框
+
+ .icon-jia-fangkuang
+
+
+
+
+
+
+ 加号
+
+ .icon-jiahao
+
+
+
+
+
+
+ 减号
+
+ .icon-jianhao
+
+
+
+
+
+
+ 最大化
+
+ .icon-zuidahua
+
+
+
+
+
+
+ 最小化
+
+ .icon-zuixiaohua
+
+
+
+
+
+
+ 操作-全屏-展开
+
+ .icon-caozuo-quanping-zhankai
+
+
+
+
+
+
+ 关闭
+
+ .icon-guanbi
+
+
+
+
+
+
font-class 引用
+
+
+
font-class 是 Unicode 使用方式的一种变种,主要是解决 Unicode 书写不直观,语意不明确的问题。
+
与 Unicode 使用方式相比,具有如下特点:
+
+ 相比于 Unicode 语意明确,书写更直观。可以很容易分辨这个 icon 是什么。
+ 因为使用 class 来定义图标,所以当要替换图标时,只需要修改 class 里面的 Unicode 引用。
+
+
使用步骤如下:
+
第一步:引入项目下面生成的 fontclass 代码:
+
<link rel="stylesheet" href="./iconfont.css">
+
+
第二步:挑选相应图标并获取类名,应用于页面:
+
<span class="iconfont icon-xxx"></span>
+
+
+ "
+ iconfont" 是你项目下的 font-family。可以通过编辑项目查看,默认是 "iconfont"。
+
+
+
+
+
+
+
Symbol 引用
+
+
+
这是一种全新的使用方式,应该说这才是未来的主流,也是平台目前推荐的用法。相关介绍可以参考这篇文章
+ 这种用法其实是做了一个 SVG 的集合,与另外两种相比具有如下特点:
+
+ 支持多色图标了,不再受单色限制。
+ 通过一些技巧,支持像字体那样,通过 font-size, color 来调整样式。
+ 兼容性较差,支持 IE9+,及现代浏览器。
+ 浏览器渲染 SVG 的性能一般,还不如 png。
+
+
使用步骤如下:
+
第一步:引入项目下面生成的 symbol 代码:
+
<script src="./iconfont.js"></script>
+
+
第二步:加入通用 CSS 代码(引入一次就行):
+
<style>
+.icon {
+ width: 1em;
+ height: 1em;
+ vertical-align: -0.15em;
+ fill: currentColor;
+ overflow: hidden;
+}
+</style>
+
+
第三步:挑选相应图标并获取类名,应用于页面:
+
<svg class="icon" aria-hidden="true">
+ <use xlink:href="#icon-xxx"></use>
+</svg>
+
+
+
+
+
+
+
+
+
diff --git a/src/font-icon/iconfont.css b/src/font-icon/iconfont.css
new file mode 100644
index 0000000..b9943ea
--- /dev/null
+++ b/src/font-icon/iconfont.css
@@ -0,0 +1,139 @@
+@font-face {
+ font-family: "iconfont"; /* Project id 3410877 */
+ src: url('iconfont.woff2?t=1659951671698') format('woff2'),
+ url('iconfont.woff?t=1659951671698') format('woff'),
+ url('iconfont.ttf?t=1659951671698') format('truetype');
+}
+
+.iconfont {
+ font-family: "iconfont" !important;
+ font-size: 16px;
+ font-style: normal;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+.icon-huizhi:before {
+ content: "\e635";
+}
+
+.icon-lingdang:before {
+ content: "\e8c0";
+}
+
+.icon-xiala:before {
+ content: "\e6b9";
+}
+
+.icon-yonghu-yuan:before {
+ content: "\e623";
+}
+
+.icon-yuechi:before {
+ content: "\e627";
+}
+
+.icon-gangkou:before {
+ content: "\e6b1";
+}
+
+.icon-listmatou:before {
+ content: "\e712";
+}
+
+.icon-matou:before {
+ content: "\e629";
+}
+
+.icon-gudingshunanmatou:before {
+ content: "\e642";
+}
+
+.icon-fumatou:before {
+ content: "\e644";
+}
+
+.icon-gangkouwuliu:before {
+ content: "\e60e";
+}
+
+.icon-changsanjiaogangkouqun:before {
+ content: "\e60f";
+}
+
+.icon-chuanbo:before {
+ content: "\e639";
+}
+
+.icon-daoru:before {
+ content: "\e61e";
+}
+
+.icon-daochu:before {
+ content: "\e634";
+}
+
+.icon-shanchu:before {
+ content: "\e74b";
+}
+
+.icon-tixing:before {
+ content: "\e626";
+}
+
+.icon-bianji:before {
+ content: "\e8ac";
+}
+
+.icon-yanjing_yincang_o:before {
+ content: "\ebcd";
+}
+
+.icon-yanjing-kejian:before {
+ content: "\e685";
+}
+
+.icon-user:before {
+ content: "\e7ae";
+}
+
+.icon-jia-yuankuang:before {
+ content: "\e8df";
+}
+
+.icon-jian-fangkuang:before {
+ content: "\e8e0";
+}
+
+.icon-jian-yuankuang:before {
+ content: "\e8e1";
+}
+
+.icon-jia-fangkuang:before {
+ content: "\e8de";
+}
+
+.icon-jiahao:before {
+ content: "\eaf3";
+}
+
+.icon-jianhao:before {
+ content: "\eaf5";
+}
+
+.icon-zuidahua:before {
+ content: "\e65b";
+}
+
+.icon-zuixiaohua:before {
+ content: "\e67a";
+}
+
+.icon-caozuo-quanping-zhankai:before {
+ content: "\e73b";
+}
+
+.icon-guanbi:before {
+ content: "\eaf2";
+}
+
diff --git a/src/font-icon/iconfont.js b/src/font-icon/iconfont.js
new file mode 100644
index 0000000..9fae443
--- /dev/null
+++ b/src/font-icon/iconfont.js
@@ -0,0 +1 @@
+!function(a){var l,c,h,o,t,i=' ',n=(n=document.getElementsByTagName("script"))[n.length-1].getAttribute("data-injectcss"),s=function(a,l){l.parentNode.insertBefore(a,l)};if(n&&!a.__iconfont__svg__cssinject__){a.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(a){console&&console.log(a)}}function e(){t||(t=!0,h())}function v(){try{o.documentElement.doScroll("left")}catch(a){return void setTimeout(v,50)}e()}l=function(){var a,l=document.createElement("div");l.innerHTML=i,i=null,(l=l.getElementsByTagName("svg")[0])&&(l.setAttribute("aria-hidden","true"),l.style.position="absolute",l.style.width=0,l.style.height=0,l.style.overflow="hidden",l=l,(a=document.body).firstChild?s(l,a.firstChild):a.appendChild(l))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(l,0):(c=function(){document.removeEventListener("DOMContentLoaded",c,!1),l()},document.addEventListener("DOMContentLoaded",c,!1)):document.attachEvent&&(h=l,o=a.document,t=!1,v(),o.onreadystatechange=function(){"complete"==o.readyState&&(o.onreadystatechange=null,e())})}(window);
\ No newline at end of file
diff --git a/src/font-icon/iconfont.json b/src/font-icon/iconfont.json
new file mode 100644
index 0000000..30b9596
--- /dev/null
+++ b/src/font-icon/iconfont.json
@@ -0,0 +1,226 @@
+{
+ "id": "3410877",
+ "name": "lng-icon",
+ "font_family": "iconfont",
+ "css_prefix_text": "icon-",
+ "description": "",
+ "glyphs": [
+ {
+ "icon_id": "11741138",
+ "name": "绘制 ",
+ "font_class": "huizhi",
+ "unicode": "e635",
+ "unicode_decimal": 58933
+ },
+ {
+ "icon_id": "1727435",
+ "name": "211铃铛",
+ "font_class": "lingdang",
+ "unicode": "e8c0",
+ "unicode_decimal": 59584
+ },
+ {
+ "icon_id": "672036",
+ "name": "下拉",
+ "font_class": "xiala",
+ "unicode": "e6b9",
+ "unicode_decimal": 59065
+ },
+ {
+ "icon_id": "1304895",
+ "name": "用户-圆",
+ "font_class": "yonghu-yuan",
+ "unicode": "e623",
+ "unicode_decimal": 58915
+ },
+ {
+ "icon_id": "24941125",
+ "name": "钥匙",
+ "font_class": "yuechi",
+ "unicode": "e627",
+ "unicode_decimal": 58919
+ },
+ {
+ "icon_id": "6452180",
+ "name": "港口",
+ "font_class": "gangkou",
+ "unicode": "e6b1",
+ "unicode_decimal": 59057
+ },
+ {
+ "icon_id": "724700",
+ "name": "list_码头",
+ "font_class": "listmatou",
+ "unicode": "e712",
+ "unicode_decimal": 59154
+ },
+ {
+ "icon_id": "19640760",
+ "name": "码头",
+ "font_class": "matou",
+ "unicode": "e629",
+ "unicode_decimal": 58921
+ },
+ {
+ "icon_id": "5566964",
+ "name": "固定顺岸码头",
+ "font_class": "gudingshunanmatou",
+ "unicode": "e642",
+ "unicode_decimal": 58946
+ },
+ {
+ "icon_id": "5567308",
+ "name": "浮码头",
+ "font_class": "fumatou",
+ "unicode": "e644",
+ "unicode_decimal": 58948
+ },
+ {
+ "icon_id": "22580449",
+ "name": "港口物流",
+ "font_class": "gangkouwuliu",
+ "unicode": "e60e",
+ "unicode_decimal": 58894
+ },
+ {
+ "icon_id": "22580460",
+ "name": "长三角港口群",
+ "font_class": "changsanjiaogangkouqun",
+ "unicode": "e60f",
+ "unicode_decimal": 58895
+ },
+ {
+ "icon_id": "1411092",
+ "name": "9船舶",
+ "font_class": "chuanbo",
+ "unicode": "e639",
+ "unicode_decimal": 58937
+ },
+ {
+ "icon_id": "604485",
+ "name": "导入",
+ "font_class": "daoru",
+ "unicode": "e61e",
+ "unicode_decimal": 58910
+ },
+ {
+ "icon_id": "4770726",
+ "name": "导出",
+ "font_class": "daochu",
+ "unicode": "e634",
+ "unicode_decimal": 58932
+ },
+ {
+ "icon_id": "577357",
+ "name": "删除",
+ "font_class": "shanchu",
+ "unicode": "e74b",
+ "unicode_decimal": 59211
+ },
+ {
+ "icon_id": "8765137",
+ "name": "提醒",
+ "font_class": "tixing",
+ "unicode": "e626",
+ "unicode_decimal": 58918
+ },
+ {
+ "icon_id": "11372640",
+ "name": "编辑",
+ "font_class": "bianji",
+ "unicode": "e8ac",
+ "unicode_decimal": 59564
+ },
+ {
+ "icon_id": "5388071",
+ "name": "眼睛_隐藏_o",
+ "font_class": "yanjing_yincang_o",
+ "unicode": "ebcd",
+ "unicode_decimal": 60365
+ },
+ {
+ "icon_id": "6302555",
+ "name": "眼睛-可见",
+ "font_class": "yanjing-kejian",
+ "unicode": "e685",
+ "unicode_decimal": 59013
+ },
+ {
+ "icon_id": "4766293",
+ "name": "user",
+ "font_class": "user",
+ "unicode": "e7ae",
+ "unicode_decimal": 59310
+ },
+ {
+ "icon_id": "1727509",
+ "name": "301加-圆框",
+ "font_class": "jia-yuankuang",
+ "unicode": "e8df",
+ "unicode_decimal": 59615
+ },
+ {
+ "icon_id": "1727510",
+ "name": "302减-方框",
+ "font_class": "jian-fangkuang",
+ "unicode": "e8e0",
+ "unicode_decimal": 59616
+ },
+ {
+ "icon_id": "1727512",
+ "name": "302减-圆框",
+ "font_class": "jian-yuankuang",
+ "unicode": "e8e1",
+ "unicode_decimal": 59617
+ },
+ {
+ "icon_id": "1727506",
+ "name": "301加-方框",
+ "font_class": "jia-fangkuang",
+ "unicode": "e8de",
+ "unicode_decimal": 59614
+ },
+ {
+ "icon_id": "5387527",
+ "name": "加号",
+ "font_class": "jiahao",
+ "unicode": "eaf3",
+ "unicode_decimal": 60147
+ },
+ {
+ "icon_id": "5387532",
+ "name": "减号",
+ "font_class": "jianhao",
+ "unicode": "eaf5",
+ "unicode_decimal": 60149
+ },
+ {
+ "icon_id": "428403",
+ "name": "最大化",
+ "font_class": "zuidahua",
+ "unicode": "e65b",
+ "unicode_decimal": 58971
+ },
+ {
+ "icon_id": "1649166",
+ "name": "最小化",
+ "font_class": "zuixiaohua",
+ "unicode": "e67a",
+ "unicode_decimal": 59002
+ },
+ {
+ "icon_id": "3018839",
+ "name": "操作-全屏-展开",
+ "font_class": "caozuo-quanping-zhankai",
+ "unicode": "e73b",
+ "unicode_decimal": 59195
+ },
+ {
+ "icon_id": "5387522",
+ "name": "关闭",
+ "font_class": "guanbi",
+ "unicode": "eaf2",
+ "unicode_decimal": 60146
+ }
+ ]
+}
diff --git a/src/font-icon/iconfont.ttf b/src/font-icon/iconfont.ttf
new file mode 100644
index 0000000..a119bcb
Binary files /dev/null and b/src/font-icon/iconfont.ttf differ
diff --git a/src/font-icon/iconfont.woff b/src/font-icon/iconfont.woff
new file mode 100644
index 0000000..ef6944a
Binary files /dev/null and b/src/font-icon/iconfont.woff differ
diff --git a/src/font-icon/iconfont.woff2 b/src/font-icon/iconfont.woff2
new file mode 100644
index 0000000..c0686f0
Binary files /dev/null and b/src/font-icon/iconfont.woff2 differ
diff --git a/src/main.ts b/src/main.ts
new file mode 100644
index 0000000..c40e1e8
--- /dev/null
+++ b/src/main.ts
@@ -0,0 +1,60 @@
+import Vue from 'vue'
+import App from './App.vue'
+import router from './router'
+import store from './store'
+import 'xe-utils'
+import '@/css/index.css'
+import VXETable from 'vxe-table'
+import "@/css/vxe-table/source-index.css"
+import ElementUI from 'element-ui'
+import 'element-ui/lib/theme-chalk/index.css'
+import '@/font-icon/iconfont.css'
+import i18n from '@/util/translate'
+import '@/util/init-data'
+import '@/util/vue-global/index'
+
+Vue.prototype.$myFleet = []
+const config = require('../public/config/sys-config.json')
+window.localStorage.setItem('pgName', config.projectName)
+Vue.use(VXETable)
+Vue.use(ElementUI)
+Vue.config.productionTip = false
+
+Object.keys(store.state).forEach((item: string) => {
+ const data = {
+ data: null,
+ type: item
+ }
+ store.commit('setDataNull', data)
+})
+
+function getParam(name: string) {
+ let result: any = null
+ let paramStr: string[] = []
+ let params: string[] = []
+ if (location.hash.indexOf('?') !== -1) {
+ paramStr = location.hash.split('?')
+ }
+ if (paramStr.length) {
+ params = paramStr[1].split('&')
+ }
+
+ for (let i = 0; i < params.length; i++) {
+ const str = params[i]
+ if (str.indexOf(name) !== -1) {
+ const p = str.split('=')
+ result = p[1]
+ break
+ }
+ }
+ return result
+}
+
+document.title = config.title
+
+new Vue({
+ router,
+ i18n,
+ store,
+ render: h => h(App)
+}).$mount('#app')
diff --git a/src/module/menu.ts b/src/module/menu.ts
new file mode 100644
index 0000000..db67ec3
--- /dev/null
+++ b/src/module/menu.ts
@@ -0,0 +1,39 @@
+export interface MenuType {
+ name: string,
+ title: string,
+ icon: string,
+ type: string,
+ children: MenuType[],
+ open: boolean,
+
+ [key: string]: any
+}
+
+export enum Language {
+ zh = 'zh', // 中文
+ en = 'en' // 英文
+}
+
+export interface DialogConfig {
+ show: boolean
+ template: string,
+ width: string,
+ height: string,
+ who: string
+ header: {
+ title: string,
+ hasIcon: boolean,
+ iconSrc: string,
+ hasMin: boolean,
+ hasMax: boolean
+ },
+ position: {
+ top: string,
+ left: string
+ }
+}
+
+export interface DialogAllConfig {
+ dialog: DialogConfig,
+ info: any
+}
diff --git a/src/router/index.ts b/src/router/index.ts
new file mode 100644
index 0000000..af31939
--- /dev/null
+++ b/src/router/index.ts
@@ -0,0 +1,25 @@
+import Vue from 'vue'
+import VueRouter, {RouteConfig} from 'vue-router'
+
+const config = require('../../public/config/sys-config.json');
+
+Vue.use(VueRouter)
+
+const routes: Array = [
+ {
+ path: '/',
+ redirect: '/index'
+ },
+ {
+ path: '/index',
+ name: 'Home',
+ component: () => import('@/views/layout/Layout.vue')
+ }
+]
+
+const router = new VueRouter({
+ base: config.projectName,
+ routes
+})
+
+export default router
diff --git a/src/shims-tsx.d.ts b/src/shims-tsx.d.ts
new file mode 100644
index 0000000..64fc0a8
--- /dev/null
+++ b/src/shims-tsx.d.ts
@@ -0,0 +1,11 @@
+import Vue, { VNode } from 'vue'
+
+declare global {
+ namespace JSX {
+ interface Element extends VNode {}
+ interface ElementClass extends Vue {}
+ interface IntrinsicElements {
+ [elem: string]: any
+ }
+ }
+}
diff --git a/src/shims-vue.d.ts b/src/shims-vue.d.ts
new file mode 100644
index 0000000..d9f24fa
--- /dev/null
+++ b/src/shims-vue.d.ts
@@ -0,0 +1,4 @@
+declare module '*.vue' {
+ import Vue from 'vue'
+ export default Vue
+}
diff --git a/src/store/index.ts b/src/store/index.ts
new file mode 100644
index 0000000..5347915
--- /dev/null
+++ b/src/store/index.ts
@@ -0,0 +1,38 @@
+import {Vue} from 'vue-property-decorator'
+import Vuex from 'vuex'
+
+Vue.use(Vuex)
+export default new Vuex.Store({
+ state: {
+ mapFun: null, // 封装了地图的方法
+ mapInstance: null, // 地图实例
+ dictionary: null, // 字典信息
+ ship: null, // 船舶信息,
+ showPort: false,
+ shipFleet: null
+ },
+ mutations: {
+ setData(state, data) {
+ // @ts-ignore
+ state[data.type] = data
+ },
+ setMapInstance(state, data) {
+ state.mapInstance = data
+ },
+ setMapFun(state, data) {
+ state.mapFun = data
+ },
+ setDataNull(state, data) {
+ // @ts-ignore
+ state[data.type] = data.data
+ },
+ setShowPort(state, data) {
+ state.showPort = data
+ },
+ setShipFleet(state, data) {
+ state.shipFleet = data
+ }
+ },
+ actions: {},
+ modules: {}
+})
diff --git a/src/util/axios/index.ts b/src/util/axios/index.ts
new file mode 100644
index 0000000..31718b4
--- /dev/null
+++ b/src/util/axios/index.ts
@@ -0,0 +1,12 @@
+import axios from 'axios'
+const sysConfig = require('../../../public/config/sys-config.json')
+
+const Http = axios.create()
+Http.interceptors.request.use((config: any) => {
+ config.headers['appKey'] = sysConfig.appKey
+ return config
+})
+Http.interceptors.response.use((config) => {
+ return config
+})
+export default Http
diff --git a/src/util/bus/index.ts b/src/util/bus/index.ts
new file mode 100644
index 0000000..e1b388d
--- /dev/null
+++ b/src/util/bus/index.ts
@@ -0,0 +1,5 @@
+import Vue from 'vue'
+
+const bus = new Vue()
+
+export default bus
\ No newline at end of file
diff --git a/src/util/date/index.ts b/src/util/date/index.ts
new file mode 100644
index 0000000..fdc0b05
--- /dev/null
+++ b/src/util/date/index.ts
@@ -0,0 +1,113 @@
+import dayjs from 'dayjs'
+import i18n from "@/util/translate";
+import {Language} from "@/module/menu";
+
+/**
+ * 获取指定时间到当前的时间的时间间隔
+ * @param appointTime 指定时间
+ */
+export const dateForNow = function (appointTime: any) {
+ const nowTime = Date.parse(new Date() + '') / 1000
+ const time: number = nowTime - Number(appointTime)
+ const zn = window.localStorage.getItem('language')
+ if (time < 60) {
+ return `1${zn === 'Chinese' ? '分钟前' : 'minutes ago'}`
+ } else if (time < 3600) {
+ return parseInt(time / 60 + '') + `${zn === 'Chinese' ? '分钟前' : 'minutes ago'}`
+ } else if (time < 86400) {
+ return parseInt(time / 3600 + '') + `${zn === 'Chinese' ? '小时前' : 'hours ago'}`
+ } else if (time > 86400 && time < 2592000) {
+ return parseInt(time / (24 * 3600) + '') + `${zn === 'Chinese' ? '天前' : 'days ago'}`
+ } else {
+ return `30${zn === 'Chinese' ? '天前' : 'days ago'}`
+ }
+}
+/**
+ * 获取秒级字符串
+ * @param time
+ */
+export const getLongByTime = function (time: any) {
+ return new Date(time).getTime() / 1000
+}
+
+/**
+ * 获取当前的时间
+ */
+export const getNowTime = function () {
+ return dayjs().format('YYYY-MM-DD HH:mm:ss')
+}
+
+/**
+ * 获取几天前的时间
+ * @param time
+ * @param day
+ */
+export const getBeforeTime = function (time: any, day: number) {
+ return dayjs(time).subtract(day, 'day').format('YYYY-MM-DD HH:mm:ss')
+}
+
+/**
+ * 获取月份的第一天
+ */
+export const getFirstDayOfMonth = function (time: string) {
+ return dayjs(time).startOf('month').format('YYYY-MM-DD HH:mm:ss')
+}
+
+/**
+ * 获取月份的最后一天
+ */
+export const getLastDayOfMonth = function (time: string) {
+ return dayjs(time).endOf('month').format('YYYY-MM-DD HH:mm:ss')
+}
+
+/**
+ * 获取上一个月的时间
+ */
+export const getBeforeMonth = function (time: string) {
+ return dayjs(time).subtract(1, 'month').format('YYYY-MM')
+}
+export const getBeforeMonth2 = function (time: string, m: number) {
+ return dayjs(time).subtract(m, 'month')
+}
+/**
+ * 获取指定时间的月份
+ * @param time
+ */
+export const getMonthOfTime = function (time: string) {
+ return dayjs(time).get('month')
+}
+
+/**
+ * 根据时间戳返回时间
+ */
+export const getTimeByLong = function (data: number) {
+ return dayjs(data).format('YYYY-MM-DD HH:mm:ss')
+}
+/**
+ * 根据时间戳返回时间
+ */
+export const getTimeByLongByFormat = function (data: number, format: string) {
+ return dayjs(data).format(format)
+}
+
+/**
+ * 根据时间戳返回时间
+ */
+export const getTimeByLong2 = function (data: number) {
+ return dayjs(data).format('YYYY-MM-DD HH:00:00')
+}
+
+export const getYMD = function (data: any) {
+ return dayjs(data).format('YYYYMMDD')
+}
+
+export const getFullStrDate = function () {
+ return dayjs().format('YYYYMMDDHHmmss')
+}
+
+export const formatDate = function (date: string, format: string) {
+ return dayjs(date).format(format)
+}
+export const getTimeForLong = function (data: number, format: string) {
+ return dayjs(data).format(format)
+}
diff --git a/src/util/drawMixin.js b/src/util/drawMixin.js
new file mode 100644
index 0000000..29ae06f
--- /dev/null
+++ b/src/util/drawMixin.js
@@ -0,0 +1,57 @@
+// 屏幕适配 mixin 函数
+
+// * 默认缩放值
+const scale = {
+ width: '1',
+ height: '1',
+}
+
+// * 设计稿尺寸(px)
+const baseWidth = 1920
+const baseHeight = 1080
+
+// * 需保持的比例(默认1.77778)
+const baseProportion = parseFloat((baseWidth / baseHeight).toFixed(5))
+
+export default {
+ data() {
+ return {
+ // * 定时函数
+ drawTiming: null
+ }
+ },
+ mounted() {
+ this.calcRate()
+ window.addEventListener('resize', this.resize)
+ },
+ beforeDestroy() {
+ window.removeEventListener('resize', this.resize)
+ },
+ methods: {
+ calcRate() {
+ const appRef = this.$refs["appRef"]
+ if (!appRef) return
+ // 当前宽高比
+ const currentRate = parseFloat((window.innerWidth / window.innerHeight).toFixed(5))
+ if (appRef) {
+ if (currentRate > baseProportion) {
+ // 表示更宽
+ scale.width = ((window.innerHeight * baseProportion) / baseWidth).toFixed(5)
+ scale.height = (window.innerHeight / baseHeight).toFixed(5)
+ appRef.style.transform = `scale(${scale.width}, ${scale.height}) translate(-50%, -50%)`
+ } else {
+ // 表示更高
+ scale.height = ((window.innerWidth / baseProportion) / baseHeight).toFixed(5)
+ scale.width = (window.innerWidth / baseWidth).toFixed(5)
+ appRef.style.transform = `scale(${scale.width}, ${scale.height}) translate(-50%, -50%)`
+ }
+ }
+ },
+ resize() {
+ clearTimeout(this.drawTiming)
+ this.drawTiming = setTimeout(() => {
+ this.calcRate()
+ }, 200)
+ }
+ },
+}
diff --git a/src/util/excel/exporeExcel.ts b/src/util/excel/exporeExcel.ts
new file mode 100644
index 0000000..8527eb4
--- /dev/null
+++ b/src/util/excel/exporeExcel.ts
@@ -0,0 +1,34 @@
+//导入依赖项
+import FileSaver from 'file-saver';
+import * as XLSX from "xlsx";
+
+/**
+ * elemet-ui el-table数据导出为xlsx表格
+ * @param {*} _targetId Element-UI el-table组件的id值
+ */
+export const exportTableAsXLSX = function (tableArray: any[], header: any, name: string) {
+ //根据table生成Book工作簿
+ // let wb = XLSX.utils.table_to_book(document.getElementById('_targetId'));
+
+ let wb = XLSX.utils.book_new()
+ let ws: any = XLSX.utils.json_to_sheet(tableArray, {header: header})
+ wb.SheetNames.push('sheet1');
+ wb.Sheets['sheet1'] = ws;
+ //将Book工作簿作为输出
+ let wbout = XLSX.write(wb, {
+ bookType: "xlsx",
+ bookSST: true,
+ type: "array"
+ });
+ //尝试将当前table内容保存为excel文件
+ try {
+ FileSaver.saveAs(
+ //被导出的blob二进制对象
+ new Blob([wbout], {type: "application/octet-stream"}),
+ //导出文件的名称+后缀名
+ name + ".xlsx"
+ );
+ } catch (e) {
+ if (typeof console !== "undefined") console.log(e, wbout);
+ }
+}
diff --git a/src/util/filters/filters.js b/src/util/filters/filters.js
new file mode 100644
index 0000000..09a8659
--- /dev/null
+++ b/src/util/filters/filters.js
@@ -0,0 +1,78 @@
+/**
+ *格式化时间
+ *yyyy-MM-dd hh:mm:ss
+ */
+export function formatDate(time, fmt) {
+ if (time === undefined || time === '' || time === null || time === 0) {
+ return
+ }
+ if (typeof time === 'string') {
+ return time
+ }
+ time = time * 1000
+ const date = new Date(time)
+ if (/(y+)/.test(fmt)) {
+ fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length))
+ }
+ const o = {
+ 'M+': date.getMonth() + 1,
+ 'd+': date.getDate(),
+ 'h+': date.getHours(),
+ 'm+': date.getMinutes(),
+ 's+': date.getSeconds()
+ }
+ for (const k in o) {
+ if (new RegExp(`(${k})`).test(fmt)) {
+ const str = o[k] + ''
+ fmt = fmt.replace(RegExp.$1, RegExp.$1.length === 1 ? str : padLeftZero(str))
+ }
+ }
+ return fmt
+}
+
+function padLeftZero(str) {
+ return ('00' + str).substr(str.length)
+}
+
+export function timestampFormatDate(timestamp, format) {
+ let date = timestampFormatDate(timestamp);
+ let result = formatDate(date, format)
+ return result
+}
+
+var minute = 60;
+var hour = minute * 60;
+var day = hour * 24;
+var week = day * 7;
+var month = day * 30;
+
+export function getTimer(stringTime,language) {
+ var time1 = new Date().getTime() / 1000;//当前的时间戳
+ var time2 = stringTime; //Date.parse(new Date(stringTime));//指定时间的时间戳
+ var time = time1 - time2;
+ var result = null;
+ /*if(time < 0){
+
+ }else if(time/month >= 1){
+ result = parseInt(time/month) + "月前";
+ }else if(time/week >= 1){
+ result = parseInt(time/week) + "周前";
+ }else */
+ if (time / day >= 30) {
+ result = language === 2 ? "30天前" : '30 days ago ';
+ } else if (time / day >= 1) {
+ result = language === 2 ? parseInt(time / day) + "天前" : parseInt(time / day) + 'days ago';
+ } else if (time / hour >= 1) {
+ result = language === 2 ? parseInt(time / hour) + "小时前" : parseInt(time / hour) + 'hours ago';
+ } else if (time / minute >= 1) {
+ result = language === 2 ? parseInt(time / minute) + "分钟前" : parseInt(time / minute) + 'minutes ago';
+ } else {
+ // result = "刚刚";
+ result = language === 2 ? "1分钟前" : '1 minutes age';
+ }
+ return result;
+}
+
+
+
+
diff --git a/src/util/filters/index.js b/src/util/filters/index.js
new file mode 100644
index 0000000..4be4c50
--- /dev/null
+++ b/src/util/filters/index.js
@@ -0,0 +1,6 @@
+import Vue from 'vue'
+import * as filter from './filters'
+
+Object.keys(filter).forEach(k => Vue.filter(k, filter[k]))
+
+Vue.prototype.$formatDate = Vue.filter('formatDate')
diff --git a/src/util/fix/index.ts b/src/util/fix/index.ts
new file mode 100644
index 0000000..6e0472e
--- /dev/null
+++ b/src/util/fix/index.ts
@@ -0,0 +1,4 @@
+// 获取设备独立像素
+const screenWidth = window.screen.width
+const screenHeight = window.screen.height
+// 基于1920 * 1080
diff --git a/src/util/format/index.ts b/src/util/format/index.ts
new file mode 100644
index 0000000..0acd0bc
--- /dev/null
+++ b/src/util/format/index.ts
@@ -0,0 +1,30 @@
+/**
+ * 格式化港口名称
+ * @param data
+ */
+export const portName = function (data: any) {
+ if (data) {
+ let name = ''
+ if (data.nameEn && data.nameChs) {
+ name += `${data.nameChs}(${data.nameEn})`
+ } else if (data.nameChs || data.nameEn) {
+ name += `${data.nameChs || data.nameEn}`
+ }
+ return name
+ }
+}
+/**
+ * 格式化国家名称
+ * @param data
+ */
+export const countryName = function (data: any) {
+ if (data) {
+ let name = ''
+ if (data.countryEn && data.countryChs) {
+ name += `${data.countryChs}(${data.countryEn})`
+ } else if (data.countryChs || data.countryEn) {
+ name += `${data.countryChs || data.countryEn}`
+ }
+ return name
+ }
+}
diff --git a/src/util/fun-switch/index.ts b/src/util/fun-switch/index.ts
new file mode 100644
index 0000000..bd2cc6e
--- /dev/null
+++ b/src/util/fun-switch/index.ts
@@ -0,0 +1,36 @@
+/*功能开关*/
+
+/*搜索中的功能开关*/
+export const search = {
+ open: true, // 搜索总开关
+ port: true, // 搜索港口功能
+ ship: true, // 搜索船舶功能}
+ urlMMSI: true // url 中传递没mmsi 进行船舶搜索
+}
+/* 头部的共能开关 */
+export const header = {
+ message: true, // 消息开关
+ trans: false // 翻译开关
+}
+/* 显示全部港口的功能开关 */
+export const allPort = false // 显示全部港口
+
+/* 港口信息中的功能开关 */
+export const portQuery = {
+ dongTai: false, // 港口信息中动态开关
+ weather: true // 港口信息中天气开关
+}
+/* 船舶信息中的功能开关 */
+export const shipInfo = {
+ doc: false, // 船舶信息中船舶档案开关
+ innerShip: false, // 船舶信息中内河船舶开关
+ pos: true, // 船舶信息中定位按钮开关
+ track: true, // 船舶信息中轨迹查询开关
+ portCalling: true, // 船舶信息中挂靠港记录开关
+ hc: false, // 船舶信息中航次开关
+ destPortJump: false, // 目的地跳转
+ shipEvent: false, // 船舶事件
+ routeYc: false // 航线预测
+}
+/*页面上消息滚动开关*/
+export const messageRoll = false
diff --git a/src/util/init-data/index.ts b/src/util/init-data/index.ts
new file mode 100644
index 0000000..4353d72
--- /dev/null
+++ b/src/util/init-data/index.ts
@@ -0,0 +1,99 @@
+import HttpApi from "@/api";
+import storeUtil from "@/util/store";
+import Vue from "vue";
+
+/*----------------------初始化字典信息---------------------*/
+let dictionaryData: any = {};
+HttpApi.searchDictionary('1').then((res: any) => {
+ if (res) {
+ dictionaryData.shipCountry = res
+ }
+});
+HttpApi.searchDictionary('2').then((res: any) => {
+ if (res) {
+ dictionaryData.shipType = res
+ }
+});
+HttpApi.searchDictionary('3').then((res: any) => {
+ if (res) {
+ dictionaryData.shipStatus = res
+ }
+})
+
+setTimeout(() => {
+ storeUtil.setDictionary(dictionaryData)
+}, 1000)
+/*----------------------初始化字典信息结束---------------------*/
+
+/* 获取船队数据*/
+// HttpApi.getShipRanks({}).then((res: any) => {
+// const TreeData: any[] = []
+// let shipIds = ''
+// const newShipList: any = []
+// for (let i = 0; i < res.length; i++) {
+// const fleet = JSON.parse(JSON.stringify(res[i]))
+// let tempData: any = {}
+// tempData = JSON.parse(JSON.stringify(fleet))
+// tempData.status = true
+// tempData.followShipList = []
+//
+// if (fleet.followShipList && fleet.followShipList.length > 0) {
+// for (let j = 0; j < fleet.followShipList.length; j++) {
+// const ship = JSON.parse(JSON.stringify(fleet.followShipList[j]))
+// ship.status = true
+// ship.color = fleet.color
+// ship.name = ship.customName
+// tempData.followShipList.push(ship)
+// shipIds += ship.shipId + ','
+// }
+// }
+//
+// TreeData.push(tempData)
+// }
+// Vue.prototype.$fleetList = TreeData
+// const data = {shipId: shipIds}
+//
+// HttpApi.getShipMessage(data).then((res: any) => {
+// if (res) {
+// const fleetList = Vue.prototype.$fleetList
+// for (let i = 0; i < fleetList.length; i++) {
+// const followShipList = fleetList[i].followShipList
+// if (followShipList) {
+// for (let j = 0; j < followShipList.length; j++) {
+// for (let m = 0; m < res.length; m++) {
+// if (res[m].shipId === followShipList[j].shipId) {
+// res[m].color = followShipList[j].color
+// const element = res[m]
+// element.isFleet = true
+// Vue.prototype.$sourceShips.push(element)
+// newShipList.push({
+// y: element.shiptype,
+// m: element.mmsi,
+// h: element.heading,
+// g: element.callsign,
+// c: element.cog,
+// o: element.imo,
+// s: element.sog,
+// v: element.aisNavStatus,
+// l: element.length,
+// p: element.destPort,
+// b: element.breadth,
+// r: element.eta,
+// d: element.draught,
+// t: element.posTime,
+// i: element.shipId,
+// n: element.lon,
+// a: element.lat,
+// e: element.shipnameEn,
+// color: element.color,
+// isFleet: true
+// })
+// }
+// }
+// }
+// }
+// }
+// Vue.prototype.$originAllShipRankList = JSON.parse(JSON.stringify(newShipList))
+// }
+// })
+// })
diff --git a/src/util/map/img/berth.png b/src/util/map/img/berth.png
new file mode 100644
index 0000000..f3d1a5f
Binary files /dev/null and b/src/util/map/img/berth.png differ
diff --git a/src/util/map/img/blue.png b/src/util/map/img/blue.png
new file mode 100644
index 0000000..afe426a
Binary files /dev/null and b/src/util/map/img/blue.png differ
diff --git a/src/util/map/img/duobianxing.png b/src/util/map/img/duobianxing.png
new file mode 100644
index 0000000..4b82999
Binary files /dev/null and b/src/util/map/img/duobianxing.png differ
diff --git a/src/util/map/img/end.png b/src/util/map/img/end.png
new file mode 100644
index 0000000..6453b9b
Binary files /dev/null and b/src/util/map/img/end.png differ
diff --git a/src/util/map/img/guiji.png b/src/util/map/img/guiji.png
new file mode 100644
index 0000000..7c69f0b
Binary files /dev/null and b/src/util/map/img/guiji.png differ
diff --git a/src/util/map/img/juxing.png b/src/util/map/img/juxing.png
new file mode 100644
index 0000000..c6aa3d9
Binary files /dev/null and b/src/util/map/img/juxing.png differ
diff --git a/src/util/map/img/kuang.png b/src/util/map/img/kuang.png
new file mode 100644
index 0000000..f7a2172
Binary files /dev/null and b/src/util/map/img/kuang.png differ
diff --git a/src/util/map/img/laba.png b/src/util/map/img/laba.png
new file mode 100644
index 0000000..d69fcbf
Binary files /dev/null and b/src/util/map/img/laba.png differ
diff --git a/src/util/map/img/line.png b/src/util/map/img/line.png
new file mode 100644
index 0000000..a2f5e01
Binary files /dev/null and b/src/util/map/img/line.png differ
diff --git a/src/util/map/img/logo.png b/src/util/map/img/logo.png
new file mode 100644
index 0000000..651689a
Binary files /dev/null and b/src/util/map/img/logo.png differ
diff --git a/src/util/map/img/logo1.png b/src/util/map/img/logo1.png
new file mode 100644
index 0000000..0147f67
Binary files /dev/null and b/src/util/map/img/logo1.png differ
diff --git a/src/util/map/img/marineWeather.png b/src/util/map/img/marineWeather.png
new file mode 100644
index 0000000..3471261
Binary files /dev/null and b/src/util/map/img/marineWeather.png differ
diff --git a/src/util/map/img/marineWeather.svg b/src/util/map/img/marineWeather.svg
new file mode 100644
index 0000000..00c1fea
--- /dev/null
+++ b/src/util/map/img/marineWeather.svg
@@ -0,0 +1 @@
+
diff --git a/src/util/map/img/port.png b/src/util/map/img/port.png
new file mode 100644
index 0000000..34f7da8
Binary files /dev/null and b/src/util/map/img/port.png differ
diff --git a/src/util/map/img/select.png b/src/util/map/img/select.png
new file mode 100644
index 0000000..c2574d2
Binary files /dev/null and b/src/util/map/img/select.png differ
diff --git a/src/util/map/img/shipAgency.png b/src/util/map/img/shipAgency.png
new file mode 100644
index 0000000..111f409
Binary files /dev/null and b/src/util/map/img/shipAgency.png differ
diff --git a/src/util/map/img/shipWarningIcon.png b/src/util/map/img/shipWarningIcon.png
new file mode 100644
index 0000000..0d91560
Binary files /dev/null and b/src/util/map/img/shipWarningIcon.png differ
diff --git a/src/util/map/img/start.png b/src/util/map/img/start.png
new file mode 100644
index 0000000..17e1894
Binary files /dev/null and b/src/util/map/img/start.png differ
diff --git a/src/util/map/img/time.png b/src/util/map/img/time.png
new file mode 100644
index 0000000..94cbe92
Binary files /dev/null and b/src/util/map/img/time.png differ
diff --git a/src/util/map/img/tool.png b/src/util/map/img/tool.png
new file mode 100644
index 0000000..c103157
Binary files /dev/null and b/src/util/map/img/tool.png differ
diff --git a/src/util/map/img/tool.svg b/src/util/map/img/tool.svg
new file mode 100644
index 0000000..7be008c
--- /dev/null
+++ b/src/util/map/img/tool.svg
@@ -0,0 +1,35 @@
+
+ 工具
+ Created with Sketch.
+
+
+
+
+
+
+
+
+
diff --git a/src/util/map/img/tt_b3.png b/src/util/map/img/tt_b3.png
new file mode 100644
index 0000000..7642f9e
Binary files /dev/null and b/src/util/map/img/tt_b3.png differ
diff --git a/src/util/map/img/yuan.png b/src/util/map/img/yuan.png
new file mode 100644
index 0000000..c8688f5
Binary files /dev/null and b/src/util/map/img/yuan.png differ
diff --git a/src/util/map/index.ts b/src/util/map/index.ts
new file mode 100644
index 0000000..3c966e3
--- /dev/null
+++ b/src/util/map/index.ts
@@ -0,0 +1,22 @@
+import store from '@/util/store'
+
+class MapUtil {
+ /**
+ * 选择船舶
+ */
+ public chooseShip (data: any,isArea?: boolean) {
+ const shipFun: any = store.getMapFun()
+ let shipmes = data
+ let lon = shipmes.n / 600000
+ let lat = shipmes.a / 600000
+ if (isArea) {
+ shipFun.showShips(shipmes.i)
+ } else {
+ shipFun.addShip([data], 2, data.map)
+ }
+ shipFun.setCenter([lon, lat])
+ shipFun.addSelectByCoor([lon, lat])
+ }
+}
+
+export default new MapUtil()
diff --git a/src/util/map/map.d.ts b/src/util/map/map.d.ts
new file mode 100644
index 0000000..711be40
--- /dev/null
+++ b/src/util/map/map.d.ts
@@ -0,0 +1,4 @@
+declare module '@/util/map/map.js' {
+ import shipMap from '@/util/map/map.js'
+ export default shipMap
+}
diff --git a/src/util/map/map.js b/src/util/map/map.js
new file mode 100644
index 0000000..fe87387
--- /dev/null
+++ b/src/util/map/map.js
@@ -0,0 +1,3039 @@
+import 'ol/ol.css' //引入样式
+import Map from 'ol/Map' //地图
+import View from 'ol/View' // 地图视图
+import TileLayer from 'ol/layer/Tile' //地图图层
+import {Group} from 'ol/layer' //地图图层
+import OSM from 'ol/source/OSM'
+import XYZ from 'ol/source/XYZ'
+import TileWMS from 'ol/source/TileWMS'
+import {getHeight, getWidth} from 'ol/extent'
+import {transform, fromLonLat, get} from 'ol/proj' //坐标系转换
+import TileGrid from 'ol/tilegrid/TileGrid'
+import Projection from 'ol/proj/Projection'
+import Vector from 'ol/layer/Vector' //图层
+import SourceVector from 'ol/source/Vector' //资源
+import ScaleLine from 'ol/control/ScaleLine' //比例尺
+import FullScreen from 'ol/control/FullScreen' //比例尺
+import Feature from 'ol/Feature' //矢量对象
+import Overlay from 'ol/Overlay' //矢量对象
+import Point from 'ol/geom/Point' //点
+import CircleGeom from 'ol/geom/Circle'
+import Icon from 'ol/style/Icon'
+import LineString from 'ol/geom/LineString' //线
+import Polygon from 'ol/geom/Polygon' //线
+import intSelect from 'ol/interaction/Select' //地图监听函数
+import MouseWheelZoom from 'ol/interaction/MouseWheelZoom' //滚轮放大缩小地图
+import Draw from 'ol/interaction/Draw' //画线工具
+import Snap from 'ol/interaction/Snap'
+import MousePosition from 'ol/control/MousePosition' //实时显示鼠标位置
+import {createBox} from 'ol/interaction/Draw' //画线工具
+import dayjs from "dayjs";
+import {getArea, getLength, getDistance, DEFAULT_RADIUS} from 'ol/sphere'
+import shipStyle from './style'
+import {formatDate} from '../filters/filters'
+import {register} from 'ol/proj/proj4'
+import proj4 from 'proj4'
+import ImageCanvasSource from 'ol/source/ImageCanvas'
+import ImageLayer from 'ol/layer/Image'
+import XYZSource from 'ol/source/XYZ'
+import GeoJSON from 'ol/format/GeoJSON'
+import {OlClient, Factor} from 'weatherv'
+import WKT from 'ol/format/WKT'
+
+// import { GetShipMessage } from '../../api/index'
+import {Circle, Fill, Stroke, Style, Text} from 'ol/style.js'
+import unByKey from 'ol/Observable.js'
+
+const shipMap = new Object({
+ map: null, //地图
+ view: null, //地图的资源
+ layer: null, //地图的图层
+ shipSource: null, //船舶的资源
+ portSource: null,//港口资源
+ shipSourceStandby: null, //船舶的备用资源
+ shipLayer: null, //船舶的图层
+ shipStyle: null, //船舶样式
+ shipClick: null, //船舶的点击函数
+ pathLineSource: null, //轨迹路径资源层
+ pathLineLayer: null, //轨迹路径图层
+ portLayer: null,//港口图层
+ pathPointSource: null, //轨迹点资源层
+ pathPointLayer: null, //轨迹点图层
+ selectSource: null, //船舶选择资源
+ selectLayer: null, //船舶选择图层
+ sourceList: [], //资源数组
+ layerList: [], //图层数组
+ drawPointSource: null, //标记资源
+ drawPointLayer: null, //标记图层
+ drawPointDraw: null, //标记画笔
+ measureTooltipElement: null, //轨迹显示距离的div
+ //我的修改
+ drawRingDraw: null,
+ maxpoint: Infinity,
+ __selectPort: null,//点击港口
+
+})
+let mapToolOver = []
+const shipFun = new Object({})
+shipFun.setmap = function (map) {
+ shipMap.map = map
+}
+
+var __pathData = {};
+var __pathDrawData = {};
+var __pathArray = {};
+const abcLineData = [
+ [
+ 11822129.922245655,
+ 2284881.0700673275
+ ],
+ [
+ 12022505.005673546,
+ 2284881.0700673275
+ ],
+ [
+ 12170927.282748217,
+ 2286852.8770299805
+ ],
+ [
+ 12356463.478053365,
+ 2309658.5222366545
+ ],
+ [
+ 12419544.522836259,
+ 2309658.5222366545
+ ],
+ [
+ 13503054.233224085,
+ 2309658.5222366545
+ ]
+]
+//地图
+shipMap.view = new View({
+ projection: 'EPSG:3857', //使用这个坐标系
+ center: transform([120, 36], 'EPSG:4326', 'EPSG:3857'), //定义中心位置
+ zoom: 6, //定义等级
+ minZoom: 3, //最小等级
+ maxZoom: 18 //最大等级
+ // rotation:120
+})
+shipMap.layer = new TileLayer({
+ source: new OSM(), //资源
+ zIndex: 1
+})
+
+var projection_3395 = new Projection({
+ code: 'EPSG:3395',
+ extent: [-20026376.39, -15496570.74, 20026376.39, 18764656.23],
+ units: 'm',
+ axisOrientation: 'neu'
+})
+
+proj4.defs(
+ 'EPSG:3395',
+ '+proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs'
+)
+register(proj4)
+
+var seaMapPath = 'http://cm191.myships.com/ChartMap'
+
+function getSeaMapSource() {
+ var projectionExtent = get('EPSG:3857').getExtent()
+ var height = getHeight(projectionExtent)
+ var width = getWidth(projectionExtent)
+ var tileSize = [256, 256]
+ var maxResolution = Math.max(width / tileSize[0], height / tileSize[1])
+ var length = 18 + 1
+ var resolutions = new Array(length)
+ for (var z = 0; z < length; ++z) {
+ resolutions[z] = maxResolution / Math.pow(2, z)
+ }
+ var tilegrid = new TileGrid({
+ origin: [projectionExtent[0], projectionExtent[3]],
+ tileSize: tileSize,
+ resolutions: resolutions
+ })
+ shipMap.view.on('change:resolution', function (event) {
+ freshPath();
+ });
+
+
+ function freshPath() {
+ for (var pathId in __pathData) {
+ var data = __pathData[pathId];
+ var re = __makePathData(data, shipMap.map, pathId);
+ var old_re = __pathDrawData[pathId];
+ if (!old_re || re.length != old_re.length) {
+ __pathDrawData[pathId] = re;
+ var ids = __pathArray[pathId];
+ if (ids && ids.length > 0) {
+ ids.forEach(function (item, index) {
+ var f = shipMap.sourceList.pathLineSource.getFeatureById(item);
+ var f2 = shipMap.sourceList.pathPointSource.getFeatureById(item);
+ if (f || f2) {
+ shipMap.sourceList.pathLineSource.removeFeature(f);
+ shipMap.sourceList.pathPointSource.removeFeature(f2);
+ }
+ })
+ }
+ __drawPathData(re, pathId);
+ }
+ }
+ }
+
+ function padLeft(num, val) {
+ return (new Array(num).join('0') + val).slice(-num)
+ }
+
+ return new XYZ({
+ cacheSize: 256,
+ projection: projection_3395,
+ tileGrid: tilegrid,
+ tileUrlFunction: function (xyz, obj1, obj2) {
+ if (!xyz) {
+ return ''
+ }
+ var z = xyz[0] - 2
+ if (z <= -1) return ''
+ var x = Math.abs(xyz[1])
+ var y = Math.abs(xyz[2])
+ x = 'C' + padLeft(8, x.toString(16))
+ y = 'R' + padLeft(8, y.toString(16))
+ z = 'L' + padLeft(2, z)
+ return seaMapPath + '/' + z + '/' + y + '/' + x + '.jpg'
+ }
+ })
+}
+
+shipMap.seaView = getSeaMapSource()
+
+shipMap.seaLayer = new TileLayer({
+ preload: Infinity,
+ source: shipMap.seaView,
+ zIndex: 1
+})
+//卫星图
+shipMap.sateView = new XYZ({
+ url:
+ 'http://mt{0-1}.google.cn/maps/vt?lyrs=s@198&hl=zh-CN&gl=CN&&x={x}&y={y}&z={z}'
+})
+shipMap.sateLayer = new TileLayer({
+ preload: Infinity,
+ source: shipMap.sateView,
+ zIndex: 1
+})
+
+
+shipMap.tdtLayer = new Group({
+ layers: [
+ new TileLayer({
+ source: new XYZ({
+ crossOrigin: 'anonymous',
+ url: 'https://t{0-7}.tianditu.gov.cn/DataServer?T=vec_w&x={x}&y={y}&l={z}&tk=f68226212bdd3ffed1b0bb884f81ddda'
+ })
+ }),
+ new TileLayer({
+ source: new XYZ({
+ crossOrigin: 'anonymous',
+ url: 'https://t{0-7}.tianditu.gov.cn/DataServer?T=cva_w&x={x}&y={y}&l={z}&tk=f68226212bdd3ffed1b0bb884f81ddda'
+ })
+ })
+ ]
+})
+//分布图
+shipMap.distributeLayer = new TileLayer({
+ preload: Infinity,
+ visible: true,
+ source: new TileWMS({
+ url: 'https://g.myships.com/dist/wms',
+ params: {
+ FORMAT: 'image/png',
+ VERSION: '1.1.0',
+ tiled: true,
+ LAYERS: 'myships:pos_latest_3857_1hour',
+ exceptions: 'application/vnd.ogc.se_inimage',
+ tilesOrigin: -20037508.342789244 + ',' + -20048966.1040146
+ }
+ }),
+ zIndex: 20
+})
+
+
+//船舶
+shipMap.sourceList.shipSource = new SourceVector()
+shipMap.layerList.shipLayer = new Vector({
+ source: shipMap.sourceList.shipSource,
+ name: 'shipLayer',
+ style: (f, r) => shipStyle.newshipStyle(f, r, shipMap.map),
+ zIndex: 21
+})
+//船舶
+shipMap.sourceList.carSource = new SourceVector()
+shipMap.layerList.carLayer = new Vector({
+ source: shipMap.sourceList.carSource,
+ name: 'carLayer',
+ style: (f, r) => shipStyle.carStyle(f, r, shipMap.map),
+ zIndex: 22
+})
+
+
+// 港资源
+shipMap.sourceList.portSource = new SourceVector()
+shipMap.layerList.portLayer = new Vector({
+ source: shipMap.sourceList.portSource,
+ zIndex: 15
+})
+
+// 泊位图层资源
+shipMap.sourceList.berthSource = new SourceVector()
+shipMap.layerList.berthLayer = new Vector({
+ source: shipMap.sourceList.berthSource,
+ zIndex: 17
+})
+
+//轨迹
+shipMap.sourceList.pathLineSource = new SourceVector()
+shipMap.layerList.pathLineLayer = new Vector({
+ source: shipMap.sourceList.pathLineSource,
+ zIndex: 4
+})
+
+// 轨迹上的点
+shipMap.sourceList.pathPointSource = new SourceVector()
+shipMap.layerList.pathPointLayer = new Vector({
+ source: shipMap.sourceList.pathPointSource,
+ zIndex: 5
+})
+
+
+// 地图上显示的点
+shipMap.sourceList.PointSource = new SourceVector()
+shipMap.layerList.PointLayer = new Vector({
+ source: shipMap.sourceList.PointSource,
+ zIndex: 5
+})
+
+var lineStyle = new Style({
+ stroke: new Stroke({
+ color: '#FF0000',
+ width: 1
+ })
+});
+shipMap.sourceList.jjxSource = new SourceVector();
+shipMap.layerList.jjxLayer = new Vector({
+ source: shipMap.sourceList.jjxSource,
+ style: lineStyle,
+ visible: false,
+ zIndex: 3
+});
+
+shipMap.sourceList.taifeng = new SourceVector();
+shipMap.layerList.taifengLayer = new Vector({
+ source: shipMap.sourceList.taifeng,
+ style: function (feature, res) {
+ var style;
+ var t = parseInt(feature.get('t'));
+ if (t == 1 || t == 0)//历史当前点
+ style = getTyphoonStyle(feature, res);
+ else if (t == 2)//预报点
+ style = getTyphoonFutureStyle(feature, res);
+ else if (t == 3) {
+ style = getTyphoonStyleLine(feature, res);
+ return style;
+ } else {
+ style = getTyphoonFutureStyle(feature, res);
+ }
+ return style;
+ }
+});
+shipMap.layerList.taifengLayer.setZIndex(20);
+
+//定义区间
+var min = [41.5, 10.8, 17.2, 24.5, 32.7, 51];
+var max = [50.9, 17.1, 24.4, 32.6, 41.4, 1000];
+
+function getTyphoonStyle(f, r) {
+ var maxWindSpeed = f.get('maxWindSpeed');
+ var level = 0;
+ for (var i = 0; i <= 5; i++) {
+ if (min[i] <= maxWindSpeed && maxWindSpeed <= max[i]) {
+ level = i;
+ }
+ }
+ var color = '';
+ switch (level) {
+ case 0:
+ color = '#EB4FA0'
+ break;
+ case 1:
+ color = 'blue'
+ break;
+ case 2:
+ color = 'yellow'
+ break;
+ case 3:
+ color = 'orange'
+ break;
+ case 4:
+ color = 'red'
+ break;
+ case 5:
+ color = 'purple'
+ break;
+ default:
+ break;
+ }
+
+ var s = new Style({
+ fill: new Fill({
+ color: color
+ }),
+ stroke: new Stroke({
+ color: color,
+ width: 2
+ }),
+ image: new Circle({
+ radius: 4,
+ fill: new Fill({
+ color: color
+ })
+ })
+ });
+ if (r < 3000) {
+ var ntext = new Text({
+ textAlign: "left",
+ font: '10px Microsoft YaHei',
+ fill: new Fill({
+ color: color
+ }),
+ stroke: new Stroke({
+ color: "#FFF",
+ width: 3
+ }),
+ textBaseline: "bottom",
+ offsetX: 8,
+ offsetY: -8,
+ text: f.get("forecast")
+ });
+ s.setText(ntext);
+ }
+
+ const style2 = new Style({
+ text: new Text({
+ textAlign: "left",
+ font: '10px Microsoft YaHei',
+ fill: new Fill({
+ color: '#fff'
+ }),
+ stroke: new Stroke({
+ color: "black",
+ width: 1
+ }),
+ textBaseline: "bottom",
+ offsetX: 8,
+ offsetY: -8,
+ text: f.get("time")
+ })
+ })
+ return [s, style2];
+}
+
+function getTyphoonFutureStyle(f, r) {
+ var maxWindSpeed = f.get('maxWindSpeed');
+
+ var level = 0;
+ for (var i = 0; i <= 5; i++) {
+ if (min[i] <= maxWindSpeed && maxWindSpeed <= max[i]) {
+ level = i;
+ }
+ }
+ var color = '';
+ switch (level) {
+ case 0:
+ color = '#EB4FA0'
+ break;
+ case 1:
+ color = 'blue'
+ break;
+ case 2:
+ color = 'yellow'
+ break;
+ case 3:
+ color = 'orange'
+ break;
+ case 4:
+ color = 'red'
+ break;
+ case 5:
+ color = 'purple'
+ break;
+ default:
+ break;
+ }
+ var s = new Style({
+ fill: new Fill({
+ color: color
+ }),
+ stroke: new Stroke({
+ color: color,
+ lineDash: [10, 10],
+ width: 2
+ }),
+ image: new Circle({
+ radius: 4,
+ fill: new Fill({
+ color: color
+ })
+ })
+ });
+ if (r < 3000) {
+ var t = f.get('temp');
+ if (t != 1) {
+ var ntext = new Text({
+ textAlign: "left",
+ font: '10px Microsoft YaHei',
+ fill: new Fill({
+ color: color
+ }),
+ stroke: new Stroke({
+ color: "#FFF",
+ width: 3
+ }),
+ textBaseline: "bottom",
+ offsetX: 8,
+ offsetY: -8,
+ text: f.get("forecast")
+ })
+ s.setText(ntext);
+ }
+ }
+ const style2 = new Style({
+ text: new Text({
+ textAlign: "left",
+ font: '10px Microsoft YaHei',
+ fill: new Fill({
+ color: '#fff'
+ }),
+ stroke: new Stroke({
+ color: "black",
+ width: 1
+ }),
+ textBaseline: "bottom",
+ offsetX: 8,
+ offsetY: -8,
+ text: f.get("time")
+ })
+ })
+
+
+ return [s, style2];
+}
+
+function getTyphoonStyleLine(f, r) {
+ var ss = [];
+ var s = new Style({
+ fill: new Fill({
+ color: 'rgba(255, 120,120, 0.8)'
+ }),
+ stroke: new Stroke({
+ color: 'rgba(255, 120,120, 0.8)',
+ width: 2
+ }),
+ image: new Circle({
+ radius: 4,
+ fill: new Fill({
+ color: 'rgba(255,120,120, 0.8)'
+ })
+ })
+ });
+ if (r < 3000) {
+ var ntext = new Text({
+ textAlign: "left",
+ font: '10px Microsoft YaHei',
+ fill: new Fill({
+ color: "RGB(255,120,120)"
+ }),
+ stroke: new Stroke({
+ color: "#FFF",
+ width: 3
+ }),
+ textBaseline: "bottom",
+ offsetX: 8,
+ offsetY: -8,
+ text: f.get("forecast")
+ });
+ s.setText(ntext);
+ }
+ ss.push(s);
+ var geometry = f.getGeometry();
+ geometry.forEachSegment(function (start, end) {
+ var dx = end[0] - start[0];
+ var dy = end[1] - start[1];
+ var rotation = Math.atan2(dy, dx);
+ // arrows
+ ss.push(new Style({
+ geometry: new Point(end),
+ image: new Icon({
+ src: 'images/msmap/arrow100.png',
+ anchor: [1.5, 0.5],
+ rotateWithView: true,
+ rotation: -rotation
+ })
+ }));
+ });
+ return ss;
+}
+
+//船舶选择框
+shipMap.sourceList.selectSource = new SourceVector()
+shipMap.layerList.selectLayer = new Vector({
+ source: shipMap.sourceList.selectSource,
+ zIndex: 21
+})
+
+//标记画笔的添加
+shipMap.drawPointSource = new SourceVector()
+shipMap.drawPointLayer = new Vector({
+ source: shipMap.drawPointSource,
+ zIndex: 7
+})
+shipMap.drawPointDraw = new Draw({
+ source: shipMap.drawPointSource,
+ type: 'Point' //可以根据类型改变
+})
+//测距画笔的添加
+shipMap.drawRingSource = new SourceVector()
+shipMap.drawRingLayer = new Vector({
+ source: shipMap.drawRingSource,
+ zIndex: 8,
+ style: shipStyle.ceJuStyle
+})
+//我的修改
+shipMap.drawRingDraw = new Draw({
+ maxPoints: shipMap.maxpoint,
+ style: shipStyle.drawStyle,
+ source: shipMap.drawRingSource,
+ type: 'LineString'
+})
+
+//矩形画笔的添加
+shipMap.drawRectangleSource = new SourceVector()
+shipMap.drawRectangleLayer = new Vector({
+ source: shipMap.drawRectangleSource,
+ zIndex: 8
+})
+shipMap.drawRectangleDraw = new Draw({
+ source: shipMap.drawRectangleSource,
+ type: 'Circle',
+ freehand: false,
+ geometryFunction: createBox()
+})
+//圆型画笔的添加
+shipMap.drawCircleSource = new SourceVector()
+shipMap.drawCircleLayer = new Vector({
+ source: shipMap.drawCircleSource,
+ zIndex: 8
+})
+shipMap.drawCircleDraw = new Draw({
+ source: shipMap.drawCircleSource,
+ type: 'Circle'
+})
+//多边形的添加
+//我的修改
+shipMap.drawPolygonSource = new SourceVector()
+shipMap.drawPolygonLayer = new Vector({
+ source: shipMap.drawPolygonSource,
+ zIndex: 8
+})
+shipMap.drawPolygonDraw = new Draw({
+ source: shipMap.drawPolygonSource,
+ type: 'Polygon'
+})
+//我的修改
+//自定义线段的添加
+shipMap.agtSource = new SourceVector()
+shipMap.agtLayer = new Vector({
+ source: shipMap.agtSource,
+ zIndex: 16
+})
+//圆的半径
+shipMap.sourceList.circlePath = new SourceVector()
+shipMap.layerList.circlePathLayer = new Vector({
+ source: shipMap.sourceList.circlePath,
+ zIndex: 10
+})
+//我的修改
+//eez线
+shipMap.sourceList.eezSource = new XYZ({
+ cacheSize: 256,
+ tileUrlFunction: function (xyz, obj1, obj2) {
+ if (!xyz) {
+ return ''
+ }
+ let z = xyz[0]
+ let x = Math.abs(xyz[1])
+ let y = xyz[2]
+ y += Math.pow(2, z)
+ let tf = Math.pow(2, Math.ceil(z / 2) - 1)
+ let tt = Math.pow(2, z)
+ let t = tt / tf
+ let f1 = parseInt(x / t + '')
+ let f2 = parseInt(y / t + '')
+ let lev = shipFun.padLeft(2, z)
+ let folder = '0_0'
+ if (z <= 5) {
+ folder = f1 + '_' + f2
+ } else if (z >= 6 && z <= 11) {
+ folder = shipFun.padLeft(2, f1) + '_' + shipFun.padLeft(2, f2)
+ } else if (z >= 12 && z <= 17) {
+ folder = shipFun.padLeft(3, f1) + '_' + shipFun.padLeft(3, f2)
+ } else {
+ folder = shipFun.padLeft(4, f1) + '_' + shipFun.padLeft(4, f2)
+ }
+
+ let xx, yy
+ if (z <= 5) {
+ xx = shipFun.padLeft(2, x)
+ yy = shipFun.padLeft(2, y)
+ } else if (z >= 6 && z <= 11) {
+ if (x === 100 || x === 1000) {
+ xx = shipFun.padLeft(5, x)
+ } else {
+ xx = shipFun.padLeft(4, x)
+ }
+
+ if (y === 100 || y === 1000) {
+ yy = shipFun.padLeft(5, y)
+ } else {
+ yy = shipFun.padLeft(4, y)
+ }
+ } else if (z >= 12 && z <= 17) {
+ if (x === 100 || x === 1000 || x === 10000 || x === 100000) {
+ xx = shipFun.padLeft(7, x)
+ } else {
+ xx = shipFun.padLeft(6, x)
+ }
+
+ if (y === 100 || y === 1000 || x === 10000 || x === 100000) {
+ yy = shipFun.padLeft(7, y)
+ } else {
+ yy = shipFun.padLeft(6, y)
+ }
+ } else {
+ if (
+ x === 100 ||
+ x === 1000 ||
+ x === 10000 ||
+ x === 100000 ||
+ x === 1000000 ||
+ x === 10000000
+ ) {
+ xx = shipFun.padLeft(9, x)
+ } else {
+ xx = shipFun.padLeft(8, x)
+ }
+
+ if (
+ y === 100 ||
+ y === 1000 ||
+ x === 10000 ||
+ x === 100000 ||
+ x === 1000000 ||
+ x === 10000000
+ ) {
+ yy = shipFun.padLeft(9, y)
+ } else {
+ yy = shipFun.padLeft(8, y)
+ }
+ }
+ return (
+ 'http://47.93.90.52:9080' +
+ '/EPSG_900913_' +
+ lev +
+ '/' +
+ folder +
+ '/' +
+ xx +
+ '_' +
+ yy +
+ '.png'
+ )
+ }
+})
+shipMap.layerList.eezLayer = new TileLayer({
+ preload: Infinity,
+ visible: true,
+ source: shipMap.sourceList.eezSource,
+ zIndex: 20
+});
+//eez线转换函数
+(shipFun.padLeft = function (num, val) {
+ return (new Array(num).join('0') + val).slice(-num)
+})
+//等值线
+// shipMap.layerList.isobarLayer = new Vector({
+// zIndex: 5
+// })
+
+// 行政区划图层/api/jfcfdt
+// var darkMapPath = 'http://cfdt.ninecosmos.cn';
+var darkMapPath = ''
+if (process.env.NODE_ENV === 'production') {
+ darkMapPath = '/myships/api/jfcfdt'
+} else {
+ darkMapPath = '/myships/jfcfdt'
+}
+shipMap.layerList.vtLayer = (() => {
+ const style = new Style({
+ stroke: new Stroke({
+ color: 'black',
+ width: 1,
+ }),
+ text: new Text({
+ font: '12px Calibri,sans-serif',
+ fill: new Fill({
+ color: '#000',
+ }),
+ stroke: new Stroke({
+ color: '#fff',
+ width: 3,
+ }),
+ }),
+ })
+ return new TileLayer({
+ declutter: true,
+ source: new XYZSource({
+ crossOrigin: 'anonymous',
+ // url: darkMapPath + '/darkmap-retina/{z}/{x}/{y}.png',
+ url: 'https://api3.myships.com/tiledmap/darkmap-retina/{z}/{x}/{y}.png',
+ }),
+ style: function (feature) {
+ style.getText().setText(feature.get('name'))
+ return style
+ },
+ })
+})()
+shipMap.layerList.vtLayer.setZIndex(4)
+
+// 九方 初始化可视化sdk
+const mapClient = new OlClient()
+
+// 气象图层数据源
+const sourceImageCanvas = new ImageCanvasSource({
+ canvasFunction: (extent3857, resolution, pixelRatio, size) =>
+ mapClient.renderColorMapTileFunction(
+ extent3857,
+ resolution,
+ pixelRatio,
+ size,
+ () => sourceImageCanvas.refresh()
+ ),
+})
+// 气象图层
+const config = require('../../../public/config/sys-config.json')
+shipMap.layerList.iLayer = new ImageLayer({source: sourceImageCanvas})
+shipMap.layerList.iLayer.setZIndex(3)
+if (config.map.weatherLayerOpacity) {
+ shipMap.layerList.iLayer.setOpacity(config.map.weatherLayerOpacity)
+}
+
+
+// 粒子动画图层数据源
+const pImageCanvas = new ImageCanvasSource({
+ canvasFunction: (extent3857, resolution, pixelRatio, size) =>
+ mapClient.renderParticleFunction(extent3857, resolution, pixelRatio, size, () => shipMap.map.render()),
+})
+// 粒子图层
+shipMap.layerList.pLayer = new ImageLayer({source: pImageCanvas})
+shipMap.layerList.pLayer.setZIndex(6);
+//创建地图的函数
+(shipFun.creatMap = () => {
+ return new Map({
+ target: 'map', //定义要显示的dom元素 使用id绑定
+ layers: [
+ shipMap.seaLayer,
+ //shipMap.layer,
+ shipMap.layerList.PointLayer,
+ shipMap.layerList.shipLayer,
+ shipMap.layerList.carLayer,
+ shipMap.layerList.jjxLayer,
+ shipMap.layerList.taifengLayer,
+ shipMap.layerList.pathLineLayer,
+ shipMap.layerList.berthLayer,
+ shipMap.layerList.pathPointLayer,
+ shipMap.layerList.selectLayer,
+ shipMap.layerList.portLayer,
+ //shipMap.layerList.iLayer,//九方气象图层
+ shipMap.layerList.pLayer,// 九方粒子
+ //shipMap.layerList.vtLayer,//九方行政区图层
+ // shipMap.drawPointLayer,
+ shipMap.agtLayer,
+ shipMap.drawRingLayer,
+ shipMap.drawCircleLayer,
+ shipMap.drawRectangleLayer,
+ // ---我的修改---
+ shipMap.drawPolygonLayer,
+ // ---我的修改---
+ //我的修改
+ shipMap.layerList.circlePathLayer
+ //我的修改
+ ],
+ view: shipMap.view
+ })
+})
+
+//监听返回zoom
+shipFun.getSelectPortFun = function (selectPort) {
+ shipMap.__selectPort = selectPort
+}
+
+//九方温度
+shipFun.loadTemp = function (url) {
+ if (!hasLayerInMap(shipMap.layerList.iLayer)) {
+ shipMap.map.addLayer(shipMap.layerList.iLayer)
+ }
+ if (!hasLayerInMap(shipMap.layerList.vtLayer)) {
+ shipMap.map.addLayer(shipMap.layerList.vtLayer)
+ }
+ mapClient.colorMapTileLayer.setOption({
+ url: url,
+ factor: Factor.Temp,
+ })
+ sourceImageCanvas.refresh()
+
+}
+// 加载气压
+shipFun.loadPressure = function (url) {
+ if (!hasLayerInMap(shipMap.layerList.iLayer)) {
+ shipMap.map.addLayer(shipMap.layerList.iLayer)
+ }
+ if (!hasLayerInMap(shipMap.layerList.vtLayer)) {
+ shipMap.map.addLayer(shipMap.layerList.vtLayer)
+ }
+ // 气压色斑图
+ mapClient.colorMapTileLayer.setOption({
+ url: url,
+ factor: Factor.Pressure,
+ })
+ sourceImageCanvas.refresh()
+}
+// 加载风场
+shipFun.loadWind = function (url) {
+ if (!hasLayerInMap(shipMap.layerList.iLayer)) {
+ shipMap.map.addLayer(shipMap.layerList.iLayer)
+ }
+ if (!hasLayerInMap(shipMap.layerList.vtLayer)) {
+ shipMap.map.addLayer(shipMap.layerList.vtLayer)
+ }
+ mapClient.colorMapTileLayer.setOption({
+ url: url,
+ factor: Factor.Wind,
+ })
+ sourceImageCanvas.refresh()
+}
+// 加载洋流
+shipFun.loadSeacurrents = function (url) {
+ if (!hasLayerInMap(shipMap.layerList.iLayer)) {
+ shipMap.map.addLayer(shipMap.layerList.iLayer)
+ }
+ if (!hasLayerInMap(shipMap.layerList.vtLayer)) {
+ shipMap.map.addLayer(shipMap.layerList.vtLayer)
+ }
+ // 气压色斑图
+ mapClient.colorMapTileLayer.setOption({
+ url: url,
+ factor: Factor.SeaCurrents,
+ })
+ sourceImageCanvas.refresh()
+}
+//加载洋流粒子
+shipFun.loadNineParticleSeacurrents = function (url) {
+ if (!hasLayerInMap(shipMap.layerList.pLayer)) {
+ shipMap.map.addLayer(shipMap.layerList.pLayer)
+ }
+ // 粒子动画
+ mapClient.particleAnimationLayer.setConfig({
+ lineWidth: 0.95,
+ speedFactor: 1.8,
+ fadeOpacity: 0.85,
+ particlesNumber: 15000,
+ dropRate: 0.0005,
+ dropRateBump: 0.001,
+ colorRamp: {
+ 0.0: 'rgba(255,255,255,0.2)',
+ 1.0: 'rgba(255,255,255,0.5)',
+ }
+ })
+ mapClient.particleAnimationLayer.setOption({
+ url: url,
+ type: 'image',
+ factor: Factor.SeaCurrents,
+ })
+}
+//加载风粒子
+shipFun.loadNineParticleWind = function (url) {
+ if (!hasLayerInMap(shipMap.layerList.pLayer)) {
+ shipMap.map.addLayer(shipMap.layerList.pLayer)
+ }
+ // 粒子动画
+ mapClient.particleAnimationLayer.setConfig({
+ lineWidth: 0.95,
+ speedFactor: 0.2,
+ fadeOpacity: 0.85,
+ particlesNumber: 15000
+ })
+ mapClient.particleAnimationLayer.setOption({
+ url: url,
+ type: 'image',
+ factor: Factor.Wind,
+ })
+}
+// 加载等值线
+shipFun.loadIsobar = function (url) {
+ if (!hasLayerInMap(shipMap.layerList.isobarLayer)) {
+ shipMap.layerList.isobarLayer = new Vector({
+ source: new SourceVector({
+ //'http://cfdt.ninecosmos.cn/meteo-open/s01/2021/09/06/006/pressure-surface-4326-isoline.json',
+ url: url,
+ format: new GeoJSON(),
+ }),
+ style: function (feature) {
+ if (shipStyle.isobarStyle && shipStyle.isobarStyle.getText()) {
+ shipStyle.isobarStyle.getText().setText(feature.get('values_'))
+ }
+ return shipStyle.isobarStyle
+ },
+ })
+ shipMap.layerList.isobarLayer.setZIndex(5)
+ shipMap.map.addLayer(shipMap.layerList.isobarLayer)
+ }
+}
+
+//隐藏台风警戒线
+shipFun.hidejjx = function () {
+ shipMap.layerList.jjxLayer.setVisible(false)
+}
+
+//显示台风警戒线
+shipFun.showjjx = function () {
+ shipMap.layerList.jjxLayer.setVisible(true)
+}
+
+//清除九方气象
+shipFun.clearJfWeather = function () {
+ shipMap.map.removeLayer(shipMap.layerList.iLayer)
+ shipMap.map.removeLayer(shipMap.layerList.vtLayer)
+}
+shipFun.clearJfWeatherIsobar = function () {
+ if (hasLayerInMap(shipMap.layerList.isobarLayer)) {
+ shipMap.map.removeLayer(shipMap.layerList.isobarLayer)
+ }
+}
+shipFun.clearJfParticle = function () {
+ if (hasLayerInMap(shipMap.layerList.pLayer)) {
+ shipMap.map.removeLayer(shipMap.layerList.pLayer)
+ }
+}
+shipFun.showPort = function (portInfo) {
+ let coor = transform(
+ [portInfo.lon, portInfo.lat],
+ 'EPSG:4326',
+ 'EPSG:3857'
+ ) //先定义一个坐标 //速度 航向 经纬度 船舶名 类型
+ let geom = new Point(coor) //根据坐标画点
+ let f = new Feature({
+ geometry: geom,
+ portId: portInfo.id,
+ type: 'port',
+ portNmaeCn: portInfo.nameCn,
+ portNmaeEn: portInfo.nameEn,
+ portCode: portInfo.code,
+ portLatLon: portInfo.latLonStr,
+ portLon: portInfo.lon,
+ portLat: portInfo.lat,
+ name: portInfo.nameEn
+ })
+ f.setStyle(shipStyle.portStyle(f))
+ f.set('geom', geom)
+ shipMap.sourceList.portSource.addFeature(f)
+}
+
+shipFun.showBerth = function (berthInfo) {
+ let coor = transform(
+ [berthInfo.decLongitude, berthInfo.decLatitude],
+ 'EPSG:4326',
+ 'EPSG:3857'
+ ) //先定义一个坐标 //速度 航向 经纬度 船舶名 类型
+ let geom = new Point(coor) //根据坐标画点
+ let f = new Feature({
+ geometry: geom,
+ berthId: berthInfo.berthId,
+ type: 'berth',
+ name: berthInfo.berthName,
+ berthLon: berthInfo.decLongitude,
+ berthLat: berthInfo.decLatitude,
+ })
+ f.setStyle(shipStyle.berthStyle(f))
+ f.set('geom', geom)
+ f.setId('berth-' + berthInfo.berthId)
+ shipMap.sourceList.berthSource.addFeature(f)
+}
+// 清除所有泊位
+shipFun.clearallBerth = (map) => {
+ shipMap.sourceList.berthSource.clear()
+ return true
+}
+//清除所有港口
+shipFun.clearallPort = (map) => {
+ shipMap.sourceList.portSource.clear()
+ return true
+}
+//判定图层是否存在map
+//判断当前图层是否存在地图中
+function hasLayerInMap(layer) {
+ var layers = shipMap.map.getLayers()
+ for (var i = 0; i < layers.getLength(); i++) {
+ var item = layers.item(i)
+ if (item === layer) {
+ return true
+ }
+ }
+ return false
+}
+
+//清除所有船舶
+shipFun.clearallship = (map) => {
+ shipMap.sourceList.shipSource.clear()
+ return true
+}
+shipFun.clearAllCar = (map) => {
+ shipMap.sourceList.carSource.clear()
+ return true
+}
+shipFun.addCar = (data, map) => {
+ const source = shipMap.sourceList.carSource
+ const features = source.getFeatures()
+ if (features) {
+ for (let i = 0; i < data.length; i++) {
+ const item = data[i]
+ features.forEach((f) => {
+ if (f.getId() === item.carNum) {
+ source.removeFeature(f)
+ }
+ })
+ }
+ }
+ const newFeatures = []
+ for (let i = 0; i < data.length; i++) {
+ const item = data[i]
+ if(item.carNum){
+ const f = new Feature({
+ geometry: new Point(transform([Number(item.longitude), Number(item.latitude)], 'EPSG:4326', 'EPSG:3857'))
+ })
+ f.setId(item.carNum);
+ Object.keys(item).forEach((key) => {
+ f.set(key, item[key])
+ })
+ f.set('type','car')
+ newFeatures.push(f)
+ }
+ }
+ source.addFeatures(newFeatures)
+}
+function identifySouOrNor(lines, point) {
+ //将线段的点切割为数组,数组的每个元素为一条线段
+ const lineData = []
+ for(let i = 0; i {
+ if(point[0]>line[0][0] && point[0] {
+ latitudeArr.push(item[1])
+ })
+ const maxLatitude = Math.max(...latitudeArr)
+ if(point[1]>maxLatitude){
+ return false
+ } else {
+ return true
+ }
+ }
+ if (projectionLine[0][1] == projectionLine[1][1]) {
+ if (point[1]0) {
+ return true
+ } else {
+ return false
+ }
+}
+//添加 船舶
+shipFun.addShip = (dataList, zoom, map, selectlist) => {
+ // shipMap.sourceList.shipSource.clear()
+ for (let i = 0; i < dataList.length; i++) {
+ const element = dataList[i]
+ let coor = transform(
+ [dataList[i].n / 600000, dataList[i].a / 600000],
+ 'EPSG:4326',
+ 'EPSG:3857'
+ ) //先定义一个坐标 //速度 航向 经纬度 船舶名 类型
+ // 判断船舶坐标在abc线的南北
+ // if(identifySouOrNor(abcLineData, coor)==false){
+ // element.color = '#FF0000'
+ // }
+ let geom = new Point(coor) //根据坐标画点
+ let f = new Feature({
+ geometry: geom, //添加点图形
+ type: 'ship',
+ shiptype: element.y,
+ mmsi: element.m,
+ heading: element.h,
+ callsign: element.g,
+ cog: element.c,
+ imo: element.o,
+ sog: element.s,
+ aisNavStatus: element.v,
+ length: element.l,
+ destPort: element.p,
+ breadth: element.b,
+ eta: element.r,
+ draught: element.d,
+ posTime: element.t,
+ shipId: element.i,
+ lon: dataList[i].n,
+ lat: dataList[i].a,
+ shipnameEn: dataList[i].e,
+ color: element.color
+ })
+ f.setId(dataList[i].i)
+ f.set('geom', geom)
+ shipMap.sourceList.shipSource.addFeature(f, zoom)
+ }
+}
+
+shipFun.getShipFeaturesByIds = (shipIds) => { //根据shipId找到对应的feature
+ const features = []
+ shipIds.forEach(id => {
+ let f = shipMap.sourceList.shipSource.getFeatureById(id)
+ features.push(f)
+ })
+ return features
+}
+shipFun.getCarFeaturesByIds = (carIds) => { //根据shipId找到对应的feature
+ const features = []
+ carIds.forEach(id => {
+ let f = shipMap.sourceList.carSource.getFeatureById(id)
+ features.push(f)
+ })
+ return features
+}
+
+shipFun.plotting = function (number) {
+ shipStyle.plotting(number)
+}
+//添加全屏控件
+shipFun.addFullScreen = (map) => {
+ let FullScreenControl = new FullScreen({
+ // units: 'metric',
+ // target: 'scalebar',
+ className: 'ol-full-screen'
+ })
+ map.addControl(FullScreenControl)
+}
+
+//添加比例尺控件
+shipFun.addScaleLine = (map) => {
+ let scaleLineControl = new ScaleLine({
+ units: 'nautical',
+ target: 'scalebar',
+ className: 'ol-scale-line'
+ })
+ map.addControl(scaleLineControl)
+}
+window.wulaFeature = [];//台风显示需要的这个是风圈
+window.wulaTime = [];//台风风圈运动的定时器
+var wulaFeature1 = [];//台风显示需要的 这个是风圈中心点
+var wktformat = new WKT()
+
+
+// 显示台风
+shipFun.showTyphoon = function (data, level, time, name) {
+ __showTaiFengNew2(data, level, time, name);
+}
+
+//绘制台风图层new
+function __showTaiFengNew2(tdata, level, time, name) {
+ var data = tdata.data;
+
+ var arr = data.filter(function (item, index) {
+ item.longitude = item.lon;
+ if (index > 0) {
+ if ((item.lon - data[index - 1].lon) < -180)
+ item.lon += 360;
+ else if ((item.lon - data[index - 1].lon) > 180)
+ item.lon -= 360;
+
+ }
+ item.f = item.forcast.filter(function (it, idx) {
+ if (idx == 0) {
+ if ((it.lon - item.lon) < -180)
+ it.lon += 360;
+ else if ((it.lon - item.lon) > 180)
+ it.lon -= 360;
+ }
+ if (idx > 0) {
+ if ((it.lon - item.forcast[idx - 1].lon) < -180)
+ it.lon += 360;
+ else if ((it.lon - item.forcast[idx - 1].lon) > 180)
+ it.lon -= 360;
+ }
+ return it;
+ });
+ return item;
+ });
+ var his = [], current, fut = [], arrLength;
+ arrLength = arr.length;
+ for (var i = 0; i < arrLength - 1; i++) {
+ arr[i].t = 0;
+ his.push(arr[i]);
+ if (arr[i].f.length > 0) {
+ arr[i].f.unshift(arr[i]);
+ }
+ }
+ current = arr[arrLength - 1];
+ current.t = 1;
+ for (var i = 0; i < current.f.length; i++) {
+ current.f[i].t = 2;
+ current.f[i].longitude = current.f[i].lon;
+ fut.push(current.f[i]);
+ }
+ var all = his.concat(current);
+ all = all.concat(fut);
+
+ /*var startll = ol.proj.fromLonLat([arr[0].lon, arr[0].lat]);
+ var startf = new ol.Feature({
+ geometry: new Point(startll)
+ });
+ startf.set("name",tdata.seq);
+ startf.setStyle(typhoonStart);
+ Source.taifeng.addFeature(startf);*/
+
+ var center = fromLonLat([current.lon, current.lat]);
+ var ct = new Feature({
+ geometry: new Point(center)
+ });
+ ct.set("name", tdata.seq);
+ ct.setStyle(typhoonCenter2);
+ ct.set("code", tdata.code);
+ shipMap.sourceList.taifeng.addFeature(ct);
+ drawTyphoonNew(all, tdata.seq, tdata.code, name);
+ var rad_neq34kt = parseInt(current.radius7);
+ var rad_neq50kt = parseInt(current.radius10);//暴风圈
+ var liefeng = new Feature({
+ geometry: new CircleGeom(center, rad_neq34kt * 1000)
+ });
+ var baofeng = new Feature({
+ geometry: new CircleGeom(center, rad_neq50kt * 1000)
+ });
+
+ liefeng.setStyle(liefengStyle);
+ baofeng.setStyle(baofengStyle);
+ liefeng.set("code", tdata.code);
+ baofeng.set("code", tdata.code);
+
+ //绑定定时器的数组
+ if (window.wulaTime[name] == undefined) {
+ window.wulaTime[name] = [];
+ }
+ if (window.wulaTime[name].length == 0) {
+ //尝试改变台风的显示样式开始
+ for (var i = 0; i < all.length; i++) {
+ (function (a) {
+ var k = setTimeout(function () {
+ typhoonMove(all[a], level, name);
+ }, a * time * 1000); //.....
+ window.wulaTime[name][a] = k;
+ })(i)
+ }
+ //最后一个定时器 显示台风当前的点的位置
+ all.filter(function (item, index, arr) {
+ if (item.t == 1) {
+ var k = setTimeout(function () {
+ typhoonMove(all[index], level, name)
+ }, all.length * time * 1000)
+ window.wulaTime[name][all.length] = k;
+ }
+ })
+ }
+ //尝试改变台风的显示样式结束
+}
+
+//显示台风运动
+function typhoonMove(data, level, name) {
+ if (window.wulaFeature[name] != null) {
+ shipMap.sourceList.taifeng.removeFeature(wulaFeature[name]);
+ }
+ // if(wulaFeature1[name] != null){
+ // Source.taifeng.removeFeature(wulaFeature1[name]);
+ // }
+
+ var Configs = {
+ CIRCLE_CENTER_X: data.lon,
+ CIRCLE_CENTER_Y: data.lat,
+ CIRCLE_R: {
+ "SE": parseFloat(data.radius10.se),
+ "NE": parseFloat(data.radius10.ne),
+ "NW": parseFloat(data.radius10.nw),
+ "SW": parseFloat(data.radius10.sw)
+ }
+ };
+ var obj = makeTyphoonData(Configs, level);
+ window.wulaFeature[name] = wktformat.readFeature(obj.wkt);
+ window.wulaFeature[name].set('lineName', name);
+ // wulaFeature1[name] = wktformat.readFeature("POINT("+obj.xy[0]+" "+obj.xy[1]+")");
+ // wulaFeature1[name].set('lineName',name);
+ window.wulaFeature[name].setStyle(styleFunc());
+ shipMap.sourceList.taifeng.addFeatures([window.wulaFeature[name]]);
+}
+
+//台风圈数据处理函数
+function makeTyphoonData(Configs, level) {
+ var wkt = "POLYGON((";
+ var wkt0 = "", _interval = 6;
+ for (var i = 0; i < 360 / _interval; i++) {
+ var _r = 0;
+ var _ang = i * _interval;
+ if (_ang > 0 && _ang <= 90) {
+ _r = Configs.CIRCLE_R.NE * level;
+ } else if (_ang > 90 && _ang <= 180) {
+ _r = Configs.CIRCLE_R.NW * level;
+ } else if (_ang > 180 && _ang <= 270) {
+ _r = Configs.CIRCLE_R.SW * level;
+ } else {
+ _r = Configs.CIRCLE_R.SE * level;
+ }
+
+ var xy = transform([Configs.CIRCLE_CENTER_X, Configs.CIRCLE_CENTER_Y], 'EPSG:4326', 'EPSG:3857');
+ var x = xy[0] + _r * Math.cos(_ang * 3.14 / 180);
+ var y = xy[1] + _r * Math.sin(_ang * 3.14 / 180);
+ wkt = wkt + "" + x + " " + y + ", ";
+ if (i === 0) {
+ wkt0 = "" + x + " " + y + "";
+ }
+ }
+ wkt = wkt + wkt0 + "))";
+ return {
+ wkt: wkt,
+ xy: xy
+ }
+}
+
+//台风圈样式
+function styleFunc() {
+ return new Style({
+ fill: new Fill({
+ color: 'rgba(255, 0, 0, 0.2)'
+ }),
+ stroke: new Stroke({
+ color: '#ffcc33',
+ width: 2
+ }),
+ image: new Circle({
+ radius: 4,
+ fill: new Fill({
+ color: '#ff0000'
+ })
+ })
+ });
+};
+
+
+//根据台风点绘制 线点
+//isFuture true是预报点,false是当前点
+//istemp是临时要素
+function drawTyphoonNew(typhoonpts, name, code, lineName) {
+ var typhoonLineFeatures = [];
+ var count = typhoonpts.length;
+ var _line1 = [];
+ var _line2 = [];
+ var cline = _line1;
+ for (var i = 0; i < count; i++) {
+ var _coor = fromLonLat([typhoonpts[i].lon, typhoonpts[i].lat]);
+ var _geom = new Point(_coor);
+ var _feature = new Feature();
+ //var date = getDate(typhoonpts[i].typhoonTime);
+ //var secondDate = new Date(date.valueOf() + 8*60*60*1000);
+ //_feature.set("showTime",secondDate.format("yyyy-MM-dd hh"));
+ _feature.setProperties(typhoonpts[i]);
+ _feature.set("type", "typhoon");
+ _feature.set("t", typhoonpts[i].t);
+ _feature.set("time", typhoonpts[i].time);
+ _feature.set("maxWindSpeed", typhoonpts[i].windSpeed);
+ _feature.set("airPressure", typhoonpts[i].airPressure);
+ _feature.set("maxRadius7", typhoonpts[i].maxRadius7);
+ _feature.set("maxRadius10", typhoonpts[i].maxRadius10);
+ _feature.set("radius7", typhoonpts[i].radius7);
+ _feature.set("radius10", typhoonpts[i].radius10);
+ _feature.set("moveDirection", typhoonpts[i].direction);
+ _feature.set("moveSpeed", typhoonpts[i].speed);
+ _feature.set("code", code);
+ _feature.set("name", name);
+ _feature.set("lineName", lineName);//这个用于删除时找到属于该台风的点
+ _feature.setGeometry(_geom);
+ if (i == 0) {
+ _feature.setStyle(typhoonStartPoint);
+ }
+ // else {
+ // _feature.setStyle(typhoonStartPointTime);
+ // }
+ typhoonLineFeatures.push(_feature);
+ cline.push(_coor);
+ if (typhoonpts[i].t == 1) {
+ cline = _line2;
+ cline.push(_coor);
+ }
+ if (typhoonpts[i].lon >= 180) {
+ var l = typhoonpts[i].lon - 360;
+ var cd = fromLonLat([l, typhoonpts[i].lat]);
+ var _g = new Point(cd);
+ var _f = new Feature();
+ _f.setProperties(typhoonpts[i]);
+ _f.set("type", "typhoon");
+ _f.set("longitude", l);
+ _f.set("t", typhoonpts[i].t);
+ _f.set("time", typhoonpts[i].time);
+ _f.set("maxWindSpeed", typhoonpts[i].windSpeed);
+ _f.set("airPressure", typhoonpts[i].airPressure);
+ _f.set("maxRadius7", typhoonpts[i].maxRadius7);
+ _f.set("maxRadius10", typhoonpts[i].maxRadius10);
+ _f.set("radius7", typhoonpts[i].radius7);
+ _f.set("radius10", typhoonpts[i].radius10);
+ _f.set("moveDirection", typhoonpts[i].direction);
+ _f.set("moveSpeed", typhoonpts[i].speed);
+ _f.set("code", code);
+ _f.set("name", name);
+ _f.set("lineName", lineName);
+ _f.setGeometry(_g);
+ typhoonLineFeatures.push(_f);
+ }
+ if (typhoonpts[i].lon <= -180) {
+ var l = typhoonpts[i].lon + 360;
+ var cd = fromLonLat([l, typhoonpts[i].lat]);
+ var _g = new Point(cd);
+ var _f = new Feature();
+ _f.setProperties(typhoonpts[i]);
+ _f.set("type", "typhoon");
+ _f.set("longitude", l);
+ _f.set("t", typhoonpts[i].t);
+ _f.set("time", typhoonpts[i].time);
+ _f.set("maxWindSpeed", typhoonpts[i].windSpeed);
+ _f.set("airPressure", typhoonpts[i].airPressure);
+ _f.set("maxRadius7", typhoonpts[i].maxRadius7);
+ _f.set("maxRadius10", typhoonpts[i].maxRadius10);
+ _f.set("radius7", typhoonpts[i].radius7);
+ _f.set("radius10", typhoonpts[i].radius10);
+ _f.set("moveDirection", typhoonpts[i].direction);
+ _f.set("moveSpeed", typhoonpts[i].speed);
+ _f.set("code", code);
+ _f.set("name", name);
+ _f.set("lineName", lineName);
+ _f.setGeometry(_g);
+ typhoonLineFeatures.push(_f);
+ }
+ }
+ //台风已经经过的线路
+ var taifengLine1 = new Feature({
+ geometry: new LineString(_line1)
+ });
+ taifengLine1.set("t", 3);
+ taifengLine1.set("type", "typhoonLine");
+ taifengLine1.set("code", code);
+ taifengLine1.setId(lineName + '1');
+ //台风未来经过的线路
+ var taifengLine2 = new Feature({
+ geometry: new LineString(_line2)
+ });
+ taifengLine2.set("t", 4);
+ taifengLine2.set("type", "typhoonLine");
+ taifengLine2.set("code", code);
+ taifengLine2.setId(lineName + '2');
+ shipMap.sourceList.taifeng.addFeature(taifengLine1);//台风线
+ shipMap.sourceList.taifeng.addFeature(taifengLine2);//台风线
+ shipMap.sourceList.taifeng.addFeatures(typhoonLineFeatures);//台风点
+}
+
+function typhoonStartPoint(f, r) {
+ var s = new Style({
+ fill: new Fill({
+ color: 'rgba(255, 0, 0, 0.8)'
+ }),
+ stroke: new Stroke({
+ color: 'rgba(255, 0, 0, 0.8)',
+ width: 2
+ }),
+ image: new Circle({
+ radius: 4,
+ fill: new Fill({
+ color: 'rgba(255, 0, 0, 0.8)'
+ })
+ })
+ });
+ var ntext = new Text({
+ textAlign: "left",
+ font: '12px Microsoft YaHei',
+ fill: new Fill({
+ color: "#5F88AA"
+ }),
+ stroke: new Stroke({
+ color: "#FFF",
+ width: 3
+ }),
+ textBaseline: "bottom",
+ offsetX: 8,
+ offsetY: -8,
+ text: f.get('name')
+ })
+ s.setText(ntext);
+ return [s];
+}
+
+function typhoonStartPointTime(f, r) {
+ // var s = new Style({
+ // fill: new Fill({
+ // color: 'rgba(255, 0, 0, 0.8)'
+ // }),
+ // stroke: new Stroke({
+ // color: 'rgba(255, 0, 0, 0.8)',
+ // width: 2
+ // }),
+ // image: new Circle({
+ // radius: 4,
+ // fill: new Fill({
+ // color: 'rgba(255, 0, 0, 0.8)'
+ // })
+ // })
+ // });
+ var ntext = new Style({
+ text: new Text({
+ textAlign: "left",
+ font: '12px Microsoft YaHei',
+ fill: new Fill({
+ color: "#5F88AA"
+ }),
+ stroke: new Stroke({
+ color: "#FFF",
+ width: 3
+ }),
+ textBaseline: "bottom",
+ offsetX: 8,
+ offsetY: -8,
+ text: f.get('name')
+ })
+ })
+ // s.setText(ntext);
+ return [ntext];
+}
+
+//烈风圈
+var liefengStyle = new Style({
+ fill: new Fill({
+ color: 'rgba(0,0,255,0.1)'
+ }),
+ stroke: new Stroke({
+ color: 'rgb(0,0,255)',
+ width: 2
+ })
+});
+
+//暴风圈
+var baofengStyle = new Style({
+ fill: new Fill({
+ color: 'rgba(255,0,0,0.2)'
+ }),
+ stroke: new Stroke({
+ color: 'rgb(255,0,0)',
+ width: 2
+ })
+});
+
+
+//添加分布图
+shipFun.addScattergram = (map) => {
+ map.addLayer(shipMap.distributeLayer)
+}
+//取消分布图
+shipFun.removeaScattergram = (map) => {
+ map.removeLayer(shipMap.distributeLayer)
+}
+
+shipMap.languageType = 2
+//语言设置
+shipFun.setLanguage = (languageType) => {
+ shipMap.languageType = languageType
+}
+shipFun.getZoom = function () {
+ return shipMap.map.getView().getZoom()
+}
+//添加地图层级变化监听函数
+shipFun.addZoomListener = (map, callback) => {
+ map.on('moveend', function (e) {
+ var zoom = map.getView().getZoom() //获取当前地图的缩放级别
+ callback(zoom)
+ })
+
+ // 监听气象点击 , 单击地图显示气象要素值
+ shipMap.popupOverlay = new Overlay({
+ element: document.getElementById('popup'), //绑定dom对象,纯js必须使用document绑定,不能像Map的dom对象,只写‘popup’
+ autoPan: true, //点击地图边缘时,地图自动调节
+ autoPanMargin: 20,
+ positioning: 'center-center'
+ })
+ shipMap.map.addOverlay(shipMap.popupOverlay)
+ var container = document.getElementById('popup')
+ var content = document.getElementById('popup-content')
+ map.on('singleclick', function (evt) {
+ //包含气象图层
+ if (hasLayerInMap(shipMap.layerList.iLayer)) {
+ let weatherType = mapClient.colorMapTileLayer.source.factor
+ let weatherTypeStr = ''
+ const language = window.localStorage.getItem('language')
+ if (shipMap.languageType == 2) {
+ switch (weatherType) {
+ case 'temp':
+ weatherTypeStr = language === 'zh' ? '温度' : 'temperature'
+ break
+ case 'pressure':
+ weatherTypeStr = language === 'zh' ? '气压' : 'pressure'
+ break
+ case 'wind':
+ weatherTypeStr = language === 'zh' ? '风' : 'wind'
+ break
+ case 'seaCurrents':
+ weatherTypeStr = language === 'zh' ? '洋流' : 'ocean current'
+ break
+ }
+ } else {
+ weatherTypeStr = weatherType
+ }
+ var weatherStr = mapClient.decodeColorMapTileValue(evt.pixel, mapClient.getExtent(map), map.getView().getZoom())
+ var coordinate = evt.coordinate // 获取坐标
+ shipMap.popupOverlay.setPosition(coordinate)
+ content.innerHTML = '' + weatherTypeStr + ':' + weatherStr + '
' //弹窗展示内容为经纬度信息
+ container.style.display = 'block'
+ container.style.color = '#ffffff'
+ }
+
+ let pixel = map.getEventPixel(evt.originalEvent)
+ let feature = map.forEachFeatureAtPixel(pixel, function (feature) {
+ return feature
+ })
+ // 查询方式有很多
+ if (feature) {
+ let type = feature.getProperties()['type']
+ } else {
+ shipFun.delSelect()
+ }
+ })
+}
+//移除地图层级变化监听函数
+shipFun.removePopupOverlay = function () {
+ // 把弹窗位置设置为undefined,并清空坐标数据
+ shipMap.popupOverlay.setPosition(undefined)
+ return false
+}
+//移除地图层级变化监听函数
+shipFun.removeZoomListener = () => {
+ unByKey(shipMap.Listen)
+}
+
+//添加实时显示鼠标位置的函数
+shipFun.addMousePos = function (map) {
+ let mapMousePosition = new MousePosition({
+ coordinateFormat: function (coor) {
+ while (coor[0] < -180) coor[0] = coor[0] + 360
+ while (coor[0] > 180) coor[0] = coor[0] - 360
+ //log(coor);
+ let lon = shipFun.cacuLonLat(coor[0], 'lon')
+ let lat = shipFun.cacuLonLat(coor[1], 'lat')
+ document.getElementById('positionLng').innerText = lon
+ document.getElementById('positionLat').innerText = lat
+ return ''
+ },
+ projection: 'EPSG:4326'
+ })
+ map.addControl(mapMousePosition)
+}
+//隐藏船舶
+shipFun.hideShips = (idList) => {
+ let type = typeof idList
+ if (type == 'string') {
+ let f = shipMap.sourceList.shipSource.getFeatureById(idList)
+ shipMap.sourceList.shipSource.removeFeature(f)
+ } else if (type == 'object') {
+ idList.forEach((x, i) => {
+ let f = shipMap.sourceList.shipSource.getFeatureById(x)
+ shipMap.sourceList.shipSource.removeFeature(f)
+ })
+ } else {
+ }
+ return ''
+}
+//显示船舶
+shipFun.showShips = (idList) => {
+ let type = typeof idList
+ if (type == 'string') {
+ shipMap.sourceList.shipSource.addFeature(f)
+ } else if (type == 'object') {
+ idList.forEach((x, i) => {
+ shipMap.sourceList.shipSource.addFeature(f)
+ })
+ } else {
+ }
+ return ''
+}
+
+//船舶点击函数
+shipFun.addClick = (callback) => {
+ shipMap.shipClick = new intSelect({
+ style: null,
+ layers: [shipMap.layerList.berthLayer, shipMap.layerList.shipLayer, shipMap.layerList.portLayer,shipMap.layerList.carLayer]
+ })
+ let shipmes = ''
+ shipMap.shipClick.on('select', function (evt) {
+ let f = evt.selected[0]
+ shipFun.delSelect()
+ shipmes = f.values_
+ if (f.values_.type === 'berth') {
+ shipFun.addSelectByCoor([f.values_.berthLon, f.values_.berthLat])
+ shipmes.isType = 'berth'
+ } else if (f.values_.type === 'port') {
+ shipFun.addSelectByCoor([shipmes.portLon, shipmes.portLat])
+ shipmes.isType = 'port'
+ } else if (f.values_.type === 'ship') {
+ shipFun.addSelectByCoor([shipmes.lon / 600000, shipmes.lat / 600000])
+ shipmes.isType = 'ship'
+ } else if(f.values_.type === 'car') {
+ shipFun.addSelectByCoor([shipmes.longitude, shipmes.latitude])
+ shipmes.isType = 'car'
+ }
+ callback(shipmes)
+ })
+ shipMap.map.addInteraction(shipMap.shipClick)
+}
+//添加港口范围
+shipFun.addarea = (dataList) => {
+ let Coor = []
+ for (let i = 0; i < dataList.length; i++) {
+ let coor = transform(
+ [dataList[i].lon, dataList[i].lat],
+ 'EPSG:4326',
+ 'EPSG:3857'
+ )
+ Coor.push(coor)
+ }
+ let line = new LineString(Coor) //这是已知点画线
+ //多边形要素类
+ let newFeature = new Feature({
+ geometry: line
+ })
+ newFeature.setStyle(shipStyle.areastyle)
+ shipMap.sourceList.pathLineSource.addFeature(newFeature)
+}
+// 清除电子围栏
+shipFun.clearArea = () => {
+ shipMap.sourceList.pathLineSource.clear()
+}
+
+function __makePathData(data, __map, pathId) {
+ var re = [];
+ var start = data[0];
+ re.push(start);
+ var it0 = transform([Number(start.lon), Number(start.lat)], 'EPSG:4326', 'EPSG:3857');
+ for (var i = 1; i <= data.length - 2; i++) {
+ var item = data[i];
+ var it = transform([Number(item.lon), Number(item.lat)], 'EPSG:4326', 'EPSG:3857');
+ var pix = __map.getPixelFromCoordinate(it);
+ var pix0 = __map.getPixelFromCoordinate(it0);
+ if (Math.abs(pix[0] - pix0[0]) > 50 || Math.abs(pix[1] - pix0[1]) > 50) {
+ re.push(item);
+ it0 = it;
+ } else {
+ var s = it0;
+ var c = it;
+ var e = transform([Number(data[i + 1].lon), Number(data[i + 1].lat)], 'EPSG:4326', 'EPSG:3857');
+ var dx1 = c[0] - s[0];
+ var dy1 = c[1] - s[1];
+ var r1 = Math.atan2(dy1, dx1);
+ var dx2 = e[0] - c[0];
+ var dy2 = e[1] - c[1];
+ var r2 = Math.atan2(dy2, dx2);
+ var angle = Math.abs(r2 - r1);
+ var jd = 180 / Math.PI * angle;
+ if (jd > 30) {
+ re.push(item);
+ it0 = it;
+ }
+ }
+ }
+ re.push(data[data.length - 1]);
+ return re;
+}
+
+function guid() {
+ return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
+ var r = Math.random() * 16 | 0,
+ v = c == 'x' ? r : (r & 0x3 | 0x8)
+ return v.toString(16)
+ })
+}
+
+function fitPath(data, map) {
+ if (data) {
+ var minx, miny, maxx, maxy
+ data.forEach(function (item, index) {
+ var it = transform([Number(item.lon), Number(item.lat)], 'EPSG:4326', 'EPSG:3857')
+ if (!minx) minx = it[0]
+ if (!miny) miny = it[1]
+ if (!maxx) maxx = it[0]
+ if (!maxy) maxy = it[1]
+ if (minx > it[0]) minx = it[0]
+ if (miny > it[1]) miny = it[1]
+ if (maxx < it[0]) maxx = it[0]
+ if (maxy < it[1]) maxy = it[1]
+
+ })
+ var view = map.getView()
+ view.fit([minx, miny, maxx, maxy], {padding: [50, 50, 50, 50]})
+ }
+}
+
+//添加轨迹
+shipFun.addPath = (dataList, __map) => {
+ dataList.map(function (item, index, arr) {
+ if (index > 0) {
+ if ((item.lon - arr[index - 1].lon) < -180) {
+ item.lon += 360
+ } else if ((item.lon - arr[index - 1].lon) > 180) {
+ var i = index - 1
+ while (i >= 0) {
+ arr[i--].lon += 360
+ }
+ }
+ }
+ })
+
+ let pathId = guid()
+ let re = __makePathData(dataList, __map, pathId)
+ __pathDrawData[pathId] = re;
+ __pathData[pathId] = dataList;
+ __drawPathData(re, pathId)
+ fitPath(dataList, __map);
+ return pathId
+}
+var __tsize = [];
+
+function __drawPathData(dataList, pathId) {
+ let Coor = []
+ let ids = []
+ for (let i = 0; i < dataList.length; i++) {
+ let coor = transform(
+ [dataList[i].lon, dataList[i].lat],
+ 'EPSG:4326',
+ 'EPSG:3857'
+ )
+ Coor.push(coor)
+ }
+ let line = new LineString(Coor) //这是已知点画线
+ //多边形要素类
+ let newFeature = new Feature({
+ geometry: line
+ })
+ newFeature.setStyle(shipStyle.pathColor)
+ newFeature.setId(pathId)
+ ids.push(pathId)
+ shipMap.sourceList.pathLineSource.addFeature(newFeature)
+
+ for (let i = 0; i < Coor.length; i++) {
+ let point = new Point(Coor[i]) //这是已知点画线
+ let newFeature = new Feature({
+ geometry: point,
+ heading: dataList[i].direction,
+ sog: dataList[i].sog,
+ lon: dataList[i].lon,
+ lat: dataList[i].lat,
+ time: dataList[i].time,
+ type: 'pathPoint'
+ })
+ newFeature.set('geom', point)
+ newFeature.setId(pathId + '-' + (i + 1))
+ ids.push(pathId + '-' + (i + 1))
+ newFeature.setStyle(
+ // shipStyle.pathStyle(formatDate(dataList[i].posTime, 'hh:mm:ss'))
+ shipStyle.pathStyle(dayjs(dataList[i].posTime * 1000).format('YYYY-MM-DD hh:mm:ss'))
+ )
+ shipMap.sourceList.pathPointSource.addFeature(newFeature)
+ if (i == 0) {
+ let pointStart = new Point(Coor[i])
+ let startF = new Feature({
+ geometry: pointStart
+ })
+ startF.setId(pathId + '-start')
+ ids.push(pathId + '-start')
+ startF.setStyle(shipStyle.pathSEStyle('start'))
+ shipMap.sourceList.pathPointSource.addFeature(startF)
+ }
+ if (i == dataList.length - 1) {
+ let pointEnd = new Point(Coor[i])
+ let endF = new Feature({
+ geometry: pointEnd
+ })
+ endF.setId(pathId + '-end')
+ ids.push(pathId + '-end')
+ endF.setStyle(shipStyle.pathSEStyle('end'))
+ shipMap.sourceList.pathPointSource.addFeature(endF)
+ }
+ }
+
+ // fitPath(dataList, shipMap.map)
+ __pathArray[pathId] = ids;
+ return pathId
+}
+
+function _$(d) {
+ return document.getElementById(d);
+}
+
+function textSize(text) {
+ if (__tsize[text]) {
+ return __tsize[text];
+ }
+ var result = {};
+ var span = _$("__testStringWide");
+ if (!span) {
+ span = document.createElement("span");
+ span.id = "__testStringWide";
+ span.style.font = "16px Microsoft YaHei 100";
+ span.style.whiteSpace = "nowrap";
+ span.style.visibility = "hidden";
+ document.body.appendChild(span);
+ }
+ if (typeof span.textContent != "undefined")
+ span.textContent = "";
+ else span.innerText = "";
+ result.width = span.offsetWidth;
+ result.height = span.offsetWidth;
+ if (typeof span.textContent != "undefined")
+ span.textContent = text;
+ else span.innerText = text;
+ result.width = span.offsetWidth - result.width + 3;
+ //result.height = span.offsetHeight - result.height;
+ result.height = 22;
+ __tsize[text] = result;
+ return result;
+}
+
+var screenText = {};
+var heigthKey = 14;
+
+function calcLablePos3(center, size, id) {
+ var result = {};
+ var pos = {};
+ pos.l = Math.round((center.left + 10) / 30);
+ pos.length = Math.round(size.width / 30) + 1;
+ //右上
+ pos.t = Math.round(center.top / 30) - 1;
+ let hasLable = false;
+ for (var i = pos.l; i < pos.l + pos.length; i++) {
+ var o = screenText[i + "-" + pos.t];
+ if (o) {
+ if (o != id) {
+ hasLable = true;
+ break;
+ }
+ }
+ }
+ if (!hasLable) {
+ result.canDraw = true;
+ result.offsetX = 10;
+ result.offsetY = -heigthKey - (center.top - (pos.t + 1) * 30);
+ for (var i = pos.l; i < pos.l + pos.length; i++) {
+ screenText[i + "-" + pos.t] = id;
+ }
+ return result;
+ }
+
+ //右下
+ pos.t = Math.round(center.top / 30) + 1;
+ hasLable = false;
+ for (var i = pos.l; i < pos.l + pos.length; i++) {
+ var o = screenText[i + "-" + pos.t];
+ if (o) {
+ if (o != id) {
+ hasLable = true;
+ break;
+ }
+ }
+ }
+ if (!hasLable) {
+ result.canDraw = true;
+ result.offsetX = 10;
+ result.offsetY = heigthKey - (center.top - (pos.t - 1) * 30);
+ for (var i = pos.l; i < pos.l + pos.length; i++) {
+ screenText[i + "-" + pos.t] = id;
+ }
+ return result;
+ }
+
+ pos.length = Math.round(size.width / 30);
+ pos.l = Math.round((center.left - size.width - 10) / 30) - 1;
+ //左上
+ pos.t = Math.round(center.top / 30) - 1;
+ hasLable = false;
+ for (var i = pos.l; i < pos.l + pos.length; i++) {
+ var o = screenText[i + "-" + pos.t];
+ if (o) {
+ if (o != id) {
+ hasLable = true;
+ break;
+ }
+ }
+ }
+ if (!hasLable) {
+ result.canDraw = true;
+ result.offsetX = -size.width - 10;
+ result.offsetY = -heigthKey - (center.top - (pos.t + 1) * 30);
+ for (var i = pos.l; i < pos.l + pos.length; i++) {
+ screenText[i + "-" + pos.t] = id;
+ }
+ return result;
+ }
+
+
+ //左下
+ pos.t = Math.round(center.top / 30) + 1;
+ hasLable = false;
+ for (var i = pos.l; i < pos.l + pos.length; i++) {
+ var o = screenText[i + "-" + pos.t];
+ if (o) {
+ if (o != id) {
+ hasLable = true;
+ break;
+ }
+ }
+ }
+ if (!hasLable) {
+ result.canDraw = true;
+ result.offsetX = -size.width - 10;
+ result.offsetY = heigthKey - (center.top - (pos.t - 1) * 30);
+ for (var i = pos.l; i < pos.l + pos.length; i++) {
+ screenText[i + "-" + pos.t] = id;
+ }
+ return result;
+ }
+ return result;
+}
+
+var wayPointStyle = function (f, r) {
+ let style = new Style({
+ image: new Circle({
+ radius: 3,
+ fill: new Fill({
+ color: '#ffffff'
+ }),
+ stroke: new Stroke({
+ color: '#3272dd',
+ width: 3
+ })
+ })
+ });
+ var map = shipMap.map;
+ var pix = map.getPixelFromCoordinate(f.getGeometry().getCoordinates());
+ var name = f.get("timeStr");
+ var size = textSize(name);
+ var center = {};
+ center.left = Math.round(pix[0]);
+ center.top = Math.round(pix[1]);
+ var re = calcLablePos3(center, size, f.getId());
+ var styles = [];
+ styles.push(style);
+ if (re.canDraw) {
+ if (Math.abs(re.offsetY) < 10) {
+ if (re.offsetY <= 0)
+ re.offsetY = -10;
+ else
+ re.offsetY = 10;
+ }
+ var ntext = new Text({
+ textAlign: "left",
+ font: '10px Microsoft YaHei',
+ fill: new Fill({
+ color: "#5F88AA"
+ }),
+ stroke: new Stroke({
+ color: "#FFF",
+ width: 3
+ }),
+ textBaseline: "bottom",
+ offsetX: re.offsetX,
+ offsetY: re.offsetY,
+ text: name
+ });
+ style.setText(ntext);
+ var textLine = new Style({
+ fill: new Fill({
+ color: '#00C000'
+ }),
+ stroke: new Stroke({
+ color: '#FF0000',
+ width: 0.5
+ })
+ });
+ var e = [];
+ e[0] = pix[0];
+ e[1] = pix[1];
+ if (re.offsetX > 0) {
+ e[0] += 10;
+ e[1] += re.offsetY;
+ }
+ if (re.offsetX < 0) {
+ e[0] -= 10;
+ e[1] += re.offsetY;
+ }
+ var end = map.getCoordinateFromPixel(e);
+ var slGeo = new LineString([f.getGeometry().getCoordinates(), end]);
+ textLine.setGeometry(slGeo);
+ styles.push(textLine);
+ }
+ return styles;
+}
+
+//删除轨迹
+shipFun.delPath = () => {
+ shipMap.sourceList.pathLineSource.clear()
+ shipMap.sourceList.pathPointSource.clear()
+ __pathData = {}
+ __pathArray = {}
+}
+// 删除单条轨迹
+shipFun.delPathOne = (path, points) => {
+ const pathLineSource = shipMap.sourceList.pathLineSource
+ const pathPointSource = shipMap.sourceList.pathPointSource
+ const Feature = pathLineSource.getFeatureById(path)
+ delete __pathData[path];
+ delete __pathArray[path];
+ const startFeature = pathPointSource.getFeatureById(path + '-start')
+ const endFeature = pathPointSource.getFeatureById(path + '-end')
+ pathLineSource.removeFeature(Feature)
+ pathPointSource.removeFeature(startFeature)
+ pathPointSource.removeFeature(endFeature)
+ for (let i = 0; i < points; i++) {
+ const Feature = pathPointSource.getFeatureById(path + '-' + (i + 1))
+ pathPointSource.removeFeature(Feature)
+ }
+}
+//移动显示船舶信息及船舶轨迹信息
+shipFun.showShipPathMessage = (map, Vue) => {
+ let showMes = new Overlay({
+ element: document.getElementById('showShipMessage')
+ })
+ let showPathMes = new Overlay({
+ element: document.getElementById('showPathPointMessage')
+ })
+ let showPortMes = new Overlay({
+ element: document.getElementById('showPortMessage')
+ })
+
+ map.on('pointermove', function (evt) {
+ if (evt.dragging) {
+ return
+ }
+ let pixel = map.getEventPixel(evt.originalEvent)
+ let feature = map.forEachFeatureAtPixel(pixel, function (feature) {
+ return feature
+ }) //查询方式有很多
+ if (feature) {
+ let type = feature.getProperties()['type']
+ if (type === 'ship') {
+ Vue.shipFloatMes = {
+ shipnameEn: feature.get('shipnameEn'),
+ mmsi: feature.get('mmsi'),
+ chuanboid: feature.get('shipid'),
+ lon: shipFun.cacuLonLat(feature.get('lon') / 600000, 'lon'),
+ lat: shipFun.cacuLonLat(feature.get('lat') / 600000, 'lat'),
+ time: feature.get('posTime')
+ }
+ showMes.setPosition(feature.get('geom').getCoordinates())
+ map.addOverlay(showMes)
+ } else if (type === 'pathPoint') {
+ Vue.shipFloatMes = {
+ heading: feature.get('heading'),
+ sog: feature.get('sog'),
+ lon: shipFun.cacuLonLat(feature.get('lon'), 'lon'),
+ lat: shipFun.cacuLonLat(feature.get('lat'), 'lat'),
+ time: feature.get('time')
+ }
+ showPathMes.setPosition(feature.get('geom').getCoordinates())
+ map.addOverlay(showPathMes)
+ } else if (type === 'port') {
+ // 港口鼠标事件
+ Vue.shipFloatMes = {
+ portNameCn: feature.get('portNmaeCn'),
+ portNameEn: feature.get('portNmaeEn'),
+ portCode: feature.get('portCode'),
+ portLatLon: feature.get('portLatLon'),
+ }
+ showPortMes.setPosition(feature.get('geom').getCoordinates())
+ map.addOverlay(showPortMes)
+ }
+ } else {
+ map.removeOverlay(showMes)
+ map.removeOverlay(showPathMes)
+ map.removeOverlay(showPortMes)
+ }
+ })
+}
+
+shipFun.updateSize = (map) => {
+ map.updateSize()
+}
+//添加船舶的选择框
+shipFun.addSelect = (id, type) => {
+ // let f = shipMap.sourceList.shipSource.getFeatureById(id)
+ let f = shipMap.sourceList.berthSource.getFeatureById(id)
+ let p = new Point(f.get('geom').getCoordinates())
+ let s = new Feature({
+ geometry: p
+ })
+ s.setStyle(shipStyle.selectStyle)
+ shipMap.sourceList.selectSource.addFeature(s)
+}
+shipFun.addSelectByCoor = (coor) => {
+ shipFun.delSelect()
+ let Coor = transform(coor, 'EPSG:4326', 'EPSG:3857')
+ let p = new Point(Coor)
+ let s = new Feature({
+ geometry: p
+ })
+ // shipFun.setCenter(Coor);
+ // shipFun.setZoom(12);
+ s.setStyle(shipStyle.selectStyle)
+ shipMap.sourceList.selectSource.addFeature(s)
+}
+//消除船舶选中
+shipFun.delSelect = () => {
+ shipMap.sourceList.selectSource.clear()
+}
+//添加标记
+shipFun.addSign = (map) => {
+ map.addInteraction(shipMap.drawPointDraw)
+ shipMap.drawPointDraw.on('drawstart', function (e) {
+ e.feature.setStyle(shipStyle.signStyle)
+ })
+ shipMap.drawPointDraw.on('drawend', function (e) {
+ map.removeInteraction(shipMap.drawPointDraw)
+ })
+}
+//删除标记
+shipFun.delSign = () => {
+}
+//设置海图中心
+shipFun.setCenter = (coor) => {
+ coor = transform(coor, 'EPSG:4326', 'EPSG:3857')
+ shipMap.view.setCenter(coor)
+}
+// 绘制警戒线
+shipFun.drawLine = function (id, data, color, width, name, isDotted) {
+ if (!color) {
+ color = '#FF0000';
+ }
+ if (!width) {
+ width = 1;
+ }
+ var feature = lineDataTrans(data);
+ feature.setId(id);
+ var style11 = null;
+ if (isDotted) {
+ style11 = new Style({
+ stroke: new Stroke({
+ color: color,
+ width: width,
+ lineDash: [5, 5]
+ })
+ });
+ } else {
+ style11 = new Style({
+ stroke: new Stroke({
+ color: color,
+ width: width
+ })
+ });
+ }
+ if (name) {
+ var ntext = new Text({
+ textAlign: "left",
+ font: '10px Microsoft YaHei',
+ fill: new Fill({color: "#5F88AA"}),
+ stroke: new Stroke({color: "#FFF", width: 3}),
+ textBaseline: "bottom",
+ offsetX: 0,
+ offsetY: -8,
+ overflow: true
+ });
+ ntext.setText(name);
+ style11.setText(ntext);
+ }
+ feature.setStyle(style11);
+ shipMap.sourceList.jjxSource.addFeature(feature);
+}
+
+
+shipFun.delTyphoon = function (name) {
+ shipMap.sourceList.taifeng.removeFeature(shipMap.sourceList.taifeng.getFeatureById(name + '1'));
+ window.wulaFeature[name] = null;
+ shipMap.sourceList.taifeng.removeFeature(shipMap.sourceList.taifeng.getFeatureById(name + '2'));
+ shipMap.sourceList.taifeng.forEachFeature(function (f) {
+ if (f.get("lineName") == name) {
+ shipMap.sourceList.taifeng.removeFeature(f);
+ }
+ })
+ //清除台风定时器
+ for (var i = 0; i < window.wulaTime[name].length; i++) {
+ window.clearTimeout(window.wulaTime[name][i])
+ }
+ window.wulaTime[name].length = 0;
+}
+
+shipFun.hideTyphoon = function () {
+ shipMap.sourceList.taifeng.clear();
+ window.wulaFeature = [];
+ for (let x in window.wulaTime) {
+ for (var i = 0; i < window.wulaTime[x].length; i++) {
+ window.clearTimeout(window.wulaTime[x][i])
+ }
+ window.wulaTime[x].length = 0;
+ }
+}
+//绘制台风图层new
+shipFun.showTaiFengNew2 = function (tdata, level, time, name) {
+ var data = tdata.data;
+
+ var arr = data.filter(function (item, index) {
+ item.longitude = item.lon;
+ if (index > 0) {
+ if ((item.lon - data[index - 1].lon) < -180)
+ item.lon += 360;
+ else if ((item.lon - data[index - 1].lon) > 180)
+ item.lon -= 360;
+
+ }
+ item.f = item.forcast.filter(function (it, idx) {
+ if (idx === 0) {
+ if ((it.lon - item.lon) < -180)
+ it.lon += 360;
+ else if ((it.lon - item.lon) > 180)
+ it.lon -= 360;
+ }
+ if (idx > 0) {
+ if ((it.lon - item.forcast[idx - 1].lon) < -180)
+ it.lon += 360;
+ else if ((it.lon - item.forcast[idx - 1].lon) > 180)
+ it.lon -= 360;
+ }
+ return it;
+ });
+ return item;
+ });
+ var his = [], current, fut = [], arrLength;
+ arrLength = arr.length;
+ for (var i = 0; i < arrLength - 1; i++) {
+ arr[i].t = 0;
+ his.push(arr[i]);
+ if (arr[i].f.length > 0) {
+ arr[i].f.unshift(arr[i]);
+ }
+ }
+ current = arr[arrLength - 1];
+ current.t = 1;
+ for (var i = 0; i < current.f.length; i++) {
+ current.f[i].t = 2;
+ current.f[i].longitude = current.f[i].lon;
+ fut.push(current.f[i]);
+ }
+ var all = his.concat(current);
+ all = all.concat(fut);
+
+ /*var startll = ol.proj.fromLonLat([arr[0].lon, arr[0].lat]);
+ var startf = new ol.Feature({
+ geometry: new Point(startll)
+ });
+ startf.set("name",tdata.seq);
+ startf.setStyle(typhoonStart);
+ Source.taifeng.addFeature(startf);*/
+
+ var center = fromLonLat([current.lon, current.lat]);
+ var ct = new Feature({
+ geometry: new Point(center)
+ });
+ ct.set("name", tdata.seq);
+ ct.setStyle(typhoonCenter2);
+ ct.set("code", tdata.code);
+ Source.taifeng.addFeature(ct);
+ drawTyphoonNew(all, tdata.seq, tdata.code, name);
+ var rad_neq34kt = parseInt(current.radius7);
+ var rad_neq50kt = parseInt(current.radius10);//暴风圈
+ var liefeng = new ol.Feature({
+ geometry: new CircleGeom(center, rad_neq34kt * 1000)
+ });
+ var baofeng = new ol.Feature({
+ geometry: new CircleGeom(center, rad_neq50kt * 1000)
+ });
+
+ liefeng.setStyle(liefengStyle);
+ baofeng.setStyle(baofengStyle);
+ liefeng.set("code", tdata.code);
+ baofeng.set("code", tdata.code);
+
+ //绑定定时器的数组
+ if (window.wulaTime[name] == undefined) {
+ window.wulaTime[name] = [];
+ }
+ if (window.wulaTime[name].length == 0) {
+ //尝试改变台风的显示样式开始
+ for (var i = 0; i < all.length; i++) {
+ (function (a) {
+ var k = setTimeout(function () {
+ typhoonMove(all[a], level, name);
+ }, a * time * 1000); //.....
+ window.wulaTime[name][a] = k;
+ })(i)
+ }
+ //最后一个定时器 显示台风当前的点的位置
+ all.filter(function (item, index, arr) {
+ if (item.t == 1) {
+ var k = setTimeout(function () {
+ typhoonMove(all[index], level, name)
+ }, all.length * time * 1000)
+ window.wulaTime[name][all.length] = k;
+ }
+ })
+ }
+
+
+ //尝试改变台风的显示样式结束
+}
+
+function typhoonCenter2(f, r) {
+ var s = new Style({
+ image: new Icon({
+ src: 'images/msmap/current.png',
+ anchor: [0.5, 1.1]
+ })
+ });
+ var ntext = new Text({
+ textAlign: "left",
+ font: '12px Microsoft YaHei',
+ fill: new Fill({
+ color: "#5F88AA"
+ }),
+ stroke: new Stroke({
+ color: "#FFF",
+ width: 3
+ }),
+ textBaseline: "bottom",
+ offsetX: 8,
+ offsetY: -8,
+ text: f.get('name')
+ })
+ s.setText(ntext);
+ return [s];
+}
+
+function lineDataTrans(json) {
+ var data = [];
+ for (var i in json) {
+ data.push({lon: Number(json[i].lon), lat: Number(json[i].lat)});
+ }
+ data.map(function (item, index, arr) {
+ if (index > 0) {
+ if ((item.lon - arr[index - 1].lon) < -180)
+ item.lon += 360;
+ else if ((item.lon - arr[index - 1].lon) > 180) {
+ var i = index - 1;
+ while (i >= 0) {
+ arr[i--].lon += 360;
+ }
+ }
+
+ }
+
+ });
+ var ar = [];
+ data.forEach(function (item, index) {
+ ar.push(transform([Number(item.lon), Number(item.lat)], 'EPSG:4326', 'EPSG:3857'));
+ });
+ var ls = new LineString(ar);
+ var lsf = new Feature({
+ geometry: ls
+ });
+ lsf.set("type", "line");
+ return lsf;
+};
+
+//设置地图层级
+shipFun.setZoom = (num) => {
+ shipMap.view.setZoom(num)
+}
+//添加eez线
+shipFun.addEez = (map, state) => {
+ if (state) {
+ map.addLayer(shipMap.layerList.eezLayer)
+ } else {
+ map.removeLayer(shipMap.layerList.eezLayer)
+ }
+}
+
+// ---我的修改---
+//添加测距
+shipFun.addRanging = (map, type) => {
+ map.removeInteraction(shipMap.drawPolygonDraw)
+ map.removeInteraction(shipMap.drawRingDraw)
+ map.removeInteraction(shipMap.drawRectangleDraw)
+ if (type == 'radius') {
+ shipMap.drawRingDraw.maxPoints_ = 2
+ } else {
+ shipMap.drawRingDraw.maxPoints_ = Infinity
+ }
+
+ map.addInteraction(shipMap.drawRingDraw)
+ let listener = null
+ let sketch = null
+ shipMap.drawRingDraw.on(
+ 'drawstart',
+ function (e) {
+ let tooltipCoord = e.coordinate
+ sketch = e.feature
+ listener = sketch.getGeometry().on('change', function (evt) {
+ let geom = evt.target
+ let output
+ if (geom instanceof LineString) {
+ output = shipFun.formatLength(geom)
+ tooltipCoord = geom.getLastCoordinate()
+ }
+ shipMap.measureTooltipElement.innerHTML =
+ output +
+ '' +
+ ` `
+ shipMap.measureTooltipElement.style =
+ 'background: #0050AC;color:#ffffff;padding:2px;border-radius: 10px;font-size: 10px;min-width: 87px;text-align: center'
+ shipMap.measureTooltip.setPosition(tooltipCoord)
+ })
+ },
+ this
+ )
+ shipMap.drawRingDraw.on('drawend', function (e) {
+ map.removeInteraction(shipMap.drawRingDraw)
+ shipMap.measureTooltipElement.style =
+ 'background: #0050AC;color:#ffffff;padding:2px;border-radius: 10px;font-size: 10px;min-width: 87px;text-align: center'
+ shipMap.measureTooltipElement.className = `ol-tooltip ol-tooltip-static `
+ shipMap.measureTooltipElement.setAttribute('id', sketch.ol_uid)
+ shipMap.measureTooltip.setOffset([0, -7])
+ sketch = null
+ shipMap.measureTooltipElement = null
+ shipFun.createMeasureTooltip(map)
+ unByKey(listener)
+ shipMap.maxpoint = 'infinity'
+ })
+}
+//我的修改 测距多边形
+shipFun.addPolygon = (map) => {
+ map.removeInteraction(shipMap.drawPolygonDraw)
+ map.removeInteraction(shipMap.drawRingDraw)
+ map.removeInteraction(shipMap.drawCircleDraw)
+ map.removeInteraction(shipMap.drawRectangleDraw)
+ map.addInteraction(shipMap.drawPolygonDraw)
+ let listener = null
+ let sketch = null
+ shipMap.drawPolygonDraw.on(
+ 'drawstart',
+ function (e) {
+ let tooltipCoord = e.coordinate
+ sketch = e.feature
+ listener = sketch.getGeometry().on('change', function (evt) {
+ let geom = evt.target
+ let output
+ if (geom instanceof Polygon) {
+ output = shipFun.formatArea(geom)
+ tooltipCoord = geom.getInteriorPoint().getCoordinates()
+ }
+ shipMap.measureTooltipElement.innerHTML =
+ output +
+ '' +
+ ` `
+ shipMap.measureTooltipElement.style =
+ 'background: #0050AC;color:#ffffff;padding:2px;border-radius: 10px;font-size: 10px;min-width: 87px;text-align: center'
+ shipMap.measureTooltip.setPosition(tooltipCoord)
+ })
+ },
+ this
+ )
+ shipMap.drawPolygonDraw.on('drawend', function (e) {
+ map.removeInteraction(shipMap.drawPolygonDraw)
+ shipMap.measureTooltipElement.style =
+ 'background: #0050AC;color:#ffffff;padding:2px;border-radius: 10px;font-size: 10px;min-width: 87px;text-align: center'
+ shipMap.measureTooltipElement.className = `ol-tooltip ol-tooltip-static `
+ shipMap.measureTooltipElement.setAttribute('id', sketch.ol_uid)
+ shipMap.measureTooltip.setOffset([0, -7])
+ sketch = null
+ shipMap.measureTooltipElement = null
+ shipFun.createMeasureTooltip(map)
+ unByKey(listener)
+ })
+}
+// ---我的修改---
+shipFun.backVector = (type) => {
+ if (type === 'line') {
+ return shipMap.drawRingSource
+ } else if (type === 'circle') {
+ return shipMap.drawCircleSource
+ } else if (type === 'polygon') {
+ return shipMap.drawPolygonSource
+ } else if (type === 'rectangle') {
+ return shipMap.drawRectangleSource
+ }
+}
+
+shipFun.delAllMapTool = () => {
+ shipMap.drawPolygonLayer.getSource().clear()
+ shipMap.drawCircleLayer.getSource().clear()
+ shipMap.drawRectangleLayer.getSource().clear()
+ shipMap.drawRingLayer.getSource().clear()
+ shipMap.map.getOverlays()
+ .getArray().forEach((item) => {
+ shipMap.map.removeOverlay(item)
+ })
+}
+// ---我的修改---
+//清楚圆
+shipFun.deleCircular = () => {
+ shipMap.drawCircularSource.clear()
+}
+//清楚测距
+shipFun.deleRing = () => {
+ shipMap.drawRingSource.clear()
+ let list = document.getElementsByName('ceju')
+ for (let i = 0; i < list.length; i++) {
+ list[i].style.display = 'none'
+ // removeNode(true)
+ }
+}
+
+//设置绑定轨迹数据的div
+shipFun.createMeasureTooltip = function (map) {
+ if (shipMap.measureTooltipElement) {
+ shipMap.measureTooltipElement.parentNode.removeChild(
+ shipMap.measureTooltipElement
+ )
+ }
+ shipMap.measureTooltipElement = document.createElement('div')
+ shipMap.measureTooltipElement.className = 'ol-tooltip ol-tooltip-measure'
+ shipMap.measureTooltip = new Overlay({
+ element: shipMap.measureTooltipElement,
+ offset: [1, -15],
+ positioning: 'bottom-center'
+ })
+ map.addOverlay(shipMap.measureTooltip)
+ mapToolOver.push(shipMap.measureTooltip)
+}
+
+//获取测距的长度
+var ringLength = 0
+shipFun.formatLength = function (line) {
+ let length = getLength(line)
+ ringLength = length
+ let output
+ if (length > 100) {
+ output = (Math.round((length / 1000) * 100) / 100) * +' ' + 'km'
+ } else {
+ output = Math.round(length * 100) / 100 + ' ' + 'm'
+ }
+ output = Math.round(length * 0.00054 * 100) / 100 + ' ' + 'nm'
+ return output
+}
+//我的修改
+
+//获取多边形面积和矩形
+shipFun.formatArea = function (polygon) {
+ var area = getArea(polygon)
+ var output
+ if (area > 1000000) {
+ output = Math.round((area / 1000000) * 100) / 100 + ' ' + 'km2 '
+ } else {
+ output = Math.round(area * 100) / 100 + ' ' + 'm2 '
+ }
+ return output
+}
+//我的修改
+
+shipFun.addRectangle = (map) => {
+ map.removeInteraction(shipMap.drawPolygonDraw)
+ map.removeInteraction(shipMap.drawRingDraw)
+ map.removeInteraction(shipMap.drawCircleDraw)
+ map.removeInteraction(shipMap.drawRectangleDraw)
+ map.addInteraction(shipMap.drawRectangleDraw)
+ let listener = null
+ let sketch = null
+ shipMap.drawRectangleDraw.on('drawstart', function (e) {
+ sketch = e.feature
+ let tooltipCoord = e.coordinate
+ listener = sketch.getGeometry().on('change', function (evt) {
+ let geom = evt.target
+
+ let output
+ if (geom instanceof Polygon) {
+ output = shipFun.formatArea(geom)
+ tooltipCoord = geom.getInteriorPoint().getCoordinates()
+ }
+ shipMap.measureTooltipElement.innerHTML =
+ output +
+ '' +
+ ` `
+ shipMap.measureTooltipElement.style =
+ 'background: #0050AC;color:#ffffff;padding:2px;border-radius: 10px;font-size: 10px;min-width: 87px;text-align: center'
+ shipMap.measureTooltip.setPosition(tooltipCoord)
+ })
+ })
+ shipMap.drawRectangleDraw.on('drawend', function (e) {
+ map.removeInteraction(shipMap.drawRectangleDraw)
+ shipMap.measureTooltipElement.style =
+ 'background: #0050AC;color:#ffffff;padding:2px;border-radius: 10px;font-size: 10px;min-width: 87px;text-align: center'
+ shipMap.measureTooltipElement.className = `ol-tooltip ol-tooltip-static `
+ shipMap.measureTooltipElement.setAttribute('id', sketch.ol_uid)
+ shipMap.measureTooltip.setOffset([0, -7])
+ sketch = null
+ shipMap.measureTooltipElement = null
+ shipFun.createMeasureTooltip(map)
+ unByKey(listener)
+ })
+}
+// 我的修改
+//获取圆的半径长度
+shipFun.formatcirclelength = function (a) {
+ let output
+ let area = Math.pow(a, 2) * Math.PI // 得到的圆的面积 单位平方米
+ if (area > 1000000) {
+ output =
+ Math.round(area / 1000000 * 100) / 100 +
+ ' ' +
+ 'km²'
+ } else {
+ output = Math.round(area * 100) / 100 + ' ' + 'm²'
+ }
+ return output
+}
+//我的修改
+
+//添加圆
+shipFun.addCircle = (map) => {
+ map.removeInteraction(shipMap.drawPolygonDraw)
+ map.removeInteraction(shipMap.drawCircleDraw)
+ map.removeInteraction(shipMap.drawRectangleDraw)
+ map.addInteraction(shipMap.drawCircleDraw)
+ let listener = null
+ let sketch = null
+ shipMap.drawCircleDraw.on('drawstart', function (e) {
+ sketch = e.feature
+ let tooltipCoord = e.coordinate
+ listener = sketch.getGeometry().on('change', function (evt) {
+ let geom = evt.target
+
+ let a1 = []
+ let a2 = []
+ a1 = transform(geom.getCenter(), 'EPSG:3857', 'EPSG:4326')
+ a2 = transform(geom.getLastCoordinate(), 'EPSG:3857', 'EPSG:4326')
+ shipMap.measureTooltip.setPosition(geom.getCenter())
+ })
+ })
+
+ shipMap.drawCircleDraw.on('drawend', function (e) {
+ map.removeInteraction(shipMap.drawCircleDraw)
+ shipMap.measureTooltipElement.style =
+ 'background: #0050AC;color:#ffffff;padding:2px;border-radius: 10px;font-size: 10px;min-width: 87px;text-align: center'
+ shipMap.measureTooltipElement.className = `ol-tooltip ol-tooltip-static `
+ shipMap.measureTooltipElement.setAttribute('id', sketch.ol_uid)
+ let output = shipFun.formatcirclelength(e.feature.getGeometry().getRadius())
+ shipMap.measureTooltipElement.innerHTML =
+ output +
+ '' +
+ ` `
+
+ shipMap.measureTooltip.setOffset([0, 0])
+ sketch = null
+ shipMap.measureTooltipElement = null
+ shipFun.createMeasureTooltip(map)
+ unByKey(listener)
+ })
+}
+//我的修改
+//转换地图海图卫星图
+shipFun.changeMap = function (map, str) {
+ switch (str) {
+ case 'haitu':
+ map.removeLayer(shipMap.sateLayer)
+ map.removeLayer(shipMap.layer)
+ map.removeLayer(shipMap.tdtLayer)
+ map.addLayer(shipMap.seaLayer)
+ break
+ case 'weixingtu':
+ map.removeLayer(shipMap.seaLayer)
+ map.removeLayer(shipMap.layer)
+ map.removeLayer(shipMap.tdtLayer)
+ map.addLayer(shipMap.sateLayer)
+ break
+ case 'ditu':
+ map.removeLayer(shipMap.sateLayer)
+ map.removeLayer(shipMap.seaLayer)
+ map.removeLayer(shipMap.tdtLayer)
+ map.addLayer(shipMap.layer)
+ break
+ case 'tdt':
+ map.removeLayer(shipMap.sateLayer)
+ map.removeLayer(shipMap.seaLayer)
+ map.removeLayer(shipMap.layer)
+ map.addLayer(shipMap.tdtLayer)
+ }
+}
+//添加线段
+shipFun.addArgentina = (data, id) => {
+ let f1 = lineDataTrans2(data)
+ f1.setStyle(shipStyle.agtStyle('#FF5454', 2))
+ f1.setId(id)
+ shipMap.agtSource.addFeature(f1)
+}
+//获取测距的
+
+//获得的经纬度转换
+shipFun.aroundLonLat = (value) => {
+ let lonlat = transform(value, 'EPSG:3857', 'EPSG:4326')
+ return lonlat
+}
+
+//经纬度转化
+shipFun.cacuLonLat = function (num, dir) {
+ let degree = parseInt(num)
+ let direction = null
+ if (dir == 'lon') {
+ if (degree >= 0) {
+ direction = 'E'
+ } else {
+ direction = 'W'
+ }
+ } else if (dir == 'lat') {
+ if (degree >= 0) {
+ direction = 'N'
+ } else {
+ direction = 'S'
+ }
+ }
+ let min = parseInt((num - degree) * 60)
+ let sec = parseInt((num - degree) * 3600 - min * 60)
+
+ degree = Math.abs(degree)
+ min = Math.abs(min)
+ sec = Math.abs(sec)
+
+ let array = [direction, degree + '°' + min + '′' + sec + '″'] //这个得到的是方向 度 分 秒
+ return array
+}
+
+shipFun.clickGetCoor = function (index, cb) {
+ shipMap.map.once('singleclick', (e) => {
+ const coor = e.coordinate
+ const f = new Feature({
+ geometry: new Point(coor)
+ })
+ f.setStyle(pointInnerStyle(index + ''))
+ shipMap.sourceList.PointSource.addFeature(f)
+ cb(transform(coor, 'EPSG:3857', 'EPSG:4326'))
+ })
+}
+
+shipFun.clearPoint = function () {
+ shipMap.sourceList.PointSource.clear()
+}
+
+function pointInnerStyle(textVale) {
+ const textStyle = new Style({
+ text: new Text({
+ textAlign: 'center',
+ textBaseline: 'middle',
+ font: '20px',
+ fill: new Fill({
+ color: 'red'
+ }),
+ text: textVale,
+ stroke: new Stroke({
+ color: 'white',
+ width: 2
+ })
+ })
+ })
+ return textStyle
+}
+
+//生成随机数
+function Random() {
+ return Math.floor(Math.random() * 10) // 可均衡获取 0 到 9 的随机整数。
+}
+
+//根据数据处理数据函数
+function lineDataTrans2(d) {
+ let data = []
+ let d1 = d.split(',')
+ for (let i1 in d1) {
+ let d2 = d1[i1].split(' ')
+ data.push({
+ lon: Number(d2[0]),
+ lat: Number(d2[1])
+ })
+ }
+ data.map(function (item, index, arr) {
+ if (index > 0) {
+ if (item.lon - arr[index - 1].lon < -180) {
+ item.lon += 360
+ } else if (item.lon - arr[index - 1].lon > 180) {
+ let i = index - 1
+ while (i >= 0) {
+ arr[i--].lon += 360
+ }
+ }
+ }
+ })
+ let ar = []
+ data.forEach(function (item, index) {
+ ar.push(fromLonLat([Number(item.lon), Number(item.lat)]))
+ })
+ let ls = new LineString(ar)
+ let lsf = new Feature({
+ geometry: ls
+ })
+ lsf.set('type', 'line')
+ return lsf
+}
+
+export default shipFun
diff --git a/src/util/map/style.js b/src/util/map/style.js
new file mode 100644
index 0000000..4d8089b
--- /dev/null
+++ b/src/util/map/style.js
@@ -0,0 +1,637 @@
+import Style from 'ol/style/Style' //样式总类
+import styleIcon from 'ol/style/Icon' //添加图标
+import styleText from 'ol/style/Text' //添加文字标注
+import styleFill from 'ol/style/Fill' //添加填充样式
+import styleStroke from 'ol/style/Stroke' //添加填充样式
+import styleCircle from 'ol/style/Circle' //添加填充样式
+import Polygon from 'ol/geom/Polygon' //面
+import start from './img/start.png'
+import end from './img/end.png'
+import kuang from './img/kuang.png'
+import sign from './img/blue.png'
+import port from './img/port.png'
+import berth from './img/berth.png'
+import { transform } from 'ol/proj' //坐标系转换
+import { Circle as CircleStyle, Fill, RegularShape } from 'ol/style'
+
+const shipStyle = new Object({})
+
+
+shipStyle.carStyle = function (f) {
+ let flag = new Style({
+ image: new styleIcon({
+ src: '/zero2/img/car.svg',
+ scale: 0.2,
+ }),
+ text: new styleText({
+ font: '16px Microsoft YaHei 100',
+ textAlign: 'center',
+ overflow: true,
+ fill: new styleFill({
+ color: '#000'
+ }),
+ stroke: new styleStroke({
+ color: '#fff',
+ width: 3
+ }),
+ textBaseline: 'bottom',
+ text: f.get('carNum')
+ })
+ })
+ return [flag]
+}
+// ---我的修改---
+var shipsize = null
+shipStyle.plotting = function (number) {
+ number = number <= 200 ? number : 200
+ shipsize = number
+}
+// ---我的修改---
+
+// ---我的修改
+shipStyle.lineStyle = function () {
+ return new Style({
+ stroke: new styleStroke({
+ color: 'rgba(77, 168, 213,0.7)',
+ width: 4
+ })
+ })
+}
+//---我的修改
+
+//普通船舶
+shipStyle.newshipStyle = function (f, r, map) {
+ let zoom = Math.ceil((Math.log(r) - Math.log(156543.03390625)) / Math.log(0.5))
+ let style = null
+ let gemo = null
+ let styles = []
+ let d = r * 7
+ let shipnameEn = f.get('shipnameEn') //船名
+ let heading = f.get('heading')
+ let direction = parseFloat(f.get('cog') / 10) //航向
+ let speed = parseFloat(f.get('sog') / 10) //速度
+ let o = f.get('geom').getCoordinates()
+ let lon = parseFloat(f.get('lon') / 60 / 10000)
+ let lat = parseFloat(f.get('lat') / 60 / 10000)
+ let shipColor = ''
+ let color = f.get('color')
+ if (color) {
+ shipColor = color
+ } else {
+ let shiptype = f.get('shiptype')
+ shiptype = shiptype ? Number(shiptype) : 90
+ switch (true) {
+ //70-79 货船
+ case shiptype >= 70 && shiptype <= 79:
+ shipColor = '#53cf90'
+ break
+ //80-89 油船
+ case shiptype >= 80 && shiptype <= 89:
+ shipColor = '#743675'
+ break
+ //60-69 客船
+ case shiptype >= 60 && shiptype <= 69 && shiptype === 73:
+ shipColor = '#ffc24d'
+ break
+ //渔船
+ case shiptype == 30:
+ shipColor = '#fc8a2a'
+ break
+ //拖船
+ case shiptype == 52:
+ shipColor = '#bd3154'
+ break
+ //工程船
+ case shiptype == 31 ||
+ shiptype == 32 ||
+ shiptype == 33 ||
+ shiptype == 34 ||
+ shiptype == 53:
+ shipColor = '#2fb3cc'
+ break
+ //公务执法船
+ case shiptype == 35 ||
+ shiptype == 50 ||
+ shiptype == 51 ||
+ shiptype == 55 ||
+ shiptype == 58:
+ // shiptype == 59:
+ shipColor = '#8d1d55'
+ break
+ //其他
+ default:
+ shipColor = '#065880'
+ break
+ }
+ }
+ style = new Style({
+ fill: new styleFill({
+ color: shipColor
+ }),
+ stroke: new styleStroke({
+ color: '#333',
+ width: 0.5
+ })
+ })
+ styles.push(style)
+ let nameStyle = null
+ let textline = null
+ //判断图层级别
+ var rot = heading
+ if (rot !== 0) {
+ if (!rot) {
+ rot = direction
+ if (!rot) {
+ rot = 0
+ }
+ }
+ }
+ let rot2 = 0
+ if (direction === 0) {
+ rot2 = 0
+ } else {
+ rot2 = direction ? direction : heading
+ if (!rot2) rot2 = 0
+ }
+ let geom = null
+ if (speed && speed >= 0.5) {//显示三角形
+ let x = [o[0], o[1] + (1.3 + speed * 0.1) * d]
+ let a = [o[0], o[1] + 1.3 * d]
+ let b = [o[0] - 0.7 * d, o[1] - d]
+ let c = [o[0] + 0.7 * d, o[1] - d]
+ geom = new Polygon([
+ [x, a, b, c, a]
+ ])
+ geom.rotate(-Math.PI / 180 * direction, o)
+ } else { //显示菱形
+ let x = [o[0] - 0.5 * d, o[1] - 0.5 * d]
+ let a = [o[0] + 0.5 * d, o[1] - 0.5 * d]
+ let b = [o[0] - 0.5 * d, o[1] + 0.5 * d]
+ let c = [o[0] + 0.5 * d, o[1] + 0.5 * d]
+ geom = new Polygon([
+ [x, a, c, b]
+ ])
+ geom.rotate(Math.PI / 180 * 45, o)
+ }
+ f.setGeometry(geom)
+
+ nameStyle = new Style({
+ text: new styleText({
+ font: '16px Microsoft YaHei 100',
+ textAlign: 'left',
+ overflow: true,
+ fill: new styleFill({
+ color: '#000'
+ }),
+ stroke: new styleStroke({
+ color: '#fff',
+ width: 3
+ }),
+ textBaseline: 'bottom',
+ offsetX: 10,
+ offsetY: 20,
+ text: shipnameEn
+ })
+ })
+
+ // let pix = map.getPixelFromCoordinate(o)
+ // let e = []
+ // e[0] = pix[0]
+ // e[1] = pix[1]
+ // e[0] += 20
+ // e[1] += 10
+ // let end = map.getCoordinateFromPixel(e)
+ // let slGeo = new LineString([o, end])
+ // textline = new Style({
+ // fill: new styleFill({
+ // color: 'black'
+ // }),
+ // stroke: new styleStroke({
+ // color: 'black',
+ // width: 0.5
+ // })
+ // })
+ // textline.setGeometry(slGeo)
+
+ if (zoom > 11) {
+ // if (nameStyle) {
+ // styles.push(nameStyle)
+ // }
+ // if (textline) {
+ // styles.push(textline)
+ // }
+ }
+
+ return styles
+}
+
+// 新的船舶样式
+shipStyle.newShipStyle = function (f, zoom, map) {
+ return new Style({
+ image: new RegularShape({
+ stroke: new styleStroke({
+ color: '#333333FF',
+ width: 1
+ }),
+ fill: new styleFill({
+ color: 'red'
+ }),
+ radius: 8,
+ points: 4
+ })
+ })
+}
+
+//测距最终显示的样式
+shipStyle.ceJuStyle = new Style({
+ fill: new styleFill({
+ color: 'red'
+ }),
+ stroke: new styleStroke({
+ color: 'red',
+ width: 3
+ }),
+ image: new CircleStyle({
+ radius: 7,
+ fill: new styleFill({
+ color: 'red'
+ })
+ })
+})
+//测距画笔的样式
+shipStyle.drawStyle = new Style({
+ fill: new styleFill({
+ color: 'red'
+ }),
+ stroke: new styleStroke({
+ color: 'red',
+ width: 3
+ }),
+ image: new CircleStyle({
+ radius: 5,
+ stroke: new styleStroke({
+ color: 'red'
+ }),
+ fill: new styleFill({
+ color: 'red'
+ })
+ })
+})
+
+shipStyle.newShip = function () {
+ return new Style({
+ image: new styleIcon({
+ // 点的颜色
+ fill: new styleFill({
+ color: '#000'
+ }),
+ // 圆形半径
+ radius: 7
+ })
+ })
+}
+//船舶样式
+shipStyle.shipStyle = function (f, r) {
+ let r1 = 0.0005 //r=0.0005代表着100米
+ let style = null
+ let gemo = null
+ let speed = parseFloat(f.get('sog'))
+ let direction = parseFloat(f.get('cog'))
+ let o = f.get('geom').getCoordinates()
+ let lon = parseFloat(f.get('lon') / 60 / 10000)
+ let lat = parseFloat(f.get('lat') / 60 / 10000)
+ let name = f.get('shipnameEn')
+ //判断图层级别
+ if (r < 13) {
+ style = new Style({
+ stroke: new styleStroke({
+ color: 'red',
+ width: 1
+ })
+ })
+ //判断航向是不是O 是就显示方块
+ // if (speed == 0) {
+ // let a = changeCoor([lon - r1, lat - r1]);
+ // let s = changeCoor([lon - r1, lat + r1]);
+ // let v = changeCoor([lon + r1, lat + r1]);
+ // let g = changeCoor([lon + r1, lat - r1]);
+ // gemo = new Polygon([[a, s, v, g]]);
+ // gemo.rotate(Math.PI / 180 * 45, o);
+ // } else {
+ let x = changeCoor([lon, lat + (1.8 + speed * 0.2) * r1])
+ let a1 = changeCoor([lon, lat + 1.8 * r1])
+ let b1 = changeCoor([lon - 0.4 * r1, lat + r1])
+ let c1 = changeCoor([lon + 0.4 * r1, lat + r1])
+ let d1 = changeCoor([lon - 0.4 * r1, lat - 1.5 * r1])
+ let e1 = changeCoor([lon + 0.4 * r1, lat - 1.5 * r1])
+ gemo = new Polygon([[x, a1, b1, d1, e1, c1, a1]])
+ gemo.rotate((-Math.PI / 180) * direction, o)
+ // }
+ } else {
+ r1 = r / 20000
+ style = new Style({
+ fill: new styleFill({ color: '#7CFC00' }),
+ stroke: new styleStroke({
+ color: '#333',
+ width: 0.5
+ })
+ })
+ let x = changeCoor([lon, lat + (1.3 + speed * 0.1) * r1])
+ let a = changeCoor([lon, lat + 1.3 * r1])
+ let b = changeCoor([lon - 0.7 * r1, lat - r1])
+ let c = changeCoor([lon + 0.7 * r1, lat - r1])
+ gemo = new Polygon([[x, a, b, c, a]])
+ gemo.rotate((-Math.PI / 180) * direction, o)
+ }
+ f.setGeometry(gemo)
+
+ let nameStyle = new Style({
+ text: new styleText({
+ font: '16px Microsoft YaHei 100',
+ textAlign: 'left',
+ overflow: true,
+ fill: new styleFill({
+ color: '#000'
+ }),
+ stroke: new styleStroke({
+ color: '#fff',
+ width: 3
+ }),
+ textBaseline: 'bottom',
+ /*backgroundStroke:new Stroke({
+ color: '#8D9080',
+ width: 1
+ }),*/
+ offsetX: 0,
+ offsetY: 20,
+ text: name
+ })
+ })
+ let flag = new Style({
+ image: new styleIcon({
+ src: '../img/end.png',
+ imgSize: [10, 22],
+ //scale: 0.5
+ offsetX: 0,
+ offsetY: 11
+ }),
+ text: new styleText({
+ font: '16px Microsoft YaHei 100',
+ textAlign: 'left',
+ overflow: true,
+ fill: new styleFill({
+ color: '#000'
+ }),
+ stroke: new styleStroke({
+ color: '#fff',
+ width: 3
+ }),
+ textBaseline: 'bottom',
+ /*backgroundStroke:new Stroke({
+ color: '#8D9080',
+ width: 1
+ }),*/
+ offsetX: 50,
+ offsetY: 20,
+ text: 'name'
+ })
+ })
+ let styles = []
+ styles.push(style)
+ if (r >= 11) {
+ styles.push(nameStyle)
+ }
+ return styles
+}
+//船舶选中框样式
+shipStyle.selectStyle = new Style({
+ image: new styleIcon({
+ anchor: [0.5, 0.5],
+ src: kuang
+ })
+})
+//标记的样式
+shipStyle.signStyle = new Style({
+ image: new styleIcon({
+ anchor: [0.5, 0.5],
+ src: sign
+ }),
+ text: new styleText({
+ text: '未命名', //f.get('name')
+ font: '12px Calibri,sans-serif',
+ offsetY: 20, //位置
+ offsetX: 0, //位置
+ fill: new styleFill({
+ color: 'black' //填充颜色
+ })
+ })
+});
+
+//轨迹路线颜色
+(shipStyle.pathColor = function () {
+ return new Style({
+ stroke: new styleStroke({
+ color: 'red',
+ width: 3
+ })
+ })
+}),
+ //范围线样式
+ (shipStyle.areastyle = function () {
+ return new Style({
+ stroke: new styleStroke({
+ color: 'rgba(230,162,60,0.8)',
+ width: 5
+ })
+ })
+ })
+//船舶点击样式
+shipStyle.clickStyle = function () {
+ return function (f, r) {
+ let r1 = 0.0005 //r=0.0005代表着100米
+ let style = null
+ let gemo = null
+ let speed = parseFloat(f.get('sog'))
+ let direction = parseFloat(f.get('cog'))
+ let o = f.get('geom').getCoordinates()
+ let lon = parseFloat(f.get('lon'))
+ let lat = parseFloat(f.get('lat'))
+ //判断图层级别
+ if (r < 13) {
+ style = new Style({
+ stroke: new styleStroke({
+ color: 'black',
+ width: 1
+ }),
+ fill: new styleFill({
+ color: '#7CFC00'
+ })
+ })
+ //判断航向是不是O 是就显示方块
+ if (speed == 0) {
+ let a = changeCoor([lon - r1, lat - r1])
+ let s = changeCoor([lon - r1, lat + r1])
+ let v = changeCoor([lon + r1, lat + r1])
+ let g = changeCoor([lon + r1, lat - r1])
+ gemo = new Polygon([[a, s, v, g]])
+ gemo.rotate((Math.PI / 180) * 45, o)
+ } else {
+ let x = changeCoor([lon, lat + (1.8 + speed * 0.2) * r1])
+ let a1 = changeCoor([lon, lat + 1.8 * r1])
+ let b1 = changeCoor([lon - 0.4 * r1, lat + r1])
+ let c1 = changeCoor([lon + 0.4 * r1, lat + r1])
+ let d1 = changeCoor([lon - 0.4 * r1, lat - 1.5 * r1])
+ let e1 = changeCoor([lon + 0.4 * r1, lat - 1.5 * r1])
+ gemo = new Polygon([[x, a1, b1, d1, e1, c1, a1]])
+ gemo.rotate((-Math.PI / 180) * direction, o)
+ }
+ } else {
+ r1 = r / 20000
+ style = new Style({
+ fill: new styleFill({ color: '#7CFC00' }),
+ stroke: new styleStroke({
+ color: '#333',
+ width: 0.5
+ })
+ })
+ let x = changeCoor([lon, lat + (1.3 + speed * 0.1) * r1])
+ let a = changeCoor([lon, lat + 1.3 * r1])
+ let b = changeCoor([lon - 0.7 * r1, lat - r1])
+ let c = changeCoor([lon + 0.7 * r1, lat - r1])
+ gemo = new Polygon([[x, a, b, c, a]])
+ gemo.rotate((-Math.PI / 180) * direction, o)
+ }
+ f.setGeometry(gemo)
+ return style
+ }
+}
+//历史轨迹样式
+shipStyle.pathStyle = function (time) {
+ return new Style({
+ image: new styleCircle({
+ // 点的颜色
+ fill: new styleFill({
+ color: 'yellow'
+ }),
+ // 圆形半径
+ radius: 5
+ }),
+ text: new styleText({
+ text: time, //f.get('name')
+ font: '12px Calibri,sans-serif',
+ offsetY: 20, //位置
+ offsetX: 0, //位置
+ fill: new styleFill({
+ color: '#00a0e9'
+ }),
+ stroke: new styleStroke({
+ color: 'white',
+ width: 4
+ })
+ })
+ })
+}
+//历史轨迹开始结束点的样式
+shipStyle.pathSEStyle = function (state) {
+ let style = null
+ if (state == 'start') {
+ style = new Style({
+ image: new styleIcon({
+ src: start,
+ anchor: [0.5, 1]
+ })
+ })
+ } else {
+ style = new Style({
+ image: new styleIcon({
+ src: end,
+ anchor: [0.5, 1]
+ })
+ })
+ }
+ return style
+}
+//自定义数据添加线段的样式
+shipStyle.agtStyle = (color, type) => {
+ color = color ? color : '#FF5454'
+ let style = null
+ if (type == 1) {
+ style = new Style({
+ stroke: new styleStroke({
+ color: color,
+ width: 2,
+ lineDash: [10, 10]
+ })
+ })
+ } else {
+ style = new Style({
+ stroke: new styleStroke({
+ color: color,
+ width: 2
+ })
+ })
+ }
+ return style
+}
+
+//等值线样式
+shipStyle.isobarStyle = new Style({
+ fill: new Fill({ color: 'transparent' }),
+ stroke: new styleStroke({
+ width: 2,
+ color: [241, 241, 241, 0.8],
+ }),
+ text: new styleText({
+ font: '12px Calibri,sans-serif',
+ placement: 'line',
+ fill: new styleFill({
+ color: '#000',
+ }),
+ stroke: new styleStroke({
+ color: '#fff',
+ width: 3,
+ }),
+ }),
+})
+//港口样式
+shipStyle.portStyle = function (f) {
+ return new Style({
+ image: new styleIcon({
+ anchor: [0.5, 0.5],
+ src: port
+ }),
+ text: new styleText({
+ text: f.get('name'),
+ font: '12px Calibri,sans-serif',
+ offsetY: -10, //位置
+ offsetX: 25, //位置
+ fill: new styleFill({
+ color: 'blue' //填充颜色
+ })
+ })
+ })
+}
+shipStyle.berthStyle = function (f) {
+ return new Style({
+ image: new styleIcon({
+ anchor: [0.5, 0.5],
+ src: berth,
+ size: [20, 20],
+ scale: 1
+ }),
+ text: new styleText({
+ text: f.get('name'),
+ font: '12px Calibri,sans-serif',
+ offsetY: -10, //位置
+ offsetX: 25, //位置
+ fill: new styleFill({
+ color: 'blue' //填充颜色
+ })
+ })
+ })
+}
+
+//定义一个函数用于转换坐标
+let changeCoor = (coor) => transform(coor, 'EPSG:4326', 'EPSG:3857')
+
+export default shipStyle
diff --git a/src/util/message/index.ts b/src/util/message/index.ts
new file mode 100644
index 0000000..9278f91
--- /dev/null
+++ b/src/util/message/index.ts
@@ -0,0 +1,45 @@
+import '../../../node_modules/toastr/toastr.scss'
+
+const toastr = require('../../../node_modules/toastr/toastr')
+toastr.options = {
+ closeButton: true,//显示关闭按钮
+ debug: false,
+ progressBar: true,//显示进度条
+ positionClass: "toast-top-right",//位置
+ onclick: null,//点击消息框自定义事件
+ showDuration: "300",//显示动作时间
+ hideDuration: "1000",//隐藏动作时间
+ timeOut: "2000",//显示时间,0为永久显示
+ extendedTimeOut: "1000",//鼠标移动过后显示显示时间
+ showEasing: "swing",
+ hideEasing: "linear",
+ showMethod: "fadeIn",//显示方式
+ hideMethod: "fadeOut"//隐藏方式
+}
+class MessageUtil {
+ /**
+ * 正常消息弹窗
+ * @param data
+ */
+ public static info (data: any) {
+ return toastr.info(data)
+ }
+
+ /**
+ * 警告消息弹窗
+ * @param data
+ */
+ public static warring (data: any) {
+ return toastr.warring(data)
+ }
+
+ /**
+ * 错误消息弹窗
+ * @param data
+ */
+ public static error (data: any) {
+ return toastr.error(data)
+ }
+}
+
+export default MessageUtil
diff --git a/src/util/mini/index.ts b/src/util/mini/index.ts
new file mode 100644
index 0000000..30363f2
--- /dev/null
+++ b/src/util/mini/index.ts
@@ -0,0 +1,46 @@
+import Vue from 'vue'
+
+/**
+ * 最小化列表
+ */
+class MiniUtil {
+ /**
+ * 添加最小化内容
+ * @param data
+ */
+ public static addMini(data: any) {
+ Vue.prototype.$MiniList.push(data)
+ }
+
+ /**
+ * 删除最小化内容
+ * @param type
+ */
+ public static delMini(type: string) {
+ const list = Vue.prototype.$MiniList
+ if (list) {
+ list.forEach((item: any, index: any) => {
+ if (item.type === type) {
+ Vue.prototype.$MiniList.splice(index, 1)
+ }
+ })
+ }
+ }
+
+ /**
+ * 判断传入的类型是否最小化显示
+ * @param type
+ */
+ public static isHasMini(type: string) {
+ let data = false
+ const list = Vue.prototype.$MiniList
+ list.forEach((item: any) => {
+ if (item.type === type) {
+ data = true
+ }
+ })
+ return data
+ }
+}
+
+export default MiniUtil
diff --git a/src/util/new-dialog/index.ts b/src/util/new-dialog/index.ts
new file mode 100644
index 0000000..1cb88b7
--- /dev/null
+++ b/src/util/new-dialog/index.ts
@@ -0,0 +1,128 @@
+import Vue from 'vue'
+import MiniUtil from '@/util/mini'
+import store from '@/store'
+import i18n from '@/util/translate'
+
+class DialogUtil {
+ public static showDialog(vueTemplate: any, vueName: string, data: any) {
+ const flag = MiniUtil.isHasMini(vueName)
+ if (flag) this.closeMini(vueName)
+ const showComponents = Vue.prototype.$showComponents
+ const compent = showComponents.get(vueName)
+ if (!compent) {
+ const MountComponent = Vue.extend(vueTemplate)
+ const vm = new MountComponent({
+ propsData: {
+ tempData: data
+ },
+ store,
+ i18n
+ })
+ const menug = vm.$data.menuGroup
+ if (menug) {
+ const group: Map = Vue.prototype.$menuGroup
+ if (!group.has(menug)) {
+ group.set(menug, vueName)
+ } else {
+ this.closeCom(group.get(menug))
+ group.set(menug, vueName)
+ }
+ }
+ vm.$mount(document.createElement('div'));
+ (document.getElementById('ship-type-box') as HTMLElement).append(vm.$el)
+ showComponents.set(vueName, vm)
+ } else {
+ compent.$props.tempData = data
+ compent.$forceUpdate()
+ }
+ }
+
+ /**
+ * 查看组件是否显示
+ * @param vueName
+ */
+ public static isShow(vueName: string) {
+ const showComponents = Vue.prototype.$showComponents
+ const component = showComponents.get(vueName)
+ if (component) {
+ return component.$options.propsData.tempData.show
+ } else {
+ return false
+ }
+ }
+
+ /**
+ * 隐藏组件
+ * @param vueName 组件名称
+ */
+ public static hideCom(vueName: string) {
+ const showComponents = Vue.prototype.$showComponents
+ const component = showComponents.get(vueName)
+ if (component) {
+ component.$props.tempData.show = false
+ component.$forceUpdate()
+ }
+ }
+
+ /**
+ * 显示组件
+ * @param vueName 组件名称
+ */
+ public static showCom(vueName: string) {
+ const showComponents = Vue.prototype.$showComponents
+ const component = showComponents.get(vueName)
+ if (component) {
+ component.$props.tempData.show = true
+ component.$forceUpdate()
+ }
+ }
+
+ /**
+ * 添加最小化显示
+ * @param vueName
+ */
+ public static showMini(vueName: string) {
+ const showComponents = Vue.prototype.$showComponents
+ const component = showComponents.get(vueName)
+ MiniUtil.addMini({
+ type: vueName,
+ title: component.dialogConfig.header.title
+ })
+ this.hideCom(vueName)
+ }
+
+ /**
+ * 关闭最小化显示
+ * @param vueName
+ */
+ public static closeMini(vueName: string) {
+ MiniUtil.delMini(vueName)
+ this.closeCom(vueName)
+ }
+
+ /**
+ * 关闭销毁组件
+ * @param vueName
+ */
+ public static closeCom(vueName: string) {
+ const showComponents = Vue.prototype.$showComponents
+ const component = showComponents.get(vueName)
+ if (component) {
+ if (MiniUtil.isHasMini(vueName)) {
+ MiniUtil.delMini(vueName)
+ }
+ const el = component.$el
+ component.$refs[vueName].cancel()
+ el.parentElement.removeChild(el)
+ component.$destroy()
+ showComponents.delete(vueName)
+ }
+ }
+
+ public static getCom(vueName: string) {
+ const showComponents = Vue.prototype.$showComponents
+ return showComponents.get(vueName)
+ }
+}
+
+export default DialogUtil
diff --git a/src/util/store/index.ts b/src/util/store/index.ts
new file mode 100644
index 0000000..3af0c9a
--- /dev/null
+++ b/src/util/store/index.ts
@@ -0,0 +1,107 @@
+import store from '@/store'
+
+class StoreUtil {
+ /**
+ * 设置地图实例
+ * @param data
+ */
+ public setMapInstance(data: any) {
+ store.commit('setMapInstance', data)
+ }
+
+ /**
+ * 设置地图封装方法
+ * @param data
+ */
+ public setMapFun(data: any) {
+ store.commit('setMapFun', data)
+ }
+
+ /**
+ * 获取地图封装方法
+ */
+ public getMapFun() {
+ return store.state.mapFun
+ }
+
+ /**
+ * 获取地图实例
+ */
+ public getMapInstance() {
+ return store.state.mapInstance
+ }
+
+ /**
+ * 设置目录
+ * @param data
+ */
+ public setDictionary(data: any) {
+ store.state.dictionary = data
+ }
+
+ /**
+ * 设置船舶信息
+ * @param data
+ */
+ public setShipData(data: any) {
+ store.state.ship = data
+ }
+
+ /**
+ * 设置船舶信息
+ * @param data
+ */
+ public setShipFleet(data: any) {
+ store.state.shipFleet = data
+ }
+
+ /**
+ * 获取国籍字典
+ */
+ public getCountry() {
+ const data: any = store.state.dictionary
+ if (data) {
+ return data.shipCountry
+ } else {
+ return null
+ }
+ }
+
+ /**
+ * 获取船舶类型字典
+ */
+ public getShipType() {
+ const data: any = store.state.dictionary
+ if (data) {
+ return data.shipType
+ } else {
+ return null
+ }
+ }
+
+ /**
+ * 获取船舶状态字典
+ */
+ public getShipStatus() {
+ const data: any = store.state.dictionary
+ if (data) {
+ return data.shipStatus
+ } else {
+ return null
+ }
+ }
+
+ /**
+ * 获取船舶状态字典
+ */
+ public getShipFleet() {
+ const data: any = store.state.shipFleet
+ if (data) {
+ return data
+ } else {
+ return null
+ }
+ }
+}
+
+export default new StoreUtil()
diff --git a/src/util/temp-interface/index.ts b/src/util/temp-interface/index.ts
new file mode 100644
index 0000000..d4e2518
--- /dev/null
+++ b/src/util/temp-interface/index.ts
@@ -0,0 +1,31 @@
+/**
+ * FOLLOW_SHIP_FROM 添加分组组件名称
+ *
+ */
+export enum DialogType {
+ TRACK_RECORD = 'TrackRecordTemp', // 轨迹查询弹窗
+ TRACK_RECORD_LOG = 'TrackRecordLogTemp', // 轨迹记录弹窗
+ SEARCH_LIST = 'SearchListTemp', // 搜索记录
+ DATA_ANALYSIS = 'DataAnalysisTemp', // 数据分析
+ MAP_TOOL = 'MapToolTemp', // 地图工具
+ SHIP_RANKS = 'ShipRanksTemp', // 全部船队
+ WEATHER = 'WeatherTemp', // 海况天气
+ PORT_QUERY = 'PortQueryTemp', // 港口查询
+ ROUTE_QUERY = 'RouteQueryTemp', // 航线查询
+ SHIP_INFO = 'ShipInfoTemp', // 船舶信息
+ CAR_INFO = 'CarInfoTemp', // 车辆信息
+ PORT_OF_CALL = 'PortOfCallTemp', // 到离港记录
+ CONTAINER_QUERY = 'ContainerQueryTemp', // 集装箱查询
+ AREA_LIST = 'AreaListTemp', // 区域列表
+ MESSAGE_LIST = 'MessageListTemp', // 消息列表
+ ARRIVE_LEAVE_QUERY = 'ArriveLeaveQueryTemp', // 到港查询
+ DEPARTURE_INQUIRY = 'DepartureInquiryTemp', // 离港查询
+ EXPECTED_ARRIVAL = 'ExpectedArrivalTemp', // 预计到港
+ SHIP_EVENT = 'ShipEventTemp', // 船舶事件
+ NUMBER_OF_BERTHS = 'NumberOfBerthsTemp', // 在泊统计
+ POINT_POINT_RES = 'PointToPointResTemp', // 点到点结果显示
+ ROUTE_YC = 'RouteYcTemp', // 航线预测
+ SHIP_IN_BERTH = 'ShipInBerthTemp', // 泊位统计中详情显示船舶信息
+ NOTAN = 'NotanTemp', // 航行通告
+ WEATHER_IMG = 'WeatherImgTemp' // 台风图例
+}
diff --git a/src/util/tool/index.ts b/src/util/tool/index.ts
new file mode 100644
index 0000000..e134951
--- /dev/null
+++ b/src/util/tool/index.ts
@@ -0,0 +1,274 @@
+import Vue from 'vue'
+import store from '@/util/store'
+
+class SearchLog {
+ public addSearchLog(data: any) {
+ Vue.prototype.$SearchLog.push(data)
+ }
+}
+
+class shipUtil {
+
+ /**
+ * 通过船舶类型代码获取船舶类型
+ * @param data 船舶类型代码
+ */
+ public getShipType(data: any, en?: boolean) {
+ const shipTypes = store.getShipType()
+ if (shipTypes) {
+ const shipType = shipTypes.find((val: any) => {
+ return val.id === data
+ })
+ if (shipType) {
+ if (en) {
+ return shipType.valueEn
+ } else {
+ return shipType.valueChs
+ }
+ } else {
+ if (en) {
+ return 'Other'
+ } else {
+ return '其他类型'
+ }
+ }
+ }
+ }
+
+ public newGetShipType(shipTypeId: any, en?: boolean) {
+ if (shipTypeId === '30') {
+ return en ? 'Fishing vessel' : '渔船'
+ } else if (shipTypeId === '52') {
+ return en ? 'TUG' : '拖轮'
+ } else if (['31', '32', '33', '34', '53'].indexOf(shipTypeId) !== -1) {
+ return en ? 'Working ship' : '工程船'
+ } else if (shipTypeId === '37') {
+ return en ? 'Passenger' : '客船'
+ } else if (shipTypeId[0] === '6') {
+ return en ? 'Passenger' : '客船'
+ } else if (['35', '50', '51', '55', '58', '59'].indexOf(shipTypeId) !== -1) {
+ return en ? 'Official law enforcement ship' : '公务执法船'
+ } else if (shipTypeId[0] === '7') {
+ return en ? 'Cargo ship' : '货船'
+ } else if (shipTypeId[0] === '8') {
+ return en ? 'Tanker' : '油船'
+ } else {
+ return en ? 'Other' : '其他'
+ }
+ }
+
+ /**
+ * 通过mmsi的前3位获取船籍国
+ * @param data mmsi的前3位
+ */
+ public getShipCountryImg(data: any) {
+ const countries = store.getCountry()
+ if (countries) {
+ const country = countries.find((val: any) => {
+ return val.id === data
+ })
+ return country ? require(`../../../public/country-img/${country.valueAbbr}.png`) : require(`../../../public/country-img/undefined.png`)
+ }
+ }
+
+ /**
+ * 通过mmsi的前3位获取国家名称
+ * @param data mmsi的前3位
+ */
+ public getShipCountryImgName(data: any) {
+ const countries = store.getCountry()
+ if (countries) {
+ const country = countries.find((val: any) => {
+ return val.id === data
+ })
+ return country && country.valueEn ? country.valueEn : ''
+ }
+ }
+
+ /**
+ * 通过mmsi的前3位获取船籍字符
+ * @param data mmsi的前3位
+ */
+ public getShipCountryCode(data: any) {
+ const countries = store.getCountry()
+ if (countries) {
+ const country = countries.find((val: any) => {
+ return val.id === data
+ })
+ return country ? `${country.valueEn ? country.valueEn + '/' : ''}${country.valueChs ? country.valueChs : ''}` : 'undefined'
+ }
+ }
+
+ /**
+ * 通过mmsi的前3位获取船籍对象
+ * @param data mmsi的前3位
+ */
+ public getShipCountry(data: any) {
+ const countries = store.getCountry()
+ if (countries) {
+ const country = countries.find((val: any) => {
+ return val.id === data
+ })
+ return country || 'undefined'
+ }
+ }
+
+ /**
+ * 通过状态码获取船舶状态
+ * @param data
+ */
+ public getShipStatus(data: any, en?: boolean) {
+ const status = store.getShipStatus()
+ if (status) {
+ const sta = status.find((val: any) => {
+ return val.id === data + ''
+ })
+ if (sta) {
+ if (en) {
+ return sta.valueEn
+ } else {
+ return sta.valueChs
+ }
+ } else {
+ if (en) {
+ return 'undefined'
+ } else {
+ return '未知'
+ }
+ }
+ // return sta ? sta.valueChs : '未知'
+ }
+ }
+
+ /**
+ * 纬度格式化
+ * @param value
+ */
+ public filterLat(value: any) {
+ if (value === undefined || value === '' || value === null) {
+ return
+ }
+ let dData = 0
+ if (Math.abs(value) < 90) {
+ dData = Math.abs(value)
+ } else {
+ dData = Math.abs(value / 10000 / 60)
+ }
+ let isPlus = value > 0 ? 'N' : 'S'
+ let degree = parseInt(dData + '')
+ let min = parseInt((dData - degree) * 60 + '')
+ let sec = (((dData - degree) * 60 - min) * 60).toFixed(2)
+ return `${degree}°${min}′${sec}″${isPlus}`
+ }
+
+ /**
+ * 经度格式化
+ * @param value
+ */
+ public filterLon(value: any) {
+ if (value === undefined || value === '' || value === null) {
+ return
+ }
+ let dDate = 0
+ if (Math.abs(value) < 180) {
+ dDate = Math.abs(value)
+ } else {
+ dDate = Math.abs(value / 10000 / 60)
+ }
+ let isPlus = value > 0 ? 'E' : 'W'
+ let degree = parseInt(dDate + '')
+ let min = parseInt((dDate - degree) * 60 + '')
+ let sec = (((dDate - degree) * 60 - min) * 60).toFixed(2)
+ return `${degree}°${min}′${sec}″${isPlus}`
+ }
+
+ /**
+ * 时间格式化
+ * @param data
+ */
+ public formatDate(time: any, fmt: any) {
+ if (time === undefined || time === '' || time === null || time === 0) {
+ return
+ }
+ if (typeof time === 'string') {
+ return time
+ }
+ time = time * 1000
+ const date = new Date(time)
+ if (/(y+)/.test(fmt)) {
+ fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length))
+ }
+ const o = {
+ 'M+': date.getMonth() + 1,
+ 'd+': date.getDate(),
+ 'h+': date.getHours(),
+ 'm+': date.getMinutes(),
+ 's+': date.getSeconds()
+ }
+ for (const k in o) {
+ if (new RegExp(`(${k})`).test(fmt)) {
+ // @ts-ignore
+ const str = o[k] + ''
+ fmt = fmt.replace(RegExp.$1, RegExp.$1.length === 1 ? str : this.padLeftZero(str))
+ }
+ }
+ return fmt
+ }
+
+ private padLeftZero(str: any) {
+ return ('00' + str).substr(str.length)
+ }
+}
+
+/**
+ * 最小化列表
+ */
+class MiniList {
+
+ /**
+ * 添加最小化内容
+ * @param data
+ */
+ public addMini(data: any) {
+ Vue.prototype.$MiniList.push(data)
+ }
+
+ /**
+ * 删除最小化内容
+ * @param index
+ */
+ public delMini(type: string) {
+ const list = Vue.prototype.$MiniList
+ if (list) {
+ list.forEach((item: any, index: any) => {
+ if (item.type === type) {
+ Vue.prototype.$MiniList.splice(index, 1)
+ }
+ })
+ }
+ }
+
+ /**
+ * 判断传入的类型是否最小化显示
+ * @param type
+ */
+ public isHasMini(type: string) {
+ let data: any = null
+ const list = Vue.prototype.$MiniList
+ list.forEach((item: any) => {
+ if (item.type === type) {
+ data = item.data
+ }
+ })
+ return data
+ }
+}
+
+const SearchLogUtil = new SearchLog()
+const ShipUtils = new shipUtil()
+const MiniUtils = new MiniList()
+export {
+ SearchLogUtil,
+ ShipUtils,
+ MiniUtils
+}
diff --git a/src/util/translate/index.ts b/src/util/translate/index.ts
new file mode 100644
index 0000000..f7d5b30
--- /dev/null
+++ b/src/util/translate/index.ts
@@ -0,0 +1,40 @@
+import Vue from 'vue'
+import VueI18n from 'vue-i18n'
+import {Language} from "@/module/menu";
+
+// @ts-ignore
+import ElLocal from 'element-ui/lib/locale'
+// @ts-ignore
+import enLocale from 'element-ui/lib/locale/lang/en'
+// @ts-ignore
+import zhLocale from 'element-ui/lib/locale/lang/zh-CN'
+
+const langZH = require('./lang/zh.json')
+const langEn = require('./lang/en.json')
+Vue.use(VueI18n)
+const i18n = new VueI18n({
+ locale: 'zh',
+ messages: {
+ en: {
+ message: {
+ ...langEn
+ },
+ ...enLocale
+ },
+ zh: {
+ message: {
+ ...langZH
+ },
+ ...zhLocale
+ }
+ }
+})
+ElLocal.i18n((key: any, value: any) => i18n.t(key, value))
+const nowL = window.localStorage.getItem('language')
+if (nowL) {
+ i18n.locale = nowL
+} else {
+ window.localStorage.setItem('language', Language.zh)
+}
+
+export default i18n
diff --git a/src/util/translate/lang/en.json b/src/util/translate/lang/en.json
new file mode 100644
index 0000000..25598bb
--- /dev/null
+++ b/src/util/translate/lang/en.json
@@ -0,0 +1,420 @@
+{
+ "search": {
+ "shipName": "Ship name",
+ "mmsi": "Mmsi",
+ "imo": "Imo",
+ "lastUpdated": "Update time",
+ "port": "Port",
+ "country": "Country",
+ "portName": "Port name",
+ "info": "Enter Ship",
+ "minutesAgo": "minutes ago",
+ "hoursAgo": "hours ago",
+ "daysAgo": "days ago"
+ },
+ "portHoverView": {
+ "chineseName": "Chinese name",
+ "englishName": "English name",
+ "portCode": "Port code",
+ "portPos": "Port coordinates"
+ },
+ "ShipHoverView": {
+ "shipName": "Ship name",
+ "mmsi": "Mmsi",
+ "lon": "Lon",
+ "lat": "Lat",
+ "time": "Time"
+ },
+ "TrackHoverView": {
+ "course": "Course",
+ "Speed": "Speed",
+ "time": "Time'"
+ },
+ "PortQuery": {
+ "arrive": "Arrived",
+ "leave": "Departured",
+ "yj": "Arriving",
+ "crude": "Crude oil port",
+ "portTitle": "Port",
+ "portNameC": "Port name(CN)",
+ "portNameE": "Port name(En)",
+ "countryOfPort": "Country of port",
+ "areaOfPort": "Area of port",
+ "portTimeZone": "Time zone",
+ "maximumDraftLimit": "Maximum draft limit",
+ "maximumDWTLimit": "Maximum dwt limit",
+ "maximumCaptainLimit": "Maximum captain limit",
+ "dryBulkFacilities": "Dry bulk facilities",
+ "breakBulkFacilities": "Break bulk facilities",
+ "containerFacilities": "Container facilities",
+ "roRoFacilities": "Roro facilities",
+ "passengerFacilities": "Passenger facilities",
+ "liquidFacilities": "Liquid facilities",
+ "lngFacilities": "LNG facilities",
+ "lpgFacilities": "LPG facilities",
+ "dryDockFacilities": "Dry dock facilities",
+ "freeTradeZone": "Free trade zone",
+ "berthTitle": "Berth",
+ "noText": "null",
+ "allShowBerth": "All berths",
+ "berthName": "Berth name",
+ "berthOperator": "Berth operator",
+ "berthType": "Berth type",
+ "berthStatus": "Berth status",
+ "facilityType": "Facility type",
+ "nightBerthing": "Night berthing",
+ "nightBerthingNote": "Night berthing note",
+ "nightUnberthing": "Night unberthing",
+ "shipLOAMax": "Ship loa max",
+ "shipLOAMin": "Ship loa min",
+ "shipLOANote": "Ship loa note",
+ "shipDwtMax": "Ship dwt max",
+ "shipDwtMin": "Ship dwt min",
+ "shipDWTNote": "Ship dwt note",
+ "shipDispMax": "Ship disp max",
+ "shipDispMin": "ship disp min",
+ "shipDispNote": "Ship disp note",
+ "shipBeamMax": "Ship beam max",
+ "berthDispMax": "Berth disp max",
+ "gTMax": "GT max",
+ "TEU": "Teu",
+ "totalPBLMin": "Total pbl min",
+ "manifoldBCMMax": "Manifold bcm max",
+ "manifoldBCMMin": "Manifold bcm min",
+ "manifoldSCMMax": "Manifold scm max",
+ "manifoldSCMMin": "Manifold scm min",
+ "manifoldHeightMax": "Manifold height max",
+ "manifoldHeightMin": "Manifold height min",
+ "derrickSWLMin": "Derrick swl min",
+ "wLMastheadHeightMax": "Wl masthead height max",
+ "manifoldPBLMinFwd": "Manifold pbl min fwd",
+ "manifoldPBLMinAft": "Manifold pbl min aft",
+ "manifoldUsed": "Manifold used",
+ "roRo": "Ro ro",
+ "passengerType": "Passenger",
+ "rampWidth": "Ramp width(m)",
+ "rampSWL": "Ramp swl(t)",
+ "breakBulk": "Break bulk",
+ "naval": "Naval",
+ "coastal": "Coastal",
+ "timberProducts": "Timber products",
+ "fishing": "Fishing",
+ "container": "Container",
+ "transhipment": "Transhipment",
+ "offshore": "Off shore",
+ "projectHeavy": "Project heavy",
+ "steelProducts": "Steel products",
+ "twinSpan": "Twin span",
+ "cranesNote": "Cranes note",
+ "allWeatherBerth": "All weather berth",
+ "coldIroning": "Cold ironing",
+ "sideAlongside": "Side alongside",
+ "bunkersHFO": "Bunkers hfo",
+ "deliveryHFO": "Delivery hfo",
+ "gangwayUsed": "Gangway used",
+ "bunkersDOGO": "Bunkers do go",
+ "mooringsFwd": "Moorings fwd",
+ "mooringsAft": "Moorings aft",
+ "bunkersLNG": "Bunkers lng",
+ "deliveryLNG": "Delivery lng",
+ "freshWater": "Fresh water",
+ "deliveryFW": "Delivery fw",
+ "cow": "Cow",
+ "berthAdditionalInfo": "Berth additional info",
+ "reefer": "Reefer",
+ "waterLineHeightHWMaxDecimal": "Water line height hw max decimal",
+ "dryBulkCargo": "Dry bulk cargo",
+ "weather": "Weather",
+ "temperature": "Temperature",
+ "windSpeed": "Wind speed",
+ "waveHeight": "Wave height",
+ "rush": "Rush",
+ "windDirection": "Wind direction",
+ "surgeHeight": "Surge height",
+ "visibility": "Visibility",
+ "dongTai": "DongTai",
+ "day": "Day",
+ "week": "Week",
+ "month": "Month",
+ "mao": "Mao",
+ "berth": "Berth",
+ "port": "Port",
+ "maoTime": "Mao time",
+ "doTime": "Do time",
+ "chooseBerth": "Choose berth"
+ },
+ "arriveLeave": {
+ "choosePort": "Place choose port",
+ "port": "Port",
+ "portCountry": "Country",
+ "startTime": "Start time",
+ "endTime": "End time",
+ "search": "Search",
+ "chooseShip": "Ship screening",
+ "etaStartChoose": "ETA start",
+ "etaEndChoose": "ETA end",
+ "screen": "Screening",
+ "choose": "Place choose",
+ "shipName": "Ship name",
+ "shipType": "Ship type",
+ "draught": "Draught",
+ "sog": "Sog",
+ "destPort": "Dest port",
+ "eta": "ETA",
+ "latestTime": "Update time",
+ "arrivalTime": "Arrival time",
+ "berthTime": "Berth time",
+ "leaveTime": "Leave time",
+ "shipLength": "LOA",
+ "flag": "Flag",
+ "lastPortName": "Last port name",
+ "nextPortName": "Next port name",
+ "lastOutTime": "Last port Dep",
+ "nextInTime": "Next in time",
+ "export": "Export"
+ },
+ "shipInfo": {
+ "shipYc": "Route calculate",
+ "mmsi": "mmsi",
+ "shipHeading": "Ship heading",
+ "callsign": "Callsign",
+ "shipCoursing": "Ship coursing",
+ "imo": "Imo",
+ "speed": "Speed",
+ "vesselType": "Vessel type",
+ "lat": "Lat",
+ "status": "Status",
+ "lon": "Lon",
+ "shipLength": "Length",
+ "destination": "Destination",
+ "breadth": "Breadth",
+ "draught": "Draught",
+ "eta": "ETA",
+ "lastUpdated": "Last updated",
+ "shipFlag": "Flag",
+ "onTheWay": "On the way",
+ "arrival": "Arrival",
+ "noHc": "null",
+ "shipDoc": "Ship archives",
+ "ExName": "Ex name",
+ "FlagName": "Flag name",
+ "DateOfBuild": "Date Of build",
+ "shiptypeLevel3": "Ship type",
+ "Length": "Length",
+ "Depth": "Depth",
+ "GrossTonnage": "Gross tonnage",
+ "NetTonnage": "Net tonnage",
+ "Deadweight": "Dead weight",
+ "speedService": "Speed service",
+ "mainEngineModel": "Main engine model",
+ "mainEngineType": "Main engine type",
+ "fuelType1First": "Fuel type",
+ "fuelType1Capacity": "Fuel type capacity",
+ "groupBeneficialOwner": "Group beneficial owner",
+ "operator": "Operator",
+ "registeredOwner": "Registered owner",
+ "docCompany": "Doc company",
+ "cargoCapacitiesNarrative": "Cargo capacities narrative",
+ "innerShip": "China ship data",
+ "sailAreaName": "Sail area name",
+ "shipNameEn": "Ship name(en)",
+ "shipGrosston": "Ship grosston",
+ "shipType": "Ship type",
+ "shipEnginePower": "Ship engine power",
+ "shipPassengerNum": "Ship passenger number",
+ "location": "Location",
+ "trackHistory": "Track history",
+ "portCalling": "Port calling",
+ "ais": "Ais",
+ "shipName": "Ship name",
+ "predictionEta": "ETA (prediction by AI)"
+ },
+ "trackRecord": {
+ "history": "History",
+ "moreHistory": "More history",
+ "noData": "null",
+ "voyageList": "Voyage list",
+ "startTime": "Start time",
+ "endTime": "End Time",
+ "c": "End time",
+ "delete": "Delete"
+ },
+ "portOfCall": {
+ "oneMonth": "1 month",
+ "threeMonth": "3 months",
+ "sixMonth": "6 months",
+ "twelveMonth": "12 months",
+ "port": "Port",
+ "arriveTime": "Arrive time",
+ "departureTime": "Departure time",
+ "stopTime": "Stop time",
+ "portCalling": "Port calling"
+ },
+ "searchList": {
+ "shipName": "Ship name",
+ "imo": "imo",
+ "mmsi": "mmsi",
+ "type": "type",
+ "shipLength": "Length",
+ "countryFlag": "Flag",
+ "draught": "Draught",
+ "speed": "Speed",
+ "destination": "Destination"
+ },
+ "mapTool": {
+ "measureTool": "Measure tool",
+ "measureDistance": "Measure distance",
+ "measureArea": "Measure area",
+ "drawingArea": "Drawing area",
+ "shape": "Shape"
+ },
+ "weather": {
+ "reset": "Reset",
+ "marineWeather": "Marine weather",
+ "temperature": "Temperature",
+ "airPressure": "Air pressure",
+ "wind": "Wind",
+ "current": "Current",
+ "typhoon": "Typhoon",
+ "legend": "Legend",
+ "typhoonList": "Typhoon List",
+ "view": "View",
+ "close": "Close"
+ },
+ "routeQuery": {
+ "pol": "POL",
+ "pod": "POD",
+ "search": "Search",
+ "duration": "Voyage duration",
+ "mileage": "Mileage",
+ "averageSpeed": "Average speed",
+ "full": "Full",
+ "empty": "empty",
+ "origin": "origin",
+ "destination": "destination",
+ "port": "port",
+ "portToPort": "Port To Port",
+ "pointToPoint": "Point to Point",
+ "inputLon": "Enter longitude",
+ "inputLat": "Enter latitude",
+ "inputLonLatLong": "Please enter longitude and latitude, with longitude before latitude and then after latitude, separated by spaces, and multiple latitudes separated by commas",
+ "query": "Query",
+ "pointRoute": "Point to Point Route",
+ "route": "Route",
+ "voyageDistance": "Voyage Distance[nm]",
+ "timeInPort": "Time in Port",
+ "arrivePortTime": "Arrive Port Time",
+ "amount": "Amount",
+ "totalTime": "Total Time"
+ },
+ "messageList": {
+ "status": "Status",
+ "arrival": "Arrival",
+ "leave": "Leave",
+ "shipName": "Ship name",
+ "port": "Port",
+ "startTime": "Time",
+ "messageStatistics": "Message statistics",
+ "messageDetails": "Message details",
+ "arrive": "Arrival",
+ "leave2": "Leave",
+ "details": "Details"
+ },
+ "menu": {
+ "TrackRecordLogTemp": "Voyage history",
+ "AreaListTemp": "Area list",
+ "PortToPortTemp": "Port to port",
+ "SearchListTemp": "Search history",
+ "DataAnalysisTemp": "Data analysis",
+ "MapToolTemp": "Map selection",
+ "ShipRanksTemp": "My fleets",
+ "WeatherTemp": "Marine weather",
+ "RouteQueryTemp": "Voyage",
+ "ContainerQueryTemp": "Container module",
+ "portInfo": "Port Info",
+ "ArriveLeaveQueryTemp": "Arrived",
+ "DepartureInquiryTemp": "Departured",
+ "ExpectedArrivalTemp": "Arriving",
+ "crudeOilPort": "Crude oil port",
+ "messageList": "Message list",
+ "NumberOfBerthsTemp": "Ships at berths"
+ },
+ "fleets": {
+ "location": "Location",
+ "vc": "Show/Hide",
+ "total": "Total"
+ },
+ "containerQuery": {
+ "containerQuery": "Container code query",
+ "billOfLading": "Bill of lading",
+ "containerBoxNumber": "Number",
+ "tdCode": "Bol number",
+ "isoCode": "Iso code",
+ "containerPosName": "Container pos name",
+ "eventDescription": "Description",
+ "eventStatus": "Status",
+ "eventDate": "Date",
+ "eventActual": "Actual",
+ "eventType": "Type",
+ "vesselsName": "Name",
+ "eventVoyage": "Voyage",
+ "vesselCompliance": "Vessel compliance",
+ "eventlocationCompliance": "Location compliance",
+ "route": "Route"
+ },
+ "areaList": {
+ "shipStatistics": "Ship statistics",
+ "shipFlagStatistics": "Ship flag statistics",
+ "shipList": "Ship list",
+ "shipType": "Type",
+ "shipFlag": "Ship flag",
+ "shipLength": "Length",
+ "select": "Select",
+ "type": "Type",
+ "nationality": "Nationality",
+ "draft": "Draft",
+ "sog": "Sog",
+ "destPort": "Dest port",
+ "shipName": "Ship name",
+ "all": "All"
+ },
+ "allPort": "View all port",
+ "closeAllPort": "Close all port",
+ "shipEvent": {
+ "shipEvent": "Latest Event",
+ "eventName": "Event name",
+ "time": "Time",
+ "describe": "Describe",
+ "seaArea": "Sea area",
+ "screenPlaceholder": "Screen event name",
+ "oneMonth": "Last month",
+ "threeMonth": "Last three months",
+ "sixMonth": "Last six months",
+ "sevenDay": "Last seven days"
+ },
+ "NumberOfBerthsTemp": {
+ "portName": "Port name",
+ "numberOfBerth": "Number of berths",
+ "operationDuration": "Operation duration",
+ "numberOfMao": "Number of mooring",
+ "mooringDuration": "Mooring duration",
+ "numberOfLeave": "Number of leave",
+ "operate": "operate"
+ },
+ "typhoon": {
+ "name": "Name",
+ "start": "Start time",
+ "end": "End time",
+ "operate": "Operate"
+ },
+ "routeCalculate": {
+ "destination": "Destination",
+ "speed": "Speed",
+ "search": "Search",
+ "rd": "Remaining Distance(nm)",
+ "td": "Travelled Distance(nm)",
+ "remainder": "Remainder(h)",
+ "tt": "Traveled Time(h)"
+ }
+}
+
diff --git a/src/util/translate/lang/zh.json b/src/util/translate/lang/zh.json
new file mode 100644
index 0000000..f20a3e5
--- /dev/null
+++ b/src/util/translate/lang/zh.json
@@ -0,0 +1,420 @@
+{
+ "search": {
+ "shipName": "船名",
+ "mmsi": "MMSI",
+ "imo": "imo",
+ "lastUpdated": "更新时间",
+ "port": "港口",
+ "country": "国家",
+ "portName": "港口名称",
+ "info": "船舶",
+ "minutesAgo": "分钟前",
+ "hoursAgo": "小时前",
+ "daysAgo": "天前"
+ },
+ "portHoverView": {
+ "chineseName": "中文名称",
+ "englishName": "英文名称",
+ "portCode": "港口代码",
+ "portPos": "港口坐标"
+ },
+ "ShipHoverView": {
+ "shipName": "船名",
+ "mmsi": "MMSI",
+ "lon": "经度",
+ "lat": "纬度",
+ "time": "时间"
+ },
+ "TrackHoverView": {
+ "course": "航向",
+ "Speed": "航速",
+ "time": "时间'"
+ },
+ "PortQuery": {
+ "arrive": "到港查询",
+ "leave": "离港查询",
+ "yj": "预计到港",
+ "yy-": "预计到港",
+ "portTitle": "港口信息",
+ "portNameC": "港口名称(CN)",
+ "portNameE": "港口名称(EN)",
+ "countryOfPort": "港口所属国家",
+ "areaOfPort": "港口所属区域",
+ "portTimeZone": "时区",
+ "maximumDraftLimit": "最大吃水限制",
+ "maximumDWTLimit": "最大DWT限制",
+ "maximumCaptainLimit": "最大船长限制",
+ "dryBulkFacilities": "是否有干散货装卸设施",
+ "breakBulkFacilities": "是否有件杂货散货装卸设施",
+ "containerFacilities": "是否有集装箱装卸设施",
+ "roRoFacilities": "是否有滚装货物装卸设施",
+ "passengerFacilities": "是否有旅客登离设施",
+ "liquidFacilities": "是否有液货装卸设施",
+ "lngFacilities": "是否有液化天然气装卸设施",
+ "lpgFacilities": "是否有液化石油气装卸设施",
+ "dryDockFacilities": "是否有干船坞设施",
+ "freeTradeZone": "是否有自由贸易试验区",
+ "berthTitle": "泊位信息",
+ "noText": "无匹配数据",
+ "allShowBerth": "全部显示",
+ "berthName": "泊位名称",
+ "berthOperator": "泊位操作公司",
+ "berthType": "泊位类型",
+ "berthStatus": "泊位状态",
+ "facilityType": "泊位设施类型",
+ "nightBerthing": "夜间靠泊限制",
+ "nightBerthingNote": "夜间靠泊标准",
+ "nightUnberthing": "夜间离泊限制",
+ "shipLOAMax": "泊位最大船长",
+ "shipLOAMin": "泊位最小船长",
+ "shipLOANote": "允许靠泊船长标准说明",
+ "shipDwtMax": "泊位最大载重吨",
+ "shipDwtMin": "泊位最小载重吨",
+ "shipDWTNote": "允许靠泊船舶载重吨标准",
+ "shipDispMax": "泊位最大排水量",
+ "shipDispMin": "泊位最小排水量",
+ "shipDispNote": "允许靠泊船舶排水量标准",
+ "shipBeamMax": "泊位最大船宽",
+ "berthDispMax": "泊位对排水量的标准",
+ "gTMax": "泊位总吨最大限制",
+ "TEU": "泊位载箱量最大限制",
+ "totalPBLMin": "泊位最小平行体长",
+ "manifoldBCMMax": "最大船艏至集管中心距",
+ "manifoldBCMMin": "最小船艏至集管中心距",
+ "manifoldSCMMax": "最大船尾至集管中心距",
+ "manifoldSCMMin": "最小船尾至集管中心距",
+ "manifoldHeightMax": "总管距离水线最大高度",
+ "manifoldHeightMin": "总管距离水线最小高度",
+ "derrickSWLMin": "泊位起重机安全工作载荷",
+ "wLMastheadHeightMax": "水线上最大安全高度",
+ "manifoldPBLMinFwd": "允许的总管至船头最小平行长度",
+ "manifoldPBLMinAft": "允许的总管至船尾最小平行长度",
+ "manifoldUsed": "集管装卸使用位置",
+ "roRo": "泊位装卸滚装货物的类型",
+ "passengerType": "泊位登离旅客的类型",
+ "rampWidth": "滚装坡道宽度(米)",
+ "rampSWL": "滚装坡道安全工作载荷(吨)",
+ "breakBulk": "泊位是否能接收散货",
+ "naval": "泊位是否能接收海军舰艇补给",
+ "coastal": "泊位是否能接收海巡船舶",
+ "timberProducts": "泊位是否能接收木材货物",
+ "fishing": "泊位是否能接收渔船停靠",
+ "container": "泊位是否能接收集装箱货物",
+ "transhipment": "泊位是否能接收中转运输",
+ "offshore": "泊位是否能接收海上支援供应船舶",
+ "projectHeavy": "泊位是否能接收重型、大件货物",
+ "steelProducts": "泊位是否能接收钢铁及其制品",
+ "twinSpan": "是否有双千斤吊货锁",
+ "cranesNote": "泊位起重机类型",
+ "allWeatherBerth": "是否为全天候泊位",
+ "coldIroning": "泊位是否有岸电供使用",
+ "sideAlongside": "船舶停靠舷边限制",
+ "bunkersHFO": "泊位是否有船用HFO供应",
+ "deliveryHFO": "HFO加装方式",
+ "gangwayUsed": "使用舷梯方式",
+ "bunkersDOGO": "泊位是否有船用DO,GO供应",
+ "mooringsFwd": "泊位前系泊装置类型",
+ "mooringsAft": "泊位后系泊装置类型",
+ "bunkersLNG": "泊位是否有船用LNG供应",
+ "deliveryLNG": "LNG加装方式",
+ "freshWater": "泊位是否有船用淡水供应",
+ "deliveryFW": "淡水加装方式",
+ "cow": "泊位是否允许在排油期间对油罐进行原油洗舱",
+ "berthAdditionalInfo": "泊位额外使用说明",
+ "reefer": "泊位是否能接收冷藏货物",
+ "waterLineHeightHWMaxDecimal": "水线到舱盖板顶部最大距离",
+ "dryBulkCargo": "泊位是否能接收杂件货物",
+ "weather": "天气",
+ "temperature": "温度",
+ "windSpeed": "风速",
+ "waveHeight": "浪高",
+ "rush": "涌向",
+ "windDirection": "风向",
+ "surgeHeight": "涌高",
+ "visibility": "能见度",
+ "dongTai": "动态",
+ "day": "天",
+ "week": "周",
+ "month": "月",
+ "mao": "锚地情况",
+ "berth": "泊位情况",
+ "port": "港口情况",
+ "maoTime": "锚泊时间",
+ "doTime": "作业时长",
+ "chooseBerth": "选择泊位",
+ "crude": "原油港口"
+ },
+ "arriveLeave": {
+ "choosePort": "请选择港口信息",
+ "port": "港口",
+ "portCountry": "国家",
+ "startTime": "开始时间",
+ "endTime": "结束时间",
+ "search": "搜索",
+ "chooseShip": "船舶查询",
+ "etaStartChoose": "ETA开始",
+ "etaEndChoose": "ETA结束",
+ "screen": "筛选",
+ "choose": "请选择",
+ "shipName": "船名",
+ "shipType": "类型",
+ "draught": "吃水",
+ "sog": "船速",
+ "destPort": "目的地",
+ "eta": "预到时间",
+ "latestTime": "最新时间",
+ "arrivalTime": "到港时间",
+ "berthTime": "靠泊时间",
+ "leaveTime": "离港时间",
+ "shipLength": "船长",
+ "flag": "船旗",
+ "lastPortName": "上一港",
+ "nextPortName": "下一港",
+ "lastOutTime": "离开上一港时间",
+ "nextInTime": "到达下一港时间",
+ "export": "导出"
+ },
+ "shipInfo": {
+ "shipYc": "航线预测",
+ "mmsi": "mmsi",
+ "shipHeading": "船艏向",
+ "callsign": "呼号",
+ "shipCoursing": "船航向",
+ "imo": "imo",
+ "speed": "船速",
+ "vesselType": "类型",
+ "lat": "纬度",
+ "status": "状态",
+ "lon": "经度",
+ "shipLength": "船长",
+ "destination": "目的地",
+ "breadth": "船宽",
+ "draught": "吃水",
+ "eta": "预计到港",
+ "lastUpdated": "更新时间",
+ "shipFlag": "船旗",
+ "onTheWay": "在途",
+ "arrival": "到港",
+ "noHc": "暂无航次",
+ "shipDoc": "船舶档案",
+ "ExName": "曾用名",
+ "FlagName": "船旗国",
+ "DateOfBuild": "建造年份",
+ "shiptypeLevel3": "船舶类型",
+ "Length": "船长",
+ "Depth": "深度",
+ "GrossTonnage": "总吨",
+ "NetTonnage": "净吨",
+ "Deadweight": "载重吨",
+ "speedService": "经济航速",
+ "mainEngineModel": "主机型号",
+ "mainEngineType": "主机类型",
+ "fuelType1First": "燃料",
+ "fuelType1Capacity": "燃料类型1容量",
+ "groupBeneficialOwner": "船舶受益所有公司",
+ "operator": "船舶操作公司",
+ "registeredOwner": "注册所有公司",
+ "docCompany": "DOC公司",
+ "cargoCapacitiesNarrative": "货物类型描述",
+ "innerShip": "内贸船档案",
+ "sailAreaName": "航区",
+ "shipNameEn": "英文船名",
+ "shipGrosston": "船舶总吨位",
+ "shipType": "船型",
+ "shipEnginePower": "主机功率",
+ "shipPassengerNum": "船舶客位(个)",
+ "location": "定位",
+ "trackHistory": "轨迹查询",
+ "portCalling": "挂靠港记录",
+ "ais": "AIS信息",
+ "shipName": "船名",
+ "predictionEta": "计算ETA"
+ },
+ "trackRecord": {
+ "history": "查询",
+ "moreHistory": "高级查询",
+ "noData": "暂无数据",
+ "voyageList": "轨迹列表",
+ "startTime": "开始时间",
+ "endTime": "结束时间",
+ "delete": "清除"
+ },
+ "portOfCall": {
+ "oneMonth": "1个月",
+ "threeMonth": "3个月",
+ "sixMonth": "6个月",
+ "twelveMonth": "12个月",
+ "port": "港口",
+ "arriveTime": "到港时间",
+ "departureTime": "离港时间",
+ "stopTime": "停时",
+ "portCalling": "挂靠港记录"
+ },
+ "searchList": {
+ "shipName": "船名",
+ "imo": "imo",
+ "mmsi": "mmsi",
+ "type": "类型",
+ "shipLength": "船长",
+ "countryFlag": "国籍",
+ "draught": "吃水",
+ "speed": "船速",
+ "destination": "目的地"
+ },
+ "mapTool": {
+ "measureTool": "测量工具",
+ "measureDistance": "测距离",
+ "measureArea": "测面积",
+ "drawingArea": "绘制区域",
+ "shape": "形状"
+ },
+ "weather": {
+ "reset": "重置",
+ "marineWeather": "海况天气",
+ "temperature": "温度",
+ "airPressure": "气压",
+ "wind": "风场",
+ "current": "洋流",
+ "typhoon": "台风",
+ "legend": "图例",
+ "typhoonList": "台风列表",
+ "view": "查看",
+ "close": "关闭"
+ },
+ "routeQuery": {
+ "pol": "起始港",
+ "pod": "目的港",
+ "search": "搜索",
+ "duration": "航时",
+ "mileage": "航行里程",
+ "averageSpeed": "平均航速",
+ "full": "满",
+ "empty": "空",
+ "origin": "起始港",
+ "destination": "目的港",
+ "port": "港口",
+ "portToPort": "港到港",
+ "pointToPoint": "点到点",
+ "inputLon": "请输入经度",
+ "inputLat": "请输入纬度",
+ "inputLonLatLong": "请输入经纬度,经度在前纬度在后,经纬度之间用空格隔开,多个经纬度之间用逗号间隔",
+ "query": "Query",
+ "pointRoute": "点到点航线",
+ "route": "航线",
+ "voyageDistance": "航程[nm]",
+ "timeInPort": "在港时间",
+ "arrivePortTime": "到港时间",
+ "amount": "合计",
+ "totalTime": "用时"
+ },
+ "messageList": {
+ "status": "状态",
+ "arrival": "到达区域",
+ "leave": "离开区域",
+ "shipName": "船名",
+ "port": "港口名称",
+ "startTime": "开始时间",
+ "messageStatistics": "消息统计",
+ "messageDetails": "消息详情",
+ "arrive": "到达",
+ "leave2": "离开",
+ "details": "详情"
+ },
+ "menu": {
+ "TrackRecordLogTemp": "轨迹记录",
+ "AreaListTemp": "区域列表",
+ "PortToPortTemp": "港间距",
+ "SearchListTemp": "搜索记录",
+ "DataAnalysisTemp": "数据分析",
+ "MapToolTemp": "地图工具",
+ "ShipRanksTemp": "我的船队",
+ "WeatherTemp": "海况天气",
+ "RouteQueryTemp": "航线查询",
+ "ContainerQueryTemp": "集装箱查询",
+ "portInfo": "港口信息",
+ "ArriveLeaveQueryTemp": "到港查询",
+ "DepartureInquiryTemp": "离港查询",
+ "ExpectedArrivalTemp": "预计到港",
+ "crudeOilPort": "原油港口",
+ "messageList": "消息列表",
+ "NumberOfBerthsTemp": "在泊统计"
+ },
+ "fleets": {
+ "location": "定位",
+ "vc": "显示/隐藏",
+ "total": "共"
+ },
+ "containerQuery": {
+ "containerQuery": "集装箱号查询",
+ "billOfLading": "提单号查询",
+ "containerBoxNumber": "集装箱编号",
+ "tdCode": "提单编号",
+ "isoCode": "集装箱ISO代码",
+ "containerPosName": "集装箱位置",
+ "eventDescription": "描述",
+ "eventStatus": "状态",
+ "eventDate": "时间",
+ "eventActual": "actual",
+ "eventType": "类型",
+ "vesselsName": "船舶名称",
+ "eventVoyage": "voyage",
+ "vesselCompliance": "vesselCompliance",
+ "eventlocationCompliance": "locationCompliance",
+ "route": "航线相关"
+ },
+ "areaList": {
+ "shipStatistics": "船舶统计",
+ "shipFlagStatistics": "船旗统计",
+ "shipList": "船舶列表",
+ "shipType": "船型",
+ "shipFlag": "船籍",
+ "shipLength": "船长",
+ "select": "筛选",
+ "type": "类型",
+ "nationality": "国籍",
+ "draft": "吃水",
+ "sog": "船速",
+ "destPort": "目的地",
+ "shipName": "船名",
+ "all": "全部"
+ },
+ "shipEvent": {
+ "shipEvent": "船舶事件",
+ "eventName": "事件名称",
+ "time": "时间",
+ "describe": "事件描述",
+ "seaArea": "所处海区",
+ "screenPlaceholder": "事件名称筛选",
+ "oneMonth": "最近一个月",
+ "threeMonth": "最近三个月",
+ "sixMonth": "最近六个月",
+ "sevenDay": "最近七天"
+ },
+ "allPort": "显示全部港口",
+ "closeAllPort": "关闭全部港口",
+ "NumberOfBerthsTemp": {
+ "portName": "港口名称",
+ "numberOfBerth": "在泊船舶数量",
+ "operationDuration": "作业时长",
+ "numberOfMao": "在锚船舶数量",
+ "mooringDuration": "锚泊时长",
+ "numberOfLeave": "离泊数量",
+ "operate": "操作"
+ },
+ "typhoon": {
+ "name": "名称",
+ "start": "开始时间",
+ "end": "结束时间",
+ "operate": "操作"
+ },
+ "routeCalculate": {
+ "destination": "目的地",
+ "speed": "航速",
+ "search": "搜索",
+ "rd": "剩余里程(海里)",
+ "td": "已行驶里程(海里)",
+ "remainder": "剩余时间(小时)",
+ "tt": "已行驶时间(小时)"
+ }
+}
+
diff --git a/src/util/vue-global/index.ts b/src/util/vue-global/index.ts
new file mode 100644
index 0000000..0f2f3d6
--- /dev/null
+++ b/src/util/vue-global/index.ts
@@ -0,0 +1,47 @@
+import Vue from 'vue'
+
+Vue.prototype.$SearchLog = []
+Vue.prototype.$fleetList = []
+Vue.prototype.$originAllShipRankList = []
+Vue.prototype.$sourceShips = []
+Vue.prototype.$MessageInfo = []
+Vue.prototype.$showComponents = new Map() // 显示的组件
+Vue.prototype.$MiniList = [] // 最小化列表
+Vue.prototype.$HistoryLog = [] // 轨迹记录
+Vue.prototype.$menuGroup = new Map() // 菜单分组
+
+let localStorageMock = (function (win) {
+ let storage = win.localStorage;
+ return {
+ setItem: function (key: any, value: any) {
+ let setItemEvent: any = new Event("setItemEvent");
+ let oldValue = storage[key];
+ setItemEvent.key = key;
+ // 新旧值深度判断,派发监听事件
+ if (oldValue !== value) {
+ setItemEvent.newValue = value;
+ setItemEvent.oldValue = oldValue;
+ win.dispatchEvent(setItemEvent);
+ storage[key] = value;
+ return true;
+ }
+ return false;
+ },
+ getItem: function (key: any) {
+ return storage[key];
+ },
+ removeItem: function (key: any) {
+ storage[key] = null;
+ return true;
+ },
+ clear: function () {
+ storage.clear();
+ return true;
+ },
+ key: function (index: any) {
+ return storage.key(index);
+ }
+ };
+}(window));
+
+Object.defineProperty(window, 'localStorage', {value: localStorageMock, writable: true});
diff --git a/src/views/index-c.html b/src/views/index-c.html
new file mode 100644
index 0000000..4ba6026
--- /dev/null
+++ b/src/views/index-c.html
@@ -0,0 +1,72 @@
+
+
+
+
+ Title
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/layout/Layout.vue b/src/views/layout/Layout.vue
new file mode 100644
index 0000000..e7babaa
--- /dev/null
+++ b/src/views/layout/Layout.vue
@@ -0,0 +1,84 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/main/Main.vue b/src/views/main/Main.vue
new file mode 100644
index 0000000..ee977d1
--- /dev/null
+++ b/src/views/main/Main.vue
@@ -0,0 +1,444 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/new-dialog/AreaListTemp.vue b/src/views/new-dialog/AreaListTemp.vue
new file mode 100644
index 0000000..50d69ab
--- /dev/null
+++ b/src/views/new-dialog/AreaListTemp.vue
@@ -0,0 +1,75 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/new-dialog/ArriveLeaveQueryTemp.vue b/src/views/new-dialog/ArriveLeaveQueryTemp.vue
new file mode 100644
index 0000000..5f31e16
--- /dev/null
+++ b/src/views/new-dialog/ArriveLeaveQueryTemp.vue
@@ -0,0 +1,95 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/new-dialog/CarInfoTemp.vue b/src/views/new-dialog/CarInfoTemp.vue
new file mode 100644
index 0000000..a8218fa
--- /dev/null
+++ b/src/views/new-dialog/CarInfoTemp.vue
@@ -0,0 +1,76 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/new-dialog/CarListTemp.vue b/src/views/new-dialog/CarListTemp.vue
new file mode 100644
index 0000000..b208263
--- /dev/null
+++ b/src/views/new-dialog/CarListTemp.vue
@@ -0,0 +1,75 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/new-dialog/CarTrackRecordTemp.vue b/src/views/new-dialog/CarTrackRecordTemp.vue
new file mode 100644
index 0000000..59d5394
--- /dev/null
+++ b/src/views/new-dialog/CarTrackRecordTemp.vue
@@ -0,0 +1,68 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/new-dialog/ContainerQueryTemp.vue b/src/views/new-dialog/ContainerQueryTemp.vue
new file mode 100644
index 0000000..393cf86
--- /dev/null
+++ b/src/views/new-dialog/ContainerQueryTemp.vue
@@ -0,0 +1,75 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/new-dialog/DataAnalysisTemp.vue b/src/views/new-dialog/DataAnalysisTemp.vue
new file mode 100644
index 0000000..0f9098f
--- /dev/null
+++ b/src/views/new-dialog/DataAnalysisTemp.vue
@@ -0,0 +1,75 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/new-dialog/DepartureInquiryTemp.vue b/src/views/new-dialog/DepartureInquiryTemp.vue
new file mode 100644
index 0000000..0f8e25a
--- /dev/null
+++ b/src/views/new-dialog/DepartureInquiryTemp.vue
@@ -0,0 +1,95 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/new-dialog/ExpectedArrivalTemp.vue b/src/views/new-dialog/ExpectedArrivalTemp.vue
new file mode 100644
index 0000000..879d6b8
--- /dev/null
+++ b/src/views/new-dialog/ExpectedArrivalTemp.vue
@@ -0,0 +1,95 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/new-dialog/MapToolTemp.vue b/src/views/new-dialog/MapToolTemp.vue
new file mode 100644
index 0000000..1d55999
--- /dev/null
+++ b/src/views/new-dialog/MapToolTemp.vue
@@ -0,0 +1,76 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/new-dialog/MessageListTemp.vue b/src/views/new-dialog/MessageListTemp.vue
new file mode 100644
index 0000000..2505f09
--- /dev/null
+++ b/src/views/new-dialog/MessageListTemp.vue
@@ -0,0 +1,76 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/new-dialog/NotanTemp.vue b/src/views/new-dialog/NotanTemp.vue
new file mode 100644
index 0000000..c15e0fd
--- /dev/null
+++ b/src/views/new-dialog/NotanTemp.vue
@@ -0,0 +1,75 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/new-dialog/NumberOfBerthsTemp.vue b/src/views/new-dialog/NumberOfBerthsTemp.vue
new file mode 100644
index 0000000..270a3de
--- /dev/null
+++ b/src/views/new-dialog/NumberOfBerthsTemp.vue
@@ -0,0 +1,76 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/new-dialog/PointToPointResTemp.vue b/src/views/new-dialog/PointToPointResTemp.vue
new file mode 100644
index 0000000..b2b3ece
--- /dev/null
+++ b/src/views/new-dialog/PointToPointResTemp.vue
@@ -0,0 +1,75 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/new-dialog/PortOfCallTemp.vue b/src/views/new-dialog/PortOfCallTemp.vue
new file mode 100644
index 0000000..bcb43a1
--- /dev/null
+++ b/src/views/new-dialog/PortOfCallTemp.vue
@@ -0,0 +1,74 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/new-dialog/PortQueryTemp.vue b/src/views/new-dialog/PortQueryTemp.vue
new file mode 100644
index 0000000..db7b777
--- /dev/null
+++ b/src/views/new-dialog/PortQueryTemp.vue
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/new-dialog/RouteQueryTemp.vue b/src/views/new-dialog/RouteQueryTemp.vue
new file mode 100644
index 0000000..260b284
--- /dev/null
+++ b/src/views/new-dialog/RouteQueryTemp.vue
@@ -0,0 +1,75 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/new-dialog/RouteYcTemp.vue b/src/views/new-dialog/RouteYcTemp.vue
new file mode 100644
index 0000000..13236b0
--- /dev/null
+++ b/src/views/new-dialog/RouteYcTemp.vue
@@ -0,0 +1,74 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/new-dialog/SearchListTemp.vue b/src/views/new-dialog/SearchListTemp.vue
new file mode 100644
index 0000000..74dfbb4
--- /dev/null
+++ b/src/views/new-dialog/SearchListTemp.vue
@@ -0,0 +1,76 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/new-dialog/ShipEventTemp.vue b/src/views/new-dialog/ShipEventTemp.vue
new file mode 100644
index 0000000..fb4f28d
--- /dev/null
+++ b/src/views/new-dialog/ShipEventTemp.vue
@@ -0,0 +1,75 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/new-dialog/ShipInBerthTemp.vue b/src/views/new-dialog/ShipInBerthTemp.vue
new file mode 100644
index 0000000..b1bbb27
--- /dev/null
+++ b/src/views/new-dialog/ShipInBerthTemp.vue
@@ -0,0 +1,74 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/new-dialog/ShipInfoTemp.vue b/src/views/new-dialog/ShipInfoTemp.vue
new file mode 100644
index 0000000..f210026
--- /dev/null
+++ b/src/views/new-dialog/ShipInfoTemp.vue
@@ -0,0 +1,76 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/new-dialog/ShipRanksTemp.vue b/src/views/new-dialog/ShipRanksTemp.vue
new file mode 100644
index 0000000..7a4131c
--- /dev/null
+++ b/src/views/new-dialog/ShipRanksTemp.vue
@@ -0,0 +1,75 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/new-dialog/TrackRecordLogTemp.vue b/src/views/new-dialog/TrackRecordLogTemp.vue
new file mode 100644
index 0000000..e0b290d
--- /dev/null
+++ b/src/views/new-dialog/TrackRecordLogTemp.vue
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/new-dialog/TrackRecordTemp.vue b/src/views/new-dialog/TrackRecordTemp.vue
new file mode 100644
index 0000000..58a7bcd
--- /dev/null
+++ b/src/views/new-dialog/TrackRecordTemp.vue
@@ -0,0 +1,68 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/new-dialog/WeatherImgTemp.vue b/src/views/new-dialog/WeatherImgTemp.vue
new file mode 100644
index 0000000..228f4e5
--- /dev/null
+++ b/src/views/new-dialog/WeatherImgTemp.vue
@@ -0,0 +1,74 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/new-dialog/WeatherTemp.vue b/src/views/new-dialog/WeatherTemp.vue
new file mode 100644
index 0000000..8fb706b
--- /dev/null
+++ b/src/views/new-dialog/WeatherTemp.vue
@@ -0,0 +1,75 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/on-map-view/AreaList.vue b/src/views/on-map-view/AreaList.vue
new file mode 100644
index 0000000..655f852
--- /dev/null
+++ b/src/views/on-map-view/AreaList.vue
@@ -0,0 +1,889 @@
+
+
+
+
+ {{ $t('message.areaList.shipType') }}:
+
+
+
+ {{ $t('message.areaList.shipFlag') }} :
+
+
+
+
+ {{ $t('message.areaList.shipLength') }}:
+
+
+
+
+ {{ $t('message.areaList.select') }}
+
+
+
+
+
+
+
+
+
+
+ {{ language === 'zh' ? filterShipType(scope.row.shiptype) : filterShipType(scope.row.shiptype, true) }}
+
+
+
+ {{ scope.row.length }}m
+
+
+
+
+
+
+
+ {{ scope.row.draught / 10 }}m
+
+
+ {{ scope.row.sog / 10 }}kn
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/on-map-view/CarInfo.vue b/src/views/on-map-view/CarInfo.vue
new file mode 100644
index 0000000..4107c5a
--- /dev/null
+++ b/src/views/on-map-view/CarInfo.vue
@@ -0,0 +1,127 @@
+
+
+
+
+
+
所属企业:
+
{{carData.companyName}}
+
+
+
海关放行时间:
+
{{carData.customsCreateDate}}
+
+
+
报关单号:
+
{{carData.entryId}}
+
+
+
车辆型号:
+
{{carData.vehicleModel}}
+
+
+
交警上牌日期:
+
{{carData.firstRegistrationDate}}
+
+
+
更新时间:
+
{{carData.gpsTime}}
+
+
+
+
+
+ 车辆定位
+ 轨迹查询
+
+
+
+
+
+
+
diff --git a/src/views/on-map-view/CarList.vue b/src/views/on-map-view/CarList.vue
new file mode 100644
index 0000000..880c038
--- /dev/null
+++ b/src/views/on-map-view/CarList.vue
@@ -0,0 +1,127 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/on-map-view/CarTrackRecord.vue b/src/views/on-map-view/CarTrackRecord.vue
new file mode 100644
index 0000000..d93814f
--- /dev/null
+++ b/src/views/on-map-view/CarTrackRecord.vue
@@ -0,0 +1,422 @@
+
+
+
+
+ 7天
+ 一个月
+ 3个月
+ 12个月
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+ {{ $t('message.trackRecord.history') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('message.trackRecord.delete') }}
+
+
+
+
+ {{ $t('message.trackRecord.delete') }}
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/on-map-view/ContainerQuery.vue b/src/views/on-map-view/ContainerQuery.vue
new file mode 100644
index 0000000..a1c263a
--- /dev/null
+++ b/src/views/on-map-view/ContainerQuery.vue
@@ -0,0 +1,769 @@
+
+
+
+
+ {{ $t('message.containerQuery.containerQuery') }}
+
+
+ {{ $t('message.containerQuery.billOfLading') }}
+
+
+
+
{{
+ isCode ? $t('message.containerQuery.containerBoxNumber') : $t('message.containerQuery.tdCode')
+ }}:
+
+
+
+
+
+
+
+
+
{{
+ $t('message.containerQuery.containerBoxNumber')
+ }}: {{ containerInfoTest.number }}
+
+
{{ $t('message.containerQuery.isoCode') }}: {{ containerInfoTest.isoCode }}
+
+
+
+
+ {{ $t('message.containerQuery.containerPosName') }}
+
+
+ {{ $t('message.containerQuery.eventDescription') }}
+
+
+ {{ $t('message.containerQuery.eventStatus') }}
+
+
+ {{ $t('message.containerQuery.eventDate') }}
+
+
+ {{ $t('message.containerQuery.eventActual') }}
+
+
+ {{ $t('message.containerQuery.eventType') }}
+
+
+ {{ $t('message.containerQuery.vesselsName') }}
+
+
+ {{ $t('message.containerQuery.eventVoyage') }}
+
+
+ {{ $t('message.containerQuery.vesselCompliance') }}
+
+
+ {{ $t('message.containerQuery.eventlocationCompliance') }}
+
+
+
+
+
+
{{ $t('message.containerQuery.route') }}
+
+
+
+ {{ language === 'zh' ? activity.content : activity.content2 }}
+
+
+
+
+
+
{{
+ $t('message.containerQuery.containerBoxNumber')
+ }}: {{ item.number }}
+
+
{{ $t('message.containerQuery.isoCode') }}: {{ item.isoCode }}
+
+
+
+ {{ $t('message.containerQuery.containerPosName') }}
+
+
+ {{ $t('message.containerQuery.eventDescription') }}
+
+
+ {{ $t('message.containerQuery.eventStatus') }}
+
+
+ {{ $t('message.containerQuery.eventDate') }}
+
+
+ {{ $t('message.containerQuery.eventActual') }}
+
+
+ {{ $t('message.containerQuery.eventType') }}
+
+
+ {{ $t('message.containerQuery.vesselsName') }}
+
+
+ {{ $t('message.containerQuery.eventVoyage') }}
+
+
+ {{ $t('message.containerQuery.vesselCompliance') }}
+
+
+ {{ $t('message.containerQuery.eventlocationCompliance') }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/on-map-view/DataAnalysis.vue b/src/views/on-map-view/DataAnalysis.vue
new file mode 100644
index 0000000..543af43
--- /dev/null
+++ b/src/views/on-map-view/DataAnalysis.vue
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+
diff --git a/src/views/on-map-view/MapTool.vue b/src/views/on-map-view/MapTool.vue
new file mode 100644
index 0000000..eaba3c3
--- /dev/null
+++ b/src/views/on-map-view/MapTool.vue
@@ -0,0 +1,253 @@
+
+
+
+
+
+
+
diff --git a/src/views/on-map-view/MessageList.vue b/src/views/on-map-view/MessageList.vue
new file mode 100644
index 0000000..7e4130b
--- /dev/null
+++ b/src/views/on-map-view/MessageList.vue
@@ -0,0 +1,237 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ status(scope.row.status) }}
+
+
+
+
+ {{ scope.row.updateTime }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/on-map-view/Notan.vue b/src/views/on-map-view/Notan.vue
new file mode 100644
index 0000000..9e94728
--- /dev/null
+++ b/src/views/on-map-view/Notan.vue
@@ -0,0 +1,343 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ formatDate(scope.row.recordTime) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/on-map-view/NumberOfBerths.vue b/src/views/on-map-view/NumberOfBerths.vue
new file mode 100644
index 0000000..aa69a85
--- /dev/null
+++ b/src/views/on-map-view/NumberOfBerths.vue
@@ -0,0 +1,308 @@
+
+
+
+
+
+
+
+
+
+
+ {{
+ $t('message.messageList.details')
+ }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/on-map-view/PointToPoint.vue b/src/views/on-map-view/PointToPoint.vue
new file mode 100644
index 0000000..2d6a50f
--- /dev/null
+++ b/src/views/on-map-view/PointToPoint.vue
@@ -0,0 +1,219 @@
+
+
+
+
From
+
To
+
Lon:
+
+
+
Lat:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('message.routeQuery.query') }}
+ {{ $t('message.weather.reset') }}
+
+
+
+
+
+
+
diff --git a/src/views/on-map-view/PointToPointRes.vue b/src/views/on-map-view/PointToPointRes.vue
new file mode 100644
index 0000000..3ae4f25
--- /dev/null
+++ b/src/views/on-map-view/PointToPointRes.vue
@@ -0,0 +1,273 @@
+
+
+
+ {{ $t('message.typhoon.start') }} :
+
+
+
+
+
+
+ form: {{
+ cacuLonLat(scope.row.startPoint.lon, 'lon')
+ }}
+ {{ cacuLonLat(scope.row.startPoint.lat, 'lat') }}
+ to: {{ cacuLonLat(scope.row.endPoint.lon, 'lon') }}
+ {{ cacuLonLat(scope.row.endPoint.lat, 'lat') }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ getDayAndHour(scope.row.distance / scope.row.sog, scope.row) }}
+
+
+
+
+
+
+
+
+
+ {{ countTime(scope) }}
+
+
+
+
+ {{ countLeaveTime(scope) }}
+
+
+
+
+
+
+
+
+
diff --git a/src/views/on-map-view/PortOfCall.vue b/src/views/on-map-view/PortOfCall.vue
new file mode 100644
index 0000000..27375ac
--- /dev/null
+++ b/src/views/on-map-view/PortOfCall.vue
@@ -0,0 +1,195 @@
+
+
+
+ {{ $t('message.portOfCall.oneMonth') }}
+
+ {{ $t('message.portOfCall.threeMonth') }}
+
+ {{ $t('message.portOfCall.sixMonth') }}
+
+ {{ $t('message.portOfCall.twelveMonth') }}
+
+
+
+
+
+ {{ scope.row.portNameChs }}({{ scope.row.portNameEn }})
+
+
+
+
+
+ {{ formDate(scope.row.inTime, 'yyyy/MM/dd hh:mm:ss') }}
+
+
+
+
+
+
+
+ {{ formDate(scope.row.outTime, 'yyyy/MM/dd hh:mm:ss') }}
+
+
+
+
+
+
+
+ {{ ((scope.row.outTime - scope.row.inTime) / 3600).toFixed(2) }}{{
+ getNowLanguage() === 'zh' ? '时' : 'h'
+ }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/on-map-view/PortQuery.vue b/src/views/on-map-view/PortQuery.vue
new file mode 100644
index 0000000..2d4b19a
--- /dev/null
+++ b/src/views/on-map-view/PortQuery.vue
@@ -0,0 +1,896 @@
+
+
+
+ {{ $t('message.PortQuery.arrive') }}
+ {{ $t('message.PortQuery.leave') }}
+ {{ $t('message.PortQuery.yj') }}
+
+
+
+
+
{{ $t('message.PortQuery.portNameC') }}:
+
{{ port.nameCn }}
+
+
+
{{ $t('message.PortQuery.portNameE') }}:
+
{{ port.nameEn }}
+
+
+
{{ $t('message.PortQuery.countryOfPort') }}:
+
{{ port.continentName }}
+
+
+
{{ $t('message.PortQuery.areaOfPort') }}:
+
{{ port.continentName }}
+
+
+
{{ $t('message.PortQuery.portTimeZone') }}:
+
{{ port.timeZone }}
+
+
+
{{ $t('message.PortQuery.maximumDraftLimit') }}:
+
+
+
+
{{ $t('message.PortQuery.maximumDWTLimit') }}:
+
{{ Math.round(port.maxDwt) }}
+
+
+
{{ $t('message.PortQuery.maximumCaptainLimit') }}:
+
+
+
+
{{ $t('message.PortQuery.dryBulkFacilities') }}:
+
{{ port.dryBulkFacilities }}
+
+
+
{{ $t('message.PortQuery.breakBulkFacilities') }}:
+
{{ port.breakbulkFacilities }}
+
+
+
{{ $t('message.PortQuery.containerFacilities') }}:
+
{{ port.containerFacilities }}
+
+
+
{{ $t('message.PortQuery.roRoFacilities') }}:
+
{{ port.roRoFacilities }}
+
+
+
{{ $t('message.PortQuery.passengerFacilities') }}:
+
{{ port.passengerFacilities }}
+
+
+
{{ $t('message.PortQuery.liquidFacilities') }}:
+
{{ port.liquidFacilities }}
+
+
+
{{ $t('message.PortQuery.lngFacilities') }}:
+
{{ Math.round(port.lngFacilities) }}
+
+
+
{{ $t('message.PortQuery.lpgFacilities') }}:
+
{{ Math.round(port.lpgFacilities) }}
+
+
+
{{ $t('message.PortQuery.dryDockFacilities') }}:
+
{{ port.dryDockFacilities }}
+
+
+
{{ $t('message.PortQuery.freeTradeZone') }}:
+
{{ port.freeTradeZone }}
+
+
+
+
+
+
+
+
+
+
+ {{ $t('message.PortQuery.allShowBerth') }}
+
+
+
+
+
+
{{ $t('message.PortQuery.berthName') }}:
+
{{ chooseBerth.berthName }}
+
+
+
{{ $t('message.PortQuery.berthOperator') }}:
+
{{ chooseBerth.berthOperator }}
+
+
+
{{ $t('message.PortQuery.berthType') }}:
+
{{ chooseBerth.berthType }}
+
+
+
{{ $t('message.PortQuery.berthStatus') }}:
+
{{ chooseBerth.berthStatus }}
+
+
+
{{ $t('message.PortQuery.facilityType') }}:
+
{{ chooseBerth.facilityType }}
+
+
+
{{ $t('message.PortQuery.nightBerthing') }}:
+
{{ chooseBerth.nightBerthing }}
+
+
+
{{ $t('message.PortQuery.nightBerthingNote') }}:
+
{{ chooseBerth.nightBerthingNote }}
+
+
+
{{ $t('message.PortQuery.nightUnberthing') }}:
+
{{ chooseBerth.nightUnberthing }}
+
+
+
{{ $t('message.PortQuery.shipLOAMax') }}:
+
{{ chooseBerth.shipLOAMax }}
+
+
+
{{ $t('message.PortQuery.shipLOAMin') }}:
+
{{ chooseBerth.shipLOAMin }}
+
+
+
{{ $t('message.PortQuery.shipLOANote') }}:
+
{{ chooseBerth.shipLOANote }}
+
+
+
{{ $t('message.PortQuery.shipDwtMax') }}:
+
{{ chooseBerth.shipDwtMax }}
+
+
+
{{ $t('message.PortQuery.shipDwtMin') }}:
+
{{ chooseBerth.shipDwtMin }}
+
+
+
{{ $t('message.PortQuery.shipDWTNote') }}:
+
{{ chooseBerth.shipDWTNote }}
+
+
+
{{ $t('message.PortQuery.shipDispMax') }}:
+
{{ chooseBerth.shipDispMax }}
+
+
+
{{ $t('message.PortQuery.shipDispMin') }}:
+
{{ chooseBerth.shipDispMin }}
+
+
+
{{ $t('message.PortQuery.shipDispNote') }}:
+
{{ chooseBerth.shipDispNote }}
+
+
+
{{ $t('message.PortQuery.shipBeamMax') }}:
+
{{ chooseBerth.shipBeamMax }}
+
+
+
{{ $t('message.PortQuery.berthDispMax') }}:
+
{{ chooseBerth.berthDispMax }}
+
+
+
{{ $t('message.PortQuery.gTMax') }}:
+
{{ chooseBerth.gtMax }}
+
+
+
{{ $t('message.PortQuery.TEU') }}:
+
{{ chooseBerth.teu }}
+
+
+
{{ $t('message.PortQuery.totalPBLMin') }}:
+
{{ chooseBerth.totalPBLMin }}
+
+
+
{{ $t('message.PortQuery.manifoldBCMMax') }}:
+
{{ chooseBerth.manifoldBCMMax }}
+
+
+
{{ $t('message.PortQuery.manifoldBCMMin') }}:
+
{{ chooseBerth.manifoldBCMMin }}
+
+
+
{{ $t('message.PortQuery.manifoldSCMMax') }}:
+
{{ chooseBerth.manifoldSCMMax }}
+
+
+
{{ $t('message.PortQuery.manifoldSCMMin') }}:
+
{{ chooseBerth.manifoldSCMMin }}
+
+
+
{{ $t('message.PortQuery.manifoldHeightMax') }}:
+
{{ chooseBerth.manifoldHeightMax }}
+
+
+
{{ $t('message.PortQuery.manifoldHeightMin') }}:
+
{{ chooseBerth.manifoldHeightMin }}
+
+
+
{{ $t('message.PortQuery.derrickSWLMin') }}:
+
{{ chooseBerth.derrickSWLMin }}
+
+
+
{{ $t('message.PortQuery.wLMastheadHeightMax') }}:
+
{{ chooseBerth.wLMastheadHeightMax }}
+
+
+
{{ $t('message.PortQuery.manifoldPBLMinFwd') }}:
+
{{ chooseBerth.manifoldPBLMinFwd }}
+
+
+
{{ $t('message.PortQuery.manifoldPBLMinAft') }}:
+
{{ chooseBerth.manifoldPblMinAft }}
+
+
+
{{ $t('message.PortQuery.manifoldUsed') }}:
+
{{ chooseBerth.manifoldUsed }}
+
+
+
{{ $t('message.PortQuery.roRo') }}:
+
{{ chooseBerth.roRo }}
+
+
+
{{ $t('message.PortQuery.passengerType') }}:
+
{{ chooseBerth.passenger }}
+
+
+
{{ $t('message.PortQuery.rampWidth') }}:
+
{{ chooseBerth.rampWidth }}
+
+
+
{{ $t('message.PortQuery.rampSWL') }}:
+
{{ chooseBerth.rampSwl }}
+
+
+
{{ $t('message.PortQuery.breakBulk') }}:
+
{{ chooseBerth.breakbulk }}
+
+
+
{{ $t('message.PortQuery.naval') }}:
+
{{ chooseBerth.naval }}
+
+
+
{{ $t('message.PortQuery.coastal') }}:
+
{{ chooseBerth.coastal }}
+
+
+
{{ $t('message.PortQuery.timberProducts') }}:
+
{{ chooseBerth.timberProducts }}
+
+
+
{{ $t('message.PortQuery.fishing') }}:
+
{{ chooseBerth.fishing }}
+
+
+
{{ $t('message.PortQuery.container') }}:
+
{{ chooseBerth.container }}
+
+
+
{{ $t('message.PortQuery.transhipment') }}:
+
{{ chooseBerth.transhipment }}
+
+
+
{{ $t('message.PortQuery.offshore') }}:
+
{{ chooseBerth.offshore }}
+
+
+
{{ $t('message.PortQuery.projectHeavy') }}:
+
{{ chooseBerth.projectHeavy }}
+
+
+
{{ $t('message.PortQuery.steelProducts') }}:
+
{{ chooseBerth.steelProducts }}
+
+
+
{{ $t('message.PortQuery.twinSpan') }}:
+
{{ chooseBerth.twinSpan }}
+
+
+
{{ $t('message.PortQuery.cranesNote') }}:
+
{{ chooseBerth.localTime }}
+
+
+
{{ $t('message.PortQuery.allWeatherBerth') }}:
+
{{ chooseBerth.allWeatherBerth }}
+
+
+
{{ $t('message.PortQuery.coldIroning') }}:
+
{{ chooseBerth.coldIroning }}
+
+
+
{{ $t('message.PortQuery.sideAlongside') }}:
+
{{ chooseBerth.sideAlongside }}
+
+
+
{{ $t('message.PortQuery.bunkersHFO') }}:
+
{{ chooseBerth.bunkersHfo }}
+
+
+
{{ $t('message.PortQuery.deliveryHFO') }}:
+
{{ chooseBerth.deliveryHfo }}
+
+
+
{{ $t('message.PortQuery.gangwayUsed') }}:
+
{{ chooseBerth.gangwayUsed }}
+
+
+
{{ $t('message.PortQuery.bunkersDOGO') }}:
+
{{ chooseBerth.bunkersDoGOo }}
+
+
+
{{ $t('message.PortQuery.mooringsFwd') }}:
+
{{ chooseBerth.mooringsFwd }}
+
+
+
{{ $t('message.PortQuery.mooringsAft') }}:
+
{{ chooseBerth.mooringsAft }}
+
+
+
{{ $t('message.PortQuery.bunkersLNG') }}:
+
{{ chooseBerth.bunkersLng }}
+
+
+
{{ $t('message.PortQuery.deliveryLNG') }}:
+
{{ chooseBerth.deliveryLng }}
+
+
+
{{ $t('message.PortQuery.freshWater') }}:
+
{{ chooseBerth.freshWater }}
+
+
+
{{ $t('message.PortQuery.deliveryFW') }}:
+
{{ chooseBerth.deliveryFw }}
+
+
+
{{ $t('message.PortQuery.cow') }}:
+
{{ chooseBerth.cow }}
+
+
+
{{ $t('message.PortQuery.berthAdditionalInfo') }}:
+
{{ chooseBerth.berthAdditionalInfo }}
+
+
+
{{ $t('message.PortQuery.reefer') }}:
+
{{ chooseBerth.reefer }}
+
+
+
{{ $t('message.PortQuery.waterLineHeightHWMaxDecimal') }}:
+
{{ chooseBerth.waterLineHeightHwMaxDecimal }}
+
+
+
{{ $t('message.PortQuery.dryBulkCargo') }}:
+
{{ chooseBerth.dryBulkCargo }}
+
+
+
+
+
+
+
+ {{ $t('message.PortQuery.temperature') }}:
+ {{ weather && weather.temp ? weather.temp : '--' }}
+
+
+ {{ $t('message.PortQuery.windSpeed') }}:
+
+ {{ weather && weather.windSpeed ? `${weather.windSpeed.toFixed(1)}` + `m/s` : '--' }}
+
+
+
+ {{ $t('message.PortQuery.waveHeight') }}:
+
+ {{ weather && weather.seaWaveHeight ? weather.seaWaveHeight.toFixed(1) + 'm' : '--' }}
+
+
+
+ {{ $t('message.PortQuery.rush') }}:
+ {{
+ weather && weather.seaSwellDirection ? weather.seaSwellDirection.toFixed(1) + '°' : '--'
+ }}
+
+
+
+
+ {{ $t('message.PortQuery.windDirection') }}:
+ {{ weather && weather.windDirection ? weather.windDirection : '--' }}
+
+
+ {{ $t('message.PortQuery.surgeHeight') }}:
+
+ {{ weather && weather.seaSwellHeight ? weather.seaSwellHeight.toFixed(1) + 'm' : '--' }}
+
+
+
+ {{ $t('message.PortQuery.visibility') }}:
+
+ {{ weather && weather.visibility ? parseInt(weather.visibility) + 'km' : '--' }}
+
+
+
+
+
+
+
+ {{ $t('message.PortQuery.day') }}
+ {{ $t('message.PortQuery.week') }}
+ {{ $t('message.PortQuery.month') }}
+
+
+ {{ $t('message.PortQuery.mao') }}
+ {{ $t('message.PortQuery.berth') }}
+ {{ $t('message.PortQuery.port') }}
+ {{ $t('message.PortQuery.maoTime') }}
+ {{ $t('message.PortQuery.doTime') }}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/on-map-view/RouteQuery.vue b/src/views/on-map-view/RouteQuery.vue
new file mode 100644
index 0000000..fffb967
--- /dev/null
+++ b/src/views/on-map-view/RouteQuery.vue
@@ -0,0 +1,759 @@
+
+
+
+
+ {{
+ $t('message.routeQuery.portToPort')
+ }}
+
+ {{ $t('message.routeQuery.pointToPoint') }}
+
+
+
+
+
+
+
+
+
+
+
+ handleSelect(event,item)"
+ :placeholder="getPlaceholder(index)"
+ :trigger-on-focus="false"
+ :value-key="language === 'zh'? 'tempName' : 'nameEn'"
+ clearable
+ v-model="item.name"
+ class="port-name-input">
+
+
+
+
+
+ {{
+ language === 'zh' ? item.nameChs : item.nameEn
+ }}({{ language === 'zh' ? item.countryChs : item.countryEn }})
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('message.routeQuery.search') }}
+
+
+
+
+
+
+
+
+
+ {{$t('message.routeQuery.pol')}}:{{ subStringLen(startPort.name) }}
+
+
+
+
+ {{$t('message.routeQuery.pod')}}:{{ subStringLen(endPort.name) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
{{
+ language === 'zh' ? item.vesselTypeNameCn : item.vesselTypeNameEn
+ }}
+
+ {{ getKong(item.isFullLoad) }}
+
+
+
+
+
+
+
+ {{ item.legStartPostime }}
+
+
+
+
+
+
+ {{ $t('message.routeQuery.duration') }}
+ : {{
+ getLetTime(item.legStartPostime, item.legEndPostime)
+ }}
+
+
+
+
+
+
+ {{ $t('message.routeQuery.mileage') }}:
+ {{
+ item.sailDistance
+ }}nm
+
+
+
+
+
+
+ {{ $t('message.routeQuery.averageSpeed') }}:
+
+ kn
+
+
+
+
+
+
+
{{ language === 'zh' ? item2.nameCn : item2.nameEn }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/on-map-view/RouteYc.vue b/src/views/on-map-view/RouteYc.vue
new file mode 100644
index 0000000..086b9d3
--- /dev/null
+++ b/src/views/on-map-view/RouteYc.vue
@@ -0,0 +1,169 @@
+
+
+
+
{{$t('message.routeCalculate.destination')}}
+
+
+
+
+
+
+
{{$t('message.routeCalculate.speed')}}
+
+
+
+
+ {{this.$t('message.routeCalculate.search')}}
+
+
+
{{$t('message.routeCalculate.rd')}}: {{ ycResult && ycResult.restDistance }}
+
{{$t('message.routeCalculate.td')}}: {{ ycResult && ycResult.pastDistance }}
+
{{$t('message.routeCalculate.remainder')}}: {{ ycResult && ycResult.restTime }}
+
{{$t('message.routeCalculate.tt')}}: {{ ycResult && ycResult.sailTime }}
+
+
+
+
+
+
+
diff --git a/src/views/on-map-view/SearchList.vue b/src/views/on-map-view/SearchList.vue
new file mode 100644
index 0000000..76d760d
--- /dev/null
+++ b/src/views/on-map-view/SearchList.vue
@@ -0,0 +1,178 @@
+
+
+
+
+
+
+
+
+
+
+
+ {{ language === 'zh' ? filterShipType(scope.row.shiptype) : filterShipType(scope.row.shiptype, true) }}
+
+
+
+ {{ scope.row.length }}m
+
+
+
+
+
+
+
+ {{ scope.row.draught / 10 }}m
+
+
+ {{ scope.row.sog / 10 }}节
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/on-map-view/ShipEvent.vue b/src/views/on-map-view/ShipEvent.vue
new file mode 100644
index 0000000..0d860b6
--- /dev/null
+++ b/src/views/on-map-view/ShipEvent.vue
@@ -0,0 +1,203 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ formatTime(scope.row.posTime * 1000) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/on-map-view/ShipInBerth.vue b/src/views/on-map-view/ShipInBerth.vue
new file mode 100644
index 0000000..63f0ab4
--- /dev/null
+++ b/src/views/on-map-view/ShipInBerth.vue
@@ -0,0 +1,163 @@
+
+
+
+
+
+ {{ scope.row.shipnameEn }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.moorDuration + 'h' }}
+
+
+
+
+ {{ language === 'zh' ? filterShipType(scope.row.shiptype) : filterShipType(scope.row.shiptype, true) }}
+
+
+
+
+ {{ Number(scope.row.draught / 10) + 'm' }}
+
+
+
+
+
+
+ {{ formData(scope.row.eta) }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/on-map-view/ShipInfo.vue b/src/views/on-map-view/ShipInfo.vue
new file mode 100644
index 0000000..8d3443b
--- /dev/null
+++ b/src/views/on-map-view/ShipInfo.vue
@@ -0,0 +1,1214 @@
+
+
+
+
+
+
+ {{ $t('message.shipInfo.mmsi') }}
+ {{ shipData.mmsi }}
+
+ {{ $t('message.shipInfo.shipHeading') }}
+ {{ shipData.heading }} °
+
+
+
+ {{ $t('message.shipInfo.callsign') }}
+ {{ shipData.callsign }}
+
+ {{ $t('message.shipInfo.shipCoursing') }}
+ {{ shipData.cog / 10 }} °
+
+
+
+ {{ $t('message.shipInfo.imo') }}
+ {{ shipData.imo }}
+
+ {{ $t('message.shipInfo.speed') }}
+ {{ shipData.sog / 10 }} Kn
+
+
+
+ {{ $t('message.shipInfo.vesselType') }}
+
+
+ {{ language === 'zh' ? filterShipType(shipData.shiptype) : filterShipType(shipData.shiptype, true) }}
+
+
+
+ {{ $t('message.shipInfo.lat') }}
+ {{ filterLat(shipData.lat) }}
+
+
+
+ {{ $t('message.shipInfo.status') }}
+
+
+ {{
+ language === 'zh' ? filterShipStatus(shipData.aisNavStatus) : filterShipStatus(shipData.aisNavStatus, true)
+ }}
+
+
+
+ {{ $t('message.shipInfo.lon') }}
+
+ {{ filterLon(shipData.lon) }}
+
+
+
+
+ {{ $t('message.shipInfo.shipLength') }}
+ {{ shipData.length }} m
+
+ {{ $t('message.shipInfo.destination') }}
+
+ {{ shipData.destPort }}
+ {{ shipData.destPort }}
+
+
+
+
+ {{ $t('message.shipInfo.breadth') }}
+ {{ shipData.breadth }} m
+
+ {{ $t('message.shipInfo.eta') }}
+
+
{{ formatDate(shipData.eta, 'yyyy-MM-dd hh:mm:ss') }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('message.shipInfo.draught') }}
+ {{ shipData.draught / 10 }} m
+
+
+ {{ $t('message.shipInfo.lastUpdated') }}
+ {{ formatDate(shipData.posTime, 'yyyy-MM-dd hh:mm:ss') }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ voy.depart ? subName(voy.depart) : '未知' }}
+
+
+
{{ voy.departTime ? dateDataFormat(voy.departTime) : '' }}
+
+
+
+
+
+
+
+ {{ $t('message.shipInfo.onTheWay') }}
+ {{ $t('message.shipInfo.arrival') }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ voy.arrival ? subName(voy.arrival) : '未知' }}
+
+
+
{{ voy.arrivalTime ? dateDataFormat(voy.arrivalTime) : '' }}
+
+
+
+
+
+
+ {{ $t('message.shipInfo.noHc') }}
+
+
+
+
+
+
+
+
+ {{
+ $t('message.shipInfo.shipName')
+ }}:
+
+ {{
+ shipDoc && shipDoc.basicShipInfo && shipDoc.basicShipInfo.shipName ? shipDoc.basicShipInfo.shipName : '******'
+ }}
+
+
+
+ {{
+ $t('message.shipInfo.ExName')
+ }}:
+
+
+ {{
+ shipDoc && shipDoc.basicShipInfo && shipDoc.basicShipInfo.exName ? shipDoc.basicShipInfo.exName : '******'
+ }}
+
+
+
+
+
+
+ {{ $t('message.shipInfo.FlagName') }}:
+
+
+
+ {{
+ shipDoc && shipDoc.basicShipInfo && shipDoc.basicShipInfo.flagName ?
+ shipDoc.basicShipInfo.flagName : '******'
+ }}
+
+
+
+
+ {{
+ $t('message.shipInfo.DateOfBuild')
+ }}:
+
+ {{
+ shipDoc && shipDoc.basicShipInfo && shipDoc.basicShipInfo.dateOfBuild ? shipDoc.basicShipInfo.dateOfBuild : '******'
+ }}
+
+
+
+
+
+
+ {{
+ $t('message.shipInfo.mmsi')
+ }}:
+
+
+
+ {{
+ shipDoc && shipDoc.basicShipInfo && shipDoc.basicShipInfo.mmsi ?
+ shipDoc.basicShipInfo.mmsi : '******'
+ }}
+
+
+
+
+ {{
+ $t('message.shipInfo.imo')
+ }}:
+
+
+ {{
+ shipDoc && shipDoc.basicShipInfo && shipDoc.basicShipInfo.imo ?
+ shipDoc.basicShipInfo.imo : '******'
+ }}
+
+
+
+
+
+
+
+ {{
+ $t('message.shipInfo.callsign')
+ }}:
+
+
+ {{
+ shipDoc && shipDoc.basicShipInfo && shipDoc.basicShipInfo.callsign ?
+ shipDoc.basicShipInfo.callsign : '******'
+ }}
+
+
+
+
+
+
+ {{ $t('message.shipInfo.shiptypeLevel3') }}:
+
+
+
+ {{
+ shipDoc && shipDoc.basicShipInfo && shipDoc.basicShipInfo.shipTypeLevel3 ?
+ shipDoc.basicShipInfo.shipTypeLevel3 : '******'
+ }}
+
+
+
+
+
+
+ {{
+ $t('message.shipInfo.Length')
+ }}:
+
+
+ {{
+ shipDoc && shipDoc.basicShipInfo && shipDoc.basicShipInfo.lengthOverallLoa ?
+ shipDoc.basicShipInfo.lengthOverallLoa + 'm' : '******'
+ }}
+
+
+
+
+ {{
+ $t('message.shipInfo.breadth')
+ }}:
+
+ {{
+ shipDoc && shipDoc.basicShipInfo && shipDoc.basicShipInfo.breadthMoulded ?
+ shipDoc.basicShipInfo.breadthMoulded + 'm' : '******'
+ }}
+
+
+
+
+
+
+
+ {{
+ $t('message.shipInfo.Depth')
+ }}:
+
+
+ {{
+ shipDoc && shipDoc.basicShipInfo && shipDoc.basicShipInfo.depth ?
+ shipDoc.basicShipInfo.depth + 'm' : '******'
+ }}
+
+
+
+
+
+ {{ $t('message.shipInfo.draught') }}:
+
+
+
+ {{
+ shipDoc && shipDoc.basicShipInfo && shipDoc.basicShipInfo.draught ?
+ shipDoc.basicShipInfo.draught + 'm' : '******'
+ }}
+
+
+
+
+
+
+
+ {{ $t('message.shipInfo.GrossTonnage') }}:
+
+
+
+ {{
+ shipDoc && shipDoc.basicShipInfo && shipDoc.basicShipInfo.grossTonnage ?
+ shipDoc.basicShipInfo.grossTonnage : '******'
+ }}
+
+
+
+
+
+ {{ $t('message.shipInfo.NetTonnage') }}:
+
+
+
+ {{
+ shipDoc && shipDoc.basicShipInfo && shipDoc.basicShipInfo.netTonnage ?
+ shipDoc.basicShipInfo.netTonnage : '******'
+ }}
+
+
+
+
+
+
+
+ {{ $t('message.shipInfo.Deadweight') }}:
+
+
+
+ {{
+ shipDoc && shipDoc.basicShipInfo && shipDoc.basicShipInfo.deadWeight ?
+ shipDoc.basicShipInfo.deadWeight : '******'
+ }}
+
+
+
+
+
+
+ {{ $t('message.shipInfo.speedService') }}:
+
+
+
+ {{
+ shipDoc && shipDoc.basicShipInfo && shipDoc.basicShipInfo.speedService ?
+ shipDoc.basicShipInfo.speedService + 'Knots' : '******'
+ }}
+
+
+
+
+
+
+ {{
+ $t('message.shipInfo.mainEngineModel')
+ }}:
+
+
+ {{
+ shipDoc && shipDoc.shipInfo && shipDoc.shipInfo.mainEngineModel ?
+ shipDoc.shipInfo.mainEngineModel : '******'
+ }}
+
+
+
+
+
+ {{ $t('message.shipInfo.mainEngineType') }}:
+
+
+
+ {{
+ shipDoc && shipDoc.shipInfo && shipDoc.shipInfo.mainEngineType ?
+ shipDoc.shipInfo.mainEngineType : '******'
+ }}
+
+
+
+
+
+
+ {{
+ $t('message.shipInfo.fuelType1First')
+ }}:
+
+
+ {{
+ shipDoc && shipDoc.cabinInfo && shipDoc.cabinInfo.fuelType1First ?
+ shipDoc.cabinInfo.fuelType1First : '******'
+ }}
+
+
+
+
+ {{
+ $t('message.shipInfo.fuelType1Capacity')
+ }}:
+
+
+ {{
+ shipDoc && shipDoc.cabinInfo && shipDoc.cabinInfo.fuelType1Capacity ?
+ shipDoc.cabinInfo.fuelType1Capacity : '******'
+ }}
+
+
+
+
+
+
+ {{
+ $t('message.shipInfo.groupBeneficialOwner')
+ }}:
+
+
+ {{
+ shipDoc && shipDoc.companyInfo && shipDoc.companyInfo.groupBeneficialOwner ?
+ shipDoc.companyInfo.groupBeneficialOwner : '******'
+ }}
+
+
+
+
+ {{
+ $t('message.shipInfo.operator')
+ }}:
+
+
+ {{
+ shipDoc && shipDoc.companyInfo && shipDoc.companyInfo.operator ?
+ shipDoc.companyInfo.operator : '******'
+ }}
+
+
+
+
+ {{
+ $t('message.shipInfo.registeredOwner')
+ }}:
+
+
+ {{
+ shipDoc && shipDoc.companyInfo && shipDoc.companyInfo.registeredOwner ?
+ shipDoc.companyInfo.registeredOwner : '******'
+ }}
+
+
+
+
+ {{
+ $t('message.shipInfo.docCompany')
+ }}:
+
+
+ {{
+ shipDoc && shipDoc.companyInfo && shipDoc.companyInfo.docCompany ?
+ shipDoc.companyInfo.docCompany : '******'
+ }}
+
+
+
+
+
+ {{
+ $t('message.shipInfo.cargoCapacitiesNarrative')
+ }}:
+
+
+ {{
+ shipDoc && shipDoc.cabinInfo && shipDoc.cabinInfo.cargoCapacitiesNarrative ?
+ shipDoc.cabinInfo.cargoCapacitiesNarrative : '******'
+ }}
+
+
+
+
+
+
+
+
+ {{ $t('message.shipInfo.sailAreaName') }} {{
+ innerData.sailAreaName
+ }}
+
+
+ {{ $t('message.shipInfo.imo') }} {{ innerData.shipImo }}
+
+
+
+
+ {{ $t('message.shipInfo.shipName') }} {{ innerData.shipName }}
+
+
+ {{ $t('message.shipInfo.shipNameEn') }} {{
+ innerData.shipNameEn
+ }}
+
+
+
+ {{ $t('message.shipInfo.shipGrosston') }} {{
+ innerData.shipGrosston
+ }}
+
+ {{
+ $t('message.shipInfo.shipType')
+ }} {{ innerData.shipType }}
+
+
+
+ {{
+ $t('message.shipInfo.shipEnginePower')
+ }} {{ innerData.shipEnginePower }}
+
+
+ {{ $t('message.shipInfo.shipPassengerNum') }} {{
+ innerData.shipPassengerNum
+ }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/on-map-view/ShipRanks.vue b/src/views/on-map-view/ShipRanks.vue
new file mode 100644
index 0000000..eda485c
--- /dev/null
+++ b/src/views/on-map-view/ShipRanks.vue
@@ -0,0 +1,393 @@
+
+
+
+
+
+
+
+
+
+
+
+ {{ language === 'zh' ? filterShipType(scope.row.shiptype) : filterShipType(scope.row.shiptype, true) }}
+
+
+
+ {{ scope.row.length }}m
+
+
+
+
+
+
+
+ {{ scope.row.draught / 10 }}m
+
+
+ {{ scope.row.sog / 10 }}kn
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/on-map-view/TrackRecord.vue b/src/views/on-map-view/TrackRecord.vue
new file mode 100644
index 0000000..50a579e
--- /dev/null
+++ b/src/views/on-map-view/TrackRecord.vue
@@ -0,0 +1,432 @@
+
+
+
+
+ 7天
+ 一个月
+ 3个月
+ 12个月
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+ {{ $t('message.trackRecord.history') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('message.trackRecord.delete') }}
+
+
+
+
+ {{ $t('message.trackRecord.delete') }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/on-map-view/TrackRecordLog.vue b/src/views/on-map-view/TrackRecordLog.vue
new file mode 100644
index 0000000..d1c9723
--- /dev/null
+++ b/src/views/on-map-view/TrackRecordLog.vue
@@ -0,0 +1,186 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('message.trackRecord.delete') }}
+
+
+
+
+ {{ $t('message.trackRecord.delete') }}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/on-map-view/Weather.vue b/src/views/on-map-view/Weather.vue
new file mode 100644
index 0000000..d7c5d2a
--- /dev/null
+++ b/src/views/on-map-view/Weather.vue
@@ -0,0 +1,456 @@
+
+
+
+
+
+
+
+ {{ $t('message.weather.temperature') }}
+
+ {{ $t('message.weather.airPressure') }}
+
+ {{ $t('message.weather.wind') }}
+
+ {{ $t('message.weather.current') }}
+
+ {{ $t('message.weather.typhoon') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('message.weather.view') }}
+
+ {{ $t('message.weather.close') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/on-map-view/WeatherImage.vue b/src/views/on-map-view/WeatherImage.vue
new file mode 100644
index 0000000..0383376
--- /dev/null
+++ b/src/views/on-map-view/WeatherImage.vue
@@ -0,0 +1,205 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ language === 'en' ? 'Seven Level Wind Circle' : '七级风圈' }}
+
+
+
+
+
+ {{ language === 'en' ? 'Ten Level Wind Circle' : '十级风圈' }}
+
+
+
+
+
+ {{ language === 'en' ? 'Actual Route' : '实际路径' }}
+
+
+
+
+
+ {{ language === 'en' ? 'Predicting Route' : '预测路径' }}
+
+
+
+
+
+ {{ language === 'en' ? '24H Warning Line' : '24小时警戒线' }}
+
+
+
+
+
+ {{ language === 'en' ? '48H Warning Line' : '48小时警戒线' }}
+
+
+
+
+
+
+
+
+
+
diff --git a/tsconfig.json b/tsconfig.json
new file mode 100644
index 0000000..72c0cb5
--- /dev/null
+++ b/tsconfig.json
@@ -0,0 +1,42 @@
+{
+ "compilerOptions": {
+ "target": "es5",
+ "module": "esnext",
+ "strict": true,
+ "jsx": "preserve",
+ "importHelpers": true,
+ "moduleResolution": "node",
+ "experimentalDecorators": true,
+ "skipLibCheck": true,
+ "esModuleInterop": true,
+ "allowSyntheticDefaultImports": true,
+ "forceConsistentCasingInFileNames": true,
+ "useDefineForClassFields": true,
+ "sourceMap": true,
+ "baseUrl": ".",
+ "types": [
+ "webpack-env"
+ ],
+ "paths": {
+ "@/*": [
+ "src/*"
+ ]
+ },
+ "lib": [
+ "esnext",
+ "dom",
+ "dom.iterable",
+ "scripthost"
+ ]
+ },
+ "include": [
+ "src/**/*.ts",
+ "src/**/*.tsx",
+ "src/**/*.vue",
+ "tests/**/*.ts",
+ "tests/**/*.tsx"
+ ],
+ "exclude": [
+ "node_modules"
+ ],
+}
diff --git a/vue.config.js b/vue.config.js
new file mode 100644
index 0000000..ea88310
--- /dev/null
+++ b/vue.config.js
@@ -0,0 +1,50 @@
+const path = require('path')
+const webpack = require('webpack')
+const config = require('./public/config/sys-config.json')
+const name = config.projectName ? '^/' + config.projectName + '/myships' : '^/myships'
+
+function resolve(dir) {
+ return path.join(__dirname, dir)
+}
+
+module.exports = {
+ publicPath: `${config.projectName ? '/' + config.projectName : '/'}`,
+ devServer: {
+ proxy: {
+ '/zero2/myships': {
+ target: 'https://api3.myships.com/',
+ changOrigin: true,
+ pathRewrite: {
+ [name]: ''
+ }
+ } ,
+ '/zero2/car': {
+ target: 'http://36.33.24.30:5005/',
+ changOrigin: true,
+ pathRewrite: {
+ '/zero2/car': ''
+ }
+ },
+ '/zeroi/free': {
+ target: 'http://36.101.208.185:15380/',
+ changOrigin: true,
+ pathRewrite: {
+ '/zeroi/free': ''
+ }
+ }
+ }
+ },
+ configureWebpack: {
+ plugins: [
+ new webpack.ProvidePlugin({
+ $: 'jquery',
+ jQuery: 'jquery',
+ 'windows.jQuery': 'jquery'
+ })
+ ]
+ },
+ chainWebpack: (config) => {
+ config.resolve.alias.set('@', resolve('./src'))
+ config.resolve.extensions.add('.js').add('.vue').add('.ts').add('.json')
+ }
+}