From f74222e571d9164a59e01194f35ff1e34f10a423 Mon Sep 17 00:00:00 2001 From: quanyawei <401863037@qq.com> Date: Fri, 15 Dec 2023 17:12:33 +0800 Subject: [PATCH] fix:热力图播放 --- src/views/hotMap/components/img/icon-pause.png | 0 src/views/toCarryOutLegislativeReforms/components/locationMap.vue | 119 +++ src/views/hotMap/components/colorList.json | 0 package-lock.json | 555 ++++++++++++++ public/index.html | 125 +- src/views/hotMap/index.vue | 445 ++++++++++++ .vscode/settings.json | 4 src/views/hotMap/components/img/round.png | 0 src/router/dynamicRouter.js | 12 src/views/toCarryOutLegislativeReforms/reform/index.vue | 26 src/assets/images/pointMap.png | 0 src/views/hotMap/components/timeLinePlay.vue | 347 +++++++++ .eslintrc.js | 60 - src/main.js | 88 +- src/components/Cascader/regionCity.vue | 35 package.json | 7 src/views/hotMap/components/formatdate.js | 127 +++ cmsdist/index.html | 4 src/views/hotMap/components/img/icon-play.png | 0 src/views/hotMap/components/selectHour.vue | 102 ++ 20 files changed, 1,874 insertions(+), 182 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index 853e4dd..752d712 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -3,7 +3,7 @@ browser: true, es2021: true }, - extends: ['eslint:recommended', 'standard'], + extends: ['standard', 'plugin:vue/recommended'], overrides: [ { env: { @@ -16,48 +16,28 @@ } ], parserOptions: { - ecmaVersion: '12', - sourceType: 'module' + ecmaVersion: 2021, + sourceType: 'module', + parser: 'babel-eslint', + ecmaFeatures: { + // ��� react ������������ jsx ������������,��������� true + jsx: false + } + }, + globals: { + AMap: true, + AMapUI: true }, plugins: ['vue'], rules: { - eqeqeq: ['error', 'always'], // ��������������������������� - semi: 2, // ��������������������������������� - 'no-use-before-define': [1, 'nofunc'], // ������������������������ - 'max-lines': ['error', { max: 2000, skipBlankLines: true }], - 'no-mixed-spaces-and-tabs': 'warn', // ���������������������tab������������ - 'newline-per-chained-call': ['error', { ignoreChainWithDepth: 1 }], // promise ������ ��������������������������������������� - 'vue/attribute-hyphenation': ['error', 'always'], // prop������������������������������������������������������������������������������������prop��������������������������������������� - 'vue/html-indent': [ - 'warn', - 2, - { - attribute: 1, - baseIndent: 1, - closeBracket: 0, - alignAttributesVertically: true - } - ], - curly: 2, // ������������ if(){} ������{} - 'vue/prop-name-casing': ['warn', 'camelCase'], //������������������������ - 'vue/this-in-template': ['error', 'never'], //������������template������������this - 'no-trailing-spaces': 1, //��������������������������������� - 'vue/max-attributes-per-line': [ - // template���������������������������prop������,������3������������3���������������������������prop��������������������� - 'warn', - { - singleline: 3, - multiline: { - max: 1, - allowFirstLine: false - } - } - ], - 'no-catch-shadow': 'error', //������catch������������������������������������������ - 'vue/v-bind-style': ['error', 'shorthand'], // ������������:��������� - 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off', // ���������������������������������debugger 'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off', - 'no-unused-vars': 0, // ��������������������������������� - 'spaced-comment': 0 // ������������������ // ��� /* ��������������������� + 'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off', + camelcase: 'off', + 'comma-dangle': 'off', + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/camelcase': 'off', + '@typescript-eslint/no-empty-function': 'off', + 'lines-between-class-members': 'off', + '@typescript-eslint/no-this-alias': 'off' } } diff --git a/.vscode/settings.json b/.vscode/settings.json index 59d224c..022f2c6 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -4,7 +4,7 @@ // -------------------- ������eslint -------------------- //autoFixedOnSave ���������������������������������������������������(>1.41.0)������ "editor.codeActionsOnSave": { - "source.fixAll.eslint": true + "source.fixAll.eslint": "explicit" }, "eslint.format.enable": true, //autoFix������������������������������������������������ @@ -38,7 +38,7 @@ // -------------------- vetur ������ -------------------- // vue������������������������������vetur "[vue]": { - "editor.defaultFormatter": "octref.vetur" + "editor.defaultFormatter": "dbaeumer.vscode-eslint" }, // ��������������������������������� "vetur.format.defaultFormatter.html": "js-beautify-html", diff --git a/cmsdist/index.html b/cmsdist/index.html index 195d728..e56cb39 100644 --- a/cmsdist/index.html +++ b/cmsdist/index.html @@ -1,4 +1,4 @@ -<!DOCTYPE html><html><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge,chrome=1"><meta name=viewport content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no"><link rel=icon href=/LOGO.ico><script src="https://webapi.amap.com/maps?v=1.4.15&key=be57d4add7dc10fb7f7924763a2179ae&plugin=AMap.MarkerClusterer"></script><script src="https://webapi.amap.com/loca?v=1.3.2&key=be57d4add7dc10fb7f7924763a2179ae&plugin=AMap.MarkerClusterer"></script><script src="http://api.map.baidu.com/api?type=webgl&v=2.0&ak=U2SoSp52BoVW6bAEMsxQ7Zfe0tuB6VDp"></script><script src="http://api.map.baidu.com/api?v=3.0&ak=U2SoSp52BoVW6bAEMsxQ7Zfe0tuB6VDp"></script><script src=https://mapv.baidu.com/build/mapv.min.js></script><script src=https://mapv.baidu.com/gl/examples/static/common.js></script><script src="https://cdn.jsdelivr.net/npm/echarts/map/js/china.js?v=1598903772045"></script><script src=https://code.bdstatic.com/npm/mapvgl@1.0.0-beta.97/dist/mapvgl.min.js></script><title>������������������������</title><style>body { +<!DOCTYPE html><html><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge,chrome=1"><meta name=viewport content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no"><link rel=icon href=/LOGO.ico><script src="https://webapi.amap.com/maps?v=1.4.15&key=c4e73f2c6972766d6a54dffd2f501cac&plugin=AMap.MarkerClusterer"></script><script src="https://webapi.amap.com/loca?v=1.3.2&key=be57d4add7dc10fb7f7924763a2179ae&plugin=AMap.MarkerClusterer"></script><script src="http://api.map.baidu.com/api?type=webgl&v=2.0&ak=U2SoSp52BoVW6bAEMsxQ7Zfe0tuB6VDp"></script><script src="http://api.map.baidu.com/api?v=3.0&ak=U2SoSp52BoVW6bAEMsxQ7Zfe0tuB6VDp"></script><script src=https://mapv.baidu.com/build/mapv.min.js></script><script src=https://mapv.baidu.com/gl/examples/static/common.js></script><script src="https://cdn.jsdelivr.net/npm/echarts/map/js/china.js?v=1598903772045"></script><script src=https://code.bdstatic.com/npm/mapvgl@1.0.0-beta.97/dist/mapvgl.min.js></script><title>������������������������</title><style>body { margin: 0px; padding: 0px; height: 100%; @@ -16,4 +16,4 @@ docEl.style.fontSize = docEl.clientWidth / 100 + 'px'; }; window.addEventListener(resizeEvt, recalc, false); - document.addEventListener('DOMContentLoaded', recalc, false);</script></html> \ No newline at end of file + document.addEventListener('DOMContentLoaded', recalc, false);</script></html> diff --git a/package-lock.json b/package-lock.json index 39b2c00..fef7c7d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1013,6 +1013,26 @@ "to-fast-properties": "^2.0.0" } }, + "@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmmirror.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "requires": { + "eslint-visitor-keys": "^3.3.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==" + } + } + }, + "@eslint-community/regexpp": { + "version": "4.10.0", + "resolved": "https://registry.npmmirror.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==" + }, "@eslint/eslintrc": { "version": "0.4.3", "resolved": "https://registry.npmmirror.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", @@ -1310,11 +1330,36 @@ } } }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "dependencies": { + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" + } + } + }, "@nodelib/fs.stat": { "version": "1.1.3", "resolved": "https://registry.npm.taobao.org/@nodelib/fs.stat/download/@nodelib/fs.stat-1.1.3.tgz?cache=0&sync_timestamp=1609074523193&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40nodelib%2Ffs.stat%2Fdownload%2F%40nodelib%2Ffs.stat-1.1.3.tgz", "integrity": "sha1-K1o6s/kYzKSKjHVMCBaOPwPrphs=", "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } }, "@pawelgalazka/cli": { "version": "2.0.3", @@ -1449,6 +1494,11 @@ "integrity": "sha1-FZJUFOCtLNdlv+9YhC9+JqesyyQ=", "dev": true }, + "@types/semver": { + "version": "7.5.6", + "resolved": "https://registry.npmmirror.com/@types/semver/-/semver-7.5.6.tgz", + "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==" + }, "@types/stack-utils": { "version": "1.0.1", "resolved": "https://registry.npm.taobao.org/@types/stack-utils/download/@types/stack-utils-1.0.1.tgz", @@ -1481,6 +1531,331 @@ "resolved": "https://registry.npm.taobao.org/@types/yargs-parser/download/@types/yargs-parser-20.2.0.tgz", "integrity": "sha1-3T5mmboyN/A0jNCF5GmHgCBIQvk=", "dev": true + }, + "@typescript-eslint/eslint-plugin": { + "version": "6.13.2", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.13.2.tgz", + "integrity": "sha512-3+9OGAWHhk4O1LlcwLBONbdXsAhLjyCFogJY/cWy2lxdVJ2JrcTF2pTGMaLl2AE7U1l31n8Py4a8bx5DLf/0dQ==", + "requires": { + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "6.13.2", + "@typescript-eslint/type-utils": "6.13.2", + "@typescript-eslint/utils": "6.13.2", + "@typescript-eslint/visitor-keys": "6.13.2", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ignore": { + "version": "5.3.0", + "resolved": "https://registry.npmmirror.com/ignore/-/ignore-5.3.0.tgz", + "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==" + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } + }, + "@typescript-eslint/parser": { + "version": "6.13.2", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/parser/-/parser-6.13.2.tgz", + "integrity": "sha512-MUkcC+7Wt/QOGeVlM8aGGJZy1XV5YKjTpq9jK6r6/iLsGXhBVaGP5N0UYvFsu9BFlSpwY9kMretzdBH01rkRXg==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "6.13.2", + "@typescript-eslint/types": "6.13.2", + "@typescript-eslint/typescript-estree": "6.13.2", + "@typescript-eslint/visitor-keys": "6.13.2", + "debug": "^4.3.4" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + } + } + }, + "@typescript-eslint/scope-manager": { + "version": "6.13.2", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/scope-manager/-/scope-manager-6.13.2.tgz", + "integrity": "sha512-CXQA0xo7z6x13FeDYCgBkjWzNqzBn8RXaE3QVQVIUm74fWJLkJkaHmHdKStrxQllGh6Q4eUGyNpMe0b1hMkXFA==", + "requires": { + "@typescript-eslint/types": "6.13.2", + "@typescript-eslint/visitor-keys": "6.13.2" + } + }, + "@typescript-eslint/type-utils": { + "version": "6.13.2", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/type-utils/-/type-utils-6.13.2.tgz", + "integrity": "sha512-Qr6ssS1GFongzH2qfnWKkAQmMUyZSyOr0W54nZNU1MDfo+U4Mv3XveeLZzadc/yq8iYhQZHYT+eoXJqnACM1tw==", + "requires": { + "@typescript-eslint/typescript-estree": "6.13.2", + "@typescript-eslint/utils": "6.13.2", + "debug": "^4.3.4", + "ts-api-utils": "^1.0.1" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + } + } + }, + "@typescript-eslint/types": { + "version": "6.13.2", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/types/-/types-6.13.2.tgz", + "integrity": "sha512-7sxbQ+EMRubQc3wTfTsycgYpSujyVbI1xw+3UMRUcrhSy+pN09y/lWzeKDbvhoqcRbHdc+APLs/PWYi/cisLPg==" + }, + "@typescript-eslint/typescript-estree": { + "version": "6.13.2", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.13.2.tgz", + "integrity": "sha512-SuD8YLQv6WHnOEtKv8D6HZUzOub855cfPnPMKvdM/Bh1plv1f7Q/0iFUDLKKlxHcEstQnaUU4QZskgQq74t+3w==", + "requires": { + "@typescript-eslint/types": "6.13.2", + "@typescript-eslint/visitor-keys": "6.13.2", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "dependencies": { + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "requires": { + "path-type": "^4.0.0" + } + }, + "fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmmirror.com/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, + "ignore": { + "version": "5.3.0", + "resolved": "https://registry.npmmirror.com/ignore/-/ignore-5.3.0.tgz", + "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==" + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + }, + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } + }, + "@typescript-eslint/utils": { + "version": "6.13.2", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/utils/-/utils-6.13.2.tgz", + "integrity": "sha512-b9Ptq4eAZUym4idijCRzl61oPCwwREcfDI8xGk751Vhzig5fFZR9CyzDz4Sp/nxSLBYxUPyh4QdIDqWykFhNmQ==", + "requires": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "6.13.2", + "@typescript-eslint/types": "6.13.2", + "@typescript-eslint/typescript-estree": "6.13.2", + "semver": "^7.5.4" + }, + "dependencies": { + "@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } + }, + "@typescript-eslint/visitor-keys": { + "version": "6.13.2", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.13.2.tgz", + "integrity": "sha512-OGznFs0eAQXJsp+xSd6k/O1UbFi/K/L7WjqeRoFE7vadjAF9y0uppXhYNQNEqygjou782maGClOoZwPqF0Drlw==", + "requires": { + "@typescript-eslint/types": "6.13.2", + "eslint-visitor-keys": "^3.4.1" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==" + } + } }, "@vue/babel-helper-vue-jsx-merge-props": { "version": "1.2.1", @@ -1721,6 +2096,23 @@ "optional": true, "requires": { "vue-eslint-parser": "^2.0.3" + }, + "dependencies": { + "vue-eslint-parser": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/vue-eslint-parser/-/vue-eslint-parser-2.0.3.tgz", + "integrity": "sha512-ZezcU71Owm84xVF6gfurBQUGg8WQ+WZGxgDEQu1IHFBZNx7BFZg3L1yHxrCBNNwbwFtE1GuvfJKMtb6Xuwc/Bw==", + "dev": true, + "optional": true, + "requires": { + "debug": "^3.1.0", + "eslint-scope": "^3.7.1", + "eslint-visitor-keys": "^1.0.0", + "espree": "^3.5.2", + "esquery": "^1.0.0", + "lodash": "^4.17.4" + } + } } }, "eslint-scope": { @@ -3797,8 +4189,8 @@ }, "babel-eslint": { "version": "10.0.1", - "resolved": "https://registry.npm.taobao.org/babel-eslint/download/babel-eslint-10.0.1.tgz", - "integrity": "sha1-kZaB3AmWFM19MdRciQhpUJKh+u0=", + "resolved": "https://registry.npmmirror.com/babel-eslint/-/babel-eslint-10.0.1.tgz", + "integrity": "sha512-z7OT1iNV+TjOwHNLLyJk+HN+YVWX+CLE6fPD2SymJZOZQBs+QIexFjhm4keGTm8MW9xr4EC9Q0PbaLB24V5GoQ==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", @@ -3811,8 +4203,8 @@ "dependencies": { "eslint-scope": { "version": "3.7.1", - "resolved": "https://registry.npm.taobao.org/eslint-scope/download/eslint-scope-3.7.1.tgz?cache=0&sync_timestamp=1600070417656&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-scope%2Fdownload%2Feslint-scope-3.7.1.tgz", - "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", + "resolved": "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-3.7.1.tgz", + "integrity": "sha512-ivpbtpUgg9SJS4TLjK7KdcDhqc/E3CGItsvQbBNLkNGUeMhd5qnJcryba/brESS+dg3vrLqPuc/UcS7jRJdN5A==", "dev": true, "requires": { "esrecurse": "^4.1.0", @@ -6102,6 +6494,11 @@ } } }, + "dayjs": { + "version": "1.11.10", + "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.10.tgz", + "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==" + }, "de-indent": { "version": "1.0.2", "resolved": "https://registry.npm.taobao.org/de-indent/download/de-indent-1.0.2.tgz", @@ -7965,7 +8362,6 @@ "version": "1.4.0", "resolved": "https://registry.npm.taobao.org/esquery/download/esquery-1.4.0.tgz?cache=0&sync_timestamp=1612565616129&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fesquery%2Fdownload%2Fesquery-1.4.0.tgz", "integrity": "sha1-IUj/w4uC6McFff7UhCWz5h8PJKU=", - "dev": true, "requires": { "estraverse": "^5.1.0" }, @@ -7973,8 +8369,7 @@ "estraverse": { "version": "5.2.0", "resolved": "https://registry.npm.taobao.org/estraverse/download/estraverse-5.2.0.tgz?cache=0&sync_timestamp=1596642941915&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Festraverse%2Fdownload%2Festraverse-5.2.0.tgz", - "integrity": "sha1-MH30JUfmzHMk088DwVXVzbjFOIA=", - "dev": true + "integrity": "sha1-MH30JUfmzHMk088DwVXVzbjFOIA=" } } }, @@ -8448,6 +8843,14 @@ "resolved": "https://registry.npm.taobao.org/fastparse/download/fastparse-1.1.2.tgz", "integrity": "sha1-kXKMWllC7O2FMSg8eUQe5BIsNak=", "dev": true + }, + "fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmmirror.com/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "requires": { + "reusify": "^1.0.4" + } }, "faye-websocket": { "version": "0.11.3", @@ -9196,7 +9599,6 @@ "version": "5.1.2", "resolved": "https://registry.npm.taobao.org/glob-parent/download/glob-parent-5.1.2.tgz", "integrity": "sha1-hpgyxYA0/mikCTwX3BXoNA2EAcQ=", - "dev": true, "requires": { "is-glob": "^4.0.1" } @@ -9309,6 +9711,11 @@ "version": "4.2.6", "resolved": "https://registry.npm.taobao.org/graceful-fs/download/graceful-fs-4.2.6.tgz", "integrity": "sha1-/wQLKwhTsjw9MQJ1I3BvGIXXa+4=" + }, + "graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==" }, "growly": { "version": "1.3.0", @@ -10386,8 +10793,7 @@ "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npm.taobao.org/is-extglob/download/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" }, "is-finite": { "version": "1.1.0", @@ -10409,7 +10815,6 @@ "version": "4.0.1", "resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-4.0.1.tgz", "integrity": "sha1-dWfb6fL14kZ7x3q4PEopSCQHpdw=", - "dev": true, "requires": { "is-extglob": "^2.1.1" } @@ -12731,8 +13136,7 @@ "merge2": { "version": "1.4.1", "resolved": "https://registry.npm.taobao.org/merge2/download/merge2-1.4.1.tgz", - "integrity": "sha1-Q2iJL4hekHRVpv19xVwMnUBJkK4=", - "dev": true + "integrity": "sha1-Q2iJL4hekHRVpv19xVwMnUBJkK4=" }, "methods": { "version": "1.1.2", @@ -13031,8 +13435,7 @@ "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npm.taobao.org/natural-compare/download/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" }, "needle": { "version": "2.9.0", @@ -17251,6 +17654,11 @@ "inherits": "~2.0.3" } }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" + }, "randomatic": { "version": "3.1.1", "resolved": "https://registry.npm.taobao.org/randomatic/download/randomatic-3.1.1.tgz", @@ -17744,6 +18152,11 @@ "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", "dev": true }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" + }, "rgb-regex": { "version": "1.0.1", "resolved": "https://registry.npm.taobao.org/rgb-regex/download/rgb-regex-1.0.1.tgz", @@ -17786,6 +18199,14 @@ "integrity": "sha1-hEDsz5nqPnC9QJ1JqriOEMGJpFU=", "dev": true, "optional": true + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "requires": { + "queue-microtask": "^1.2.2" + } }, "run-queue": { "version": "1.0.3", @@ -20280,6 +20701,11 @@ "integrity": "sha1-8shUBoALmw90yfdGW4HqrSQSUvg=", "dev": true }, + "ts-api-utils": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/ts-api-utils/-/ts-api-utils-1.0.3.tgz", + "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==" + }, "tsconfig": { "version": "7.0.0", "resolved": "https://registry.npm.taobao.org/tsconfig/download/tsconfig-7.0.0.tgz", @@ -20854,30 +21280,86 @@ } }, "vue-eslint-parser": { - "version": "2.0.3", - "resolved": "https://registry.npm.taobao.org/vue-eslint-parser/download/vue-eslint-parser-2.0.3.tgz?cache=0&sync_timestamp=1614679548045&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvue-eslint-parser%2Fdownload%2Fvue-eslint-parser-2.0.3.tgz", - "integrity": "sha1-wmjJbG2Uz+PZOKX3WTlZsMozYNE=", - "dev": true, - "optional": true, + "version": "9.3.2", + "resolved": "https://registry.npmmirror.com/vue-eslint-parser/-/vue-eslint-parser-9.3.2.tgz", + "integrity": "sha512-q7tWyCVaV9f8iQyIA5Mkj/S6AoJ9KBN8IeUSf3XEmBrOtxOZnfTg5s4KClbZBCK3GtnT/+RyCLZyDHuZwTuBjg==", "requires": { - "debug": "^3.1.0", - "eslint-scope": "^3.7.1", - "eslint-visitor-keys": "^1.0.0", - "espree": "^3.5.2", - "esquery": "^1.0.0", - "lodash": "^4.17.4" + "debug": "^4.3.4", + "eslint-scope": "^7.1.1", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.1", + "esquery": "^1.4.0", + "lodash": "^4.17.21", + "semver": "^7.3.6" }, "dependencies": { - "eslint-scope": { - "version": "3.7.3", - "resolved": "https://registry.npm.taobao.org/eslint-scope/download/eslint-scope-3.7.3.tgz?cache=0&sync_timestamp=1600070417656&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-scope%2Fdownload%2Feslint-scope-3.7.3.tgz", - "integrity": "sha1-u1ByANPRf2AkdjYWC0gmKEsQhTU=", - "dev": true, - "optional": true, + "acorn": { + "version": "8.11.2", + "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.11.2.tgz", + "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==" + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmmirror.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==" + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" + "ms": "2.1.2" } + }, + "eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==" + }, + "espree": { + "version": "9.6.1", + "resolved": "https://registry.npmmirror.com/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "requires": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" } } }, @@ -21033,6 +21515,11 @@ "integrity": "sha1-HuO8mhbsv1EYvjNLsV+cRvgvWCU=", "dev": true }, + "vue-time-slider": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/vue-time-slider/-/vue-time-slider-1.0.5.tgz", + "integrity": "sha512-ApKBsxbLyFWqZWriYeTdTXKS6qkxNO/dJ1j9MvWGbYx5sX+Sq+4GrrQ5n/r04Kun1uHyLWi7DyB1bf+btzfpbA==" + }, "vuex": { "version": "3.1.0", "resolved": "https://registry.npm.taobao.org/vuex/download/vuex-3.1.0.tgz?cache=0&sync_timestamp=1612277384353&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvuex%2Fdownload%2Fvuex-3.1.0.tgz", diff --git a/package.json b/package.json index 656292a..34f39b3 100644 --- a/package.json +++ b/package.json @@ -16,10 +16,12 @@ "svgo": "svgo -f src/icons/svg --config=src/icons/svgo.yml" }, "dependencies": { + "@typescript-eslint/eslint-plugin": "^6.13.2", "angular-expressions": "^1.1.5", "axios": "0.18.0", "clipboard": "^2.0.10", "crypto-js": "^4.0.0", + "dayjs": "^1.11.10", "docxtemplater": "^3.32.4", "docxtemplater-image-module-free": "^1.1.1", "echarts": "^5.2.2", @@ -52,10 +54,12 @@ "vue-amap": "^0.5.10", "vue-amp": "^0.0.1", "vue-baidu-map": "^0.21.22", + "vue-eslint-parser": "^9.3.2", "vue-json-excel": "^0.3.0", "vue-mapvgl": "^0.0.32", "vue-router": "3.0.6", "vue-seamless-scroll": "^1.1.23", + "vue-time-slider": "^1.0.5", "vuex": "3.1.0", "xlsx": "^0.16.9", "xlsx-style": "^0.8.13" @@ -65,6 +69,7 @@ "@babel/eslint-parser": "^7.16.5", "@babel/plugin-proposal-optional-chaining": "^7.21.0", "@babel/register": "7.0.0", + "@typescript-eslint/parser": "^6.13.2", "@vue/cli-plugin-babel": "3.6.0", "@vue/cli-plugin-eslint": "3.6.0", "@vue/cli-plugin-unit-jest": "3.6.3", @@ -72,7 +77,7 @@ "@vue/test-utils": "1.0.0-beta.29", "autoprefixer": "^9.5.1", "babel-core": "7.0.0-bridge.0", - "babel-eslint": "10.0.1", + "babel-eslint": "^10.0.1", "babel-jest": "23.6.0", "chalk": "2.4.2", "connect": "3.6.6", diff --git a/public/index.html b/public/index.html index 6215bc1..427dccd 100644 --- a/public/index.html +++ b/public/index.html @@ -1,64 +1,71 @@ -<!DOCTYPE html> +<!doctype html> <html> -<head> - <meta charset="utf-8"> - <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> - <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"> - <link rel="icon" href="<%= BASE_URL %>LOGO.ico"> - <!-- <script src="https://webapi.amap.com/maps?v=1.4.15&key=be57d4add7dc10fb7f7924763a2179ae&plugin=AMap.MarkerClusterer"></script> --> - <!-- <link rel="stylesheet" href="https://a.amap.com/jsapi_demos/static/demo-center/css/demo-center.css" /> --> - <script - src="https://webapi.amap.com/maps?v=1.4.15&key=be57d4add7dc10fb7f7924763a2179ae&plugin=AMap.MarkerClusterer"></script> - <script - src="https://webapi.amap.com/loca?v=1.3.2&key=be57d4add7dc10fb7f7924763a2179ae&plugin=AMap.MarkerClusterer"></script> - <!-- <link rel="stylesheet" href="https://a.amap.com/jsapi_demos/static/demo-center/css/demo-center.css" />--> - <!-- <script src="https://cdn.bootcss.com/jquery/3.5.0/jquery.js"></script>--> - <script type="text/javascript" - src="https://api.map.baidu.com/api?type=webgl&v=2.0&ak=U2SoSp52BoVW6bAEMsxQ7Zfe0tuB6VDp"></script> - <script src="https://api.map.baidu.com/api?v=3.0&ak=U2SoSp52BoVW6bAEMsxQ7Zfe0tuB6VDp"></script> - <script src="https://mapv.baidu.com/build/mapv.min.js"></script> - <script type="text/javascript" src="https://mapv.baidu.com/gl/examples/static/common.js"></script> - <!-- <script src="https://cdn.jsdelivr.net/npm/echarts/map/js/china.js?v=1598903772045"></script> --> - <script src="https://code.bdstatic.com/npm/mapvgl@1.0.0-beta.97/dist/mapvgl.min.js"></script> - <!-- <script type="text/javascript" src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script> --> - <!-- <script type="text/javascript" src="https://cdn.bootcdn.net/ajax/libs/require.js/2.3.6/require.min.js"></script> --> + <head> + <meta charset="utf-8" /> + <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /> + <meta + name="viewport" + content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" + /> + <link rel="icon" href="<%= BASE_URL %>LOGO.ico" /> + <!-- <script src="https://webapi.amap.com/maps?v=1.4.15&key=be57d4add7dc10fb7f7924763a2179ae&plugin=AMap.MarkerClusterer"></script> --> + <!-- <link rel="stylesheet" href="https://a.amap.com/jsapi_demos/static/demo-center/css/demo-center.css" /> --> + <script> + window._AMapSecurityConfig = { + securityJsCode: '20fcbbc1782d2853f433831e61fab769' + } + </script> + <script src="https://webapi.amap.com/maps?v=1.4.15&key=c4e73f2c6972766d6a54dffd2f501cac&plugin=AMap.MarkerClusterer"></script> + <script src="https://webapi.amap.com/loca?v=1.3.2&key=c4e73f2c6972766d6a54dffd2f501cac&plugin=AMap.MarkerClusterer"></script> + <!-- <link rel="stylesheet" href="https://a.amap.com/jsapi_demos/static/demo-center/css/demo-center.css" />--> + <!-- <script src="https://cdn.bootcss.com/jquery/3.5.0/jquery.js"></script>--> + <script + type="text/javascript" + src="https://api.map.baidu.com/api?type=webgl&v=2.0&ak=U2SoSp52BoVW6bAEMsxQ7Zfe0tuB6VDp" + ></script> + <script src="https://api.map.baidu.com/api?v=3.0&ak=U2SoSp52BoVW6bAEMsxQ7Zfe0tuB6VDp"></script> + <script src="https://mapv.baidu.com/build/mapv.min.js"></script> + <script + type="text/javascript" + src="https://mapv.baidu.com/gl/examples/static/common.js" + ></script> + <!-- <script src="https://cdn.jsdelivr.net/npm/echarts/map/js/china.js?v=1598903772045"></script> --> + <script src="https://code.bdstatic.com/npm/mapvgl@1.0.0-beta.97/dist/mapvgl.min.js"></script> + <!-- <script type="text/javascript" src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script> --> + <!-- <script type="text/javascript" src="https://cdn.bootcdn.net/ajax/libs/require.js/2.3.6/require.min.js"></script> --> - <title> - <%= webpackConfig.name %> - </title> - <style> - body { - margin: 0px; - padding: 0px; - height: 100%; - } + <title><%= webpackConfig.name %></title> + <style> + body { + margin: 0px; + padding: 0px; + height: 100%; + } - html { - overflow-y: hidden; - } - </style> -</head> + html { + overflow-y: hidden; + } + </style> + </head> -<body> - <noscript> - <strong> - <%= webpackConfig.name %> ������������javaScript������ - </strong> - </noscript> - <div id="app"></div> -</body> -<script> - var docEl = document.documentElement, - //��������������������������������������������������������������������������������������������������� - //���������������������������������orientationChange������������������������������resize ��������� - //��������������������������������������������������������������������������������������������������� - resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize', - recalc = function () { - //���������������������1:50���������375������������������������������������������������������������ - docEl.style.fontSize = docEl.clientWidth / 100 + 'px'; - }; - window.addEventListener(resizeEvt, recalc, false); - document.addEventListener('DOMContentLoaded', recalc, false); -</script> - + <body> + <noscript> + <strong> <%= webpackConfig.name %> ������������javaScript������ </strong> + </noscript> + <div id="app"></div> + </body> + <script> + var docEl = document.documentElement, + //��������������������������������������������������������������������������������������������������� + //���������������������������������orientationChange������������������������������resize ��������� + //��������������������������������������������������������������������������������������������������� + resizeEvt = + 'orientationchange' in window ? 'orientationchange' : 'resize', + recalc = function () { + //���������������������1:50���������375������������������������������������������������������������ + docEl.style.fontSize = docEl.clientWidth / 100 + 'px' + } + window.addEventListener(resizeEvt, recalc, false) + document.addEventListener('DOMContentLoaded', recalc, false) + </script> </html> diff --git a/src/assets/images/pointMap.png b/src/assets/images/pointMap.png new file mode 100644 index 0000000..805bb56 --- /dev/null +++ b/src/assets/images/pointMap.png Binary files differ diff --git a/src/components/Cascader/regionCity.vue b/src/components/Cascader/regionCity.vue index 2b39be2..93bc792 100644 --- a/src/components/Cascader/regionCity.vue +++ b/src/components/Cascader/regionCity.vue @@ -1,18 +1,27 @@ <template> <div> <el-cascader + ref="myCascader" v-model="newRegion" placeholder="���������/���" :options="options" + :size="selectSize" clearable style="flex:1" + @change="getvalue" /> </div> </template> <script> export default { - data() { + props: { + selectSize: { + type: String, + default: 'medium ' + }, + }, + data () { return { form: { name: '', @@ -25,15 +34,17 @@ desc: '' }, options: [], - newRegion: [] + newRegion: [], + form1: {} } }, watch: { - newRegion(n, o) { + newRegion (n, o) { + console.log(n, o) this.$emit('regionCode', n[this.newRegion.length - 1]) } }, - created() { + created () { const runAsync = new Promise((resolve, reject) => { this.$request({ url: '/organization/getMapPath', @@ -68,7 +79,22 @@ runAsync.then(() => { this.newRegion = [Number(this.$store.state.regionCode.toString().substr(0, 2) + '0000'), Number(this.$store.state.regionCode.toString().substr(0, 4) + '00')] + this.$nextTick(() => { + this.getvalue() + }) }) + }, + methods: { + getvalue () { + if (this.newRegion.length > 0) { // ������������������������������change������������������������������������������������������������������������������ + const { label: org, value: orgid } = + this.$refs.myCascader.getCheckedNodes()[0] + this.form1 = { org, orgid } + } else { + this.form1 = {} + } + this.$emit('regionForm', this.form1) + }, } } </script> @@ -78,4 +104,3 @@ text-align: center; } </style> - diff --git a/src/main.js b/src/main.js index db2981c..d4f3b30 100644 --- a/src/main.js +++ b/src/main.js @@ -20,31 +20,15 @@ import '@/permission' // permission control // clipboard������������������������������������������������JS������ import clipboard from 'clipboard' -// ���������vue��������� -Vue.prototype.$clipboard = clipboard // ������������ import AMap from 'vue-amap' -Vue.use(AMap) -AMap.initAMapApiLoader({ - key: 'be57d4add7dc10fb7f7924763a2179ae', - plugin: ['AMap.moveAnimation', 'AMap.Autocomplete', 'AMap.PlaceSearch', 'AMap.Scale', - 'AMap.OverView', 'AMap.ToolBar', 'AMap.MapType', 'AMap.PolyEditor', 'AMap.CircleEditor', - 'AMap.DistrictSearch'], - // ������������ sdk ��������� 1.4.4 - v: '1.4.4' -}) - -Vue.prototype.$AMap = AMap // crypto������ import { Encrypt } from '@/utils/AES.js' import { getToken } from '@/utils/auth' import request from '@/utils/request' - -Vue.prototype.$request = request.service -Vue.prototype.$axiosRequest = request.reqServe // Vue.prototype.$postRequest=request.reqServe1 /** * If you don't want to use mock-server @@ -55,11 +39,40 @@ * please remove it before going online! ! ! */ import { mockXHR } from '../mock' + +import echarts from 'echarts' + +import JsonExcel from 'vue-json-excel' +// ���������vue��������� +Vue.prototype.$clipboard = clipboard +Vue.use(AMap) +AMap.initAMapApiLoader({ + key: 'c4e73f2c6972766d6a54dffd2f501cac', + plugin: [ + 'AMap.moveAnimation', + 'AMap.Autocomplete', + 'AMap.PlaceSearch', + 'AMap.Scale', + 'AMap.OverView', + 'AMap.ToolBar', + 'AMap.MapType', + 'AMap.PolyEditor', + 'AMap.CircleEditor', + 'AMap.DistrictSearch' + ], + // ������������ sdk ��������� 1.4.4 + v: '1.4.4' +}) +window._AMapSecurityConfig = { + securityJsCode: '20fcbbc1782d2853f433831e61fab769' +} +Vue.prototype.$AMap = AMap + +Vue.prototype.$request = request.service +Vue.prototype.$axiosRequest = request.reqServe if (process.env.NODE_ENV === 'production') { mockXHR() } - -import echarts from 'echarts' Vue.prototype.$Cookies = Cookies @@ -72,25 +85,26 @@ Vue.config.productionTip = false Vue.prototype.$axios = axios Vue.prototype.$Bus = Bus - -import JsonExcel from 'vue-json-excel' -Vue.component('downloadExcel', JsonExcel) +Vue.component('DownloadExcel', JsonExcel) function getServerConfig() { return new Promise((resolve, reject) => { - axios.get('/serverConfig.json').then((result) => { - // console.log(result) // ������������������������ - const config = result.data - for (const key in config) { - Vue.prototype[key] = config[key] - } - // ������������������������������������Vue��� - // console.log(Vue.prototype.BASE_ADDR) - resolve() - }).catch((error) => { - console.log(error) - reject() - }) + axios + .get('/serverConfig.json') + .then(result => { + // console.log(result) // ������������������������ + const config = result.data + for (const key in config) { + Vue.prototype[key] = config[key] + } + // ������������������������������������Vue��� + // console.log(Vue.prototype.BASE_ADDR) + resolve() + }) + .catch(error => { + console.log(error) + reject() + }) }) } @@ -118,11 +132,13 @@ for (const k in opt) { ret = new RegExp('(' + k + ')').exec(fmt) if (ret) { - fmt = fmt.replace(ret[1], (ret[1].length === 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, '0'))) + fmt = fmt.replace( + ret[1], + ret[1].length === 1 ? opt[k] : opt[k].padStart(ret[1].length, '0') + ) } } return fmt } - init() diff --git a/src/router/dynamicRouter.js b/src/router/dynamicRouter.js index 5358aeb..b84d58a 100644 --- a/src/router/dynamicRouter.js +++ b/src/router/dynamicRouter.js @@ -79,6 +79,12 @@ component: () => import('@/views/airPollutionCalendar/index'), meta: { title: '������������������������', icon: 'example' } } +const heatMap = { + path: 'charts/heatMap', + name: 'heatMap', + component: () => import('@/views/hotMap/index'), + meta: { title: '���������������', icon: 'example' } +} // const PM5PM10ForecastChart = { // path: 'charts/PM5PM10ForecastChart', @@ -200,7 +206,8 @@ const summaryPage = { path: 'toCarryOutLegislativeReforms/summaryPage', name: 'summaryPage', - component: () => import('@/views/toCarryOutLegislativeReforms/summaryPage/index'), + component: () => + import('@/views/toCarryOutLegislativeReforms/summaryPage/index'), meta: { title: '������������', icon: 'example' } } const reform = { @@ -232,6 +239,7 @@ heatmap: heatmap, hexagon: hexagon, airPollutionCalendar: airPollutionCalendar, + heatMap: heatMap, averageContrast: averageContrast, industryContributionRate, regionalContributionRate, @@ -263,7 +271,7 @@ export function routerMenus() { const routersMenu = JSON.parse(store.state.user.menus) // ��������������������������������� ��������������������������� - console.log('routersMenu',routersMenu) + console.log('routersMenu', routersMenu) const currentRoutes = router.options.routes if (routersMenu.length > 0) { routersMenu.forEach(item => { diff --git a/src/views/hotMap/components/colorList.json b/src/views/hotMap/components/colorList.json new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/src/views/hotMap/components/colorList.json diff --git a/src/views/hotMap/components/formatdate.js b/src/views/hotMap/components/formatdate.js new file mode 100644 index 0000000..a647d01 --- /dev/null +++ b/src/views/hotMap/components/formatdate.js @@ -0,0 +1,127 @@ +/** + * @name: ��������������� + * @msg: ��� Date ��������������� Date ������������������������ String + * ���(M)������(d)���12������(h)���24������(H)������(m)������(s)������(E)���������(q) ��������� 1-2 ������������ + * ���(y)��������� 1-4 ���������������������(S)��������� 1 ������������(��� 1-3 ������������) + * eg: + * dateFormat(new Date(), "yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423 + * dateFormat(new Date(), "yyyy-MM-dd E HH:mm:ss") ==> 2009-03-10 ��� 20:09:04 + * dateFormat(new Date(), "yyyy-MM-dd EE hh:mm:ss") ==> 2009-03-10 ������ 08:09:04 + * dateFormat(new Date(), "yyyy-MM-dd EEE hh:mm:ss") ==> 2009-03-10 ��������� 08:09:04 + * dateFormat(new Date(), "yyyy-M-d h:m:s.S") ==> 2006-7-2 8:9:4.18 + * + * @param {*} date + * @param {*} format + * @return {*} + */ +export function dateFormat(date, format) { + let iDate = null + if (typeof date === 'number') { + iDate = new Date(date) + } else if (typeof date === 'string') { + date = date.replace(/-/g, '/') + if (date.indexOf('T') > -1) { + const dotIndex = date.indexOf('.') + date = date.substr(0, dotIndex) + date = date.replace('T', ' ') + date = new Date(date).getTime() + } + + if (!isNaN(Number(date))) { + date = Number(date) + } + + iDate = new Date(date) + } else if (date instanceof Date) { + iDate = date + } else { + return false + } + + // ������ + // let timestamp = iDate.getTime()/1000 - 8 * 60 * 60; + // iDate = new Date(timestamp*1000); + + const o = { + 'M+': iDate.getMonth() + 1, // ������ + 'd+': iDate.getDate(), // ��� + 'h+': iDate.getHours() % 24 === 0 ? '00' : iDate.getHours() % 24, // ������ + 'H+': iDate.getHours(), // ������ + 'm+': iDate.getMinutes(), // ��� + 's+': iDate.getSeconds(), // ��� + 'q+': Math.floor((iDate.getMonth() + 3) / 3), // ������ + S: iDate.getMilliseconds() // ������ + } + + if (!format) { + format = 'yyyy-MM-dd hh:mm:ss' + } + const week = { + 0: '\u65e5', + 1: '\u4e00', + 2: '\u4e8c', + 3: '\u4e09', + 4: '\u56db', + 5: '\u4e94', + 6: '\u516d' + } + if (/(y+)/.test(format)) { + format = format.replace( + RegExp.$1, + (iDate.getFullYear() + '').substr(4 - RegExp.$1.length) + ) + } + if (/(E+)/.test(format)) { + format = format.replace( + RegExp.$1, + (RegExp.$1.length > 1 + ? RegExp.$1.length > 2 + ? '\u661f\u671f' + : '\u5468' + : '') + week[iDate.getDay() + ''] + ) + } + for (const k in o) { + if (new RegExp('(' + k + ')').test(format)) { + format = format.replace( + RegExp.$1, + RegExp.$1.length === 1 ? o[k] : ('00' + o[k]).substr(('' + o[k]).length) + ) + } + } + + return format +} + +/** + * @name: ������������������������������ + * @param {*} count ������ + * @param {*} type ���������������������������before������������������ + */ +export function getDays(count, type) { + const list = [] + if (type && type === 'before') { + for (let i = 0; i < count; i++) { + list.unshift( + dateFormat( + new Date( + new Date().setDate(new Date().getDate() - i) + ).toLocaleDateString(), + 'MM-dd' + ) + ) + } + } else { + for (let i = 0; i < count; i++) { + list.push( + dateFormat( + new Date( + new Date().setDate(new Date().getDate() + i) + ).toLocaleDateString(), + 'MM-dd' + ) + ) + } + } + return list +} diff --git a/src/views/hotMap/components/img/icon-pause.png b/src/views/hotMap/components/img/icon-pause.png new file mode 100644 index 0000000..831d4c2 --- /dev/null +++ b/src/views/hotMap/components/img/icon-pause.png Binary files differ diff --git a/src/views/hotMap/components/img/icon-play.png b/src/views/hotMap/components/img/icon-play.png new file mode 100644 index 0000000..a2ef607 --- /dev/null +++ b/src/views/hotMap/components/img/icon-play.png Binary files differ diff --git a/src/views/hotMap/components/img/round.png b/src/views/hotMap/components/img/round.png new file mode 100644 index 0000000..8ebbab3 --- /dev/null +++ b/src/views/hotMap/components/img/round.png Binary files differ diff --git a/src/views/hotMap/components/selectHour.vue b/src/views/hotMap/components/selectHour.vue new file mode 100644 index 0000000..13839ff --- /dev/null +++ b/src/views/hotMap/components/selectHour.vue @@ -0,0 +1,102 @@ +<template> + <el-date-picker + ref="timeBox" + :key="dataType" + v-model="value1" + class="box" + size="small" + :type="dataType" + range-separator="���" + :start-placeholder="startPlaceholderData" + :end-placeholder="endPlaceholderData" + popper-class="tpc" + :format="format" + :append-to-body="true" + :default-value="new Date()" + :value-format="valueFormat" + :picker-options="pickerOptions" + /> +</template> + +<script> +// ���������������������������������������������������������js������������������js���json������������������������������ +// ���������import������������������from'������������������'; + +export default { +// import ��������������������������������������������������� + components: {}, + props: { + dataType: { + type: String, + default: 'datetimerange' + }, + }, + data () { + // ������������������ + return { + newValue1: [], + value1: [], + format: 'yyyy-MM-dd HH', + valueFormat: 'yyyy-MM-dd HH', + startPlaceholderData: '������������������', + endPlaceholderData: '������������������', + pickerOptions: { + disabledDate: (time) => { + return time.getTime() > new Date() + }, + }, + } + }, + // ������������ ���������data������ + computed: {}, + // ������data������������������ + watch: { + value1 (nv, ov) { + console.log(nv, ov) + this.newValue1 = nv + this.sendPicker() + }, + dataType (nv, ov) { + this.value1 = [] + if (nv === 'datetimerange') { + this.startPlaceholderData = '������������������' + this.endPlaceholderData = '������������������' + this.format = 'yyyy-MM-dd HH' + this.valueFormat = 'yyyy-MM-dd HH' + } else if (nv === 'daterange') { + this.startPlaceholderData = '������������' + this.endPlaceholderData = '������������' + this.format = 'yyyy-MM-dd' + this.valueFormat = 'yyyy-MM-dd' + } else if (nv === 'monthrange') { + this.format = 'yyyy-MM' + this.valueFormat = 'yyyy-MM' + this.startPlaceholderData = '������������' + this.endPlaceholderData = '������������' + } + } + }, + // ������������ - ��������������������������������� this ��������� + created () { + // this.currentHour() + }, + methods: { + sendPicker () { + this.$emit('selectHourData', this.newValue1) + } + } // ���������������keep-alive������������������������������������ +} +</script> +<style lang="scss"> + /* ������������ ������������ */ + .box .el-range-separator{ + width: 20px !important; + } + /* ������������ ��������� */ + .tpc .el-time-spinner__wrapper { + width:100% !important; + } + .tpc .el-scrollbar:nth-of-type(2) { + display: none !important; + } +</style> diff --git a/src/views/hotMap/components/timeLinePlay.vue b/src/views/hotMap/components/timeLinePlay.vue new file mode 100644 index 0000000..d9c0622 --- /dev/null +++ b/src/views/hotMap/components/timeLinePlay.vue @@ -0,0 +1,347 @@ +<template> + <div class="timeLineBox"> + <div class="iconePlay"> + <i + class="menu-icon" + :class="{'icon-play': !playing, 'icon-pause': playing}" + @click="togglePlay" + /> + </div> + <div class="dayDataList"> + <div class="oneDayData"> + <div + v-for="item in dataFormList" + :key="item.id" + class="oneDataBox" + :class="{'minWdth': dateType==='hour'}" + > + <div + class="lineBox" + :class="{'borLeft': dateType!=='hour','activeBg': (activeIndex > item.id )&&(dateType!=='hour')}" + @click="changeActiveIndex(item.id,item)" + > + <!-- ������ --> + <div + v-if="dateType==='hour'" + class="hourData" + > + <el-tooltip + v-for="val in item.hourListTime" + :key="val.value" + transition="" + :open-delay="450" + popper-class="tooltip-style" + effect="dark" + :content="val.name" + :disabled="val.isShow" + placement="top" + > + <div + class="oneHourData" + :class="{'cursorNot': val.isShow}" + @click.stop="changeActiveIndex(val.id,val)" + > + <div + class="hourLineBox" + :class="{'activeBg': activeIndex > val.id,'activeIhShow': val.isShow}" + /> + <div v-if="((parseInt(val.name, 10) % 3)===0)&&val.name!=='9999'"> + {{ val.name }} + </div> + </div> + </el-tooltip> + </div> + </div> + <div + class="dataFont" + :class="{'mgTop': dateType==='hour'}" + > + {{ item.name }} + </div> + </div> + </div> + </div> + </div> +</template> + +<script> +// ���������������������������������������������������������js������������������js���json������������������������������ +// ���������import������������������from'������������������'; +import _ from 'lodash' +export default { +// import ��������������������������������������������������� + components: {}, + props: { + options: { + type: Object, + default () { + return {} + } + }, + dateTimes: { + type: Array, + default () { + return [] + } + }, + // ��������������� + dateType: { + type: String, + default () { + return '' + } + } + }, + data () { + // ������������������ + return { + intervalTimer: null, // ��������� + playing: false, + activeIndex: 0, + activeItem: {}, + timeLineData: [ // ������������ + { + id: 0, + name: '2019-01-01', + index: 1, + hourList: [ + { + name: '00:00', + value: 0, + isShow: false + } + ] + }, + + ], + } + }, + // ������������ ���������data������ + computed: { + dataFormList () { + let dataList = _.cloneDeep(this.dateTimes) + let hourListTime = dataList[dataList.length - 1].hourListTime + if (hourListTime.length < 24 && this.dateType === 'hour') { + const newArr = hourListTime.concat(Array(24 - hourListTime.length).fill({ + id: 9999, + name: '9999', + isShow: true + })) + console.log('newArr', newArr) + dataList[dataList.length - 1].hourListTime = newArr + } + return dataList + } + }, + // ������data������������������ + watch: { + dateTimes: { + handler (newVal, oldVal) { + this.activeIndex = 0 + this.playing = false + console.log('newVal', newVal) + }, + deep: true + }, + + playing () { + if (this.playing) { + console.log('������������', this.dataFormList) + console.log('this.activeIndex', this.activeIndex) + clearInterval(this.intervalTimer) + if (this.dateType === 'hour' && this.activeIndex === this.dataFormList[0].idLength) { + this.activeIndex = 1 + } else if (this.dateType !== 'hour' && this.activeIndex === this.dataFormList.length) { + this.activeIndex = 1 + } else { + this.activeIndex = (this.activeIndex + 1) + } + this.intervalTimer = setInterval(() => { + if (this.dateType === 'hour' && this.activeIndex === this.dataFormList[0].idLength) { + // this.activeIndex = 1 + this.playing = false + } else if (this.dateType !== 'hour' && this.activeIndex === this.dataFormList.length) { + // this.activeIndex = 1 + this.playing = false + } else { + this.activeIndex = (this.activeIndex + 1) + } + console.log('this.activeIndex', this.activeIndex) + }, this.options.speed * 1000) + } else { + console.log('������������') + if (this.intervalTimer) { + clearInterval(this.intervalTimer) + this.intervalTimer = null + } + } + }, + activeIndex () { + let activeItem = {} + if ((this.activeIndex > this.dataFormList.length) && this.dateType !== 'hour') { + this.playing = false + this.activeIndex = this.dataFormList.length + } else if (this.activeIndex > this.dataFormList[0].idLength && this.dateType === 'hour') { + this.playing = false + this.activeIndex = this.dataFormList[0].idLength + } + + if (this.dateType === 'hour') { + this.dataFormList.forEach(element => { + element.hourListTime.forEach(item => { + if (item.id === (this.activeIndex - 1)) { + activeItem = { + id: item.id, + name: `${element.name} ${item.name}`, + } + } + }) + }) + } else { + activeItem = this.dataFormList[this.activeIndex - 1] + } + console.log('activeItem', activeItem, this.activeIndex) + this.$emit('getDateFun', activeItem) + } + }, + // ������������ - ��������������������������������� this ��������� + created () { + }, + methods: { + changeActiveIndex (data, item) { + if (item.isShow && this.dateType === 'hour') { + return + } + this.activeItem = item + this.activeIndex = data + 1 + console.log('changeActiveIndex', data, item) + if (this.playing) { + this.playing = false + } + }, + /** + * @name: ��������������� + */ + togglePlay () { + this.playing = !this.playing + }, + } // ���������������keep-alive������������������������������������ +} +</script> +<style scoped lang="scss"> +.timeLineBox{ + background: hsla(0,0%,80%,.8); + width:100%; + box-shadow: 1px 1px 5px #666; + cursor: pointer; + padding: 10px; + padding-bottom: 5px; + padding-top: 10px; + display: flex; + align-items: center; + .dayDataList{ + width: calc(100% - 60px); + overflow: auto; + .oneDayData{ + display: flex; + // justify-content: space-around; + .oneDataBox{ + font-size: 16px; + flex: 1; + text-align: center; + min-width: 100px; + border-left: 1px solid #fff; + .lineBox{ + width: 100%; + height: 10px; + background-color: rgba(0, 0, 0, 0.3); + .hourData{ + display: flex; + width:100%; + justify-content: space-around; + .oneHourData{ + flex: 1; + text-align: center; + min-width: 20px; + .hourLineBox{ + width: 100%; + height: 10px; + // border-left: 1px solid #fff; + border-right: 1px solid #fff; + } + } + } + } + .dataFont{ + margin-top: 5px; + padding-top: 5px; + border-top: 1px solid #fff; + // border-top: 1px solid #fff; + } + } + } + } + +} +.minWdth{ + min-width: 500px!important; +} +.iconePlay{ + margin-right: 10px; + width: 50px; + text-align: center; +} +.menu-icon { + font-size: 20px; + width: 43px; + height: 43px; + background-size: cover; + background-repeat: no-repeat; + display: inline-block; + &.icon-play { + background-image: url('./img/icon-play.png'); + } + + &.icon-pause { + background-image: url('./img/icon-pause.png'); + } + &.menu-icon-disabled { + cursor: no-drop; + opacity: 0.5; + } +} +.textCenter{ + text-align: center; +} +.activeBg{ + background: green !important; +} +.activeIhShow{ + border: none!important; + background: #fff !important; + pointer-events:none; +} +.mgTop{ + margin-top: 20px!important; +} +.borLeft{ + // border-left:1px solid #fff; +} +.cursorNot{ + cursor: not-allowed; +} +</style> +<style> + .tooltip-style.el-tooltip__popper { + background: green; + } + .tooltip-style.el-tooltip__popper.is-dark { + background: green; + } +.tooltip-style.el-tooltip__popper[x-placement^='top'] .popper__arrow:after{ + border-top-color:green; +} +.el-tooltip__popper[x-placement^='top'] .popper__arrow{ + border-top-color:green; +} +</style> diff --git a/src/views/hotMap/index.vue b/src/views/hotMap/index.vue new file mode 100644 index 0000000..9d5c190 --- /dev/null +++ b/src/views/hotMap/index.vue @@ -0,0 +1,445 @@ +<template> + <div class="content"> + <div class="formInBox "> + <el-form + :inline="true" + :model="formInline" + > + <el-form-item> + <el-radio-group + v-model="formInline.pollutant" + size="small" + @input="getPollutant" + > + <el-radio-button + v-for="item in sensorArr" + :key="item.code" + :label="item.name" + /> + </el-radio-group> + </el-form-item> + <el-form-item> + <RegionCity + :select-size="'small'" + @regionForm="regionData" + /> + </el-form-item> + <el-form-item> + <el-radio-group + v-model="formInline.dateRadio" + size="small" + > + <el-radio-button label="������" /> + <el-radio-button label="���" /> + <el-radio-button label="���" /> + </el-radio-group> + </el-form-item> + <el-form-item> + <selectHour + :data-type="dataType" + @selectHourData="selectHourData" + /> + </el-form-item> + <el-form-item> + <el-button + type="primary" + size="small" + @click="onSubmit" + > + ������ + </el-button> + </el-form-item> + </el-form> + </div> + <div id="mapd" /> + <div class="timeLine"> + <Main + v-if="dateTimes.length > 0&&formInline.city!==''" + :options="options" + :date-times="dateTimes" + :date-type="formInline.dayType" + @getDateFun="getDateFun" + /> + </div> + </div> +</template> + +<script> +import _ from 'lodash' +import RegionCity from '@/components/Cascader/regionCity' +import selectHour from './components/selectHour.vue' +import Main from './components/timeLinePlay.vue' +export default { + components: { RegionCity, selectHour, Main }, + data () { + return { + map: null, + heatmap: null, + markerClusterer: null, + city: '������', + formInline: { + city: '', + cityCode: '', + dayType: 'hour', + starTime: '', + endTime: '', + dateRadio: '������', + pollutant: 'PM10', + }, + selectSensor: {code: 'a34002', name: 'PM10', maxNumber: 500}, + sensorArr: [ + { code: 'a34002', name: 'PM10', maxNumber: 500 }, + { code: 'a34004', name: 'PM2.5', maxNumber: 350 }, + { code: 'a21026', name: 'SO2', maxNumber: 2100 }, + { code: 'a21004', name: 'NO2', maxNumber: 750 }, + { code: 'a21005', name: 'CO', maxNumber: 48 }, + { code: 'a05024', name: 'O3', maxNumber: 1000 }, + { code: 'a99054', name: 'TVOC', maxNumber: 4 } + ], + heatMapData: [], + dataType: 'datetimerange', + options: { + speed: 2 + }, + polygon: null, + dateTimes: [], + activeItem: {}, + markerList: [] + } + }, + watch: { + 'formInline.dateRadio': { + handler: function (newVal, oldVal) { + if (newVal === '������') { + this.dataType = 'datetimerange' + this.formInline.dayType = 'hour' + this.dateTimes = [] + } else if (newVal === '���') { + this.dataType = 'daterange' + this.dateTimes = [] + this.formInline.dayType = 'day' + } else if (newVal === '���') { + this.dataType = 'monthrange' + this.dateTimes = [] + this.formInline.dayType = 'month' + } + }, + deep: true + }, + 'formInline.city': { + handler: function (newVal, oldVal) { + console.log('newVal', newVal === '') + if (newVal !== '') { + this.map.clearMap() + this.init1() + this.map.setCity(newVal) + if (!!this.formInline.starTime && !!this.formInline.endTime) { + this.onSubmit() + } + } + }, + deep: true + }, + activeItem: { + handler (newVal, oldVal) { + if (this.markerList.length > 0) { + console.log('2222', this.map.getAllOverlays('marker')) + this.map.remove(this.markerList) + this.map.clearMap() + this.markerList = [] + // this.markerClusterer = null + } + this.getData(newVal.name) + }, + deep: true + } + }, + mounted () { + this.$nextTick(() => { + this.initMap() + this.createHeatMap() + }) + }, + + destroyed () { + if (this.map) { + this.map.destroy() + } + }, + methods: { + getDateFun (item) { + console.log(item) + this.activeItem = item + }, + getPollutant (data) { + this.selectSensor = _.find(this.sensorArr, { name: data }) + console.log(this.selectSensor) + }, + // ��������������� + initMap () { + var map = new AMap.Map('mapd', { + resizeEnable: true, + zooms: [3, 18], + zoom: 11, + }) + this.map = map + // let that = this + }, + init1 () { // ������������ + var that = this + if (that.polygon) { + that.map.remove(that.polygon) + } + AMap.plugin('AMap.DistrictSearch', function () { + new AMap.DistrictSearch({ + extensions: 'all', + subdistrict: 0 + }).search(that.formInline.city, function (status, result) { // ��������������������������������������������������� + var outer = [ + new AMap.LngLat(-360, 90, true), + new AMap.LngLat(-360, -90, true), + new AMap.LngLat(360, -90, true), + new AMap.LngLat(360, 90, true) + ] + var holes = result.districtList[0].boundaries + var pathArray = [outer] + pathArray.push.apply(pathArray, holes) + that.polygon = new AMap.Polygon({ + pathL: pathArray, + strokeColor: 'red', // ������������������ + strokeWeight: 3, + fillColor: '#FFF', // ��������������������� + fillOpacity: 1 + }) + that.polygon.setPath(pathArray) + that.map.add(that.polygon) + }) + }) + }, + getData (newVal) { + this.$request({ + url: '/heatMap/query', + method: 'get', + params: { + code: this.formInline.cityCode, + startTime: newVal, + type: this.selectSensor.code, + form: this.formInline.dayType + } + }) + .then(res => { + if (res.data !== '0') { + if (this.heatmap === null) { + this.createHeatMap() + } + this.map.clearMap() + this.heatMapData = res.data + this.heatmap.setDataSet({ + data: this.heatMapData, + max: this.selectSensor.maxNumber + }) + // let zoomLevel = this.map.getZoom() + // + this.setMarkers(this.heatMapData) + } else { + this.heatmap = null + } + }) + .catch(err => { + console.log(err) + }) + }, + + setMarkers (curData) { + curData.forEach((item, index) => { + let div = document.createElement('div') + let bgColor = 'hsla(180, 100%, 50%, 0.7)' + let fontColor = '#000' + let borderColor = 'hsl(180, 100%, 40%)' + let shadowColor = 'hsl(180, 100%, 50%)' + div.id = 'pint' + index + div.style.backgroundColor = bgColor + let size = 40 + div.style.width = div.style.height = size + 'px' + div.style.border = 'solid 1px ' + borderColor + div.style.borderRadius = size / 2 + 'px' + div.style.boxShadow = '0 0 1px ' + shadowColor + div.innerHTML = Math.floor(Number(item.count)) + div.style.lineHeight = size + 'px' + div.style.color = fontColor + div.style.fontSize = '14px' + div.style.textAlign = 'center' + let marker = new AMap.Marker({ + position: [item.lng, item.lat], + title: item.name, + extData: Math.floor(Number(item.count)), + anchor: 'center', + // ��� html ������ content + content: div, + // ��� icon ��� [center bottom] ��������� + offset: new AMap.Pixel(3, 10) + }) + this.markerList.push(marker) + }) + this.map.add(this.markerList) + var count = this.markerList.length + // eslint-disable-next-line no-new + if (this.markerClusterer) { + this.markerClusterer.clearMarkers() + } + let that = this + AMap.plugin('AMap.MarkerClusterer', function () { + that.markerClusterer = new AMap.MarkerClusterer(that.map, that.markerList, { + gridSize: 100, + renderClusterMarker: function (context) { + let contNumber = 0 + context.markers.forEach(item => { + contNumber += item.getExtData() + }) + let factor = Math.pow(context.count / count, 1 / 18) + let div = document.createElement('div') + let Hue = 180 - factor * 180 + let bgColor = 'hsla(' + Hue + ',100%,50%,0.7)' + let fontColor = 'hsla(' + Hue + ',100%,20%,1)' + let borderColor = 'hsla(' + Hue + ',100%,40%,1)' + let shadowColor = 'hsla(' + Hue + ',100%,50%,1)' + div.style.backgroundColor = bgColor + let size = Math.round(30 + Math.pow(context.count / count, 1 / 5) * 20) + div.style.width = div.style.height = size + 'px' + div.style.border = 'solid 1px ' + borderColor + div.style.borderRadius = size / 2 + 'px' + div.style.boxShadow = '0 0 1px ' + shadowColor + div.innerHTML = contNumber + div.style.lineHeight = size + 'px' + div.style.color = fontColor + div.style.fontSize = '14px' + div.style.textAlign = 'center' + context.marker.setOffset(new AMap.Pixel(-size / 2, -size / 2)) + context.marker.setContent(div) + } + }) + }) + }, + getDayListData () { + this.$request({ + url: '/heatMap/queryTime', + method: 'get', + params: { + type: this.formInline.dayType, + startTime: this.formInline.starTime, + endTime: this.formInline.endTime, + } + }) + .then(res => { + this.dateTimes = res.data + }) + .catch(err => { + console.log(err) + }) + }, + createHeatMap () { + let that = this + this.map.plugin(['AMap.Heatmap'], function () { + // ���������heatmap������ + that.heatmap = new AMap.Heatmap(that.map, { + radius: 100, // ������������ + opacity: [0.2, 0.8], + gradient: { + '0': '#d81e06', + '0.2': '#ea9518', + '0.4': '#fd8200', + '0.6': '#fd0001', + '0.8': '#95014b', + '1': '#7e0226' + } + }) + }) + }, + + onSubmit () { + if (!!this.formInline.city && !!this.formInline.starTime && !!this.formInline.endTime) { + this.getDayListData() + this.getData(this.formInline.starTime) + this.map.setZoom(12) + } else { + this.$message({ + showClose: true, + duration: 2000, + message: '������������������������������', + type: 'error' + }) + } + }, + regionData (city) { + console.log(city) + if (city.org) { + this.formInline.city = city.org + this.formInline.cityCode = city.orgid + } else { + this.formInline.city = '' + this.formInline.cityCode = '' + } + }, + selectHourData (data) { + if (data) { + this.formInline.starTime = data[0] + this.formInline.endTime = data[1] + } else { + this.formInline.starTime = '' + this.formInline.endTime = '' + } + }, + } +} +</script> + +<style scoped lang="scss"> +.content{ + width: 100%; + height: 100%; + position: relative; + .formInBox{ + display: flex; + justify-content: flex-start; + align-items: center; + position: absolute; + padding: 5px 10px; + width: 100%; + z-index: 999; + background: rgba(204,204,204,0.5); + /deep/.el-form-item{ + margin-bottom: 0px; + } + } +} +#mapd { + width: 100%; + height: 100%; + resize: both; + z-index: 0; +} +.timeLine{ + position: absolute; + padding: 5px 10px; + bottom: 15px; + width: 100%; + z-index: 999; +} +/deep/.menu-icon { + font-size: 20px; + width: 30px; + height: 30px; + background-size: cover; + background-repeat: no-repeat; + display: inline-block; + background-image: url('./components/img/round.png'); +} +/deep/.menu-font{ + font-size: 16px; + text-align: center; + max-width: 120px; +} +/deep/.amap-logo,/deep/.amap-copyright{ + display: none!important; +} +</style> diff --git a/src/views/toCarryOutLegislativeReforms/components/locationMap.vue b/src/views/toCarryOutLegislativeReforms/components/locationMap.vue new file mode 100644 index 0000000..847753a --- /dev/null +++ b/src/views/toCarryOutLegislativeReforms/components/locationMap.vue @@ -0,0 +1,119 @@ +<template> + <div> + <el-dialog + :title="title" + :visible.sync="visible" + top="30px" + width="1000px" + center + :before-close="close" + > + <div class="searchBox"> + <el-input + v-model="placeSearch" + placeholder="���������������" + class="input-with-select" + > + <el-button + slot="append" + icon="el-icon-search" + @click="search" + /> + </el-input> + </div> + <div id="panel" /> + <div + v-if="visible" + class="mapBox" + > + <div id="mapd" /> + </div> + </el-dialog> + </div> +</template> + +<script> +export default { + props: { + visible: { type: Boolean, required: true } + }, + data () { + return { + title: '������������', + map: null, + placeSearch: null + } + }, + mounted () { + this.$nextTick(() => { + this.initMap() + }) + }, + destroyed () { + if (this.map) { + this.map.destroy() + } + }, + methods: { + // ��������������� + initMap () { + let map = new AMap.Map('mapd', { + resizeEnable: true, + zooms: [3, 18], + zoom: 15, + center: [120.9781494, 31.4265156] + }) + this.map = map + + const lnglat = new AMap.LngLat('120.9781494', '31.4265156') + const marker = new AMap.Marker({ + position: lnglat + }) + + // ������������������������������������������������������ + marker.setAnimation('AMAP_ANIMATION_BOUNCE') + marker.setMap(this.map) + AMap.service(['AMap.PlaceSearch'], function () { + // ��������������������� + var placeSearch = new AMap.PlaceSearch({ + pageSize: 5, // ������������������������ + pageIndex: 1, // ������ + city: '010', // ��������������� + citylimit: true, // ��������������������������������������������� + map: map, // ��������������������������� + panel: 'panel', // ��������������������������������������������� + autoFitView: true // ������������������������������������������ Marker��������������������������������� + }) + // ��������������� + placeSearch.search('������������') + }) + }, + search () { + let this_ = this + }, + close () { + this.$emit('update:visible', false) + } + } +} +</script> + +<style scoped lang="scss"> +/deep/.el-dialog__body { + height: 600px; + .searchBox { + margin-bottom: 10px; + } + .mapBox { + width: 100%; + height: 100%; + padding-bottom: 30px; + } +} +#mapd { + width: 100%; + height: 100%; + resize: both; + z-index: 0; +} +</style> diff --git a/src/views/toCarryOutLegislativeReforms/reform/index.vue b/src/views/toCarryOutLegislativeReforms/reform/index.vue index b12d231..5f05f20 100644 --- a/src/views/toCarryOutLegislativeReforms/reform/index.vue +++ b/src/views/toCarryOutLegislativeReforms/reform/index.vue @@ -2,7 +2,7 @@ <div v-loading="loading" class="main"> <div> <searchBar v-if="searchType" :search-type="'reform'" @handleSearch="handleSearchBut" @handleAdd="handleOpenDialog(null, 'add')" /> - <newWorkOrder v-if="centerDialogVisible" ref="newWorkOrder" :parent-form-data="parentFormData" :title="title" :page-state="pageState" :visible.sync="centerDialogVisible" @handleSubmit="newHandleSubmit" /> + <newWorkOrder v-if="centerDialogVisible" ref="newWorkOrder" :isToMap.sync='isToMap' :parent-form-data="parentFormData" :title="title" :page-state="pageState" :visible.sync="centerDialogVisible" @handleSubmit="newHandleSubmit" /> <!-- <el-divider></el-divider> --> <div class="tab"> <div class="exportBox"> @@ -229,6 +229,7 @@ <el-button type="primary" @click="handleEditChange">��� ���</el-button> </span> </el-dialog> + <mapContainer :visible.sync="isToMap" v-if="isToMap"></mapContainer> </div> </template> @@ -238,18 +239,21 @@ import _ from 'lodash' import qs from 'qs' import searchBar from '@/views/toCarryOutLegislativeReforms/components/queryForm' +import mapContainer from '@/views/toCarryOutLegislativeReforms/components/locationMap' import newWorkOrder from '@/views/toCarryOutLegislativeReforms/components/newWorkOrder' import workOrderInformation from '@/views/toCarryOutLegislativeReforms/components/workOrderInformation' export default { components: { searchBar, newWorkOrder, + mapContainer, workOrderInformation }, // mixins: [mixins], data() { return { loading: false, + isToMap: false, selectionRows: [], errorClass: 'errorClass', searchType: 'reform', @@ -295,6 +299,11 @@ sealList: [] } }, + watch: { + isToMap(newVal, oldVal) { + this.isToMap = newVal + } + }, computed: { updataEscalationUnitIdFormatter: function () { const data = this.unitList.find( @@ -322,8 +331,23 @@ this.handleSearch({ isInvalid: 0, state: [9, 20, 30] }) this.getUnitList() this.getContaminateList() + if (navigator.geolocation) { + navigator.geolocation.getCurrentPosition( + this.successCallback, + this.errorCallback + ) + } else { + alert('���������������������������������������������') + } }, methods: { + successCallback(position) { + const latitude = position.coords.latitude // ������ + const longitude = position.coords.longitude // ������ + console.log('���������' + longitude) + console.log('���������' + latitude) + }, + errorCallback() {}, handleSelectionChange(rows) { console.log(rows) this.selectionRows = rows -- Gitblit v1.8.0