├── .eslintrc.js ├── .gitignore ├── README.md ├── babel.config.js ├── demos ├── Snip20210729_36.png ├── Snip20220107_10.gif ├── Snip20220622_2.png ├── Snip20220622_3.png ├── Snip20220622_4.png ├── Snip20220622_5.png ├── Snip20220622_6.png ├── Snip20220622_7.png ├── Snip20220622_8.png ├── amapLocaTest.gif └── polylineTest.gif ├── package.json ├── public ├── EasyPlayer-lib.min.js ├── EasyPlayer.swf ├── crossdomain.xml ├── data │ ├── 4401.json │ ├── huadu.geojson │ ├── huadu_line.geojson │ ├── mapdata.json │ ├── polyline.json │ ├── something.json │ ├── table.json │ └── user.json ├── favicon.ico ├── images │ ├── cat.png │ ├── close.png │ └── map-ic.png ├── index.html └── libDecoder.wasm ├── src ├── .env.development ├── .env.production ├── App.vue ├── api │ ├── map.js │ ├── polyline.js │ ├── something.js │ ├── table.js │ └── user.js ├── assets │ ├── images │ │ ├── close.png │ │ ├── map-bg.png │ │ └── map-ic.png │ └── logo.png ├── components │ ├── bmap │ │ ├── bMarker.vue │ │ ├── bmap-jsapi-loader │ │ │ └── index.js │ │ ├── bmapgl-jsapi-loader │ │ │ └── index.js │ │ ├── gl │ │ │ ├── index.js │ │ │ └── index.vue │ │ ├── index.js │ │ ├── index.vue │ │ └── pointSelect.vue │ ├── chart │ │ ├── index.js │ │ ├── index.vue │ │ └── options │ │ │ ├── bar │ │ │ └── index.js │ │ │ ├── map │ │ │ └── index.js │ │ │ └── pie │ │ │ └── index.js │ └── map │ │ ├── index.js │ │ ├── index.vue │ │ ├── locaPoint.vue │ │ └── polyLine.vue ├── main.js ├── plugins │ └── element.js ├── router │ └── index.js ├── settings.js ├── store │ └── index.js ├── styles │ ├── box.scss │ └── index.scss ├── utils │ ├── Export2Excel.js │ ├── mock-request.js │ └── utils.js └── views │ ├── About.vue │ ├── Home.vue │ ├── amapLocaTest │ ├── index.js │ ├── index.scss │ └── index.vue │ ├── bigscreen │ ├── components │ │ ├── bottomView │ │ │ ├── index.js │ │ │ ├── index.scss │ │ │ └── index.vue │ │ ├── centerView │ │ │ ├── index.js │ │ │ ├── index.scss │ │ │ └── index.vue │ │ ├── header.vue │ │ ├── leftView │ │ │ ├── index.js │ │ │ ├── index.scss │ │ │ └── index.vue │ │ └── rightView │ │ │ ├── index.js │ │ │ ├── index.scss │ │ │ └── index.vue │ ├── index.js │ ├── index.scss │ └── index.vue │ ├── bmapGLTest │ ├── index.js │ ├── index.scss │ └── index.vue │ ├── bmapTest │ ├── index.js │ ├── index.scss │ └── index.vue │ ├── chartTest │ ├── index.js │ ├── index.scss │ └── index.vue │ ├── dynamicTableTest │ ├── index.js │ ├── index.scss │ └── index.vue │ ├── echartMapTest │ ├── index.js │ ├── index.scss │ └── index.vue │ ├── mockDataTest │ ├── index.js │ ├── index.scss │ └── index.vue │ ├── polylineTest │ ├── index.js │ ├── index.scss │ └── index.vue │ ├── somethingTest │ ├── component │ │ └── son.vue │ ├── index.js │ ├── index.scss │ └── index.vue │ └── videoCaptureTest │ ├── index.js │ ├── index.scss │ └── index.vue └── vue.config.js /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | parserOptions: { 4 | parser: 'babel-eslint', 5 | sourceType: 'module' 6 | }, 7 | env: { 8 | browser: true, 9 | node: true, 10 | es6: true 11 | }, 12 | extends: ['plugin:vue/recommended', 'eslint:recommended'], 13 | globals: { 14 | 'AMap': true, 15 | 'AMapUI': true, 16 | 'Loca': true, 17 | 'BMap': true, 18 | 'BMapGL': true, 19 | 'mapvgl': true 20 | }, 21 | // add your custom rules here 22 | // it is base on https://github.com/vuejs/eslint-config-vue 23 | rules: { 24 | 'vue/max-attributes-per-line': [2, { 25 | 'singleline': 10, 26 | 'multiline': { 27 | 'max': 1, 28 | 'allowFirstLine': false 29 | } 30 | }], 31 | 'vue/singleline-html-element-content-newline': 'off', 32 | 'vue/multiline-html-element-content-newline': 'off', 33 | 'vue/html-closing-bracket-newline': ['error', { 34 | 'singleline': 'never', 35 | 'multiline': 'never' 36 | }], 37 | 'vue/name-property-casing': ['error', 'PascalCase'], 38 | 'vue/no-v-html': 'off', 39 | 'accessor-pairs': 2, 40 | 'arrow-spacing': [2, { 41 | 'before': true, 42 | 'after': true 43 | }], 44 | 'block-spacing': [2, 'always'], 45 | 'brace-style': [2, '1tbs', { 46 | 'allowSingleLine': true 47 | }], 48 | 'camelcase': [0, { 49 | 'properties': 'always' 50 | }], 51 | 'comma-dangle': [2, 'never'], 52 | 'comma-spacing': [2, { 53 | 'before': false, 54 | 'after': true 55 | }], 56 | 'comma-style': [2, 'last'], 57 | 'constructor-super': 2, 58 | 'curly': [2, 'multi-line'], 59 | 'dot-location': [2, 'property'], 60 | 'eol-last': 2, 61 | 'eqeqeq': ['error', 'always', { 'null': 'ignore' }], 62 | 'generator-star-spacing': [2, { 63 | 'before': true, 64 | 'after': true 65 | }], 66 | 'handle-callback-err': [2, '^(err|error)$'], 67 | 'indent': [2, 2, { 68 | 'SwitchCase': 1 69 | }], 70 | 'jsx-quotes': [2, 'prefer-single'], 71 | 'key-spacing': [2, { 72 | 'beforeColon': false, 73 | 'afterColon': true 74 | }], 75 | 'keyword-spacing': [2, { 76 | 'before': true, 77 | 'after': true 78 | }], 79 | 'new-cap': [2, { 80 | 'newIsCap': true, 81 | 'capIsNew': false 82 | }], 83 | 'new-parens': 2, 84 | 'no-array-constructor': 2, 85 | 'no-caller': 2, 86 | 'no-console': 'off', 87 | 'no-class-assign': 2, 88 | 'no-cond-assign': 2, 89 | 'no-const-assign': 2, 90 | 'no-control-regex': 0, 91 | 'no-delete-var': 2, 92 | 'no-dupe-args': 2, 93 | 'no-dupe-class-members': 2, 94 | 'no-dupe-keys': 2, 95 | 'no-duplicate-case': 2, 96 | 'no-empty-character-class': 2, 97 | 'no-empty-pattern': 2, 98 | 'no-eval': 2, 99 | 'no-ex-assign': 2, 100 | 'no-extend-native': 2, 101 | 'no-extra-bind': 2, 102 | 'no-extra-boolean-cast': 2, 103 | 'no-extra-parens': [2, 'functions'], 104 | 'no-fallthrough': 2, 105 | 'no-floating-decimal': 2, 106 | 'no-func-assign': 2, 107 | 'no-implied-eval': 2, 108 | 'no-inner-declarations': [2, 'functions'], 109 | 'no-invalid-regexp': 2, 110 | 'no-irregular-whitespace': 2, 111 | 'no-iterator': 2, 112 | 'no-label-var': 2, 113 | 'no-labels': [2, { 114 | 'allowLoop': false, 115 | 'allowSwitch': false 116 | }], 117 | 'no-lone-blocks': 2, 118 | 'no-mixed-spaces-and-tabs': 2, 119 | 'no-multi-spaces': 2, 120 | 'no-multi-str': 2, 121 | 'no-multiple-empty-lines': [2, { 122 | 'max': 1 123 | }], 124 | 'no-native-reassign': 2, 125 | 'no-negated-in-lhs': 2, 126 | 'no-new-object': 2, 127 | 'no-new-require': 2, 128 | 'no-new-symbol': 2, 129 | 'no-new-wrappers': 2, 130 | 'no-obj-calls': 2, 131 | 'no-octal': 2, 132 | 'no-octal-escape': 2, 133 | 'no-path-concat': 2, 134 | 'no-proto': 2, 135 | 'no-redeclare': 2, 136 | 'no-regex-spaces': 2, 137 | 'no-return-assign': [2, 'except-parens'], 138 | 'no-self-assign': 2, 139 | 'no-self-compare': 2, 140 | 'no-sequences': 2, 141 | 'no-shadow-restricted-names': 2, 142 | 'no-spaced-func': 2, 143 | 'no-sparse-arrays': 2, 144 | 'no-this-before-super': 2, 145 | 'no-throw-literal': 2, 146 | 'no-trailing-spaces': 2, 147 | 'no-undef': 2, 148 | 'no-undef-init': 2, 149 | 'no-unexpected-multiline': 2, 150 | 'no-unmodified-loop-condition': 2, 151 | 'no-unneeded-ternary': [2, { 152 | 'defaultAssignment': false 153 | }], 154 | 'no-unreachable': 2, 155 | 'no-unsafe-finally': 2, 156 | 'no-unused-vars': [2, { 157 | 'vars': 'all', 158 | 'args': 'none' 159 | }], 160 | 'no-useless-call': 2, 161 | 'no-useless-computed-key': 2, 162 | 'no-useless-constructor': 2, 163 | 'no-useless-escape': 0, 164 | 'no-whitespace-before-property': 2, 165 | 'no-with': 2, 166 | 'one-var': [2, { 167 | 'initialized': 'never' 168 | }], 169 | 'operator-linebreak': [2, 'after', { 170 | 'overrides': { 171 | '?': 'before', 172 | ':': 'before' 173 | } 174 | }], 175 | 'padded-blocks': [2, 'never'], 176 | 'quotes': [2, 'single', { 177 | 'avoidEscape': true, 178 | 'allowTemplateLiterals': true 179 | }], 180 | 'semi': [2, 'never'], 181 | 'semi-spacing': [2, { 182 | 'before': false, 183 | 'after': true 184 | }], 185 | 'space-before-blocks': [2, 'always'], 186 | 'space-before-function-paren': [2, 'never'], 187 | 'space-in-parens': [2, 'never'], 188 | 'space-infix-ops': 2, 189 | 'space-unary-ops': [2, { 190 | 'words': true, 191 | 'nonwords': false 192 | }], 193 | 'spaced-comment': [2, 'always', { 194 | 'markers': ['global', 'globals', 'eslint', 'eslint-disable', '*package', '!', ','] 195 | }], 196 | 'template-curly-spacing': [2, 'never'], 197 | 'use-isnan': 2, 198 | 'valid-typeof': 2, 199 | 'wrap-iife': [2, 'any'], 200 | 'yield-star-spacing': [2, 'both'], 201 | 'yoda': [2, 'never'], 202 | 'prefer-const': 2, 203 | 'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0, 204 | 'object-curly-spacing': [2, 'always', { 205 | objectsInObjects: false 206 | }], 207 | 'array-bracket-spacing': [2, 'never'] 208 | } 209 | } 210 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | package-lock.json 3 | node_modules 4 | dist/ -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # vue-skill 2 | 3 | ## Project setup 4 | ``` 5 | npm install 6 | ``` 7 | 8 | ### Compiles and hot-reloads for development 9 | ``` 10 | npm run serve 11 | ``` 12 | 13 | ### Compiles and minifies for production 14 | ``` 15 | npm run build 16 | ``` 17 | 18 | ### Lints and fixes files 19 | ``` 20 | npm run lint 21 | ``` 22 | 23 | ### Customize configuration 24 | See [Configuration Reference](https://cli.vuejs.org/config/). 25 | 26 | ## 环境 27 | 28 | 平时是在`node`版本`v12.22.4`环境下运行`vue ui`开发的,`npm`版本是`6.14.14`,用的`nvm`管理版本切换,在别的版本应该也可以开发,自行尝试了。 29 | 30 | ## 例子 31 | 32 | ### 1、MockDataTest 33 | 34 | [vue本地模拟服务器请求mock数据](https://juejin.cn/post/6995147964427534373) 35 | 36 | ![](./demos/Snip20220622_3.png) 37 | 38 | ### 2、chartTest 39 | 40 | [vue项目中封装echarts的比较优雅的方式](https://juejin.cn/post/6995518429952212999) 41 | 42 | ![](./demos/Snip20220622_4.png) 43 | 44 | ### 3、dynamicTableTest 45 | 46 | [Vue + Element,记动态生成表格在一个运维项目中的应用](https://juejin.cn/post/6996102642061557773) 47 | 48 | ![](./demos/Snip20220622_2.png) 49 | 50 | ### 4、polylineTest 51 | 52 | [Vue对高德地图2.0的封装使用](https://juejin.cn/post/6998363016571912222) 53 | 54 | ![](./demos/polylineTest.gif) 55 | 56 | ### 5、amapLocaTest 57 | 58 | [高德开放平台GeoHUB初用(Vue使用高德地图Loca 2.0)](https://juejin.cn/post/7002975848152170504) 59 | 60 | ![](./demos/amapLocaTest.gif) 61 | 62 | ### 6、video-time-slider,用于IVR视频回播的时间选择插件 63 | 64 | [video-time-slider,用于IVR视频回播的时间选择插件](https://juejin.cn/post/7051500204209471501) 65 | 66 | ![](./demos/Snip20220107_10.gif) 67 | 68 | ### 7、如何快速开发一个响应式移动端页面 69 | 70 | [如何快速开发一个响应式移动端页面](https://juejin.cn/post/7052157317504040968) 71 | 72 | ![](./demos/Snip20210729_36.png) 73 | 74 | ### 8、echart地图显示测试 75 | 76 | [vue2项目中封装echarts地图比较优雅的方式](https://juejin.cn/post/7072658645296611359) 77 | 78 | ![](./demos/Snip20220622_5.png) 79 | 80 | ### 9、vue2项目中给echarts地图设置背景图和打点 81 | 82 | [vue2项目中给echarts地图设置背景图和打点](https://juejin.cn/post/7097136735963840542) 83 | 84 | ![](./demos/Snip20220622_5.png) 85 | 86 | ### 10、响应式大屏 87 | 88 | [Echarts大屏展示,实现响应式比较常用的方式](https://juejin.cn/post/7099746692295032846) 89 | 90 | ![](./demos/Snip20220622_6.png) 91 | 92 | ### 11、bmapTest 93 | 94 | [Vue2项目中对百度地图的封装使用](https://juejin.cn/post/7109381065344548901) 95 | 96 | ![](./demos/Snip20220622_8.png) 97 | 98 | ### 12、百度地图选坐标组件测试 99 | 100 | [vue2项目封装百度地图3.0拾取坐标控件](https://juejin.cn/post/7109693496453234719) 101 | 102 | ![](./demos/Snip20220622_7.png) -------------------------------------------------------------------------------- /babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | 'presets': [ 3 | '@vue/cli-plugin-babel/preset' 4 | ], 5 | 'plugins': [ 6 | [ 7 | 'component', 8 | { 9 | 'libraryName': 'element-ui', 10 | 'styleLibraryName': 'theme-chalk' 11 | } 12 | ] 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /demos/Snip20210729_36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liyoro/vue-skill/45bbb35a2b0c1a652c9d1a8a4a9b17f61410b202/demos/Snip20210729_36.png -------------------------------------------------------------------------------- /demos/Snip20220107_10.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liyoro/vue-skill/45bbb35a2b0c1a652c9d1a8a4a9b17f61410b202/demos/Snip20220107_10.gif -------------------------------------------------------------------------------- /demos/Snip20220622_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liyoro/vue-skill/45bbb35a2b0c1a652c9d1a8a4a9b17f61410b202/demos/Snip20220622_2.png -------------------------------------------------------------------------------- /demos/Snip20220622_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liyoro/vue-skill/45bbb35a2b0c1a652c9d1a8a4a9b17f61410b202/demos/Snip20220622_3.png -------------------------------------------------------------------------------- /demos/Snip20220622_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liyoro/vue-skill/45bbb35a2b0c1a652c9d1a8a4a9b17f61410b202/demos/Snip20220622_4.png -------------------------------------------------------------------------------- /demos/Snip20220622_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liyoro/vue-skill/45bbb35a2b0c1a652c9d1a8a4a9b17f61410b202/demos/Snip20220622_5.png -------------------------------------------------------------------------------- /demos/Snip20220622_6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liyoro/vue-skill/45bbb35a2b0c1a652c9d1a8a4a9b17f61410b202/demos/Snip20220622_6.png -------------------------------------------------------------------------------- /demos/Snip20220622_7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liyoro/vue-skill/45bbb35a2b0c1a652c9d1a8a4a9b17f61410b202/demos/Snip20220622_7.png -------------------------------------------------------------------------------- /demos/Snip20220622_8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liyoro/vue-skill/45bbb35a2b0c1a652c9d1a8a4a9b17f61410b202/demos/Snip20220622_8.png -------------------------------------------------------------------------------- /demos/amapLocaTest.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liyoro/vue-skill/45bbb35a2b0c1a652c9d1a8a4a9b17f61410b202/demos/amapLocaTest.gif -------------------------------------------------------------------------------- /demos/polylineTest.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liyoro/vue-skill/45bbb35a2b0c1a652c9d1a8a4a9b17f61410b202/demos/polylineTest.gif -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vue-skill", 3 | "version": "0.1.0", 4 | "private": true, 5 | "scripts": { 6 | "serve": "vue-cli-service serve", 7 | "build": "vue-cli-service build", 8 | "lint": "vue-cli-service lint" 9 | }, 10 | "dependencies": { 11 | "axios": "^0.21.4", 12 | "core-js": "^3.23.2", 13 | "gcoord": "^0.3.2", 14 | "terser-webpack-plugin": "^5.3.3", 15 | "uglifyjs-webpack-plugin": "^2.2.0", 16 | "vue": "^2.6.14", 17 | "vue-mobile-detection": "^1.0.0", 18 | "vue-router": "^3.5.4", 19 | "vuex": "^3.6.2" 20 | }, 21 | "devDependencies": { 22 | "@amap/amap-jsapi-loader": "^1.0.1", 23 | "@easydarwin/easyplayer": "^3.3.12", 24 | "@vue/cli-plugin-babel": "^4.5.17", 25 | "@vue/cli-plugin-eslint": "^4.5.17", 26 | "@vue/cli-plugin-router": "^4.5.17", 27 | "@vue/cli-plugin-vuex": "^4.5.17", 28 | "@vue/cli-service": "^4.5.17", 29 | "@vue/eslint-config-prettier": "^6.0.0", 30 | "babel-eslint": "^10.1.0", 31 | "babel-plugin-component": "^1.1.1", 32 | "echarts": "^5.3.3", 33 | "element-ui": "^2.15.9", 34 | "eslint": "^6.8.0", 35 | "eslint-plugin-prettier": "^3.4.1", 36 | "eslint-plugin-vue": "^6.2.2", 37 | "file-saver": "^2.0.5", 38 | "prettier": "^2.7.1", 39 | "sass": "^1.52.3", 40 | "sass-loader": "^8.0.2", 41 | "vue-cli-plugin-element": "^1.0.1", 42 | "vue-template-compiler": "^2.6.14", 43 | "xlsx": "^0.17.5" 44 | }, 45 | "eslintConfig": { 46 | "root": true, 47 | "env": { 48 | "node": true 49 | }, 50 | "extends": [ 51 | "plugin:vue/essential", 52 | "eslint:recommended", 53 | "@vue/prettier" 54 | ], 55 | "parserOptions": { 56 | "parser": "babel-eslint" 57 | }, 58 | "rules": {} 59 | }, 60 | "browserslist": [ 61 | "> 1%", 62 | "last 2 versions", 63 | "not dead" 64 | ] 65 | } 66 | -------------------------------------------------------------------------------- /public/EasyPlayer.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liyoro/vue-skill/45bbb35a2b0c1a652c9d1a8a4a9b17f61410b202/public/EasyPlayer.swf -------------------------------------------------------------------------------- /public/crossdomain.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/data/4401.json: -------------------------------------------------------------------------------- 1 | {"type":"FeatureCollection","features":[{"type":"Feature","properties":{"adcode":440103,"name":"荔湾区","center":[113.243038,23.124943],"centroid":[113.227791,23.088038],"childrenNum":0,"level":"district","parent":{"adcode":440100},"subFeatureIndex":0,"acroutes":[100000,440000,440100]},"geometry":{"type":"MultiPolygon","coordinates":[[[[113.242883,23.159608],[113.238157,23.156599],[113.237067,23.149034],[113.233278,23.143739],[113.229401,23.14063],[113.227693,23.138046],[113.220479,23.144505],[113.216447,23.149999],[113.215412,23.148679],[113.213716,23.141695],[113.212669,23.141098],[113.211601,23.12889],[113.209718,23.121848],[113.203715,23.121876],[113.203296,23.119775],[113.205246,23.109509],[113.206788,23.107649],[113.208142,23.099683],[113.213848,23.099797],[113.215809,23.100677],[113.216348,23.096772],[113.213099,23.095665],[113.213264,23.092682],[113.212075,23.090978],[113.212504,23.088323],[113.209585,23.086903],[113.208814,23.083551],[113.195233,23.084105],[113.193658,23.083878],[113.183415,23.077856],[113.177412,23.077558],[113.178866,23.07476],[113.177566,23.069576],[113.180606,23.06317],[113.184836,23.059647],[113.188184,23.058241],[113.195762,23.056167],[113.20334,23.050599],[113.209222,23.044476],[113.211689,23.043311],[113.225744,23.041862],[113.233674,23.042857],[113.24535,23.043368],[113.254932,23.044831],[113.256122,23.043908],[113.257807,23.046778],[113.265077,23.05057],[113.273393,23.053596],[113.276885,23.054448],[113.270893,23.060358],[113.265418,23.064363],[113.258336,23.072061],[113.252355,23.081747],[113.248533,23.093932],[113.242078,23.103276],[113.248434,23.104909],[113.25425,23.107138],[113.252708,23.11499],[113.252741,23.118852],[113.254426,23.125142],[113.254701,23.128847],[113.253247,23.128847],[113.247112,23.131871],[113.245779,23.134682],[113.243103,23.136258],[113.245019,23.137677],[113.24969,23.137862],[113.253534,23.139835],[113.251926,23.144179],[113.253302,23.145272],[113.251232,23.148707],[113.24904,23.147713],[113.245339,23.148395],[113.244689,23.151688],[113.2421,23.156117],[113.242883,23.159608]]]]}},{"type":"Feature","properties":{"adcode":440104,"name":"越秀区","center":[113.280714,23.125624],"centroid":[113.281396,23.13291],"childrenNum":0,"level":"district","parent":{"adcode":440100},"subFeatureIndex":1,"acroutes":[100000,440000,440100]},"geometry":{"type":"MultiPolygon","coordinates":[[[[113.242883,23.159608],[113.2421,23.156117],[113.244689,23.151688],[113.245339,23.148395],[113.24904,23.147713],[113.251232,23.148707],[113.253302,23.145272],[113.251926,23.144179],[113.253534,23.139835],[113.24969,23.137862],[113.245019,23.137677],[113.243103,23.136258],[113.245779,23.134682],[113.247112,23.131871],[113.253247,23.128847],[113.254701,23.128847],[113.254426,23.125142],[113.252741,23.118852],[113.252708,23.11499],[113.25425,23.107138],[113.267126,23.112704],[113.273657,23.113726],[113.281136,23.112079],[113.294629,23.106826],[113.298958,23.105818],[113.30495,23.105321],[113.311107,23.106101],[113.323058,23.109211],[113.319291,23.112136],[113.315215,23.112718],[113.315237,23.133489],[113.314202,23.14327],[113.311548,23.14337],[113.309763,23.140318],[113.307858,23.140204],[113.304939,23.147387],[113.300974,23.150311],[113.303793,23.1542],[113.308673,23.156074],[113.306239,23.159764],[113.300654,23.157366],[113.298297,23.160957],[113.296513,23.160133],[113.295576,23.156855],[113.29388,23.154754],[113.287591,23.154385],[113.283989,23.156699],[113.281368,23.156173],[113.279638,23.153817],[113.273569,23.153775],[113.270749,23.15183],[113.270915,23.148608],[113.267665,23.147529],[113.266399,23.149644],[113.262544,23.149814],[113.262092,23.147713],[113.255197,23.151773],[113.257135,23.153817],[113.26001,23.154967],[113.257058,23.157933],[113.256386,23.160616],[113.254316,23.162362],[113.253412,23.165513],[113.248775,23.167471],[113.243312,23.168735],[113.24047,23.168593],[113.242111,23.166166],[113.240525,23.161794],[113.242883,23.159608]]]]}},{"type":"Feature","properties":{"adcode":440105,"name":"海珠区","center":[113.262008,23.103131],"centroid":[113.326676,23.082002],"childrenNum":0,"level":"district","parent":{"adcode":440100},"subFeatureIndex":2,"acroutes":[100000,440000,440100]},"geometry":{"type":"MultiPolygon","coordinates":[[[[113.323058,23.109211],[113.311107,23.106101],[113.30495,23.105321],[113.298958,23.105818],[113.294629,23.106826],[113.281136,23.112079],[113.273657,23.113726],[113.267126,23.112704],[113.25425,23.107138],[113.248434,23.104909],[113.242078,23.103276],[113.248533,23.093932],[113.252355,23.081747],[113.258336,23.072061],[113.265418,23.064363],[113.270893,23.060358],[113.276885,23.054448],[113.280046,23.055116],[113.28563,23.054534],[113.294133,23.052417],[113.308265,23.050727],[113.314709,23.050727],[113.323047,23.051508],[113.327816,23.051494],[113.3487,23.044221],[113.352423,23.043638],[113.360518,23.045329],[113.36466,23.047218],[113.368691,23.052815],[113.368757,23.054789],[113.3715,23.057105],[113.380169,23.063156],[113.383682,23.068922],[113.390126,23.074291],[113.399863,23.080214],[113.409787,23.083281],[113.419711,23.087769],[113.413763,23.091561],[113.416803,23.096857],[113.414666,23.098121],[113.407176,23.09974],[113.398464,23.104412],[113.387658,23.10701],[113.381094,23.107891],[113.372117,23.107195],[113.355727,23.107138],[113.347764,23.107848],[113.342377,23.10914],[113.334105,23.109694],[113.323058,23.109211]]]]}},{"type":"Feature","properties":{"adcode":440106,"name":"天河区","center":[113.335367,23.13559],"centroid":[113.376026,23.159958],"childrenNum":0,"level":"district","parent":{"adcode":440100},"subFeatureIndex":3,"acroutes":[100000,440000,440100]},"geometry":{"type":"MultiPolygon","coordinates":[[[[113.306239,23.159764],[113.308673,23.156074],[113.303793,23.1542],[113.300974,23.150311],[113.304939,23.147387],[113.307858,23.140204],[113.309763,23.140318],[113.311548,23.14337],[113.314202,23.14327],[113.315237,23.133489],[113.315215,23.112718],[113.319291,23.112136],[113.323058,23.109211],[113.334105,23.109694],[113.342377,23.10914],[113.347764,23.107848],[113.355727,23.107138],[113.372117,23.107195],[113.381094,23.107891],[113.387658,23.10701],[113.398464,23.104412],[113.407176,23.09974],[113.414666,23.098121],[113.417156,23.103333],[113.421705,23.105434],[113.424932,23.108075],[113.429569,23.119604],[113.432807,23.124176],[113.439504,23.12358],[113.440529,23.127569],[113.443657,23.131559],[113.445056,23.134923],[113.447633,23.135959],[113.447071,23.139736],[113.44804,23.141666],[113.437345,23.143355],[113.437995,23.154286],[113.435814,23.152199],[113.433755,23.152029],[113.431155,23.154541],[113.425835,23.157891],[113.425405,23.159239],[113.415702,23.157422],[113.415702,23.158444],[113.419414,23.161737],[113.419436,23.165896],[113.421308,23.166095],[113.423125,23.170523],[113.427399,23.173063],[113.429955,23.17593],[113.429239,23.178726],[113.426265,23.177704],[113.424018,23.178783],[113.42524,23.184062],[113.422387,23.183423],[113.419292,23.185665],[113.420537,23.190277],[113.423775,23.191327],[113.421616,23.194605],[113.417464,23.196805],[113.40895,23.203389],[113.407463,23.207503],[113.398067,23.214215],[113.400634,23.217024],[113.401955,23.221592],[113.402407,23.227806],[113.405645,23.231594],[113.404995,23.241523],[113.402385,23.245183],[113.398056,23.245566],[113.390886,23.240899],[113.386601,23.238998],[113.377558,23.228941],[113.373328,23.2286],[113.368515,23.230317],[113.363922,23.228572],[113.35967,23.230147],[113.354185,23.226345],[113.349989,23.218003],[113.350771,23.213193],[113.350176,23.207433],[113.350429,23.204027],[113.348832,23.19672],[113.344856,23.192463],[113.342631,23.18663],[113.339018,23.184771],[113.336374,23.179024],[113.334513,23.178343],[113.333423,23.173546],[113.329523,23.172893],[113.326483,23.175448],[113.323774,23.174014],[113.317837,23.177491],[113.318487,23.175944],[113.316438,23.174752],[113.316295,23.172141],[113.313552,23.170182],[113.309124,23.169089],[113.309543,23.16503],[113.311867,23.162475],[113.3106,23.160701],[113.31255,23.158075],[113.310127,23.157777],[113.309697,23.15975],[113.306239,23.159764]]]]}},{"type":"Feature","properties":{"adcode":440111,"name":"白云区","center":[113.262831,23.162281],"centroid":[113.323943,23.289328],"childrenNum":0,"level":"district","parent":{"adcode":440100},"subFeatureIndex":4,"acroutes":[100000,440000,440100]},"geometry":{"type":"MultiPolygon","coordinates":[[[[113.306239,23.159764],[113.309697,23.15975],[113.310127,23.157777],[113.31255,23.158075],[113.3106,23.160701],[113.311867,23.162475],[113.309543,23.16503],[113.309124,23.169089],[113.313552,23.170182],[113.316295,23.172141],[113.316438,23.174752],[113.318487,23.175944],[113.317837,23.177491],[113.323774,23.174014],[113.326483,23.175448],[113.329523,23.172893],[113.333423,23.173546],[113.334513,23.178343],[113.336374,23.179024],[113.339018,23.184771],[113.342631,23.18663],[113.344856,23.192463],[113.348832,23.19672],[113.350429,23.204027],[113.350176,23.207433],[113.350771,23.213193],[113.349989,23.218003],[113.354185,23.226345],[113.35967,23.230147],[113.363922,23.228572],[113.368515,23.230317],[113.373328,23.2286],[113.377558,23.228941],[113.386601,23.238998],[113.390886,23.240899],[113.398056,23.245566],[113.402385,23.245183],[113.404995,23.241523],[113.405645,23.231594],[113.406934,23.233679],[113.411318,23.237339],[113.410756,23.242729],[113.409511,23.245736],[113.412309,23.246516],[113.412122,23.248346],[113.4146,23.247041],[113.41644,23.248701],[113.419336,23.248006],[113.418764,23.245027],[113.422387,23.24158],[113.425372,23.242573],[113.427708,23.239268],[113.430054,23.242162],[113.429778,23.246275],[113.425196,23.247155],[113.425284,23.250602],[113.427652,23.250885],[113.431188,23.24958],[113.434955,23.253055],[113.433887,23.255821],[113.431122,23.258119],[113.427465,23.265239],[113.430494,23.266515],[113.436806,23.266458],[113.438843,23.267834],[113.444956,23.264884],[113.446278,23.261892],[113.449373,23.258658],[113.447071,23.256927],[113.44825,23.251552],[113.444097,23.251297],[113.442126,23.249126],[113.447258,23.247921],[113.446719,23.24697],[113.44152,23.246332],[113.440407,23.245126],[113.442071,23.243722],[113.447126,23.246502],[113.449483,23.246091],[113.451741,23.243878],[113.458306,23.245098],[113.46041,23.244346],[113.464684,23.244899],[113.465433,23.243141],[113.46844,23.243382],[113.470962,23.240999],[113.469563,23.245212],[113.474938,23.245821],[113.475191,23.243836],[113.477692,23.246247],[113.480302,23.247339],[113.477769,23.248857],[113.481371,23.252715],[113.484884,23.252417],[113.491273,23.253041],[113.492462,23.254445],[113.493751,23.259211],[113.495557,23.260261],[113.495646,23.2627],[113.500933,23.264147],[113.506087,23.266884],[113.507409,23.272741],[113.510163,23.273946],[113.506594,23.277095],[113.50525,23.273209],[113.506098,23.271167],[113.504116,23.271025],[113.503202,23.277747],[113.505999,23.279179],[113.504678,23.282682],[113.502221,23.283249],[113.495921,23.286156],[113.495249,23.287248],[113.498322,23.290736],[113.5009,23.296578],[113.50416,23.299556],[113.509326,23.302732],[113.509843,23.307779],[113.508588,23.313309],[113.506451,23.317009],[113.50384,23.318894],[113.49331,23.322254],[113.490997,23.320794],[113.487396,23.326819],[113.485193,23.326862],[113.481117,23.32509],[113.475445,23.325302],[113.471821,23.326507],[113.470532,23.328123],[113.471458,23.333949],[113.470786,23.33626],[113.467746,23.335806],[113.463263,23.337153],[113.466259,23.341079],[113.46975,23.342312],[113.470455,23.345417],[113.469464,23.34648],[113.468682,23.351157],[113.47387,23.350717],[113.477097,23.355579],[113.472052,23.362226],[113.468605,23.366038],[113.468649,23.371792],[113.466501,23.374626],[113.468506,23.387039],[113.468087,23.38932],[113.461864,23.386543],[113.459991,23.38684],[113.460961,23.391757],[113.465983,23.3918],[113.468781,23.393004],[113.467514,23.396291],[113.467735,23.40108],[113.470797,23.402624],[113.47463,23.400046],[113.478595,23.40006],[113.481778,23.402001],[113.482175,23.405571],[113.486856,23.40594],[113.489698,23.407626],[113.490039,23.409991],[113.492022,23.412003],[113.498179,23.411776],[113.496538,23.414454],[113.49146,23.420092],[113.477703,23.426254],[113.474696,23.426523],[113.472989,23.428662],[113.465223,23.42488],[113.46085,23.42073],[113.456896,23.419313],[113.445011,23.418307],[113.44456,23.416423],[113.445606,23.412173],[113.444461,23.40917],[113.439526,23.40465],[113.434504,23.405812],[113.430406,23.402228],[113.428974,23.400102],[113.426066,23.399635],[113.419656,23.403106],[113.418092,23.403021],[113.412232,23.397708],[113.403685,23.393089],[113.400964,23.391148],[113.397087,23.392763],[113.395798,23.400287],[113.396624,23.410487],[113.395336,23.413221],[113.387372,23.414411],[113.386447,23.417882],[113.382515,23.420871],[113.378109,23.414553],[113.374749,23.412726],[113.367667,23.412315],[113.361675,23.412711],[113.359571,23.41053],[113.358238,23.40594],[113.356355,23.403078],[113.351586,23.400627],[113.345153,23.400457],[113.342455,23.398927],[113.338897,23.394364],[113.337817,23.387705],[113.335747,23.386755],[113.328499,23.389816],[113.323322,23.391176],[113.31896,23.391049],[113.317617,23.394378],[113.311581,23.393897],[113.308353,23.384205],[113.306194,23.384956],[113.301469,23.381881],[113.298385,23.385494],[113.296513,23.385707],[113.293164,23.380365],[113.290444,23.378083],[113.286699,23.376766],[113.287558,23.372784],[113.283559,23.368957],[113.278305,23.369028],[113.276686,23.367058],[113.273525,23.365698],[113.272225,23.360199],[113.267148,23.356897],[113.261277,23.356217],[113.260858,23.358513],[113.262301,23.363119],[113.260462,23.363062],[113.25729,23.357294],[113.257488,23.352262],[113.26033,23.349754],[113.26164,23.344963],[113.260242,23.343801],[113.250582,23.343205],[113.247641,23.341349],[113.238818,23.33969],[113.238278,23.334474],[113.237078,23.331681],[113.230943,23.332234],[113.220864,23.331185],[113.217428,23.335112],[113.213705,23.337422],[113.213859,23.346125],[113.215247,23.351667],[113.212405,23.356897],[113.20573,23.359987],[113.204695,23.359023],[113.195531,23.358328],[113.193625,23.359576],[113.18792,23.356968],[113.181818,23.355253],[113.179174,23.358541],[113.17392,23.360398],[113.171001,23.360072],[113.166551,23.357606],[113.163522,23.352673],[113.161782,23.348152],[113.157343,23.342766],[113.153631,23.336855],[113.153069,23.333014],[113.157189,23.324395],[113.157685,23.320794],[113.155294,23.311664],[113.155438,23.305553],[113.156892,23.302661],[113.155504,23.300364],[113.150018,23.299131],[113.150591,23.289971],[113.153466,23.287092],[113.16089,23.286667],[113.16274,23.28532],[113.163346,23.280924],[113.164569,23.279009],[113.173446,23.277052],[113.177753,23.271294],[113.181399,23.25697],[113.181994,23.251438],[113.181135,23.245722],[113.179185,23.237537],[113.176542,23.236587],[113.176057,23.230969],[113.178062,23.228132],[113.177478,23.220883],[113.184362,23.21525],[113.191103,23.214966],[113.19357,23.210937],[113.196236,23.208071],[113.202239,23.2038],[113.204904,23.201161],[113.209002,23.192179],[113.208969,23.186645],[113.208032,23.183452],[113.209453,23.177108],[113.207063,23.173532],[113.197899,23.169629],[113.192711,23.165186],[113.187732,23.159111],[113.186884,23.15552],[113.186851,23.148253],[113.188503,23.145187],[113.192006,23.143455],[113.203483,23.143398],[113.211656,23.142617],[113.212669,23.141098],[113.213716,23.141695],[113.215412,23.148679],[113.216447,23.149999],[113.220479,23.144505],[113.227693,23.138046],[113.229401,23.14063],[113.233278,23.143739],[113.237067,23.149034],[113.238157,23.156599],[113.242883,23.159608],[113.240525,23.161794],[113.242111,23.166166],[113.24047,23.168593],[113.243312,23.168735],[113.248775,23.167471],[113.253412,23.165513],[113.254316,23.162362],[113.256386,23.160616],[113.257058,23.157933],[113.26001,23.154967],[113.257135,23.153817],[113.255197,23.151773],[113.262092,23.147713],[113.262544,23.149814],[113.266399,23.149644],[113.267665,23.147529],[113.270915,23.148608],[113.270749,23.15183],[113.273569,23.153775],[113.279638,23.153817],[113.281368,23.156173],[113.283989,23.156699],[113.287591,23.154385],[113.29388,23.154754],[113.295576,23.156855],[113.296513,23.160133],[113.298297,23.160957],[113.300654,23.157366],[113.306239,23.159764]]]]}},{"type":"Feature","properties":{"adcode":440112,"name":"黄埔区","center":[113.450761,23.103239],"centroid":[113.50827,23.216905],"childrenNum":0,"level":"district","parent":{"adcode":440100},"subFeatureIndex":5,"acroutes":[100000,440000,440100]},"geometry":{"type":"MultiPolygon","coordinates":[[[[113.414666,23.098121],[113.416803,23.096857],[113.413763,23.091561],[113.419711,23.087769],[113.409787,23.083281],[113.399863,23.080214],[113.402473,23.074788],[113.402352,23.0728],[113.400127,23.067843],[113.40255,23.064803],[113.407022,23.062872],[113.411725,23.063525],[113.4222,23.063624],[113.437665,23.07172],[113.444251,23.074731],[113.451444,23.076208],[113.459044,23.075953],[113.468274,23.073794],[113.478617,23.069221],[113.49645,23.059619],[113.502959,23.054988],[113.506429,23.051906],[113.51491,23.039106],[113.521695,23.030213],[113.522896,23.037274],[113.526211,23.043084],[113.531994,23.050954],[113.540574,23.057957],[113.543724,23.062289],[113.545993,23.06905],[113.549,23.076024],[113.556292,23.081236],[113.562471,23.082017],[113.570336,23.084204],[113.569565,23.089572],[113.567218,23.092597],[113.564795,23.093123],[113.564178,23.097411],[113.558616,23.098121],[113.555929,23.100209],[113.552525,23.104426],[113.553153,23.10613],[113.55019,23.107706],[113.550025,23.112377],[113.552162,23.11296],[113.553241,23.115487],[113.556248,23.11702],[113.558484,23.120371],[113.558473,23.126107],[113.557206,23.129017],[113.557724,23.131388],[113.551435,23.137294],[113.550851,23.140389],[113.554992,23.147359],[113.550917,23.159977],[113.548339,23.163951],[113.547833,23.166407],[113.550862,23.172141],[113.558153,23.172566],[113.567196,23.171161],[113.570082,23.168706],[113.572428,23.169345],[113.573277,23.166989],[113.578189,23.163313],[113.580458,23.167386],[113.581086,23.178882],[113.580061,23.188901],[113.579114,23.192562],[113.574841,23.194378],[113.574708,23.195982],[113.581989,23.199558],[113.580304,23.204581],[113.583289,23.203502],[113.584522,23.207674],[113.582738,23.208284],[113.587012,23.211561],[113.582958,23.218925],[113.587122,23.229849],[113.592783,23.23558],[113.594358,23.237949],[113.598742,23.238857],[113.601672,23.240403],[113.602928,23.243282],[113.597498,23.244843],[113.599998,23.245651],[113.600174,23.24758],[113.602862,23.250899],[113.599183,23.250332],[113.596561,23.251013],[113.596936,23.253268],[113.600615,23.252701],[113.601143,23.255665],[113.599822,23.260105],[113.597123,23.265437],[113.599679,23.268302],[113.602663,23.268926],[113.601804,23.27372],[113.60078,23.283873],[113.601815,23.287149],[113.598941,23.287333],[113.596561,23.285958],[113.588135,23.286312],[113.588091,23.290212],[113.589138,23.292608],[113.595019,23.291105],[113.597057,23.292537],[113.597244,23.296975],[113.595471,23.297202],[113.593643,23.295189],[113.592662,23.296522],[113.593389,23.299698],[113.592122,23.30181],[113.594072,23.305369],[113.590889,23.315832],[113.597189,23.314018],[113.598511,23.312855],[113.5998,23.309055],[113.598401,23.306886],[113.598996,23.30527],[113.603622,23.306773],[113.607675,23.309396],[113.607521,23.312515],[113.599535,23.3145],[113.592618,23.319504],[113.590426,23.320043],[113.588774,23.326663],[113.588884,23.331299],[113.587166,23.330689],[113.584005,23.336557],[113.585106,23.338542],[113.591462,23.343602],[113.588378,23.345374],[113.589093,23.347528],[113.587496,23.34991],[113.58178,23.355069],[113.573827,23.359576],[113.573673,23.363558],[113.570281,23.367313],[113.565225,23.369227],[113.56387,23.371026],[113.557878,23.367781],[113.554353,23.367866],[113.552922,23.370927],[113.545354,23.377474],[113.542975,23.380804],[113.539318,23.383496],[113.538922,23.386968],[113.535706,23.384998],[113.532005,23.385792],[113.523182,23.390071],[113.518479,23.39469],[113.514337,23.395299],[113.514348,23.400584],[113.515064,23.404835],[113.513522,23.408022],[113.502948,23.410105],[113.498179,23.411776],[113.492022,23.412003],[113.490039,23.409991],[113.489698,23.407626],[113.486856,23.40594],[113.482175,23.405571],[113.481778,23.402001],[113.478595,23.40006],[113.47463,23.400046],[113.470797,23.402624],[113.467735,23.40108],[113.467514,23.396291],[113.468781,23.393004],[113.465983,23.3918],[113.460961,23.391757],[113.459991,23.38684],[113.461864,23.386543],[113.468087,23.38932],[113.468506,23.387039],[113.466501,23.374626],[113.468649,23.371792],[113.468605,23.366038],[113.472052,23.362226],[113.477097,23.355579],[113.47387,23.350717],[113.468682,23.351157],[113.469464,23.34648],[113.470455,23.345417],[113.46975,23.342312],[113.466259,23.341079],[113.463263,23.337153],[113.467746,23.335806],[113.470786,23.33626],[113.471458,23.333949],[113.470532,23.328123],[113.471821,23.326507],[113.475445,23.325302],[113.481117,23.32509],[113.485193,23.326862],[113.487396,23.326819],[113.490997,23.320794],[113.49331,23.322254],[113.50384,23.318894],[113.506451,23.317009],[113.508588,23.313309],[113.509843,23.307779],[113.509326,23.302732],[113.50416,23.299556],[113.5009,23.296578],[113.498322,23.290736],[113.495249,23.287248],[113.495921,23.286156],[113.502221,23.283249],[113.504678,23.282682],[113.505999,23.279179],[113.503202,23.277747],[113.504116,23.271025],[113.506098,23.271167],[113.50525,23.273209],[113.506594,23.277095],[113.510163,23.273946],[113.507409,23.272741],[113.506087,23.266884],[113.500933,23.264147],[113.495646,23.2627],[113.495557,23.260261],[113.493751,23.259211],[113.492462,23.254445],[113.491273,23.253041],[113.484884,23.252417],[113.481371,23.252715],[113.477769,23.248857],[113.480302,23.247339],[113.477692,23.246247],[113.475191,23.243836],[113.474938,23.245821],[113.469563,23.245212],[113.470962,23.240999],[113.46844,23.243382],[113.465433,23.243141],[113.464684,23.244899],[113.46041,23.244346],[113.458306,23.245098],[113.451741,23.243878],[113.449483,23.246091],[113.447126,23.246502],[113.442071,23.243722],[113.440407,23.245126],[113.44152,23.246332],[113.446719,23.24697],[113.447258,23.247921],[113.442126,23.249126],[113.444097,23.251297],[113.44825,23.251552],[113.447071,23.256927],[113.449373,23.258658],[113.446278,23.261892],[113.444956,23.264884],[113.438843,23.267834],[113.436806,23.266458],[113.430494,23.266515],[113.427465,23.265239],[113.431122,23.258119],[113.433887,23.255821],[113.434955,23.253055],[113.431188,23.24958],[113.427652,23.250885],[113.425284,23.250602],[113.425196,23.247155],[113.429778,23.246275],[113.430054,23.242162],[113.427708,23.239268],[113.425372,23.242573],[113.422387,23.24158],[113.418764,23.245027],[113.419336,23.248006],[113.41644,23.248701],[113.4146,23.247041],[113.412122,23.248346],[113.412309,23.246516],[113.409511,23.245736],[113.410756,23.242729],[113.411318,23.237339],[113.406934,23.233679],[113.405645,23.231594],[113.402407,23.227806],[113.401955,23.221592],[113.400634,23.217024],[113.398067,23.214215],[113.407463,23.207503],[113.40895,23.203389],[113.417464,23.196805],[113.421616,23.194605],[113.423775,23.191327],[113.420537,23.190277],[113.419292,23.185665],[113.422387,23.183423],[113.42524,23.184062],[113.424018,23.178783],[113.426265,23.177704],[113.429239,23.178726],[113.429955,23.17593],[113.427399,23.173063],[113.423125,23.170523],[113.421308,23.166095],[113.419436,23.165896],[113.419414,23.161737],[113.415702,23.158444],[113.415702,23.157422],[113.425405,23.159239],[113.425835,23.157891],[113.431155,23.154541],[113.433755,23.152029],[113.435814,23.152199],[113.437995,23.154286],[113.437345,23.143355],[113.44804,23.141666],[113.447071,23.139736],[113.447633,23.135959],[113.445056,23.134923],[113.443657,23.131559],[113.440529,23.127569],[113.439504,23.12358],[113.432807,23.124176],[113.429569,23.119604],[113.424932,23.108075],[113.421705,23.105434],[113.417156,23.103333],[113.414666,23.098121]]]]}},{"type":"Feature","properties":{"adcode":440113,"name":"番禺区","center":[113.364619,22.938582],"centroid":[113.406928,22.973597],"childrenNum":0,"level":"district","parent":{"adcode":440100},"subFeatureIndex":6,"acroutes":[100000,440000,440100]},"geometry":{"type":"MultiPolygon","coordinates":[[[[113.256122,23.043908],[113.254844,23.038495],[113.256959,23.03081],[113.258722,23.022058],[113.263127,23.021134],[113.258391,23.014001],[113.25393,23.012168],[113.250009,23.009042],[113.249458,23.004211],[113.250317,22.999777],[113.251804,22.998456],[113.256695,22.997788],[113.257895,22.99486],[113.251793,22.990213],[113.251011,22.988195],[113.251606,22.982624],[113.249987,22.978914],[113.249932,22.973286],[113.251892,22.970344],[113.257235,22.965739],[113.264097,22.962114],[113.267588,22.958802],[113.267049,22.95495],[113.272919,22.95748],[113.276411,22.954267],[113.281632,22.952704],[113.2878,22.949064],[113.291545,22.944913],[113.29638,22.93789],[113.298198,22.934037],[113.290179,22.930838],[113.288659,22.928549],[113.285002,22.929416],[113.282392,22.927383],[113.283615,22.923786],[113.285068,22.913733],[113.284308,22.91079],[113.284562,22.90678],[113.285961,22.901433],[113.278636,22.901091],[113.277413,22.90011],[113.277028,22.894706],[113.278834,22.891563],[113.282216,22.890084],[113.300423,22.877056],[113.305434,22.877241],[113.310677,22.878635],[113.323102,22.882617],[113.331297,22.884935],[113.339194,22.886187],[113.349537,22.890582],[113.361917,22.894208],[113.370509,22.89856],[113.380741,22.901049],[113.384541,22.901319],[113.401074,22.901177],[113.407793,22.903125],[113.415691,22.907604],[113.418224,22.908401],[113.431221,22.906538],[113.447435,22.906452],[113.46508,22.905002],[113.473495,22.901788],[113.485578,22.895844],[113.496031,22.892445],[113.502607,22.889785],[113.509524,22.885547],[113.510306,22.886656],[113.520726,22.882773],[113.530771,22.876288],[113.548516,22.868536],[113.561061,22.861921],[113.571007,22.856956],[113.571096,22.865876],[113.572616,22.874752],[113.574279,22.881124],[113.575105,22.888334],[113.574279,22.891933],[113.570545,22.898603],[113.564311,22.906922],[113.550498,22.936212],[113.546357,22.946207],[113.541797,22.959385],[113.537347,22.965085],[113.533646,22.971509],[113.529229,22.98261],[113.526189,22.995656],[113.523017,23.01133],[113.521541,23.028337],[113.521695,23.030213],[113.51491,23.039106],[113.506429,23.051906],[113.502959,23.054988],[113.49645,23.059619],[113.478617,23.069221],[113.468274,23.073794],[113.459044,23.075953],[113.451444,23.076208],[113.444251,23.074731],[113.437665,23.07172],[113.4222,23.063624],[113.411725,23.063525],[113.407022,23.062872],[113.40255,23.064803],[113.400127,23.067843],[113.402352,23.0728],[113.402473,23.074788],[113.399863,23.080214],[113.390126,23.074291],[113.383682,23.068922],[113.380169,23.063156],[113.3715,23.057105],[113.368757,23.054789],[113.368691,23.052815],[113.36466,23.047218],[113.360518,23.045329],[113.352423,23.043638],[113.3487,23.044221],[113.327816,23.051494],[113.323047,23.051508],[113.314709,23.050727],[113.308265,23.050727],[113.294133,23.052417],[113.28563,23.054534],[113.280046,23.055116],[113.276885,23.054448],[113.273393,23.053596],[113.265077,23.05057],[113.257807,23.046778],[113.256122,23.043908]]]]}},{"type":"Feature","properties":{"adcode":440114,"name":"花都区","center":[113.211184,23.39205],"centroid":[113.214795,23.442737],"childrenNum":0,"level":"district","parent":{"adcode":440100},"subFeatureIndex":7,"acroutes":[100000,440000,440100]},"geometry":{"type":"MultiPolygon","coordinates":[[[[113.472989,23.428662],[113.475974,23.432543],[113.475158,23.435121],[113.467162,23.44379],[113.462029,23.446495],[113.456973,23.447543],[113.454792,23.450064],[113.456984,23.454157],[113.463417,23.459822],[113.466534,23.463348],[113.467426,23.466832],[113.463725,23.468531],[113.460619,23.471632],[113.460057,23.478316],[113.45889,23.480808],[113.452612,23.483569],[113.449968,23.48119],[113.440518,23.481728],[113.436563,23.484064],[113.434911,23.493678],[113.437665,23.497911],[113.444747,23.506066],[113.446333,23.507113],[113.445133,23.5117],[113.440892,23.513498],[113.439394,23.515267],[113.439857,23.519075],[113.43816,23.520958],[113.440374,23.522331],[113.443657,23.519839],[113.446939,23.523633],[113.445992,23.525204],[113.443172,23.523831],[113.440253,23.524539],[113.441608,23.528431],[113.439978,23.529592],[113.435528,23.528799],[113.431221,23.53398],[113.431045,23.536655],[113.428622,23.541807],[113.425328,23.542401],[113.416924,23.546647],[113.411031,23.544651],[113.408641,23.542557],[113.399841,23.542175],[113.394642,23.544694],[113.387603,23.542514],[113.386799,23.539401],[113.385147,23.538367],[113.381094,23.54141],[113.37497,23.542896],[113.37237,23.542528],[113.366896,23.544439],[113.363647,23.542811],[113.362765,23.540632],[113.35532,23.538934],[113.353249,23.540632],[113.351101,23.550199],[113.349911,23.557827],[113.342884,23.561662],[113.335031,23.567407],[113.331539,23.568482],[113.324754,23.5681],[113.320557,23.572472],[113.324512,23.57676],[113.34034,23.578514],[113.342961,23.581627],[113.333323,23.588941],[113.331671,23.58972],[113.324181,23.589352],[113.321483,23.59013],[113.314852,23.596623],[113.311944,23.597784],[113.304641,23.597812],[113.298815,23.59934],[113.296744,23.602211],[113.28986,23.601999],[113.285212,23.60521],[113.281544,23.609497],[113.280079,23.608931],[113.278239,23.614094],[113.276565,23.616003],[113.274461,23.614292],[113.270287,23.61316],[113.266927,23.609369],[113.261905,23.607672],[113.25773,23.607686],[113.253545,23.605606],[113.248478,23.601589],[113.24296,23.606993],[113.240382,23.606243],[113.244535,23.598208],[113.243863,23.59651],[113.245901,23.591997],[113.245834,23.588234],[113.24318,23.586649],[113.240625,23.590201],[113.23743,23.590512],[113.233113,23.593256],[113.227892,23.594417],[113.227275,23.592818],[113.226988,23.58573],[113.221558,23.584032],[113.214487,23.584258],[113.212207,23.583325],[113.202239,23.576519],[113.203373,23.572515],[113.201523,23.56636],[113.200774,23.561831],[113.208087,23.555704],[113.210158,23.553015],[113.206281,23.548048],[113.211931,23.543915],[113.21268,23.540278],[113.210654,23.537164],[113.206138,23.538849],[113.20529,23.537094],[113.19987,23.531913],[113.197227,23.530583],[113.195817,23.526351],[113.191125,23.523208],[113.194209,23.519174],[113.194396,23.516881],[113.19205,23.514772],[113.175947,23.513215],[113.172103,23.512365],[113.172323,23.520292],[113.170087,23.516683],[113.1711,23.511558],[113.169437,23.513073],[113.165252,23.50884],[113.162487,23.510157],[113.159083,23.509024],[113.158401,23.505075],[113.153543,23.502838],[113.145734,23.506349],[113.147287,23.508203],[113.138101,23.50918],[113.128672,23.51262],[113.123517,23.508486],[113.119277,23.506731],[113.115333,23.510327],[113.115025,23.508076],[113.117757,23.504692],[113.115444,23.501507],[113.109033,23.497968],[113.107403,23.498987],[113.102942,23.497557],[113.101334,23.495363],[113.09304,23.49692],[113.089086,23.493027],[113.083964,23.494244],[113.077675,23.488779],[113.075516,23.484234],[113.069171,23.48439],[113.064413,23.482804],[113.061064,23.47908],[113.060304,23.475951],[113.055844,23.471958],[113.048838,23.469975],[113.042945,23.474124],[113.038683,23.474464],[113.037647,23.47159],[113.028571,23.470273],[113.026357,23.47285],[113.018052,23.469055],[113.019815,23.467639],[113.018879,23.465755],[113.014131,23.465061],[113.016764,23.461818],[113.015938,23.460586],[113.011785,23.464835],[113.004692,23.462045],[113.001343,23.461932],[112.998017,23.463135],[112.99338,23.466832],[112.987509,23.463815],[112.984469,23.464764],[112.978774,23.464792],[112.975118,23.46349],[112.975745,23.459085],[112.974666,23.454313],[112.97167,23.448166],[112.968289,23.445843],[112.965601,23.446608],[112.9619,23.444455],[112.96038,23.437869],[112.958552,23.432614],[112.958508,23.429696],[112.960204,23.426013],[112.963387,23.426424],[112.967936,23.432373],[112.970183,23.433818],[112.97417,23.434073],[112.976109,23.436099],[112.978631,23.44158],[112.98513,23.443336],[112.986419,23.444356],[112.989117,23.443294],[112.988688,23.440036],[112.982795,23.434456],[112.982685,23.431439],[112.985581,23.42896],[112.988666,23.419795],[112.99089,23.417344],[112.992697,23.417401],[112.995473,23.41104],[112.998457,23.409836],[112.998149,23.408348],[113.00109,23.406322],[113.00022,23.40526],[112.995902,23.40543],[112.993732,23.402228],[112.990571,23.402639],[112.989701,23.40057],[112.986826,23.399182],[112.986077,23.395824],[112.988236,23.393287],[112.988346,23.390114],[112.985174,23.389717],[112.983301,23.386784],[112.986198,23.385537],[112.985835,23.383567],[112.982156,23.382575],[112.980658,23.38028],[112.984777,23.377233],[112.980438,23.373804],[112.981517,23.371451],[112.983147,23.371437],[112.985747,23.369042],[112.986771,23.365599],[112.986529,23.357591],[112.989844,23.354728],[112.996926,23.355494],[113.000253,23.355111],[113.005859,23.352432],[113.010232,23.354147],[113.012578,23.352588],[113.012843,23.348733],[113.015299,23.34227],[113.018306,23.341363],[113.019462,23.344127],[113.023637,23.346437],[113.02638,23.349187],[113.027481,23.351653],[113.032702,23.356245],[113.034795,23.357393],[113.040809,23.356061],[113.043397,23.351114],[113.034189,23.339591],[113.029364,23.33582],[113.027569,23.333496],[113.025047,23.327273],[113.023472,23.324905],[113.024893,23.323275],[113.030069,23.32],[113.031215,23.321744],[113.037548,23.320071],[113.038606,23.316243],[113.036072,23.315379],[113.035059,23.313068],[113.032493,23.300889],[113.032636,23.29767],[113.035015,23.297684],[113.038033,23.292821],[113.038672,23.290637],[113.036458,23.289985],[113.042549,23.283448],[113.045809,23.281505],[113.048266,23.281576],[113.051427,23.278399],[113.051911,23.276428],[113.051394,23.269451],[113.053068,23.268231],[113.052715,23.263423],[113.05092,23.263296],[113.050744,23.259495],[113.044895,23.252219],[113.046988,23.250148],[113.053508,23.253438],[113.057584,23.251098],[113.063179,23.252048],[113.07024,23.248786],[113.079778,23.250105],[113.081651,23.25297],[113.081904,23.261736],[113.079029,23.267479],[113.076981,23.270146],[113.075339,23.276258],[113.071429,23.281987],[113.072266,23.28427],[113.081486,23.284951],[113.082609,23.286255],[113.086178,23.285291],[113.089009,23.286582],[113.090551,23.289956],[113.093051,23.291105],[113.097842,23.291275],[113.105552,23.289744],[113.110245,23.295983],[113.108416,23.301527],[113.105751,23.302732],[113.113219,23.309863],[113.114188,23.306673],[113.124696,23.307638],[113.127989,23.314542],[113.134741,23.307992],[113.140975,23.303781],[113.146207,23.30303],[113.150018,23.299131],[113.155504,23.300364],[113.156892,23.302661],[113.155438,23.305553],[113.155294,23.311664],[113.157685,23.320794],[113.157189,23.324395],[113.153069,23.333014],[113.153631,23.336855],[113.157343,23.342766],[113.161782,23.348152],[113.163522,23.352673],[113.166551,23.357606],[113.171001,23.360072],[113.17392,23.360398],[113.179174,23.358541],[113.181818,23.355253],[113.18792,23.356968],[113.193625,23.359576],[113.195531,23.358328],[113.204695,23.359023],[113.20573,23.359987],[113.212405,23.356897],[113.215247,23.351667],[113.213859,23.346125],[113.213705,23.337422],[113.217428,23.335112],[113.220864,23.331185],[113.230943,23.332234],[113.237078,23.331681],[113.238278,23.334474],[113.238818,23.33969],[113.247641,23.341349],[113.250582,23.343205],[113.260242,23.343801],[113.26164,23.344963],[113.26033,23.349754],[113.257488,23.352262],[113.25729,23.357294],[113.260462,23.363062],[113.262301,23.363119],[113.260858,23.358513],[113.261277,23.356217],[113.267148,23.356897],[113.272225,23.360199],[113.273525,23.365698],[113.276686,23.367058],[113.278305,23.369028],[113.283559,23.368957],[113.287558,23.372784],[113.286699,23.376766],[113.290444,23.378083],[113.293164,23.380365],[113.296513,23.385707],[113.298385,23.385494],[113.301469,23.381881],[113.306194,23.384956],[113.308353,23.384205],[113.311581,23.393897],[113.317617,23.394378],[113.31896,23.391049],[113.323322,23.391176],[113.328499,23.389816],[113.335747,23.386755],[113.337817,23.387705],[113.338897,23.394364],[113.342455,23.398927],[113.345153,23.400457],[113.351586,23.400627],[113.356355,23.403078],[113.358238,23.40594],[113.359571,23.41053],[113.361675,23.412711],[113.367667,23.412315],[113.374749,23.412726],[113.378109,23.414553],[113.382515,23.420871],[113.386447,23.417882],[113.387372,23.414411],[113.395336,23.413221],[113.396624,23.410487],[113.395798,23.400287],[113.397087,23.392763],[113.400964,23.391148],[113.403685,23.393089],[113.412232,23.397708],[113.418092,23.403021],[113.419656,23.403106],[113.426066,23.399635],[113.428974,23.400102],[113.430406,23.402228],[113.434504,23.405812],[113.439526,23.40465],[113.444461,23.40917],[113.445606,23.412173],[113.44456,23.416423],[113.445011,23.418307],[113.456896,23.419313],[113.46085,23.42073],[113.465223,23.42488],[113.472989,23.428662]]]]}},{"type":"Feature","properties":{"adcode":440115,"name":"南沙区","center":[113.53738,22.794531],"centroid":[113.544315,22.736609],"childrenNum":0,"level":"district","parent":{"adcode":440100},"subFeatureIndex":8,"acroutes":[100000,440000,440100]},"geometry":{"type":"MultiPolygon","coordinates":[[[[113.300423,22.877056],[113.301304,22.874951],[113.29811,22.873102],[113.301337,22.866117],[113.296325,22.862504],[113.297416,22.860214],[113.29681,22.857824],[113.29985,22.859048],[113.301018,22.855591],[113.303804,22.852077],[113.305622,22.851038],[113.309653,22.851195],[113.310788,22.83445],[113.312098,22.830395],[113.314411,22.828189],[113.318178,22.826254],[113.329369,22.82328],[113.332244,22.821687],[113.335967,22.817944],[113.344977,22.820207],[113.346078,22.818812],[113.350407,22.818072],[113.352555,22.81877],[113.352522,22.821658],[113.364263,22.823494],[113.36803,22.821587],[113.373384,22.822697],[113.375575,22.822227],[113.38398,22.816479],[113.387196,22.812594],[113.39343,22.809847],[113.39191,22.8073],[113.388749,22.804895],[113.383032,22.799302],[113.376071,22.795986],[113.374683,22.794563],[113.371852,22.796883],[113.36336,22.793538],[113.360265,22.792955],[113.357875,22.793923],[113.356542,22.792969],[113.35771,22.787034],[113.361499,22.777014],[113.365156,22.772601],[113.381457,22.761569],[113.391073,22.755704],[113.404279,22.747247],[113.412188,22.742819],[113.417883,22.740413],[113.426143,22.738007],[113.441123,22.737224],[113.447776,22.735857],[113.467977,22.728524],[113.464816,22.720963],[113.471314,22.714997],[113.491912,22.699787],[113.52338,22.679305],[113.540717,22.6662],[113.539506,22.657938],[113.533084,22.656371],[113.532974,22.654989],[113.536884,22.647523],[113.544749,22.635184],[113.561634,22.607511],[113.565137,22.603477],[113.567395,22.605929],[113.571922,22.602808],[113.574719,22.605715],[113.578552,22.604618],[113.580976,22.602095],[113.589986,22.595197],[113.594667,22.594399],[113.599623,22.594399],[113.615011,22.585291],[113.620782,22.579532],[113.63932,22.548283],[113.651612,22.515714],[113.66201,22.514787],[113.682343,22.51436],[113.70598,22.516285],[113.728186,22.521989],[113.737625,22.527665],[113.740467,22.534267],[113.716852,22.645201],[113.685284,22.717731],[113.648132,22.76174],[113.626014,22.786749],[113.612081,22.802291],[113.59763,22.817418],[113.584027,22.831305],[113.577594,22.841194],[113.571228,22.85313],[113.571007,22.856956],[113.561061,22.861921],[113.548516,22.868536],[113.530771,22.876288],[113.520726,22.882773],[113.510306,22.886656],[113.509524,22.885547],[113.502607,22.889785],[113.496031,22.892445],[113.485578,22.895844],[113.473495,22.901788],[113.46508,22.905002],[113.447435,22.906452],[113.431221,22.906538],[113.418224,22.908401],[113.415691,22.907604],[113.407793,22.903125],[113.401074,22.901177],[113.384541,22.901319],[113.380741,22.901049],[113.370509,22.89856],[113.361917,22.894208],[113.349537,22.890582],[113.339194,22.886187],[113.331297,22.884935],[113.323102,22.882617],[113.310677,22.878635],[113.305434,22.877241],[113.300423,22.877056]]]]}},{"type":"Feature","properties":{"adcode":440117,"name":"从化区","center":[113.587386,23.545283],"centroid":[113.680484,23.677286],"childrenNum":0,"level":"district","parent":{"adcode":440100},"subFeatureIndex":9,"acroutes":[100000,440000,440100]},"geometry":{"type":"MultiPolygon","coordinates":[[[[113.83256,23.619879],[113.833651,23.622708],[113.832219,23.624235],[113.825147,23.624702],[113.817437,23.623458],[113.815631,23.627842],[113.813769,23.629016],[113.817834,23.636752],[113.823462,23.638011],[113.825566,23.639878],[113.826877,23.644036],[113.828364,23.645916],[113.827769,23.648024],[113.822361,23.648844],[113.81866,23.654019],[113.818781,23.656169],[113.825951,23.656041],[113.834102,23.654811],[113.839951,23.655448],[113.842022,23.660538],[113.843916,23.669474],[113.85275,23.667763],[113.852816,23.670323],[113.844533,23.674847],[113.847837,23.679329],[113.862575,23.681082],[113.867994,23.683245],[113.875782,23.683485],[113.881851,23.685125],[113.887314,23.688094],[113.891312,23.691289],[113.894209,23.696449],[113.897579,23.700167],[113.899276,23.707446],[113.89878,23.711871],[113.900939,23.715433],[113.909993,23.715758],[113.91235,23.716507],[113.915897,23.721637],[113.920049,23.729453],[113.924191,23.729297],[113.932815,23.732689],[113.936417,23.732166],[113.937893,23.733184],[113.937606,23.735431],[113.940294,23.738144],[113.949062,23.737112],[113.952641,23.73365],[113.95588,23.732689],[113.961035,23.738201],[113.966046,23.739727],[113.970441,23.73837],[113.972864,23.739246],[113.9764,23.747259],[113.975673,23.756768],[113.979032,23.759425],[113.982987,23.760555],[113.992338,23.760908],[113.998793,23.763013],[114.000874,23.764554],[114.009356,23.773257],[114.010479,23.776195],[114.013123,23.777961],[114.017716,23.778286],[114.015733,23.772183],[114.011503,23.769823],[114.00995,23.763013],[114.014521,23.762378],[114.018211,23.762844],[114.018927,23.758139],[114.021185,23.75609],[114.023124,23.752247],[114.024897,23.752572],[114.02742,23.760117],[114.035725,23.765288],[114.035956,23.768538],[114.038456,23.771222],[114.044074,23.774288],[114.047609,23.775249],[114.058007,23.776605],[114.059957,23.77587],[114.056344,23.784036],[114.053855,23.786141],[114.046332,23.787596],[114.037201,23.793528],[114.037201,23.798317],[114.04306,23.79997],[114.047752,23.803331],[114.042939,23.80699],[114.037608,23.808035],[114.03535,23.813345],[114.038225,23.821579],[114.040318,23.824446],[114.045428,23.826833],[114.048028,23.828824],[114.052268,23.830024],[114.051916,23.832665],[114.052698,23.839923],[114.054394,23.840615],[114.055231,23.845599],[114.057765,23.846757],[114.054912,23.850372],[114.05109,23.85352],[114.051112,23.855808],[114.048821,23.85866],[114.048887,23.861738],[114.047444,23.865818],[114.047708,23.867512],[114.045032,23.870773],[114.041849,23.871507],[114.041001,23.875375],[114.043743,23.880231],[114.043633,23.884833],[114.042653,23.889872],[114.038269,23.892032],[114.036385,23.895264],[114.036209,23.901771],[114.03318,23.903732],[114.031341,23.906315],[114.031297,23.910225],[114.033665,23.914811],[114.033819,23.918876],[114.032938,23.920386],[114.03003,23.921133],[114.02818,23.922968],[114.026252,23.922897],[114.022199,23.92469],[114.017969,23.92524],[114.012572,23.929826],[114.009994,23.929741],[114.009212,23.932916],[114.005688,23.932535],[114.002295,23.929516],[113.997328,23.929135],[113.994045,23.930263],[113.984518,23.926171],[113.982116,23.929699],[113.969538,23.928542],[113.971146,23.930757],[113.96945,23.932563],[113.963414,23.928189],[113.959404,23.930221],[113.952696,23.929657],[113.946826,23.925282],[113.942519,23.925212],[113.941164,23.923561],[113.935932,23.926016],[113.936417,23.928725],[113.933531,23.929233],[113.929092,23.92785],[113.92635,23.928838],[113.921206,23.927639],[113.914564,23.924238],[113.910235,23.923561],[113.90779,23.924563],[113.904309,23.92905],[113.900697,23.929445],[113.898879,23.928443],[113.894848,23.928584],[113.892524,23.931675],[113.889208,23.928429],[113.888955,23.926058],[113.885827,23.923659],[113.880826,23.926058],[113.879824,23.930376],[113.875319,23.930475],[113.873612,23.929022],[113.865208,23.928951],[113.862377,23.927766],[113.857718,23.923829],[113.853279,23.921218],[113.848653,23.919765],[113.841526,23.91872],[113.833287,23.91522],[113.826513,23.909801],[113.817239,23.906132],[113.81356,23.902702],[113.809452,23.900613],[113.807326,23.900387],[113.803768,23.903408],[113.800243,23.902547],[113.795033,23.902801],[113.791597,23.903902],[113.78761,23.902462],[113.786629,23.899075],[113.781133,23.896294],[113.780869,23.89237],[113.777983,23.883647],[113.775317,23.87793],[113.771727,23.873977],[113.767056,23.871436],[113.764732,23.866961],[113.762078,23.863686],[113.758168,23.857488],[113.755524,23.857629],[113.749059,23.854353],[113.745545,23.858307],[113.742307,23.859154],[113.736821,23.855271],[113.733671,23.855017],[113.731303,23.857742],[113.727822,23.858166],[113.728175,23.855243],[113.724265,23.853873],[113.725509,23.857798],[113.722844,23.86041],[113.720354,23.86082],[113.718845,23.858886],[113.713525,23.8625],[113.710045,23.858688],[113.709758,23.856288],[113.713536,23.854241],[113.718063,23.843905],[113.717215,23.838709],[113.714803,23.834995],[113.716863,23.827299],[113.7202,23.825124],[113.718548,23.82076],[113.715761,23.820901],[113.706388,23.815266],[113.702445,23.81617],[113.700616,23.819531],[113.697907,23.820703],[113.693545,23.821085],[113.689679,23.825618],[113.687366,23.825731],[113.683984,23.817498],[113.684293,23.812964],[113.681396,23.812018],[113.679292,23.813769],[113.670216,23.814546],[113.666394,23.813684],[113.662429,23.817695],[113.659212,23.817512],[113.658166,23.818896],[113.653672,23.816763],[113.653628,23.818966],[113.651667,23.820139],[113.647328,23.818585],[113.640234,23.814263],[113.637789,23.811396],[113.637271,23.806255],[113.63433,23.8048],[113.632755,23.800605],[113.633714,23.797215],[113.620298,23.786819],[113.616751,23.78792],[113.615374,23.785378],[113.618469,23.785858],[113.620827,23.783923],[113.618965,23.781606],[113.615154,23.779812],[113.616145,23.776421],[113.61967,23.771279],[113.626114,23.767393],[113.62977,23.759382],[113.631599,23.752996],[113.63639,23.75024],[113.633967,23.744305],[113.630729,23.738964],[113.634242,23.733438],[113.636522,23.731968],[113.631654,23.727884],[113.63205,23.71833],[113.628052,23.716408],[113.628118,23.711701],[113.630288,23.708945],[113.63357,23.70821],[113.638197,23.704577],[113.636324,23.701792],[113.631202,23.702768],[113.6251,23.701397],[113.622589,23.699432],[113.623811,23.69471],[113.620882,23.691954],[113.61457,23.689409],[113.61413,23.687585],[113.611629,23.686186],[113.612477,23.683443],[113.615727,23.680205],[113.606375,23.673264],[113.599381,23.665487],[113.598985,23.662984],[113.597277,23.664936],[113.587243,23.669008],[113.587287,23.675229],[113.580689,23.67571],[113.573915,23.680714],[113.568045,23.679442],[113.567053,23.68333],[113.56962,23.686087],[113.568067,23.690215],[113.563518,23.691346],[113.564421,23.695502],[113.558759,23.70069],[113.54693,23.702527],[113.542909,23.701806],[113.53836,23.699107],[113.543317,23.699177],[113.545465,23.696392],[113.532677,23.689508],[113.527081,23.686143],[113.524184,23.685408],[113.521255,23.686313],[113.517917,23.685493],[113.516441,23.683104],[113.513699,23.682086],[113.510306,23.682453],[113.506958,23.68439],[113.501693,23.682793],[113.495646,23.682298],[113.491934,23.685323],[113.488541,23.684829],[113.483596,23.686695],[113.481029,23.684037],[113.477141,23.685281],[113.468704,23.690992],[113.469673,23.693],[113.469618,23.69652],[113.465796,23.700294],[113.464309,23.703107],[113.466148,23.705326],[113.464298,23.707969],[113.456962,23.710245],[113.45477,23.709962],[113.44782,23.714839],[113.443855,23.715913],[113.444296,23.720266],[113.442467,23.720224],[113.440319,23.722457],[113.44445,23.723559],[113.444538,23.725029],[113.441905,23.727036],[113.438447,23.727107],[113.430351,23.723107],[113.426044,23.726584],[113.423775,23.726782],[113.419006,23.724535],[113.404313,23.723503],[113.400997,23.724478],[113.397836,23.730569],[113.391403,23.72917],[113.384035,23.729721],[113.378351,23.73153],[113.377007,23.729735],[113.376831,23.726358],[113.37508,23.723107],[113.373284,23.722853],[113.375752,23.716309],[113.375388,23.712818],[113.372381,23.709736],[113.369363,23.709086],[113.366323,23.710288],[113.363713,23.707164],[113.362016,23.702414],[113.360717,23.696322],[113.355661,23.687006],[113.355,23.681096],[113.350594,23.675398],[113.350352,23.671779],[113.349074,23.667976],[113.347411,23.667212],[113.339921,23.666675],[113.338445,23.665727],[113.336518,23.65812],[113.334843,23.656409],[113.327959,23.655476],[113.327541,23.654132],[113.328752,23.649381],[113.328301,23.645379],[113.323708,23.643286],[113.317672,23.64388],[113.315359,23.643131],[113.308904,23.643908],[113.302857,23.64603],[113.289265,23.644361],[113.288835,23.641504],[113.299454,23.637459],[113.296513,23.632905],[113.295235,23.629469],[113.293737,23.621845],[113.290565,23.617093],[113.282821,23.61217],[113.281544,23.609497],[113.285212,23.60521],[113.28986,23.601999],[113.296744,23.602211],[113.298815,23.59934],[113.304641,23.597812],[113.311944,23.597784],[113.314852,23.596623],[113.321483,23.59013],[113.324181,23.589352],[113.331671,23.58972],[113.333323,23.588941],[113.342961,23.581627],[113.34034,23.578514],[113.324512,23.57676],[113.320557,23.572472],[113.324754,23.5681],[113.331539,23.568482],[113.335031,23.567407],[113.342884,23.561662],[113.349911,23.557827],[113.351101,23.550199],[113.353249,23.540632],[113.35532,23.538934],[113.362765,23.540632],[113.363647,23.542811],[113.366896,23.544439],[113.37237,23.542528],[113.37497,23.542896],[113.381094,23.54141],[113.385147,23.538367],[113.386799,23.539401],[113.387603,23.542514],[113.394642,23.544694],[113.399841,23.542175],[113.408641,23.542557],[113.411031,23.544651],[113.416924,23.546647],[113.425328,23.542401],[113.428622,23.541807],[113.431045,23.536655],[113.431221,23.53398],[113.435528,23.528799],[113.439978,23.529592],[113.441608,23.528431],[113.440253,23.524539],[113.443172,23.523831],[113.445992,23.525204],[113.446939,23.523633],[113.443657,23.519839],[113.440374,23.522331],[113.43816,23.520958],[113.439857,23.519075],[113.439394,23.515267],[113.440892,23.513498],[113.445133,23.5117],[113.446333,23.507113],[113.444747,23.506066],[113.437665,23.497911],[113.434911,23.493678],[113.436563,23.484064],[113.440518,23.481728],[113.449968,23.48119],[113.452612,23.483569],[113.45889,23.480808],[113.460057,23.478316],[113.460619,23.471632],[113.463725,23.468531],[113.467426,23.466832],[113.466534,23.463348],[113.463417,23.459822],[113.456984,23.454157],[113.454792,23.450064],[113.456973,23.447543],[113.462029,23.446495],[113.467162,23.44379],[113.475158,23.435121],[113.475974,23.432543],[113.472989,23.428662],[113.474696,23.426523],[113.477703,23.426254],[113.49146,23.420092],[113.496538,23.414454],[113.498179,23.411776],[113.502948,23.410105],[113.513522,23.408022],[113.515064,23.404835],[113.514348,23.400584],[113.514337,23.395299],[113.518479,23.39469],[113.523182,23.390071],[113.532005,23.385792],[113.535706,23.384998],[113.538922,23.386968],[113.539318,23.383496],[113.542975,23.380804],[113.545354,23.377474],[113.552922,23.370927],[113.554353,23.367866],[113.557878,23.367781],[113.56387,23.371026],[113.565555,23.374824],[113.56615,23.37899],[113.565831,23.382859],[113.568144,23.390369],[113.57125,23.390709],[113.576239,23.388867],[113.577253,23.390156],[113.575028,23.39588],[113.575039,23.397991],[113.576933,23.402539],[113.580061,23.40652],[113.585679,23.411606],[113.586362,23.417514],[113.587408,23.41903],[113.593643,23.422401],[113.597398,23.425617],[113.60284,23.43396],[113.605021,23.434923],[113.608997,23.434031],[113.61696,23.440759],[113.617071,23.442543],[113.621851,23.444767],[113.623085,23.446821],[113.623162,23.450121],[113.624516,23.451154],[113.629649,23.451636],[113.634132,23.454228],[113.638064,23.459043],[113.643913,23.46339],[113.650544,23.463348],[113.654564,23.462073],[113.659433,23.463334],[113.662363,23.463178],[113.66657,23.468956],[113.672,23.472552],[113.673058,23.474068],[113.673741,23.480723],[113.67504,23.485919],[113.680867,23.486146],[113.684777,23.490761],[113.683863,23.493211],[113.687377,23.496057],[113.689459,23.496042],[113.694085,23.50172],[113.697389,23.501507],[113.702313,23.503857],[113.70554,23.506674],[113.706388,23.509732],[113.712688,23.513965],[113.718603,23.51664],[113.719352,23.5179],[113.714462,23.524128],[113.714671,23.52536],[113.719738,23.532748],[113.725256,23.542797],[113.72671,23.543547],[113.731061,23.542557],[113.734817,23.543293],[113.734894,23.550524],[113.733264,23.553765],[113.733297,23.55777],[113.73203,23.559864],[113.731248,23.565553],[113.73149,23.569883],[113.734079,23.571454],[113.739498,23.572939],[113.74202,23.576335],[113.74289,23.580707],[113.745281,23.585221],[113.746371,23.589295],[113.749367,23.59279],[113.750402,23.602325],[113.756262,23.606073],[113.76525,23.609044],[113.77361,23.613896],[113.779657,23.614009],[113.78794,23.612679],[113.791167,23.611548],[113.797567,23.614179],[113.802843,23.610204],[113.815609,23.612594],[113.818803,23.612255],[113.820257,23.614462],[113.822922,23.615721],[113.828353,23.616895],[113.83256,23.619879]]]]}},{"type":"Feature","properties":{"adcode":440118,"name":"增城区","center":[113.829579,23.290497],"centroid":[113.764273,23.341055],"childrenNum":0,"level":"district","parent":{"adcode":440100},"subFeatureIndex":10,"acroutes":[100000,440000,440100]},"geometry":{"type":"MultiPolygon","coordinates":[[[[113.570336,23.084204],[113.586417,23.087797],[113.59611,23.092072],[113.601408,23.095395],[113.605395,23.100393],[113.610396,23.103787],[113.628592,23.103404],[113.640278,23.103886],[113.644398,23.10897],[113.642845,23.110872],[113.642702,23.113485],[113.646325,23.11526],[113.64844,23.117744],[113.651249,23.119292],[113.655258,23.117191],[113.657098,23.118596],[113.661228,23.117972],[113.660644,23.112093],[113.66201,23.111455],[113.670701,23.116424],[113.681891,23.117759],[113.687806,23.119789],[113.692267,23.1227],[113.701332,23.130281],[113.705342,23.13207],[113.716929,23.138912],[113.724375,23.141226],[113.7291,23.142049],[113.738595,23.141311],[113.754048,23.129571],[113.757286,23.129401],[113.77513,23.131047],[113.781023,23.13065],[113.785462,23.128421],[113.791266,23.127683],[113.80455,23.12906],[113.814673,23.127768],[113.826106,23.123125],[113.832814,23.119888],[113.837704,23.118483],[113.841075,23.116154],[113.841559,23.122245],[113.843531,23.123012],[113.843255,23.125709],[113.844687,23.12561],[113.844258,23.129812],[113.845778,23.131999],[113.8458,23.135392],[113.849082,23.14151],[113.848069,23.144392],[113.849853,23.148863],[113.856131,23.1521],[113.856726,23.155251],[113.85872,23.157252],[113.867697,23.159083],[113.869834,23.160176],[113.870924,23.16293],[113.874779,23.165357],[113.886356,23.164817],[113.890233,23.162944],[113.895674,23.164548],[113.899121,23.168621],[113.90149,23.173333],[113.90215,23.177179],[113.898494,23.178995],[113.893185,23.177264],[113.888977,23.178626],[113.885397,23.185779],[113.88564,23.188631],[113.883811,23.192647],[113.885276,23.194903],[113.886356,23.199657],[113.888294,23.20258],[113.891819,23.204226],[113.894,23.212654],[113.898174,23.21149],[113.902448,23.211576],[113.90377,23.21254],[113.904442,23.217463],[113.903814,23.219733],[113.900807,23.221195],[113.89867,23.224415],[113.8952,23.231352],[113.893185,23.237665],[113.890112,23.242133],[113.89064,23.246701],[113.894121,23.249949],[113.895167,23.253552],[113.893107,23.256076],[113.888349,23.257821],[113.884439,23.261097],[113.877202,23.264218],[113.876597,23.266132],[113.878084,23.268203],[113.88478,23.274017],[113.890288,23.282682],[113.891158,23.286667],[113.888503,23.290481],[113.891279,23.297287],[113.891984,23.303923],[113.894749,23.309197],[113.895024,23.314698],[113.898207,23.320553],[113.893636,23.321744],[113.892447,23.326309],[113.889572,23.329186],[113.889208,23.333567],[113.892381,23.338471],[113.893669,23.342242],[113.895993,23.345076],[113.901424,23.346919],[113.90497,23.346876],[113.910753,23.343602],[113.927473,23.339945],[113.935536,23.342723],[113.93927,23.34295],[113.94188,23.339889],[113.946583,23.336784],[113.95241,23.335679],[113.958876,23.332617],[113.960098,23.330136],[113.961277,23.324579],[113.958468,23.314953],[113.962202,23.312444],[113.968679,23.309991],[113.975563,23.306376],[113.977435,23.304844],[113.978228,23.301059],[113.982205,23.301229],[113.985134,23.300463],[113.988868,23.298181],[113.994585,23.298507],[113.9967,23.297457],[113.995742,23.303597],[113.99616,23.309339],[113.992933,23.313039],[113.992107,23.316116],[113.98856,23.319858],[113.988924,23.325047],[113.988373,23.327443],[113.984209,23.330491],[113.983614,23.332588],[113.986754,23.331823],[113.989948,23.333425],[113.993913,23.333155],[113.997195,23.338684],[114.001315,23.343191],[114.00094,23.346621],[113.992437,23.352163],[113.990576,23.354828],[113.990212,23.359576],[113.989199,23.362807],[113.98693,23.365854],[113.985917,23.369283],[113.981995,23.374994],[113.98118,23.377658],[113.98205,23.379359],[113.987756,23.383171],[113.992834,23.38582],[113.995984,23.38677],[113.999123,23.390397],[114.000434,23.393401],[113.999861,23.396645],[113.997394,23.399125],[113.986765,23.405614],[113.984275,23.408476],[113.984319,23.412669],[113.986467,23.416466],[113.98422,23.421225],[113.984452,23.423308],[113.987205,23.425971],[113.987954,23.431424],[113.984507,23.433138],[113.979704,23.430504],[113.975354,23.429399],[113.967974,23.431396],[113.96316,23.431028],[113.960021,23.432756],[113.958788,23.434866],[113.954029,23.440022],[113.952807,23.442897],[113.954558,23.449568],[113.953137,23.454553],[113.953468,23.463914],[113.95545,23.466039],[113.961024,23.464566],[113.969934,23.463914],[113.974494,23.464891],[113.981709,23.472156],[113.97586,23.477905],[113.97412,23.478811],[113.969009,23.47765],[113.964416,23.480156],[113.961068,23.480369],[113.955737,23.477877],[113.950306,23.478585],[113.945889,23.478372],[113.940911,23.476701],[113.938719,23.47673],[113.93298,23.479717],[113.931174,23.483059],[113.932617,23.484206],[113.938036,23.481884],[113.940878,23.483597],[113.946683,23.492517],[113.945328,23.493664],[113.939611,23.494938],[113.929973,23.494216],[113.927759,23.496453],[113.92657,23.500304],[113.923078,23.503079],[113.915875,23.502979],[113.911513,23.504169],[113.910081,23.505514],[113.906391,23.511842],[113.900344,23.514928],[113.89748,23.519075],[113.89313,23.520278],[113.890497,23.523605],[113.889098,23.527625],[113.889979,23.532012],[113.88814,23.53507],[113.883789,23.537009],[113.879229,23.537617],[113.874878,23.53899],[113.870142,23.543038],[113.867752,23.552194],[113.867994,23.555039],[113.864525,23.559638],[113.864348,23.562114],[113.86252,23.566317],[113.857574,23.56902],[113.852816,23.570576],[113.853279,23.574566],[113.856065,23.580622],[113.857971,23.58307],[113.864051,23.587385],[113.860141,23.590257],[113.858323,23.593497],[113.859216,23.59784],[113.861804,23.603895],[113.859623,23.609963],[113.84602,23.616909],[113.843542,23.617885],[113.838134,23.616979],[113.834179,23.617588],[113.83256,23.619879],[113.828353,23.616895],[113.822922,23.615721],[113.820257,23.614462],[113.818803,23.612255],[113.815609,23.612594],[113.802843,23.610204],[113.797567,23.614179],[113.791167,23.611548],[113.78794,23.612679],[113.779657,23.614009],[113.77361,23.613896],[113.76525,23.609044],[113.756262,23.606073],[113.750402,23.602325],[113.749367,23.59279],[113.746371,23.589295],[113.745281,23.585221],[113.74289,23.580707],[113.74202,23.576335],[113.739498,23.572939],[113.734079,23.571454],[113.73149,23.569883],[113.731248,23.565553],[113.73203,23.559864],[113.733297,23.55777],[113.733264,23.553765],[113.734894,23.550524],[113.734817,23.543293],[113.731061,23.542557],[113.72671,23.543547],[113.725256,23.542797],[113.719738,23.532748],[113.714671,23.52536],[113.714462,23.524128],[113.719352,23.5179],[113.718603,23.51664],[113.712688,23.513965],[113.706388,23.509732],[113.70554,23.506674],[113.702313,23.503857],[113.697389,23.501507],[113.694085,23.50172],[113.689459,23.496042],[113.687377,23.496057],[113.683863,23.493211],[113.684777,23.490761],[113.680867,23.486146],[113.67504,23.485919],[113.673741,23.480723],[113.673058,23.474068],[113.672,23.472552],[113.66657,23.468956],[113.662363,23.463178],[113.659433,23.463334],[113.654564,23.462073],[113.650544,23.463348],[113.643913,23.46339],[113.638064,23.459043],[113.634132,23.454228],[113.629649,23.451636],[113.624516,23.451154],[113.623162,23.450121],[113.623085,23.446821],[113.621851,23.444767],[113.617071,23.442543],[113.61696,23.440759],[113.608997,23.434031],[113.605021,23.434923],[113.60284,23.43396],[113.597398,23.425617],[113.593643,23.422401],[113.587408,23.41903],[113.586362,23.417514],[113.585679,23.411606],[113.580061,23.40652],[113.576933,23.402539],[113.575039,23.397991],[113.575028,23.39588],[113.577253,23.390156],[113.576239,23.388867],[113.57125,23.390709],[113.568144,23.390369],[113.565831,23.382859],[113.56615,23.37899],[113.565555,23.374824],[113.56387,23.371026],[113.565225,23.369227],[113.570281,23.367313],[113.573673,23.363558],[113.573827,23.359576],[113.58178,23.355069],[113.587496,23.34991],[113.589093,23.347528],[113.588378,23.345374],[113.591462,23.343602],[113.585106,23.338542],[113.584005,23.336557],[113.587166,23.330689],[113.588884,23.331299],[113.588774,23.326663],[113.590426,23.320043],[113.592618,23.319504],[113.599535,23.3145],[113.607521,23.312515],[113.607675,23.309396],[113.603622,23.306773],[113.598996,23.30527],[113.598401,23.306886],[113.5998,23.309055],[113.598511,23.312855],[113.597189,23.314018],[113.590889,23.315832],[113.594072,23.305369],[113.592122,23.30181],[113.593389,23.299698],[113.592662,23.296522],[113.593643,23.295189],[113.595471,23.297202],[113.597244,23.296975],[113.597057,23.292537],[113.595019,23.291105],[113.589138,23.292608],[113.588091,23.290212],[113.588135,23.286312],[113.596561,23.285958],[113.598941,23.287333],[113.601815,23.287149],[113.60078,23.283873],[113.601804,23.27372],[113.602663,23.268926],[113.599679,23.268302],[113.597123,23.265437],[113.599822,23.260105],[113.601143,23.255665],[113.600615,23.252701],[113.596936,23.253268],[113.596561,23.251013],[113.599183,23.250332],[113.602862,23.250899],[113.600174,23.24758],[113.599998,23.245651],[113.597498,23.244843],[113.602928,23.243282],[113.601672,23.240403],[113.598742,23.238857],[113.594358,23.237949],[113.592783,23.23558],[113.587122,23.229849],[113.582958,23.218925],[113.587012,23.211561],[113.582738,23.208284],[113.584522,23.207674],[113.583289,23.203502],[113.580304,23.204581],[113.581989,23.199558],[113.574708,23.195982],[113.574841,23.194378],[113.579114,23.192562],[113.580061,23.188901],[113.581086,23.178882],[113.580458,23.167386],[113.578189,23.163313],[113.573277,23.166989],[113.572428,23.169345],[113.570082,23.168706],[113.567196,23.171161],[113.558153,23.172566],[113.550862,23.172141],[113.547833,23.166407],[113.548339,23.163951],[113.550917,23.159977],[113.554992,23.147359],[113.550851,23.140389],[113.551435,23.137294],[113.557724,23.131388],[113.557206,23.129017],[113.558473,23.126107],[113.558484,23.120371],[113.556248,23.11702],[113.553241,23.115487],[113.552162,23.11296],[113.550025,23.112377],[113.55019,23.107706],[113.553153,23.10613],[113.552525,23.104426],[113.555929,23.100209],[113.558616,23.098121],[113.564178,23.097411],[113.564795,23.093123],[113.567218,23.092597],[113.569565,23.089572],[113.570336,23.084204]]]]}}]} -------------------------------------------------------------------------------- /public/data/huadu.geojson: -------------------------------------------------------------------------------- 1 | { 2 | "type": "FeatureCollection", 3 | "features": [ 4 | { 5 | "type": "Feature", 6 | "properties": {}, 7 | "geometry": { "type": "Point", "coordinates": [113.220125, 23.404326] } 8 | }, 9 | { 10 | "type": "Feature", 11 | "properties": {}, 12 | "geometry": { "type": "Point", "coordinates": [113.203846, 23.377273] } 13 | }, 14 | { 15 | "type": "Feature", 16 | "properties": {}, 17 | "geometry": { "type": "Point", "coordinates": [113.254308, 23.416872] } 18 | }, 19 | { 20 | "type": "Feature", 21 | "properties": {}, 22 | "geometry": { "type": "Point", "coordinates": [113.232409, 23.426934] } 23 | }, 24 | { 25 | "type": "Feature", 26 | "properties": {}, 27 | "geometry": { "type": "Point", "coordinates": [113.161159, 23.400596] } 28 | }, 29 | { 30 | "type": "Feature", 31 | "properties": {}, 32 | "geometry": { "type": "Point", "coordinates": [113.166207, 23.385075] } 33 | }, 34 | { 35 | "type": "Feature", 36 | "properties": {}, 37 | "geometry": { "type": "Point", "coordinates": [113.307605, 23.389929] } 38 | }, 39 | { 40 | "type": "Feature", 41 | "properties": {}, 42 | "geometry": { "type": "Point", "coordinates": [113.235221, 23.496927] } 43 | }, 44 | { 45 | "type": "Feature", 46 | "properties": {}, 47 | "geometry": { "type": "Point", "coordinates": [113.155997, 23.483681] } 48 | } 49 | ] 50 | } 51 | -------------------------------------------------------------------------------- /public/data/huadu_line.geojson: -------------------------------------------------------------------------------- 1 | { 2 | "type": "FeatureCollection", 3 | "features": [ 4 | { 5 | "type": "Feature", 6 | "properties": { 7 | "type": 3, 8 | "ratio": 0.0167, 9 | "lineWidthRatio": 0.41279069767441856 10 | }, 11 | "geometry": { 12 | "type": "LineString", 13 | "coordinates": [ 14 | [113.23233, 23.426682], 15 | [113.23233, 23.426811] 16 | ] 17 | } 18 | }, 19 | { 20 | "type": "Feature", 21 | "properties": { 22 | "type": 2, 23 | "ratio": 0.0189, 24 | "lineWidthRatio": 0.47674418604651164 25 | }, 26 | "geometry": { 27 | "type": "LineString", 28 | "coordinates": [ 29 | [113.219603, 23.404224], 30 | [113.23219, 23.427196] 31 | ] 32 | } 33 | }, 34 | { 35 | "type": "Feature", 36 | "properties": { 37 | "type": 1, 38 | "ratio": 0.035, 39 | "lineWidthRatio": 0.9447674418604651 40 | }, 41 | "geometry": { 42 | "type": "LineString", 43 | "coordinates": [ 44 | [113.219743, 23.40448], 45 | [113.254007, 23.416801] 46 | ] 47 | } 48 | }, 49 | { 50 | "type": "Feature", 51 | "properties": { 52 | "type": 0, 53 | "ratio": 0.0369, 54 | "lineWidthRatio": 1 55 | }, 56 | "geometry": { 57 | "type": "LineString", 58 | "coordinates": [ 59 | [113.219464, 23.404749], 60 | [113.307269, 23.38978] 61 | ] 62 | } 63 | }, 64 | { 65 | "type": "Feature", 66 | "properties": { 67 | "type": 4, 68 | "ratio": 0.0148, 69 | "lineWidthRatio": 0.35755813953488375 70 | }, 71 | "geometry": { 72 | "type": "LineString", 73 | "coordinates": [ 74 | [113.219911, 23.404134], 75 | [113.203825, 23.37686] 76 | ] 77 | } 78 | }, 79 | { 80 | "type": "Feature", 81 | "properties": { 82 | "type": 5, 83 | "ratio": 0.0147, 84 | "lineWidthRatio": 0.35465116279069764 85 | }, 86 | "geometry": { 87 | "type": "LineString", 88 | "coordinates": [ 89 | [113.220805, 23.404954], 90 | [113.161598, 23.400853] 91 | ] 92 | } 93 | }, 94 | { 95 | "type": "Feature", 96 | "properties": { 97 | "type": 6, 98 | "ratio": 0.0137, 99 | "lineWidthRatio": 0.32558139534883723 100 | }, 101 | "geometry": { 102 | "type": "LineString", 103 | "coordinates": [ 104 | [113.219241, 23.403518], 105 | [113.16562, 23.385269] 106 | ] 107 | } 108 | }, 109 | { 110 | "type": "Feature", 111 | "properties": { 112 | "type": 7, 113 | "ratio": 0.0136, 114 | "lineWidthRatio": 0.3226744186046511 115 | }, 116 | "geometry": { 117 | "type": "LineString", 118 | "coordinates": [ 119 | [113.219931, 23.404969], 120 | [113.156196, 23.483756] 121 | ] 122 | } 123 | }, 124 | { 125 | "type": "Feature", 126 | "properties": { 127 | "type": 1, 128 | "ratio": 0.0116, 129 | "lineWidthRatio": 0.2645348837209302 130 | }, 131 | "geometry": { 132 | "type": "LineString", 133 | "coordinates": [ 134 | [113.218782, 23.404948], 135 | [113.235571, 23.498389] 136 | ] 137 | } 138 | } 139 | ] 140 | } 141 | -------------------------------------------------------------------------------- /public/data/mapdata.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "index": 1, 4 | "adcode": 440103, 5 | "name": "荔湾区", 6 | "num": 230 7 | }, 8 | { 9 | "index": 2, 10 | "adcode": 440104, 11 | "name": "越秀区", 12 | "num": 231 13 | }, 14 | { 15 | "index": 3, 16 | "adcode": 440105, 17 | "name": "海珠区", 18 | "num": 232 19 | }, 20 | { 21 | "index": 4, 22 | "adcode": 440106, 23 | "name": "天河区", 24 | "num": 233 25 | }, 26 | { 27 | "index": 5, 28 | "adcode": 440111, 29 | "name": "白云区", 30 | "num": 234 31 | }, 32 | { 33 | "index": 6, 34 | "adcode": 440112, 35 | "name": "黄埔区", 36 | "num": 235 37 | }, 38 | { 39 | "index": 7, 40 | "adcode": 440116, 41 | "name": "萝岗区", 42 | "num": 236 43 | }, 44 | { 45 | "index": 8, 46 | "adcode": 440113, 47 | "name": "番禺区", 48 | "num": 237 49 | }, 50 | { 51 | "index": 9, 52 | "adcode": 440114, 53 | "name": "花都区", 54 | "num": 238 55 | }, 56 | { 57 | "index": 10, 58 | "adcode": 440115, 59 | "name": "南沙区", 60 | "num": 239 61 | }, 62 | { 63 | "index": 11, 64 | "adcode": 440117, 65 | "name": "从化区", 66 | "num": 240 67 | }, 68 | { 69 | "index": 12, 70 | "adcode": 440118, 71 | "name": "增城区", 72 | "num": 241 73 | } 74 | ] 75 | -------------------------------------------------------------------------------- /public/data/polyline.json: -------------------------------------------------------------------------------- 1 | { 2 | "code": 0, 3 | "msg": "成功", 4 | "result": { 5 | "data": [ 6 | [113.216516, 23.405735], 7 | [113.217037, 23.40572], 8 | [113.217809, 23.405696], 9 | [113.218491, 23.405661], 10 | [113.218458, 23.40512], 11 | [113.218405, 23.404617], 12 | [113.218421, 23.402387], 13 | [113.218356, 23.401531], 14 | [113.218635, 23.401314], 15 | [113.220127, 23.401353], 16 | [113.221178, 23.401363], 17 | [113.222616, 23.401452] 18 | ] 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /public/data/something.json: -------------------------------------------------------------------------------- 1 | { 2 | "code": 0, 3 | "msg": "成功", 4 | "result": { 5 | "test1": { 6 | "a": 1, 7 | "b": 2, 8 | "c": 3 9 | }, 10 | "test2": [ 11 | { "a": 1 }, 12 | { "b": 2 }, 13 | { "c": 3 } 14 | ], 15 | "test3": [ 16 | 1, 2, 3, 17 | [4, 5], 18 | ["a"], 19 | [6, 7, [8, 9], 10] 20 | ] 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /public/data/table.json: -------------------------------------------------------------------------------- 1 | { 2 | "code": 0, 3 | "msg": "成功", 4 | "result": { 5 | "filename": "test", 6 | "searchcols": [ 7 | { 8 | "prop": "date", 9 | "label": "日期" 10 | }, 11 | { 12 | "prop": "name", 13 | "label": "姓名" 14 | }, 15 | { 16 | "prop": "address", 17 | "label": "地址" 18 | }, 19 | { 20 | "prop": "type", 21 | "label": "类型" 22 | } 23 | ], 24 | "cols": [ 25 | { 26 | "prop": "date", 27 | "label": "日期", 28 | "sortable": true, 29 | "filters": [] 30 | }, 31 | { 32 | "prop": "name", 33 | "label": "姓名", 34 | "sortable": true, 35 | "filters": [] 36 | }, 37 | { 38 | "prop": "address", 39 | "label": "地址", 40 | "sortable": true, 41 | "filters": [] 42 | }, 43 | { 44 | "prop": "type", 45 | "label": "类型", 46 | "sortable": false, 47 | "filters": [ 48 | { "text": "旅游", "value": "旅游" }, 49 | { "text": "美食", "value": "美食" } 50 | ] 51 | } 52 | ], 53 | "data": [ 54 | { 55 | "date": "2021-08-02", 56 | "name": "小红", 57 | "address": "王子山", 58 | "type": "旅游" 59 | }, 60 | { 61 | "date": "2021-08-06", 62 | "name": "小智", 63 | "address": "探鱼", 64 | "type": "美食" 65 | }, 66 | { 67 | "date": "2021-08-03", 68 | "name": "小明", 69 | "address": "石头记", 70 | "type": "旅游" 71 | }, 72 | { 73 | "date": "2021-08-07", 74 | "name": "小伟", 75 | "address": "如轩砂锅粥", 76 | "type": "美食" 77 | }, 78 | { 79 | "date": "2021-08-04", 80 | "name": "小李", 81 | "address": "香草世界", 82 | "type": "旅游" 83 | }, 84 | { 85 | "date": "2021-08-08", 86 | "name": "小二", 87 | "address": "柴灶鱼", 88 | "type": "美食" 89 | }, 90 | { 91 | "date": "2021-08-05", 92 | "name": "小黄", 93 | "address": "融创文旅城", 94 | "type": "旅游" 95 | }, 96 | { 97 | "date": "2021-08-09", 98 | "name": "小四", 99 | "address": "佬麻雀", 100 | "type": "美食" 101 | } 102 | ] 103 | } 104 | } 105 | -------------------------------------------------------------------------------- /public/data/user.json: -------------------------------------------------------------------------------- 1 | { 2 | "code": 0, 3 | "msg": "成功", 4 | "result": {} 5 | } 6 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liyoro/vue-skill/45bbb35a2b0c1a652c9d1a8a4a9b17f61410b202/public/favicon.ico -------------------------------------------------------------------------------- /public/images/cat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liyoro/vue-skill/45bbb35a2b0c1a652c9d1a8a4a9b17f61410b202/public/images/cat.png -------------------------------------------------------------------------------- /public/images/close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liyoro/vue-skill/45bbb35a2b0c1a652c9d1a8a4a9b17f61410b202/public/images/close.png -------------------------------------------------------------------------------- /public/images/map-ic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liyoro/vue-skill/45bbb35a2b0c1a652c9d1a8a4a9b17f61410b202/public/images/map-ic.png -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 9 | 10 | 11 | 12 | 13 | vue-skill 14 | 15 | 16 |
17 | 18 | 19 | -------------------------------------------------------------------------------- /public/libDecoder.wasm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liyoro/vue-skill/45bbb35a2b0c1a652c9d1a8a4a9b17f61410b202/public/libDecoder.wasm -------------------------------------------------------------------------------- /src/.env.development: -------------------------------------------------------------------------------- 1 | # 调用方式 2 | # var env = process.env.ENV 3 | # process.env.VUE_APP_API_URL 4 | # process.env.VUE_APP_IMAGE_URL 5 | # process.env.VUE_APP_VIDEO_URL 6 | ENV = 'dev' 7 | 8 | # base api 9 | VUE_APP_API_URL = '' 10 | # 服务器地址/publicPath 11 | VUE_APP_MOCK_URL = 'http://localhost:8081/' 12 | -------------------------------------------------------------------------------- /src/.env.production: -------------------------------------------------------------------------------- 1 | # 调用方式 2 | # var env = process.env.ENV; 3 | # process.env.VUE_APP_API_URL 4 | ENV = 'pro' 5 | 6 | # base api 7 | VUE_APP_API_URL = '' 8 | VUE_APP_MOCK_URL = 'https://liyoro.github.io/' 9 | 10 | -------------------------------------------------------------------------------- /src/App.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 20 | 21 | 23 | -------------------------------------------------------------------------------- /src/api/map.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: liyoro 3 | * @since: 2022-03-07 10:47:52 4 | * @lastTime: 2022-03-08 15:39:20 5 | */ 6 | 7 | import axios from 'axios' 8 | import defaultSettings from '@/settings' 9 | const { publicPath } = defaultSettings 10 | 11 | export const mapRequest = (url) => { 12 | return axios.get(publicPath + `/data/${url}.json`) 13 | } 14 | -------------------------------------------------------------------------------- /src/api/polyline.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: liyoro 3 | * @since: 2021-08-20 09:15:21 4 | * @lastTime: 2021-08-20 09:15:54 5 | */ 6 | import mrequest from '@/utils/mock-request' 7 | import defaultSettings from '@/settings' 8 | const { publicPath } = defaultSettings 9 | 10 | export const polylineData = () => { 11 | return mrequest({ 12 | url: publicPath + `/data/polyline.json`, 13 | method: 'get' 14 | }) 15 | } 16 | -------------------------------------------------------------------------------- /src/api/something.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: liyoro 3 | * @since: 2022-03-10 15:29:23 4 | * @lastTime: 2022-03-10 15:30:26 5 | */ 6 | import mrequest from '@/utils/mock-request' 7 | import defaultSettings from '@/settings' 8 | const { publicPath } = defaultSettings 9 | 10 | export const somethingData = () => { 11 | return mrequest({ 12 | url: publicPath + `/data/something.json`, 13 | method: 'get' 14 | }) 15 | } 16 | -------------------------------------------------------------------------------- /src/api/table.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: liyoro 3 | * @Date: 2021-07-14 16:46:10 4 | * @Last Modified by: liyoro 5 | * @Last Modified time: 2021-07-14 16:52:48 6 | */ 7 | import mrequest from '@/utils/mock-request' 8 | import defaultSettings from '@/settings' 9 | const { publicPath } = defaultSettings 10 | 11 | export const tableData = () => { 12 | return mrequest({ 13 | url: publicPath + `/data/table.json`, 14 | method: 'get' 15 | }) 16 | } 17 | 18 | -------------------------------------------------------------------------------- /src/api/user.js: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | import mrequest from '@/utils/mock-request' 3 | import defaultSettings from '@/settings' 4 | const { publicPath } = defaultSettings 5 | 6 | export function login(data) { 7 | return request({ 8 | url: '/vue-admin-template/user/login', 9 | method: 'post', 10 | data 11 | }) 12 | } 13 | 14 | export function getInfo(token) { 15 | return request({ 16 | url: '/vue-admin-template/user/info', 17 | method: 'get', 18 | params: { token } 19 | }) 20 | } 21 | 22 | export function logout() { 23 | return request({ 24 | url: '/vue-admin-template/user/logout', 25 | method: 'post' 26 | }) 27 | } 28 | 29 | export const user = () => { 30 | return mrequest({ 31 | url: publicPath + `data/user.json`, 32 | method: 'get' 33 | }) 34 | } 35 | -------------------------------------------------------------------------------- /src/assets/images/close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liyoro/vue-skill/45bbb35a2b0c1a652c9d1a8a4a9b17f61410b202/src/assets/images/close.png -------------------------------------------------------------------------------- /src/assets/images/map-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liyoro/vue-skill/45bbb35a2b0c1a652c9d1a8a4a9b17f61410b202/src/assets/images/map-bg.png -------------------------------------------------------------------------------- /src/assets/images/map-ic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liyoro/vue-skill/45bbb35a2b0c1a652c9d1a8a4a9b17f61410b202/src/assets/images/map-ic.png -------------------------------------------------------------------------------- /src/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liyoro/vue-skill/45bbb35a2b0c1a652c9d1a8a4a9b17f61410b202/src/assets/logo.png -------------------------------------------------------------------------------- /src/components/bmap/bMarker.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 107 | 108 | 111 | -------------------------------------------------------------------------------- /src/components/bmap/bmap-jsapi-loader/index.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: liyoro 3 | * @since: 2021-08-23 11:11:54 4 | * @lastTime: 2022-06-16 12:16:45 5 | */ 6 | 7 | // const options = { 8 | // key: '', 9 | // version: '' 10 | // } 11 | 12 | const LoadStatus = { 13 | notload: 'notload', 14 | loading: 'loading', 15 | loaded: 'loaded', 16 | failed: 'failed' 17 | } 18 | 19 | const config = { 20 | key: '', 21 | BMap: { 22 | version: '3.0' 23 | } 24 | } 25 | 26 | const Status = { 27 | BMap: LoadStatus.notload 28 | } 29 | 30 | const load = function(options) { 31 | return new Promise((resolve, reject) => { 32 | if (Status.BMap === LoadStatus.failed) { 33 | reject('bMapPointSelect') 34 | } else if (Status.BMap === LoadStatus.notload) { 35 | // 初次加载 36 | const { key, version, type } = options 37 | if (!key) { 38 | reject('请填写key') 39 | return 40 | } 41 | if (!type) { 42 | config.type = config.BMap.type 43 | } 44 | config.key = key 45 | config.BMap.version = version || config.BMap.version 46 | Status.BMap = LoadStatus.loading 47 | 48 | const parentNode = document.body || document.head 49 | 50 | window.___onAPILoaded = function(err) { 51 | delete window.___onAPILoaded 52 | if (err) { 53 | Status.BMap = LoadStatus.failed 54 | reject(err) 55 | } else { 56 | Status.BMap = LoadStatus.loaded 57 | resolve(window.BMap) 58 | } 59 | } 60 | const script = document.createElement('script') 61 | script.type = 'text/javascript' 62 | script.src = 'https://api.map.baidu.com/api?v=' + config.BMap.version + 63 | '&ak=' + key + '&callback=___onAPILoaded' 64 | script.onerror = (e) => { 65 | Status.BMap = LoadStatus.failed 66 | reject(e) 67 | } 68 | parentNode.appendChild(script) 69 | } else { 70 | if (typeof window.BMap !== 'undefined') { 71 | resolve(window.BMap) 72 | } 73 | reject('') 74 | } 75 | }) 76 | } 77 | 78 | export default { load } 79 | -------------------------------------------------------------------------------- /src/components/bmap/bmapgl-jsapi-loader/index.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: liyoro 3 | * @since: 2021-08-23 11:11:54 4 | * @lastTime: 2021-09-02 17:08:04 5 | */ 6 | 7 | // BMapGL 8 | // export function BMPGL(ak) { 9 | // return new Promise(function(resolve, reject) { 10 | // window.init = function() { 11 | // resolve(BMapGL) 12 | // } 13 | // const script = document.createElement("script") 14 | // script.type = "text/javascript" 15 | // script.src = `http://api.map.baidu.com/api?v=1.0&type=webgl&ak=${ak}&callback=init` 16 | // script.onerror = reject 17 | // document.head.appendChild(script) 18 | // }) 19 | // } 20 | 21 | // const options = { 22 | // key: '', 23 | // version: '' 24 | // } 25 | 26 | const LoadStatus = { 27 | notload: 'notload', 28 | loading: 'loading', 29 | loaded: 'loaded', 30 | failed: 'failed' 31 | } 32 | 33 | const config = { 34 | key: '', 35 | BMapGL: { 36 | version: '3.0' 37 | } 38 | } 39 | 40 | const Status = { 41 | BMapGL: LoadStatus.notload 42 | } 43 | 44 | const load = function(options) { 45 | return new Promise((resolve, reject) => { 46 | if (Status.BMapGL === LoadStatus.failed) { 47 | reject('') 48 | } else if (Status.BMapGL === LoadStatus.notload) { 49 | // 初次加载 50 | const { key, version } = options 51 | if (!key) { 52 | reject('请填写key') 53 | return 54 | } 55 | config.key = key 56 | config.BMapGL.version = version || config.BMapGL.version 57 | Status.BMapGL = LoadStatus.loading 58 | 59 | const parentNode = document.body || document.head 60 | 61 | window.___onAPILoaded = function(err) { 62 | delete window.___onAPILoaded 63 | if (err) { 64 | Status.BMapGL = LoadStatus.failed 65 | reject(err) 66 | } else { 67 | Status.BMapGL = LoadStatus.loaded 68 | resolve(window.BMapGL) 69 | } 70 | } 71 | const script = document.createElement('script') 72 | script.type = 'text/javascript' 73 | script.src = 'https://api.map.baidu.com/api?v=' + config.BMapGL.version + 74 | '&type=webgl' + 75 | '&ak=' + key + '&callback=___onAPILoaded' 76 | script.onerror = (e) => { 77 | Status.BMapGL = LoadStatus.failed 78 | reject(e) 79 | } 80 | parentNode.appendChild(script) 81 | } 82 | }) 83 | } 84 | 85 | export default { load } 86 | -------------------------------------------------------------------------------- /src/components/bmap/gl/index.js: -------------------------------------------------------------------------------- 1 | import BMapLoader from '../bmapgl-jsapi-loader' 2 | 3 | export default { 4 | name: 'BmapGLView', 5 | props: { 6 | ak: { 7 | type: String, 8 | default: 'ZMVYYKDUVYZIHl5ygAaKyBhs7Gkg24SX' 9 | }, 10 | styleId: { 11 | type: String, 12 | default: '728e2ca5c2c75aa8b26190a9e23c4687' 13 | }, 14 | zoom: { 15 | type: Number, 16 | default: 12 17 | }, 18 | center: { 19 | type: [Array, String], 20 | default() { 21 | return [113.220218, 23.404165] 22 | } 23 | }, 24 | height: { 25 | type: Number | String, 26 | default: 520 27 | } 28 | 29 | }, 30 | computed: { 31 | mapHeight() { 32 | return isNaN(this.height) ? this.height : `${this.height}px` 33 | } 34 | }, 35 | data() { 36 | return { 37 | map: '' 38 | } 39 | }, 40 | beforeDestroy() { 41 | this.map = null 42 | }, 43 | mounted() { 44 | this.initMap() 45 | }, 46 | created() { 47 | }, 48 | methods: { 49 | initMap() { 50 | BMapLoader.load({ 51 | key: this.ak, 52 | version: '3.0' 53 | }).then((BMapGL) => { 54 | this.map = new BMapGL.Map('bmapglcontainer') 55 | const point = new BMapGL.Point(this.center[0], this.center[1]) 56 | this.map.centerAndZoom(point, this.zoom) 57 | this.map.enableScrollWheelZoom(true) 58 | 59 | // 2. 创建MapVGL图层管理器 60 | // const view = new mapvgl.View({ 61 | // map: this.map 62 | // }) 63 | // var layer = new mapvgl.PointLayer({ 64 | // color: 'rgba(50, 50, 200, 1)', 65 | // blend: 'lighter', 66 | // size: 200, 67 | // data: [{ 68 | // geometry: { 69 | // type: 'Point', 70 | // coordinates: this.center 71 | // } 72 | // }] 73 | // }) 74 | // view.addLayer(layer) 75 | }).catch(e => { 76 | console.log(e) 77 | }) 78 | } 79 | 80 | }, 81 | watch: {} 82 | } 83 | -------------------------------------------------------------------------------- /src/components/bmap/gl/index.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 14 | 15 | 21 | -------------------------------------------------------------------------------- /src/components/bmap/index.js: -------------------------------------------------------------------------------- 1 | /** 2 | * showNavigationControl 开启页面缩放、平移控件 3 | * geoCoder 开启点击地图获取坐标功能 回调 @bmap-point-select 4 | * customStyle 方便自定义弹窗的自定义样式 5 | */ 6 | import BMapLoader from './bmap-jsapi-loader' 7 | 8 | export default { 9 | name: 'BmapView', 10 | props: { 11 | ak: { 12 | type: String, 13 | default: 'ZMVYYKDUVYZIHl5ygAaKyBhs7Gkg24SX' 14 | }, 15 | styleId: { 16 | type: String, 17 | default: '41d153e7e9e7bcda9541996853046c93' 18 | }, 19 | zoom: { 20 | type: Number, 21 | default: 15 22 | }, 23 | center: { 24 | type: [Array, String], 25 | default() { 26 | return [113.22682, 23.410167] 27 | } 28 | }, 29 | height: { 30 | type: Number | String, 31 | default: 520 32 | }, 33 | showNavigationControl: { 34 | type: Boolean, 35 | default: false 36 | }, 37 | geoCoder: { 38 | type: Boolean, 39 | default: false 40 | }, 41 | customStyle: { 42 | type: Boolean, 43 | default: false 44 | } 45 | }, 46 | computed: { 47 | mapHeight() { 48 | return isNaN(this.height) ? this.height : `${this.height}px` 49 | } 50 | }, 51 | data() { 52 | return { 53 | map: '' 54 | } 55 | }, 56 | beforeDestroy() { 57 | this.map = null 58 | }, 59 | mounted() { 60 | }, 61 | created() { 62 | this.initMap() 63 | }, 64 | methods: { 65 | initMap() { 66 | BMapLoader.load({ 67 | key: this.ak, 68 | version: '3.0' 69 | }).then((BMap) => { 70 | this.map = new BMap.Map('bmapcontainer') 71 | const point = new BMap.Point(this.center[0], this.center[1]) 72 | this.map.centerAndZoom(point, this.zoom) 73 | // 开启鼠标滚轮缩放 74 | this.map.enableScrollWheelZoom(true) 75 | this.map.setMapStyleV2({ 76 | styleId: this.styleId 77 | }) 78 | // 左上角,添加默认缩放平移控件 79 | if (this.showNavigationControl) { 80 | const top_left_navigation = new BMap.NavigationControl() 81 | this.map.addControl(top_left_navigation) 82 | } 83 | // 地图选点 84 | if (this.geoCoder) { 85 | const geoc = new BMap.Geocoder() 86 | this.map.addEventListener('click', (e) => { 87 | const pt = e.point 88 | const respoint = [pt.lng, pt.lat] 89 | geoc.getLocation(pt, (res) => { 90 | if (res) { 91 | this.$emit('bmap-point-select', { point: respoint, address: res.address }) 92 | } else { 93 | this.$emit('bmap-point-select', { point: respoint }) 94 | } 95 | }) 96 | }) 97 | } 98 | this.$emit('bmap-ready', this.map) 99 | }).catch(e => { 100 | console.log(e) 101 | }) 102 | } 103 | }, 104 | watch: { 105 | center() { 106 | if (this.map) { 107 | const point = new BMap.Point(this.center[0], this.center[1]) 108 | this.map.setCenter(point) 109 | } 110 | } 111 | } 112 | } 113 | -------------------------------------------------------------------------------- /src/components/bmap/index.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 14 | 15 | 20 | 21 | 57 | -------------------------------------------------------------------------------- /src/components/bmap/pointSelect.vue: -------------------------------------------------------------------------------- 1 | /** 2 | * 百度地图坐标选点组件 3 | * 4 | */ 5 | 35 | 36 | 81 | 82 | 120 | -------------------------------------------------------------------------------- /src/components/chart/index.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: liyoro 3 | * @since: 2021-08-11 17:28:11 4 | * @lastTime: 2021-08-11 17:42:58 5 | */ 6 | const modulesFiles = require.context('./options', true, /index.js$/) 7 | let modules = {} 8 | modulesFiles.keys().forEach(item => { 9 | modules = Object.assign({}, modules, modulesFiles(item).default) 10 | }) 11 | export default modules 12 | -------------------------------------------------------------------------------- /src/components/chart/index.vue: -------------------------------------------------------------------------------- 1 | 6 | 13 | 18 | 163 | 165 | -------------------------------------------------------------------------------- /src/components/chart/options/bar/index.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: liyoro 3 | * @since: 2021-05-24 17:34:27 4 | * @lastTime: 2021-12-28 15:05:19 5 | */ 6 | const testBar = (data) => { 7 | const defaultConfig = { 8 | xAxis: { 9 | type: 'category', 10 | data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] 11 | }, 12 | yAxis: { 13 | type: 'value' 14 | }, 15 | series: [{ 16 | data: [120, 200, 150, 80, 70, 110, 130], 17 | type: 'bar' 18 | }] 19 | } 20 | 21 | const opt = Object.assign({}, defaultConfig) 22 | return opt 23 | } 24 | 25 | const testBar2 = (data) => { 26 | const defaultConfig = { 27 | color: ['#61C77E'], 28 | title: { 29 | text: '调阅次数', 30 | textStyle: { 31 | color: '#000000', 32 | fontSize: 14 33 | } 34 | }, 35 | grid: { 36 | left: '1%', 37 | right: '2%', 38 | bottom: '3%', 39 | containLabel: true 40 | }, 41 | tooltip: { 42 | trigger: 'axis', 43 | axisPointer: { 44 | type: 'line', 45 | lineStyle: { 46 | color: '#61C77E' 47 | } 48 | }, 49 | textStyle: { 50 | color: 'black', 51 | fontSize: 14 52 | }, 53 | formatter: '{b}: {c} 次' 54 | }, 55 | xAxis: { 56 | type: 'category', 57 | axisLabel: { 58 | fontSize: 12, 59 | color: 'rgba(0, 0, 0, 0.65)', 60 | margin: 12 61 | }, 62 | axisLine: { 63 | lineStyle: { 64 | color: ['#E8E8E8'] 65 | } 66 | }, 67 | data: ['1月', '2月', '3月', '4月', '5月', '6月', '7月'] 68 | }, 69 | yAxis: { 70 | splitLine: { 71 | lineStyle: { 72 | color: ['#E8E8E8'], 73 | type: 'dotted' 74 | } 75 | }, 76 | axisTick: { 77 | show: false 78 | }, 79 | axisLine: { 80 | show: false 81 | }, 82 | axisLabel: { 83 | fontSize: 12, 84 | color: 'rgba(0, 0, 0, 0.65)' 85 | } 86 | }, 87 | series: [ 88 | { 89 | name: '调阅次数', 90 | type: 'bar', 91 | barWidth: '20', 92 | data: [220, 182, 191, 234, 290, 330, 310] 93 | } 94 | ] 95 | } 96 | const opt = Object.assign({}, defaultConfig) 97 | return opt 98 | } 99 | 100 | export default { 101 | testBar, 102 | testBar2 103 | } 104 | -------------------------------------------------------------------------------- /src/components/chart/options/map/index.js: -------------------------------------------------------------------------------- 1 | // import echarts from 'echarts' 2 | import * as echarts from 'echarts' 3 | import mapbg from '@/assets/images/map-bg.png' 4 | 5 | const getSimpleMap = (jsonMap, data, config) => { 6 | if (!echarts.getMap(jsonMap.mark)) { 7 | echarts.registerMap(jsonMap.mark, jsonMap.json) 8 | } 9 | const convertData = (data) => { 10 | console.log(data) 11 | var res = [] 12 | for (var i = 0; i < data.length; i++) { 13 | const mapData = data[i].hoverObj 14 | const center = data[i].mapProperty.center 15 | 16 | if (center && mapData) { 17 | res.push({ 18 | name: mapData.name, 19 | value: center.concat(mapData.num) 20 | }) 21 | } 22 | } 23 | return res 24 | } 25 | const defaultConfig = { 26 | tooltip: { 27 | // 窗口外框 28 | trigger: 'item', 29 | padding: 0, 30 | borderWidth: 0, 31 | borderColor: '#FFFFFF', 32 | backgroundColor: '#FFFFFF', 33 | formatter: (params) => { 34 | const { data } = params 35 | const str = `
37 |
38 | ${data.name} 39 |
40 |
41 |
42 |
43 |
区号:
44 |
${data.hoverObj == null ? '' : data.hoverObj.adcode}
45 |
46 |
47 |
48 |
` 49 | return str 50 | } 51 | }, 52 | geo: { 53 | map: jsonMap.mark, 54 | type: 'map', 55 | layoutCenter: ['50%', '50%'], 56 | layoutSize: '150%', 57 | zoom: 0.65, 58 | roam: false, 59 | // 样式一 60 | // itemStyle: { 61 | // normal: { 62 | // areaColor: 'rgba(13, 110, 191, 1)', 63 | // shadowColor: 'rgba(13, 110, 191, 0.5)', 64 | // shadowOffsetX: 6, 65 | // shadowOffsetY: 12 66 | // } 67 | // } 68 | // 样式二 69 | itemStyle: { 70 | normal: { 71 | borderColor: '#AEF3FF', 72 | borderWidth: 2, 73 | areaColor: { 74 | image: mapbg, // 75 | repeat: 'repeat' // // 是否平铺,可以是 'repeat-x', 'repeat-y', 'no-repeat' 76 | }, 77 | shadowColor: 'rgba(13, 110, 191, 0.5)', 78 | shadowOffsetX: 6, 79 | shadowOffsetY: 12 80 | } 81 | } 82 | }, 83 | series: [ 84 | { 85 | type: 'map', 86 | map: jsonMap.mark, // 自定义扩展图表类型 87 | zoom: 0.65, // 缩放 88 | animationDuration: 1200, 89 | // 点击选中后的效果 90 | select: { 91 | label: { 92 | color: '#FFFFFF', 93 | fontSize: 12, 94 | fontWeight: 400 95 | }, 96 | // 清除点击选中后的背景色 97 | itemStyle: { 98 | color: null 99 | } 100 | }, 101 | // 样式一 102 | // itemStyle: { 103 | // // 地图样式 104 | // normal: { 105 | // borderColor: '#FFFFFF', 106 | // borderWidth: 3, 107 | // areaColor: 'rgba(201, 229, 255, 1)' 108 | // } 109 | // }, 110 | // 样式二 111 | itemStyle: { 112 | // 地图样式 113 | normal: { 114 | borderColor: '#AEF3FF', 115 | borderWidth: 2, 116 | areaColor: { 117 | image: mapbg, // 118 | repeat: 'repeat' // // 是否平铺,可以是 'repeat-x', 'repeat-y', 'no-repeat' 119 | } 120 | } 121 | }, 122 | // 样式一 123 | // label: { 124 | // show: true, 125 | // color: '#666666', 126 | // fontSize: 12, 127 | // fontWeight: 400 128 | // }, 129 | // 样式二 130 | label: { 131 | show: true, 132 | color: '#FFFFFF', 133 | fontSize: 12, 134 | fontWeight: 400 135 | }, 136 | emphasis: { 137 | // 鼠标移入动态的时候显示的默认样式 138 | label: { 139 | show: true, 140 | color: '#FFFFFF', 141 | fontSize: 15, 142 | fontWeight: 600 143 | }, 144 | itemStyle: { 145 | areaColor: 'rgba(102, 182, 255, 0.7)', 146 | borderColor: '#FFFFFF', 147 | borderWidth: 2 148 | } 149 | }, 150 | layoutCenter: ['50%', '50%'], 151 | layoutSize: '150%', 152 | data: data 153 | }, 154 | { 155 | type: 'effectScatter', 156 | coordinateSystem: 'geo', 157 | symbol: 'image://data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAABhdJREFUaEPtWW9sU1UU/51XCPuAMfR1DPGDiUFJGAETiFtvUYMoMr4YSdZXEPAvGhVRENQYjRj0A4LoUBMV/wK6vjYR/SKKICL0dTNAhDASFE1MkADrG/7BZML6jrnte91r147XrgMxu8mS3XvPPb/zu+fcc899JVzijS5x+zFE4GJ7cMgD/ysPpHZHGmgYN8PCTQDqiFDHwFkCTnLmj3YRrF1QhifVxo//rAb5qoTQaUNbaBEeBqPBm1F0DEDLiWPp9fXh+Flva4pLDYhAyojMIFjLAZpViREE7LfAqwIi9lkl6+WaigmcTkaWWMwtecCEA2C0K4RDacvq6EHPITk/DMMm+hSl3mJMBKEBjMnudQqwdJTQX6uEREUEupLanczYnG88bUh3p5eNnh4/058hp3Y2j/TV+NaBeVG+nNKkitYvyyVRNgHT0JoBxHJAjBSIbldF1CgH3DQiAsyfgxBw1lmEKbVBfX85esoi8Pfe+Vd0nz23F8BYG+S4KvQrCwGP75wbqKlJj2em+kycEnd0d/uOjJ3emiqUNQ3tN0cfAd/6hT590Ah0JsIrFaLnczuWxvjaG/Qf3YCmoclYfqyEES2q0B93z3Xu1q5VfDiS08n8Qm0ottIrCc8e+H33vFFpX1oeyszuM3hxQMTedAOljPBJAo3uD5zBpwIiVlew7hECveGM9TDG1YX0n72Q8EzA3BPRoHA0o5T5azUUm5lnREJbT4RHXWPbmLM7S4TxAHLyzHg9ENKX5HkuEd4Goluz8vSQPxh9q7oEDO1dAPfZBNaroVguTFKJ8Hwi2pQDJHyoBvV78gxMah+AcbczxswLAqFYLpOZiXALiGxSvEUVsTnVJiAP7xRb6YOq0N9xALoMbSMDC+zdftkf1J8qBt6V1FYz48mMHLDJL/SFjpxpaA8AeNvuH1SFnndXlCLjPYRc2cJSrKm1jfF9LvADACbJfuFc3oFta56iWIrcCNnyjOx0zcm6KSD0MdX2ADsKVaHnETcNreRcoRH9yZajx9Hr2QNdSa2TOXvpjFCUMSMbW0+6PJALL1KUyf7G1oNFQ6ht7iS2LOkt2fapQp/qyJ1pm1v3j2WdsMMw5Q/qtdX2wB4AoYxSxm1qSN/WSyDyHsD32v24KvRwMXDT0OQNLm9yeQreV0U0mxQAmAltJghf2d2EKvRp1SWQl0VohSqia3Pge7T7oWCD07eKXEaFlyAsLFKn6TKzZQkYkeUAr8ly65vFSpHxHEL5BtA3qojOcCs1DW07APeY7P9iy1wN4BaX/A5V6O6+JLAD4JulTLENGDABs615Aiylo1cRhQoLuJSh/UTAuP5cz8DRgNCvyScfEQAncmOKVa82xg9XNYSybnbFMOEVNagvLwQxDU3WOq+WAF+qFqn7zaS2Fown7DUlz1AxnZ5DyCaQK6Vlrvaxr2FU6JNfCxX/9V1zbTf56n0KT5BzaYsO13C647Ib452FsqcT865KU7qdAKc+CqtCj3vZ/exxKbOZRqQd4Ouzy3itKmIrylSRJ24a4TUA2Z6k71UR9fiuzqopm0DK0BYS8JFtRTcpSkOpvH8+Yl3Ze6EdQE1mO4C7AkLfeL517vmyCdihlMs4RLTZH4xm6qByW1cysomZ59vr+mQmL/oqIpAymu8gKJ86AMz8XCAUe9ELoCOTSoSfJaJVOR2w5gREfEs5OioKoV4D+tT/ng9f4bu62PvAK5GKPOAoNw3tCwBNdv84KUrT+c6DHfdbXe/qrarQZ3s1uFBuQAT+MJrHnYOy1XV5/TBCUWa5Cz03oF2wyU8n19mH9uhwWE2Xi/jRi0JAgnYltSZmSE84zVCFni36CpppaPK2Fc4wEWb7g7r0RsVtQB5wUDPfRntTq0yHOwIFtU7K0LaTq1aqJGUWY1kVAhlPGNpiBl7P7a7ryeh+cmZDp+8XjUpdUDUC2XCKPMPML+WMIVqW+Z95XW/Y0NP+YHR1pQZX9RAXM6JP3e8SKqdM9kqwqh5wQIuRGAzjJd6gEJCK3SQGy/hBJSCVy98QeizLX863Tq+h40oW5S75b8kPWghdKJpDBC7UTpfCGfLAxfbAv/mAaE9adPIDAAAAAElFTkSuQmCC', 158 | symbolSize: [16, 16], 159 | // symbolOffset: [], 160 | label: { 161 | normal: { 162 | show: true, 163 | offset: [0, -18], 164 | textStyle: { 165 | color: '#fff', 166 | fontSize: 12, 167 | fontWeight: 500 168 | }, 169 | formatter(value) { 170 | return '{a|' + value.data.value[2] + '}' 171 | }, 172 | rich: { 173 | a: { 174 | color: '#FFFFFF', 175 | backgroundColor: '#06406A', 176 | width: 28, 177 | height: 16, 178 | lineHeight: 16, 179 | align: 'center', 180 | borderWidth: 1, 181 | borderColor: '#79D6FE', 182 | borderRadius: 2, 183 | padding: [0, 4, 0, 4] 184 | } 185 | } 186 | } 187 | }, 188 | itemStyle: { 189 | normal: { 190 | color: 'rgba(255, 178, 76, 1)' 191 | } 192 | }, 193 | data: convertData(data), 194 | showEffectOn: 'render', 195 | rippleEffect: { 196 | brushType: 'stroke' 197 | }, 198 | hoverAnimation: true, 199 | zlevel: 9 200 | } 201 | ] 202 | } 203 | const opt = Object.assign({}, defaultConfig, config) 204 | const { legend, tooltip, series, geo, grid } = opt 205 | const chartOpt = { 206 | grid, 207 | legend, 208 | tooltip, 209 | geo, 210 | series 211 | } 212 | return chartOpt 213 | } 214 | 215 | export default { 216 | getSimpleMap 217 | } 218 | -------------------------------------------------------------------------------- /src/components/chart/options/pie/index.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: liyoro 3 | * @since: 2021-12-15 17:41:38 4 | * @lastTime: 2021-12-16 09:23:49 5 | */ 6 | import 'echarts/lib/chart/pie' 7 | 8 | const getPieChart = (data, color) => { 9 | const defaultConfig = { 10 | backgroundColor: '#fff', 11 | tooltip: { 12 | show: true 13 | }, 14 | color: color, 15 | series: [ 16 | { 17 | type: 'pie', 18 | radius: ['68%', '90%'], 19 | center: ['50%', '50%'], 20 | hoverAnimation: true, 21 | z: 10, 22 | itemStyle: { 23 | normal: { 24 | borderWidth: 4, 25 | borderColor: '#fff' 26 | } 27 | }, 28 | label: { 29 | show: false 30 | }, 31 | data: data, 32 | labelLine: { 33 | show: false 34 | } 35 | } 36 | ] 37 | } 38 | 39 | const opt = Object.assign({}, defaultConfig) 40 | const { grid, tooltip, xAxis, yAxis, title, series } = opt 41 | const chartOpt = { 42 | color, 43 | grid, 44 | tooltip, 45 | xAxis, 46 | yAxis, 47 | title, 48 | series 49 | } 50 | return chartOpt 51 | } 52 | 53 | export default { getPieChart } 54 | -------------------------------------------------------------------------------- /src/components/map/index.js: -------------------------------------------------------------------------------- 1 | import AMapLoader from '@amap/amap-jsapi-loader' 2 | 3 | export default { 4 | name: 'AmapView', 5 | props: { 6 | amapKey: { 7 | type: String, 8 | default: '6411e510973dc722ce416a298588ae4e' 9 | }, 10 | styleId: { 11 | type: String, 12 | default: '728e2ca5c2c75aa8b26190a9e23c4687' 13 | }, 14 | zoom: { 15 | type: Number, 16 | default: 12 17 | }, 18 | center: { 19 | type: [Array, String], 20 | default() { 21 | return [113.220218, 23.404165] 22 | } 23 | }, 24 | height: { 25 | type: Number | String, 26 | default: 520 27 | }, 28 | // AMap.Geocoder, AMap.CustomLayer, AMap.ControlBar, 29 | // AMap.Heatmap, AMap.DistrictSearch, AMap.AdvancedInfoWindow, 30 | // AMap.MassMarks, AMap.Size, AMap.Pixel 31 | plugins: { 32 | type: Array, 33 | default: () => [] 34 | }, 35 | uis: { 36 | type: Array, 37 | default: () => ['overlay/SimpleMarker'] 38 | } 39 | 40 | }, 41 | computed: { 42 | mapHeight() { 43 | return isNaN(this.height) ? this.height : `${this.height}px` 44 | } 45 | }, 46 | data() { 47 | return { 48 | map: '' 49 | } 50 | }, 51 | beforeDestroy() { 52 | this.map && this.map.destroy() 53 | this.map = null 54 | }, 55 | mounted() { 56 | }, 57 | created() { 58 | this.initMap() 59 | }, 60 | methods: { 61 | initMap() { 62 | AMapLoader.load({ 63 | key: this.amapKey, 64 | version: '2.0', 65 | AMapUI: { 66 | version: '1.1', 67 | plugins: this.uis 68 | }, 69 | Loca: { // 是否加载 Loca, 缺省不加载 70 | version: '2.0.0' // Loca 版本,缺省 1.3.2 71 | } 72 | }).then((AMap) => { 73 | this.map = new AMap.Map('amapcontainer', { 74 | zoom: this.zoom, // 级别 75 | center: this.center, // 中心点坐标 76 | viewMode: '3D', // 使用3D视图 77 | buildingAnimation: true, // 楼块出现是否带动画 78 | // expandZoomRange: true, 79 | // resizeEnable: true, 80 | // rotateEnable: true, 81 | // pitchEnable: true, 82 | pitch: 62, // 地图倾斜 83 | // rotation: -15, 84 | mapStyle: `amap://styles/${this.styleId}` 85 | }) 86 | this.$emit('amap-ready', this.map) 87 | }).catch(e => { 88 | console.log(e) 89 | }) 90 | } 91 | 92 | }, 93 | watch: {} 94 | } 95 | -------------------------------------------------------------------------------- /src/components/map/index.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 14 | 15 | 22 | -------------------------------------------------------------------------------- /src/components/map/locaPoint.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 202 | 203 | 206 | -------------------------------------------------------------------------------- /src/components/map/polyLine.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 75 | 76 | 79 | -------------------------------------------------------------------------------- /src/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './App.vue' 3 | import router from './router' 4 | import store from './store' 5 | import VueMobileDetection from 'vue-mobile-detection' 6 | import utils from './utils/utils.js' 7 | 8 | import './styles/index.scss' 9 | 10 | Vue.config.productionTip = false 11 | 12 | // eCharts组件 13 | import eChartFn from '@/components/chart/index.js' 14 | import ChartPanel from '@/components/chart/index.vue' 15 | import './plugins/element.js' 16 | Vue.component(ChartPanel.name, ChartPanel) 17 | Vue.prototype.$eChartFn = eChartFn 18 | 19 | import './plugins/element.js' 20 | 21 | Vue.use(VueMobileDetection) 22 | 23 | /** 24 | * 全局方法 25 | * In template 26 | * $utils.methodname() 27 | * In methods 28 | * this.$utils.methodname() 29 | */ 30 | Vue.prototype.$utils = utils 31 | 32 | new Vue({ 33 | router, 34 | store, 35 | render: h => h(App) 36 | }).$mount('#app') 37 | -------------------------------------------------------------------------------- /src/plugins/element.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import 'element-ui/lib/theme-chalk/index.css' 3 | 4 | import { 5 | Button, 6 | Table, 7 | TableColumn, 8 | Popover, 9 | Tooltip, 10 | Input, 11 | Select, 12 | Option, 13 | Dialog 14 | } from 'element-ui' 15 | 16 | Vue.use(Button) 17 | Vue.use(Table) 18 | Vue.use(TableColumn) 19 | Vue.use(Popover) 20 | Vue.use(Tooltip) 21 | Vue.use(Input) 22 | Vue.use(Select) 23 | Vue.use(Option) 24 | Vue.use(Dialog) 25 | -------------------------------------------------------------------------------- /src/router/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import VueRouter from 'vue-router' 3 | import Home from '../views/Home.vue' 4 | 5 | Vue.use(VueRouter) 6 | 7 | const routes = [ 8 | { 9 | path: '/', 10 | name: 'Home', 11 | meta: { title: '首页' }, 12 | component: Home 13 | }, 14 | { 15 | path: '/about', 16 | name: 'About', 17 | component: () => import('@/views/About.vue') 18 | }, 19 | { 20 | path: '/mockdatatest', 21 | name: 'mockDataTest', 22 | meta: { title: '假数据测试' }, 23 | component: () => import('@/views/mockDataTest/index.vue') 24 | }, 25 | { 26 | path: '/charttest', 27 | name: 'chartTest', 28 | meta: { title: '图表测试' }, 29 | component: () => import('@/views/chartTest/index.vue') 30 | }, 31 | { 32 | path: '/dynamictabletest', 33 | name: 'dynamicTableTest', 34 | meta: { title: '动态生成表格测试' }, 35 | component: () => import('@/views/dynamicTableTest/index.vue') 36 | }, 37 | { 38 | path: '/polylinetest', 39 | name: 'polylineTest', 40 | meta: { title: '人员轨迹测试' }, 41 | component: () => import('@/views/polylineTest/index.vue') 42 | }, 43 | { 44 | path: '/bmaptest', 45 | name: 'bmapTest', 46 | meta: { title: '百度地图测试' }, 47 | component: () => import('@/views/bmapTest/index.vue') 48 | }, 49 | { 50 | path: '/bmapgltest', 51 | name: 'bmapGLTest', 52 | meta: { title: '百度地图GL测试' }, 53 | component: () => import('@/views/bmapGLTest/index.vue') 54 | }, 55 | { 56 | path: '/amaplocatest', 57 | name: 'amapLocaTest', 58 | meta: { title: '百度地图GL测试' }, 59 | component: () => import('@/views/amapLocaTest/index.vue') 60 | }, 61 | { 62 | path: '/videocapturetest', 63 | name: 'videoCaptureTest', 64 | meta: { title: 'video视频截图+水印' }, 65 | component: () => import('@/views/videoCaptureTest/index.vue') 66 | }, 67 | { 68 | path: '/somethingtest', 69 | name: 'somethingTest', 70 | meta: { title: 'somethingTestView' }, 71 | component: () => import('@/views/somethingTest/index.vue') 72 | }, 73 | { 74 | path: '/echartMapTest', 75 | name: 'echartMap', 76 | meta: { title: 'echart省市地图显示测试' }, 77 | component: () => import('@/views/echartMapTest/index.vue') 78 | }, 79 | { 80 | path: '/bigscreen', 81 | name: 'bigscreen', 82 | component: () => import('@/views/bigscreen/index.vue'), 83 | meta: { 84 | title: '大屏', 85 | icon: 'el-icon-s-platform' 86 | } 87 | } 88 | ] 89 | 90 | const router = new VueRouter({ 91 | mode: 'history', 92 | base: process.env.BASE_URL, 93 | routes 94 | }) 95 | 96 | export default router 97 | -------------------------------------------------------------------------------- /src/settings.js: -------------------------------------------------------------------------------- 1 | /** 2 | * 调用:const defaultSettings = require('./src/settings.js'); 3 | * 4 | * import defaultSettings from '@/settings' 5 | const { publicPath } = defaultSettings 6 | */ 7 | module.exports = { 8 | title: 'Vue Skill', 9 | /** 10 | * 这里方便代码里面使用而已,注意要和vue.config.js里面的同步修改 11 | */ 12 | publicPath: process.env.NODE_ENV === 'production' ? 'https://liyoro.github.io/' : '/dist', 13 | 14 | /** 15 | * @type {boolean} true | false 16 | * @description Whether fix the header 17 | */ 18 | fixedHeader: false, 19 | 20 | /** 21 | * @type {boolean} true | false 22 | * @description Whether show the logo in sidebar 23 | */ 24 | sidebarLogo: false 25 | } 26 | -------------------------------------------------------------------------------- /src/store/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Vuex from 'vuex' 3 | 4 | Vue.use(Vuex) 5 | 6 | export default new Vuex.Store({ 7 | state: { 8 | }, 9 | mutations: { 10 | }, 11 | actions: { 12 | }, 13 | modules: { 14 | } 15 | }) 16 | -------------------------------------------------------------------------------- /src/styles/box.scss: -------------------------------------------------------------------------------- 1 | // 大屏页面的共用css 2 | .box-title { 3 | height: 38px; 4 | line-height: 38px; 5 | text-align: center; 6 | font-size: 22px; 7 | font-weight: 600; 8 | color: #ffffff; 9 | } 10 | 11 | .box-margin { 12 | margin-bottom: 22px; 13 | } 14 | 15 | .box-1 { 16 | width: 100%; 17 | height: 158px; 18 | } 19 | 20 | .box-2 { 21 | width: 100%; 22 | height: 248px; 23 | } 24 | 25 | .box-3 { 26 | width: 100%; 27 | height: 248px; 28 | } 29 | 30 | .box-4 { 31 | width: 100%; 32 | height: 248px; 33 | } 34 | 35 | .chart-content { 36 | width: 100%; 37 | height: 208px; 38 | } 39 | 40 | .box-content { 41 | height: 120px; 42 | display: flex; 43 | justify-content: center; 44 | } 45 | -------------------------------------------------------------------------------- /src/styles/index.scss: -------------------------------------------------------------------------------- 1 | // 解决vue渲染页面时出现的变量闪烁 2 | [v-cloak] { 3 | display: none; 4 | } -------------------------------------------------------------------------------- /src/utils/Export2Excel.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | import { saveAs } from 'file-saver' 3 | import XLSX from 'xlsx' 4 | 5 | function generateArray(table) { 6 | var out = []; 7 | var rows = table.querySelectorAll('tr'); 8 | var ranges = []; 9 | for (var R = 0; R < rows.length; ++R) { 10 | var outRow = []; 11 | var row = rows[R]; 12 | var columns = row.querySelectorAll('td'); 13 | for (var C = 0; C < columns.length; ++C) { 14 | var cell = columns[C]; 15 | var colspan = cell.getAttribute('colspan'); 16 | var rowspan = cell.getAttribute('rowspan'); 17 | var cellValue = cell.innerText; 18 | if (cellValue !== "" && cellValue == +cellValue) cellValue = +cellValue; 19 | 20 | //Skip ranges 21 | ranges.forEach(function (range) { 22 | if (R >= range.s.r && R <= range.e.r && outRow.length >= range.s.c && outRow.length <= range.e.c) { 23 | for (var i = 0; i <= range.e.c - range.s.c; ++i) outRow.push(null); 24 | } 25 | }); 26 | 27 | //Handle Row Span 28 | if (rowspan || colspan) { 29 | rowspan = rowspan || 1; 30 | colspan = colspan || 1; 31 | ranges.push({ 32 | s: { 33 | r: R, 34 | c: outRow.length 35 | }, 36 | e: { 37 | r: R + rowspan - 1, 38 | c: outRow.length + colspan - 1 39 | } 40 | }); 41 | }; 42 | 43 | //Handle Value 44 | outRow.push(cellValue !== "" ? cellValue : null); 45 | 46 | //Handle Colspan 47 | if (colspan) 48 | for (var k = 0; k < colspan - 1; ++k) outRow.push(null); 49 | } 50 | out.push(outRow); 51 | } 52 | return [out, ranges]; 53 | }; 54 | 55 | function datenum(v, date1904) { 56 | if (date1904) v += 1462; 57 | var epoch = Date.parse(v); 58 | return (epoch - new Date(Date.UTC(1899, 11, 30))) / (24 * 60 * 60 * 1000); 59 | } 60 | 61 | function sheet_from_array_of_arrays(data, opts) { 62 | var ws = {}; 63 | var range = { 64 | s: { 65 | c: 10000000, 66 | r: 10000000 67 | }, 68 | e: { 69 | c: 0, 70 | r: 0 71 | } 72 | }; 73 | for (var R = 0; R != data.length; ++R) { 74 | for (var C = 0; C != data[R].length; ++C) { 75 | if (range.s.r > R) range.s.r = R; 76 | if (range.s.c > C) range.s.c = C; 77 | if (range.e.r < R) range.e.r = R; 78 | if (range.e.c < C) range.e.c = C; 79 | var cell = { 80 | v: data[R][C] 81 | }; 82 | if (cell.v == null) continue; 83 | var cell_ref = XLSX.utils.encode_cell({ 84 | c: C, 85 | r: R 86 | }); 87 | 88 | if (typeof cell.v === 'number') cell.t = 'n'; 89 | else if (typeof cell.v === 'boolean') cell.t = 'b'; 90 | else if (cell.v instanceof Date) { 91 | cell.t = 'n'; 92 | cell.z = XLSX.SSF._table[14]; 93 | cell.v = datenum(cell.v); 94 | } else cell.t = 's'; 95 | 96 | ws[cell_ref] = cell; 97 | } 98 | } 99 | if (range.s.c < 10000000) ws['!ref'] = XLSX.utils.encode_range(range); 100 | return ws; 101 | } 102 | 103 | function Workbook() { 104 | if (!(this instanceof Workbook)) return new Workbook(); 105 | this.SheetNames = []; 106 | this.Sheets = {}; 107 | } 108 | 109 | function s2ab(s) { 110 | var buf = new ArrayBuffer(s.length); 111 | var view = new Uint8Array(buf); 112 | for (var i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF; 113 | return buf; 114 | } 115 | 116 | export function export_table_to_excel(id) { 117 | var theTable = document.getElementById(id); 118 | var oo = generateArray(theTable); 119 | var ranges = oo[1]; 120 | 121 | /* original data */ 122 | var data = oo[0]; 123 | var ws_name = "SheetJS"; 124 | 125 | var wb = new Workbook(), 126 | ws = sheet_from_array_of_arrays(data); 127 | 128 | /* add ranges to worksheet */ 129 | // ws['!cols'] = ['apple', 'banan']; 130 | ws['!merges'] = ranges; 131 | 132 | /* add worksheet to workbook */ 133 | wb.SheetNames.push(ws_name); 134 | wb.Sheets[ws_name] = ws; 135 | 136 | var wbout = XLSX.write(wb, { 137 | bookType: 'xlsx', 138 | bookSST: false, 139 | type: 'binary' 140 | }); 141 | 142 | saveAs(new Blob([s2ab(wbout)], { 143 | type: "application/octet-stream" 144 | }), "test.xlsx") 145 | } 146 | 147 | export function export_json_to_excel({ 148 | multiHeader = [], 149 | header, 150 | data, 151 | filename, 152 | merges = [], 153 | autoWidth = true, 154 | bookType = 'xlsx' 155 | } = {}) { 156 | /* original data */ 157 | filename = filename || 'excel-list' 158 | data = [...data] 159 | data.unshift(header); 160 | 161 | for (let i = multiHeader.length - 1; i > -1; i--) { 162 | data.unshift(multiHeader[i]) 163 | } 164 | 165 | var ws_name = "SheetJS"; 166 | var wb = new Workbook(), 167 | ws = sheet_from_array_of_arrays(data); 168 | 169 | if (merges.length > 0) { 170 | if (!ws['!merges']) ws['!merges'] = []; 171 | merges.forEach(item => { 172 | ws['!merges'].push(XLSX.utils.decode_range(item)) 173 | }) 174 | } 175 | 176 | if (autoWidth) { 177 | /*设置worksheet每列的最大宽度*/ 178 | const colWidth = data.map(row => row.map(val => { 179 | /*先判断是否为null/undefined*/ 180 | if (val == null) { 181 | return { 182 | 'wch': 10 183 | }; 184 | } 185 | /*再判断是否为中文*/ 186 | else if (val.toString().charCodeAt(0) > 255) { 187 | return { 188 | 'wch': val.toString().length * 2 189 | }; 190 | } else { 191 | return { 192 | 'wch': val.toString().length 193 | }; 194 | } 195 | })) 196 | /*以第一行为初始值*/ 197 | let result = colWidth[0]; 198 | for (let i = 1; i < colWidth.length; i++) { 199 | for (let j = 0; j < colWidth[i].length; j++) { 200 | if (result[j]['wch'] < colWidth[i][j]['wch']) { 201 | result[j]['wch'] = colWidth[i][j]['wch']; 202 | } 203 | } 204 | } 205 | ws['!cols'] = result; 206 | } 207 | 208 | /* add worksheet to workbook */ 209 | wb.SheetNames.push(ws_name); 210 | wb.Sheets[ws_name] = ws; 211 | 212 | var wbout = XLSX.write(wb, { 213 | bookType: bookType, 214 | bookSST: false, 215 | type: 'binary' 216 | }); 217 | saveAs(new Blob([s2ab(wbout)], { 218 | type: "application/octet-stream" 219 | }), `${filename}.${bookType}`); 220 | } 221 | -------------------------------------------------------------------------------- /src/utils/mock-request.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: liyoro 3 | * @Date: 2021-05-31 15:25:56 4 | * @Last Modified by: liyoro 5 | * @Last Modified time: 2021-05-31 16:09:19 6 | */ 7 | import axios from 'axios' 8 | 9 | const service = axios.create({ 10 | baseURL: process.env.VUE_APP_MOCK_URL, // url = base url + request url 11 | // withCredentials: true, // send cookies when cross-domain requests 12 | timeout: 5000 // request timeout 13 | }) 14 | 15 | // request interceptor 16 | service.interceptors.request.use( 17 | config => { 18 | // do something before request is sent 19 | 20 | return config 21 | }, 22 | error => { 23 | // do something with request error 24 | console.log(error) // for debug 25 | return Promise.reject(error) 26 | } 27 | ) 28 | 29 | // response interceptor 30 | service.interceptors.response.use( 31 | /** 32 | * If you want to get http information such as headers or status 33 | * Please return response => response 34 | */ 35 | 36 | /** 37 | * Determine the request status by custom code 38 | * Here is just an example 39 | * You can also judge the status by HTTP Status Code 40 | */ 41 | response => { 42 | const res = response.data 43 | 44 | // if the custom code is not 0, it is judged as an error. 45 | if (res.code !== 0) { 46 | return Promise.reject(new Error(res.message || 'Error')) 47 | } else { 48 | return res 49 | } 50 | }, 51 | error => { 52 | console.log('err' + error) // for debug 53 | return Promise.reject(error) 54 | } 55 | ) 56 | 57 | export default service 58 | -------------------------------------------------------------------------------- /src/utils/utils.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: liyoro 3 | * @since: 2022-03-07 11:22:29 4 | * @lastTime: 2022-03-17 15:32:16 5 | */ 6 | const findElem = (arrayToSearch, attr, val) => { 7 | if (arrayToSearch != null) { 8 | for (var i = 0; i < arrayToSearch.length; i++) { 9 | // eslint-disable-next-line eqeqeq 10 | if (arrayToSearch[i][attr] == val) { 11 | return i 12 | } 13 | } 14 | } else { 15 | return -1 16 | } 17 | return -1 18 | } 19 | 20 | // [0, max]随机整数 21 | const randomInt = (max) => { 22 | return Math.round(Math.random() * max) 23 | } 24 | 25 | // 生成[0, max)的随机整数 26 | const randomIntL = (max) => { 27 | return Math.floor(Math.random() * max) 28 | } 29 | 30 | // 生成(0, max]的随机整数 31 | const randomIntR = (max) => { 32 | return Math.ceil(Math.random() * max) 33 | } 34 | 35 | export default { 36 | findElem, 37 | randomInt, 38 | randomIntL, 39 | randomIntR 40 | } 41 | -------------------------------------------------------------------------------- /src/views/About.vue: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /src/views/Home.vue: -------------------------------------------------------------------------------- 1 | 23 | 24 | 40 | -------------------------------------------------------------------------------- /src/views/amapLocaTest/index.js: -------------------------------------------------------------------------------- 1 | 2 | export default { 3 | name: 'amapLocaTestView', 4 | components: { 5 | AmapView: () => import ('@/components/map/index.vue'), 6 | AmapLocaPoint: () => import ('@/components/map/locaPoint.vue') 7 | }, 8 | data() { 9 | return { 10 | data: [] 11 | } 12 | }, 13 | mounted() { 14 | }, 15 | created() { 16 | }, 17 | methods: { 18 | }, 19 | watch: {} 20 | } 21 | -------------------------------------------------------------------------------- /src/views/amapLocaTest/index.scss: -------------------------------------------------------------------------------- 1 | .amapLocaTestView { 2 | padding: 10px; 3 | } 4 | -------------------------------------------------------------------------------- /src/views/amapLocaTest/index.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 17 | 18 | 21 | -------------------------------------------------------------------------------- /src/views/bigscreen/components/bottomView/index.js: -------------------------------------------------------------------------------- 1 | export default { 2 | name: 'BottomView', 3 | props: { 4 | data: { 5 | type: Object, 6 | default: () => ({}) 7 | } 8 | }, 9 | data() { 10 | return { 11 | } 12 | }, 13 | mounted() {}, 14 | created() { 15 | this.initData() 16 | }, 17 | methods: { 18 | initData() { 19 | } 20 | }, 21 | watch: {} 22 | } 23 | -------------------------------------------------------------------------------- /src/views/bigscreen/components/bottomView/index.scss: -------------------------------------------------------------------------------- 1 | .bottom-view { 2 | width: 786px; 3 | height: 243px; 4 | position: absolute; 5 | left: 547px; 6 | right: 547px; 7 | bottom: 0; 8 | // background-image: url("~@/assets/images/box-1572.png"); 9 | // background-size: 100% 100%; 10 | background-color: #46d9fe; 11 | .box-title { 12 | height: 38px; 13 | line-height: 38px; 14 | text-align: center; 15 | font-size: 22px; 16 | font-weight: 600; 17 | color: #FFFFFF; 18 | } 19 | .chart-content { 20 | width: 100%; 21 | height: 208px; 22 | } 23 | } -------------------------------------------------------------------------------- /src/views/bigscreen/components/bottomView/index.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 14 | 15 | 18 | -------------------------------------------------------------------------------- /src/views/bigscreen/components/centerView/index.js: -------------------------------------------------------------------------------- 1 | import { mapGetters } from 'vuex' 2 | // import axios from 'axios' 3 | // import { findElem } from '@/utils/index' 4 | 5 | // const getMapJson = (url) => { 6 | // return axios.get(`data/map/${url}.json`) 7 | // } 8 | 9 | export default { 10 | name: 'CenterView', 11 | props: { 12 | data: { 13 | type: Object, 14 | default: () => ({}) 15 | } 16 | }, 17 | data() { 18 | return { 19 | mapOpt: {}, 20 | areaCode: 4400, 21 | mapName: '广东省', 22 | mapData: [] 23 | } 24 | }, 25 | computed: { 26 | ...mapGetters(['curLevel', 'levelData']) 27 | }, 28 | mounted() {}, 29 | created() { 30 | this.initData() 31 | }, 32 | updated() { 33 | }, 34 | methods: { 35 | initData() { 36 | }, 37 | // 中间 38 | initMap(url) { 39 | } 40 | }, 41 | watch: {} 42 | } 43 | -------------------------------------------------------------------------------- /src/views/bigscreen/components/centerView/index.scss: -------------------------------------------------------------------------------- 1 | .center-view { 2 | width: 786px; 3 | height: 705px; 4 | position: absolute; 5 | left: 547px; 6 | right: 547px; 7 | top: 0; 8 | background-color: #46d9fe; 9 | .map-view { 10 | width: 100%; 11 | height: 100%; 12 | z-index: 1; 13 | } 14 | } -------------------------------------------------------------------------------- /src/views/bigscreen/components/centerView/index.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 13 | 14 | 17 | -------------------------------------------------------------------------------- /src/views/bigscreen/components/header.vue: -------------------------------------------------------------------------------- 1 | 6 | 13 | 14 | 31 | 32 | 52 | -------------------------------------------------------------------------------- /src/views/bigscreen/components/leftView/index.js: -------------------------------------------------------------------------------- 1 | export default { 2 | name: 'LeftView', 3 | props: { 4 | data: { 5 | type: Object, 6 | default: () => ({}) 7 | } 8 | }, 9 | data() { 10 | return { 11 | } 12 | }, 13 | mounted() {}, 14 | created() { 15 | this.initData() 16 | }, 17 | methods: { 18 | initData() { 19 | } 20 | }, 21 | watch: {} 22 | } 23 | -------------------------------------------------------------------------------- /src/views/bigscreen/components/leftView/index.scss: -------------------------------------------------------------------------------- 1 | @import '@/styles/box.scss'; 2 | 3 | .left-view { 4 | width: 522px; 5 | height: 100%; 6 | position: absolute; 7 | left: 0; 8 | top: 0; 9 | bottom: 0; 10 | } 11 | 12 | .box-1-bg { 13 | // background-image: url("~@/assets/images/box-308.png"); 14 | // background-size: 100% 100%; 15 | background-color: #46d9fe; 16 | } 17 | 18 | .box-2-bg { 19 | // background-image: url("~@/assets/images/box-486-1.png"); 20 | // background-size: 100% 100%; 21 | background-color: #46d9fe; 22 | } 23 | 24 | .box-3-bg { 25 | // background-image: url("~@/assets/images/box-486-2.png"); 26 | // background-size: 100% 100%; 27 | background-color: #46d9fe; 28 | } 29 | 30 | .box-4-bg { 31 | // background-image: url("~@/assets/images/box-486-3.png"); 32 | // background-size: 100% 100%; 33 | background-color: #46d9fe; 34 | } 35 | -------------------------------------------------------------------------------- /src/views/bigscreen/components/leftView/index.vue: -------------------------------------------------------------------------------- 1 | 20 | 21 | 27 | 28 | 31 | -------------------------------------------------------------------------------- /src/views/bigscreen/components/rightView/index.js: -------------------------------------------------------------------------------- 1 | export default { 2 | name: 'RightView', 3 | props: { 4 | data: { 5 | type: Object, 6 | default: () => ({}) 7 | } 8 | }, 9 | data() { 10 | return { 11 | } 12 | }, 13 | mounted() {}, 14 | created() { 15 | this.initData() 16 | }, 17 | methods: { 18 | initData() { 19 | } 20 | }, 21 | watch: {} 22 | } 23 | -------------------------------------------------------------------------------- /src/views/bigscreen/components/rightView/index.scss: -------------------------------------------------------------------------------- 1 | @import '@/styles/box.scss'; 2 | 3 | .right-view { 4 | width: 522px; 5 | height: 100%; 6 | position: absolute; 7 | right: 0; 8 | top: 0; 9 | bottom: 0; 10 | } 11 | 12 | .box-1-bg { 13 | // background-image: url("~@/assets/images/box-308-r.png"); 14 | // background-size: 100% 100%; 15 | background-color: #46d9fe; 16 | } 17 | 18 | .box-2-bg { 19 | // background-image: url("~@/assets/images/box-486-1-r.png"); 20 | // background-size: 100% 100%; 21 | background-color: #46d9fe; 22 | } 23 | 24 | .box-3-bg { 25 | // background-image: url("~@/assets/images/box-486-2-r.png"); 26 | // background-size: 100% 100%; 27 | background-color: #46d9fe; 28 | } 29 | 30 | .box-4-bg { 31 | // background-image: url("~@/assets/images/box-486-3-r.png"); 32 | // background-size: 100% 100%; 33 | background-color: #46d9fe; 34 | } -------------------------------------------------------------------------------- /src/views/bigscreen/components/rightView/index.vue: -------------------------------------------------------------------------------- 1 | 20 | 21 | 27 | 28 | 31 | -------------------------------------------------------------------------------- /src/views/bigscreen/index.js: -------------------------------------------------------------------------------- 1 | export default { 2 | components: { 3 | BsHeader: () => import('./components/header.vue'), 4 | LeftView: () => import('./components/leftView/index.vue'), 5 | RightView: () => import('./components/rightView/index.vue'), 6 | BottomView: () => import('./components/bottomView/index.vue'), 7 | CenterView: () => import('./components/centerView/index.vue') 8 | }, 9 | data() { 10 | return { 11 | styleObj: { transform: 'scale(1.0) translate(-50%, -50%)' }, 12 | width: 1920, 13 | height: 1080, 14 | data: {} 15 | } 16 | }, 17 | mounted() {}, 18 | created() { 19 | this.changeScale() 20 | window.addEventListener('resize', this.changeScale) 21 | this.initData() 22 | }, 23 | methods: { 24 | changeScale() { 25 | const body = document.documentElement 26 | const scale1 = body.clientWidth / this.width 27 | const scale2 = body.clientHeight / this.height 28 | const scale = scale1 < scale2 ? scale1 : scale2 29 | this.styleObj.transform = `scale(${scale}) translate(-50%, -50%)` 30 | }, 31 | // 如果大屏页面是通过一个接口全部返回的,就在这里请求,然后通过给各个部分的组件传参显示数据 32 | initData() { 33 | this.data = { 'a': 1, 'b': 2, 'c': 3, 'd': 4, 'f': 5, 'g': 6, 'h': 7 } 34 | } 35 | }, 36 | watch: {} 37 | } 38 | -------------------------------------------------------------------------------- /src/views/bigscreen/index.scss: -------------------------------------------------------------------------------- 1 | .bs-container { 2 | width: 100%; 3 | height: 100%; 4 | // background-image: url("~@/assets/images/bg.png"); 5 | // background-size: 100% 100%; 6 | background-color: rgba(247, 247, 247, 1); 7 | background-size: cover; 8 | background-repeat: no-repeat; 9 | background-attachment: fixed; 10 | background-position: center; 11 | .bigscreen { 12 | width: 1920px; 13 | height: 1080px; 14 | overflow: hidden; 15 | position: fixed; 16 | top: 50%; 17 | left: 50%; 18 | transform-origin: left top; 19 | z-index: 999; 20 | .content-view { 21 | margin: 20px 20px 30px 20px; 22 | height: 968px; 23 | position: relative; 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/views/bigscreen/index.vue: -------------------------------------------------------------------------------- 1 | 14 | 15 | 21 | 22 | 25 | -------------------------------------------------------------------------------- /src/views/bmapGLTest/index.js: -------------------------------------------------------------------------------- 1 | // import { polylineData } from '@/api/polyline' 2 | 3 | export default { 4 | name: 'bmapGLTestView', 5 | components: { 6 | 'bmap-gl-view': () => import ('@/components/bmap/gl/index.vue') 7 | }, 8 | data() { 9 | return { 10 | data: [] 11 | } 12 | }, 13 | mounted() { 14 | }, 15 | created() { 16 | }, 17 | methods: { 18 | 19 | }, 20 | watch: {} 21 | } 22 | -------------------------------------------------------------------------------- /src/views/bmapGLTest/index.scss: -------------------------------------------------------------------------------- 1 | .bmapGLTestView { 2 | padding: 10px; 3 | } 4 | -------------------------------------------------------------------------------- /src/views/bmapGLTest/index.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 14 | 15 | 18 | -------------------------------------------------------------------------------- /src/views/bmapTest/index.js: -------------------------------------------------------------------------------- 1 | // import { polylineData } from '@/api/polyline' 2 | 3 | export default { 4 | name: 'bmapTestView', 5 | components: { 6 | BmapView: () => import ('@/components/bmap/index.vue'), 7 | BmapMarker: () => import ('@/components/bmap/bMarker.vue') 8 | }, 9 | data() { 10 | return { 11 | data: [], 12 | markers: [], 13 | center: [113.240159, 23.433257] 14 | } 15 | }, 16 | mounted() { 17 | }, 18 | created() { 19 | this.initData() 20 | }, 21 | methods: { 22 | initData() { 23 | // 融创茂 113.240159,23.433257 24 | // 花都湖 113.238146,23.388154 25 | // 圆玄道观 113.186404,23.405666 26 | // 白云机场 113.31231,23.403013 27 | // 花都广场 113.226483,23.406326 28 | this.markers = [ 29 | { 'lng': 113.240159, 'lat': 23.433257, 'code': 1 }, 30 | { 'lng': 113.238146, 'lat': 23.388154, 'code': 2 }, 31 | { 'lng': 113.186404, 'lat': 23.405666, 'code': 3 }, 32 | { 'lng': 113.31231, 'lat': 23.403013, 'code': 4 }, 33 | { 'lng': 113.226483, 'lat': 23.406326, 'code': 5 } 34 | ] 35 | } 36 | }, 37 | watch: {} 38 | } 39 | -------------------------------------------------------------------------------- /src/views/bmapTest/index.scss: -------------------------------------------------------------------------------- 1 | .bmapTestView { 2 | padding: 10px; 3 | } 4 | -------------------------------------------------------------------------------- /src/views/bmapTest/index.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 16 | 17 | 20 | -------------------------------------------------------------------------------- /src/views/chartTest/index.js: -------------------------------------------------------------------------------- 1 | export default { 2 | name: 'chartTestView', 3 | data() { 4 | return { 5 | chartOpt: {}, 6 | chartOpt2: {}, 7 | chartOpt3: {} 8 | } 9 | }, 10 | mounted() {}, 11 | created() { 12 | this.chartOpt = this.$eChartFn.testBar() 13 | this.chartOpt3 = this.$eChartFn.testBar2() 14 | 15 | this.chartOpt2 = this.$eChartFn.getPieChart([100, 23, 43, 65], ['#36CBCB', '#FAD337', '#F2637B', '#975FE4']) 16 | }, 17 | methods: { 18 | }, 19 | watch: {} 20 | } 21 | -------------------------------------------------------------------------------- /src/views/chartTest/index.scss: -------------------------------------------------------------------------------- 1 | .chartTestView { 2 | padding: 10px; 3 | height: 520px; 4 | .chart-content { 5 | height: 100%; 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /src/views/chartTest/index.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 18 | 19 | 22 | -------------------------------------------------------------------------------- /src/views/dynamicTableTest/index.js: -------------------------------------------------------------------------------- 1 | import { tableData } from '@/api/table' 2 | 3 | export default { 4 | name: 'dynamicTableTest', 5 | data() { 6 | return { 7 | tableCols: [], 8 | tableData: [], 9 | tableShowData: [], 10 | filename: '', 11 | searchColOption: [], 12 | searchColItem: '', 13 | searchText: '' 14 | } 15 | }, 16 | mounted() {}, 17 | created() { 18 | this.testMockTable() 19 | }, 20 | methods: { 21 | async testMockTable() { 22 | const { code, result } = await tableData() 23 | if (code !== 0) return 24 | this.tableCols = result.cols 25 | 26 | const temp = result.searchcols 27 | if (temp.length > 0) { 28 | this.searchColOption = temp 29 | this.searchColItem = temp[0].prop 30 | } 31 | this.tableData = result.data 32 | this.filename = result.filename 33 | this.tableShowData = this.tableData 34 | }, 35 | // 列值筛选 36 | filterTag(value, row) { 37 | return row.type === value 38 | }, 39 | // 导出Excel 40 | handleDownload(tableCols, tableData, filename) { 41 | const tempname = this.formatDate('yyyy-MM-dd HH:mm:ss') 42 | const tHeader = [] 43 | const filterVal = [] 44 | 45 | tableCols.forEach(item => { 46 | tHeader.push(item.label) 47 | filterVal.push(item.prop) 48 | }) 49 | import('@/utils/Export2Excel').then(excel => { 50 | const list = tableData 51 | const data = this.formatJson(filterVal, list) 52 | excel.export_json_to_excel({ 53 | header: tHeader, 54 | data, 55 | filename: filename + tempname, 56 | autoWidth: true, 57 | bookType: 'xlsx' 58 | }) 59 | }) 60 | }, 61 | // 方便对数据特殊处理 62 | formatJson(filterVal, jsonData) { 63 | return jsonData.map(v => filterVal.map(j => { 64 | return v[j] 65 | })) 66 | }, 67 | // 返回格式化时间 68 | formatDate(fmt) { 69 | const nowDate = new Date() 70 | var o = { 71 | 'M+': nowDate.getMonth() + 1, // 月份 72 | 'd+': nowDate.getDate(), // 日 73 | 'H+': nowDate.getHours(), // 小时 74 | 'm+': nowDate.getMinutes(), // 分 75 | 's+': nowDate.getSeconds(), // 秒 76 | 'q+': Math.floor((nowDate.getMonth() + 3) / 3), // 季度 77 | 'S': nowDate.getMilliseconds() // 毫秒 78 | } 79 | if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (nowDate.getFullYear() + '').substr(4 - RegExp.$1.length)) 80 | for (var k in o) { 81 | if (new RegExp('(' + k + ')').test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length))) 82 | } 83 | return fmt 84 | }, 85 | searchClick() { 86 | if (this.searchText) { 87 | const searchRes = this.filterOne(this.tableData, this.searchText, [ 88 | this.searchColItem 89 | ]) 90 | this.tableShowData = searchRes 91 | } else { 92 | this.tableShowData = this.tableData 93 | } 94 | }, 95 | resetClick() { 96 | this.searchText = '' 97 | 98 | if (this.searchColOption.length > 0) { 99 | this.searchColItem = this.searchColOption[0].prop 100 | } 101 | this.searchClick() 102 | }, 103 | filterOne(dataList, value, type) { 104 | var s = dataList.filter(function(item, index, arr) { 105 | for (let j = 0; j < type.length; j++) { 106 | if (item[type[j]] !== undefined || item[type[j]] != null) { 107 | if (item[type[j]].indexOf(value) >= 0) { 108 | return item 109 | } 110 | } 111 | } 112 | }) 113 | return s 114 | } 115 | }, 116 | watch: { 117 | } 118 | } 119 | -------------------------------------------------------------------------------- /src/views/dynamicTableTest/index.scss: -------------------------------------------------------------------------------- 1 | .dynamicTableTest { 2 | padding: 10px; 3 | .ctl-view { 4 | text-align: left; 5 | margin-bottom: 10px; 6 | .ctl-select { 7 | width: 180px; 8 | } 9 | .ctl-input { 10 | width: 200px; 11 | margin-left: 20px; 12 | margin-right: 20px; 13 | } 14 | } 15 | .overtext { 16 | word-break: keep-all; 17 | white-space: nowrap; 18 | overflow: hidden; 19 | text-overflow: ellipsis; 20 | } 21 | ::v-deep .hide-filter { 22 | .el-table__column-filter-trigger { 23 | display: none !important; 24 | } 25 | } 26 | ::v-deep .show-filter { 27 | .el-table__column-filter-trigger { 28 | display: inline-block !important; 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/views/dynamicTableTest/index.vue: -------------------------------------------------------------------------------- 1 | 44 | 45 | 51 | 52 | 55 | -------------------------------------------------------------------------------- /src/views/echartMapTest/index.js: -------------------------------------------------------------------------------- 1 | import { mapRequest } from '@/api/map' 2 | 3 | export default { 4 | name: 'echartMapTestView', 5 | data() { 6 | return { 7 | mapOpt: {}, 8 | mapName: '广州市', 9 | mapPopData: [] // 地图数据 10 | } 11 | }, 12 | mounted() {}, 13 | created() { 14 | this.initData() 15 | }, 16 | methods: { 17 | // 地图点击事件 18 | handleMapClick(params) { 19 | const { name, seriesType } = params 20 | if (seriesType !== 'map') return 21 | const { data } = params 22 | const code = data.mapProperty.adcode 23 | console.log(11111, data) 24 | console.log(22222, name, code) 25 | }, 26 | initData() { 27 | mapRequest('mapdata').then((result) => { 28 | const res = result.data 29 | 30 | this.mapPopData = res 31 | 32 | this.initMap('4401') 33 | }) 34 | }, 35 | initMap(url) { 36 | mapRequest(url).then((res) => { 37 | const mapData = res.data 38 | const jsonMap = { mark: this.mapName, json: mapData } 39 | 40 | const data = mapData.features.map((item) => { 41 | const { name, adcode } = item.properties 42 | 43 | let hoverObj = {} 44 | 45 | const objIndex = this.$utils.findElem(this.mapPopData, 'adcode', adcode) 46 | if (objIndex !== -1) { 47 | hoverObj = this.mapPopData[objIndex] 48 | } else { 49 | hoverObj = null 50 | } 51 | return { 52 | name, 53 | mapProperty: item.properties, 54 | hoverObj: hoverObj 55 | } 56 | }) 57 | this.mapOpt = this.$eChartFn.getSimpleMap(jsonMap, data) 58 | }).catch((err) => { 59 | console.log(err, '加载地图失败') 60 | }) 61 | } 62 | }, 63 | watch: {} 64 | } 65 | 66 | -------------------------------------------------------------------------------- /src/views/echartMapTest/index.scss: -------------------------------------------------------------------------------- 1 | .echartMapTestView { 2 | padding: 10px; 3 | width: 100%; 4 | height: 520px; 5 | .map-view { 6 | height: 100%; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/views/echartMapTest/index.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 18 | 19 | 22 | -------------------------------------------------------------------------------- /src/views/mockDataTest/index.js: -------------------------------------------------------------------------------- 1 | import { tableData } from '@/api/table' 2 | 3 | export default { 4 | name: 'mockDataTestView', 5 | data() { 6 | return { 7 | tableCols: [], 8 | tableData: [] 9 | } 10 | }, 11 | mounted() {}, 12 | created() { 13 | this.testMockTable() 14 | }, 15 | methods: { 16 | async testMockTable() { 17 | const { code, result } = await tableData() 18 | if (code !== 0) return 19 | this.tableCols = result.cols 20 | this.tableData = result.data 21 | } 22 | 23 | }, 24 | watch: {} 25 | } 26 | -------------------------------------------------------------------------------- /src/views/mockDataTest/index.scss: -------------------------------------------------------------------------------- 1 | .mockDataTestView { 2 | padding: 10px; 3 | } 4 | -------------------------------------------------------------------------------- /src/views/mockDataTest/index.vue: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 11 | 17 | 18 | 19 | 22 | -------------------------------------------------------------------------------- /src/views/polylineTest/index.js: -------------------------------------------------------------------------------- 1 | import { polylineData } from '@/api/polyline' 2 | 3 | export default { 4 | name: 'polylineTestView', 5 | components: { 6 | AmapView: () => import ('@/components/map/index.vue'), 7 | AmapPolyline: () => import ('@/components/map/polyLine.vue') 8 | }, 9 | data() { 10 | return { 11 | data: [] 12 | } 13 | }, 14 | mounted() { 15 | }, 16 | created() { 17 | this.testData() 18 | }, 19 | methods: { 20 | async testData() { 21 | const { code, result } = await polylineData() 22 | if (code !== 0) return 23 | this.data = result.data 24 | } 25 | 26 | }, 27 | watch: {} 28 | } 29 | -------------------------------------------------------------------------------- /src/views/polylineTest/index.scss: -------------------------------------------------------------------------------- 1 | .polylineTestView { 2 | padding: 10px; 3 | } 4 | -------------------------------------------------------------------------------- /src/views/polylineTest/index.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 16 | 17 | 20 | -------------------------------------------------------------------------------- /src/views/somethingTest/component/son.vue: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | 12 | -------------------------------------------------------------------------------- /src/views/somethingTest/index.js: -------------------------------------------------------------------------------- 1 | 2 | import { somethingData } from '@/api/something' 3 | // import Vue from 'vue' 4 | import son from './component/son.vue' 5 | 6 | export default { 7 | name: 'somethingTestView', 8 | components: { son }, 9 | data() { 10 | return { 11 | showText: '', 12 | test1: {}, 13 | test2: [], 14 | test3: [], 15 | includetest: 0, 16 | msg: '子组件访问父数据测试' 17 | } 18 | }, 19 | mounted() { 20 | }, 21 | created() { 22 | this.initData() 23 | }, 24 | methods: { 25 | async initData() { 26 | const { code, result } = await somethingData() 27 | if (code !== 0) return 28 | this.test1 = result.test1 29 | this.test2 = result.test2 30 | this.test3 = result.test3 31 | 32 | // 可枚举键值对的值 33 | // const values = Object.values(this.test1) 34 | 35 | // 可枚举键值对的键值数组 36 | // const entries = Object.entries(this.test1) 37 | 38 | // 异步迭代,不能保证马上获取到数据的情景,保证是顺序执行 39 | // for await (const item of this.test2) { 40 | // console.log(111, item) 41 | // } 42 | 43 | // 数组降维,默认1,默认去除空项(空值不去除,例如: ''、 "") 44 | // const flatRes = this.test3.flat() 45 | // 数组嵌套3层了 46 | // const flatRes = this.test3.flat(2) 47 | // 无穷降维,多维-->一维,可不关注数组嵌套多少层了 48 | // const flatRes = this.test3.flat(Infinity) 49 | 50 | // includes 51 | // const includesRes = this.test3.includes(3) 52 | 53 | // 空值合并运算符 54 | // const a = 0 55 | // const b = a ?? 2 56 | 57 | // globalThis 58 | 59 | // 获取vue版本 60 | /** 61 | const version = Number(Vue.version.split('.')[0]) 62 | 63 | if (version === 2) { 64 | // Vue v2.x.x 65 | } else if (version === 1) { 66 | // Vue v1.x.x 67 | } else { 68 | // Unsupported versions of Vue 69 | } 70 | */ 71 | 72 | // this.showText = version 73 | }, 74 | // includes 测试 75 | includeClick() { 76 | this.includetest = this.$utils.randomIntR(3) 77 | } 78 | }, 79 | watch: {} 80 | } 81 | -------------------------------------------------------------------------------- /src/views/somethingTest/index.scss: -------------------------------------------------------------------------------- 1 | .somethingTestView { 2 | padding: 10px; 3 | .line { 4 | display: flex; 5 | align-items: center; 6 | } 7 | .color1 { 8 | color: red; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/views/somethingTest/index.vue: -------------------------------------------------------------------------------- 1 | 15 | 16 | 22 | 23 | 26 | -------------------------------------------------------------------------------- /src/views/videoCaptureTest/index.js: -------------------------------------------------------------------------------- 1 | import EasyPlayer from '@easydarwin/easyplayer' 2 | 3 | export default { 4 | name: 'videoCaptureTestView', 5 | components: { EasyPlayer }, 6 | data() { 7 | return { 8 | url: 'https://player.alicdn.com/video/editor.mp4', 9 | captureImg1: '', 10 | captureImg2: '', 11 | player2: '' 12 | } 13 | }, 14 | mounted() { 15 | this.player2 = this.$refs['video2'].player.el_.children[0] 16 | this.player2.setAttribute('crossOrigin', 'Anonymous') 17 | }, 18 | created() { 19 | }, 20 | methods: { 21 | // 普通视频截图+水印 22 | captureClick() { 23 | const v = document.querySelector('#video1') 24 | // v.setAttribute('crossOrigin', 'anonymous') 25 | // v.crossOrigin = 'anonymous' 26 | const width = v.videoWidth 27 | const height = v.videoHeight 28 | // console.log(222, v, width, height) 29 | 30 | const canvas = window.canvas = document.createElement('canvas') 31 | canvas.width = width 32 | canvas.height = height 33 | 34 | const ctx = canvas.getContext('2d') 35 | 36 | ctx.drawImage(v, 0, 0, width, height) 37 | 38 | ctx.rotate(-16 * Math.PI / 180) 39 | ctx.font = '100px 宋体' 40 | ctx.fillStyle = 'rgba(255, 255, 255, 1)' 41 | ctx.fillText('测试水印', 100, height - 200) 42 | 43 | const image = canvas.toDataURL('image/png') 44 | this.captureImg1 = image 45 | }, 46 | // Easyplayer视频截图+水印 47 | captureClick2() { 48 | const width = this.player2.videoWidth 49 | const height = this.player2.videoHeight 50 | 51 | const canvas = window.canvas = document.createElement('canvas') 52 | canvas.width = width 53 | canvas.height = height 54 | 55 | const ctx = canvas.getContext('2d') 56 | 57 | ctx.drawImage(this.player2, 0, 0, width, height) 58 | 59 | ctx.rotate(-16 * Math.PI / 180) 60 | ctx.font = '100px 宋体' 61 | ctx.fillStyle = 'rgba(255, 255, 255, 1)' 62 | ctx.fillText('测试水印', 100, height - 200) 63 | 64 | const image = canvas.toDataURL('image/png') 65 | this.captureImg2 = image 66 | } 67 | }, 68 | watch: {} 69 | } 70 | -------------------------------------------------------------------------------- /src/views/videoCaptureTest/index.scss: -------------------------------------------------------------------------------- 1 | .videoCaptureTestView { 2 | // video { 3 | // object-fit: fill; 4 | // } 5 | padding: 10px; 6 | .video-view { 7 | width: 520px; 8 | height: 320px; 9 | float: left; 10 | } 11 | .capture-img { 12 | width: 520px; 13 | height: 320px; 14 | } 15 | ::v-deep .video-wrapper { 16 | padding-bottom: 0px !important; 17 | height: 320px !important; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/views/videoCaptureTest/index.vue: -------------------------------------------------------------------------------- 1 | 30 | 31 | 37 | 38 | 41 | -------------------------------------------------------------------------------- /vue.config.js: -------------------------------------------------------------------------------- 1 | const path = require('path') 2 | const resolve = (dir) => path.join(__dirname, dir) 3 | const UglifyJsPlugin = require('uglifyjs-webpack-plugin') 4 | // const TerserPlugin = require('terser-webpack-plugin') 5 | 6 | module.exports = { 7 | // 基本路径 8 | publicPath: process.env.NODE_ENV === 'production' ? '/' : '/dist', 9 | productionSourceMap: false, 10 | // 是否使用包含运行时编译器的Vue核心的构建 11 | runtimeCompiler: true, 12 | // webpack配置 13 | // see https://github.com/vuejs/vue-cli/blob/dev/docs/webpack.md 14 | chainWebpack: (config) => { 15 | config.resolve.alias 16 | .set('@', resolve('src')) // key,value自行定义,比如.set('@@', resolve('src/components')) 17 | .set('_c', resolve('src/components')) 18 | // 因为是多页面,所以取消 chunks,每个页面只对应一个单独的 JS / CSS 19 | config.optimization.splitChunks({ 20 | cacheGroups: {} 21 | }) 22 | 23 | // it can improve the speed of the first screen, it is recommended to turn on preload 24 | config.plugin('preload').tap(() => [ 25 | { 26 | rel: 'preload', 27 | // to ignore runtime.js 28 | // https://github.com/vuejs/vue-cli/blob/dev/packages/@vue/cli-service/lib/config/app.js#L171 29 | fileBlacklist: [/\.map$/, /hot-update\.js$/, /runtime\..*\.js$/], 30 | include: 'initial' 31 | } 32 | ]) 33 | 34 | // when there are many pages, it will cause too many meaningless requests 35 | config.plugins.delete('prefetch') 36 | 37 | // set preserveWhitespace 38 | config.module 39 | .rule('vue') 40 | .use('vue-loader') 41 | .loader('vue-loader') 42 | .tap(options => { 43 | options.compilerOptions.preserveWhitespace = true 44 | options.transformAssetUrls = { 45 | // avatar: 'img-src' 46 | } 47 | return options 48 | }) 49 | .end() 50 | // =====提取公共代码,防止代码被重复打包,拆分过大的js文件,合并零散的js文件 51 | config 52 | .when(process.env.NODE_ENV !== 'development', 53 | config => { 54 | config 55 | .optimization.splitChunks({ 56 | chunks: 'all', 57 | cacheGroups: { 58 | libs: { 59 | name: 'chunk-libs', 60 | test: /[\\/]node_modules[\\/]/, 61 | priority: 10, 62 | chunks: 'initial' // only package third parties that are initially dependent 63 | }, 64 | elementUI: { 65 | name: 'chunk-elementUI', // split elementUI into a single package 66 | priority: 20, // the weight needs to be larger than libs and app or it will be packaged into libs or app 67 | test: /[\\/]node_modules[\\/]_?element-ui(.*)/ // in order to adapt to cnpm 68 | }, 69 | commons: { 70 | name: 'chunk-commons', 71 | test: path.resolve(__dirname, 'src/components'), 72 | minChunks: 3, // minimum common number 73 | priority: 5, 74 | reuseExistingChunk: true 75 | } 76 | } 77 | }) 78 | // https://webpack.js.org/configuration/optimization/#optimizationruntimechunk 79 | config.optimization.runtimeChunk('single') 80 | } 81 | ) 82 | // ===end 83 | }, 84 | configureWebpack: (config) => { 85 | config.externals = { 86 | 'AMap': 'AMap', 87 | 'AMapUI': 'AMapUI', 88 | 'Loca': 'Loca' 89 | // 'BMapGL': 'BMapGL' 90 | } 91 | if (process.env.NODE_ENV === 'production') { 92 | config.plugins.push( 93 | // eslint-disable-next-line no-undef 94 | new UglifyJsPlugin({ 95 | uglifyOptions: { 96 | compress: { 97 | drop_debugger: true, 98 | drop_console: true // 生产环境自动删除console 99 | }, 100 | warnings: false 101 | }, 102 | sourceMap: false, 103 | parallel: true // 使用多进程并行运行来提高构建速度。默认并发运行数:os.cpus().length - 1。 104 | }) 105 | // new TerserPlugin({ 106 | // terserOptions: { 107 | // mangle: true, // 混淆,默认也是开的,mangle也是可以配置很多选项的,具体看后面的链接 108 | // compress: { 109 | // drop_console: true, // 传true就是干掉所有的console.*这些函数的调用. 110 | // drop_debugger: true, // 干掉那些debugger; 111 | // pure_funcs: ['console.log'] // 如果你要干掉特定的函数比如console.info ,又想删掉后保留其参数中的副作用,那用pure_funcs来处理 112 | // } 113 | // } 114 | // }) 115 | ) 116 | } 117 | } 118 | } 119 | --------------------------------------------------------------------------------