quanyawei
2023-12-15 f74222e571d9164a59e01194f35ff1e34f10a423
fix:热力图播放
10 files added
10 files modified
2056 ■■■■■ changed files
.eslintrc.js 60 ●●●●● patch | view | raw | blame | history
.vscode/settings.json 4 ●●●● patch | view | raw | blame | history
cmsdist/index.html 4 ●●●● patch | view | raw | blame | history
package-lock.json 555 ●●●●● patch | view | raw | blame | history
package.json 7 ●●●● patch | view | raw | blame | history
public/index.html 125 ●●●● patch | view | raw | blame | history
src/assets/images/pointMap.png patch | view | raw | blame | history
src/components/Cascader/regionCity.vue 35 ●●●● patch | view | raw | blame | history
src/main.js 88 ●●●●● patch | view | raw | blame | history
src/router/dynamicRouter.js 12 ●●●● patch | view | raw | blame | history
src/views/hotMap/components/colorList.json patch | view | raw | blame | history
src/views/hotMap/components/formatdate.js 127 ●●●●● patch | view | raw | blame | history
src/views/hotMap/components/img/icon-pause.png patch | view | raw | blame | history
src/views/hotMap/components/img/icon-play.png patch | view | raw | blame | history
src/views/hotMap/components/img/round.png patch | view | raw | blame | history
src/views/hotMap/components/selectHour.vue 102 ●●●●● patch | view | raw | blame | history
src/views/hotMap/components/timeLinePlay.vue 347 ●●●●● patch | view | raw | blame | history
src/views/hotMap/index.vue 445 ●●●●● patch | view | raw | blame | history
src/views/toCarryOutLegislativeReforms/components/locationMap.vue 119 ●●●●● patch | view | raw | blame | history
src/views/toCarryOutLegislativeReforms/reform/index.vue 26 ●●●●● patch | view | raw | blame | history
.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'
  }
}
.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",
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>
  document.addEventListener('DOMContentLoaded', recalc, false);</script></html>
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",
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",
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>
src/assets/images/pointMap.png
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>
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()
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 => {
src/views/hotMap/components/colorList.json
src/views/hotMap/components/formatdate.js
New file
@@ -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
}
src/views/hotMap/components/img/icon-pause.png
src/views/hotMap/components/img/icon-play.png
src/views/hotMap/components/img/round.png
src/views/hotMap/components/selectHour.vue
New file
@@ -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>
src/views/hotMap/components/timeLinePlay.vue
New file
@@ -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>
src/views/hotMap/index.vue
New file
@@ -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>
src/views/toCarryOutLegislativeReforms/components/locationMap.vue
New file
@@ -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>
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