diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..faffad9 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +# Created by .ignore support plugin (hsz.mobi) +.idea/ +node_modules/ +unpackage/ diff --git a/.hbuilderx/launch.json b/.hbuilderx/launch.json new file mode 100644 index 0000000..261ce48 --- /dev/null +++ b/.hbuilderx/launch.json @@ -0,0 +1,24 @@ +{ // launch.json 配置了启动调试时相关设置,configurations下节点名称可为 app-plus/h5/mp-weixin/mp-baidu/mp-alipay/mp-qq/mp-toutiao/mp-360/ + // launchtype项可配置值为local或remote, local代表前端连本地云函数,remote代表前端连云端云函数 + "version": "0.0", + "configurations": [{ + "app-plus" : + { + "launchtype" : "remote" + }, + "default" : + { + "launchtype" : "remote" + }, + "h5" : + { + "launchtype" : "remote" + }, + "mp-weixin" : + { + "launchtype" : "remote" + }, + "type" : "uniCloud" + } + ] +} diff --git a/.project b/.project new file mode 100644 index 0000000..706b8f5 --- /dev/null +++ b/.project @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<projectDescription> + <name>shoppingMall_web</name> + <comment></comment> + <projects> + </projects> + <buildSpec> + </buildSpec> + <natures> + </natures> +</projectDescription> diff --git a/App.vue b/App.vue new file mode 100644 index 0000000..f671549 --- /dev/null +++ b/App.vue @@ -0,0 +1,37 @@ +<script> + // import goodsCateService from '@/service/GoodsCateService'; + export default { + onLaunch: function() { + console.log('App Launch'); + }, + onShow: function() { + console.log('App Show'); + }, + onHide: function() { + console.log('App Hide'); + } + }; +</script> + +<style lang="scss"> + page, + .page { + height: 100%; + width: 100%; + background-color: #ebeef5; + font-size: 28upx; + font-family: -apple-system-font, Helvetica Neue, Helvetica, sans-serif; + } + + .bg-grey { + background: #888888 !important; + } + + .hover-class-bg { + background: #888888 !important; + } + + .hover-class-text { + color: #888888 !important; + } +</style> diff --git a/api/BaseApi.js b/api/BaseApi.js new file mode 100644 index 0000000..f50bf80 --- /dev/null +++ b/api/BaseApi.js @@ -0,0 +1,76 @@ +import request from '../util/request' +import $n from '../util/nothing' +/* import $n from '../util/qqmap-wx-jssdk.min' */ +import Enums from '../util/Enums' +import Qs from 'qs' + +/** + * ajax请求 + * @param {*} + */ +export function _request ({ + url, + params = {}, + method = 'post', + token = false, + contentType = Enums.ContentType.JSON_UTF8, + headers = {} +} = {}) { + headers['Content-Type'] = contentType; + return request.request(url, $n._caseValue(contentType, Enums.ContentType.FORM_UTF8, Qs.stringify(params), params), { + method: method, + _token: token, + headers + }) +} + +/** + * 分页查询 + * @param {*} + */ +export function _queryPage ({ + url, + params = {}, + page = {}, + method = 'post', + token = false, + contentType = Enums.ContentType.JSON_UTF8 +} = {}) { + return _request({ + url, + params, + method, + token, + contentType, + headers: { + 'pageNum': page.pageNum, + 'pageSize': page.pageSize + } + }) +} +/** + * 流式分页查询 + * @param {*} + */ +export function _queryFlowPage ({ + url, + params = {}, + page = {}, + method = 'post', + token = false, + contentType = Enums.ContentType.JSON_UTF8 +} = {}) { + return _request({ + url, + params, + method, + token, + contentType, + headers: { + 'beginTime': page.beginTime, + 'direction': page.direction, + 'orderBy': page.orderBy, + 'pageSize': page.pageSize + } + }) +} diff --git a/api/UserApi.js b/api/UserApi.js new file mode 100644 index 0000000..cdd9166 --- /dev/null +++ b/api/UserApi.js @@ -0,0 +1,23 @@ +import Enums from '../util/Enums' +import { + _request +} from './BaseApi' + +/** + * 登录 + * @param {*} params + */ +export const _login = (params = {}) => _request({url: '/sso/wxMrcologin', params, method: 'post', contentType: Enums.ContentType.FORM_UTF8}) +// export const _login = (params = {}) => _request({url: '/sso/appWxLogin', params, method: 'post',}) + +/** + * 查询用户信息 + * @param {*} params + */ +export const _queryUser = (id = null) => _request({url: '/member/info/' + id, params: {}, token: true, method: 'get'}) + +/** + * 刷新用户Token + * @param {*} params + */ +export const _refreshToken = (oldToken = null) => _request({url: '/sso/refreshToken', params: {token: oldToken}, token: true, method: 'post'}) diff --git a/api/logoApi.js b/api/logoApi.js new file mode 100644 index 0000000..4bbcb33 --- /dev/null +++ b/api/logoApi.js @@ -0,0 +1,16 @@ +import Enums from '../util/Enums' +import { + _request +} from './BaseApi' + +/** + * 初始化 + * @param {*} params + */ +export const _login = (params = {}) => _request({url: '/partnerapplets/index', params, method: 'post', contentType: Enums.ContentType.FORM_UTF8}) +export const _shoplist = (params = {}) => _request({url: '/partnerapplets/index', params,token: true, method: 'post'}) +/** + * 延迟 + * @param {*} params + */ +export const route_timeout = (params = {}) => _request({url: '/partnerapplets/index', params, method: 'post',token: true,timeout: true}) \ No newline at end of file diff --git a/cache/CacheKeys.js b/cache/CacheKeys.js new file mode 100644 index 0000000..c99f976 --- /dev/null +++ b/cache/CacheKeys.js @@ -0,0 +1,14 @@ +export default { + app: { + APP_USER: 'APP_USER', // app信息 + WX_INFO: 'WX_INFO', // 微信信息 + USER_INFO: 'USER_INFO', // 用户信息 + DATA_SYNC_TIME: 'DATA_SYNC_TIME', // 数据同步时间 + BACKGROUND_COLOR: 'BACKGROUND_COLOR', // 背景色 + NAVIGATION_BAR_BACKGROUND_COLOR: 'NAVIGATION_BAR_BACKGROUND_COLOR', // 导航条背景颜色 + NAVIGATION_BAR_FRONT_COLOR: 'NAVIGATION_BAR_FRONT_COLOR' // 导航条前景颜色 + }, + SEARCH: 'SEARCH', // 搜索 + DECIMALS: 'DECIMALS', // 小数位数 + DICT: 'DICT_' // 字典 +} diff --git a/cache/index.js b/cache/index.js new file mode 100644 index 0000000..89ade90 --- /dev/null +++ b/cache/index.js @@ -0,0 +1,48 @@ +import CacheKeys from './CacheKeys' + +/** + * 本地存储KEY前缀 + */ +const _KEY_PREFIX = 'HL_' + +/** + * 用户级缓存定义 + */ +const CACHE_LEVEL_USER = [] + +/** + * 构造缓存KEY + * @param {*} key + */ +const buildKey = (key) => { + let newKey = _KEY_PREFIX + newKey += CACHE_LEVEL_USER.indexOf(key) !== -1 ? (newKey.endsWith('_') ? '' : '_') + this.$AppContext.$store.getters.sysUser + .username : '' + return newKey + (newKey.endsWith('_') ? '' : '_') + key +} + +/** + * 缓存对象API + */ +const cache = { + $Keys: CacheKeys, + _KEY_PREFIX: _KEY_PREFIX, + set: (object) => uni.setStorage(Object.assign(object, { + key: buildKey(object.key) + })), + get: (object) => uni.getStorage(Object.assign(object, { + key: buildKey(object.key) + })), + setSync: (key, data) => uni.setStorageSync(buildKey(key), data), + getSync: (key) => uni.getStorageSync(buildKey(key)), + remove: (object) => uni.removeStorage(Object.assign(object, { + key: buildKey(object.key) + })), + removeSync: (key) => uni.removeStorageSync(buildKey(key)), + clear: (object) => uni.clearStorage(object), + clearSync: () => uni.clearStorageSync(), + getInfo: (object) => uni.getStorageInfo(object), + getInfoSync: () => uni.getStorageInfoSync() +} + +export default cache diff --git a/components/Progress-Bar/Progress-Bar.vue b/components/Progress-Bar/Progress-Bar.vue new file mode 100644 index 0000000..693cdeb --- /dev/null +++ b/components/Progress-Bar/Progress-Bar.vue @@ -0,0 +1,423 @@ +<template> + <view style="width: 60%; margin: auto;"> + <view class="progress" :class="Type"> + <view class="progress-text" v-if="Vice == true">{{ Width + '%' }}</view> + <view class="progress-bar" :style="{width: Width+'%'}"><view class="progress-text" v-if="Main == true">{{ Width + '%' }}</view></view> + </view> + </view> +</template> + +<script> +export default { + props: { + // 进度条百分比 + Width: { + type: Number, + default: 0 + }, + // 进度条样式 + /* + aqua + copper + candy + neon + shine + zigzag + diamond + hearts + sparkle + */ + Type: { + type: String, + default: 'aqua', + }, + // 主进度显示百分比 + Main: { + type: Boolean, + default: true, + }, + // 副进度显示百分比 + Vice: { + type: Boolean, + default: true, + }, + + }, + data() { + return { + + }; + }, + methods: {} +}; +</script> + +<style> +.progress { + position: relative; + z-index: 5; + background: #484848; + border: 10px solid #282828; + border-radius: 20px; + display: inline-block; + box-shadow: 0 5px 17px rgba(40, 40, 40, 0.5), 0 0 3px 1px rgba(40, 40, 40, 0.5) inset; +} + +.progress-text { + position: absolute; + font: bold 14px/20px Arial; + text-align: center; + top: 0; + left: 0; +} + +.progress, +.progress-bar, +.progress-text { + /* width: 710rpx; */ + width: 100%; + height: 40rpx; +} + +.progress .progress-text:first-child { + z-index: 5; + color: white; +} + +.progress .progress-text:last-child { + z-index: 10; + color: black; +} + +.progress-bar { + overflow: hidden; + position: relative; + z-index: 10; + border-radius: 12px; + width: 0; + -moz-transition: width .2s linear; + -webkit-transition: width .2s linear; + -o-transition: width .2s linear; + transition: width .2s linear; +} + +/* Test Style */ +.progress.test .progress-bar { + background-color: #00baba; + background-image: -moz-linear-gradient(left, #d1fffb 0%, #00baba 100%); + background-image: -webkit-linear-gradient(left, #d1fffb 0%, #00baba 100%); + background-image: -o-linear-gradient(left, #d1fffb 0%, #00baba 100%); + background-image: -ms-linear-gradient(left, #d1fffb 0%, #00baba 100%); + background-image: linear-gradient(to right, #d1fffb 0%, #00baba 100%); + background-size: 200px 20px; + overflow: visible; +} + +.progress.test .progress-text:first-child { + display: none; +} + +.progress.test .progress-text:last-child { + left: auto; + top: auto; + bottom: -26px; + right: -12px; + display: block; + background-color: #00baba; + width: 40px; + height: 20px; + border-radius: 3px; +} + +.test[data-width='0%'] .progress-text:last-child { + display: none; +} + +.progress.test .progress-text:last-child:before { + position: absolute; + left: 12px; + top: -6px; + content: ''; + width: 0; + height: 0; + border-style: solid; + border-width: 0 6px 6px 6px; + border-color: transparent transparent #00baba transparent; +} + +/* Copper style */ +.progress.copper .progress-bar { + background-color: #b68d4c; + background-image: -moz-linear-gradient(top, #f3e2c7 0%, #b68d4c 51%, #e9d4b3 100%); + background-image: -webkit-linear-gradient(top, #f3e2c7 0%, #b68d4c 51%, #e9d4b3 100%); + background-image: -ms-linear-gradient(top, #f3e2c7 0%, #b68d4c 51%, #e9d4b3 100%); + background-image: linear-gradient(to bottom, #f3e2c7 0%, #b68d4c 51%, #e9d4b3 100%); + box-shadow: inset 2px 2px 3px 0 rgba(255, 255, 255, 0.75), inset -3px 0 3px 0 rgba(255, 255, 255, 0.75); +} + +/* Aqua Style */ +.progress.aqua .progress-bar { + background-color: #00baba; + background-image: -moz-linear-gradient(left, #d1fffb 0%, #00baba 100%); + background-image: -webkit-linear-gradient(left, #d1fffb 0%, #00baba 100%); + background-image: -o-linear-gradient(left, #d1fffb 0%, #00baba 100%); + background-image: -ms-linear-gradient(left, #d1fffb 0%, #00baba 100%); + background-image: linear-gradient(to right, #d1fffb 0%, #00baba 100%); +} + +/* Candystripe style */ +.progress.candy .progress-bar { + background-color: #d00; + box-shadow: 0 0 6px 2px rgba(255, 255, 255, 0.3) inset; + background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.35) 25%, rgba(255, 255, 255, 0) 25%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0.35) 50%, rgba(255, 255, 255, 0.35) 75%, rgba(255, 255, 255, 0) 75%, rgba(255, 255, 255, 0)); + background-repeat: repeat-x; + background-size: 20px 20px; + -webkit-animation: candystripe 1s linear infinite; + -moz-animation: candystripe 1s linear infinite; + animation: candystripe 1s linear infinite; +} + +@-webkit-keyframes candystripe { + to { + background-position: 20px 0; + } +} + +@-moz-keyframes candystripe { + to { + background-position: 20px 0; + } +} + +@keyframes candystripe { + to { + background-position: 20px 0; + } +} + +/* Pulsating Neon style */ +.progress.neon .progress-bar { + background-color: #fff; + box-shadow: 0 0 5px #01fe32 inset, 0 0 16px #08ff35, 0 0 20px #08ff35, 0 0 15px #08ff35; + -webkit-animation: pulse 2s linear infinite; + -moz-animation: pulse 2s linear infinite; + animation: pulse 2s linear infinite; +} + +@-webkit-keyframes pulse { + 50% { + box-shadow: 0 0 5px #01fe32 inset, 0 0 10px #08ff35, 0 0 10px #08ff35, 0 0 10px #08ff35; + } +} + +@-moz-keyframes pulse { + 50% { + box-shadow: 0 0 5px #01fe32 inset, 0 0 10px #08ff35, 0 0 10px #08ff35, 0 0 10px #08ff35; + } +} + +@keyframes pulse { + 50% { + box-shadow: 0 0 5px #01fe32 inset, 0 0 10px #08ff35, 0 0 10px #08ff35, 0 0 10px #08ff35; + } +} + +/* Shine style */ +.progress.shine .progress-bar { + background-color: #00BA0C; + background-image: -moz-linear-gradient(left, #00BA0C 0%, #00BA0C 75%, #D7FFD1 80%, #00BA0C 85%, #00BA0C 100%); + background-image: -webkit-linear-gradient(left, #00BA0C 0%, #00BA0C 75%, #D7FFD1 80%, #00BA0C 85%, #00BA0C 100%); + background-image: -o-linear-gradient(left, #00BA0C 0%, #00BA0C 75%, #D7FFD1 80%, #00BA0C 85%, #00BA0C 100%); + background-image: -ms-linear-gradient(left, #00BA0C 0%, #00BA0C 75%, #D7FFD1 80%, #00BA0C 85%, #00BA0C 100%); + background-image: linear-gradient(to right, #00BA0C 0%, #00BA0C 75%, #D7FFD1 80%, #00BA0C 85%, #00BA0C 100%); + background-size: 800px 20px; + box-shadow: inset 0 -2px 2px rgba(0, 0, 0, 0.5), inset 0 2px 2px rgba(255, 255, 255, 0.8); + -webkit-animation: shine 2s linear infinite; + -moz-animation: shine 2s linear infinite; + animation: shine 2s linear infinite; +} + +@-webkit-keyframes shine { + to { + background-position: 800px 0; + } +} + +@-moz-keyframes shine { + to { + background-position: 800px 0; + } +} + +@keyframes shine { + to { + background-position: 800px 0; + } +} + +/* Zigzag style */ +.progress.zigzag .progress-bar { + background-color: #EFE743; + background-image: -moz-linear-gradient(135deg, #EA0000 25%, rgba(234, 0, 0, 0) 25%), -moz-linear-gradient(225deg, #EA0000 25%, rgba(234, 0, 0, 0) 25%), -moz-linear-gradient(315deg, #EA0000 25%, rgba(234, 0, 0, 0) 25%), -moz-linear-gradient(45deg, #EA0000 25%, rgba(234, 0, 0, 0) 25%); + background-image: -webkit-linear-gradient(135deg, #EA0000 25%, rgba(234, 0, 0, 0) 25%), -webkit-linear-gradient(225deg, #EA0000 25%, rgba(234, 0, 0, 0) 25%), -webkit-linear-gradient(315deg, #EA0000 25%, rgba(234, 0, 0, 0) 25%), -webkit-linear-gradient(45deg, #EA0000 25%, rgba(234, 0, 0, 0) 25%); + background-image: -o-linear-gradient(135deg, #EA0000 25%, rgba(234, 0, 0, 0) 25%), -o-linear-gradient(225deg, #EA0000 25%, rgba(234, 0, 0, 0) 25%), -o-linear-gradient(315deg, #EA0000 25%, rgba(234, 0, 0, 0) 25%), -o-linear-gradient(45deg, #EA0000 25%, rgba(234, 0, 0, 0) 25%); + background-image: -ms-linear-gradient(135deg, #EA0000 25%, rgba(234, 0, 0, 0) 25%), -ms-linear-gradient(225deg, #EA0000 25%, rgba(234, 0, 0, 0) 25%), -ms-linear-gradient(315deg, #EA0000 25%, rgba(234, 0, 0, 0) 25%), -ms-linear-gradient(45deg, #EA0000 25%, rgba(234, 0, 0, 0) 25%); + background-image: linear-gradient(135deg, #EA0000 25%, rgba(234, 0, 0, 0) 25%), linear-gradient(225deg, #EA0000 25%, rgba(234, 0, 0, 0) 25%), linear-gradient(315deg, #EA0000 25%, rgba(234, 0, 0, 0) 25%), linear-gradient(45deg, #EA0000 25%, rgba(234, 0, 0, 0) 25%); + background-position: -10px 0, -10px 0, 0 0, 0 0; + background-size: 20px 20px; + -webkit-animation: zigzagmove .5s linear infinite; + -moz-animation: zigzagmove .5s linear infinite; + animation: zigzagmove .5s linear infinite; +} + +@-webkit-keyframes zigzagmove { + to { + background-position: 10px 0, 10px 0, 20px 0, 20px 0; + } +} + +@-moz-keyframes zigzagmove { + to { + background-position: 10px 0, 10px 0, 20px 0, 20px 0; + } +} + +@keyframes zigzagmove { + to { + background-position: 10px 0, 10px 0, 20px 0, 20px 0; + } +} + +/* Diamond style */ +.progress.diamond .progress-bar { + background-color: #eee; + background-image: -moz-linear-gradient(45deg, red 25%, rgba(255, 0, 0, 0) 25%, rgba(255, 0, 0, 0) 75%, red 75%, red), -moz-linear-gradient(-45deg, red 25%, rgba(255, 0, 0, 0) 25%, rgba(255, 0, 0, 0) 75%, red 75%, red); + background-image: -webkit-linear-gradient(45deg, red 25%, rgba(255, 0, 0, 0) 25%, rgba(255, 0, 0, 0) 75%, red 75%, red), -webkit-linear-gradient(-45deg, red 25%, rgba(255, 0, 0, 0) 25%, rgba(255, 0, 0, 0) 75%, red 75%, red); + background-image: -o-linear-gradient(45deg, red 25%, rgba(255, 0, 0, 0) 25%, rgba(255, 0, 0, 0) 75%, red 75%, red), -o-linear-gradient(-45deg, red 25%, rgba(255, 0, 0, 0) 25%, rgba(255, 0, 0, 0) 75%, red 75%, red); + background-image: -ms-linear-gradient(45deg, red 25%, rgba(255, 255, 255, 0) 25%, rgba(255, 0, 0, 0) 75%, red 75%, red), -ms-linear-gradient(-45deg, red 25%, rgba(255, 0, 0, 0) 25%, rgba(255, 0, 0, 0) 75%, red 75%, red); + background-image: linear-gradient(45deg, red 25%, rgba(255, 0, 0, 0) 25%, rgba(255, 0, 0, 0) 75%, red 75%, red), linear-gradient(-45deg, red 25%, rgba(255, 0, 0, 0) 25%, rgba(255, 0, 0, 0) 75%, red 75%, red); + background-size: 10px 10px; + -webkit-animation: move 1.2s linear alternate infinite; + -moz-animation: move 1.2s linear alternate infinite; + animation: move 1.2s linear alternate infinite; +} + +@-webkit-keyframes move { + to { + background-position: 5px -10px; + background-size: 20px 20px; + } +} + +@-moz-keyframes move { + to { + background-position: 5px -10px; + background-size: 20px 20px; + } +} + +@keyframes move { + to { + background-position: 5px -10px; + background-size: 20px 20px; + } +} + +.progress.sparkle .progress-bar { + background-color: #F7A806; + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAG4AAABACAMAAADMI7KPAAACZFBMVEX////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////xG13JAAAAzHRSTlMAAQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+f4CBgoOEhYaHiImKi4yNjo+QkZKTlJWWl5iZmpucnZ6foKGio6SlpqeoqaqrrK2ur7CxsrO0tba3uLm6u7y9vr/AwcLDxMXGx8jJytLua8SRAAASK0lEQVR42nXWWZMb12H28edsvQJoAINl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"); + box-shadow: inset 0 -2px 2px rgba(0, 0, 0, 0.5), inset 0 2px 2px rgba(255, 255, 255, 0.8); + -webkit-animation: sparkle 1500ms linear infinite; + -moz-animation: sparkle 1500ms linear infinite; + -o-animation: sparkle 1500ms linear infinite; + animation: sparkle 1500ms linear infinite; +} + +@-webkit-keyframes sparkle { + from { + background-position: 0 0; + } + + to { + background-position: 0 -64px; + } +} + +@-moz-keyframes sparkle { + from { + background-position: 0 0; + } + + to { + background-position: 0 -64px; + } +} + +@-o-keyframes sparkle { + from { + background-position: 0 0; + } + + to { + background-position: 0 -64px; + } +} + +@keyframes sparkle { + from { + background-position: 0 0; + } + + to { + background-position: 0 -64px; + } +} + +.progress.hearts .progress-bar { + background-image: + radial-gradient(circle closest-side at 60% 43%, #bb0033 26%, rgba(187, 0, 51, 0) 27%), + radial-gradient(circle closest-side at 40% 43%, #bb0033 26%, rgba(187, 0, 51, 0) 27%), + radial-gradient(circle closest-side at 40% 22%, #dd3355 45%, rgba(221, 51, 85, 0) 46%), + radial-gradient(circle closest-side at 60% 22%, #dd3355 45%, rgba(221, 51, 85, 0) 46%), + radial-gradient(circle closest-side at 50% 35%, #dd3355 30%, rgba(221, 51, 85, 0) 31%), + radial-gradient(circle closest-side at 60% 43%, #bb0033 26%, rgba(187, 0, 51, 0) 27%), + radial-gradient(circle closest-side at 40% 43%, #bb0033 26%, rgba(187, 0, 51, 0) 27%), + radial-gradient(circle closest-side at 40% 22%, #dd3355 45%, rgba(221, 51, 85, 0) 46%), + radial-gradient(circle closest-side at 60% 22%, #dd3355 45%, rgba(221, 51, 85, 0) 46%), + radial-gradient(circle closest-side at 50% 35%, #dd3355 30%, rgba(221, 51, 85, 0) 31%); + background-color: #b03; + background-position: 0 0, 0 0, 0 0, 0 0, 0 0, 20px 20px, 20px 20px, 20px 20px, 20px 20px, 0 0; + background-size: 40px 40px; + -webkit-animation: heartmove 1.2s linear infinite; + -moz-animation: heartmove 1.2s linear infinite; + animation: heartmove 1.2s linear infinite; +} + +@-webkit-keyframes heartmove { + to { + background-position: 20px 0; + } +} + +@-moz-keyframes heartmove { + to { + background-position: 20px 0; + } +} + +@keyframes heartmove { + to { + background-position: 40px 0, 40px 0, 40px 0, 40px 0, 40px 20px, 40px 20px, 40px 20px, 40px 20px, 40px 20px, 40px 0px; + } +} + +h2 { + text-align: center; + font-size: 18px; + font-family: Arial; +} + +a { + color: #89310F; +} +</style> diff --git a/components/ay-firework/README.md b/components/ay-firework/README.md new file mode 100644 index 0000000..15b9c77 --- /dev/null +++ b/components/ay-firework/README.md @@ -0,0 +1,32 @@ +## 使用注意 +- 引入该组件,用v-if控制组件,组件create会触发喷发特效函数,然后可以传入一些位置参数,具体参考组件内的props属性,每个属性都备注了 +- +## 示例代码 +``` + <template> + <view> + <fireworks v-if="isReady" /> + </view> + </template> + + <script> + import fireworks from '@/components/fireworks/index.vue' + export default { + data() { + return { + isReady: false + } + }, + components: { + fireworks + }, + onReady() { + this.$nextTick(() => {//后面记得销毁哈,不使用时设置为false + setTimeout(() => { + this.isReady = true; + }, 50) + }) + }, + } + </script> +``` \ No newline at end of file diff --git a/components/ay-firework/firework.vue b/components/ay-firework/firework.vue new file mode 100644 index 0000000..8725372 --- /dev/null +++ b/components/ay-firework/firework.vue @@ -0,0 +1,236 @@ +<template> + <canvas class="fire-canvas" :style="{width: width + 'px', height: height + 'px', 'z-index': zIndex}" + :canvas-id="canvasId" @error="canvasIdErrorCallback"></canvas> +</template> + +<script> + /* + 浏览器的最高刷新赔率(最后一个表示1秒刷新60次) + */ + const minBrowserRefreshTime = window && (window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame) || function(t) { + setTimeout(t, 1e3 / 60) + } + const systenInfo = uni.getSystemInfoSync(); + let fireCanvasBox = null; + export default { + props: { + /* + 礼花数量(最好小于500,太多会卡顿) + */ + particleCount: { + type: [Number, String], + default: 30 + }, + /*取值 0-360 + 喷发角度示意图(简单说就是喷射方向) + 礼花(90) + 礼花(180) 礼花0 + 礼花(270) + */ + angle: { + type: [Number, String], + default: 90 + }, + /* + 爆炸范围 + */ + spread: { + type: [Number, String], + default: 100 + }, + /* + 喷发的初始速度 + */ + startVelocity: { + type: [Number, String], + default: 45 + }, + /* + 喷发的衰退时间,超出canvas会被清除,跟startVelocity配合使用 + */ + decay: { + type: [Number, String], + default: 0.9 + }, + /* + 刷新几次消失(其实是透明度为0),这个跟间隔的刷新频率有关 + */ + ticks: { + type: [Number, String], + default: 150 + }, + /* + 礼花层级 + */ + zIndex: { + type: [Number, String], + default: 1 + }, + /* + 所有要随机的礼花颜色预选值 + */ + colors: { + type: Array, + default: () => ["#5BC0EB", "#2176AE", "#FDE74C", "#9BC53D", "#E55934", "#FA7921", "#FF4242"] + }, + canvasId: { + type: String, + default: 'fireCanvas' + }, + /* + canvas宽度(单位px) + */ + width: { + type: [Number, String], + default: () => { + return systenInfo.windowWidth + } + }, + /* + canvas高度(单位px) + */ + height: { + type: [Number, String], + default: () => { + return systenInfo.windowHeight + } + }, + /* + 中心点-x + */ + x: { + type: [Number, String], + default: () => { + return systenInfo.windowWidth / 2 + } + }, + /* + 中心点-y + */ + y: { + type: [Number, String], + default: () => { + return systenInfo.windowHeight * 0.4 + } + } + }, + data() { + return { + /* + 手机分辨率 + */ + pixelRatio: systenInfo.pixelRatio + } + }, + onShow(){ + console.log('onShow'); + this.initCanvas(); + }, created() { + console.log('created'); + this.initCanvas(); + }, + methods: { + open(){ + + }, + /* + 转16进制(颜色用) + */ + parseInt16(t) { + return parseInt(t, 16); + }, + canvasIdErrorCallback(e) { + console.error(e.detail.errMsg) + }, + initCanvas() { + fireCanvasBox = null; + fireCanvasBox = uni.createCanvasContext(this.canvasId, this); + fireCanvasBox.fillRect(0, 0, this.width * this.pixelRatio, this.height * this.pixelRatio); + fireCanvasBox.scale(this.pixelRatio,this.pixelRatio); + fireCanvasBox.save(); + this.fireworksDraw(); + }, + fireworksDraw() { + let ribbon = [] ,//彩带容器 + particleCount = this.particleCount, n = null, r = null, a = null,i = null; + for (; particleCount--;){ + n = { + x: this.x, + y: this.y, + angle: this.angle, + spread: this.spread, + startVelocity: this.startVelocity, + color: this.colors[particleCount % this.colors.length], + ticks: this.ticks, + decay: this.decay + }, + i = 0, + r = n.angle * (Math.PI / 180), + a = n.spread * (Math.PI / 180); + ribbon.push({//菜单位置初始化 + x: n.x, + y: n.y, + depth: .5 * Math.random() + .6, + wobble: 10 * Math.random(), + velocity: .5 * n.startVelocity + Math.random() * n.startVelocity, + angle2D: -r + (.5 * a - Math.random() * a), + tiltAngle: Math.random() * Math.PI, + color: (i = (n.color + "").replace(/[^0-9a-f]/gi, ""), i.length < 6 && (i = i[0] + i[0] + i[1] + i[1] + i[2] + i[2]), {//生成随机颜色 + r: this.parseInt16(i.substring(0, 2)), + g: this.parseInt16(i.substring(2, 4)), + b: this.parseInt16(i.substring(4, 6)) + }), + tick: 0, + totalTicks: n.ticks, + decay: n.decay, + random: Math.random() + 5, + tiltSin: 0, + tiltCos: 0, + wobbleX: 0, + wobbleY: 0 + }) + } + minBrowserRefreshTime(function drawRibbon() { + if(!fireCanvasBox) return ; + fireCanvasBox.draw(), + fireCanvasBox.restore(), + ribbon = ribbon.filter((e) => { + e.x += Math.cos(e.angle2D) * e.velocity, + e.y += Math.sin(e.angle2D) * e.velocity + 5 * e.depth, + e.wobble += .1, + e.velocity *= e.decay, + e.tiltAngle += .02 * Math.random() + .12, + e.tiltSin = Math.sin(e.tiltAngle), + e.tiltCos = Math.cos(e.tiltAngle), + e.random = Math.random() + 4, + e.wobbleX = e.x + 10 * Math.cos(e.wobble) * e.depth, + e.wobbleY = e.y + 10 * Math.sin(e.wobble) * e.depth; + // 开始画图 + fireCanvasBox.fillStyle="rgba(" + e.color.r + ", " + e.color.g + ", " + e.color.b + ", " + (1 - (e.tick++) / e.totalTicks) + ")", + fireCanvasBox.beginPath(), + fireCanvasBox.moveTo(Math.floor(e.x),Math.floor(e.y)), + fireCanvasBox.lineTo(Math.floor(e.wobbleX),Math.floor(e.y + e.random * e.tiltSin)), + fireCanvasBox.lineTo(Math.floor(e.wobbleX + e.random * e.tiltCos),Math.floor(e.wobbleY + e.random * e.tiltSin)), + fireCanvasBox.lineTo(Math.floor(e.x + e.random * e.tiltCos),Math.floor(e.wobbleY)), + fireCanvasBox.closePath(), + fireCanvasBox.fill(); + return e.tick < e.totalTicks + }) + ribbon.length ? minBrowserRefreshTime(drawRibbon): fireCanvasBox = null;//轮询调用或者释放掉 + } + ) + } + }, + + } +</script> + +<style> + .fire-canvas{ + position: fixed; + top: 0px; + left: 0px; + pointer-events: none; + z-index: 99999999; + } +</style> diff --git a/components/colorui/main.css b/components/colorui/main.css new file mode 100644 index 0000000..4579ea6 --- /dev/null +++ b/components/colorui/main.css @@ -0,0 +1,249 @@ +/* ================== + 初始化 + ==================== */ +body { + background-color: #f1f1f1; + font-size: 28upx; + color: #333333; + font-family: Helvetica Neue, Helvetica, sans-serif; +} + +view, +scroll-view, +swiper, +button, +input, +textarea, +label, +navigator, +image { + box-sizing: border-box; +} + +/* ================== + 按钮 + ==================== */ +.cu-btn { + position: relative; + border: 0upx; + display: inline-flex; + align-items: center; + justify-content: center; + box-sizing: border-box; + padding: 0 30upx; + font-size: 28upx; + height: 64upx; + line-height: 1; + text-align: center; + text-decoration: none; + overflow: visible; + margin-left: initial; + transform: translate(0upx, 0upx); + margin-right: initial; +} + +.cu-btn::after { + display: none; +} + +/* ================== + 操作条 + ==================== */ + +.cu-bar { + display: flex; + position: relative; + align-items: center; + min-height: 100upx; + justify-content: space-between; +} + +.cu-bar .action { + display: flex; + align-items: center; + height: 100%; + justify-content: center; + max-width: 100%; +} + +.cu-bar .action:first-child { + margin-left: 30upx; + font-size: 30upx; +} + + +.cu-bar .cu-avatar:first-child { + margin-left: 20upx; +} + +.cu-bar .action:first-child>.cuIcon { + margin-left: -0.3em; + margin-right: 0.3em; +} + +.cu-bar .action:last-child { + margin-right: 30upx; +} + +.cu-bar .action>.cuIcon, +.cu-bar .action>.cuIcon { + font-size: 36upx; +} + +.cu-bar .action>.cuIcon+.cuIcon { + margin-left: 0.5em; +} + +.cu-bar.fixed, +.nav.fixed { + position: fixed; + width: 100%; + top: 0; + z-index: 1024; + box-shadow: 0 1upx 6upx rgba(0, 0, 0, 0.1); +} + +.cu-bar.foot { + position: fixed; + width: 100%; + bottom: 0; + z-index: 1024; + box-shadow: 0 -1upx 6upx rgba(0, 0, 0, 0.1); +} + +.cu-bar.tabbar { + padding: 0; + height: calc(100upx + env(safe-area-inset-bottom) / 2); + padding-bottom: calc(env(safe-area-inset-bottom) / 2); +} + +.cu-tabbar-height { + min-height: 100upx; + height: calc(100upx + env(safe-area-inset-bottom) / 2); +} + +.cu-bar.tabbar.shadow { + box-shadow: 0 -1upx 6upx rgba(0, 0, 0, 0.1); +} + +.cu-bar.tabbar .action { + font-size: 22upx; + position: relative; + flex: 1; + text-align: center; + padding: 0; + display: block; + height: auto; + line-height: 1; + margin: 0; + background-color: inherit; + overflow: initial; +} + +.cu-bar.tabbar.shop .action { + width: 140upx; + flex: initial; +} + +.cu-bar.tabbar .action.add-action { + position: relative; + z-index: 2; + padding-top: 50upx; +} + +.cu-bar.tabbar .action.add-action .cuIcon { + position: absolute; + width: 70upx; + z-index: 2; + height: 70upx; + border-radius: 50%; + line-height: 70upx; + font-size: 50upx; + top: -35upx; + left: 0; + right: 0; + margin: auto; + padding: 0; +} + +.cu-bar.tabbar .action.add-action::after { + content: ""; + position: absolute; + width: 100upx; + height: 100upx; + top: -50upx; + left: 0; + right: 0; + margin: auto; + box-shadow: 0 -3upx 8upx rgba(0, 0, 0, 0.08); + border-radius: 50upx; + background-color: inherit; + z-index: 0; +} + +.cu-bar.tabbar .action.add-action::before { + content: ""; + position: absolute; + width: 100upx; + height: 30upx; + bottom: 30upx; + left: 0; + right: 0; + margin: auto; + background-color: inherit; + z-index: 1; +} + +.cu-bar.tabbar .btn-group { + flex: 1; + display: flex; + justify-content: space-around; + align-items: center; + padding: 0 10upx; +} + +.cu-bar.tabbar .action .cuIcon { + width: 100upx; + position: relative; + display: block; + height: auto; + margin: 0 auto 10upx; + text-align: center; + font-size: 40upx; +} + + +.cu-bar.tabbar .submit { + align-items: center; + display: flex; + justify-content: center; + text-align: center; + position: relative; + flex: 2; + align-self: stretch; +} + +.cu-bar.tabbar .submit:last-child { + flex: 2.6; +} + +.cu-bar.tabbar .submit+.submit { + flex: 2; +} + +.cu-bar.tabbar.border .action::before { + content: " "; + width: 200%; + height: 200%; + position: absolute; + top: 0; + left: 0; + transform: scale(0.5); + transform-origin: 0 0; + border-right: 1upx solid rgba(0, 0, 0, 0.1); + z-index: 3; +} + +.cu-bar.tabbar.border .action:last-child:before { + display: none; +} diff --git a/components/cropper/cropper.vue b/components/cropper/cropper.vue new file mode 100644 index 0000000..2ad3fd5 --- /dev/null +++ b/components/cropper/cropper.vue @@ -0,0 +1,621 @@ +<template> + <view class="cropper" id="cropper" :class="{ show: show }"> + <view class="cropper-head"><view class="cropper-btn cropper-reset" @tap="resetCrop">重做</view></view> + <view class="cropper-body"> + <image id="image" class="cropper-image" :src="imagePath" mode="aspectFit"></image> + <view :style="{ width: stageWidth + 'px', height: stageHeight + 'px', left: stageLeft + 'px', top: stageTop + 'px' }" class="cropper-stage" @touchstart.stop.prevent="touchStart" @touchmove.stop.prevent="touchMove"> + <view id="box" class="cropper-box" :style="{ width: boxWidth + 'px', height: boxHeight + 'px', left: boxLeft + 'px', top: boxTop + 'px' }"> + <view id="lt" class="lt"></view> + <view id="lb" class="lb"></view> + <view id="rt" class="rt"></view> + <view id="rb" class="rb"></view> + + <view class="line-v" style="left:33.3%;"></view> + <view class="line-v" style="left:66.6%;"></view> + <view class="line-h" style="top:33.3%;"></view> + <view class="line-h" style="top:66.6%;"></view> + </view> + </view> + + <canvas class="cropper-canvas" canvas-id="canvas" :style="{ height: canvasHeight + 'px', width: canvasWidth + 'px' }"></canvas> + </view> + <view class="cropper-bottom"> + <view class="cropper-btn cropper-cancel" @tap="cancelCrop">取消</view> + <view class="cropper-btn cropper-ok" @tap="completeCrop">裁剪</view> + </view> + </view> +</template> +<script> +//无须渲染的变量 + +let layoutLeft = 0; +let layoutTop = 0; +let layoutWidth = 0; +let layoutHeight = 0; + +let stageLeft = 0; +let stageTop = 0; +let stageWidth = 0; +let stageHeight = 0; + +let imageWidth = 0; +let imageHeight = 0; + +let pixelRatio = 1; //todo设备像素密度//暂不使用// + +let imageStageRatio = 1; //图片实际尺寸与剪裁舞台大小的比值,用于尺寸换算。 + +let minBoxWidth = 0; +let minBoxHeight = 0; + +let touchStartBoxLeft = 0; +let touchStartBoxTop = 0; +let touchStartBoxWidth = 0; +let touchStartBoxHeight = 0; + +let touchStartX = 0; +let touchStartY = 0; + +export default { + name: 'cropper', + props: { + quality: { + type: Number, + default: 1 + }, + + //目标文件的类型。默认值为jpg,jpg:输出jpg格式图片;png:输出png格式图片 + outputFileType: { + type: String, + default: 'jpg' + }, + //目标图片的宽高比,默认null,即不限制剪裁宽高比。aspectRatio需大于0 + aspectRatio: { + type: [Number, null], + default: null + }, + //最小剪裁尺寸与原图尺寸的比率,默认0.15,即宽度最小剪裁到原图的0.15宽。 + minBoxWidthRatio: { + type: Number, + default: 0.15 + }, + //同minBoxWidthRatio,当设置aspectRatio时,minBoxHeight值设置无效。minBoxHeight值由minBoxWidth 和 aspectRatio自动计算得到。 + minBoxHeightRatio: { + type: Number, + default: 0.15 + }, + //剪裁框初始大小比率。默认值0.8,即剪裁框默认宽度为图片宽度的0.8倍。 + initialBoxWidthRatio: { + type: Number, + default: 0.8 + }, + //同initialBoxWidthRatio,当设置aspectRatio时,initialBoxHeightRatio值设置无效。initialBoxHeightRatio值由initialBoxWidthRatio 和 aspectRatio自动计算得到。 + initialBoxHeightRatio: { + type: Number, + default: 0.8 + } + }, + data() { + return { + //data + stageLeft: 0, + stageTop: 0, + stageWidth: 0, + stageHeight: 0, + + boxWidth: 0, + boxHeight: 0, + boxLeft: 0, + boxTop: 0, + + canvasWidth: 0, + canvasHeight: 0, + show: false, + imagePath: '' + }; + }, + mounted() { + // setTimeout(() => { + // this.init(); + // }, 150); + }, + methods: { + resetCrop() { + this.$emit('reset'); + this.init(this.imagePath); + }, + cancelCrop() { + this.$emit('cancel'); + }, + completeCrop() { + let imagePath = this.imagePath; + let canvasContext = wx.createCanvasContext('canvas', this); + + let boxLeft = this.boxLeft; + let boxTop = this.boxTop; + let boxWidth = this.boxWidth; + let boxHeight = this.boxHeight; + + let sx = Math.ceil(boxLeft * imageStageRatio); + let sy = Math.ceil(boxTop * imageStageRatio); + + let sWidth = Math.ceil(boxWidth * imageStageRatio); + let sHeight = Math.ceil(boxHeight * imageStageRatio); + let dx = 0; + let dy = 0; + + let dWidth = Math.ceil(sWidth * pixelRatio); + let dHeight = Math.ceil(sHeight * pixelRatio); + const param = { + x: sx, + y: sy, + width: dWidth, + height: dHeight, + rotate: 0, + scaleX: 1, + scaleY: 1 + }; + + canvasContext.drawImage(imagePath, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight); + canvasContext.draw(false, () => { + wx.canvasToTempFilePath( + { + x: dx, + y: dy, + width: dWidth, + height: dHeight, + destWidth: sWidth, + destHeight: sHeight, + canvasId: 'canvas', + fileType: this.outputFileType, + quality: this.quality, + success: res => { + this.$emit('complete', { param, path: res.tempFilePath,source:this.imagePath }); + } + }, + this + ); + }); + }, + touchMove(e) { + let targetId = e.target.id; + let touch = e.touches[0]; + let pageX = touch.pageX; + let pageY = touch.pageY; + + let offsetX = pageX - touchStartX; + let offsetY = pageY - touchStartY; + + if (targetId == 'box') { + let newBoxLeft = touchStartBoxLeft + offsetX; + let newBoxTop = touchStartBoxTop + offsetY; + + if (newBoxLeft < 0) { + newBoxLeft = 0; + } + if (newBoxTop < 0) { + newBoxTop = 0; + } + if (newBoxLeft + touchStartBoxWidth > stageWidth) { + newBoxLeft = stageWidth - touchStartBoxWidth; + } + if (newBoxTop + touchStartBoxHeight > stageHeight) { + newBoxTop = stageHeight - touchStartBoxHeight; + } + this.boxLeft = newBoxLeft; + this.boxTop = newBoxTop; + } else if (targetId == 'lt') { + if (this.aspectRatio) { + offsetY = offsetX / this.aspectRatio; + } + + let newBoxLeft = touchStartBoxLeft + offsetX; + let newBoxTop = touchStartBoxTop + offsetY; + + if (newBoxLeft < 0) { + newBoxLeft = 0; + } + if (newBoxTop < 0) { + newBoxTop = 0; + } + + if (touchStartBoxLeft + touchStartBoxWidth - newBoxLeft < minBoxWidth) { + newBoxLeft = touchStartBoxLeft + touchStartBoxWidth - minBoxWidth; + } + if (touchStartBoxTop + touchStartBoxHeight - newBoxTop < minBoxHeight) { + newBoxTop = touchStartBoxTop + touchStartBoxHeight - minBoxHeight; + } + + let newBoxWidth = touchStartBoxWidth - (newBoxLeft - touchStartBoxLeft); + let newBoxHeight = touchStartBoxHeight - (newBoxTop - touchStartBoxTop); + + //约束比例 + if (newBoxTop == 0 && this.aspectRatio && newBoxLeft != 0) { + newBoxWidth = newBoxHeight * this.aspectRatio; + newBoxLeft = touchStartBoxWidth - newBoxWidth + touchStartBoxLeft; + } + if (newBoxLeft == 0 && this.aspectRatio) { + newBoxHeight = newBoxWidth / this.aspectRatio; + newBoxTop = touchStartBoxHeight - newBoxHeight + touchStartBoxTop; + } + + if (newBoxWidth == minBoxWidth && this.aspectRatio) { + newBoxHeight = newBoxWidth / this.aspectRatio; + newBoxTop = touchStartBoxHeight - newBoxHeight + touchStartBoxTop; + } + this.boxTop = newBoxTop; + this.boxLeft = newBoxLeft; + this.boxWidth = newBoxWidth; + this.boxHeight = newBoxHeight; + } else if (targetId == 'rt') { + if (this.aspectRatio) { + offsetY = -offsetX / this.aspectRatio; + } + + let newBoxWidth = touchStartBoxWidth + offsetX; + if (newBoxWidth < minBoxWidth) { + newBoxWidth = minBoxWidth; + } + if (touchStartBoxLeft + newBoxWidth > stageWidth) { + newBoxWidth = stageWidth - touchStartBoxLeft; + } + + let newBoxTop = touchStartBoxTop + offsetY; + + if (newBoxTop < 0) { + newBoxTop = 0; + } + + if (touchStartBoxTop + touchStartBoxHeight - newBoxTop < minBoxHeight) { + newBoxTop = touchStartBoxTop + touchStartBoxHeight - minBoxHeight; + } + let newBoxHeight = touchStartBoxHeight - (newBoxTop - touchStartBoxTop); + + //约束比例 + if (newBoxTop == 0 && this.aspectRatio && newBoxWidth != stageWidth - touchStartBoxLeft) { + newBoxWidth = newBoxHeight * this.aspectRatio; + } + + if (newBoxWidth == stageWidth - touchStartBoxLeft && this.aspectRatio) { + newBoxHeight = newBoxWidth / this.aspectRatio; + newBoxTop = touchStartBoxHeight - newBoxHeight + touchStartBoxTop; + } + + if (newBoxWidth == minBoxWidth && this.aspectRatio) { + newBoxHeight = newBoxWidth / this.aspectRatio; + newBoxTop = touchStartBoxHeight - newBoxHeight + touchStartBoxTop; + } + + this.boxTop = newBoxTop; + this.boxHeight = newBoxHeight; + this.boxWidth = newBoxWidth; + } else if (targetId == 'lb') { + if (this.aspectRatio) { + offsetY = -offsetX / this.aspectRatio; + } + let newBoxLeft = touchStartBoxLeft + offsetX; + + if (newBoxLeft < 0) { + newBoxLeft = 0; + } + if (touchStartBoxLeft + touchStartBoxWidth - newBoxLeft < minBoxWidth) { + newBoxLeft = touchStartBoxLeft + touchStartBoxWidth - minBoxWidth; + } + + let newBoxWidth = touchStartBoxWidth - (newBoxLeft - touchStartBoxLeft); + + let newBoxHeight = touchStartBoxHeight + offsetY; + if (newBoxHeight < minBoxHeight) { + newBoxHeight = minBoxHeight; + } + if (touchStartBoxTop + newBoxHeight > stageHeight) { + newBoxHeight = stageHeight - touchStartBoxTop; + } + + //约束比例 + if (newBoxHeight == stageHeight - touchStartBoxTop && this.aspectRatio && newBoxLeft != 0) { + newBoxWidth = newBoxHeight * this.aspectRatio; + newBoxLeft = touchStartBoxWidth - newBoxWidth + touchStartBoxLeft; + } + if (newBoxLeft == 0 && this.aspectRatio) { + newBoxHeight = newBoxWidth / this.aspectRatio; + } + + if (newBoxWidth == minBoxWidth && this.aspectRatio) { + newBoxHeight = newBoxWidth / this.aspectRatio; + } + + this.boxLeft = newBoxLeft; + this.boxWidth = newBoxWidth; + this.boxHeight = newBoxHeight; + } else if (targetId == 'rb') { + if (this.aspectRatio) { + offsetY = offsetX / this.aspectRatio; + } + let newBoxWidth = touchStartBoxWidth + offsetX; + if (newBoxWidth < minBoxWidth) { + newBoxWidth = minBoxWidth; + } + if (touchStartBoxLeft + newBoxWidth > stageWidth) { + newBoxWidth = stageWidth - touchStartBoxLeft; + } + + let newBoxHeight = touchStartBoxHeight + offsetY; + if (newBoxHeight < minBoxHeight) { + newBoxHeight = minBoxHeight; + } + if (touchStartBoxTop + newBoxHeight > stageHeight) { + newBoxHeight = stageHeight - touchStartBoxTop; + } + + //约束比例 + if (newBoxHeight == stageHeight - touchStartBoxTop && this.aspectRatio && newBoxWidth != stageWidth - touchStartBoxLeft) { + newBoxWidth = newBoxHeight * this.aspectRatio; + } + + if (newBoxWidth == stageWidth - touchStartBoxLeft && this.aspectRatio) { + newBoxHeight = newBoxWidth / this.aspectRatio; + } + + if (newBoxWidth == minBoxWidth && this.aspectRatio) { + newBoxHeight = newBoxWidth / this.aspectRatio; + } + + this.boxWidth = newBoxWidth; + this.boxHeight = newBoxHeight; + } + }, + touchStart(e) { + let touch = e.touches[0]; + let pageX = touch.pageX; + let pageY = touch.pageY; + + touchStartX = pageX; + touchStartY = pageY; + + touchStartBoxLeft = this.boxLeft; + touchStartBoxTop = this.boxTop; + touchStartBoxWidth = this.boxWidth; + touchStartBoxHeight = this.boxHeight; + }, + close(force=true) { + this.show = false; + if(force){ + this.imagePath = '' + } + }, + init(src) { + if (!src) { + return ''; + } + this.imagePath = src; + uni.showLoading({ + mask: true, + title: '载入图片中' + }); + uni.createSelectorQuery() + .in(this) + .select('.cropper-body') + .boundingClientRect(rect => { + layoutLeft = rect.left; + layoutTop = rect.top; + layoutWidth = rect.width; + layoutHeight = rect.height; + + wx.getImageInfo({ + src: this.imagePath, + success: imageInfo => { + imageWidth = imageInfo.width; + imageHeight = imageInfo.height; + let imageWH = imageWidth / imageHeight; + let layoutWH = layoutWidth / layoutHeight; + if (imageWH >= layoutWH) { + stageWidth = layoutWidth; + stageHeight = stageWidth / imageWH; + imageStageRatio = imageHeight / stageHeight; + } else { + stageHeight = layoutHeight; + stageWidth = layoutHeight * imageWH; + imageStageRatio = imageWidth / stageWidth; + } + stageLeft = (layoutWidth - stageWidth) / 2; + stageTop = (layoutHeight - stageHeight) / 2; + + minBoxWidth = stageWidth * this.minBoxWidthRatio; + minBoxHeight = stageHeight * this.minBoxHeightRatio; + + let boxWidth = stageWidth * this.initialBoxWidthRatio; + let boxHeight = stageHeight * this.initialBoxHeightRatio; + + if (this.aspectRatio) { + boxHeight = boxWidth / this.aspectRatio; + } + if (boxHeight > stageHeight) { + boxHeight = stageHeight; + boxWidth = boxHeight * this.aspectRatio; + } + + let boxLeft = (stageWidth - boxWidth) / 2; + let boxTop = (stageHeight - boxHeight) / 2; + + this.canvasWidth = imageWidth * pixelRatio; + this.canvasHeight = imageHeight * pixelRatio; + + this.stageLeft = stageLeft; + this.stageTop = stageTop; + this.stageWidth = stageWidth; + this.stageHeight = stageHeight; + + this.boxWidth = boxWidth; + this.boxHeight = boxHeight; + this.boxLeft = boxLeft; + this.boxTop = boxTop; + setTimeout(() => { + uni.hideLoading(); + this.show = true; + }, 100); + }, + fail: () => { + uni.showToast({ + icon: 'none', + title: '图片载入失败' + }); + } + }); + }) + .exec(); + } + } +}; +</script> + +<style lang="scss"> +.cropper { + position: fixed; + left: 0; + right: 0; + top: 0; + bottom: 0; + background-color: #000; + z-index: -1000000; + opacity: 0; + &.show { + z-index: 999; + opacity: 1; + } + .cropper-head { + position: fixed; + top: 0; + width: 750rpx; + z-index: 6; + height: calc(var(--status-bar-height) + 88rpx); + padding-top: var(--status-bar-height); + display: flex; + justify-content: flex-end; + align-items: center; + } + .cropper-btn { + height: 64rpx; + margin: 0 20rpx; + padding: 0 30rpx; + line-height: 64rpx; + color: #fff; + font-size: 26rpx; + } + .cropper-body { + margin: calc(var(--status-bar-height) + 88rpx) 30rpx 0 30rpx; + height: calc(100vh - var(--status-bar-height) - 88rpx - 100rpx - var(--safe-area-inset-bottom)); + position: relative; + } + .cropper-bottom { + height: calc(var(--safe-area-inset-bottom) + 100rpx); + padding-top: var(--safe-area-inset-bottom); + display: flex; + align-items: center; + justify-content: space-between; + position: fixed; + z-index: 6; + width: 750rpx; + bottom: 0; + } + .cropper-ok { + color: #39f; + } + .cropper-image { + position: absolute; + width: 100%; + height: 100%; + } + .cropper-stage { + position: absolute; + .cropper-box { + position: absolute; + border: 4rpx solid #ddd; + box-sizing: border-box; + box-shadow: 0 0 0 2000rpx rgba(0, 0, 0, 0.5); + .lt { + position: absolute; + height: 48rpx; + width: 48rpx; + left: -6rpx; + top: -6rpx; + border-left: 12rpx solid #ffffff; + border-top: 12rpx solid #ffffff; + } + + .lb { + position: absolute; + height: 48rpx; + width: 48rpx; + left: -6rpx; + bottom: -6rpx; + border-left: 12rpx solid #ffffff; + border-bottom: 12rpx solid #ffffff; + } + + .rt { + position: absolute; + height: 48rpx; + width: 48rpx; + right: -6rpx; + top: -6rpx; + border-right: 12rpx solid #ffffff; + border-top: 12rpx solid #ffffff; + } + + .rb { + position: absolute; + height: 48rpx; + width: 48rpx; + right: -6rpx; + bottom: -6rpx; + border-right: 12rpx solid #ffffff; + border-bottom: 12rpx solid #ffffff; + } + .line-v, + .line-h { + position: absolute; + opacity: 0.5; + } + .line-v { + width: 2rpx; + border-left: 2rpx dashed #fff; + height: 100%; + } + .line-h { + height: 2rpx; + border-bottom: 2rpx dashed #fff; + width: 100%; + } + } + } + .cropper-canvas { + position: fixed; + background-color: red; + left: 5000rpx; + } +} + +// 安全域兼容样式 +// page { +// --safe-area-inset-top: 0px; +// --safe-area-inset-right: 0px; +// --safe-area-inset-bottom: 0px; +// --safe-area-inset-left: 0px; + +// @supports (top: constant(safe-area-inset-top)) { +// --safe-area-inset-top: constant(safe-area-inset-top); +// --safe-area-inset-right: constant(safe-area-inset-right); +// --safe-area-inset-bottom: constant(safe-area-inset-bottom); +// --safe-area-inset-left: constant(safe-area-inset-left); +// } + +// @supports (top: env(safe-area-inset-top)) { +// --safe-area-inset-top: env(safe-area-inset-top); +// --safe-area-inset-right: env(safe-area-inset-right); +// //--safe-area-inset-bottom: 12px; +// --safe-area-inset-bottom: env(safe-area-inset-bottom); +// --safe-area-inset-left: env(safe-area-inset-left); +// } +// } +</style> diff --git a/components/cropper/readme.md b/components/cropper/readme.md new file mode 100644 index 0000000..9ca8ae9 --- /dev/null +++ b/components/cropper/readme.md @@ -0,0 +1,79 @@ +#### 【注意】由于赶时间,只做了功能性测试,兼容性测试暂时无法进行,更不用说优化测试了。欢迎有遇到问题的留言,或者自己动手修改也可以。 +#### 【注意】因为属于业余时间开发的一个项目所依赖的插件,所以更新较缓慢。 + +### 使用方式 + +```javascript +import Cropper from '@/components/cropper/cropper.vue'; +``` + +```html +<cropper :imagePath="originalFaceSrc" :aspectRatio="1" @complete="complete" @cancel="cancel" v-if="handleFaceStatus"></cropper> +``` + +使用v-if控制显示,mounted内执行init方法,使用简单,操作便利。 + +## 参数 +| 参数 | 类型 | 解释 | 默认 | 必填 | 备注 | +| ------------ | ------------ | ------------ | ------------ | ------------ | ------------ | +| quality | Number | 返回图片质量 | 1 | 否 | 如返回的图片仅需预览不用上传,请适当调低 | +| imagePath | String | 原始图片路径 |"" | 是 | blob、静态图片资源地址或者base64(未测试) | +| outputFileType | String | 目标文件的类型 | jpg | 否 | jpg:输出jpg格式图片;png:输出png格式图片 | +| aspectRatio | Number, null | 目标图片的宽高比 | null | 否 | null,即不限制剪裁宽高比。aspectRatio需大于0 | +| minBoxWidthRatio | Number | 最小剪裁尺寸与原图尺寸的比率(宽) | 0.15 | 否 | 宽度最小剪裁到原图的0.15宽 | +| minBoxHeightRatio | Number | 最小剪裁尺寸与原图尺寸的比率(高) | 0.15 | 否 | 当设置aspectRatio时,minBoxHeight值设置无效。minBoxHeight值由minBoxWidth 和 aspectRatio自动计算得到 | +| initialBoxWidthRatio | Number | 剪裁框初始大小比率(宽) | 0.8 | 否 | 裁框默认宽度为图片宽度的0.8倍 | +| initialBoxHeightRatio | Number | 剪裁框初始大小比率(高) | 0.8 | 否 | 当设置aspectRatio时,initialBoxHeightRatio值设置无效。initialBoxHeightRatio值由initialBoxWidthRatio 和 aspectRatio自动计算得到 | + +## 事件 + +| 事件名 | 解释 | 参数 | 备注 | +| ------------ | ------------ | ------------ | ------------ | +| reset | 用户点击重做后触发 | 无 | 可能无用,但留一个给开发者备用 | +| cancel | 用户点击取消后触发 | 无 | 开发者可以将组件置为消失v-if(尽量不要用v-show) | +| complete | 用户点击裁剪后触发 | path:路径,h5为base64,app与小程序为临时路径;param:裁切参数,见【备注1】 | 核心功能 | + + +### 备注1 +param: +```json +{ + x:Number, //裁切左上角X坐标 + y:Number, //裁切左上角Y坐标 + width:Number, //裁切宽度 + height:Number, //裁切高度 + rotate:Number, //旋转(未实现,预留) + scaleX:Number, //X轴缩放(未实现,预留) + scaleY:Number, //Y轴缩放(未实现,预留) +} +``` + +### 备注2 +本组件样式支持iphone安全范围但需要手动开启 +请在插件被样式中最后备注的地方解除备注即可。 +控制台会报错,无视即可。 +或者复制如下样式样式代码 +```css +// 安全域兼容样式 +page { + --safe-area-inset-top: 0px; + --safe-area-inset-right: 0px; + --safe-area-inset-bottom: 0px; + --safe-area-inset-left: 0px; + + @supports (top: constant(safe-area-inset-top)) { + --safe-area-inset-top: constant(safe-area-inset-top); + --safe-area-inset-right: constant(safe-area-inset-right); + --safe-area-inset-bottom: constant(safe-area-inset-bottom); + --safe-area-inset-left: constant(safe-area-inset-left); + } + + @supports (top: env(safe-area-inset-top)) { + --safe-area-inset-top: env(safe-area-inset-top); + --safe-area-inset-right: env(safe-area-inset-right); + //--safe-area-inset-bottom: 12px; + --safe-area-inset-bottom: env(safe-area-inset-bottom); + --safe-area-inset-left: env(safe-area-inset-left); + } +} +``` \ No newline at end of file diff --git a/components/foot.vue b/components/foot.vue new file mode 100644 index 0000000..d000dee --- /dev/null +++ b/components/foot.vue @@ -0,0 +1,173 @@ +<template> + <view> + <view class="fixed"> + <view class="cu-bar tabbar bg-black"> + <view @click="home()" class="action" :class="action == 0?'text-red':'text-gray'"> + <span class="iconfont icon-shouye cuIcon"></span>首页 + </view> + <view @click="mall()" class="action" :class="action == 1?'text-red':'text-gray'"> + <view class="iconfont icon-stores cuIcon"></view>门店管理 + </view> + + <view @click="equipment()" class="action" :class="action == 3?'text-red':'text-gray'"> + <view class="iconfont icon-shebei cuIcon"></view>设备中心 + </view> + <view @click="mine()" class="action" :class="action == 4?'text-red':'text-gray'"> + <view class="iconfont icon-zhijiandan- cuIcon" style="position: relative;"></view>结算中心 + </view> + </view> + </view> + + </view> +</template> +<script> + import logoservice from '@/service/logoservice.js'; + // 底部弹框组件 + export default { + name: "foot", + props: { + action: { + type: Number, + default: 0, + }, + partnerId: { + type: Number, + default: 1, + }, + partnerType: { + //1所有 2市级别 3区级别 4终端 + type: Number, + default: 4, + }, + + }, + components: { + + }, + computed: { + + }, + data() { + return { + textChart: '云打印', + // partnerId: this.$base.Userres.partner_id, + }; + }, + watch: { + /* val监听改变的值*/ + partnerId(val) { + + }, + }, + methods: { + home() { + + //console.log("partnerType="+this.partnerType); + if (this.partnerType == 1) { + uni.reLaunch({ + url: "/pages/index/all-agent" + }) + } else if (this.partnerType == 2) { + uni.reLaunch({ + url: "/pages/index/city-agent" + }) + } else if (this.partnerType == 3) { + uni.reLaunch({ + url: "/pages/index/home" + }) + + } else { + uni.reLaunch({ + url: "/pages/index/home" + }) + } + }, + // 门店管理 + mall() { + uni.reLaunch({ + url: "/pages/index/mall" + }) + }, + // 增加门店 + addstore() { + + uni.navigateTo({ + // url: '/pages/store/assindex?url=https://www.wenjuan.design/s/UZBZJvIcBJ/', + // url: '/pages/store/assindex?url=https://tprint.refinecolor.com/checkposition.html', + // url: '/pages/store/assindex?url=https://mp.weixin.qq.com/s/IuNckbRHA0m-REa4utM4mA', + url: '/pages/store/assindex?url=https://mp.weixin.qq.com/s/AkvYNXNSf5J_BKsBkAlLCg', + }); + // } + // uni.navigateTo({ + // url:"/pages/store/shopdetails" + // }) + }, + // 设备中心 + equipment() { + uni.reLaunch({ + url: "/pages/index/equipment" + }) + }, + // 结算中心 + mine() { + + // 直接跳转 + uni.reLaunch({ + url: "/pages/index/mine" + }) + } + }, + onShow() { + + } + } +</script> + +<style lang="scss"> + @import "./colorui/main.css"; + + /*每个页面公共css */ + .fixed { + position: fixed; + z-index: 9999; + bottom: 0upx; + width: 100%; + } + + .bg-black { + background-color: #333333; + color: #ffffff; + } + + .text-gray { + color: #B2B2B2; + } + + .text-red { + color: #5CE6B5; + } + + @keyframes cuIcon-spin { + 0% { + -webkit-transform: rotate(0); + transform: rotate(0); + } + + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } + } + + .cuIconfont-spin { + -webkit-animation: cuIcon-spin 2s infinite linear; + animation: cuIcon-spin 2s infinite linear; + display: inline-block; + } + + .cuIconfont-pulse { + -webkit-animation: cuIcon-spin 1s infinite steps(8); + animation: cuIcon-spin 1s infinite steps(8); + display: inline-block; + } +</style> diff --git a/components/fr-image/fr-image.vue b/components/fr-image/fr-image.vue new file mode 100644 index 0000000..a851772 --- /dev/null +++ b/components/fr-image/fr-image.vue @@ -0,0 +1,201 @@ +<template> + <view class="fr_img"> + <!-- 主图 --> + <image class="fr_img_content" + :src="src" :mode="mode" :lazy-load="lazyLoad" :webp="webp" :show-menu-by-longpress="showMenuByLongpress" @error="onImgError" @load="onImgLoad"/> + <view v-if="loading_complete && completeTransition" class="loading_complete_transition"></view> + + <!-- 加载失败图 --> + <view v-if="loading_error" class="loading_error"> <image class="loading_error_img" :src="loadingErrorImg" mode="aspectFit"></image> </view> + + <!-- 加载中图 --> + <view v-else-if="!loading_complete" class="loading"> + <image v-if="loadingIngImg == 'two-balls'" class="loading_img" :src="require('./loading_two_balls.gif')" mode="aspectFit"></image> + <view v-if="loadingIngImg == 'oblique-light'" class="loading_oblique_light"></view> + <view v-if="loadingIngImg == 'looming'" class="loading_looming"></view> + </view> + + </view> +</template> + +<script> + export default { + + props: { + + // 和官方Image组件属性一致 + src: { + type: String, + default: "", + }, + + mode: { + type: String, + default: "", + }, + + lazyLoad: { + type: Boolean, + default: false, + }, + + webp: { + type: Boolean, + default: false, + }, + + showMenuByLongpress: { + type: Boolean, + default: false, + }, + + + // 可选: 加载失败图片:可以本地url、网络url、base64 (与src一致) + loadingErrorImg: { + type: String, + default: require('./loading_error.png'), + }, + + // 可选: 加载中的图片 + // two-balls = 两个球来回转 + // oblique-light = 斜光 + // looming = 若影若现 + // 本地url、网络url、base64 = 自定义的加载中图片(与src一致) + loadingIngImg: { + type: String, + default: "oblique-light", + }, + + // 可选:是否需要加载完成动画 + completeTransition: { + type: Boolean, + default: true, + }, + + + }, + + data() { + return { + loading_complete: false, + loading_error: false, + }; + }, + + methods: { + onImgError: function(event){ + this.loading_error = true; + this.$emit("error", event); + }, + + onImgLoad: function(event){ + this.loading_complete = true; + this.$emit("load", event); + }, + }, + } +</script> + +<style lang="scss"> + +.fr_img{ + width: 100%; + height: 100%; + position: relative; + + .fr_img_content{ + width: 100%; + height: 100%; + position: absolute; + } + + .loading_complete_transition{ + width: 100%; + height: 100%; + position: absolute; + background-color: #FFFFFF; + animation: loading_complete_transition 1.2s forwards; + } + + @keyframes loading_complete_transition{ + 0% { opacity: 1; } + 100% { opacity: 0; } + } + + + + .loading_error{ + width: 100%; + height: 100%; + background-color: #F8F8F8; + position: absolute; + + display: flex; + justify-content: center; + align-items: center; + + .loading_error_img{ + width: 100rpx; + height: 100rpx; + max-width: 100%; + max-height: 100%; + } + } + + .loading{ + width: 100%; + height: 100%; + background-color: #FFFFFF; + position: absolute; + + display: flex; + justify-content: center; + align-items: center; + + // 加载图 + .loading_img{ + width: 100rpx; + height: 100rpx; + max-width: 100%; + max-height: 100%; + } + + // 斜光 + .loading_oblique_light{ + width: 100%; + height: 100%; + + background-color: #e3e3e3; + background-image: linear-gradient(100deg, rgba(255, 255, 255, 0), rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0) 80%); + background-size: 100rpx 100%; + background-repeat: repeat-y; + background-position:0 0; + animation: loading_oblique_light .6s infinite; + } + + @keyframes loading_oblique_light { + to { + background-position: 200% 0; + } + } + + + // 若隐若现 + .loading_looming{ + width: 100%; + height: 100%; + animation: loading_looming 1s infinite linear; + background-color: #e3e3e3; + } + @keyframes loading_looming{ + 0% {background-color:rgba($color: #e3e3e3, $alpha: 0.5);} + 50% {background-color:rgba($color: #e3e3e3, $alpha: 1.0);} + 100% {background-color:rgba($color: #e3e3e3, $alpha: 0.5);} + } + + } + + +} + +</style> diff --git a/components/fr-image/loading_error.png b/components/fr-image/loading_error.png new file mode 100644 index 0000000..9f6b4e9 Binary files /dev/null and b/components/fr-image/loading_error.png differ diff --git a/components/fr-image/loading_two_balls.gif b/components/fr-image/loading_two_balls.gif new file mode 100644 index 0000000..cdd6e2e Binary files /dev/null and b/components/fr-image/loading_two_balls.gif differ diff --git a/components/ksp-image-cutter/ksp-image-cutter.vue b/components/ksp-image-cutter/ksp-image-cutter.vue new file mode 100644 index 0000000..555474b --- /dev/null +++ b/components/ksp-image-cutter/ksp-image-cutter.vue @@ -0,0 +1,792 @@ +<template> + <view v-show="properties.content" class="ksp-image-cutter" @tap="onok" + style="position: relative; width: 100%; height: 100%; overflow: hidden;"> + <view class="body"> + <!-- 背景图 --> + <!-- <image v-if="properties.content" class="image" @load="imageLoad" :style="{left: image.left + 'px', top: image.top + 'px', + width: image.width + 'px', height: image.height + 'px',transform: 'rotate(' + properties.angle + 'deg)'}" + :src="properties.content"></image> --> + <view v-if="mask.show" class="mask"></view> + <!-- 窗口 --> + <view @touchstart="touchStart($event, 'plank')" :data-time="lastTapTime" + @touchmove="touchMove" @touchend="touchEnd" @touchcancel="touchCancel" + class="plank" :style="{transform: 'rotate(' + properties.angle + 'deg)'}"> + <view class="frame" @touchstart="touchStart($event, 'frame')" @touchstart.stop.prevent="touchHandle" :data-time="lastTapTime" + :style="{left: frame.left + 'px', top: frame.top + 'px', + width: frame.width + 'px', height: frame.height + 'px'}"> + <!-- 图片 --> + <image v-if="properties.content" class="image" :data-time="lastTapTime" @load="imageLoad" + :style="{'margin-left': -(frame.left - image.left) + 'px', 'margin-top': -(frame.top - image.top) + 'px', + width: image.width + 'px', height: image.height + 'px'}" + :src="properties.content"></image> + <view class="rect"></view> + <view class="line-one"></view> + <view class="line-two"></view> + <view class="line-three"></view> + <view class="line-four"></view> + <view @touchstart="touchStart($event, 'left')" @touchstart.stop.prevent="touchHandle" class="frame-left"> + <view class='left_edge'></view> + </view> + <view @touchstart="touchStart($event, 'right')" @touchstart.stop.prevent="touchHandle" class="frame-right"> + <view class='rightedge'> </view> + </view> + <view @touchstart="touchStart($event, 'top')" @touchstart.stop.prevent="touchHandle" class="frame-top"> + <view class='topedge'> </view> + </view> + <view @touchstart="touchStart($event, 'bottom')" @touchstart.stop.prevent="touchHandle" class="frame-bottom"> + <view class='bottomedge'> </view> + </view> + + <view @touchstart="touchStart($event, 'left-top')" @touchstart.stop.prevent="touchHandle" class="frame-left-top-wrap"> + <view class='frame-left-top'> </view> + </view> + <view @touchstart="touchStart($event, 'left-bottom')" @touchstart.stop.prevent="touchHandle" class="frame-left-bottom-wrap"> + <view class='frame-left-bottom'> </view> + </view> + <view @touchstart="touchStart($event, 'right-top')" @touchstart.stop.prevent="touchHandle" class="frame-right-top-wrap"> + <view class='frame-right-top'> </view> + </view> + <view @touchstart="touchStart($event, 'right-bottom')" @touchstart.stop.prevent="touchHandle" class="frame-right-bottom-wrap"> + <view class='frame-right-bottom'> </view> + </view> + </view> + </view> + </view> + + </view> +</template> + +<script> + // 封装 + import drag from '../../pages/index/js/drag.js' + export default { + props: { + properties: { + type: Object, + default () { + return {} + } + }, + url: { + type: String, + default: "" + }, + fixed: { + type: Boolean, + default: false + }, + width: { + type: Number, + default: 200 + }, + height: { + type: Number, + default: 200 + }, + maxWidth: { + type: Number, + default: 1024 + }, + maxHeight: { + type: Number, + default: 1024 + }, + blob: { + type: Boolean, + default: true + } + }, + data() { + return { + mask: { + show: false + }, + // 裁剪的窗口 + frame: { + left: 100, + top: 100, + width: this.properties.width, + height: this.properties.height + }, + // 背景图 + image: { + left: 100, + top: 100, + width: this.properties.initialWidth, + height: this.properties.initialHeight + }, + // 背景图初始 + real: { + width: this.properties.initialWidth, + height: this.properties.initialHeight + }, + // 裁剪的窗口初始 + target: { + width: this.properties.width, + height: this.properties.height + }, + touches: [], + type: "", + start: { + frame: { + left: 0, + top: 0, + width: 0, + height: 0 + }, + image: { + left: 0, + top: 0, + width: 0, + height: 0 + }, + }, + timeoutId: -1, + context: Object, + targetContext: Object, + // 后添加属性值 + Centerleft: null, + Centertop: null, + lastTapTime: 0, //判断点击时间间隔 + }; + }, + mounted() { + //#ifdef H5 + this.$el.addEventListener("touchmove", (ev) => { + ev.preventDefault(); + }); + // #endif + // this.context = uni.createCanvasContext("canvas", this); + // this.targetContext = uni.createCanvasContext("target", this); + }, + methods: { + doubleTap(e){ + console.log(e) + var curTime = e.timeStamp + var lastTime = e.currentTarget.dataset.time // 通过e.currentTarget.dataset.time 访问到绑定到该组件的自定义数据 + if (curTime - lastTime > 0) { + if (curTime - lastTime < 300) { //是双击事件 + + } + } + this.lastTapTime = curTime + }, + /** + * 初始化方法 + * 获取图片宽高后,把图片缩放至剪切框大小, + * 并使剪切框位于图片中央 + **/ + init() { + if (!this.properties.content) return + let { + windowWidth, + windowHeight, + pixelRatio + } = wx.getSystemInfoSync() + let clipSize = windowWidth / 750 + let clipHeight = windowHeight / 1206 + // console.log(windowHeight / windowWidth) + // 计算宽度高度 + this.real.width = this.properties.initialWidth * this.properties.initialScale + this.real.height = this.properties.initialHeight * this.properties.initialScale + this.image.width = this.properties.initialWidth * this.properties.initialScale + this.image.height = this.properties.initialHeight * this.properties.initialScale + this.image.angle = this.properties.angle + this.frame.width = this.properties.width; + this.frame.height = this.properties.height; + this.frame.angle = this.properties.angle; + // 默认居中 + this.Centerleft = (windowWidth - this.properties.width) / 2 - this.properties.frame_left + this.Centertop = (windowHeight - this.properties.height) / 2 - this.properties.frame_top + this.image.left = this.Centerleft + this.image.top = this.Centertop + this.frame.left = this.Centerleft + this.frame.top = this.Centertop + // 有值替换 + if (this.properties.frame_left) { + this.frame.left = this.properties.frame_left + this.Centerleft + } + if (this.properties.frame_top) { + this.frame.top = this.properties.frame_top + this.Centertop + } + if (this.properties.image_left) { + this.image.left = this.properties.image_left + this.Centerleft + } + if (this.properties.image_top) { + this.image.top = this.properties.image_top + this.Centertop + } + // 初始化的位置 + drag.initPos(this.frame) + drag.initPos(this.image) + }, + imageLoad(ev) { + this.mask.show = true; + + }, + touchHandle(ev) { + console.log(ev) + var curTime = ev.timeStamp + var lastTime = ev.currentTarget.dataset.time // 通过e.currentTarget.dataset.time 访问到绑定到该组件的自定义数据 + if (curTime - lastTime > 0) { + if (curTime - lastTime < 300) { //是双击事件 + this.onok() + } + } + this.lastTapTime = curTime + }, + touchStart(ev, type) { + this.mask.show = false; + if (this.touches.length == 0) { + this.type = type; + this.start.frame.left = this.frame.left; + this.start.frame.top = this.frame.top; + this.start.frame.width = this.frame.width; + this.start.frame.height = this.frame.height; + this.start.image.left = this.image.left; + this.start.image.top = this.image.top; + this.start.image.width = this.image.width; + this.start.image.height = this.image.height; + } + var touches = ev.changedTouches; + for (var i = 0; i < touches.length; i++) { + var touch = touches[i]; + this.touches.push(touch); + } + }, + touchMove(ev) { + ev.preventDefault(); + var touches = ev.touches; + // 点击 + if (this.touches.length == 1) { + if (this.type == "plank" || this.type == "frame" || this.fixed) { + this.moveImage(this.touches[0], touches[0]); + } else { + this.scaleFrame(this.touches[0], touches[0], this.type); + } + + } else if (this.touches.length == 2 && touches.length == 2) { + // 双指头操作 + var ta = this.touches[0]; + var tb = this.touches[1]; + var tc = touches[0]; + var td = touches[1]; + if (ta.identifier != tc.identifier) { + var temp = tc; + tc = td; + td = temp; + } + this.scaleImage(ta, tb, tc, td); + } + }, + touchEnd(ev) { + this.type = ""; + this.touches = []; + drag.getTransferPosition(this.frame.left, this.frame.top, this.frame.width, this.frame.height, this.frame.angle, this.frame.centerPos,this.frame) + drag.getTransferPosition(this.image.left, this.image.top, this.image.width, this.image.height, this.image.angle, this.image.centerPos,this.image) + }, + touchCancel(ev) { + this.type = ""; + this.touches = []; + }, + moveImage(ta, tb) { + // 计算角度 + // let roat = Math.abs(this.properties.angle) % 360 + // if (this.properties.angle < 0) { + // let multiple = Math.ceil(Math.abs(this.properties.angle) / 360) + // roat = this.properties.angle + multiple * 360 + // } + + var ax = tb.clientX - ta.clientX; + var ay = tb.clientY - ta.clientY; + this.image.left = this.start.image.left + ax; + this.image.top = this.start.image.top + ay; + if (this.image.left > this.frame.left) { + this.image.left = this.frame.left; + } + if (this.image.top > this.frame.top) { + this.image.top = this.frame.top; + } + if (this.image.left + this.image.width < this.frame.left + this.frame.width) { + this.image.left = this.frame.left + this.frame.width - this.image.width; + } + if (this.image.top + this.image.height < this.frame.top + this.frame.height) { + this.image.top = this.frame.top + this.frame.height - this.image.height; + } + }, + scaleImage(ta, tb, tc, td) { + var x1 = ta.clientX; + var y1 = ta.clientY; + var x2 = tb.clientX; + var y2 = tb.clientY; + var x3 = tc.clientX; + var y3 = tc.clientY; + var x4 = td.clientX; + var y4 = td.clientY; + var ol = Math.sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2)); + var el = Math.sqrt((x3 - x4) * (x3 - x4) + (y3 - y4) * (y3 - y4)); + var ocx = (x1 + x2) / 2; + var ocy = (y1 + y2) / 2; + var ecx = (x3 + x4) / 2; + var ecy = (y3 + y4) / 2; + var ax = ecx - ocx; + var ay = ecy - ocy; + var scale = el / ol; + if (this.start.image.width * scale < this.frame.width) { + scale = this.frame.width / this.start.image.width; + } + if (this.start.image.height * scale < this.frame.height) { + scale = this.frame.height / this.start.image.height; + } + if (this.start.image.width * scale < this.frame.width) { + scale = this.frame.width / this.start.image.width; + } + this.image.left = this.start.image.left + ax - (ocx - this.start.image.left) * (scale - 1); + this.image.top = this.start.image.top + ay - (ocy - this.start.image.top) * (scale - 1); + this.image.width = this.start.image.width * scale; + this.image.height = this.start.image.height * scale; + if (this.image.left > this.frame.left) { + this.image.left = this.frame.left; + } + if (this.image.top > this.frame.top) { + this.image.top = this.frame.top; + } + if (this.image.left + this.image.width < this.frame.left + this.frame.width) { + this.image.left = this.frame.left + this.frame.width - this.image.width; + } + if (this.image.top + this.image.height < this.frame.top + this.frame.height) { + this.image.top = this.frame.top + this.frame.height - this.image.height; + } + + }, + scaleFrame(ta, tb, type) { + // 计算角度 + var ax = tb.clientX - ta.clientX; + var ay = tb.clientY - ta.clientY; + var x1 = this.start.frame.left; + var y1 = this.start.frame.top; + var x2 = this.start.frame.left + this.start.frame.width; + var y2 = this.start.frame.top + this.start.frame.height; + + if (type == "left") { + x1 += ax; + this.frame.width = x2 - x1; + if(this.frame.width <= 50){ + x1 = x2 - 50 + } + } else if (type == "right") { + x2 += ax; + this.frame.width = x2 - x1; + if(this.frame.width <= 50){ + x2 = x1 + 50 + } + } else if (type == "top") { + y1 += ay; + this.frame.height = y2 - y1; + if(this.frame.height <= 50){ + y1 = y2 - 50 + } + } else if (type == "bottom") { + y2 += ay; + this.frame.height = y2 - y1; + if(this.frame.height <= 50){ + y2 = y1 + 50 + } + } else if (type == "left-top") { + x1 += ax; + y1 += ay; + this.frame.width = x2 - x1; + if(this.frame.width <= 50){ + x1 = x2 - 50 + } + this.frame.height = y2 - y1; + if(this.frame.height <= 50){ + y1 = y2 - 50 + } + } else if (type == "left-bottom") { + x1 += ax; + y2 += ay; + this.frame.width = x2 - x1; + if(this.frame.width <= 50){ + x1 = x2 - 50 + } + this.frame.height = y2 - y1; + if(this.frame.height <= 50){ + y2 = y1 + 50 + } + } else if (type == "right-top") { + x2 += ax; + y1 += ay; + this.frame.width = x2 - x1; + if(this.frame.width <= 50){ + x2 = x1 + 50 + } + this.frame.height = y2 - y1; + if(this.frame.height <= 50){ + y1 = y2 - 50 + } + } else if (type == "right-bottom") { + x2 += ax; + y2 += ay; + this.frame.width = x2 - x1; + if(this.frame.width <= 50){ + x2 = x1 + 50 + } + this.frame.height = y2 - y1; + if(this.frame.height <= 50){ + y2 = y1 + 50 + } + } + if (x1 < this.image.left) { + x1 = this.image.left; + } + if (y1 < this.image.top) { + y1 = this.image.top; + } + if (x2 > this.image.left + this.image.width) { + x2 = this.image.left + this.image.width; + } + if (y2 > this.image.top + this.image.height) { + y2 = this.image.top + this.image.height; + } + + this.frame.left = x1; + this.frame.top = y1; + this.frame.width = x2 - x1; + this.frame.height = y2 - y1; + + + + }, + onok() { + + var scale = this.image.width / this.real.width; + var x = (this.frame.left - this.image.left) / scale; + var y = (this.frame.top - this.image.top) / scale; + var width = this.frame.width / scale; + var height = this.frame.height / scale; + var tw = width; + var th = height; + + // if (this.fixed) { + // tw = this.width / 2; + // th = this.height / 2; + // } else { + // if (tw > this.maxWidth / 2) { + // var sc = this.maxWidth / 2 / tw; + // tw = tw * sc; + // th = th * sc; + // } + // if (th > this.maxHeight / 2) { + // var sc = this.maxHeight / 2 / th; + // th = th * sc; + // tw = tw * sc; + // } + // } + this.target.width = tw; + this.target.height = th; + + // 复制数据 + // 裁剪的宽和高 + this.properties.width = this.frame.width + this.properties.height = this.frame.height + // 图片放大比率 + this.properties.initialScale = this.properties.initialScale * scale + this.properties.initialscaling = this.properties.initialScale + // 裁剪区和原图顶点 + this.properties.frame_left = 0 + this.properties.frame_top = 0 + this.properties.image_left = -(this.frame.left - this.image.left) + this.properties.image_top = -(this.frame.top - this.image.top) + // 初始x,y放大比率 + this.properties.initialScalex = 1 + this.properties.initialScaley = 1 + this.$emit('ok', this.properties); + + + }, + // 返回 + oncancle() { + this.$emit("cancel"); + } + } + } +</script> + +<style lang="scss" scoped> + .ksp-image-cutter { + position: absolute; + width: 100%; + height: 100%; + top: 0; + bottom: 0; + z-index: 1000; + } + + .body { + position: absolute; + left: 0upx; + right: 0upx; + top: 0upx; + bottom: 0upx; + } + + .mask { + position: absolute; + left: 0upx; + right: 0upx; + top: 0upx; + bottom: 0upx; + background: black; + opacity: 0.4; + } + + .plank { + position: absolute; + left: 0upx; + right: 0upx; + top: 0upx; + bottom: 0upx; + } + + .image { + position: absolute; + } + + .frame { + position: absolute; + } + + .canvas { + position: absolute; + display: block; + left: 0px; + top: 0px; + } + + .rect { + position: absolute; + left: -2px; + top: -2px; + width: 100%; + height: 100%; + border: 2px solid white; + } + + .line-one { + position: absolute; + width: 100%; + height: 1px; + background: white; + left: 0; + top: 33.3%; + } + + .line-two { + position: absolute; + width: 100%; + height: 1px; + background: white; + left: 0; + top: 66.7%; + } + + .line-three { + position: absolute; + width: 1px; + height: 100%; + background: white; + top: 0; + left: 33.3%; + } + + .line-four { + position: absolute; + width: 1px; + height: 100%; + background: white; + top: 0; + left: 66.7%; + } + + .frame-left { + position: absolute; + left: -30upx; + width: 40upx; + height: 100%; + top: 0; + background: transparent; + .left_edge { + position: absolute; + z-index: 99; + left: 24upx; + width: 6upx; + height: 40upx; + background: #5CE6B5; + top: calc(50% - 20upx); + } + } + + .frame-right { + position: absolute; + z-index: 99; + right: -30upx; + width: 40upx; + height: 100%; + background: transparent; + top: 0; + .rightedge { + position: absolute; + z-index: 99; + right: 24upx; + width: 6upx; + height: 40upx; + background: #5CE6B5; + top: calc(50% - 20upx); + } + } + + .frame-top { + position: absolute; + z-index: 99; + top: -30upx; + width: 100%; + height: 40upx; + background: transparent; + left: 0; + right: 0; + margin: auto; + .topedge { + position: absolute; + z-index: 99; + top: 24upx; + width: 40upx; + height: 6upx; + background: #5CE6B5; + left: 0; + right: 0; + margin: auto; + } + } + + .frame-bottom { + position: absolute; + z-index: 99; + bottom: -30upx; + width: 100%; + height: 40upx; + background: transparent; + left: 0; + right: 0; + margin: auto; + .bottomedge { + position: absolute; + z-index: 99; + bottom: 24upx; + width: 40upx; + height: 6upx; + background: #5CE6B5; + left: 0; + right: 0; + margin: auto; + } + } + + .left_edge::after, + .rightedge::after, + .topedge::after, + .bottomedge::after { + content: ''; + position: absolute; + left: 0; + right: 0; + top: 0; + bottom: 0; + transform: scale(2); + } + + .frame-left-top-wrap { + position: absolute; + z-index: 100; + width: 60upx; + height: 60upx; + left: -30upx; + top: -30upx; + .frame-left-top{ + position: absolute; + z-index: 100; + width: 30upx; + height: 30upx; + left: 24upx; + top: 24upx; + border-left: 6upx solid #5CE6B5; + border-top: 6upx solid #5CE6B5; + } + } + + .frame-left-bottom-wrap { + position: absolute; + z-index: 100; + width: 60upx; + height: 60upx; + left: -30upx; + bottom: -30upx; + .frame-left-bottom { + position: absolute; + z-index: 100; + width: 30upx; + height: 30upx; + left: 24upx; + bottom: 24upx; + border-left: 6upx solid #5CE6B5; + border-bottom: 6upx solid #5CE6B5; + } + } + + .frame-right-top-wrap { + position: absolute; + z-index: 100; + width: 60upx; + height: 60upx; + right: -30upx; + top: -30upx; + .frame-right-top { + position: absolute; + z-index: 100; + width: 30upx; + height: 30upx; + right: 24upx; + top: 24upx; + border-right: 6upx solid #5CE6B5; + border-top: 6upx solid #5CE6B5; + } + } + + .frame-right-bottom-wrap { + position: absolute; + z-index: 100; + width: 60upx; + height: 60upx; + right: -30upx; + bottom: -30upx; + .frame-right-bottom { + position: absolute; + z-index: 100; + width: 30upx; + height: 30upx; + right: 24upx; + bottom: 24upx; + border-right: 6upx solid #5CE6B5; + border-bottom: 6upx solid #5CE6B5; + } + } + .frame-left-top::after,.frame-right-top::after, + .frame-left-bottom::after,.frame-right-bottom::after{ + content: ''; + position: absolute; + left: 0; + right: 0; + top: 0; + bottom: 0; + transform: scale(1.5); + } +</style> diff --git a/components/m-icon/m-icon.css b/components/m-icon/m-icon.css new file mode 100644 index 0000000..a1992ff --- /dev/null +++ b/components/m-icon/m-icon.css @@ -0,0 +1,377 @@ +@font-face { + font-family: uniicons; + font-weight: normal; + font-style: normal; + src: url('https://img-cdn-qiniu.dcloud.net.cn/fonts/uni.ttf?t=1536565627510') format('truetype'); +} + +.m-icon { + font-family: uniicons; + font-size: 24px; + font-weight: normal; + font-style: normal; + line-height: 1; + display: inline-block; + text-decoration: none; + -webkit-font-smoothing: antialiased; +} + +.m-icon.uni-active { + color: #007aff; +} + +.m-icon-contact:before { + content: '\e100'; +} + +.m-icon-person:before { + content: '\e101'; +} + +.m-icon-personadd:before { + content: '\e102'; +} + +.m-icon-contact-filled:before { + content: '\e130'; +} + +.m-icon-person-filled:before { + content: '\e131'; +} + +.m-icon-personadd-filled:before { + content: '\e132'; +} + +.m-icon-phone:before { + content: '\e200'; +} + +.m-icon-email:before { + content: '\e201'; +} + +.m-icon-chatbubble:before { + content: '\e202'; +} + +.m-icon-chatboxes:before { + content: '\e203'; +} + +.m-icon-phone-filled:before { + content: '\e230'; +} + +.m-icon-email-filled:before { + content: '\e231'; +} + +.m-icon-chatbubble-filled:before { + content: '\e232'; +} + +.m-icon-chatboxes-filled:before { + content: '\e233'; +} + +.m-icon-weibo:before { + content: '\e260'; +} + +.m-icon-weixin:before { + content: '\e261'; +} + +.m-icon-pengyouquan:before { + content: '\e262'; +} + +.m-icon-chat:before { + content: '\e263'; +} + +.m-icon-qq:before { + content: '\e264'; +} + +.m-icon-videocam:before { + content: '\e300'; +} + +.m-icon-camera:before { + content: '\e301'; +} + +.m-icon-mic:before { + content: '\e302'; +} + +.m-icon-location:before { + content: '\e303'; +} + +.m-icon-mic-filled:before, +.m-icon-speech:before { + content: '\e332'; +} + +.m-icon-location-filled:before { + content: '\e333'; +} + +.m-icon-micoff:before { + content: '\e360'; +} + +.m-icon-image:before { + content: '\e363'; +} + +.m-icon-map:before { + content: '\e364'; +} + +.m-icon-compose:before { + content: '\e400'; +} + +.m-icon-trash:before { + content: '\e401'; +} + +.m-icon-upload:before { + content: '\e402'; +} + +.m-icon-download:before { + content: '\e403'; +} + +.m-icon-close:before { + content: '\e404'; +} + +.m-icon-redo:before { + content: '\e405'; +} + +.m-icon-undo:before { + content: '\e406'; +} + +.m-icon-refresh:before { + content: '\e407'; +} + +.m-icon-star:before { + content: '\e408'; +} + +.m-icon-plus:before { + content: '\e409'; +} + +.m-icon-minus:before { + content: '\e410'; +} + +.m-icon-circle:before, +.m-icon-checkbox:before { + content: '\e411'; +} + +.m-icon-close-filled:before, +.m-icon-clear:before { + content: '\e434'; +} + +.m-icon-refresh-filled:before { + content: '\e437'; +} + +.m-icon-star-filled:before { + content: '\e438'; +} + +.m-icon-plus-filled:before { + content: '\e439'; +} + +.m-icon-minus-filled:before { + content: '\e440'; +} + +.m-icon-circle-filled:before { + content: '\e441'; +} + +.m-icon-checkbox-filled:before { + content: '\e442'; +} + +.m-icon-closeempty:before { + content: '\e460'; +} + +.m-icon-refreshempty:before { + content: '\e461'; +} + +.m-icon-reload:before { + content: '\e462'; +} + +.m-icon-starhalf:before { + content: '\e463'; +} + +.m-icon-spinner:before { + content: '\e464'; +} + +.m-icon-spinner-cycle:before { + content: '\e465'; +} + +.m-icon-search:before { + content: '\e466'; +} + +.m-icon-plusempty:before { + content: '\e468'; +} + +.m-icon-forward:before { + content: '\e470'; +} + +.m-icon-back:before, +.m-icon-left-nav:before { + content: '\e471'; +} + +.m-icon-checkmarkempty:before { + content: '\e472'; +} + +.m-icon-home:before { + content: '\e500'; +} + +.m-icon-navigate:before { + content: '\e501'; +} + +.m-icon-gear:before { + content: '\e502'; +} + +.m-icon-paperplane:before { + content: '\e503'; +} + +.m-icon-info:before { + content: '\e504'; +} + +.m-icon-help:before { + content: '\e505'; +} + +.m-icon-locked:before { + content: '\e506'; +} + +.m-icon-more:before { + content: '\e507'; +} + +.m-icon-flag:before { + content: '\e508'; +} + +.m-icon-home-filled:before { + content: '\e530'; +} + +.m-icon-gear-filled:before { + content: '\e532'; +} + +.m-icon-info-filled:before { + content: '\e534'; +} + +.m-icon-help-filled:before { + content: '\e535'; +} + +.m-icon-more-filled:before { + content: '\e537'; +} + +.m-icon-settings:before { + content: '\e560'; +} + +.m-icon-list:before { + content: '\e562'; +} + +.m-icon-bars:before { + content: '\e563'; +} + +.m-icon-loop:before { + content: '\e565'; +} + +.m-icon-paperclip:before { + content: '\e567'; +} + +.m-icon-eye:before { + content: '\e568'; +} + +.m-icon-arrowup:before { + content: '\e580'; +} + +.m-icon-arrowdown:before { + content: '\e581'; +} + +.m-icon-arrowleft:before { + content: '\e582'; +} + +.m-icon-arrowright:before { + content: '\e583'; +} + +.m-icon-arrowthinup:before { + content: '\e584'; +} + +.m-icon-arrowthindown:before { + content: '\e585'; +} + +.m-icon-arrowthinleft:before { + content: '\e586'; +} + +.m-icon-arrowthinright:before { + content: '\e587'; +} + +.m-icon-pulldown:before { + content: '\e588'; +} + +.m-icon-scan:before { + content: "\e612"; +} diff --git a/components/m-icon/m-icon.vue b/components/m-icon/m-icon.vue new file mode 100644 index 0000000..57cb1f7 --- /dev/null +++ b/components/m-icon/m-icon.vue @@ -0,0 +1,23 @@ +<template> + <view class="m-icon" :class="['m-icon-'+type]" @click="onClick()"></view> +</template> + +<script> + export default { + props: { + /** + * 图标类型 + */ + type: String + }, + methods: { + onClick() { + this.$emit('click') + } + } + } +</script> + +<style> + @import "./m-icon.css"; +</style> diff --git a/components/marked/index.js b/components/marked/index.js new file mode 100644 index 0000000..a12f905 --- /dev/null +++ b/components/marked/index.js @@ -0,0 +1 @@ +module.exports = require('./lib/marked'); diff --git a/components/marked/lib/marked.js b/components/marked/lib/marked.js new file mode 100644 index 0000000..6a71e92 --- /dev/null +++ b/components/marked/lib/marked.js @@ -0,0 +1,1573 @@ +/** + * marked - a markdown parser + * Copyright (c) 2011-2014, Christopher Jeffrey. (MIT Licensed) + * https://github.com/markedjs/marked + */ + +;(function(root) { +'use strict'; + +/** + * Block-Level Grammar + */ + +var block = { + newline: /^\n+/, + code: /^( {4}[^\n]+\n*)+/, + fences: noop, + hr: /^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$)/, + heading: /^ *(#{1,6}) *([^\n]+?) *(?:#+ *)?(?:\n+|$)/, + nptable: noop, + blockquote: /^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/, + list: /^( *)(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/, + html: '^ {0,3}(?:' // optional indentation + + '<(script|pre|style)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)' // (1) + + '|comment[^\\n]*(\\n+|$)' // (2) + + '|<\\?[\\s\\S]*?\\?>\\n*' // (3) + + '|<![A-Z][\\s\\S]*?>\\n*' // (4) + + '|<!\\[CDATA\\[[\\s\\S]*?\\]\\]>\\n*' // (5) + + '|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:\\n{2,}|$)' // (6) + + '|<(?!script|pre|style)([a-z][\\w-]*)(?:attribute)*? */?>(?=\\h*\\n)[\\s\\S]*?(?:\\n{2,}|$)' // (7) open tag + + '|</(?!script|pre|style)[a-z][\\w-]*\\s*>(?=\\h*\\n)[\\s\\S]*?(?:\\n{2,}|$)' // (7) closing tag + + ')', + def: /^ {0,3}\[(label)\]: *\n? *<?([^\s>]+)>?(?:(?: +\n? *| *\n *)(title))? *(?:\n+|$)/, + table: noop, + lheading: /^([^\n]+)\n *(=|-){2,} *(?:\n+|$)/, + paragraph: /^([^\n]+(?:\n(?!hr|heading|lheading| {0,3}>|<\/?(?:tag)(?: +|\n|\/?>)|<(?:script|pre|style|!--))[^\n]+)*)/, + text: /^[^\n]+/ +}; + +block._label = /(?!\s*\])(?:\\[\[\]]|[^\[\]])+/; +block._title = /(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/; +block.def = edit(block.def) + .replace('label', block._label) + .replace('title', block._title) + .getRegex(); + +block.bullet = /(?:[*+-]|\d+\.)/; +block.item = /^( *)(bull) [^\n]*(?:\n(?!\1bull )[^\n]*)*/; +block.item = edit(block.item, 'gm') + .replace(/bull/g, block.bullet) + .getRegex(); + +block.list = edit(block.list) + .replace(/bull/g, block.bullet) + .replace('hr', '\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))') + .replace('def', '\\n+(?=' + block.def.source + ')') + .getRegex(); + +block._tag = 'address|article|aside|base|basefont|blockquote|body|caption' + + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption' + + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe' + + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option' + + '|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr' + + '|track|ul'; +block._comment = /<!--(?!-?>)[\s\S]*?-->/; +block.html = edit(block.html, 'i') + .replace('comment', block._comment) + .replace('tag', block._tag) + .replace('attribute', / +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/) + .getRegex(); + +block.paragraph = edit(block.paragraph) + .replace('hr', block.hr) + .replace('heading', block.heading) + .replace('lheading', block.lheading) + .replace('tag', block._tag) // pars can be interrupted by type (6) html blocks + .getRegex(); + +block.blockquote = edit(block.blockquote) + .replace('paragraph', block.paragraph) + .getRegex(); + +/** + * Normal Block Grammar + */ + +block.normal = merge({}, block); + +/** + * GFM Block Grammar + */ + +block.gfm = merge({}, block.normal, { + fences: /^ *(`{3,}|~{3,})[ \.]*(\S+)? *\n([\s\S]*?)\n? *\1 *(?:\n+|$)/, + paragraph: /^/, + heading: /^ *(#{1,6}) +([^\n]+?) *#* *(?:\n+|$)/ +}); + +block.gfm.paragraph = edit(block.paragraph) + .replace('(?!', '(?!' + + block.gfm.fences.source.replace('\\1', '\\2') + '|' + + block.list.source.replace('\\1', '\\3') + '|') + .getRegex(); + +/** + * GFM + Tables Block Grammar + */ + +block.tables = merge({}, block.gfm, { + nptable: /^ *([^|\n ].*\|.*)\n *([-:]+ *\|[-| :]*)(?:\n((?:.*[^>\n ].*(?:\n|$))*)\n*|$)/, + table: /^ *\|(.+)\n *\|?( *[-:]+[-| :]*)(?:\n((?: *[^>\n ].*(?:\n|$))*)\n*|$)/ +}); + +/** + * Pedantic grammar + */ + +block.pedantic = merge({}, block.normal, { + html: edit( + '^ *(?:comment *(?:\\n|\\s*$)' + + '|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)' // closed tag + + '|<tag(?:"[^"]*"|\'[^\']*\'|\\s[^\'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))') + .replace('comment', block._comment) + .replace(/tag/g, '(?!(?:' + + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub' + + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)' + + '\\b)\\w+(?!:|[^\\w\\s@]*@)\\b') + .getRegex(), + def: /^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/ +}); + +/** + * Block Lexer + */ + +function Lexer(options) { + this.tokens = []; + this.tokens.links = Object.create(null); + this.options = options || marked.defaults; + this.rules = block.normal; + + if (this.options.pedantic) { + this.rules = block.pedantic; + } else if (this.options.gfm) { + if (this.options.tables) { + this.rules = block.tables; + } else { + this.rules = block.gfm; + } + } +} + +/** + * Expose Block Rules + */ + +Lexer.rules = block; + +/** + * Static Lex Method + */ + +Lexer.lex = function(src, options) { + var lexer = new Lexer(options); + return lexer.lex(src); +}; + +/** + * Preprocessing + */ + +Lexer.prototype.lex = function(src) { + src = src + .replace(/\r\n|\r/g, '\n') + .replace(/\t/g, ' ') + .replace(/\u00a0/g, ' ') + .replace(/\u2424/g, '\n'); + + return this.token(src, true); +}; + +/** + * Lexing + */ + +Lexer.prototype.token = function(src, top) { + src = src.replace(/^ +$/gm, ''); + var next, + loose, + cap, + bull, + b, + item, + listStart, + listItems, + t, + space, + i, + tag, + l, + isordered, + istask, + ischecked; + + while (src) { + // newline + if (cap = this.rules.newline.exec(src)) { + src = src.substring(cap[0].length); + if (cap[0].length > 1) { + this.tokens.push({ + type: 'space' + }); + } + } + + // code + if (cap = this.rules.code.exec(src)) { + src = src.substring(cap[0].length); + cap = cap[0].replace(/^ {4}/gm, ''); + this.tokens.push({ + type: 'code', + text: !this.options.pedantic + ? rtrim(cap, '\n') + : cap + }); + continue; + } + + // fences (gfm) + if (cap = this.rules.fences.exec(src)) { + src = src.substring(cap[0].length); + this.tokens.push({ + type: 'code', + lang: cap[2], + text: cap[3] || '' + }); + continue; + } + + // heading + if (cap = this.rules.heading.exec(src)) { + src = src.substring(cap[0].length); + this.tokens.push({ + type: 'heading', + depth: cap[1].length, + text: cap[2] + }); + continue; + } + + // table no leading pipe (gfm) + if (top && (cap = this.rules.nptable.exec(src))) { + item = { + type: 'table', + header: splitCells(cap[1].replace(/^ *| *\| *$/g, '')), + align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */), + cells: cap[3] ? cap[3].replace(/\n$/, '').split('\n') : [] + }; + + if (item.header.length === item.align.length) { + src = src.substring(cap[0].length); + + for (i = 0; i < item.align.length; i++) { + if (/^ *-+: *$/.test(item.align[i])) { + item.align[i] = 'right'; + } else if (/^ *:-+: *$/.test(item.align[i])) { + item.align[i] = 'center'; + } else if (/^ *:-+ *$/.test(item.align[i])) { + item.align[i] = 'left'; + } else { + item.align[i] = null; + } + } + + for (i = 0; i < item.cells.length; i++) { + item.cells[i] = splitCells(item.cells[i], item.header.length); + } + + this.tokens.push(item); + + continue; + } + } + + // hr + if (cap = this.rules.hr.exec(src)) { + src = src.substring(cap[0].length); + this.tokens.push({ + type: 'hr' + }); + continue; + } + + // blockquote + if (cap = this.rules.blockquote.exec(src)) { + src = src.substring(cap[0].length); + + this.tokens.push({ + type: 'blockquote_start' + }); + + cap = cap[0].replace(/^ *> ?/gm, ''); + + // Pass `top` to keep the current + // "toplevel" state. This is exactly + // how markdown.pl works. + this.token(cap, top); + + this.tokens.push({ + type: 'blockquote_end' + }); + + continue; + } + + // list + if (cap = this.rules.list.exec(src)) { + src = src.substring(cap[0].length); + bull = cap[2]; + isordered = bull.length > 1; + + listStart = { + type: 'list_start', + ordered: isordered, + start: isordered ? +bull : '', + loose: false + }; + + this.tokens.push(listStart); + + // Get each top-level item. + cap = cap[0].match(this.rules.item); + + listItems = []; + next = false; + l = cap.length; + i = 0; + + for (; i < l; i++) { + item = cap[i]; + + // Remove the list item's bullet + // so it is seen as the next token. + space = item.length; + item = item.replace(/^ *([*+-]|\d+\.) +/, ''); + + // Outdent whatever the + // list item contains. Hacky. + if (~item.indexOf('\n ')) { + space -= item.length; + item = !this.options.pedantic + ? item.replace(new RegExp('^ {1,' + space + '}', 'gm'), '') + : item.replace(/^ {1,4}/gm, ''); + } + + // Determine whether the next list item belongs here. + // Backpedal if it does not belong in this list. + if (this.options.smartLists && i !== l - 1) { + b = block.bullet.exec(cap[i + 1])[0]; + if (bull !== b && !(bull.length > 1 && b.length > 1)) { + src = cap.slice(i + 1).join('\n') + src; + i = l - 1; + } + } + + // Determine whether item is loose or not. + // Use: /(^|\n)(?! )[^\n]+\n\n(?!\s*$)/ + // for discount behavior. + loose = next || /\n\n(?!\s*$)/.test(item); + if (i !== l - 1) { + next = item.charAt(item.length - 1) === '\n'; + if (!loose) loose = next; + } + + if (loose) { + listStart.loose = true; + } + + // Check for task list items + istask = /^\[[ xX]\] /.test(item); + ischecked = undefined; + if (istask) { + ischecked = item[1] !== ' '; + item = item.replace(/^\[[ xX]\] +/, ''); + } + + t = { + type: 'list_item_start', + task: istask, + checked: ischecked, + loose: loose + }; + + listItems.push(t); + this.tokens.push(t); + + // Recurse. + this.token(item, false); + + this.tokens.push({ + type: 'list_item_end' + }); + } + + if (listStart.loose) { + l = listItems.length; + i = 0; + for (; i < l; i++) { + listItems[i].loose = true; + } + } + + this.tokens.push({ + type: 'list_end' + }); + + continue; + } + + // html + if (cap = this.rules.html.exec(src)) { + src = src.substring(cap[0].length); + this.tokens.push({ + type: this.options.sanitize + ? 'paragraph' + : 'html', + pre: !this.options.sanitizer + && (cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style'), + text: cap[0] + }); + continue; + } + + // def + if (top && (cap = this.rules.def.exec(src))) { + src = src.substring(cap[0].length); + if (cap[3]) cap[3] = cap[3].substring(1, cap[3].length - 1); + tag = cap[1].toLowerCase().replace(/\s+/g, ' '); + if (!this.tokens.links[tag]) { + this.tokens.links[tag] = { + href: cap[2], + title: cap[3] + }; + } + continue; + } + + // table (gfm) + if (top && (cap = this.rules.table.exec(src))) { + item = { + type: 'table', + header: splitCells(cap[1].replace(/^ *| *\| *$/g, '')), + align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */), + cells: cap[3] ? cap[3].replace(/(?: *\| *)?\n$/, '').split('\n') : [] + }; + + if (item.header.length === item.align.length) { + src = src.substring(cap[0].length); + + for (i = 0; i < item.align.length; i++) { + if (/^ *-+: *$/.test(item.align[i])) { + item.align[i] = 'right'; + } else if (/^ *:-+: *$/.test(item.align[i])) { + item.align[i] = 'center'; + } else if (/^ *:-+ *$/.test(item.align[i])) { + item.align[i] = 'left'; + } else { + item.align[i] = null; + } + } + + for (i = 0; i < item.cells.length; i++) { + item.cells[i] = splitCells( + item.cells[i].replace(/^ *\| *| *\| *$/g, ''), + item.header.length); + } + + this.tokens.push(item); + + continue; + } + } + + // lheading + if (cap = this.rules.lheading.exec(src)) { + src = src.substring(cap[0].length); + this.tokens.push({ + type: 'heading', + depth: cap[2] === '=' ? 1 : 2, + text: cap[1] + }); + continue; + } + + // top-level paragraph + if (top && (cap = this.rules.paragraph.exec(src))) { + src = src.substring(cap[0].length); + this.tokens.push({ + type: 'paragraph', + text: cap[1].charAt(cap[1].length - 1) === '\n' + ? cap[1].slice(0, -1) + : cap[1] + }); + continue; + } + + // text + if (cap = this.rules.text.exec(src)) { + // Top-level should never reach here. + src = src.substring(cap[0].length); + this.tokens.push({ + type: 'text', + text: cap[0] + }); + continue; + } + + if (src) { + throw new Error('Infinite loop on byte: ' + src.charCodeAt(0)); + } + } + + return this.tokens; +}; + +/** + * Inline-Level Grammar + */ + +var inline = { + escape: /^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/, + autolink: /^<(scheme:[^\s\x00-\x1f<>]*|email)>/, + url: noop, + tag: '^comment' + + '|^</[a-zA-Z][\\w:-]*\\s*>' // self-closing tag + + '|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>' // open tag + + '|^<\\?[\\s\\S]*?\\?>' // processing instruction, e.g. <?php ?> + + '|^<![a-zA-Z]+\\s[\\s\\S]*?>' // declaration, e.g. <!DOCTYPE html> + + '|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>', // CDATA section + link: /^!?\[(label)\]\(href(?:\s+(title))?\s*\)/, + reflink: /^!?\[(label)\]\[(?!\s*\])((?:\\[\[\]]?|[^\[\]\\])+)\]/, + nolink: /^!?\[(?!\s*\])((?:\[[^\[\]]*\]|\\[\[\]]|[^\[\]])*)\](?:\[\])?/, + strong: /^__([^\s])__(?!_)|^\*\*([^\s])\*\*(?!\*)|^__([^\s][\s\S]*?[^\s])__(?!_)|^\*\*([^\s][\s\S]*?[^\s])\*\*(?!\*)/, + em: /^_([^\s_])_(?!_)|^\*([^\s*"<\[])\*(?!\*)|^_([^\s][\s\S]*?[^\s_])_(?!_)|^_([^\s_][\s\S]*?[^\s])_(?!_)|^\*([^\s"<\[][\s\S]*?[^\s*])\*(?!\*)|^\*([^\s*"<\[][\s\S]*?[^\s])\*(?!\*)/, + code: /^(`+)\s*([\s\S]*?[^`]?)\s*\1(?!`)/, + br: /^( {2,}|\\)\n(?!\s*$)/, + del: noop, + text: /^[\s\S]+?(?=[\\<!\[`*]|\b_| {2,}\n|$)/ +}; + +inline._escapes = /\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g; + +inline._scheme = /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/; +inline._email = /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/; +inline.autolink = edit(inline.autolink) + .replace('scheme', inline._scheme) + .replace('email', inline._email) + .getRegex(); + +inline._attribute = /\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/; + +inline.tag = edit(inline.tag) + .replace('comment', block._comment) + .replace('attribute', inline._attribute) + .getRegex(); + +inline._label = /(?:\[[^\[\]]*\]|\\[\[\]]?|`[^`]*`|[^\[\]\\])*?/; +inline._href = /\s*(<(?:\\[<>]?|[^\s<>\\])*>|(?:\\[()]?|\([^\s\x00-\x1f\\]*\)|[^\s\x00-\x1f()\\])*?)/; +inline._title = /"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/; + +inline.link = edit(inline.link) + .replace('label', inline._label) + .replace('href', inline._href) + .replace('title', inline._title) + .getRegex(); + +inline.reflink = edit(inline.reflink) + .replace('label', inline._label) + .getRegex(); + +/** + * Normal Inline Grammar + */ + +inline.normal = merge({}, inline); + +/** + * Pedantic Inline Grammar + */ + +inline.pedantic = merge({}, inline.normal, { + strong: /^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/, + em: /^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/, + link: edit(/^!?\[(label)\]\((.*?)\)/) + .replace('label', inline._label) + .getRegex(), + reflink: edit(/^!?\[(label)\]\s*\[([^\]]*)\]/) + .replace('label', inline._label) + .getRegex() +}); + +/** + * GFM Inline Grammar + */ + +inline.gfm = merge({}, inline.normal, { + escape: edit(inline.escape).replace('])', '~|])').getRegex(), + url: edit(/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/) + .replace('email', inline._email) + .getRegex(), + _backpedal: /(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/, + del: /^~+(?=\S)([\s\S]*?\S)~+/, + text: edit(inline.text) + .replace(']|', '~]|') + .replace('|', '|https?://|ftp://|www\\.|[a-zA-Z0-9.!#$%&\'*+/=?^_`{\\|}~-]+@|') + .getRegex() +}); + +/** + * GFM + Line Breaks Inline Grammar + */ + +inline.breaks = merge({}, inline.gfm, { + br: edit(inline.br).replace('{2,}', '*').getRegex(), + text: edit(inline.gfm.text).replace('{2,}', '*').getRegex() +}); + +/** + * Inline Lexer & Compiler + */ + +function InlineLexer(links, options) { + this.options = options || marked.defaults; + this.links = links; + this.rules = inline.normal; + this.renderer = this.options.renderer || new Renderer(); + this.renderer.options = this.options; + + if (!this.links) { + throw new Error('Tokens array requires a `links` property.'); + } + + if (this.options.pedantic) { + this.rules = inline.pedantic; + } else if (this.options.gfm) { + if (this.options.breaks) { + this.rules = inline.breaks; + } else { + this.rules = inline.gfm; + } + } +} + +/** + * Expose Inline Rules + */ + +InlineLexer.rules = inline; + +/** + * Static Lexing/Compiling Method + */ + +InlineLexer.output = function(src, links, options) { + var inline = new InlineLexer(links, options); + return inline.output(src); +}; + +/** + * Lexing/Compiling + */ + +InlineLexer.prototype.output = function(src) { + var out = '', + link, + text, + href, + title, + cap, + prevCapZero; + + while (src) { + // escape + if (cap = this.rules.escape.exec(src)) { + src = src.substring(cap[0].length); + out += cap[1]; + continue; + } + + // autolink + if (cap = this.rules.autolink.exec(src)) { + src = src.substring(cap[0].length); + if (cap[2] === '@') { + text = escape(this.mangle(cap[1])); + href = 'mailto:' + text; + } else { + text = escape(cap[1]); + href = text; + } + out += this.renderer.link(href, null, text); + continue; + } + + // url (gfm) + if (!this.inLink && (cap = this.rules.url.exec(src))) { + do { + prevCapZero = cap[0]; + cap[0] = this.rules._backpedal.exec(cap[0])[0]; + } while (prevCapZero !== cap[0]); + src = src.substring(cap[0].length); + if (cap[2] === '@') { + text = escape(cap[0]); + href = 'mailto:' + text; + } else { + text = escape(cap[0]); + if (cap[1] === 'www.') { + href = 'http://' + text; + } else { + href = text; + } + } + out += this.renderer.link(href, null, text); + continue; + } + + // tag + if (cap = this.rules.tag.exec(src)) { + if (!this.inLink && /^<a /i.test(cap[0])) { + this.inLink = true; + } else if (this.inLink && /^<\/a>/i.test(cap[0])) { + this.inLink = false; + } + src = src.substring(cap[0].length); + out += this.options.sanitize + ? this.options.sanitizer + ? this.options.sanitizer(cap[0]) + : escape(cap[0]) + : cap[0] + continue; + } + + // link + if (cap = this.rules.link.exec(src)) { + src = src.substring(cap[0].length); + this.inLink = true; + href = cap[2]; + if (this.options.pedantic) { + link = /^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(href); + + if (link) { + href = link[1]; + title = link[3]; + } else { + title = ''; + } + } else { + title = cap[3] ? cap[3].slice(1, -1) : ''; + } + href = href.trim().replace(/^<([\s\S]*)>$/, '$1'); + out += this.outputLink(cap, { + href: InlineLexer.escapes(href), + title: InlineLexer.escapes(title) + }); + this.inLink = false; + continue; + } + + // reflink, nolink + if ((cap = this.rules.reflink.exec(src)) + || (cap = this.rules.nolink.exec(src))) { + src = src.substring(cap[0].length); + link = (cap[2] || cap[1]).replace(/\s+/g, ' '); + link = this.links[link.toLowerCase()]; + if (!link || !link.href) { + out += cap[0].charAt(0); + src = cap[0].substring(1) + src; + continue; + } + this.inLink = true; + out += this.outputLink(cap, link); + this.inLink = false; + continue; + } + + // strong + if (cap = this.rules.strong.exec(src)) { + src = src.substring(cap[0].length); + out += this.renderer.strong(this.output(cap[4] || cap[3] || cap[2] || cap[1])); + continue; + } + + // em + if (cap = this.rules.em.exec(src)) { + src = src.substring(cap[0].length); + out += this.renderer.em(this.output(cap[6] || cap[5] || cap[4] || cap[3] || cap[2] || cap[1])); + continue; + } + + // code + if (cap = this.rules.code.exec(src)) { + src = src.substring(cap[0].length); + out += this.renderer.codespan(escape(cap[2].trim(), true)); + continue; + } + + // br + if (cap = this.rules.br.exec(src)) { + src = src.substring(cap[0].length); + out += this.renderer.br(); + continue; + } + + // del (gfm) + if (cap = this.rules.del.exec(src)) { + src = src.substring(cap[0].length); + out += this.renderer.del(this.output(cap[1])); + continue; + } + + // text + if (cap = this.rules.text.exec(src)) { + src = src.substring(cap[0].length); + out += this.renderer.text(escape(this.smartypants(cap[0]))); + continue; + } + + if (src) { + throw new Error('Infinite loop on byte: ' + src.charCodeAt(0)); + } + } + + return out; +}; + +InlineLexer.escapes = function(text) { + return text ? text.replace(InlineLexer.rules._escapes, '$1') : text; +} + +/** + * Compile Link + */ + +InlineLexer.prototype.outputLink = function(cap, link) { + var href = link.href, + title = link.title ? escape(link.title) : null; + + return cap[0].charAt(0) !== '!' + ? this.renderer.link(href, title, this.output(cap[1])) + : this.renderer.image(href, title, escape(cap[1])); +}; + +/** + * Smartypants Transformations + */ + +InlineLexer.prototype.smartypants = function(text) { + if (!this.options.smartypants) return text; + return text + // em-dashes + .replace(/---/g, '\u2014') + // en-dashes + .replace(/--/g, '\u2013') + // opening singles + .replace(/(^|[-\u2014/(\[{"\s])'/g, '$1\u2018') + // closing singles & apostrophes + .replace(/'/g, '\u2019') + // opening doubles + .replace(/(^|[-\u2014/(\[{\u2018\s])"/g, '$1\u201c') + // closing doubles + .replace(/"/g, '\u201d') + // ellipses + .replace(/\.{3}/g, '\u2026'); +}; + +/** + * Mangle Links + */ + +InlineLexer.prototype.mangle = function(text) { + if (!this.options.mangle) return text; + var out = '', + l = text.length, + i = 0, + ch; + + for (; i < l; i++) { + ch = text.charCodeAt(i); + if (Math.random() > 0.5) { + ch = 'x' + ch.toString(16); + } + out += '&#' + ch + ';'; + } + + return out; +}; + +/** + * Renderer + */ + +function Renderer(options) { + this.options = options || marked.defaults; +} + +Renderer.prototype.code = function(code, lang, escaped) { + if (this.options.highlight) { + var out = this.options.highlight(code, lang); + if (out != null && out !== code) { + escaped = true; + code = out; + } + } + + if (!lang) { + return '<pre><code>' + + (escaped ? code : escape(code, true)) + + '</code></pre>'; + } + + return '<pre><code class="' + + this.options.langPrefix + + escape(lang, true) + + '">' + + (escaped ? code : escape(code, true)) + + '</code></pre>\n'; +}; + +Renderer.prototype.blockquote = function(quote) { + return '<blockquote>\n' + quote + '</blockquote>\n'; +}; + +Renderer.prototype.html = function(html) { + return html; +}; + +Renderer.prototype.heading = function(text, level, raw) { + if (this.options.headerIds) { + return '<h' + + level + + ' id="' + + this.options.headerPrefix + + raw.toLowerCase().replace(/[^\w]+/g, '-') + + '">' + + text + + '</h' + + level + + '>\n'; + } + // ignore IDs + return '<h' + level + '>' + text + '</h' + level + '>\n'; +}; + +Renderer.prototype.hr = function() { + return this.options.xhtml ? '<hr/>\n' : '<hr>\n'; +}; + +Renderer.prototype.list = function(body, ordered, start) { + var type = ordered ? 'ol' : 'ul', + startatt = (ordered && start !== 1) ? (' start="' + start + '"') : ''; + return '<' + type + startatt + '>\n' + body + '</' + type + '>\n'; +}; + +Renderer.prototype.listitem = function(text) { + return '<li>' + text + '</li>\n'; +}; + +Renderer.prototype.checkbox = function(checked) { + return '<input ' + + (checked ? 'checked="" ' : '') + + 'disabled="" type="checkbox"' + + (this.options.xhtml ? ' /' : '') + + '> '; +} + +Renderer.prototype.paragraph = function(text) { + return '<p>' + text + '</p>\n'; +}; + +Renderer.prototype.table = function(header, body) { + if (body) body = '<tbody>' + body + '</tbody>'; + + return '<table>\n' + + '<thead>\n' + + header + + '</thead>\n' + + body + + '</table>\n'; +}; + +Renderer.prototype.tablerow = function(content) { + return '<tr>\n' + content + '</tr>\n'; +}; + +Renderer.prototype.tablecell = function(content, flags) { + var type = flags.header ? 'th' : 'td'; + var tag = flags.align + ? '<' + type + ' align="' + flags.align + '">' + : '<' + type + '>'; + return tag + content + '</' + type + '>\n'; +}; + +// span level renderer +Renderer.prototype.strong = function(text) { + return '<strong>' + text + '</strong>'; +}; + +Renderer.prototype.em = function(text) { + return '<em>' + text + '</em>'; +}; + +Renderer.prototype.codespan = function(text) { + return '<code>' + text + '</code>'; +}; + +Renderer.prototype.br = function() { + return this.options.xhtml ? '<br/>' : '<br>'; +}; + +Renderer.prototype.del = function(text) { + return '<del>' + text + '</del>'; +}; + +Renderer.prototype.link = function(href, title, text) { + if (this.options.sanitize) { + try { + var prot = decodeURIComponent(unescape(href)) + .replace(/[^\w:]/g, '') + .toLowerCase(); + } catch (e) { + return text; + } + if (prot.indexOf('javascript:') === 0 || prot.indexOf('vbscript:') === 0 || prot.indexOf('data:') === 0) { + return text; + } + } + if (this.options.baseUrl && !originIndependentUrl.test(href)) { + href = resolveUrl(this.options.baseUrl, href); + } + try { + href = encodeURI(href).replace(/%25/g, '%'); + } catch (e) { + return text; + } + var out = '<a href="' + escape(href) + '"'; + if (title) { + out += ' title="' + title + '"'; + } + out += '>' + text + '</a>'; + return out; +}; + +Renderer.prototype.image = function(href, title, text) { + if (this.options.baseUrl && !originIndependentUrl.test(href)) { + href = resolveUrl(this.options.baseUrl, href); + } + var out = '<img src="' + href + '" alt="' + text + '"'; + if (title) { + out += ' title="' + title + '"'; + } + out += this.options.xhtml ? '/>' : '>'; + return out; +}; + +Renderer.prototype.text = function(text) { + return text; +}; + +/** + * TextRenderer + * returns only the textual part of the token + */ + +function TextRenderer() {} + +// no need for block level renderers + +TextRenderer.prototype.strong = +TextRenderer.prototype.em = +TextRenderer.prototype.codespan = +TextRenderer.prototype.del = +TextRenderer.prototype.text = function (text) { + return text; +} + +TextRenderer.prototype.link = +TextRenderer.prototype.image = function(href, title, text) { + return '' + text; +} + +TextRenderer.prototype.br = function() { + return ''; +} + +/** + * Parsing & Compiling + */ + +function Parser(options) { + this.tokens = []; + this.token = null; + this.options = options || marked.defaults; + this.options.renderer = this.options.renderer || new Renderer(); + this.renderer = this.options.renderer; + this.renderer.options = this.options; +} + +/** + * Static Parse Method + */ + +Parser.parse = function(src, options) { + var parser = new Parser(options); + return parser.parse(src); +}; + +/** + * Parse Loop + */ + +Parser.prototype.parse = function(src) { + this.inline = new InlineLexer(src.links, this.options); + // use an InlineLexer with a TextRenderer to extract pure text + this.inlineText = new InlineLexer( + src.links, + merge({}, this.options, {renderer: new TextRenderer()}) + ); + this.tokens = src.reverse(); + + var out = ''; + while (this.next()) { + out += this.tok(); + } + + return out; +}; + +/** + * Next Token + */ + +Parser.prototype.next = function() { + return this.token = this.tokens.pop(); +}; + +/** + * Preview Next Token + */ + +Parser.prototype.peek = function() { + return this.tokens[this.tokens.length - 1] || 0; +}; + +/** + * Parse Text Tokens + */ + +Parser.prototype.parseText = function() { + var body = this.token.text; + + while (this.peek().type === 'text') { + body += '\n' + this.next().text; + } + + return this.inline.output(body); +}; + +/** + * Parse Current Token + */ + +Parser.prototype.tok = function() { + switch (this.token.type) { + case 'space': { + return ''; + } + case 'hr': { + return this.renderer.hr(); + } + case 'heading': { + return this.renderer.heading( + this.inline.output(this.token.text), + this.token.depth, + unescape(this.inlineText.output(this.token.text))); + } + case 'code': { + return this.renderer.code(this.token.text, + this.token.lang, + this.token.escaped); + } + case 'table': { + var header = '', + body = '', + i, + row, + cell, + j; + + // header + cell = ''; + for (i = 0; i < this.token.header.length; i++) { + cell += this.renderer.tablecell( + this.inline.output(this.token.header[i]), + { header: true, align: this.token.align[i] } + ); + } + header += this.renderer.tablerow(cell); + + for (i = 0; i < this.token.cells.length; i++) { + row = this.token.cells[i]; + + cell = ''; + for (j = 0; j < row.length; j++) { + cell += this.renderer.tablecell( + this.inline.output(row[j]), + { header: false, align: this.token.align[j] } + ); + } + + body += this.renderer.tablerow(cell); + } + return this.renderer.table(header, body); + } + case 'blockquote_start': { + body = ''; + + while (this.next().type !== 'blockquote_end') { + body += this.tok(); + } + + return this.renderer.blockquote(body); + } + case 'list_start': { + body = ''; + var ordered = this.token.ordered, + start = this.token.start; + + while (this.next().type !== 'list_end') { + body += this.tok(); + } + + return this.renderer.list(body, ordered, start); + } + case 'list_item_start': { + body = ''; + var loose = this.token.loose; + + if (this.token.task) { + body += this.renderer.checkbox(this.token.checked); + } + + while (this.next().type !== 'list_item_end') { + body += !loose && this.token.type === 'text' + ? this.parseText() + : this.tok(); + } + + return this.renderer.listitem(body); + } + case 'html': { + // TODO parse inline content if parameter markdown=1 + return this.renderer.html(this.token.text); + } + case 'paragraph': { + return this.renderer.paragraph(this.inline.output(this.token.text)); + } + case 'text': { + return this.renderer.paragraph(this.parseText()); + } + } +}; + +/** + * Helpers + */ + +function escape(html, encode) { + return html + .replace(!encode ? /&(?!#?\w+;)/g : /&/g, '&') + .replace(/</g, '<') + .replace(/>/g, '>') + .replace(/"/g, '"') + .replace(/'/g, '''); +} + +function unescape(html) { + // explicitly match decimal, hex, and named HTML entities + return html.replace(/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig, function(_, n) { + n = n.toLowerCase(); + if (n === 'colon') return ':'; + if (n.charAt(0) === '#') { + return n.charAt(1) === 'x' + ? String.fromCharCode(parseInt(n.substring(2), 16)) + : String.fromCharCode(+n.substring(1)); + } + return ''; + }); +} + +function edit(regex, opt) { + regex = regex.source || regex; + opt = opt || ''; + return { + replace: function(name, val) { + val = val.source || val; + val = val.replace(/(^|[^\[])\^/g, '$1'); + regex = regex.replace(name, val); + return this; + }, + getRegex: function() { + return new RegExp(regex, opt); + } + }; +} + +function resolveUrl(base, href) { + if (!baseUrls[' ' + base]) { + // we can ignore everything in base after the last slash of its path component, + // but we might need to add _that_ + // https://tools.ietf.org/html/rfc3986#section-3 + if (/^[^:]+:\/*[^/]*$/.test(base)) { + baseUrls[' ' + base] = base + '/'; + } else { + baseUrls[' ' + base] = rtrim(base, '/', true); + } + } + base = baseUrls[' ' + base]; + + if (href.slice(0, 2) === '//') { + return base.replace(/:[\s\S]*/, ':') + href; + } else if (href.charAt(0) === '/') { + return base.replace(/(:\/*[^/]*)[\s\S]*/, '$1') + href; + } else { + return base + href; + } +} +var baseUrls = {}; +var originIndependentUrl = /^$|^[a-z][a-z0-9+.-]*:|^[?#]/i; + +function noop() {} +noop.exec = noop; + +function merge(obj) { + var i = 1, + target, + key; + + for (; i < arguments.length; i++) { + target = arguments[i]; + for (key in target) { + if (Object.prototype.hasOwnProperty.call(target, key)) { + obj[key] = target[key]; + } + } + } + + return obj; +} + +function splitCells(tableRow, count) { + // ensure that every cell-delimiting pipe has a space + // before it to distinguish it from an escaped pipe + var row = tableRow.replace(/\|/g, function (match, offset, str) { + var escaped = false, + curr = offset; + while (--curr >= 0 && str[curr] === '\\') escaped = !escaped; + if (escaped) { + // odd number of slashes means | is escaped + // so we leave it alone + return '|'; + } else { + // add space before unescaped | + return ' |'; + } + }), + cells = row.split(/ \|/), + i = 0; + + if (cells.length > count) { + cells.splice(count); + } else { + while (cells.length < count) cells.push(''); + } + + for (; i < cells.length; i++) { + // leading or trailing whitespace is ignored per the gfm spec + cells[i] = cells[i].trim().replace(/\\\|/g, '|'); + } + return cells; +} + +// Remove trailing 'c's. Equivalent to str.replace(/c*$/, ''). +// /c*$/ is vulnerable to REDOS. +// invert: Remove suffix of non-c chars instead. Default falsey. +function rtrim(str, c, invert) { + if (str.length === 0) { + return ''; + } + + // Length of suffix matching the invert condition. + var suffLen = 0; + + // Step left until we fail to match the invert condition. + while (suffLen < str.length) { + var currChar = str.charAt(str.length - suffLen - 1); + if (currChar === c && !invert) { + suffLen++; + } else if (currChar !== c && invert) { + suffLen++; + } else { + break; + } + } + + return str.substr(0, str.length - suffLen); +} + +/** + * Marked + */ + +function marked(src, opt, callback) { + // throw error in case of non string input + if (typeof src === 'undefined' || src === null) { + throw new Error('marked(): input parameter is undefined or null'); + } + if (typeof src !== 'string') { + throw new Error('marked(): input parameter is of type ' + + Object.prototype.toString.call(src) + ', string expected'); + } + + if (callback || typeof opt === 'function') { + if (!callback) { + callback = opt; + opt = null; + } + + opt = merge({}, marked.defaults, opt || {}); + + var highlight = opt.highlight, + tokens, + pending, + i = 0; + + try { + tokens = Lexer.lex(src, opt) + } catch (e) { + return callback(e); + } + + pending = tokens.length; + + var done = function(err) { + if (err) { + opt.highlight = highlight; + return callback(err); + } + + var out; + + try { + out = Parser.parse(tokens, opt); + } catch (e) { + err = e; + } + + opt.highlight = highlight; + + return err + ? callback(err) + : callback(null, out); + }; + + if (!highlight || highlight.length < 3) { + return done(); + } + + delete opt.highlight; + + if (!pending) return done(); + + for (; i < tokens.length; i++) { + (function(token) { + if (token.type !== 'code') { + return --pending || done(); + } + return highlight(token.text, token.lang, function(err, code) { + if (err) return done(err); + if (code == null || code === token.text) { + return --pending || done(); + } + token.text = code; + token.escaped = true; + --pending || done(); + }); + })(tokens[i]); + } + + return; + } + try { + if (opt) opt = merge({}, marked.defaults, opt); + return Parser.parse(Lexer.lex(src, opt), opt); + } catch (e) { + e.message += '\nPlease report this to https://github.com/markedjs/marked.'; + if ((opt || marked.defaults).silent) { + return '<p>An error occurred:</p><pre>' + + escape(e.message + '', true) + + '</pre>'; + } + throw e; + } +} + +/** + * Options + */ + +marked.options = +marked.setOptions = function(opt) { + merge(marked.defaults, opt); + return marked; +}; + +marked.getDefaults = function () { + return { + baseUrl: null, + breaks: false, + gfm: true, + headerIds: true, + headerPrefix: '', + highlight: null, + langPrefix: 'language-', + mangle: true, + pedantic: false, + renderer: new Renderer(), + sanitize: false, + sanitizer: null, + silent: false, + smartLists: false, + smartypants: false, + tables: true, + xhtml: false + }; +} + +marked.defaults = marked.getDefaults(); + +/** + * Expose + */ + +marked.Parser = Parser; +marked.parser = Parser.parse; + +marked.Renderer = Renderer; +marked.TextRenderer = TextRenderer; + +marked.Lexer = Lexer; +marked.lexer = Lexer.lex; + +marked.InlineLexer = InlineLexer; +marked.inlineLexer = InlineLexer.output; + +marked.parse = marked; + +if (typeof module !== 'undefined' && typeof exports === 'object') { + module.exports = marked; +} else if (typeof define === 'function' && define.amd) { + define(function() { return marked; }); +} else { + root.marked = marked; +} +})(this || (typeof window !== 'undefined' ? window : global)); diff --git a/components/mpvue-citypicker/city-data/area.js b/components/mpvue-citypicker/city-data/area.js new file mode 100644 index 0000000..92dfc30 --- /dev/null +++ b/components/mpvue-citypicker/city-data/area.js @@ -0,0 +1,12542 @@ +/* eslint-disable */ +var areaData = [ + [ + [{ + "label": "东城区", + "value": "110101" + }, + { + "label": "西城区", + "value": "110102" + }, + { + "label": "朝阳区", + "value": "110105" + }, + { + "label": "丰台区", + "value": "110106" + }, + { + "label": "石景山区", + "value": "110107" + }, + { + "label": "海淀区", + "value": "110108" + }, + { + "label": "门头沟区", + "value": "110109" + }, + { + "label": "房山区", + "value": "110111" + }, + { + "label": "通州区", + "value": "110112" + }, + { + "label": "顺义区", + "value": "110113" + }, + { + "label": "昌平区", + "value": "110114" + }, + { + "label": "大兴区", + "value": "110115" + }, + { + "label": "怀柔区", + "value": "110116" + }, + { + "label": "平谷区", + "value": "110117" + }, + { + "label": "密云区", + "value": "110118" + }, + { + "label": "延庆区", + "value": "110119" + } + ] + ], + [ + [{ + "label": "和平区", + "value": "120101" + }, + { + "label": "河东区", + "value": "120102" + }, + { + "label": "河西区", + "value": "120103" + }, + { + "label": "南开区", + "value": "120104" + }, + { + "label": "河北区", + "value": "120105" + }, + { + "label": "红桥区", + "value": "120106" + }, + { + "label": "东丽区", + "value": "120110" + }, + { + "label": "西青区", + "value": "120111" + }, + { + "label": "津南区", + "value": "120112" + }, + { + "label": "北辰区", + "value": "120113" + }, + { + "label": "武清区", + "value": "120114" + }, + { + "label": "宝坻区", + "value": "120115" + }, + { + "label": "滨海新区", + "value": "120116" + }, + { + "label": "宁河区", + "value": "120117" + }, + { + "label": "静海区", + "value": "120118" + }, + { + "label": "蓟州区", + "value": "120119" + } + ] + ], + [ + [{ + "label": "长安区", + "value": "130102" + }, + { + "label": "桥西区", + "value": "130104" + }, + { + "label": "新华区", + "value": "130105" + }, + { + "label": "井陉矿区", + "value": "130107" + }, + { + "label": "裕华区", + "value": "130108" + }, + { + "label": "藁城区", + "value": "130109" + }, + { + "label": "鹿泉区", + "value": "130110" + }, + { + "label": "栾城区", + "value": "130111" + }, + { + "label": "井陉县", + "value": "130121" + }, + { + "label": "正定县", + "value": "130123" + }, + { + "label": "行唐县", + "value": "130125" + }, + { + "label": "灵寿县", + "value": "130126" + }, + { + "label": "高邑县", + "value": "130127" + }, + { + "label": "深泽县", + "value": "130128" + }, + { + "label": "赞皇县", + "value": "130129" + }, + { + "label": "无极县", + "value": "130130" + }, + { + "label": "平山县", + "value": "130131" + }, + { + "label": "元氏县", + "value": "130132" + }, + { + "label": "赵县", + "value": "130133" + }, + { + "label": "石家庄高新技术产业开发区", + "value": "130171" + }, + { + "label": "石家庄循环化工园区", + "value": "130172" + }, + { + "label": "辛集市", + "value": "130181" + }, + { + "label": "晋州市", + "value": "130183" + }, + { + "label": "新乐市", + "value": "130184" + } + ], + [{ + "label": "路南区", + "value": "130202" + }, + { + "label": "路北区", + "value": "130203" + }, + { + "label": "古冶区", + "value": "130204" + }, + { + "label": "开平区", + "value": "130205" + }, + { + "label": "丰南区", + "value": "130207" + }, + { + "label": "丰润区", + "value": "130208" + }, + { + "label": "曹妃甸区", + "value": "130209" + }, + { + "label": "滦县", + "value": "130223" + }, + { + "label": "滦南县", + "value": "130224" + }, + { + "label": "乐亭县", + "value": "130225" + }, + { + "label": "迁西县", + "value": "130227" + }, + { + "label": "玉田县", + "value": "130229" + }, + { + "label": "唐山市芦台经济技术开发区", + "value": "130271" + }, + { + "label": "唐山市汉沽管理区", + "value": "130272" + }, + { + "label": "唐山高新技术产业开发区", + "value": "130273" + }, + { + "label": "河北唐山海港经济开发区", + "value": "130274" + }, + { + "label": "遵化市", + "value": "130281" + }, + { + "label": "迁安市", + "value": "130283" + } + ], + [{ + "label": "海港区", + "value": "130302" + }, + { + "label": "山海关区", + "value": "130303" + }, + { + "label": "北戴河区", + "value": "130304" + }, + { + "label": "抚宁区", + "value": "130306" + }, + { + "label": "青龙满族自治县", + "value": "130321" + }, + { + "label": "昌黎县", + "value": "130322" + }, + { + "label": "卢龙县", + "value": "130324" + }, + { + "label": "秦皇岛市经济技术开发区", + "value": "130371" + }, + { + "label": "北戴河新区", + "value": "130372" + } + ], + [{ + "label": "邯山区", + "value": "130402" + }, + { + "label": "丛台区", + "value": "130403" + }, + { + "label": "复兴区", + "value": "130404" + }, + { + "label": "峰峰矿区", + "value": "130406" + }, + { + "label": "肥乡区", + "value": "130407" + }, + { + "label": "永年区", + "value": "130408" + }, + { + "label": "临漳县", + "value": "130423" + }, + { + "label": "成安县", + "value": "130424" + }, + { + "label": "大名县", + "value": "130425" + }, + { + "label": "涉县", + "value": "130426" + }, + { + "label": "磁县", + "value": "130427" + }, + { + "label": "邱县", + "value": "130430" + }, + { + "label": "鸡泽县", + "value": "130431" + }, + { + "label": "广平县", + "value": "130432" + }, + { + "label": "馆陶县", + "value": "130433" + }, + { + "label": "魏县", + "value": "130434" + }, + { + "label": "曲周县", + "value": "130435" + }, + { + "label": "邯郸经济技术开发区", + "value": "130471" + }, + { + "label": "邯郸冀南新区", + "value": "130473" + }, + { + "label": "武安市", + "value": "130481" + } + ], + [{ + "label": "桥东区", + "value": "130502" + }, + { + "label": "桥西区", + "value": "130503" + }, + { + "label": "邢台县", + "value": "130521" + }, + { + "label": "临城县", + "value": "130522" + }, + { + "label": "内丘县", + "value": "130523" + }, + { + "label": "柏乡县", + "value": "130524" + }, + { + "label": "隆尧县", + "value": "130525" + }, + { + "label": "任县", + "value": "130526" + }, + { + "label": "南和县", + "value": "130527" + }, + { + "label": "宁晋县", + "value": "130528" + }, + { + "label": "巨鹿县", + "value": "130529" + }, + { + "label": "新河县", + "value": "130530" + }, + { + "label": "广宗县", + "value": "130531" + }, + { + "label": "平乡县", + "value": "130532" + }, + { + "label": "威县", + "value": "130533" + }, + { + "label": "清河县", + "value": "130534" + }, + { + "label": "临西县", + "value": "130535" + }, + { + "label": "河北邢台经济开发区", + "value": "130571" + }, + { + "label": "南宫市", + "value": "130581" + }, + { + "label": "沙河市", + "value": "130582" + } + ], + [{ + "label": "竞秀区", + "value": "130602" + }, + { + "label": "莲池区", + "value": "130606" + }, + { + "label": "满城区", + "value": "130607" + }, + { + "label": "清苑区", + "value": "130608" + }, + { + "label": "徐水区", + "value": "130609" + }, + { + "label": "涞水县", + "value": "130623" + }, + { + "label": "阜平县", + "value": "130624" + }, + { + "label": "定兴县", + "value": "130626" + }, + { + "label": "唐县", + "value": "130627" + }, + { + "label": "高阳县", + "value": "130628" + }, + { + "label": "容城县", + "value": "130629" + }, + { + "label": "涞源县", + "value": "130630" + }, + { + "label": "望都县", + "value": "130631" + }, + { + "label": "安新县", + "value": "130632" + }, + { + "label": "易县", + "value": "130633" + }, + { + "label": "曲阳县", + "value": "130634" + }, + { + "label": "蠡县", + "value": "130635" + }, + { + "label": "顺平县", + "value": "130636" + }, + { + "label": "博野县", + "value": "130637" + }, + { + "label": "雄县", + "value": "130638" + }, + { + "label": "保定高新技术产业开发区", + "value": "130671" + }, + { + "label": "保定白沟新城", + "value": "130672" + }, + { + "label": "涿州市", + "value": "130681" + }, + { + "label": "定州市", + "value": "130682" + }, + { + "label": "安国市", + "value": "130683" + }, + { + "label": "高碑店市", + "value": "130684" + } + ], + [{ + "label": "桥东区", + "value": "130702" + }, + { + "label": "桥西区", + "value": "130703" + }, + { + "label": "宣化区", + "value": "130705" + }, + { + "label": "下花园区", + "value": "130706" + }, + { + "label": "万全区", + "value": "130708" + }, + { + "label": "崇礼区", + "value": "130709" + }, + { + "label": "张北县", + "value": "130722" + }, + { + "label": "康保县", + "value": "130723" + }, + { + "label": "沽源县", + "value": "130724" + }, + { + "label": "尚义县", + "value": "130725" + }, + { + "label": "蔚县", + "value": "130726" + }, + { + "label": "阳原县", + "value": "130727" + }, + { + "label": "怀安县", + "value": "130728" + }, + { + "label": "怀来县", + "value": "130730" + }, + { + "label": "涿鹿县", + "value": "130731" + }, + { + "label": "赤城县", + "value": "130732" + }, + { + "label": "张家口市高新技术产业开发区", + "value": "130771" + }, + { + "label": "张家口市察北管理区", + "value": "130772" + }, + { + "label": "张家口市塞北管理区", + "value": "130773" + } + ], + [{ + "label": "双桥区", + "value": "130802" + }, + { + "label": "双滦区", + "value": "130803" + }, + { + "label": "鹰手营子矿区", + "value": "130804" + }, + { + "label": "承德县", + "value": "130821" + }, + { + "label": "兴隆县", + "value": "130822" + }, + { + "label": "滦平县", + "value": "130824" + }, + { + "label": "隆化县", + "value": "130825" + }, + { + "label": "丰宁满族自治县", + "value": "130826" + }, + { + "label": "宽城满族自治县", + "value": "130827" + }, + { + "label": "围场满族蒙古族自治县", + "value": "130828" + }, + { + "label": "承德高新技术产业开发区", + "value": "130871" + }, + { + "label": "平泉市", + "value": "130881" + } + ], + [{ + "label": "新华区", + "value": "130902" + }, + { + "label": "运河区", + "value": "130903" + }, + { + "label": "沧县", + "value": "130921" + }, + { + "label": "青县", + "value": "130922" + }, + { + "label": "东光县", + "value": "130923" + }, + { + "label": "海兴县", + "value": "130924" + }, + { + "label": "盐山县", + "value": "130925" + }, + { + "label": "肃宁县", + "value": "130926" + }, + { + "label": "南皮县", + "value": "130927" + }, + { + "label": "吴桥县", + "value": "130928" + }, + { + "label": "献县", + "value": "130929" + }, + { + "label": "孟村回族自治县", + "value": "130930" + }, + { + "label": "河北沧州经济开发区", + "value": "130971" + }, + { + "label": "沧州高新技术产业开发区", + "value": "130972" + }, + { + "label": "沧州渤海新区", + "value": "130973" + }, + { + "label": "泊头市", + "value": "130981" + }, + { + "label": "任丘市", + "value": "130982" + }, + { + "label": "黄骅市", + "value": "130983" + }, + { + "label": "河间市", + "value": "130984" + } + ], + [{ + "label": "安次区", + "value": "131002" + }, + { + "label": "广阳区", + "value": "131003" + }, + { + "label": "固安县", + "value": "131022" + }, + { + "label": "永清县", + "value": "131023" + }, + { + "label": "香河县", + "value": "131024" + }, + { + "label": "大城县", + "value": "131025" + }, + { + "label": "文安县", + "value": "131026" + }, + { + "label": "大厂回族自治县", + "value": "131028" + }, + { + "label": "廊坊经济技术开发区", + "value": "131071" + }, + { + "label": "霸州市", + "value": "131081" + }, + { + "label": "三河市", + "value": "131082" + } + ], + [{ + "label": "桃城区", + "value": "131102" + }, + { + "label": "冀州区", + "value": "131103" + }, + { + "label": "枣强县", + "value": "131121" + }, + { + "label": "武邑县", + "value": "131122" + }, + { + "label": "武强县", + "value": "131123" + }, + { + "label": "饶阳县", + "value": "131124" + }, + { + "label": "安平县", + "value": "131125" + }, + { + "label": "故城县", + "value": "131126" + }, + { + "label": "景县", + "value": "131127" + }, + { + "label": "阜城县", + "value": "131128" + }, + { + "label": "河北衡水经济开发区", + "value": "131171" + }, + { + "label": "衡水滨湖新区", + "value": "131172" + }, + { + "label": "深州市", + "value": "131182" + } + ] + ], + [ + [{ + "label": "小店区", + "value": "140105" + }, + { + "label": "迎泽区", + "value": "140106" + }, + { + "label": "杏花岭区", + "value": "140107" + }, + { + "label": "尖草坪区", + "value": "140108" + }, + { + "label": "万柏林区", + "value": "140109" + }, + { + "label": "晋源区", + "value": "140110" + }, + { + "label": "清徐县", + "value": "140121" + }, + { + "label": "阳曲县", + "value": "140122" + }, + { + "label": "娄烦县", + "value": "140123" + }, + { + "label": "山西转型综合改革示范区", + "value": "140171" + }, + { + "label": "古交市", + "value": "140181" + } + ], + [{ + "label": "城区", + "value": "140202" + }, + { + "label": "矿区", + "value": "140203" + }, + { + "label": "南郊区", + "value": "140211" + }, + { + "label": "新荣区", + "value": "140212" + }, + { + "label": "阳高县", + "value": "140221" + }, + { + "label": "天镇县", + "value": "140222" + }, + { + "label": "广灵县", + "value": "140223" + }, + { + "label": "灵丘县", + "value": "140224" + }, + { + "label": "浑源县", + "value": "140225" + }, + { + "label": "左云县", + "value": "140226" + }, + { + "label": "大同县", + "value": "140227" + }, + { + "label": "山西大同经济开发区", + "value": "140271" + } + ], + [{ + "label": "城区", + "value": "140302" + }, + { + "label": "矿区", + "value": "140303" + }, + { + "label": "郊区", + "value": "140311" + }, + { + "label": "平定县", + "value": "140321" + }, + { + "label": "盂县", + "value": "140322" + }, + { + "label": "山西阳泉经济开发区", + "value": "140371" + } + ], + [{ + "label": "城区", + "value": "140402" + }, + { + "label": "郊区", + "value": "140411" + }, + { + "label": "长治县", + "value": "140421" + }, + { + "label": "襄垣县", + "value": "140423" + }, + { + "label": "屯留县", + "value": "140424" + }, + { + "label": "平顺县", + "value": "140425" + }, + { + "label": "黎城县", + "value": "140426" + }, + { + "label": "壶关县", + "value": "140427" + }, + { + "label": "长子县", + "value": "140428" + }, + { + "label": "武乡县", + "value": "140429" + }, + { + "label": "沁县", + "value": "140430" + }, + { + "label": "沁源县", + "value": "140431" + }, + { + "label": "山西长治高新技术产业园区", + "value": "140471" + }, + { + "label": "潞城市", + "value": "140481" + } + ], + [{ + "label": "城区", + "value": "140502" + }, + { + "label": "沁水县", + "value": "140521" + }, + { + "label": "阳城县", + "value": "140522" + }, + { + "label": "陵川县", + "value": "140524" + }, + { + "label": "泽州县", + "value": "140525" + }, + { + "label": "高平市", + "value": "140581" + } + ], + [{ + "label": "朔城区", + "value": "140602" + }, + { + "label": "平鲁区", + "value": "140603" + }, + { + "label": "山阴县", + "value": "140621" + }, + { + "label": "应县", + "value": "140622" + }, + { + "label": "右玉县", + "value": "140623" + }, + { + "label": "怀仁县", + "value": "140624" + }, + { + "label": "山西朔州经济开发区", + "value": "140671" + } + ], + [{ + "label": "榆次区", + "value": "140702" + }, + { + "label": "榆社县", + "value": "140721" + }, + { + "label": "左权县", + "value": "140722" + }, + { + "label": "和顺县", + "value": "140723" + }, + { + "label": "昔阳县", + "value": "140724" + }, + { + "label": "寿阳县", + "value": "140725" + }, + { + "label": "太谷县", + "value": "140726" + }, + { + "label": "祁县", + "value": "140727" + }, + { + "label": "平遥县", + "value": "140728" + }, + { + "label": "灵石县", + "value": "140729" + }, + { + "label": "介休市", + "value": "140781" + } + ], + [{ + "label": "盐湖区", + "value": "140802" + }, + { + "label": "临猗县", + "value": "140821" + }, + { + "label": "万荣县", + "value": "140822" + }, + { + "label": "闻喜县", + "value": "140823" + }, + { + "label": "稷山县", + "value": "140824" + }, + { + "label": "新绛县", + "value": "140825" + }, + { + "label": "绛县", + "value": "140826" + }, + { + "label": "垣曲县", + "value": "140827" + }, + { + "label": "夏县", + "value": "140828" + }, + { + "label": "平陆县", + "value": "140829" + }, + { + "label": "芮城县", + "value": "140830" + }, + { + "label": "永济市", + "value": "140881" + }, + { + "label": "河津市", + "value": "140882" + } + ], + [{ + "label": "忻府区", + "value": "140902" + }, + { + "label": "定襄县", + "value": "140921" + }, + { + "label": "五台县", + "value": "140922" + }, + { + "label": "代县", + "value": "140923" + }, + { + "label": "繁峙县", + "value": "140924" + }, + { + "label": "宁武县", + "value": "140925" + }, + { + "label": "静乐县", + "value": "140926" + }, + { + "label": "神池县", + "value": "140927" + }, + { + "label": "五寨县", + "value": "140928" + }, + { + "label": "岢岚县", + "value": "140929" + }, + { + "label": "河曲县", + "value": "140930" + }, + { + "label": "保德县", + "value": "140931" + }, + { + "label": "偏关县", + "value": "140932" + }, + { + "label": "五台山风景名胜区", + "value": "140971" + }, + { + "label": "原平市", + "value": "140981" + } + ], + [{ + "label": "尧都区", + "value": "141002" + }, + { + "label": "曲沃县", + "value": "141021" + }, + { + "label": "翼城县", + "value": "141022" + }, + { + "label": "襄汾县", + "value": "141023" + }, + { + "label": "洪洞县", + "value": "141024" + }, + { + "label": "古县", + "value": "141025" + }, + { + "label": "安泽县", + "value": "141026" + }, + { + "label": "浮山县", + "value": "141027" + }, + { + "label": "吉县", + "value": "141028" + }, + { + "label": "乡宁县", + "value": "141029" + }, + { + "label": "大宁县", + "value": "141030" + }, + { + "label": "隰县", + "value": "141031" + }, + { + "label": "永和县", + "value": "141032" + }, + { + "label": "蒲县", + "value": "141033" + }, + { + "label": "汾西县", + "value": "141034" + }, + { + "label": "侯马市", + "value": "141081" + }, + { + "label": "霍州市", + "value": "141082" + } + ], + [{ + "label": "离石区", + "value": "141102" + }, + { + "label": "文水县", + "value": "141121" + }, + { + "label": "交城县", + "value": "141122" + }, + { + "label": "兴县", + "value": "141123" + }, + { + "label": "临县", + "value": "141124" + }, + { + "label": "柳林县", + "value": "141125" + }, + { + "label": "石楼县", + "value": "141126" + }, + { + "label": "岚县", + "value": "141127" + }, + { + "label": "方山县", + "value": "141128" + }, + { + "label": "中阳县", + "value": "141129" + }, + { + "label": "交口县", + "value": "141130" + }, + { + "label": "孝义市", + "value": "141181" + }, + { + "label": "汾阳市", + "value": "141182" + } + ] + ], + [ + [{ + "label": "新城区", + "value": "150102" + }, + { + "label": "回民区", + "value": "150103" + }, + { + "label": "玉泉区", + "value": "150104" + }, + { + "label": "赛罕区", + "value": "150105" + }, + { + "label": "土默特左旗", + "value": "150121" + }, + { + "label": "托克托县", + "value": "150122" + }, + { + "label": "和林格尔县", + "value": "150123" + }, + { + "label": "清水河县", + "value": "150124" + }, + { + "label": "武川县", + "value": "150125" + }, + { + "label": "呼和浩特金海工业园区", + "value": "150171" + }, + { + "label": "呼和浩特经济技术开发区", + "value": "150172" + } + ], + [{ + "label": "东河区", + "value": "150202" + }, + { + "label": "昆都仑区", + "value": "150203" + }, + { + "label": "青山区", + "value": "150204" + }, + { + "label": "石拐区", + "value": "150205" + }, + { + "label": "白云鄂博矿区", + "value": "150206" + }, + { + "label": "九原区", + "value": "150207" + }, + { + "label": "土默特右旗", + "value": "150221" + }, + { + "label": "固阳县", + "value": "150222" + }, + { + "label": "达尔罕茂明安联合旗", + "value": "150223" + }, + { + "label": "包头稀土高新技术产业开发区", + "value": "150271" + } + ], + [{ + "label": "海勃湾区", + "value": "150302" + }, + { + "label": "海南区", + "value": "150303" + }, + { + "label": "乌达区", + "value": "150304" + } + ], + [{ + "label": "红山区", + "value": "150402" + }, + { + "label": "元宝山区", + "value": "150403" + }, + { + "label": "松山区", + "value": "150404" + }, + { + "label": "阿鲁科尔沁旗", + "value": "150421" + }, + { + "label": "巴林左旗", + "value": "150422" + }, + { + "label": "巴林右旗", + "value": "150423" + }, + { + "label": "林西县", + "value": "150424" + }, + { + "label": "克什克腾旗", + "value": "150425" + }, + { + "label": "翁牛特旗", + "value": "150426" + }, + { + "label": "喀喇沁旗", + "value": "150428" + }, + { + "label": "宁城县", + "value": "150429" + }, + { + "label": "敖汉旗", + "value": "150430" + } + ], + [{ + "label": "科尔沁区", + "value": "150502" + }, + { + "label": "科尔沁左翼中旗", + "value": "150521" + }, + { + "label": "科尔沁左翼后旗", + "value": "150522" + }, + { + "label": "开鲁县", + "value": "150523" + }, + { + "label": "库伦旗", + "value": "150524" + }, + { + "label": "奈曼旗", + "value": "150525" + }, + { + "label": "扎鲁特旗", + "value": "150526" + }, + { + "label": "通辽经济技术开发区", + "value": "150571" + }, + { + "label": "霍林郭勒市", + "value": "150581" + } + ], + [{ + "label": "东胜区", + "value": "150602" + }, + { + "label": "康巴什区", + "value": "150603" + }, + { + "label": "达拉特旗", + "value": "150621" + }, + { + "label": "准格尔旗", + "value": "150622" + }, + { + "label": "鄂托克前旗", + "value": "150623" + }, + { + "label": "鄂托克旗", + "value": "150624" + }, + { + "label": "杭锦旗", + "value": "150625" + }, + { + "label": "乌审旗", + "value": "150626" + }, + { + "label": "伊金霍洛旗", + "value": "150627" + } + ], + [{ + "label": "海拉尔区", + "value": "150702" + }, + { + "label": "扎赉诺尔区", + "value": "150703" + }, + { + "label": "阿荣旗", + "value": "150721" + }, + { + "label": "莫力达瓦达斡尔族自治旗", + "value": "150722" + }, + { + "label": "鄂伦春自治旗", + "value": "150723" + }, + { + "label": "鄂温克族自治旗", + "value": "150724" + }, + { + "label": "陈巴尔虎旗", + "value": "150725" + }, + { + "label": "新巴尔虎左旗", + "value": "150726" + }, + { + "label": "新巴尔虎右旗", + "value": "150727" + }, + { + "label": "满洲里市", + "value": "150781" + }, + { + "label": "牙克石市", + "value": "150782" + }, + { + "label": "扎兰屯市", + "value": "150783" + }, + { + "label": "额尔古纳市", + "value": "150784" + }, + { + "label": "根河市", + "value": "150785" + } + ], + [{ + "label": "临河区", + "value": "150802" + }, + { + "label": "五原县", + "value": "150821" + }, + { + "label": "磴口县", + "value": "150822" + }, + { + "label": "乌拉特前旗", + "value": "150823" + }, + { + "label": "乌拉特中旗", + "value": "150824" + }, + { + "label": "乌拉特后旗", + "value": "150825" + }, + { + "label": "杭锦后旗", + "value": "150826" + } + ], + [{ + "label": "集宁区", + "value": "150902" + }, + { + "label": "卓资县", + "value": "150921" + }, + { + "label": "化德县", + "value": "150922" + }, + { + "label": "商都县", + "value": "150923" + }, + { + "label": "兴和县", + "value": "150924" + }, + { + "label": "凉城县", + "value": "150925" + }, + { + "label": "察哈尔右翼前旗", + "value": "150926" + }, + { + "label": "察哈尔右翼中旗", + "value": "150927" + }, + { + "label": "察哈尔右翼后旗", + "value": "150928" + }, + { + "label": "四子王旗", + "value": "150929" + }, + { + "label": "丰镇市", + "value": "150981" + } + ], + [{ + "label": "乌兰浩特市", + "value": "152201" + }, + { + "label": "阿尔山市", + "value": "152202" + }, + { + "label": "科尔沁右翼前旗", + "value": "152221" + }, + { + "label": "科尔沁右翼中旗", + "value": "152222" + }, + { + "label": "扎赉特旗", + "value": "152223" + }, + { + "label": "突泉县", + "value": "152224" + } + ], + [{ + "label": "二连浩特市", + "value": "152501" + }, + { + "label": "锡林浩特市", + "value": "152502" + }, + { + "label": "阿巴嘎旗", + "value": "152522" + }, + { + "label": "苏尼特左旗", + "value": "152523" + }, + { + "label": "苏尼特右旗", + "value": "152524" + }, + { + "label": "东乌珠穆沁旗", + "value": "152525" + }, + { + "label": "西乌珠穆沁旗", + "value": "152526" + }, + { + "label": "太仆寺旗", + "value": "152527" + }, + { + "label": "镶黄旗", + "value": "152528" + }, + { + "label": "正镶白旗", + "value": "152529" + }, + { + "label": "正蓝旗", + "value": "152530" + }, + { + "label": "多伦县", + "value": "152531" + }, + { + "label": "乌拉盖管委会", + "value": "152571" + } + ], + [{ + "label": "阿拉善左旗", + "value": "152921" + }, + { + "label": "阿拉善右旗", + "value": "152922" + }, + { + "label": "额济纳旗", + "value": "152923" + }, + { + "label": "内蒙古阿拉善经济开发区", + "value": "152971" + } + ] + ], + [ + [{ + "label": "和平区", + "value": "210102" + }, + { + "label": "沈河区", + "value": "210103" + }, + { + "label": "大东区", + "value": "210104" + }, + { + "label": "皇姑区", + "value": "210105" + }, + { + "label": "铁西区", + "value": "210106" + }, + { + "label": "苏家屯区", + "value": "210111" + }, + { + "label": "浑南区", + "value": "210112" + }, + { + "label": "沈北新区", + "value": "210113" + }, + { + "label": "于洪区", + "value": "210114" + }, + { + "label": "辽中区", + "value": "210115" + }, + { + "label": "康平县", + "value": "210123" + }, + { + "label": "法库县", + "value": "210124" + }, + { + "label": "新民市", + "value": "210181" + } + ], + [{ + "label": "中山区", + "value": "210202" + }, + { + "label": "西岗区", + "value": "210203" + }, + { + "label": "沙河口区", + "value": "210204" + }, + { + "label": "甘井子区", + "value": "210211" + }, + { + "label": "旅顺口区", + "value": "210212" + }, + { + "label": "金州区", + "value": "210213" + }, + { + "label": "普兰店区", + "value": "210214" + }, + { + "label": "长海县", + "value": "210224" + }, + { + "label": "瓦房店市", + "value": "210281" + }, + { + "label": "庄河市", + "value": "210283" + } + ], + [{ + "label": "铁东区", + "value": "210302" + }, + { + "label": "铁西区", + "value": "210303" + }, + { + "label": "立山区", + "value": "210304" + }, + { + "label": "千山区", + "value": "210311" + }, + { + "label": "台安县", + "value": "210321" + }, + { + "label": "岫岩满族自治县", + "value": "210323" + }, + { + "label": "海城市", + "value": "210381" + } + ], + [{ + "label": "新抚区", + "value": "210402" + }, + { + "label": "东洲区", + "value": "210403" + }, + { + "label": "望花区", + "value": "210404" + }, + { + "label": "顺城区", + "value": "210411" + }, + { + "label": "抚顺县", + "value": "210421" + }, + { + "label": "新宾满族自治县", + "value": "210422" + }, + { + "label": "清原满族自治县", + "value": "210423" + } + ], + [{ + "label": "平山区", + "value": "210502" + }, + { + "label": "溪湖区", + "value": "210503" + }, + { + "label": "明山区", + "value": "210504" + }, + { + "label": "南芬区", + "value": "210505" + }, + { + "label": "本溪满族自治县", + "value": "210521" + }, + { + "label": "桓仁满族自治县", + "value": "210522" + } + ], + [{ + "label": "元宝区", + "value": "210602" + }, + { + "label": "振兴区", + "value": "210603" + }, + { + "label": "振安区", + "value": "210604" + }, + { + "label": "宽甸满族自治县", + "value": "210624" + }, + { + "label": "东港市", + "value": "210681" + }, + { + "label": "凤城市", + "value": "210682" + } + ], + [{ + "label": "古塔区", + "value": "210702" + }, + { + "label": "凌河区", + "value": "210703" + }, + { + "label": "太和区", + "value": "210711" + }, + { + "label": "黑山县", + "value": "210726" + }, + { + "label": "义县", + "value": "210727" + }, + { + "label": "凌海市", + "value": "210781" + }, + { + "label": "北镇市", + "value": "210782" + } + ], + [{ + "label": "站前区", + "value": "210802" + }, + { + "label": "西市区", + "value": "210803" + }, + { + "label": "鲅鱼圈区", + "value": "210804" + }, + { + "label": "老边区", + "value": "210811" + }, + { + "label": "盖州市", + "value": "210881" + }, + { + "label": "大石桥市", + "value": "210882" + } + ], + [{ + "label": "海州区", + "value": "210902" + }, + { + "label": "新邱区", + "value": "210903" + }, + { + "label": "太平区", + "value": "210904" + }, + { + "label": "清河门区", + "value": "210905" + }, + { + "label": "细河区", + "value": "210911" + }, + { + "label": "阜新蒙古族自治县", + "value": "210921" + }, + { + "label": "彰武县", + "value": "210922" + } + ], + [{ + "label": "白塔区", + "value": "211002" + }, + { + "label": "文圣区", + "value": "211003" + }, + { + "label": "宏伟区", + "value": "211004" + }, + { + "label": "弓长岭区", + "value": "211005" + }, + { + "label": "太子河区", + "value": "211011" + }, + { + "label": "辽阳县", + "value": "211021" + }, + { + "label": "灯塔市", + "value": "211081" + } + ], + [{ + "label": "双台子区", + "value": "211102" + }, + { + "label": "兴隆台区", + "value": "211103" + }, + { + "label": "大洼区", + "value": "211104" + }, + { + "label": "盘山县", + "value": "211122" + } + ], + [{ + "label": "银州区", + "value": "211202" + }, + { + "label": "清河区", + "value": "211204" + }, + { + "label": "铁岭县", + "value": "211221" + }, + { + "label": "西丰县", + "value": "211223" + }, + { + "label": "昌图县", + "value": "211224" + }, + { + "label": "调兵山市", + "value": "211281" + }, + { + "label": "开原市", + "value": "211282" + } + ], + [{ + "label": "双塔区", + "value": "211302" + }, + { + "label": "龙城区", + "value": "211303" + }, + { + "label": "朝阳县", + "value": "211321" + }, + { + "label": "建平县", + "value": "211322" + }, + { + "label": "喀喇沁左翼蒙古族自治县", + "value": "211324" + }, + { + "label": "北票市", + "value": "211381" + }, + { + "label": "凌源市", + "value": "211382" + } + ], + [{ + "label": "连山区", + "value": "211402" + }, + { + "label": "龙港区", + "value": "211403" + }, + { + "label": "南票区", + "value": "211404" + }, + { + "label": "绥中县", + "value": "211421" + }, + { + "label": "建昌县", + "value": "211422" + }, + { + "label": "兴城市", + "value": "211481" + } + ] + ], + [ + [{ + "label": "南关区", + "value": "220102" + }, + { + "label": "宽城区", + "value": "220103" + }, + { + "label": "朝阳区", + "value": "220104" + }, + { + "label": "二道区", + "value": "220105" + }, + { + "label": "绿园区", + "value": "220106" + }, + { + "label": "双阳区", + "value": "220112" + }, + { + "label": "九台区", + "value": "220113" + }, + { + "label": "农安县", + "value": "220122" + }, + { + "label": "长春经济技术开发区", + "value": "220171" + }, + { + "label": "长春净月高新技术产业开发区", + "value": "220172" + }, + { + "label": "长春高新技术产业开发区", + "value": "220173" + }, + { + "label": "长春汽车经济技术开发区", + "value": "220174" + }, + { + "label": "榆树市", + "value": "220182" + }, + { + "label": "德惠市", + "value": "220183" + } + ], + [{ + "label": "昌邑区", + "value": "220202" + }, + { + "label": "龙潭区", + "value": "220203" + }, + { + "label": "船营区", + "value": "220204" + }, + { + "label": "丰满区", + "value": "220211" + }, + { + "label": "永吉县", + "value": "220221" + }, + { + "label": "吉林经济开发区", + "value": "220271" + }, + { + "label": "吉林高新技术产业开发区", + "value": "220272" + }, + { + "label": "吉林中国新加坡食品区", + "value": "220273" + }, + { + "label": "蛟河市", + "value": "220281" + }, + { + "label": "桦甸市", + "value": "220282" + }, + { + "label": "舒兰市", + "value": "220283" + }, + { + "label": "磐石市", + "value": "220284" + } + ], + [{ + "label": "铁西区", + "value": "220302" + }, + { + "label": "铁东区", + "value": "220303" + }, + { + "label": "梨树县", + "value": "220322" + }, + { + "label": "伊通满族自治县", + "value": "220323" + }, + { + "label": "公主岭市", + "value": "220381" + }, + { + "label": "双辽市", + "value": "220382" + } + ], + [{ + "label": "龙山区", + "value": "220402" + }, + { + "label": "西安区", + "value": "220403" + }, + { + "label": "东丰县", + "value": "220421" + }, + { + "label": "东辽县", + "value": "220422" + } + ], + [{ + "label": "东昌区", + "value": "220502" + }, + { + "label": "二道江区", + "value": "220503" + }, + { + "label": "通化县", + "value": "220521" + }, + { + "label": "辉南县", + "value": "220523" + }, + { + "label": "柳河县", + "value": "220524" + }, + { + "label": "梅河口市", + "value": "220581" + }, + { + "label": "集安市", + "value": "220582" + } + ], + [{ + "label": "浑江区", + "value": "220602" + }, + { + "label": "江源区", + "value": "220605" + }, + { + "label": "抚松县", + "value": "220621" + }, + { + "label": "靖宇县", + "value": "220622" + }, + { + "label": "长白朝鲜族自治县", + "value": "220623" + }, + { + "label": "临江市", + "value": "220681" + } + ], + [{ + "label": "宁江区", + "value": "220702" + }, + { + "label": "前郭尔罗斯蒙古族自治县", + "value": "220721" + }, + { + "label": "长岭县", + "value": "220722" + }, + { + "label": "乾安县", + "value": "220723" + }, + { + "label": "吉林松原经济开发区", + "value": "220771" + }, + { + "label": "扶余市", + "value": "220781" + } + ], + [{ + "label": "洮北区", + "value": "220802" + }, + { + "label": "镇赉县", + "value": "220821" + }, + { + "label": "通榆县", + "value": "220822" + }, + { + "label": "吉林白城经济开发区", + "value": "220871" + }, + { + "label": "洮南市", + "value": "220881" + }, + { + "label": "大安市", + "value": "220882" + } + ], + [{ + "label": "延吉市", + "value": "222401" + }, + { + "label": "图们市", + "value": "222402" + }, + { + "label": "敦化市", + "value": "222403" + }, + { + "label": "珲春市", + "value": "222404" + }, + { + "label": "龙井市", + "value": "222405" + }, + { + "label": "和龙市", + "value": "222406" + }, + { + "label": "汪清县", + "value": "222424" + }, + { + "label": "安图县", + "value": "222426" + } + ] + ], + [ + [{ + "label": "道里区", + "value": "230102" + }, + { + "label": "南岗区", + "value": "230103" + }, + { + "label": "道外区", + "value": "230104" + }, + { + "label": "平房区", + "value": "230108" + }, + { + "label": "松北区", + "value": "230109" + }, + { + "label": "香坊区", + "value": "230110" + }, + { + "label": "呼兰区", + "value": "230111" + }, + { + "label": "阿城区", + "value": "230112" + }, + { + "label": "双城区", + "value": "230113" + }, + { + "label": "依兰县", + "value": "230123" + }, + { + "label": "方正县", + "value": "230124" + }, + { + "label": "宾县", + "value": "230125" + }, + { + "label": "巴彦县", + "value": "230126" + }, + { + "label": "木兰县", + "value": "230127" + }, + { + "label": "通河县", + "value": "230128" + }, + { + "label": "延寿县", + "value": "230129" + }, + { + "label": "尚志市", + "value": "230183" + }, + { + "label": "五常市", + "value": "230184" + } + ], + [{ + "label": "龙沙区", + "value": "230202" + }, + { + "label": "建华区", + "value": "230203" + }, + { + "label": "铁锋区", + "value": "230204" + }, + { + "label": "昂昂溪区", + "value": "230205" + }, + { + "label": "富拉尔基区", + "value": "230206" + }, + { + "label": "碾子山区", + "value": "230207" + }, + { + "label": "梅里斯达斡尔族区", + "value": "230208" + }, + { + "label": "龙江县", + "value": "230221" + }, + { + "label": "依安县", + "value": "230223" + }, + { + "label": "泰来县", + "value": "230224" + }, + { + "label": "甘南县", + "value": "230225" + }, + { + "label": "富裕县", + "value": "230227" + }, + { + "label": "克山县", + "value": "230229" + }, + { + "label": "克东县", + "value": "230230" + }, + { + "label": "拜泉县", + "value": "230231" + }, + { + "label": "讷河市", + "value": "230281" + } + ], + [{ + "label": "鸡冠区", + "value": "230302" + }, + { + "label": "恒山区", + "value": "230303" + }, + { + "label": "滴道区", + "value": "230304" + }, + { + "label": "梨树区", + "value": "230305" + }, + { + "label": "城子河区", + "value": "230306" + }, + { + "label": "麻山区", + "value": "230307" + }, + { + "label": "鸡东县", + "value": "230321" + }, + { + "label": "虎林市", + "value": "230381" + }, + { + "label": "密山市", + "value": "230382" + } + ], + [{ + "label": "向阳区", + "value": "230402" + }, + { + "label": "工农区", + "value": "230403" + }, + { + "label": "南山区", + "value": "230404" + }, + { + "label": "兴安区", + "value": "230405" + }, + { + "label": "东山区", + "value": "230406" + }, + { + "label": "兴山区", + "value": "230407" + }, + { + "label": "萝北县", + "value": "230421" + }, + { + "label": "绥滨县", + "value": "230422" + } + ], + [{ + "label": "尖山区", + "value": "230502" + }, + { + "label": "岭东区", + "value": "230503" + }, + { + "label": "四方台区", + "value": "230505" + }, + { + "label": "宝山区", + "value": "230506" + }, + { + "label": "集贤县", + "value": "230521" + }, + { + "label": "友谊县", + "value": "230522" + }, + { + "label": "宝清县", + "value": "230523" + }, + { + "label": "饶河县", + "value": "230524" + } + ], + [{ + "label": "萨尔图区", + "value": "230602" + }, + { + "label": "龙凤区", + "value": "230603" + }, + { + "label": "让胡路区", + "value": "230604" + }, + { + "label": "红岗区", + "value": "230605" + }, + { + "label": "大同区", + "value": "230606" + }, + { + "label": "肇州县", + "value": "230621" + }, + { + "label": "肇源县", + "value": "230622" + }, + { + "label": "林甸县", + "value": "230623" + }, + { + "label": "杜尔伯特蒙古族自治县", + "value": "230624" + }, + { + "label": "大庆高新技术产业开发区", + "value": "230671" + } + ], + [{ + "label": "伊春区", + "value": "230702" + }, + { + "label": "南岔区", + "value": "230703" + }, + { + "label": "友好区", + "value": "230704" + }, + { + "label": "西林区", + "value": "230705" + }, + { + "label": "翠峦区", + "value": "230706" + }, + { + "label": "新青区", + "value": "230707" + }, + { + "label": "美溪区", + "value": "230708" + }, + { + "label": "金山屯区", + "value": "230709" + }, + { + "label": "五营区", + "value": "230710" + }, + { + "label": "乌马河区", + "value": "230711" + }, + { + "label": "汤旺河区", + "value": "230712" + }, + { + "label": "带岭区", + "value": "230713" + }, + { + "label": "乌伊岭区", + "value": "230714" + }, + { + "label": "红星区", + "value": "230715" + }, + { + "label": "上甘岭区", + "value": "230716" + }, + { + "label": "嘉荫县", + "value": "230722" + }, + { + "label": "铁力市", + "value": "230781" + } + ], + [{ + "label": "向阳区", + "value": "230803" + }, + { + "label": "前进区", + "value": "230804" + }, + { + "label": "东风区", + "value": "230805" + }, + { + "label": "郊区", + "value": "230811" + }, + { + "label": "桦南县", + "value": "230822" + }, + { + "label": "桦川县", + "value": "230826" + }, + { + "label": "汤原县", + "value": "230828" + }, + { + "label": "同江市", + "value": "230881" + }, + { + "label": "富锦市", + "value": "230882" + }, + { + "label": "抚远市", + "value": "230883" + } + ], + [{ + "label": "新兴区", + "value": "230902" + }, + { + "label": "桃山区", + "value": "230903" + }, + { + "label": "茄子河区", + "value": "230904" + }, + { + "label": "勃利县", + "value": "230921" + } + ], + [{ + "label": "东安区", + "value": "231002" + }, + { + "label": "阳明区", + "value": "231003" + }, + { + "label": "爱民区", + "value": "231004" + }, + { + "label": "西安区", + "value": "231005" + }, + { + "label": "林口县", + "value": "231025" + }, + { + "label": "牡丹江经济技术开发区", + "value": "231071" + }, + { + "label": "绥芬河市", + "value": "231081" + }, + { + "label": "海林市", + "value": "231083" + }, + { + "label": "宁安市", + "value": "231084" + }, + { + "label": "穆棱市", + "value": "231085" + }, + { + "label": "东宁市", + "value": "231086" + } + ], + [{ + "label": "爱辉区", + "value": "231102" + }, + { + "label": "嫩江县", + "value": "231121" + }, + { + "label": "逊克县", + "value": "231123" + }, + { + "label": "孙吴县", + "value": "231124" + }, + { + "label": "北安市", + "value": "231181" + }, + { + "label": "五大连池市", + "value": "231182" + } + ], + [{ + "label": "北林区", + "value": "231202" + }, + { + "label": "望奎县", + "value": "231221" + }, + { + "label": "兰西县", + "value": "231222" + }, + { + "label": "青冈县", + "value": "231223" + }, + { + "label": "庆安县", + "value": "231224" + }, + { + "label": "明水县", + "value": "231225" + }, + { + "label": "绥棱县", + "value": "231226" + }, + { + "label": "安达市", + "value": "231281" + }, + { + "label": "肇东市", + "value": "231282" + }, + { + "label": "海伦市", + "value": "231283" + } + ], + [{ + "label": "加格达奇区", + "value": "232701" + }, + { + "label": "松岭区", + "value": "232702" + }, + { + "label": "新林区", + "value": "232703" + }, + { + "label": "呼中区", + "value": "232704" + }, + { + "label": "呼玛县", + "value": "232721" + }, + { + "label": "塔河县", + "value": "232722" + }, + { + "label": "漠河县", + "value": "232723" + } + ] + ], + [ + [{ + "label": "黄浦区", + "value": "310101" + }, + { + "label": "徐汇区", + "value": "310104" + }, + { + "label": "长宁区", + "value": "310105" + }, + { + "label": "静安区", + "value": "310106" + }, + { + "label": "普陀区", + "value": "310107" + }, + { + "label": "虹口区", + "value": "310109" + }, + { + "label": "杨浦区", + "value": "310110" + }, + { + "label": "闵行区", + "value": "310112" + }, + { + "label": "宝山区", + "value": "310113" + }, + { + "label": "嘉定区", + "value": "310114" + }, + { + "label": "浦东新区", + "value": "310115" + }, + { + "label": "金山区", + "value": "310116" + }, + { + "label": "松江区", + "value": "310117" + }, + { + "label": "青浦区", + "value": "310118" + }, + { + "label": "奉贤区", + "value": "310120" + }, + { + "label": "崇明区", + "value": "310151" + } + ] + ], + [ + [{ + "label": "玄武区", + "value": "320102" + }, + { + "label": "秦淮区", + "value": "320104" + }, + { + "label": "建邺区", + "value": "320105" + }, + { + "label": "鼓楼区", + "value": "320106" + }, + { + "label": "浦口区", + "value": "320111" + }, + { + "label": "栖霞区", + "value": "320113" + }, + { + "label": "雨花台区", + "value": "320114" + }, + { + "label": "江宁区", + "value": "320115" + }, + { + "label": "六合区", + "value": "320116" + }, + { + "label": "溧水区", + "value": "320117" + }, + { + "label": "高淳区", + "value": "320118" + } + ], + [{ + "label": "锡山区", + "value": "320205" + }, + { + "label": "惠山区", + "value": "320206" + }, + { + "label": "滨湖区", + "value": "320211" + }, + { + "label": "梁溪区", + "value": "320213" + }, + { + "label": "新吴区", + "value": "320214" + }, + { + "label": "江阴市", + "value": "320281" + }, + { + "label": "宜兴市", + "value": "320282" + } + ], + [{ + "label": "鼓楼区", + "value": "320302" + }, + { + "label": "云龙区", + "value": "320303" + }, + { + "label": "贾汪区", + "value": "320305" + }, + { + "label": "泉山区", + "value": "320311" + }, + { + "label": "铜山区", + "value": "320312" + }, + { + "label": "丰县", + "value": "320321" + }, + { + "label": "沛县", + "value": "320322" + }, + { + "label": "睢宁县", + "value": "320324" + }, + { + "label": "徐州经济技术开发区", + "value": "320371" + }, + { + "label": "新沂市", + "value": "320381" + }, + { + "label": "邳州市", + "value": "320382" + } + ], + [{ + "label": "天宁区", + "value": "320402" + }, + { + "label": "钟楼区", + "value": "320404" + }, + { + "label": "新北区", + "value": "320411" + }, + { + "label": "武进区", + "value": "320412" + }, + { + "label": "金坛区", + "value": "320413" + }, + { + "label": "溧阳市", + "value": "320481" + } + ], + [{ + "label": "虎丘区", + "value": "320505" + }, + { + "label": "吴中区", + "value": "320506" + }, + { + "label": "相城区", + "value": "320507" + }, + { + "label": "姑苏区", + "value": "320508" + }, + { + "label": "吴江区", + "value": "320509" + }, + { + "label": "苏州工业园区", + "value": "320571" + }, + { + "label": "常熟市", + "value": "320581" + }, + { + "label": "张家港市", + "value": "320582" + }, + { + "label": "昆山市", + "value": "320583" + }, + { + "label": "太仓市", + "value": "320585" + } + ], + [{ + "label": "崇川区", + "value": "320602" + }, + { + "label": "港闸区", + "value": "320611" + }, + { + "label": "通州区", + "value": "320612" + }, + { + "label": "海安县", + "value": "320621" + }, + { + "label": "如东县", + "value": "320623" + }, + { + "label": "南通经济技术开发区", + "value": "320671" + }, + { + "label": "启东市", + "value": "320681" + }, + { + "label": "如皋市", + "value": "320682" + }, + { + "label": "海门市", + "value": "320684" + } + ], + [{ + "label": "连云区", + "value": "320703" + }, + { + "label": "海州区", + "value": "320706" + }, + { + "label": "赣榆区", + "value": "320707" + }, + { + "label": "东海县", + "value": "320722" + }, + { + "label": "灌云县", + "value": "320723" + }, + { + "label": "灌南县", + "value": "320724" + }, + { + "label": "连云港经济技术开发区", + "value": "320771" + }, + { + "label": "连云港高新技术产业开发区", + "value": "320772" + } + ], + [{ + "label": "淮安区", + "value": "320803" + }, + { + "label": "淮阴区", + "value": "320804" + }, + { + "label": "清江浦区", + "value": "320812" + }, + { + "label": "洪泽区", + "value": "320813" + }, + { + "label": "涟水县", + "value": "320826" + }, + { + "label": "盱眙县", + "value": "320830" + }, + { + "label": "金湖县", + "value": "320831" + }, + { + "label": "淮安经济技术开发区", + "value": "320871" + } + ], + [{ + "label": "亭湖区", + "value": "320902" + }, + { + "label": "盐都区", + "value": "320903" + }, + { + "label": "大丰区", + "value": "320904" + }, + { + "label": "响水县", + "value": "320921" + }, + { + "label": "滨海县", + "value": "320922" + }, + { + "label": "阜宁县", + "value": "320923" + }, + { + "label": "射阳县", + "value": "320924" + }, + { + "label": "建湖县", + "value": "320925" + }, + { + "label": "盐城经济技术开发区", + "value": "320971" + }, + { + "label": "东台市", + "value": "320981" + } + ], + [{ + "label": "广陵区", + "value": "321002" + }, + { + "label": "邗江区", + "value": "321003" + }, + { + "label": "江都区", + "value": "321012" + }, + { + "label": "宝应县", + "value": "321023" + }, + { + "label": "扬州经济技术开发区", + "value": "321071" + }, + { + "label": "仪征市", + "value": "321081" + }, + { + "label": "高邮市", + "value": "321084" + } + ], + [{ + "label": "京口区", + "value": "321102" + }, + { + "label": "润州区", + "value": "321111" + }, + { + "label": "丹徒区", + "value": "321112" + }, + { + "label": "镇江新区", + "value": "321171" + }, + { + "label": "丹阳市", + "value": "321181" + }, + { + "label": "扬中市", + "value": "321182" + }, + { + "label": "句容市", + "value": "321183" + } + ], + [{ + "label": "海陵区", + "value": "321202" + }, + { + "label": "高港区", + "value": "321203" + }, + { + "label": "姜堰区", + "value": "321204" + }, + { + "label": "泰州医药高新技术产业开发区", + "value": "321271" + }, + { + "label": "兴化市", + "value": "321281" + }, + { + "label": "靖江市", + "value": "321282" + }, + { + "label": "泰兴市", + "value": "321283" + } + ], + [{ + "label": "宿城区", + "value": "321302" + }, + { + "label": "宿豫区", + "value": "321311" + }, + { + "label": "沭阳县", + "value": "321322" + }, + { + "label": "泗阳县", + "value": "321323" + }, + { + "label": "泗洪县", + "value": "321324" + }, + { + "label": "宿迁经济技术开发区", + "value": "321371" + } + ] + ], + [ + [{ + "label": "上城区", + "value": "330102" + }, + { + "label": "下城区", + "value": "330103" + }, + { + "label": "江干区", + "value": "330104" + }, + { + "label": "拱墅区", + "value": "330105" + }, + { + "label": "西湖区", + "value": "330106" + }, + { + "label": "滨江区", + "value": "330108" + }, + { + "label": "萧山区", + "value": "330109" + }, + { + "label": "余杭区", + "value": "330110" + }, + { + "label": "富阳区", + "value": "330111" + }, + { + "label": "临安区", + "value": "330112" + }, + { + "label": "桐庐县", + "value": "330122" + }, + { + "label": "淳安县", + "value": "330127" + }, + { + "label": "建德市", + "value": "330182" + } + ], + [{ + "label": "海曙区", + "value": "330203" + }, + { + "label": "江北区", + "value": "330205" + }, + { + "label": "北仑区", + "value": "330206" + }, + { + "label": "镇海区", + "value": "330211" + }, + { + "label": "鄞州区", + "value": "330212" + }, + { + "label": "奉化区", + "value": "330213" + }, + { + "label": "象山县", + "value": "330225" + }, + { + "label": "宁海县", + "value": "330226" + }, + { + "label": "余姚市", + "value": "330281" + }, + { + "label": "慈溪市", + "value": "330282" + } + ], + [{ + "label": "鹿城区", + "value": "330302" + }, + { + "label": "龙湾区", + "value": "330303" + }, + { + "label": "瓯海区", + "value": "330304" + }, + { + "label": "洞头区", + "value": "330305" + }, + { + "label": "永嘉县", + "value": "330324" + }, + { + "label": "平阳县", + "value": "330326" + }, + { + "label": "苍南县", + "value": "330327" + }, + { + "label": "文成县", + "value": "330328" + }, + { + "label": "泰顺县", + "value": "330329" + }, + { + "label": "温州经济技术开发区", + "value": "330371" + }, + { + "label": "瑞安市", + "value": "330381" + }, + { + "label": "乐清市", + "value": "330382" + } + ], + [{ + "label": "南湖区", + "value": "330402" + }, + { + "label": "秀洲区", + "value": "330411" + }, + { + "label": "嘉善县", + "value": "330421" + }, + { + "label": "海盐县", + "value": "330424" + }, + { + "label": "海宁市", + "value": "330481" + }, + { + "label": "平湖市", + "value": "330482" + }, + { + "label": "桐乡市", + "value": "330483" + } + ], + [{ + "label": "吴兴区", + "value": "330502" + }, + { + "label": "南浔区", + "value": "330503" + }, + { + "label": "德清县", + "value": "330521" + }, + { + "label": "长兴县", + "value": "330522" + }, + { + "label": "安吉县", + "value": "330523" + } + ], + [{ + "label": "越城区", + "value": "330602" + }, + { + "label": "柯桥区", + "value": "330603" + }, + { + "label": "上虞区", + "value": "330604" + }, + { + "label": "新昌县", + "value": "330624" + }, + { + "label": "诸暨市", + "value": "330681" + }, + { + "label": "嵊州市", + "value": "330683" + } + ], + [{ + "label": "婺城区", + "value": "330702" + }, + { + "label": "金东区", + "value": "330703" + }, + { + "label": "武义县", + "value": "330723" + }, + { + "label": "浦江县", + "value": "330726" + }, + { + "label": "磐安县", + "value": "330727" + }, + { + "label": "兰溪市", + "value": "330781" + }, + { + "label": "义乌市", + "value": "330782" + }, + { + "label": "东阳市", + "value": "330783" + }, + { + "label": "永康市", + "value": "330784" + } + ], + [{ + "label": "柯城区", + "value": "330802" + }, + { + "label": "衢江区", + "value": "330803" + }, + { + "label": "常山县", + "value": "330822" + }, + { + "label": "开化县", + "value": "330824" + }, + { + "label": "龙游县", + "value": "330825" + }, + { + "label": "江山市", + "value": "330881" + } + ], + [{ + "label": "定海区", + "value": "330902" + }, + { + "label": "普陀区", + "value": "330903" + }, + { + "label": "岱山县", + "value": "330921" + }, + { + "label": "嵊泗县", + "value": "330922" + } + ], + [{ + "label": "椒江区", + "value": "331002" + }, + { + "label": "黄岩区", + "value": "331003" + }, + { + "label": "路桥区", + "value": "331004" + }, + { + "label": "三门县", + "value": "331022" + }, + { + "label": "天台县", + "value": "331023" + }, + { + "label": "仙居县", + "value": "331024" + }, + { + "label": "温岭市", + "value": "331081" + }, + { + "label": "临海市", + "value": "331082" + }, + { + "label": "玉环市", + "value": "331083" + } + ], + [{ + "label": "莲都区", + "value": "331102" + }, + { + "label": "青田县", + "value": "331121" + }, + { + "label": "缙云县", + "value": "331122" + }, + { + "label": "遂昌县", + "value": "331123" + }, + { + "label": "松阳县", + "value": "331124" + }, + { + "label": "云和县", + "value": "331125" + }, + { + "label": "庆元县", + "value": "331126" + }, + { + "label": "景宁畲族自治县", + "value": "331127" + }, + { + "label": "龙泉市", + "value": "331181" + } + ] + ], + [ + [{ + "label": "瑶海区", + "value": "340102" + }, + { + "label": "庐阳区", + "value": "340103" + }, + { + "label": "蜀山区", + "value": "340104" + }, + { + "label": "包河区", + "value": "340111" + }, + { + "label": "长丰县", + "value": "340121" + }, + { + "label": "肥东县", + "value": "340122" + }, + { + "label": "肥西县", + "value": "340123" + }, + { + "label": "庐江县", + "value": "340124" + }, + { + "label": "合肥高新技术产业开发区", + "value": "340171" + }, + { + "label": "合肥经济技术开发区", + "value": "340172" + }, + { + "label": "合肥新站高新技术产业开发区", + "value": "340173" + }, + { + "label": "巢湖市", + "value": "340181" + } + ], + [{ + "label": "镜湖区", + "value": "340202" + }, + { + "label": "弋江区", + "value": "340203" + }, + { + "label": "鸠江区", + "value": "340207" + }, + { + "label": "三山区", + "value": "340208" + }, + { + "label": "芜湖县", + "value": "340221" + }, + { + "label": "繁昌县", + "value": "340222" + }, + { + "label": "南陵县", + "value": "340223" + }, + { + "label": "无为县", + "value": "340225" + }, + { + "label": "芜湖经济技术开发区", + "value": "340271" + }, + { + "label": "安徽芜湖长江大桥经济开发区", + "value": "340272" + } + ], + [{ + "label": "龙子湖区", + "value": "340302" + }, + { + "label": "蚌山区", + "value": "340303" + }, + { + "label": "禹会区", + "value": "340304" + }, + { + "label": "淮上区", + "value": "340311" + }, + { + "label": "怀远县", + "value": "340321" + }, + { + "label": "五河县", + "value": "340322" + }, + { + "label": "固镇县", + "value": "340323" + }, + { + "label": "蚌埠市高新技术开发区", + "value": "340371" + }, + { + "label": "蚌埠市经济开发区", + "value": "340372" + } + ], + [{ + "label": "大通区", + "value": "340402" + }, + { + "label": "田家庵区", + "value": "340403" + }, + { + "label": "谢家集区", + "value": "340404" + }, + { + "label": "八公山区", + "value": "340405" + }, + { + "label": "潘集区", + "value": "340406" + }, + { + "label": "凤台县", + "value": "340421" + }, + { + "label": "寿县", + "value": "340422" + } + ], + [{ + "label": "花山区", + "value": "340503" + }, + { + "label": "雨山区", + "value": "340504" + }, + { + "label": "博望区", + "value": "340506" + }, + { + "label": "当涂县", + "value": "340521" + }, + { + "label": "含山县", + "value": "340522" + }, + { + "label": "和县", + "value": "340523" + } + ], + [{ + "label": "杜集区", + "value": "340602" + }, + { + "label": "相山区", + "value": "340603" + }, + { + "label": "烈山区", + "value": "340604" + }, + { + "label": "濉溪县", + "value": "340621" + } + ], + [{ + "label": "铜官区", + "value": "340705" + }, + { + "label": "义安区", + "value": "340706" + }, + { + "label": "郊区", + "value": "340711" + }, + { + "label": "枞阳县", + "value": "340722" + } + ], + [{ + "label": "迎江区", + "value": "340802" + }, + { + "label": "大观区", + "value": "340803" + }, + { + "label": "宜秀区", + "value": "340811" + }, + { + "label": "怀宁县", + "value": "340822" + }, + { + "label": "潜山县", + "value": "340824" + }, + { + "label": "太湖县", + "value": "340825" + }, + { + "label": "宿松县", + "value": "340826" + }, + { + "label": "望江县", + "value": "340827" + }, + { + "label": "岳西县", + "value": "340828" + }, + { + "label": "安徽安庆经济开发区", + "value": "340871" + }, + { + "label": "桐城市", + "value": "340881" + } + ], + [{ + "label": "屯溪区", + "value": "341002" + }, + { + "label": "黄山区", + "value": "341003" + }, + { + "label": "徽州区", + "value": "341004" + }, + { + "label": "歙县", + "value": "341021" + }, + { + "label": "休宁县", + "value": "341022" + }, + { + "label": "黟县", + "value": "341023" + }, + { + "label": "祁门县", + "value": "341024" + } + ], + [{ + "label": "琅琊区", + "value": "341102" + }, + { + "label": "南谯区", + "value": "341103" + }, + { + "label": "来安县", + "value": "341122" + }, + { + "label": "全椒县", + "value": "341124" + }, + { + "label": "定远县", + "value": "341125" + }, + { + "label": "凤阳县", + "value": "341126" + }, + { + "label": "苏滁现代产业园", + "value": "341171" + }, + { + "label": "滁州经济技术开发区", + "value": "341172" + }, + { + "label": "天长市", + "value": "341181" + }, + { + "label": "明光市", + "value": "341182" + } + ], + [{ + "label": "颍州区", + "value": "341202" + }, + { + "label": "颍东区", + "value": "341203" + }, + { + "label": "颍泉区", + "value": "341204" + }, + { + "label": "临泉县", + "value": "341221" + }, + { + "label": "太和县", + "value": "341222" + }, + { + "label": "阜南县", + "value": "341225" + }, + { + "label": "颍上县", + "value": "341226" + }, + { + "label": "阜阳合肥现代产业园区", + "value": "341271" + }, + { + "label": "阜阳经济技术开发区", + "value": "341272" + }, + { + "label": "界首市", + "value": "341282" + } + ], + [{ + "label": "埇桥区", + "value": "341302" + }, + { + "label": "砀山县", + "value": "341321" + }, + { + "label": "萧县", + "value": "341322" + }, + { + "label": "灵璧县", + "value": "341323" + }, + { + "label": "泗县", + "value": "341324" + }, + { + "label": "宿州马鞍山现代产业园区", + "value": "341371" + }, + { + "label": "宿州经济技术开发区", + "value": "341372" + } + ], + [{ + "label": "金安区", + "value": "341502" + }, + { + "label": "裕安区", + "value": "341503" + }, + { + "label": "叶集区", + "value": "341504" + }, + { + "label": "霍邱县", + "value": "341522" + }, + { + "label": "舒城县", + "value": "341523" + }, + { + "label": "金寨县", + "value": "341524" + }, + { + "label": "霍山县", + "value": "341525" + } + ], + [{ + "label": "谯城区", + "value": "341602" + }, + { + "label": "涡阳县", + "value": "341621" + }, + { + "label": "蒙城县", + "value": "341622" + }, + { + "label": "利辛县", + "value": "341623" + } + ], + [{ + "label": "贵池区", + "value": "341702" + }, + { + "label": "东至县", + "value": "341721" + }, + { + "label": "石台县", + "value": "341722" + }, + { + "label": "青阳县", + "value": "341723" + } + ], + [{ + "label": "宣州区", + "value": "341802" + }, + { + "label": "郎溪县", + "value": "341821" + }, + { + "label": "广德县", + "value": "341822" + }, + { + "label": "泾县", + "value": "341823" + }, + { + "label": "绩溪县", + "value": "341824" + }, + { + "label": "旌德县", + "value": "341825" + }, + { + "label": "宣城市经济开发区", + "value": "341871" + }, + { + "label": "宁国市", + "value": "341881" + } + ] + ], + [ + [{ + "label": "鼓楼区", + "value": "350102" + }, + { + "label": "台江区", + "value": "350103" + }, + { + "label": "仓山区", + "value": "350104" + }, + { + "label": "马尾区", + "value": "350105" + }, + { + "label": "晋安区", + "value": "350111" + }, + { + "label": "闽侯县", + "value": "350121" + }, + { + "label": "连江县", + "value": "350122" + }, + { + "label": "罗源县", + "value": "350123" + }, + { + "label": "闽清县", + "value": "350124" + }, + { + "label": "永泰县", + "value": "350125" + }, + { + "label": "平潭县", + "value": "350128" + }, + { + "label": "福清市", + "value": "350181" + }, + { + "label": "长乐市", + "value": "350182" + } + ], + [{ + "label": "思明区", + "value": "350203" + }, + { + "label": "海沧区", + "value": "350205" + }, + { + "label": "湖里区", + "value": "350206" + }, + { + "label": "集美区", + "value": "350211" + }, + { + "label": "同安区", + "value": "350212" + }, + { + "label": "翔安区", + "value": "350213" + } + ], + [{ + "label": "城厢区", + "value": "350302" + }, + { + "label": "涵江区", + "value": "350303" + }, + { + "label": "荔城区", + "value": "350304" + }, + { + "label": "秀屿区", + "value": "350305" + }, + { + "label": "仙游县", + "value": "350322" + } + ], + [{ + "label": "梅列区", + "value": "350402" + }, + { + "label": "三元区", + "value": "350403" + }, + { + "label": "明溪县", + "value": "350421" + }, + { + "label": "清流县", + "value": "350423" + }, + { + "label": "宁化县", + "value": "350424" + }, + { + "label": "大田县", + "value": "350425" + }, + { + "label": "尤溪县", + "value": "350426" + }, + { + "label": "沙县", + "value": "350427" + }, + { + "label": "将乐县", + "value": "350428" + }, + { + "label": "泰宁县", + "value": "350429" + }, + { + "label": "建宁县", + "value": "350430" + }, + { + "label": "永安市", + "value": "350481" + } + ], + [{ + "label": "鲤城区", + "value": "350502" + }, + { + "label": "丰泽区", + "value": "350503" + }, + { + "label": "洛江区", + "value": "350504" + }, + { + "label": "泉港区", + "value": "350505" + }, + { + "label": "惠安县", + "value": "350521" + }, + { + "label": "安溪县", + "value": "350524" + }, + { + "label": "永春县", + "value": "350525" + }, + { + "label": "德化县", + "value": "350526" + }, + { + "label": "金门县", + "value": "350527" + }, + { + "label": "石狮市", + "value": "350581" + }, + { + "label": "晋江市", + "value": "350582" + }, + { + "label": "南安市", + "value": "350583" + } + ], + [{ + "label": "芗城区", + "value": "350602" + }, + { + "label": "龙文区", + "value": "350603" + }, + { + "label": "云霄县", + "value": "350622" + }, + { + "label": "漳浦县", + "value": "350623" + }, + { + "label": "诏安县", + "value": "350624" + }, + { + "label": "长泰县", + "value": "350625" + }, + { + "label": "东山县", + "value": "350626" + }, + { + "label": "南靖县", + "value": "350627" + }, + { + "label": "平和县", + "value": "350628" + }, + { + "label": "华安县", + "value": "350629" + }, + { + "label": "龙海市", + "value": "350681" + } + ], + [{ + "label": "延平区", + "value": "350702" + }, + { + "label": "建阳区", + "value": "350703" + }, + { + "label": "顺昌县", + "value": "350721" + }, + { + "label": "浦城县", + "value": "350722" + }, + { + "label": "光泽县", + "value": "350723" + }, + { + "label": "松溪县", + "value": "350724" + }, + { + "label": "政和县", + "value": "350725" + }, + { + "label": "邵武市", + "value": "350781" + }, + { + "label": "武夷山市", + "value": "350782" + }, + { + "label": "建瓯市", + "value": "350783" + } + ], + [{ + "label": "新罗区", + "value": "350802" + }, + { + "label": "永定区", + "value": "350803" + }, + { + "label": "长汀县", + "value": "350821" + }, + { + "label": "上杭县", + "value": "350823" + }, + { + "label": "武平县", + "value": "350824" + }, + { + "label": "连城县", + "value": "350825" + }, + { + "label": "漳平市", + "value": "350881" + } + ], + [{ + "label": "蕉城区", + "value": "350902" + }, + { + "label": "霞浦县", + "value": "350921" + }, + { + "label": "古田县", + "value": "350922" + }, + { + "label": "屏南县", + "value": "350923" + }, + { + "label": "寿宁县", + "value": "350924" + }, + { + "label": "周宁县", + "value": "350925" + }, + { + "label": "柘荣县", + "value": "350926" + }, + { + "label": "福安市", + "value": "350981" + }, + { + "label": "福鼎市", + "value": "350982" + } + ] + ], + [ + [{ + "label": "东湖区", + "value": "360102" + }, + { + "label": "西湖区", + "value": "360103" + }, + { + "label": "青云谱区", + "value": "360104" + }, + { + "label": "湾里区", + "value": "360105" + }, + { + "label": "青山湖区", + "value": "360111" + }, + { + "label": "新建区", + "value": "360112" + }, + { + "label": "南昌县", + "value": "360121" + }, + { + "label": "安义县", + "value": "360123" + }, + { + "label": "进贤县", + "value": "360124" + } + ], + [{ + "label": "昌江区", + "value": "360202" + }, + { + "label": "珠山区", + "value": "360203" + }, + { + "label": "浮梁县", + "value": "360222" + }, + { + "label": "乐平市", + "value": "360281" + } + ], + [{ + "label": "安源区", + "value": "360302" + }, + { + "label": "湘东区", + "value": "360313" + }, + { + "label": "莲花县", + "value": "360321" + }, + { + "label": "上栗县", + "value": "360322" + }, + { + "label": "芦溪县", + "value": "360323" + } + ], + [{ + "label": "濂溪区", + "value": "360402" + }, + { + "label": "浔阳区", + "value": "360403" + }, + { + "label": "柴桑区", + "value": "360404" + }, + { + "label": "武宁县", + "value": "360423" + }, + { + "label": "修水县", + "value": "360424" + }, + { + "label": "永修县", + "value": "360425" + }, + { + "label": "德安县", + "value": "360426" + }, + { + "label": "都昌县", + "value": "360428" + }, + { + "label": "湖口县", + "value": "360429" + }, + { + "label": "彭泽县", + "value": "360430" + }, + { + "label": "瑞昌市", + "value": "360481" + }, + { + "label": "共青城市", + "value": "360482" + }, + { + "label": "庐山市", + "value": "360483" + } + ], + [{ + "label": "渝水区", + "value": "360502" + }, + { + "label": "分宜县", + "value": "360521" + } + ], + [{ + "label": "月湖区", + "value": "360602" + }, + { + "label": "余江县", + "value": "360622" + }, + { + "label": "贵溪市", + "value": "360681" + } + ], + [{ + "label": "章贡区", + "value": "360702" + }, + { + "label": "南康区", + "value": "360703" + }, + { + "label": "赣县区", + "value": "360704" + }, + { + "label": "信丰县", + "value": "360722" + }, + { + "label": "大余县", + "value": "360723" + }, + { + "label": "上犹县", + "value": "360724" + }, + { + "label": "崇义县", + "value": "360725" + }, + { + "label": "安远县", + "value": "360726" + }, + { + "label": "龙南县", + "value": "360727" + }, + { + "label": "定南县", + "value": "360728" + }, + { + "label": "全南县", + "value": "360729" + }, + { + "label": "宁都县", + "value": "360730" + }, + { + "label": "于都县", + "value": "360731" + }, + { + "label": "兴国县", + "value": "360732" + }, + { + "label": "会昌县", + "value": "360733" + }, + { + "label": "寻乌县", + "value": "360734" + }, + { + "label": "石城县", + "value": "360735" + }, + { + "label": "瑞金市", + "value": "360781" + } + ], + [{ + "label": "吉州区", + "value": "360802" + }, + { + "label": "青原区", + "value": "360803" + }, + { + "label": "吉安县", + "value": "360821" + }, + { + "label": "吉水县", + "value": "360822" + }, + { + "label": "峡江县", + "value": "360823" + }, + { + "label": "新干县", + "value": "360824" + }, + { + "label": "永丰县", + "value": "360825" + }, + { + "label": "泰和县", + "value": "360826" + }, + { + "label": "遂川县", + "value": "360827" + }, + { + "label": "万安县", + "value": "360828" + }, + { + "label": "安福县", + "value": "360829" + }, + { + "label": "永新县", + "value": "360830" + }, + { + "label": "井冈山市", + "value": "360881" + } + ], + [{ + "label": "袁州区", + "value": "360902" + }, + { + "label": "奉新县", + "value": "360921" + }, + { + "label": "万载县", + "value": "360922" + }, + { + "label": "上高县", + "value": "360923" + }, + { + "label": "宜丰县", + "value": "360924" + }, + { + "label": "靖安县", + "value": "360925" + }, + { + "label": "铜鼓县", + "value": "360926" + }, + { + "label": "丰城市", + "value": "360981" + }, + { + "label": "樟树市", + "value": "360982" + }, + { + "label": "高安市", + "value": "360983" + } + ], + [{ + "label": "临川区", + "value": "361002" + }, + { + "label": "东乡区", + "value": "361003" + }, + { + "label": "南城县", + "value": "361021" + }, + { + "label": "黎川县", + "value": "361022" + }, + { + "label": "南丰县", + "value": "361023" + }, + { + "label": "崇仁县", + "value": "361024" + }, + { + "label": "乐安县", + "value": "361025" + }, + { + "label": "宜黄县", + "value": "361026" + }, + { + "label": "金溪县", + "value": "361027" + }, + { + "label": "资溪县", + "value": "361028" + }, + { + "label": "广昌县", + "value": "361030" + } + ], + [{ + "label": "信州区", + "value": "361102" + }, + { + "label": "广丰区", + "value": "361103" + }, + { + "label": "上饶县", + "value": "361121" + }, + { + "label": "玉山县", + "value": "361123" + }, + { + "label": "铅山县", + "value": "361124" + }, + { + "label": "横峰县", + "value": "361125" + }, + { + "label": "弋阳县", + "value": "361126" + }, + { + "label": "余干县", + "value": "361127" + }, + { + "label": "鄱阳县", + "value": "361128" + }, + { + "label": "万年县", + "value": "361129" + }, + { + "label": "婺源县", + "value": "361130" + }, + { + "label": "德兴市", + "value": "361181" + } + ] + ], + [ + [{ + "label": "历下区", + "value": "370102" + }, + { + "label": "市中区", + "value": "370103" + }, + { + "label": "槐荫区", + "value": "370104" + }, + { + "label": "天桥区", + "value": "370105" + }, + { + "label": "历城区", + "value": "370112" + }, + { + "label": "长清区", + "value": "370113" + }, + { + "label": "章丘区", + "value": "370114" + }, + { + "label": "平阴县", + "value": "370124" + }, + { + "label": "济阳县", + "value": "370125" + }, + { + "label": "商河县", + "value": "370126" + }, + { + "label": "济南高新技术产业开发区", + "value": "370171" + } + ], + [{ + "label": "市南区", + "value": "370202" + }, + { + "label": "市北区", + "value": "370203" + }, + { + "label": "黄岛区", + "value": "370211" + }, + { + "label": "崂山区", + "value": "370212" + }, + { + "label": "李沧区", + "value": "370213" + }, + { + "label": "城阳区", + "value": "370214" + }, + { + "label": "即墨区", + "value": "370215" + }, + { + "label": "青岛高新技术产业开发区", + "value": "370271" + }, + { + "label": "胶州市", + "value": "370281" + }, + { + "label": "平度市", + "value": "370283" + }, + { + "label": "莱西市", + "value": "370285" + } + ], + [{ + "label": "淄川区", + "value": "370302" + }, + { + "label": "张店区", + "value": "370303" + }, + { + "label": "博山区", + "value": "370304" + }, + { + "label": "临淄区", + "value": "370305" + }, + { + "label": "周村区", + "value": "370306" + }, + { + "label": "桓台县", + "value": "370321" + }, + { + "label": "高青县", + "value": "370322" + }, + { + "label": "沂源县", + "value": "370323" + } + ], + [{ + "label": "市中区", + "value": "370402" + }, + { + "label": "薛城区", + "value": "370403" + }, + { + "label": "峄城区", + "value": "370404" + }, + { + "label": "台儿庄区", + "value": "370405" + }, + { + "label": "山亭区", + "value": "370406" + }, + { + "label": "滕州市", + "value": "370481" + } + ], + [{ + "label": "东营区", + "value": "370502" + }, + { + "label": "河口区", + "value": "370503" + }, + { + "label": "垦利区", + "value": "370505" + }, + { + "label": "利津县", + "value": "370522" + }, + { + "label": "广饶县", + "value": "370523" + }, + { + "label": "东营经济技术开发区", + "value": "370571" + }, + { + "label": "东营港经济开发区", + "value": "370572" + } + ], + [{ + "label": "芝罘区", + "value": "370602" + }, + { + "label": "福山区", + "value": "370611" + }, + { + "label": "牟平区", + "value": "370612" + }, + { + "label": "莱山区", + "value": "370613" + }, + { + "label": "长岛县", + "value": "370634" + }, + { + "label": "烟台高新技术产业开发区", + "value": "370671" + }, + { + "label": "烟台经济技术开发区", + "value": "370672" + }, + { + "label": "龙口市", + "value": "370681" + }, + { + "label": "莱阳市", + "value": "370682" + }, + { + "label": "莱州市", + "value": "370683" + }, + { + "label": "蓬莱市", + "value": "370684" + }, + { + "label": "招远市", + "value": "370685" + }, + { + "label": "栖霞市", + "value": "370686" + }, + { + "label": "海阳市", + "value": "370687" + } + ], + [{ + "label": "潍城区", + "value": "370702" + }, + { + "label": "寒亭区", + "value": "370703" + }, + { + "label": "坊子区", + "value": "370704" + }, + { + "label": "奎文区", + "value": "370705" + }, + { + "label": "临朐县", + "value": "370724" + }, + { + "label": "昌乐县", + "value": "370725" + }, + { + "label": "潍坊滨海经济技术开发区", + "value": "370772" + }, + { + "label": "青州市", + "value": "370781" + }, + { + "label": "诸城市", + "value": "370782" + }, + { + "label": "寿光市", + "value": "370783" + }, + { + "label": "安丘市", + "value": "370784" + }, + { + "label": "高密市", + "value": "370785" + }, + { + "label": "昌邑市", + "value": "370786" + } + ], + [{ + "label": "任城区", + "value": "370811" + }, + { + "label": "兖州区", + "value": "370812" + }, + { + "label": "微山县", + "value": "370826" + }, + { + "label": "鱼台县", + "value": "370827" + }, + { + "label": "金乡县", + "value": "370828" + }, + { + "label": "嘉祥县", + "value": "370829" + }, + { + "label": "汶上县", + "value": "370830" + }, + { + "label": "泗水县", + "value": "370831" + }, + { + "label": "梁山县", + "value": "370832" + }, + { + "label": "济宁高新技术产业开发区", + "value": "370871" + }, + { + "label": "曲阜市", + "value": "370881" + }, + { + "label": "邹城市", + "value": "370883" + } + ], + [{ + "label": "泰山区", + "value": "370902" + }, + { + "label": "岱岳区", + "value": "370911" + }, + { + "label": "宁阳县", + "value": "370921" + }, + { + "label": "东平县", + "value": "370923" + }, + { + "label": "新泰市", + "value": "370982" + }, + { + "label": "肥城市", + "value": "370983" + } + ], + [{ + "label": "环翠区", + "value": "371002" + }, + { + "label": "文登区", + "value": "371003" + }, + { + "label": "威海火炬高技术产业开发区", + "value": "371071" + }, + { + "label": "威海经济技术开发区", + "value": "371072" + }, + { + "label": "威海临港经济技术开发区", + "value": "371073" + }, + { + "label": "荣成市", + "value": "371082" + }, + { + "label": "乳山市", + "value": "371083" + } + ], + [{ + "label": "东港区", + "value": "371102" + }, + { + "label": "岚山区", + "value": "371103" + }, + { + "label": "五莲县", + "value": "371121" + }, + { + "label": "莒县", + "value": "371122" + }, + { + "label": "日照经济技术开发区", + "value": "371171" + }, + { + "label": "日照国际海洋城", + "value": "371172" + } + ], + [{ + "label": "莱城区", + "value": "371202" + }, + { + "label": "钢城区", + "value": "371203" + } + ], + [{ + "label": "兰山区", + "value": "371302" + }, + { + "label": "罗庄区", + "value": "371311" + }, + { + "label": "河东区", + "value": "371312" + }, + { + "label": "沂南县", + "value": "371321" + }, + { + "label": "郯城县", + "value": "371322" + }, + { + "label": "沂水县", + "value": "371323" + }, + { + "label": "兰陵县", + "value": "371324" + }, + { + "label": "费县", + "value": "371325" + }, + { + "label": "平邑县", + "value": "371326" + }, + { + "label": "莒南县", + "value": "371327" + }, + { + "label": "蒙阴县", + "value": "371328" + }, + { + "label": "临沭县", + "value": "371329" + }, + { + "label": "临沂高新技术产业开发区", + "value": "371371" + }, + { + "label": "临沂经济技术开发区", + "value": "371372" + }, + { + "label": "临沂临港经济开发区", + "value": "371373" + } + ], + [{ + "label": "德城区", + "value": "371402" + }, + { + "label": "陵城区", + "value": "371403" + }, + { + "label": "宁津县", + "value": "371422" + }, + { + "label": "庆云县", + "value": "371423" + }, + { + "label": "临邑县", + "value": "371424" + }, + { + "label": "齐河县", + "value": "371425" + }, + { + "label": "平原县", + "value": "371426" + }, + { + "label": "夏津县", + "value": "371427" + }, + { + "label": "武城县", + "value": "371428" + }, + { + "label": "德州经济技术开发区", + "value": "371471" + }, + { + "label": "德州运河经济开发区", + "value": "371472" + }, + { + "label": "乐陵市", + "value": "371481" + }, + { + "label": "禹城市", + "value": "371482" + } + ], + [{ + "label": "东昌府区", + "value": "371502" + }, + { + "label": "阳谷县", + "value": "371521" + }, + { + "label": "莘县", + "value": "371522" + }, + { + "label": "茌平县", + "value": "371523" + }, + { + "label": "东阿县", + "value": "371524" + }, + { + "label": "冠县", + "value": "371525" + }, + { + "label": "高唐县", + "value": "371526" + }, + { + "label": "临清市", + "value": "371581" + } + ], + [{ + "label": "滨城区", + "value": "371602" + }, + { + "label": "沾化区", + "value": "371603" + }, + { + "label": "惠民县", + "value": "371621" + }, + { + "label": "阳信县", + "value": "371622" + }, + { + "label": "无棣县", + "value": "371623" + }, + { + "label": "博兴县", + "value": "371625" + }, + { + "label": "邹平县", + "value": "371626" + } + ], + [{ + "label": "牡丹区", + "value": "371702" + }, + { + "label": "定陶区", + "value": "371703" + }, + { + "label": "曹县", + "value": "371721" + }, + { + "label": "单县", + "value": "371722" + }, + { + "label": "成武县", + "value": "371723" + }, + { + "label": "巨野县", + "value": "371724" + }, + { + "label": "郓城县", + "value": "371725" + }, + { + "label": "鄄城县", + "value": "371726" + }, + { + "label": "东明县", + "value": "371728" + }, + { + "label": "菏泽经济技术开发区", + "value": "371771" + }, + { + "label": "菏泽高新技术开发区", + "value": "371772" + } + ] + ], + [ + [{ + "label": "中原区", + "value": "410102" + }, + { + "label": "二七区", + "value": "410103" + }, + { + "label": "管城回族区", + "value": "410104" + }, + { + "label": "金水区", + "value": "410105" + }, + { + "label": "上街区", + "value": "410106" + }, + { + "label": "惠济区", + "value": "410108" + }, + { + "label": "中牟县", + "value": "410122" + }, + { + "label": "郑州经济技术开发区", + "value": "410171" + }, + { + "label": "郑州高新技术产业开发区", + "value": "410172" + }, + { + "label": "郑州航空港经济综合实验区", + "value": "410173" + }, + { + "label": "巩义市", + "value": "410181" + }, + { + "label": "荥阳市", + "value": "410182" + }, + { + "label": "新密市", + "value": "410183" + }, + { + "label": "新郑市", + "value": "410184" + }, + { + "label": "登封市", + "value": "410185" + } + ], + [{ + "label": "龙亭区", + "value": "410202" + }, + { + "label": "顺河回族区", + "value": "410203" + }, + { + "label": "鼓楼区", + "value": "410204" + }, + { + "label": "禹王台区", + "value": "410205" + }, + { + "label": "祥符区", + "value": "410212" + }, + { + "label": "杞县", + "value": "410221" + }, + { + "label": "通许县", + "value": "410222" + }, + { + "label": "尉氏县", + "value": "410223" + }, + { + "label": "兰考县", + "value": "410225" + } + ], + [{ + "label": "老城区", + "value": "410302" + }, + { + "label": "西工区", + "value": "410303" + }, + { + "label": "瀍河回族区", + "value": "410304" + }, + { + "label": "涧西区", + "value": "410305" + }, + { + "label": "吉利区", + "value": "410306" + }, + { + "label": "洛龙区", + "value": "410311" + }, + { + "label": "孟津县", + "value": "410322" + }, + { + "label": "新安县", + "value": "410323" + }, + { + "label": "栾川县", + "value": "410324" + }, + { + "label": "嵩县", + "value": "410325" + }, + { + "label": "汝阳县", + "value": "410326" + }, + { + "label": "宜阳县", + "value": "410327" + }, + { + "label": "洛宁县", + "value": "410328" + }, + { + "label": "伊川县", + "value": "410329" + }, + { + "label": "洛阳高新技术产业开发区", + "value": "410371" + }, + { + "label": "偃师市", + "value": "410381" + } + ], + [{ + "label": "新华区", + "value": "410402" + }, + { + "label": "卫东区", + "value": "410403" + }, + { + "label": "石龙区", + "value": "410404" + }, + { + "label": "湛河区", + "value": "410411" + }, + { + "label": "宝丰县", + "value": "410421" + }, + { + "label": "叶县", + "value": "410422" + }, + { + "label": "鲁山县", + "value": "410423" + }, + { + "label": "郏县", + "value": "410425" + }, + { + "label": "平顶山高新技术产业开发区", + "value": "410471" + }, + { + "label": "平顶山市新城区", + "value": "410472" + }, + { + "label": "舞钢市", + "value": "410481" + }, + { + "label": "汝州市", + "value": "410482" + } + ], + [{ + "label": "文峰区", + "value": "410502" + }, + { + "label": "北关区", + "value": "410503" + }, + { + "label": "殷都区", + "value": "410505" + }, + { + "label": "龙安区", + "value": "410506" + }, + { + "label": "安阳县", + "value": "410522" + }, + { + "label": "汤阴县", + "value": "410523" + }, + { + "label": "滑县", + "value": "410526" + }, + { + "label": "内黄县", + "value": "410527" + }, + { + "label": "安阳高新技术产业开发区", + "value": "410571" + }, + { + "label": "林州市", + "value": "410581" + } + ], + [{ + "label": "鹤山区", + "value": "410602" + }, + { + "label": "山城区", + "value": "410603" + }, + { + "label": "淇滨区", + "value": "410611" + }, + { + "label": "浚县", + "value": "410621" + }, + { + "label": "淇县", + "value": "410622" + }, + { + "label": "鹤壁经济技术开发区", + "value": "410671" + } + ], + [{ + "label": "红旗区", + "value": "410702" + }, + { + "label": "卫滨区", + "value": "410703" + }, + { + "label": "凤泉区", + "value": "410704" + }, + { + "label": "牧野区", + "value": "410711" + }, + { + "label": "新乡县", + "value": "410721" + }, + { + "label": "获嘉县", + "value": "410724" + }, + { + "label": "原阳县", + "value": "410725" + }, + { + "label": "延津县", + "value": "410726" + }, + { + "label": "封丘县", + "value": "410727" + }, + { + "label": "长垣县", + "value": "410728" + }, + { + "label": "新乡高新技术产业开发区", + "value": "410771" + }, + { + "label": "新乡经济技术开发区", + "value": "410772" + }, + { + "label": "新乡市平原城乡一体化示范区", + "value": "410773" + }, + { + "label": "卫辉市", + "value": "410781" + }, + { + "label": "辉县市", + "value": "410782" + } + ], + [{ + "label": "解放区", + "value": "410802" + }, + { + "label": "中站区", + "value": "410803" + }, + { + "label": "马村区", + "value": "410804" + }, + { + "label": "山阳区", + "value": "410811" + }, + { + "label": "修武县", + "value": "410821" + }, + { + "label": "博爱县", + "value": "410822" + }, + { + "label": "武陟县", + "value": "410823" + }, + { + "label": "温县", + "value": "410825" + }, + { + "label": "焦作城乡一体化示范区", + "value": "410871" + }, + { + "label": "沁阳市", + "value": "410882" + }, + { + "label": "孟州市", + "value": "410883" + } + ], + [{ + "label": "华龙区", + "value": "410902" + }, + { + "label": "清丰县", + "value": "410922" + }, + { + "label": "南乐县", + "value": "410923" + }, + { + "label": "范县", + "value": "410926" + }, + { + "label": "台前县", + "value": "410927" + }, + { + "label": "濮阳县", + "value": "410928" + }, + { + "label": "河南濮阳工业园区", + "value": "410971" + }, + { + "label": "濮阳经济技术开发区", + "value": "410972" + } + ], + [{ + "label": "魏都区", + "value": "411002" + }, + { + "label": "建安区", + "value": "411003" + }, + { + "label": "鄢陵县", + "value": "411024" + }, + { + "label": "襄城县", + "value": "411025" + }, + { + "label": "许昌经济技术开发区", + "value": "411071" + }, + { + "label": "禹州市", + "value": "411081" + }, + { + "label": "长葛市", + "value": "411082" + } + ], + [{ + "label": "源汇区", + "value": "411102" + }, + { + "label": "郾城区", + "value": "411103" + }, + { + "label": "召陵区", + "value": "411104" + }, + { + "label": "舞阳县", + "value": "411121" + }, + { + "label": "临颍县", + "value": "411122" + }, + { + "label": "漯河经济技术开发区", + "value": "411171" + } + ], + [{ + "label": "湖滨区", + "value": "411202" + }, + { + "label": "陕州区", + "value": "411203" + }, + { + "label": "渑池县", + "value": "411221" + }, + { + "label": "卢氏县", + "value": "411224" + }, + { + "label": "河南三门峡经济开发区", + "value": "411271" + }, + { + "label": "义马市", + "value": "411281" + }, + { + "label": "灵宝市", + "value": "411282" + } + ], + [{ + "label": "宛城区", + "value": "411302" + }, + { + "label": "卧龙区", + "value": "411303" + }, + { + "label": "南召县", + "value": "411321" + }, + { + "label": "方城县", + "value": "411322" + }, + { + "label": "西峡县", + "value": "411323" + }, + { + "label": "镇平县", + "value": "411324" + }, + { + "label": "内乡县", + "value": "411325" + }, + { + "label": "淅川县", + "value": "411326" + }, + { + "label": "社旗县", + "value": "411327" + }, + { + "label": "唐河县", + "value": "411328" + }, + { + "label": "新野县", + "value": "411329" + }, + { + "label": "桐柏县", + "value": "411330" + }, + { + "label": "南阳高新技术产业开发区", + "value": "411371" + }, + { + "label": "南阳市城乡一体化示范区", + "value": "411372" + }, + { + "label": "邓州市", + "value": "411381" + } + ], + [{ + "label": "梁园区", + "value": "411402" + }, + { + "label": "睢阳区", + "value": "411403" + }, + { + "label": "民权县", + "value": "411421" + }, + { + "label": "睢县", + "value": "411422" + }, + { + "label": "宁陵县", + "value": "411423" + }, + { + "label": "柘城县", + "value": "411424" + }, + { + "label": "虞城县", + "value": "411425" + }, + { + "label": "夏邑县", + "value": "411426" + }, + { + "label": "豫东综合物流产业聚集区", + "value": "411471" + }, + { + "label": "河南商丘经济开发区", + "value": "411472" + }, + { + "label": "永城市", + "value": "411481" + } + ], + [{ + "label": "浉河区", + "value": "411502" + }, + { + "label": "平桥区", + "value": "411503" + }, + { + "label": "罗山县", + "value": "411521" + }, + { + "label": "光山县", + "value": "411522" + }, + { + "label": "新县", + "value": "411523" + }, + { + "label": "商城县", + "value": "411524" + }, + { + "label": "固始县", + "value": "411525" + }, + { + "label": "潢川县", + "value": "411526" + }, + { + "label": "淮滨县", + "value": "411527" + }, + { + "label": "息县", + "value": "411528" + }, + { + "label": "信阳高新技术产业开发区", + "value": "411571" + } + ], + [{ + "label": "川汇区", + "value": "411602" + }, + { + "label": "扶沟县", + "value": "411621" + }, + { + "label": "西华县", + "value": "411622" + }, + { + "label": "商水县", + "value": "411623" + }, + { + "label": "沈丘县", + "value": "411624" + }, + { + "label": "郸城县", + "value": "411625" + }, + { + "label": "淮阳县", + "value": "411626" + }, + { + "label": "太康县", + "value": "411627" + }, + { + "label": "鹿邑县", + "value": "411628" + }, + { + "label": "河南周口经济开发区", + "value": "411671" + }, + { + "label": "项城市", + "value": "411681" + } + ], + [{ + "label": "驿城区", + "value": "411702" + }, + { + "label": "西平县", + "value": "411721" + }, + { + "label": "上蔡县", + "value": "411722" + }, + { + "label": "平舆县", + "value": "411723" + }, + { + "label": "正阳县", + "value": "411724" + }, + { + "label": "确山县", + "value": "411725" + }, + { + "label": "泌阳县", + "value": "411726" + }, + { + "label": "汝南县", + "value": "411727" + }, + { + "label": "遂平县", + "value": "411728" + }, + { + "label": "新蔡县", + "value": "411729" + }, + { + "label": "河南驻马店经济开发区", + "value": "411771" + } + ], + [{ + "label": "济源市", + "value": "419001" + }] + ], + [ + [{ + "label": "江岸区", + "value": "420102" + }, + { + "label": "江汉区", + "value": "420103" + }, + { + "label": "硚口区", + "value": "420104" + }, + { + "label": "汉阳区", + "value": "420105" + }, + { + "label": "武昌区", + "value": "420106" + }, + { + "label": "青山区", + "value": "420107" + }, + { + "label": "洪山区", + "value": "420111" + }, + { + "label": "东西湖区", + "value": "420112" + }, + { + "label": "汉南区", + "value": "420113" + }, + { + "label": "蔡甸区", + "value": "420114" + }, + { + "label": "江夏区", + "value": "420115" + }, + { + "label": "黄陂区", + "value": "420116" + }, + { + "label": "新洲区", + "value": "420117" + } + ], + [{ + "label": "黄石港区", + "value": "420202" + }, + { + "label": "西塞山区", + "value": "420203" + }, + { + "label": "下陆区", + "value": "420204" + }, + { + "label": "铁山区", + "value": "420205" + }, + { + "label": "阳新县", + "value": "420222" + }, + { + "label": "大冶市", + "value": "420281" + } + ], + [{ + "label": "茅箭区", + "value": "420302" + }, + { + "label": "张湾区", + "value": "420303" + }, + { + "label": "郧阳区", + "value": "420304" + }, + { + "label": "郧西县", + "value": "420322" + }, + { + "label": "竹山县", + "value": "420323" + }, + { + "label": "竹溪县", + "value": "420324" + }, + { + "label": "房县", + "value": "420325" + }, + { + "label": "丹江口市", + "value": "420381" + } + ], + [{ + "label": "西陵区", + "value": "420502" + }, + { + "label": "伍家岗区", + "value": "420503" + }, + { + "label": "点军区", + "value": "420504" + }, + { + "label": "猇亭区", + "value": "420505" + }, + { + "label": "夷陵区", + "value": "420506" + }, + { + "label": "远安县", + "value": "420525" + }, + { + "label": "兴山县", + "value": "420526" + }, + { + "label": "秭归县", + "value": "420527" + }, + { + "label": "长阳土家族自治县", + "value": "420528" + }, + { + "label": "五峰土家族自治县", + "value": "420529" + }, + { + "label": "宜都市", + "value": "420581" + }, + { + "label": "当阳市", + "value": "420582" + }, + { + "label": "枝江市", + "value": "420583" + } + ], + [{ + "label": "襄城区", + "value": "420602" + }, + { + "label": "樊城区", + "value": "420606" + }, + { + "label": "襄州区", + "value": "420607" + }, + { + "label": "南漳县", + "value": "420624" + }, + { + "label": "谷城县", + "value": "420625" + }, + { + "label": "保康县", + "value": "420626" + }, + { + "label": "老河口市", + "value": "420682" + }, + { + "label": "枣阳市", + "value": "420683" + }, + { + "label": "宜城市", + "value": "420684" + } + ], + [{ + "label": "梁子湖区", + "value": "420702" + }, + { + "label": "华容区", + "value": "420703" + }, + { + "label": "鄂城区", + "value": "420704" + } + ], + [{ + "label": "东宝区", + "value": "420802" + }, + { + "label": "掇刀区", + "value": "420804" + }, + { + "label": "京山县", + "value": "420821" + }, + { + "label": "沙洋县", + "value": "420822" + }, + { + "label": "钟祥市", + "value": "420881" + } + ], + [{ + "label": "孝南区", + "value": "420902" + }, + { + "label": "孝昌县", + "value": "420921" + }, + { + "label": "大悟县", + "value": "420922" + }, + { + "label": "云梦县", + "value": "420923" + }, + { + "label": "应城市", + "value": "420981" + }, + { + "label": "安陆市", + "value": "420982" + }, + { + "label": "汉川市", + "value": "420984" + } + ], + [{ + "label": "沙市区", + "value": "421002" + }, + { + "label": "荆州区", + "value": "421003" + }, + { + "label": "公安县", + "value": "421022" + }, + { + "label": "监利县", + "value": "421023" + }, + { + "label": "江陵县", + "value": "421024" + }, + { + "label": "荆州经济技术开发区", + "value": "421071" + }, + { + "label": "石首市", + "value": "421081" + }, + { + "label": "洪湖市", + "value": "421083" + }, + { + "label": "松滋市", + "value": "421087" + } + ], + [{ + "label": "黄州区", + "value": "421102" + }, + { + "label": "团风县", + "value": "421121" + }, + { + "label": "红安县", + "value": "421122" + }, + { + "label": "罗田县", + "value": "421123" + }, + { + "label": "英山县", + "value": "421124" + }, + { + "label": "浠水县", + "value": "421125" + }, + { + "label": "蕲春县", + "value": "421126" + }, + { + "label": "黄梅县", + "value": "421127" + }, + { + "label": "龙感湖管理区", + "value": "421171" + }, + { + "label": "麻城市", + "value": "421181" + }, + { + "label": "武穴市", + "value": "421182" + } + ], + [{ + "label": "咸安区", + "value": "421202" + }, + { + "label": "嘉鱼县", + "value": "421221" + }, + { + "label": "通城县", + "value": "421222" + }, + { + "label": "崇阳县", + "value": "421223" + }, + { + "label": "通山县", + "value": "421224" + }, + { + "label": "赤壁市", + "value": "421281" + } + ], + [{ + "label": "曾都区", + "value": "421303" + }, + { + "label": "随县", + "value": "421321" + }, + { + "label": "广水市", + "value": "421381" + } + ], + [{ + "label": "恩施市", + "value": "422801" + }, + { + "label": "利川市", + "value": "422802" + }, + { + "label": "建始县", + "value": "422822" + }, + { + "label": "巴东县", + "value": "422823" + }, + { + "label": "宣恩县", + "value": "422825" + }, + { + "label": "咸丰县", + "value": "422826" + }, + { + "label": "来凤县", + "value": "422827" + }, + { + "label": "鹤峰县", + "value": "422828" + } + ], + [{ + "label": "仙桃市", + "value": "429004" + }, + { + "label": "潜江市", + "value": "429005" + }, + { + "label": "天门市", + "value": "429006" + }, + { + "label": "神农架林区", + "value": "429021" + } + ] + ], + [ + [{ + "label": "芙蓉区", + "value": "430102" + }, + { + "label": "天心区", + "value": "430103" + }, + { + "label": "岳麓区", + "value": "430104" + }, + { + "label": "开福区", + "value": "430105" + }, + { + "label": "雨花区", + "value": "430111" + }, + { + "label": "望城区", + "value": "430112" + }, + { + "label": "长沙县", + "value": "430121" + }, + { + "label": "浏阳市", + "value": "430181" + }, + { + "label": "宁乡市", + "value": "430182" + } + ], + [{ + "label": "荷塘区", + "value": "430202" + }, + { + "label": "芦淞区", + "value": "430203" + }, + { + "label": "石峰区", + "value": "430204" + }, + { + "label": "天元区", + "value": "430211" + }, + { + "label": "株洲县", + "value": "430221" + }, + { + "label": "攸县", + "value": "430223" + }, + { + "label": "茶陵县", + "value": "430224" + }, + { + "label": "炎陵县", + "value": "430225" + }, + { + "label": "云龙示范区", + "value": "430271" + }, + { + "label": "醴陵市", + "value": "430281" + } + ], + [{ + "label": "雨湖区", + "value": "430302" + }, + { + "label": "岳塘区", + "value": "430304" + }, + { + "label": "湘潭县", + "value": "430321" + }, + { + "label": "湖南湘潭高新技术产业园区", + "value": "430371" + }, + { + "label": "湘潭昭山示范区", + "value": "430372" + }, + { + "label": "湘潭九华示范区", + "value": "430373" + }, + { + "label": "湘乡市", + "value": "430381" + }, + { + "label": "韶山市", + "value": "430382" + } + ], + [{ + "label": "珠晖区", + "value": "430405" + }, + { + "label": "雁峰区", + "value": "430406" + }, + { + "label": "石鼓区", + "value": "430407" + }, + { + "label": "蒸湘区", + "value": "430408" + }, + { + "label": "南岳区", + "value": "430412" + }, + { + "label": "衡阳县", + "value": "430421" + }, + { + "label": "衡南县", + "value": "430422" + }, + { + "label": "衡山县", + "value": "430423" + }, + { + "label": "衡东县", + "value": "430424" + }, + { + "label": "祁东县", + "value": "430426" + }, + { + "label": "衡阳综合保税区", + "value": "430471" + }, + { + "label": "湖南衡阳高新技术产业园区", + "value": "430472" + }, + { + "label": "湖南衡阳松木经济开发区", + "value": "430473" + }, + { + "label": "耒阳市", + "value": "430481" + }, + { + "label": "常宁市", + "value": "430482" + } + ], + [{ + "label": "双清区", + "value": "430502" + }, + { + "label": "大祥区", + "value": "430503" + }, + { + "label": "北塔区", + "value": "430511" + }, + { + "label": "邵东县", + "value": "430521" + }, + { + "label": "新邵县", + "value": "430522" + }, + { + "label": "邵阳县", + "value": "430523" + }, + { + "label": "隆回县", + "value": "430524" + }, + { + "label": "洞口县", + "value": "430525" + }, + { + "label": "绥宁县", + "value": "430527" + }, + { + "label": "新宁县", + "value": "430528" + }, + { + "label": "城步苗族自治县", + "value": "430529" + }, + { + "label": "武冈市", + "value": "430581" + } + ], + [{ + "label": "岳阳楼区", + "value": "430602" + }, + { + "label": "云溪区", + "value": "430603" + }, + { + "label": "君山区", + "value": "430611" + }, + { + "label": "岳阳县", + "value": "430621" + }, + { + "label": "华容县", + "value": "430623" + }, + { + "label": "湘阴县", + "value": "430624" + }, + { + "label": "平江县", + "value": "430626" + }, + { + "label": "岳阳市屈原管理区", + "value": "430671" + }, + { + "label": "汨罗市", + "value": "430681" + }, + { + "label": "临湘市", + "value": "430682" + } + ], + [{ + "label": "武陵区", + "value": "430702" + }, + { + "label": "鼎城区", + "value": "430703" + }, + { + "label": "安乡县", + "value": "430721" + }, + { + "label": "汉寿县", + "value": "430722" + }, + { + "label": "澧县", + "value": "430723" + }, + { + "label": "临澧县", + "value": "430724" + }, + { + "label": "桃源县", + "value": "430725" + }, + { + "label": "石门县", + "value": "430726" + }, + { + "label": "常德市西洞庭管理区", + "value": "430771" + }, + { + "label": "津市市", + "value": "430781" + } + ], + [{ + "label": "永定区", + "value": "430802" + }, + { + "label": "武陵源区", + "value": "430811" + }, + { + "label": "慈利县", + "value": "430821" + }, + { + "label": "桑植县", + "value": "430822" + } + ], + [{ + "label": "资阳区", + "value": "430902" + }, + { + "label": "赫山区", + "value": "430903" + }, + { + "label": "南县", + "value": "430921" + }, + { + "label": "桃江县", + "value": "430922" + }, + { + "label": "安化县", + "value": "430923" + }, + { + "label": "益阳市大通湖管理区", + "value": "430971" + }, + { + "label": "湖南益阳高新技术产业园区", + "value": "430972" + }, + { + "label": "沅江市", + "value": "430981" + } + ], + [{ + "label": "北湖区", + "value": "431002" + }, + { + "label": "苏仙区", + "value": "431003" + }, + { + "label": "桂阳县", + "value": "431021" + }, + { + "label": "宜章县", + "value": "431022" + }, + { + "label": "永兴县", + "value": "431023" + }, + { + "label": "嘉禾县", + "value": "431024" + }, + { + "label": "临武县", + "value": "431025" + }, + { + "label": "汝城县", + "value": "431026" + }, + { + "label": "桂东县", + "value": "431027" + }, + { + "label": "安仁县", + "value": "431028" + }, + { + "label": "资兴市", + "value": "431081" + } + ], + [{ + "label": "零陵区", + "value": "431102" + }, + { + "label": "冷水滩区", + "value": "431103" + }, + { + "label": "祁阳县", + "value": "431121" + }, + { + "label": "东安县", + "value": "431122" + }, + { + "label": "双牌县", + "value": "431123" + }, + { + "label": "道县", + "value": "431124" + }, + { + "label": "江永县", + "value": "431125" + }, + { + "label": "宁远县", + "value": "431126" + }, + { + "label": "蓝山县", + "value": "431127" + }, + { + "label": "新田县", + "value": "431128" + }, + { + "label": "江华瑶族自治县", + "value": "431129" + }, + { + "label": "永州经济技术开发区", + "value": "431171" + }, + { + "label": "永州市金洞管理区", + "value": "431172" + }, + { + "label": "永州市回龙圩管理区", + "value": "431173" + } + ], + [{ + "label": "鹤城区", + "value": "431202" + }, + { + "label": "中方县", + "value": "431221" + }, + { + "label": "沅陵县", + "value": "431222" + }, + { + "label": "辰溪县", + "value": "431223" + }, + { + "label": "溆浦县", + "value": "431224" + }, + { + "label": "会同县", + "value": "431225" + }, + { + "label": "麻阳苗族自治县", + "value": "431226" + }, + { + "label": "新晃侗族自治县", + "value": "431227" + }, + { + "label": "芷江侗族自治县", + "value": "431228" + }, + { + "label": "靖州苗族侗族自治县", + "value": "431229" + }, + { + "label": "通道侗族自治县", + "value": "431230" + }, + { + "label": "怀化市洪江管理区", + "value": "431271" + }, + { + "label": "洪江市", + "value": "431281" + } + ], + [{ + "label": "娄星区", + "value": "431302" + }, + { + "label": "双峰县", + "value": "431321" + }, + { + "label": "新化县", + "value": "431322" + }, + { + "label": "冷水江市", + "value": "431381" + }, + { + "label": "涟源市", + "value": "431382" + } + ], + [{ + "label": "吉首市", + "value": "433101" + }, + { + "label": "泸溪县", + "value": "433122" + }, + { + "label": "凤凰县", + "value": "433123" + }, + { + "label": "花垣县", + "value": "433124" + }, + { + "label": "保靖县", + "value": "433125" + }, + { + "label": "古丈县", + "value": "433126" + }, + { + "label": "永顺县", + "value": "433127" + }, + { + "label": "龙山县", + "value": "433130" + }, + { + "label": "湖南吉首经济开发区", + "value": "433172" + }, + { + "label": "湖南永顺经济开发区", + "value": "433173" + } + ] + ], + [ + [{ + "label": "荔湾区", + "value": "440103" + }, + { + "label": "越秀区", + "value": "440104" + }, + { + "label": "海珠区", + "value": "440105" + }, + { + "label": "天河区", + "value": "440106" + }, + { + "label": "白云区", + "value": "440111" + }, + { + "label": "黄埔区", + "value": "440112" + }, + { + "label": "番禺区", + "value": "440113" + }, + { + "label": "花都区", + "value": "440114" + }, + { + "label": "南沙区", + "value": "440115" + }, + { + "label": "从化区", + "value": "440117" + }, + { + "label": "增城区", + "value": "440118" + } + ], + [{ + "label": "武江区", + "value": "440203" + }, + { + "label": "浈江区", + "value": "440204" + }, + { + "label": "曲江区", + "value": "440205" + }, + { + "label": "始兴县", + "value": "440222" + }, + { + "label": "仁化县", + "value": "440224" + }, + { + "label": "翁源县", + "value": "440229" + }, + { + "label": "乳源瑶族自治县", + "value": "440232" + }, + { + "label": "新丰县", + "value": "440233" + }, + { + "label": "乐昌市", + "value": "440281" + }, + { + "label": "南雄市", + "value": "440282" + } + ], + [{ + "label": "罗湖区", + "value": "440303" + }, + { + "label": "福田区", + "value": "440304" + }, + { + "label": "南山区", + "value": "440305" + }, + { + "label": "宝安区", + "value": "440306" + }, + { + "label": "龙岗区", + "value": "440307" + }, + { + "label": "盐田区", + "value": "440308" + }, + { + "label": "龙华区", + "value": "440309" + }, + { + "label": "坪山区", + "value": "440310" + } + ], + [{ + "label": "香洲区", + "value": "440402" + }, + { + "label": "斗门区", + "value": "440403" + }, + { + "label": "金湾区", + "value": "440404" + } + ], + [{ + "label": "龙湖区", + "value": "440507" + }, + { + "label": "金平区", + "value": "440511" + }, + { + "label": "濠江区", + "value": "440512" + }, + { + "label": "潮阳区", + "value": "440513" + }, + { + "label": "潮南区", + "value": "440514" + }, + { + "label": "澄海区", + "value": "440515" + }, + { + "label": "南澳县", + "value": "440523" + } + ], + [{ + "label": "禅城区", + "value": "440604" + }, + { + "label": "南海区", + "value": "440605" + }, + { + "label": "顺德区", + "value": "440606" + }, + { + "label": "三水区", + "value": "440607" + }, + { + "label": "高明区", + "value": "440608" + } + ], + [{ + "label": "蓬江区", + "value": "440703" + }, + { + "label": "江海区", + "value": "440704" + }, + { + "label": "新会区", + "value": "440705" + }, + { + "label": "台山市", + "value": "440781" + }, + { + "label": "开平市", + "value": "440783" + }, + { + "label": "鹤山市", + "value": "440784" + }, + { + "label": "恩平市", + "value": "440785" + } + ], + [{ + "label": "赤坎区", + "value": "440802" + }, + { + "label": "霞山区", + "value": "440803" + }, + { + "label": "坡头区", + "value": "440804" + }, + { + "label": "麻章区", + "value": "440811" + }, + { + "label": "遂溪县", + "value": "440823" + }, + { + "label": "徐闻县", + "value": "440825" + }, + { + "label": "廉江市", + "value": "440881" + }, + { + "label": "雷州市", + "value": "440882" + }, + { + "label": "吴川市", + "value": "440883" + } + ], + [{ + "label": "茂南区", + "value": "440902" + }, + { + "label": "电白区", + "value": "440904" + }, + { + "label": "高州市", + "value": "440981" + }, + { + "label": "化州市", + "value": "440982" + }, + { + "label": "信宜市", + "value": "440983" + } + ], + [{ + "label": "端州区", + "value": "441202" + }, + { + "label": "鼎湖区", + "value": "441203" + }, + { + "label": "高要区", + "value": "441204" + }, + { + "label": "广宁县", + "value": "441223" + }, + { + "label": "怀集县", + "value": "441224" + }, + { + "label": "封开县", + "value": "441225" + }, + { + "label": "德庆县", + "value": "441226" + }, + { + "label": "四会市", + "value": "441284" + } + ], + [{ + "label": "惠城区", + "value": "441302" + }, + { + "label": "惠阳区", + "value": "441303" + }, + { + "label": "博罗县", + "value": "441322" + }, + { + "label": "惠东县", + "value": "441323" + }, + { + "label": "龙门县", + "value": "441324" + } + ], + [{ + "label": "梅江区", + "value": "441402" + }, + { + "label": "梅县区", + "value": "441403" + }, + { + "label": "大埔县", + "value": "441422" + }, + { + "label": "丰顺县", + "value": "441423" + }, + { + "label": "五华县", + "value": "441424" + }, + { + "label": "平远县", + "value": "441426" + }, + { + "label": "蕉岭县", + "value": "441427" + }, + { + "label": "兴宁市", + "value": "441481" + } + ], + [{ + "label": "城区", + "value": "441502" + }, + { + "label": "海丰县", + "value": "441521" + }, + { + "label": "陆河县", + "value": "441523" + }, + { + "label": "陆丰市", + "value": "441581" + } + ], + [{ + "label": "源城区", + "value": "441602" + }, + { + "label": "紫金县", + "value": "441621" + }, + { + "label": "龙川县", + "value": "441622" + }, + { + "label": "连平县", + "value": "441623" + }, + { + "label": "和平县", + "value": "441624" + }, + { + "label": "东源县", + "value": "441625" + } + ], + [{ + "label": "江城区", + "value": "441702" + }, + { + "label": "阳东区", + "value": "441704" + }, + { + "label": "阳西县", + "value": "441721" + }, + { + "label": "阳春市", + "value": "441781" + } + ], + [{ + "label": "清城区", + "value": "441802" + }, + { + "label": "清新区", + "value": "441803" + }, + { + "label": "佛冈县", + "value": "441821" + }, + { + "label": "阳山县", + "value": "441823" + }, + { + "label": "连山壮族瑶族自治县", + "value": "441825" + }, + { + "label": "连南瑶族自治县", + "value": "441826" + }, + { + "label": "英德市", + "value": "441881" + }, + { + "label": "连州市", + "value": "441882" + } + ], + [{ + "label": "东莞市", + "value": "441900" + }], + [{ + "label": "中山市", + "value": "442000" + }], + [{ + "label": "湘桥区", + "value": "445102" + }, + { + "label": "潮安区", + "value": "445103" + }, + { + "label": "饶平县", + "value": "445122" + } + ], + [{ + "label": "榕城区", + "value": "445202" + }, + { + "label": "揭东区", + "value": "445203" + }, + { + "label": "揭西县", + "value": "445222" + }, + { + "label": "惠来县", + "value": "445224" + }, + { + "label": "普宁市", + "value": "445281" + } + ], + [{ + "label": "云城区", + "value": "445302" + }, + { + "label": "云安区", + "value": "445303" + }, + { + "label": "新兴县", + "value": "445321" + }, + { + "label": "郁南县", + "value": "445322" + }, + { + "label": "罗定市", + "value": "445381" + } + ] + ], + [ + [{ + "label": "兴宁区", + "value": "450102" + }, + { + "label": "青秀区", + "value": "450103" + }, + { + "label": "江南区", + "value": "450105" + }, + { + "label": "西乡塘区", + "value": "450107" + }, + { + "label": "良庆区", + "value": "450108" + }, + { + "label": "邕宁区", + "value": "450109" + }, + { + "label": "武鸣区", + "value": "450110" + }, + { + "label": "隆安县", + "value": "450123" + }, + { + "label": "马山县", + "value": "450124" + }, + { + "label": "上林县", + "value": "450125" + }, + { + "label": "宾阳县", + "value": "450126" + }, + { + "label": "横县", + "value": "450127" + } + ], + [{ + "label": "城中区", + "value": "450202" + }, + { + "label": "鱼峰区", + "value": "450203" + }, + { + "label": "柳南区", + "value": "450204" + }, + { + "label": "柳北区", + "value": "450205" + }, + { + "label": "柳江区", + "value": "450206" + }, + { + "label": "柳城县", + "value": "450222" + }, + { + "label": "鹿寨县", + "value": "450223" + }, + { + "label": "融安县", + "value": "450224" + }, + { + "label": "融水苗族自治县", + "value": "450225" + }, + { + "label": "三江侗族自治县", + "value": "450226" + } + ], + [{ + "label": "秀峰区", + "value": "450302" + }, + { + "label": "叠彩区", + "value": "450303" + }, + { + "label": "象山区", + "value": "450304" + }, + { + "label": "七星区", + "value": "450305" + }, + { + "label": "雁山区", + "value": "450311" + }, + { + "label": "临桂区", + "value": "450312" + }, + { + "label": "阳朔县", + "value": "450321" + }, + { + "label": "灵川县", + "value": "450323" + }, + { + "label": "全州县", + "value": "450324" + }, + { + "label": "兴安县", + "value": "450325" + }, + { + "label": "永福县", + "value": "450326" + }, + { + "label": "灌阳县", + "value": "450327" + }, + { + "label": "龙胜各族自治县", + "value": "450328" + }, + { + "label": "资源县", + "value": "450329" + }, + { + "label": "平乐县", + "value": "450330" + }, + { + "label": "荔浦县", + "value": "450331" + }, + { + "label": "恭城瑶族自治县", + "value": "450332" + } + ], + [{ + "label": "万秀区", + "value": "450403" + }, + { + "label": "长洲区", + "value": "450405" + }, + { + "label": "龙圩区", + "value": "450406" + }, + { + "label": "苍梧县", + "value": "450421" + }, + { + "label": "藤县", + "value": "450422" + }, + { + "label": "蒙山县", + "value": "450423" + }, + { + "label": "岑溪市", + "value": "450481" + } + ], + [{ + "label": "海城区", + "value": "450502" + }, + { + "label": "银海区", + "value": "450503" + }, + { + "label": "铁山港区", + "value": "450512" + }, + { + "label": "合浦县", + "value": "450521" + } + ], + [{ + "label": "港口区", + "value": "450602" + }, + { + "label": "防城区", + "value": "450603" + }, + { + "label": "上思县", + "value": "450621" + }, + { + "label": "东兴市", + "value": "450681" + } + ], + [{ + "label": "钦南区", + "value": "450702" + }, + { + "label": "钦北区", + "value": "450703" + }, + { + "label": "灵山县", + "value": "450721" + }, + { + "label": "浦北县", + "value": "450722" + } + ], + [{ + "label": "港北区", + "value": "450802" + }, + { + "label": "港南区", + "value": "450803" + }, + { + "label": "覃塘区", + "value": "450804" + }, + { + "label": "平南县", + "value": "450821" + }, + { + "label": "桂平市", + "value": "450881" + } + ], + [{ + "label": "玉州区", + "value": "450902" + }, + { + "label": "福绵区", + "value": "450903" + }, + { + "label": "容县", + "value": "450921" + }, + { + "label": "陆川县", + "value": "450922" + }, + { + "label": "博白县", + "value": "450923" + }, + { + "label": "兴业县", + "value": "450924" + }, + { + "label": "北流市", + "value": "450981" + } + ], + [{ + "label": "右江区", + "value": "451002" + }, + { + "label": "田阳县", + "value": "451021" + }, + { + "label": "田东县", + "value": "451022" + }, + { + "label": "平果县", + "value": "451023" + }, + { + "label": "德保县", + "value": "451024" + }, + { + "label": "那坡县", + "value": "451026" + }, + { + "label": "凌云县", + "value": "451027" + }, + { + "label": "乐业县", + "value": "451028" + }, + { + "label": "田林县", + "value": "451029" + }, + { + "label": "西林县", + "value": "451030" + }, + { + "label": "隆林各族自治县", + "value": "451031" + }, + { + "label": "靖西市", + "value": "451081" + } + ], + [{ + "label": "八步区", + "value": "451102" + }, + { + "label": "平桂区", + "value": "451103" + }, + { + "label": "昭平县", + "value": "451121" + }, + { + "label": "钟山县", + "value": "451122" + }, + { + "label": "富川瑶族自治县", + "value": "451123" + } + ], + [{ + "label": "金城江区", + "value": "451202" + }, + { + "label": "宜州区", + "value": "451203" + }, + { + "label": "南丹县", + "value": "451221" + }, + { + "label": "天峨县", + "value": "451222" + }, + { + "label": "凤山县", + "value": "451223" + }, + { + "label": "东兰县", + "value": "451224" + }, + { + "label": "罗城仫佬族自治县", + "value": "451225" + }, + { + "label": "环江毛南族自治县", + "value": "451226" + }, + { + "label": "巴马瑶族自治县", + "value": "451227" + }, + { + "label": "都安瑶族自治县", + "value": "451228" + }, + { + "label": "大化瑶族自治县", + "value": "451229" + } + ], + [{ + "label": "兴宾区", + "value": "451302" + }, + { + "label": "忻城县", + "value": "451321" + }, + { + "label": "象州县", + "value": "451322" + }, + { + "label": "武宣县", + "value": "451323" + }, + { + "label": "金秀瑶族自治县", + "value": "451324" + }, + { + "label": "合山市", + "value": "451381" + } + ], + [{ + "label": "江州区", + "value": "451402" + }, + { + "label": "扶绥县", + "value": "451421" + }, + { + "label": "宁明县", + "value": "451422" + }, + { + "label": "龙州县", + "value": "451423" + }, + { + "label": "大新县", + "value": "451424" + }, + { + "label": "天等县", + "value": "451425" + }, + { + "label": "凭祥市", + "value": "451481" + } + ] + ], + [ + [{ + "label": "秀英区", + "value": "460105" + }, + { + "label": "龙华区", + "value": "460106" + }, + { + "label": "琼山区", + "value": "460107" + }, + { + "label": "美兰区", + "value": "460108" + } + ], + [{ + "label": "海棠区", + "value": "460202" + }, + { + "label": "吉阳区", + "value": "460203" + }, + { + "label": "天涯区", + "value": "460204" + }, + { + "label": "崖州区", + "value": "460205" + } + ], + [{ + "label": "西沙群岛", + "value": "460321" + }, + { + "label": "南沙群岛", + "value": "460322" + }, + { + "label": "中沙群岛的岛礁及其海域", + "value": "460323" + } + ], + [{ + "label": "儋州市", + "value": "460400" + }], + [{ + "label": "五指山市", + "value": "469001" + }, + { + "label": "琼海市", + "value": "469002" + }, + { + "label": "文昌市", + "value": "469005" + }, + { + "label": "万宁市", + "value": "469006" + }, + { + "label": "东方市", + "value": "469007" + }, + { + "label": "定安县", + "value": "469021" + }, + { + "label": "屯昌县", + "value": "469022" + }, + { + "label": "澄迈县", + "value": "469023" + }, + { + "label": "临高县", + "value": "469024" + }, + { + "label": "白沙黎族自治县", + "value": "469025" + }, + { + "label": "昌江黎族自治县", + "value": "469026" + }, + { + "label": "乐东黎族自治县", + "value": "469027" + }, + { + "label": "陵水黎族自治县", + "value": "469028" + }, + { + "label": "保亭黎族苗族自治县", + "value": "469029" + }, + { + "label": "琼中黎族苗族自治县", + "value": "469030" + } + ] + ], + [ + [{ + "label": "万州区", + "value": "500101" + }, + { + "label": "涪陵区", + "value": "500102" + }, + { + "label": "渝中区", + "value": "500103" + }, + { + "label": "大渡口区", + "value": "500104" + }, + { + "label": "江北区", + "value": "500105" + }, + { + "label": "沙坪坝区", + "value": "500106" + }, + { + "label": "九龙坡区", + "value": "500107" + }, + { + "label": "南岸区", + "value": "500108" + }, + { + "label": "北碚区", + "value": "500109" + }, + { + "label": "綦江区", + "value": "500110" + }, + { + "label": "大足区", + "value": "500111" + }, + { + "label": "渝北区", + "value": "500112" + }, + { + "label": "巴南区", + "value": "500113" + }, + { + "label": "黔江区", + "value": "500114" + }, + { + "label": "长寿区", + "value": "500115" + }, + { + "label": "江津区", + "value": "500116" + }, + { + "label": "合川区", + "value": "500117" + }, + { + "label": "永川区", + "value": "500118" + }, + { + "label": "南川区", + "value": "500119" + }, + { + "label": "璧山区", + "value": "500120" + }, + { + "label": "铜梁区", + "value": "500151" + }, + { + "label": "潼南区", + "value": "500152" + }, + { + "label": "荣昌区", + "value": "500153" + }, + { + "label": "开州区", + "value": "500154" + }, + { + "label": "梁平区", + "value": "500155" + }, + { + "label": "武隆区", + "value": "500156" + } + ], + [{ + "label": "城口县", + "value": "500229" + }, + { + "label": "丰都县", + "value": "500230" + }, + { + "label": "垫江县", + "value": "500231" + }, + { + "label": "忠县", + "value": "500233" + }, + { + "label": "云阳县", + "value": "500235" + }, + { + "label": "奉节县", + "value": "500236" + }, + { + "label": "巫山县", + "value": "500237" + }, + { + "label": "巫溪县", + "value": "500238" + }, + { + "label": "石柱土家族自治县", + "value": "500240" + }, + { + "label": "秀山土家族苗族自治县", + "value": "500241" + }, + { + "label": "酉阳土家族苗族自治县", + "value": "500242" + }, + { + "label": "彭水苗族土家族自治县", + "value": "500243" + } + ] + ], + [ + [{ + "label": "锦江区", + "value": "510104" + }, + { + "label": "青羊区", + "value": "510105" + }, + { + "label": "金牛区", + "value": "510106" + }, + { + "label": "武侯区", + "value": "510107" + }, + { + "label": "成华区", + "value": "510108" + }, + { + "label": "龙泉驿区", + "value": "510112" + }, + { + "label": "青白江区", + "value": "510113" + }, + { + "label": "新都区", + "value": "510114" + }, + { + "label": "温江区", + "value": "510115" + }, + { + "label": "双流区", + "value": "510116" + }, + { + "label": "郫都区", + "value": "510117" + }, + { + "label": "金堂县", + "value": "510121" + }, + { + "label": "大邑县", + "value": "510129" + }, + { + "label": "蒲江县", + "value": "510131" + }, + { + "label": "新津县", + "value": "510132" + }, + { + "label": "都江堰市", + "value": "510181" + }, + { + "label": "彭州市", + "value": "510182" + }, + { + "label": "邛崃市", + "value": "510183" + }, + { + "label": "崇州市", + "value": "510184" + }, + { + "label": "简阳市", + "value": "510185" + } + ], + [{ + "label": "自流井区", + "value": "510302" + }, + { + "label": "贡井区", + "value": "510303" + }, + { + "label": "大安区", + "value": "510304" + }, + { + "label": "沿滩区", + "value": "510311" + }, + { + "label": "荣县", + "value": "510321" + }, + { + "label": "富顺县", + "value": "510322" + } + ], + [{ + "label": "东区", + "value": "510402" + }, + { + "label": "西区", + "value": "510403" + }, + { + "label": "仁和区", + "value": "510411" + }, + { + "label": "米易县", + "value": "510421" + }, + { + "label": "盐边县", + "value": "510422" + } + ], + [{ + "label": "江阳区", + "value": "510502" + }, + { + "label": "纳溪区", + "value": "510503" + }, + { + "label": "龙马潭区", + "value": "510504" + }, + { + "label": "泸县", + "value": "510521" + }, + { + "label": "合江县", + "value": "510522" + }, + { + "label": "叙永县", + "value": "510524" + }, + { + "label": "古蔺县", + "value": "510525" + } + ], + [{ + "label": "旌阳区", + "value": "510603" + }, + { + "label": "罗江区", + "value": "510604" + }, + { + "label": "中江县", + "value": "510623" + }, + { + "label": "广汉市", + "value": "510681" + }, + { + "label": "什邡市", + "value": "510682" + }, + { + "label": "绵竹市", + "value": "510683" + } + ], + [{ + "label": "涪城区", + "value": "510703" + }, + { + "label": "游仙区", + "value": "510704" + }, + { + "label": "安州区", + "value": "510705" + }, + { + "label": "三台县", + "value": "510722" + }, + { + "label": "盐亭县", + "value": "510723" + }, + { + "label": "梓潼县", + "value": "510725" + }, + { + "label": "北川羌族自治县", + "value": "510726" + }, + { + "label": "平武县", + "value": "510727" + }, + { + "label": "江油市", + "value": "510781" + } + ], + [{ + "label": "利州区", + "value": "510802" + }, + { + "label": "昭化区", + "value": "510811" + }, + { + "label": "朝天区", + "value": "510812" + }, + { + "label": "旺苍县", + "value": "510821" + }, + { + "label": "青川县", + "value": "510822" + }, + { + "label": "剑阁县", + "value": "510823" + }, + { + "label": "苍溪县", + "value": "510824" + } + ], + [{ + "label": "船山区", + "value": "510903" + }, + { + "label": "安居区", + "value": "510904" + }, + { + "label": "蓬溪县", + "value": "510921" + }, + { + "label": "射洪县", + "value": "510922" + }, + { + "label": "大英县", + "value": "510923" + } + ], + [{ + "label": "市中区", + "value": "511002" + }, + { + "label": "东兴区", + "value": "511011" + }, + { + "label": "威远县", + "value": "511024" + }, + { + "label": "资中县", + "value": "511025" + }, + { + "label": "内江经济开发区", + "value": "511071" + }, + { + "label": "隆昌市", + "value": "511083" + } + ], + [{ + "label": "市中区", + "value": "511102" + }, + { + "label": "沙湾区", + "value": "511111" + }, + { + "label": "五通桥区", + "value": "511112" + }, + { + "label": "金口河区", + "value": "511113" + }, + { + "label": "犍为县", + "value": "511123" + }, + { + "label": "井研县", + "value": "511124" + }, + { + "label": "夹江县", + "value": "511126" + }, + { + "label": "沐川县", + "value": "511129" + }, + { + "label": "峨边彝族自治县", + "value": "511132" + }, + { + "label": "马边彝族自治县", + "value": "511133" + }, + { + "label": "峨眉山市", + "value": "511181" + } + ], + [{ + "label": "顺庆区", + "value": "511302" + }, + { + "label": "高坪区", + "value": "511303" + }, + { + "label": "嘉陵区", + "value": "511304" + }, + { + "label": "南部县", + "value": "511321" + }, + { + "label": "营山县", + "value": "511322" + }, + { + "label": "蓬安县", + "value": "511323" + }, + { + "label": "仪陇县", + "value": "511324" + }, + { + "label": "西充县", + "value": "511325" + }, + { + "label": "阆中市", + "value": "511381" + } + ], + [{ + "label": "东坡区", + "value": "511402" + }, + { + "label": "彭山区", + "value": "511403" + }, + { + "label": "仁寿县", + "value": "511421" + }, + { + "label": "洪雅县", + "value": "511423" + }, + { + "label": "丹棱县", + "value": "511424" + }, + { + "label": "青神县", + "value": "511425" + } + ], + [{ + "label": "翠屏区", + "value": "511502" + }, + { + "label": "南溪区", + "value": "511503" + }, + { + "label": "宜宾县", + "value": "511521" + }, + { + "label": "江安县", + "value": "511523" + }, + { + "label": "长宁县", + "value": "511524" + }, + { + "label": "高县", + "value": "511525" + }, + { + "label": "珙县", + "value": "511526" + }, + { + "label": "筠连县", + "value": "511527" + }, + { + "label": "兴文县", + "value": "511528" + }, + { + "label": "屏山县", + "value": "511529" + } + ], + [{ + "label": "广安区", + "value": "511602" + }, + { + "label": "前锋区", + "value": "511603" + }, + { + "label": "岳池县", + "value": "511621" + }, + { + "label": "武胜县", + "value": "511622" + }, + { + "label": "邻水县", + "value": "511623" + }, + { + "label": "华蓥市", + "value": "511681" + } + ], + [{ + "label": "通川区", + "value": "511702" + }, + { + "label": "达川区", + "value": "511703" + }, + { + "label": "宣汉县", + "value": "511722" + }, + { + "label": "开江县", + "value": "511723" + }, + { + "label": "大竹县", + "value": "511724" + }, + { + "label": "渠县", + "value": "511725" + }, + { + "label": "达州经济开发区", + "value": "511771" + }, + { + "label": "万源市", + "value": "511781" + } + ], + [{ + "label": "雨城区", + "value": "511802" + }, + { + "label": "名山区", + "value": "511803" + }, + { + "label": "荥经县", + "value": "511822" + }, + { + "label": "汉源县", + "value": "511823" + }, + { + "label": "石棉县", + "value": "511824" + }, + { + "label": "天全县", + "value": "511825" + }, + { + "label": "芦山县", + "value": "511826" + }, + { + "label": "宝兴县", + "value": "511827" + } + ], + [{ + "label": "巴州区", + "value": "511902" + }, + { + "label": "恩阳区", + "value": "511903" + }, + { + "label": "通江县", + "value": "511921" + }, + { + "label": "南江县", + "value": "511922" + }, + { + "label": "平昌县", + "value": "511923" + }, + { + "label": "巴中经济开发区", + "value": "511971" + } + ], + [{ + "label": "雁江区", + "value": "512002" + }, + { + "label": "安岳县", + "value": "512021" + }, + { + "label": "乐至县", + "value": "512022" + } + ], + [{ + "label": "马尔康市", + "value": "513201" + }, + { + "label": "汶川县", + "value": "513221" + }, + { + "label": "理县", + "value": "513222" + }, + { + "label": "茂县", + "value": "513223" + }, + { + "label": "松潘县", + "value": "513224" + }, + { + "label": "九寨沟县", + "value": "513225" + }, + { + "label": "金川县", + "value": "513226" + }, + { + "label": "小金县", + "value": "513227" + }, + { + "label": "黑水县", + "value": "513228" + }, + { + "label": "壤塘县", + "value": "513230" + }, + { + "label": "阿坝县", + "value": "513231" + }, + { + "label": "若尔盖县", + "value": "513232" + }, + { + "label": "红原县", + "value": "513233" + } + ], + [{ + "label": "康定市", + "value": "513301" + }, + { + "label": "泸定县", + "value": "513322" + }, + { + "label": "丹巴县", + "value": "513323" + }, + { + "label": "九龙县", + "value": "513324" + }, + { + "label": "雅江县", + "value": "513325" + }, + { + "label": "道孚县", + "value": "513326" + }, + { + "label": "炉霍县", + "value": "513327" + }, + { + "label": "甘孜县", + "value": "513328" + }, + { + "label": "新龙县", + "value": "513329" + }, + { + "label": "德格县", + "value": "513330" + }, + { + "label": "白玉县", + "value": "513331" + }, + { + "label": "石渠县", + "value": "513332" + }, + { + "label": "色达县", + "value": "513333" + }, + { + "label": "理塘县", + "value": "513334" + }, + { + "label": "巴塘县", + "value": "513335" + }, + { + "label": "乡城县", + "value": "513336" + }, + { + "label": "稻城县", + "value": "513337" + }, + { + "label": "得荣县", + "value": "513338" + } + ], + [{ + "label": "西昌市", + "value": "513401" + }, + { + "label": "木里藏族自治县", + "value": "513422" + }, + { + "label": "盐源县", + "value": "513423" + }, + { + "label": "德昌县", + "value": "513424" + }, + { + "label": "会理县", + "value": "513425" + }, + { + "label": "会东县", + "value": "513426" + }, + { + "label": "宁南县", + "value": "513427" + }, + { + "label": "普格县", + "value": "513428" + }, + { + "label": "布拖县", + "value": "513429" + }, + { + "label": "金阳县", + "value": "513430" + }, + { + "label": "昭觉县", + "value": "513431" + }, + { + "label": "喜德县", + "value": "513432" + }, + { + "label": "冕宁县", + "value": "513433" + }, + { + "label": "越西县", + "value": "513434" + }, + { + "label": "甘洛县", + "value": "513435" + }, + { + "label": "美姑县", + "value": "513436" + }, + { + "label": "雷波县", + "value": "513437" + } + ] + ], + [ + [{ + "label": "南明区", + "value": "520102" + }, + { + "label": "云岩区", + "value": "520103" + }, + { + "label": "花溪区", + "value": "520111" + }, + { + "label": "乌当区", + "value": "520112" + }, + { + "label": "白云区", + "value": "520113" + }, + { + "label": "观山湖区", + "value": "520115" + }, + { + "label": "开阳县", + "value": "520121" + }, + { + "label": "息烽县", + "value": "520122" + }, + { + "label": "修文县", + "value": "520123" + }, + { + "label": "清镇市", + "value": "520181" + } + ], + [{ + "label": "钟山区", + "value": "520201" + }, + { + "label": "六枝特区", + "value": "520203" + }, + { + "label": "水城县", + "value": "520221" + }, + { + "label": "盘州市", + "value": "520281" + } + ], + [{ + "label": "红花岗区", + "value": "520302" + }, + { + "label": "汇川区", + "value": "520303" + }, + { + "label": "播州区", + "value": "520304" + }, + { + "label": "桐梓县", + "value": "520322" + }, + { + "label": "绥阳县", + "value": "520323" + }, + { + "label": "正安县", + "value": "520324" + }, + { + "label": "道真仡佬族苗族自治县", + "value": "520325" + }, + { + "label": "务川仡佬族苗族自治县", + "value": "520326" + }, + { + "label": "凤冈县", + "value": "520327" + }, + { + "label": "湄潭县", + "value": "520328" + }, + { + "label": "余庆县", + "value": "520329" + }, + { + "label": "习水县", + "value": "520330" + }, + { + "label": "赤水市", + "value": "520381" + }, + { + "label": "仁怀市", + "value": "520382" + } + ], + [{ + "label": "西秀区", + "value": "520402" + }, + { + "label": "平坝区", + "value": "520403" + }, + { + "label": "普定县", + "value": "520422" + }, + { + "label": "镇宁布依族苗族自治县", + "value": "520423" + }, + { + "label": "关岭布依族苗族自治县", + "value": "520424" + }, + { + "label": "紫云苗族布依族自治县", + "value": "520425" + } + ], + [{ + "label": "七星关区", + "value": "520502" + }, + { + "label": "大方县", + "value": "520521" + }, + { + "label": "黔西县", + "value": "520522" + }, + { + "label": "金沙县", + "value": "520523" + }, + { + "label": "织金县", + "value": "520524" + }, + { + "label": "纳雍县", + "value": "520525" + }, + { + "label": "威宁彝族回族苗族自治县", + "value": "520526" + }, + { + "label": "赫章县", + "value": "520527" + } + ], + [{ + "label": "碧江区", + "value": "520602" + }, + { + "label": "万山区", + "value": "520603" + }, + { + "label": "江口县", + "value": "520621" + }, + { + "label": "玉屏侗族自治县", + "value": "520622" + }, + { + "label": "石阡县", + "value": "520623" + }, + { + "label": "思南县", + "value": "520624" + }, + { + "label": "印江土家族苗族自治县", + "value": "520625" + }, + { + "label": "德江县", + "value": "520626" + }, + { + "label": "沿河土家族自治县", + "value": "520627" + }, + { + "label": "松桃苗族自治县", + "value": "520628" + } + ], + [{ + "label": "兴义市", + "value": "522301" + }, + { + "label": "兴仁县", + "value": "522322" + }, + { + "label": "普安县", + "value": "522323" + }, + { + "label": "晴隆县", + "value": "522324" + }, + { + "label": "贞丰县", + "value": "522325" + }, + { + "label": "望谟县", + "value": "522326" + }, + { + "label": "册亨县", + "value": "522327" + }, + { + "label": "安龙县", + "value": "522328" + } + ], + [{ + "label": "凯里市", + "value": "522601" + }, + { + "label": "黄平县", + "value": "522622" + }, + { + "label": "施秉县", + "value": "522623" + }, + { + "label": "三穗县", + "value": "522624" + }, + { + "label": "镇远县", + "value": "522625" + }, + { + "label": "岑巩县", + "value": "522626" + }, + { + "label": "天柱县", + "value": "522627" + }, + { + "label": "锦屏县", + "value": "522628" + }, + { + "label": "剑河县", + "value": "522629" + }, + { + "label": "台江县", + "value": "522630" + }, + { + "label": "黎平县", + "value": "522631" + }, + { + "label": "榕江县", + "value": "522632" + }, + { + "label": "从江县", + "value": "522633" + }, + { + "label": "雷山县", + "value": "522634" + }, + { + "label": "麻江县", + "value": "522635" + }, + { + "label": "丹寨县", + "value": "522636" + } + ], + [{ + "label": "都匀市", + "value": "522701" + }, + { + "label": "福泉市", + "value": "522702" + }, + { + "label": "荔波县", + "value": "522722" + }, + { + "label": "贵定县", + "value": "522723" + }, + { + "label": "瓮安县", + "value": "522725" + }, + { + "label": "独山县", + "value": "522726" + }, + { + "label": "平塘县", + "value": "522727" + }, + { + "label": "罗甸县", + "value": "522728" + }, + { + "label": "长顺县", + "value": "522729" + }, + { + "label": "龙里县", + "value": "522730" + }, + { + "label": "惠水县", + "value": "522731" + }, + { + "label": "三都水族自治县", + "value": "522732" + } + ] + ], + [ + [{ + "label": "五华区", + "value": "530102" + }, + { + "label": "盘龙区", + "value": "530103" + }, + { + "label": "官渡区", + "value": "530111" + }, + { + "label": "西山区", + "value": "530112" + }, + { + "label": "东川区", + "value": "530113" + }, + { + "label": "呈贡区", + "value": "530114" + }, + { + "label": "晋宁区", + "value": "530115" + }, + { + "label": "富民县", + "value": "530124" + }, + { + "label": "宜良县", + "value": "530125" + }, + { + "label": "石林彝族自治县", + "value": "530126" + }, + { + "label": "嵩明县", + "value": "530127" + }, + { + "label": "禄劝彝族苗族自治县", + "value": "530128" + }, + { + "label": "寻甸回族彝族自治县", + "value": "530129" + }, + { + "label": "安宁市", + "value": "530181" + } + ], + [{ + "label": "麒麟区", + "value": "530302" + }, + { + "label": "沾益区", + "value": "530303" + }, + { + "label": "马龙县", + "value": "530321" + }, + { + "label": "陆良县", + "value": "530322" + }, + { + "label": "师宗县", + "value": "530323" + }, + { + "label": "罗平县", + "value": "530324" + }, + { + "label": "富源县", + "value": "530325" + }, + { + "label": "会泽县", + "value": "530326" + }, + { + "label": "宣威市", + "value": "530381" + } + ], + [{ + "label": "红塔区", + "value": "530402" + }, + { + "label": "江川区", + "value": "530403" + }, + { + "label": "澄江县", + "value": "530422" + }, + { + "label": "通海县", + "value": "530423" + }, + { + "label": "华宁县", + "value": "530424" + }, + { + "label": "易门县", + "value": "530425" + }, + { + "label": "峨山彝族自治县", + "value": "530426" + }, + { + "label": "新平彝族傣族自治县", + "value": "530427" + }, + { + "label": "元江哈尼族彝族傣族自治县", + "value": "530428" + } + ], + [{ + "label": "隆阳区", + "value": "530502" + }, + { + "label": "施甸县", + "value": "530521" + }, + { + "label": "龙陵县", + "value": "530523" + }, + { + "label": "昌宁县", + "value": "530524" + }, + { + "label": "腾冲市", + "value": "530581" + } + ], + [{ + "label": "昭阳区", + "value": "530602" + }, + { + "label": "鲁甸县", + "value": "530621" + }, + { + "label": "巧家县", + "value": "530622" + }, + { + "label": "盐津县", + "value": "530623" + }, + { + "label": "大关县", + "value": "530624" + }, + { + "label": "永善县", + "value": "530625" + }, + { + "label": "绥江县", + "value": "530626" + }, + { + "label": "镇雄县", + "value": "530627" + }, + { + "label": "彝良县", + "value": "530628" + }, + { + "label": "威信县", + "value": "530629" + }, + { + "label": "水富县", + "value": "530630" + } + ], + [{ + "label": "古城区", + "value": "530702" + }, + { + "label": "玉龙纳西族自治县", + "value": "530721" + }, + { + "label": "永胜县", + "value": "530722" + }, + { + "label": "华坪县", + "value": "530723" + }, + { + "label": "宁蒗彝族自治县", + "value": "530724" + } + ], + [{ + "label": "思茅区", + "value": "530802" + }, + { + "label": "宁洱哈尼族彝族自治县", + "value": "530821" + }, + { + "label": "墨江哈尼族自治县", + "value": "530822" + }, + { + "label": "景东彝族自治县", + "value": "530823" + }, + { + "label": "景谷傣族彝族自治县", + "value": "530824" + }, + { + "label": "镇沅彝族哈尼族拉祜族自治县", + "value": "530825" + }, + { + "label": "江城哈尼族彝族自治县", + "value": "530826" + }, + { + "label": "孟连傣族拉祜族佤族自治县", + "value": "530827" + }, + { + "label": "澜沧拉祜族自治县", + "value": "530828" + }, + { + "label": "西盟佤族自治县", + "value": "530829" + } + ], + [{ + "label": "临翔区", + "value": "530902" + }, + { + "label": "凤庆县", + "value": "530921" + }, + { + "label": "云县", + "value": "530922" + }, + { + "label": "永德县", + "value": "530923" + }, + { + "label": "镇康县", + "value": "530924" + }, + { + "label": "双江拉祜族佤族布朗族傣族自治县", + "value": "530925" + }, + { + "label": "耿马傣族佤族自治县", + "value": "530926" + }, + { + "label": "沧源佤族自治县", + "value": "530927" + } + ], + [{ + "label": "楚雄市", + "value": "532301" + }, + { + "label": "双柏县", + "value": "532322" + }, + { + "label": "牟定县", + "value": "532323" + }, + { + "label": "南华县", + "value": "532324" + }, + { + "label": "姚安县", + "value": "532325" + }, + { + "label": "大姚县", + "value": "532326" + }, + { + "label": "永仁县", + "value": "532327" + }, + { + "label": "元谋县", + "value": "532328" + }, + { + "label": "武定县", + "value": "532329" + }, + { + "label": "禄丰县", + "value": "532331" + } + ], + [{ + "label": "个旧市", + "value": "532501" + }, + { + "label": "开远市", + "value": "532502" + }, + { + "label": "蒙自市", + "value": "532503" + }, + { + "label": "弥勒市", + "value": "532504" + }, + { + "label": "屏边苗族自治县", + "value": "532523" + }, + { + "label": "建水县", + "value": "532524" + }, + { + "label": "石屏县", + "value": "532525" + }, + { + "label": "泸西县", + "value": "532527" + }, + { + "label": "元阳县", + "value": "532528" + }, + { + "label": "红河县", + "value": "532529" + }, + { + "label": "金平苗族瑶族傣族自治县", + "value": "532530" + }, + { + "label": "绿春县", + "value": "532531" + }, + { + "label": "河口瑶族自治县", + "value": "532532" + } + ], + [{ + "label": "文山市", + "value": "532601" + }, + { + "label": "砚山县", + "value": "532622" + }, + { + "label": "西畴县", + "value": "532623" + }, + { + "label": "麻栗坡县", + "value": "532624" + }, + { + "label": "马关县", + "value": "532625" + }, + { + "label": "丘北县", + "value": "532626" + }, + { + "label": "广南县", + "value": "532627" + }, + { + "label": "富宁县", + "value": "532628" + } + ], + [{ + "label": "景洪市", + "value": "532801" + }, + { + "label": "勐海县", + "value": "532822" + }, + { + "label": "勐腊县", + "value": "532823" + } + ], + [{ + "label": "大理市", + "value": "532901" + }, + { + "label": "漾濞彝族自治县", + "value": "532922" + }, + { + "label": "祥云县", + "value": "532923" + }, + { + "label": "宾川县", + "value": "532924" + }, + { + "label": "弥渡县", + "value": "532925" + }, + { + "label": "南涧彝族自治县", + "value": "532926" + }, + { + "label": "巍山彝族回族自治县", + "value": "532927" + }, + { + "label": "永平县", + "value": "532928" + }, + { + "label": "云龙县", + "value": "532929" + }, + { + "label": "洱源县", + "value": "532930" + }, + { + "label": "剑川县", + "value": "532931" + }, + { + "label": "鹤庆县", + "value": "532932" + } + ], + [{ + "label": "瑞丽市", + "value": "533102" + }, + { + "label": "芒市", + "value": "533103" + }, + { + "label": "梁河县", + "value": "533122" + }, + { + "label": "盈江县", + "value": "533123" + }, + { + "label": "陇川县", + "value": "533124" + } + ], + [{ + "label": "泸水市", + "value": "533301" + }, + { + "label": "福贡县", + "value": "533323" + }, + { + "label": "贡山独龙族怒族自治县", + "value": "533324" + }, + { + "label": "兰坪白族普米族自治县", + "value": "533325" + } + ], + [{ + "label": "香格里拉市", + "value": "533401" + }, + { + "label": "德钦县", + "value": "533422" + }, + { + "label": "维西傈僳族自治县", + "value": "533423" + } + ] + ], + [ + [{ + "label": "城关区", + "value": "540102" + }, + { + "label": "堆龙德庆区", + "value": "540103" + }, + { + "label": "林周县", + "value": "540121" + }, + { + "label": "当雄县", + "value": "540122" + }, + { + "label": "尼木县", + "value": "540123" + }, + { + "label": "曲水县", + "value": "540124" + }, + { + "label": "达孜县", + "value": "540126" + }, + { + "label": "墨竹工卡县", + "value": "540127" + }, + { + "label": "格尔木藏青工业园区", + "value": "540171" + }, + { + "label": "拉萨经济技术开发区", + "value": "540172" + }, + { + "label": "西藏文化旅游创意园区", + "value": "540173" + }, + { + "label": "达孜工业园区", + "value": "540174" + } + ], + [{ + "label": "桑珠孜区", + "value": "540202" + }, + { + "label": "南木林县", + "value": "540221" + }, + { + "label": "江孜县", + "value": "540222" + }, + { + "label": "定日县", + "value": "540223" + }, + { + "label": "萨迦县", + "value": "540224" + }, + { + "label": "拉孜县", + "value": "540225" + }, + { + "label": "昂仁县", + "value": "540226" + }, + { + "label": "谢通门县", + "value": "540227" + }, + { + "label": "白朗县", + "value": "540228" + }, + { + "label": "仁布县", + "value": "540229" + }, + { + "label": "康马县", + "value": "540230" + }, + { + "label": "定结县", + "value": "540231" + }, + { + "label": "仲巴县", + "value": "540232" + }, + { + "label": "亚东县", + "value": "540233" + }, + { + "label": "吉隆县", + "value": "540234" + }, + { + "label": "聂拉木县", + "value": "540235" + }, + { + "label": "萨嘎县", + "value": "540236" + }, + { + "label": "岗巴县", + "value": "540237" + } + ], + [{ + "label": "卡若区", + "value": "540302" + }, + { + "label": "江达县", + "value": "540321" + }, + { + "label": "贡觉县", + "value": "540322" + }, + { + "label": "类乌齐县", + "value": "540323" + }, + { + "label": "丁青县", + "value": "540324" + }, + { + "label": "察雅县", + "value": "540325" + }, + { + "label": "八宿县", + "value": "540326" + }, + { + "label": "左贡县", + "value": "540327" + }, + { + "label": "芒康县", + "value": "540328" + }, + { + "label": "洛隆县", + "value": "540329" + }, + { + "label": "边坝县", + "value": "540330" + } + ], + [{ + "label": "巴宜区", + "value": "540402" + }, + { + "label": "工布江达县", + "value": "540421" + }, + { + "label": "米林县", + "value": "540422" + }, + { + "label": "墨脱县", + "value": "540423" + }, + { + "label": "波密县", + "value": "540424" + }, + { + "label": "察隅县", + "value": "540425" + }, + { + "label": "朗县", + "value": "540426" + } + ], + [{ + "label": "乃东区", + "value": "540502" + }, + { + "label": "扎囊县", + "value": "540521" + }, + { + "label": "贡嘎县", + "value": "540522" + }, + { + "label": "桑日县", + "value": "540523" + }, + { + "label": "琼结县", + "value": "540524" + }, + { + "label": "曲松县", + "value": "540525" + }, + { + "label": "措美县", + "value": "540526" + }, + { + "label": "洛扎县", + "value": "540527" + }, + { + "label": "加查县", + "value": "540528" + }, + { + "label": "隆子县", + "value": "540529" + }, + { + "label": "错那县", + "value": "540530" + }, + { + "label": "浪卡子县", + "value": "540531" + } + ], + [{ + "label": "那曲县", + "value": "542421" + }, + { + "label": "嘉黎县", + "value": "542422" + }, + { + "label": "比如县", + "value": "542423" + }, + { + "label": "聂荣县", + "value": "542424" + }, + { + "label": "安多县", + "value": "542425" + }, + { + "label": "申扎县", + "value": "542426" + }, + { + "label": "索县", + "value": "542427" + }, + { + "label": "班戈县", + "value": "542428" + }, + { + "label": "巴青县", + "value": "542429" + }, + { + "label": "尼玛县", + "value": "542430" + }, + { + "label": "双湖县", + "value": "542431" + } + ], + [{ + "label": "普兰县", + "value": "542521" + }, + { + "label": "札达县", + "value": "542522" + }, + { + "label": "噶尔县", + "value": "542523" + }, + { + "label": "日土县", + "value": "542524" + }, + { + "label": "革吉县", + "value": "542525" + }, + { + "label": "改则县", + "value": "542526" + }, + { + "label": "措勤县", + "value": "542527" + } + ] + ], + [ + [{ + "label": "新城区", + "value": "610102" + }, + { + "label": "碑林区", + "value": "610103" + }, + { + "label": "莲湖区", + "value": "610104" + }, + { + "label": "灞桥区", + "value": "610111" + }, + { + "label": "未央区", + "value": "610112" + }, + { + "label": "雁塔区", + "value": "610113" + }, + { + "label": "阎良区", + "value": "610114" + }, + { + "label": "临潼区", + "value": "610115" + }, + { + "label": "长安区", + "value": "610116" + }, + { + "label": "高陵区", + "value": "610117" + }, + { + "label": "鄠邑区", + "value": "610118" + }, + { + "label": "蓝田县", + "value": "610122" + }, + { + "label": "周至县", + "value": "610124" + } + ], + [{ + "label": "王益区", + "value": "610202" + }, + { + "label": "印台区", + "value": "610203" + }, + { + "label": "耀州区", + "value": "610204" + }, + { + "label": "宜君县", + "value": "610222" + } + ], + [{ + "label": "渭滨区", + "value": "610302" + }, + { + "label": "金台区", + "value": "610303" + }, + { + "label": "陈仓区", + "value": "610304" + }, + { + "label": "凤翔县", + "value": "610322" + }, + { + "label": "岐山县", + "value": "610323" + }, + { + "label": "扶风县", + "value": "610324" + }, + { + "label": "眉县", + "value": "610326" + }, + { + "label": "陇县", + "value": "610327" + }, + { + "label": "千阳县", + "value": "610328" + }, + { + "label": "麟游县", + "value": "610329" + }, + { + "label": "凤县", + "value": "610330" + }, + { + "label": "太白县", + "value": "610331" + } + ], + [{ + "label": "秦都区", + "value": "610402" + }, + { + "label": "杨陵区", + "value": "610403" + }, + { + "label": "渭城区", + "value": "610404" + }, + { + "label": "三原县", + "value": "610422" + }, + { + "label": "泾阳县", + "value": "610423" + }, + { + "label": "乾县", + "value": "610424" + }, + { + "label": "礼泉县", + "value": "610425" + }, + { + "label": "永寿县", + "value": "610426" + }, + { + "label": "彬县", + "value": "610427" + }, + { + "label": "长武县", + "value": "610428" + }, + { + "label": "旬邑县", + "value": "610429" + }, + { + "label": "淳化县", + "value": "610430" + }, + { + "label": "武功县", + "value": "610431" + }, + { + "label": "兴平市", + "value": "610481" + } + ], + [{ + "label": "临渭区", + "value": "610502" + }, + { + "label": "华州区", + "value": "610503" + }, + { + "label": "潼关县", + "value": "610522" + }, + { + "label": "大荔县", + "value": "610523" + }, + { + "label": "合阳县", + "value": "610524" + }, + { + "label": "澄城县", + "value": "610525" + }, + { + "label": "蒲城县", + "value": "610526" + }, + { + "label": "白水县", + "value": "610527" + }, + { + "label": "富平县", + "value": "610528" + }, + { + "label": "韩城市", + "value": "610581" + }, + { + "label": "华阴市", + "value": "610582" + } + ], + [{ + "label": "宝塔区", + "value": "610602" + }, + { + "label": "安塞区", + "value": "610603" + }, + { + "label": "延长县", + "value": "610621" + }, + { + "label": "延川县", + "value": "610622" + }, + { + "label": "子长县", + "value": "610623" + }, + { + "label": "志丹县", + "value": "610625" + }, + { + "label": "吴起县", + "value": "610626" + }, + { + "label": "甘泉县", + "value": "610627" + }, + { + "label": "富县", + "value": "610628" + }, + { + "label": "洛川县", + "value": "610629" + }, + { + "label": "宜川县", + "value": "610630" + }, + { + "label": "黄龙县", + "value": "610631" + }, + { + "label": "黄陵县", + "value": "610632" + } + ], + [{ + "label": "汉台区", + "value": "610702" + }, + { + "label": "南郑区", + "value": "610703" + }, + { + "label": "城固县", + "value": "610722" + }, + { + "label": "洋县", + "value": "610723" + }, + { + "label": "西乡县", + "value": "610724" + }, + { + "label": "勉县", + "value": "610725" + }, + { + "label": "宁强县", + "value": "610726" + }, + { + "label": "略阳县", + "value": "610727" + }, + { + "label": "镇巴县", + "value": "610728" + }, + { + "label": "留坝县", + "value": "610729" + }, + { + "label": "佛坪县", + "value": "610730" + } + ], + [{ + "label": "榆阳区", + "value": "610802" + }, + { + "label": "横山区", + "value": "610803" + }, + { + "label": "府谷县", + "value": "610822" + }, + { + "label": "靖边县", + "value": "610824" + }, + { + "label": "定边县", + "value": "610825" + }, + { + "label": "绥德县", + "value": "610826" + }, + { + "label": "米脂县", + "value": "610827" + }, + { + "label": "佳县", + "value": "610828" + }, + { + "label": "吴堡县", + "value": "610829" + }, + { + "label": "清涧县", + "value": "610830" + }, + { + "label": "子洲县", + "value": "610831" + }, + { + "label": "神木市", + "value": "610881" + } + ], + [{ + "label": "汉滨区", + "value": "610902" + }, + { + "label": "汉阴县", + "value": "610921" + }, + { + "label": "石泉县", + "value": "610922" + }, + { + "label": "宁陕县", + "value": "610923" + }, + { + "label": "紫阳县", + "value": "610924" + }, + { + "label": "岚皋县", + "value": "610925" + }, + { + "label": "平利县", + "value": "610926" + }, + { + "label": "镇坪县", + "value": "610927" + }, + { + "label": "旬阳县", + "value": "610928" + }, + { + "label": "白河县", + "value": "610929" + } + ], + [{ + "label": "商州区", + "value": "611002" + }, + { + "label": "洛南县", + "value": "611021" + }, + { + "label": "丹凤县", + "value": "611022" + }, + { + "label": "商南县", + "value": "611023" + }, + { + "label": "山阳县", + "value": "611024" + }, + { + "label": "镇安县", + "value": "611025" + }, + { + "label": "柞水县", + "value": "611026" + } + ] + ], + [ + [{ + "label": "城关区", + "value": "620102" + }, + { + "label": "七里河区", + "value": "620103" + }, + { + "label": "西固区", + "value": "620104" + }, + { + "label": "安宁区", + "value": "620105" + }, + { + "label": "红古区", + "value": "620111" + }, + { + "label": "永登县", + "value": "620121" + }, + { + "label": "皋兰县", + "value": "620122" + }, + { + "label": "榆中县", + "value": "620123" + }, + { + "label": "兰州新区", + "value": "620171" + } + ], + [{ + "label": "嘉峪关市", + "value": "620201" + }], + [{ + "label": "金川区", + "value": "620302" + }, + { + "label": "永昌县", + "value": "620321" + } + ], + [{ + "label": "白银区", + "value": "620402" + }, + { + "label": "平川区", + "value": "620403" + }, + { + "label": "靖远县", + "value": "620421" + }, + { + "label": "会宁县", + "value": "620422" + }, + { + "label": "景泰县", + "value": "620423" + } + ], + [{ + "label": "秦州区", + "value": "620502" + }, + { + "label": "麦积区", + "value": "620503" + }, + { + "label": "清水县", + "value": "620521" + }, + { + "label": "秦安县", + "value": "620522" + }, + { + "label": "甘谷县", + "value": "620523" + }, + { + "label": "武山县", + "value": "620524" + }, + { + "label": "张家川回族自治县", + "value": "620525" + } + ], + [{ + "label": "凉州区", + "value": "620602" + }, + { + "label": "民勤县", + "value": "620621" + }, + { + "label": "古浪县", + "value": "620622" + }, + { + "label": "天祝藏族自治县", + "value": "620623" + } + ], + [{ + "label": "甘州区", + "value": "620702" + }, + { + "label": "肃南裕固族自治县", + "value": "620721" + }, + { + "label": "民乐县", + "value": "620722" + }, + { + "label": "临泽县", + "value": "620723" + }, + { + "label": "高台县", + "value": "620724" + }, + { + "label": "山丹县", + "value": "620725" + } + ], + [{ + "label": "崆峒区", + "value": "620802" + }, + { + "label": "泾川县", + "value": "620821" + }, + { + "label": "灵台县", + "value": "620822" + }, + { + "label": "崇信县", + "value": "620823" + }, + { + "label": "华亭县", + "value": "620824" + }, + { + "label": "庄浪县", + "value": "620825" + }, + { + "label": "静宁县", + "value": "620826" + }, + { + "label": "平凉工业园区", + "value": "620871" + } + ], + [{ + "label": "肃州区", + "value": "620902" + }, + { + "label": "金塔县", + "value": "620921" + }, + { + "label": "瓜州县", + "value": "620922" + }, + { + "label": "肃北蒙古族自治县", + "value": "620923" + }, + { + "label": "阿克塞哈萨克族自治县", + "value": "620924" + }, + { + "label": "玉门市", + "value": "620981" + }, + { + "label": "敦煌市", + "value": "620982" + } + ], + [{ + "label": "西峰区", + "value": "621002" + }, + { + "label": "庆城县", + "value": "621021" + }, + { + "label": "环县", + "value": "621022" + }, + { + "label": "华池县", + "value": "621023" + }, + { + "label": "合水县", + "value": "621024" + }, + { + "label": "正宁县", + "value": "621025" + }, + { + "label": "宁县", + "value": "621026" + }, + { + "label": "镇原县", + "value": "621027" + } + ], + [{ + "label": "安定区", + "value": "621102" + }, + { + "label": "通渭县", + "value": "621121" + }, + { + "label": "陇西县", + "value": "621122" + }, + { + "label": "渭源县", + "value": "621123" + }, + { + "label": "临洮县", + "value": "621124" + }, + { + "label": "漳县", + "value": "621125" + }, + { + "label": "岷县", + "value": "621126" + } + ], + [{ + "label": "武都区", + "value": "621202" + }, + { + "label": "成县", + "value": "621221" + }, + { + "label": "文县", + "value": "621222" + }, + { + "label": "宕昌县", + "value": "621223" + }, + { + "label": "康县", + "value": "621224" + }, + { + "label": "西和县", + "value": "621225" + }, + { + "label": "礼县", + "value": "621226" + }, + { + "label": "徽县", + "value": "621227" + }, + { + "label": "两当县", + "value": "621228" + } + ], + [{ + "label": "临夏市", + "value": "622901" + }, + { + "label": "临夏县", + "value": "622921" + }, + { + "label": "康乐县", + "value": "622922" + }, + { + "label": "永靖县", + "value": "622923" + }, + { + "label": "广河县", + "value": "622924" + }, + { + "label": "和政县", + "value": "622925" + }, + { + "label": "东乡族自治县", + "value": "622926" + }, + { + "label": "积石山保安族东乡族撒拉族自治县", + "value": "622927" + } + ], + [{ + "label": "合作市", + "value": "623001" + }, + { + "label": "临潭县", + "value": "623021" + }, + { + "label": "卓尼县", + "value": "623022" + }, + { + "label": "舟曲县", + "value": "623023" + }, + { + "label": "迭部县", + "value": "623024" + }, + { + "label": "玛曲县", + "value": "623025" + }, + { + "label": "碌曲县", + "value": "623026" + }, + { + "label": "夏河县", + "value": "623027" + } + ] + ], + [ + [{ + "label": "城东区", + "value": "630102" + }, + { + "label": "城中区", + "value": "630103" + }, + { + "label": "城西区", + "value": "630104" + }, + { + "label": "城北区", + "value": "630105" + }, + { + "label": "大通回族土族自治县", + "value": "630121" + }, + { + "label": "湟中县", + "value": "630122" + }, + { + "label": "湟源县", + "value": "630123" + } + ], + [{ + "label": "乐都区", + "value": "630202" + }, + { + "label": "平安区", + "value": "630203" + }, + { + "label": "民和回族土族自治县", + "value": "630222" + }, + { + "label": "互助土族自治县", + "value": "630223" + }, + { + "label": "化隆回族自治县", + "value": "630224" + }, + { + "label": "循化撒拉族自治县", + "value": "630225" + } + ], + [{ + "label": "门源回族自治县", + "value": "632221" + }, + { + "label": "祁连县", + "value": "632222" + }, + { + "label": "海晏县", + "value": "632223" + }, + { + "label": "刚察县", + "value": "632224" + } + ], + [{ + "label": "同仁县", + "value": "632321" + }, + { + "label": "尖扎县", + "value": "632322" + }, + { + "label": "泽库县", + "value": "632323" + }, + { + "label": "河南蒙古族自治县", + "value": "632324" + } + ], + [{ + "label": "共和县", + "value": "632521" + }, + { + "label": "同德县", + "value": "632522" + }, + { + "label": "贵德县", + "value": "632523" + }, + { + "label": "兴海县", + "value": "632524" + }, + { + "label": "贵南县", + "value": "632525" + } + ], + [{ + "label": "玛沁县", + "value": "632621" + }, + { + "label": "班玛县", + "value": "632622" + }, + { + "label": "甘德县", + "value": "632623" + }, + { + "label": "达日县", + "value": "632624" + }, + { + "label": "久治县", + "value": "632625" + }, + { + "label": "玛多县", + "value": "632626" + } + ], + [{ + "label": "玉树市", + "value": "632701" + }, + { + "label": "杂多县", + "value": "632722" + }, + { + "label": "称多县", + "value": "632723" + }, + { + "label": "治多县", + "value": "632724" + }, + { + "label": "囊谦县", + "value": "632725" + }, + { + "label": "曲麻莱县", + "value": "632726" + } + ], + [{ + "label": "格尔木市", + "value": "632801" + }, + { + "label": "德令哈市", + "value": "632802" + }, + { + "label": "乌兰县", + "value": "632821" + }, + { + "label": "都兰县", + "value": "632822" + }, + { + "label": "天峻县", + "value": "632823" + }, + { + "label": "大柴旦行政委员会", + "value": "632857" + }, + { + "label": "冷湖行政委员会", + "value": "632858" + }, + { + "label": "茫崖行政委员会", + "value": "632859" + } + ] + ], + [ + [{ + "label": "兴庆区", + "value": "640104" + }, + { + "label": "西夏区", + "value": "640105" + }, + { + "label": "金凤区", + "value": "640106" + }, + { + "label": "永宁县", + "value": "640121" + }, + { + "label": "贺兰县", + "value": "640122" + }, + { + "label": "灵武市", + "value": "640181" + } + ], + [{ + "label": "大武口区", + "value": "640202" + }, + { + "label": "惠农区", + "value": "640205" + }, + { + "label": "平罗县", + "value": "640221" + } + ], + [{ + "label": "利通区", + "value": "640302" + }, + { + "label": "红寺堡区", + "value": "640303" + }, + { + "label": "盐池县", + "value": "640323" + }, + { + "label": "同心县", + "value": "640324" + }, + { + "label": "青铜峡市", + "value": "640381" + } + ], + [{ + "label": "原州区", + "value": "640402" + }, + { + "label": "西吉县", + "value": "640422" + }, + { + "label": "隆德县", + "value": "640423" + }, + { + "label": "泾源县", + "value": "640424" + }, + { + "label": "彭阳县", + "value": "640425" + } + ], + [{ + "label": "沙坡头区", + "value": "640502" + }, + { + "label": "中宁县", + "value": "640521" + }, + { + "label": "海原县", + "value": "640522" + } + ] + ], + [ + [{ + "label": "天山区", + "value": "650102" + }, + { + "label": "沙依巴克区", + "value": "650103" + }, + { + "label": "新市区", + "value": "650104" + }, + { + "label": "水磨沟区", + "value": "650105" + }, + { + "label": "头屯河区", + "value": "650106" + }, + { + "label": "达坂城区", + "value": "650107" + }, + { + "label": "米东区", + "value": "650109" + }, + { + "label": "乌鲁木齐县", + "value": "650121" + }, + { + "label": "乌鲁木齐经济技术开发区", + "value": "650171" + }, + { + "label": "乌鲁木齐高新技术产业开发区", + "value": "650172" + } + ], + [{ + "label": "独山子区", + "value": "650202" + }, + { + "label": "克拉玛依区", + "value": "650203" + }, + { + "label": "白碱滩区", + "value": "650204" + }, + { + "label": "乌尔禾区", + "value": "650205" + } + ], + [{ + "label": "高昌区", + "value": "650402" + }, + { + "label": "鄯善县", + "value": "650421" + }, + { + "label": "托克逊县", + "value": "650422" + } + ], + [{ + "label": "伊州区", + "value": "650502" + }, + { + "label": "巴里坤哈萨克自治县", + "value": "650521" + }, + { + "label": "伊吾县", + "value": "650522" + } + ], + [{ + "label": "昌吉市", + "value": "652301" + }, + { + "label": "阜康市", + "value": "652302" + }, + { + "label": "呼图壁县", + "value": "652323" + }, + { + "label": "玛纳斯县", + "value": "652324" + }, + { + "label": "奇台县", + "value": "652325" + }, + { + "label": "吉木萨尔县", + "value": "652327" + }, + { + "label": "木垒哈萨克自治县", + "value": "652328" + } + ], + [{ + "label": "博乐市", + "value": "652701" + }, + { + "label": "阿拉山口市", + "value": "652702" + }, + { + "label": "精河县", + "value": "652722" + }, + { + "label": "温泉县", + "value": "652723" + } + ], + [{ + "label": "库尔勒市", + "value": "652801" + }, + { + "label": "轮台县", + "value": "652822" + }, + { + "label": "尉犁县", + "value": "652823" + }, + { + "label": "若羌县", + "value": "652824" + }, + { + "label": "且末县", + "value": "652825" + }, + { + "label": "焉耆回族自治县", + "value": "652826" + }, + { + "label": "和静县", + "value": "652827" + }, + { + "label": "和硕县", + "value": "652828" + }, + { + "label": "博湖县", + "value": "652829" + }, + { + "label": "库尔勒经济技术开发区", + "value": "652871" + } + ], + [{ + "label": "阿克苏市", + "value": "652901" + }, + { + "label": "温宿县", + "value": "652922" + }, + { + "label": "库车县", + "value": "652923" + }, + { + "label": "沙雅县", + "value": "652924" + }, + { + "label": "新和县", + "value": "652925" + }, + { + "label": "拜城县", + "value": "652926" + }, + { + "label": "乌什县", + "value": "652927" + }, + { + "label": "阿瓦提县", + "value": "652928" + }, + { + "label": "柯坪县", + "value": "652929" + } + ], + [{ + "label": "阿图什市", + "value": "653001" + }, + { + "label": "阿克陶县", + "value": "653022" + }, + { + "label": "阿合奇县", + "value": "653023" + }, + { + "label": "乌恰县", + "value": "653024" + } + ], + [{ + "label": "喀什市", + "value": "653101" + }, + { + "label": "疏附县", + "value": "653121" + }, + { + "label": "疏勒县", + "value": "653122" + }, + { + "label": "英吉沙县", + "value": "653123" + }, + { + "label": "泽普县", + "value": "653124" + }, + { + "label": "莎车县", + "value": "653125" + }, + { + "label": "叶城县", + "value": "653126" + }, + { + "label": "麦盖提县", + "value": "653127" + }, + { + "label": "岳普湖县", + "value": "653128" + }, + { + "label": "伽师县", + "value": "653129" + }, + { + "label": "巴楚县", + "value": "653130" + }, + { + "label": "塔什库尔干塔吉克自治县", + "value": "653131" + } + ], + [{ + "label": "和田市", + "value": "653201" + }, + { + "label": "和田县", + "value": "653221" + }, + { + "label": "墨玉县", + "value": "653222" + }, + { + "label": "皮山县", + "value": "653223" + }, + { + "label": "洛浦县", + "value": "653224" + }, + { + "label": "策勒县", + "value": "653225" + }, + { + "label": "于田县", + "value": "653226" + }, + { + "label": "民丰县", + "value": "653227" + } + ], + [{ + "label": "伊宁市", + "value": "654002" + }, + { + "label": "奎屯市", + "value": "654003" + }, + { + "label": "霍尔果斯市", + "value": "654004" + }, + { + "label": "伊宁县", + "value": "654021" + }, + { + "label": "察布查尔锡伯自治县", + "value": "654022" + }, + { + "label": "霍城县", + "value": "654023" + }, + { + "label": "巩留县", + "value": "654024" + }, + { + "label": "新源县", + "value": "654025" + }, + { + "label": "昭苏县", + "value": "654026" + }, + { + "label": "特克斯县", + "value": "654027" + }, + { + "label": "尼勒克县", + "value": "654028" + } + ], + [{ + "label": "塔城市", + "value": "654201" + }, + { + "label": "乌苏市", + "value": "654202" + }, + { + "label": "额敏县", + "value": "654221" + }, + { + "label": "沙湾县", + "value": "654223" + }, + { + "label": "托里县", + "value": "654224" + }, + { + "label": "裕民县", + "value": "654225" + }, + { + "label": "和布克赛尔蒙古自治县", + "value": "654226" + } + ], + [{ + "label": "阿勒泰市", + "value": "654301" + }, + { + "label": "布尔津县", + "value": "654321" + }, + { + "label": "富蕴县", + "value": "654322" + }, + { + "label": "福海县", + "value": "654323" + }, + { + "label": "哈巴河县", + "value": "654324" + }, + { + "label": "青河县", + "value": "654325" + }, + { + "label": "吉木乃县", + "value": "654326" + } + ], + [{ + "label": "石河子市", + "value": "659001" + }, + { + "label": "阿拉尔市", + "value": "659002" + }, + { + "label": "图木舒克市", + "value": "659003" + }, + { + "label": "五家渠市", + "value": "659004" + }, + { + "label": "铁门关市", + "value": "659006" + } + ] + ], + [ + [{ + "label": "台北", + "value": "660101" + }], + [{ + "label": "高雄", + "value": "660201" + }], + [{ + "label": "基隆", + "value": "660301" + }], + [{ + "label": "台中", + "value": "660401" + }], + [{ + "label": "台南", + "value": "660501" + }], + [{ + "label": "新竹", + "value": "660601" + }], + [{ + "label": "嘉义", + "value": "660701" + }], + [{ + "label": "宜兰", + "value": "660801" + }], + [{ + "label": "桃园", + "value": "660901" + }], + [{ + "label": "苗栗", + "value": "661001" + }], + [{ + "label": "彰化", + "value": "661101" + }], + [{ + "label": "南投", + "value": "661201" + }], + [{ + "label": "云林", + "value": "661301" + }], + [{ + "label": "屏东", + "value": "661401" + }], + [{ + "label": "台东", + "value": "661501" + }], + [{ + "label": "花莲", + "value": "661601" + }], + [{ + "label": "澎湖", + "value": "661701" + }] + ], + [ + [{ + "label": "香港岛", + "value": "670101" + }], + [{ + "label": "九龙", + "value": "670201" + }], + [{ + "label": "新界", + "value": "670301" + }] + ], + [ + [{ + "label": "澳门半岛", + "value": "680101" + }], + [{ + "label": "氹仔岛", + "value": "680201" + }], + [{ + "label": "路环岛", + "value": "680301" + }], + [{ + "label": "路氹城", + "value": "680401" + }] + ] +] +export default areaData; diff --git a/components/mpvue-citypicker/city-data/city.js b/components/mpvue-citypicker/city-data/city.js new file mode 100644 index 0000000..8c1dc26 --- /dev/null +++ b/components/mpvue-citypicker/city-data/city.js @@ -0,0 +1,1503 @@ +/* eslint-disable */ +var cityData = [ + [{ + "label": "市辖区", + "value": "1101" + }], + [{ + "label": "市辖区", + "value": "1201" + }], + [{ + "label": "石家庄市", + "value": "1301" + }, + { + "label": "唐山市", + "value": "1302" + }, + { + "label": "秦皇岛市", + "value": "1303" + }, + { + "label": "邯郸市", + "value": "1304" + }, + { + "label": "邢台市", + "value": "1305" + }, + { + "label": "保定市", + "value": "1306" + }, + { + "label": "张家口市", + "value": "1307" + }, + { + "label": "承德市", + "value": "1308" + }, + { + "label": "沧州市", + "value": "1309" + }, + { + "label": "廊坊市", + "value": "1310" + }, + { + "label": "衡水市", + "value": "1311" + } + ], + [{ + "label": "太原市", + "value": "1401" + }, + { + "label": "大同市", + "value": "1402" + }, + { + "label": "阳泉市", + "value": "1403" + }, + { + "label": "长治市", + "value": "1404" + }, + { + "label": "晋城市", + "value": "1405" + }, + { + "label": "朔州市", + "value": "1406" + }, + { + "label": "晋中市", + "value": "1407" + }, + { + "label": "运城市", + "value": "1408" + }, + { + "label": "忻州市", + "value": "1409" + }, + { + "label": "临汾市", + "value": "1410" + }, + { + "label": "吕梁市", + "value": "1411" + } + ], + [{ + "label": "呼和浩特市", + "value": "1501" + }, + { + "label": "包头市", + "value": "1502" + }, + { + "label": "乌海市", + "value": "1503" + }, + { + "label": "赤峰市", + "value": "1504" + }, + { + "label": "通辽市", + "value": "1505" + }, + { + "label": "鄂尔多斯市", + "value": "1506" + }, + { + "label": "呼伦贝尔市", + "value": "1507" + }, + { + "label": "巴彦淖尔市", + "value": "1508" + }, + { + "label": "乌兰察布市", + "value": "1509" + }, + { + "label": "兴安盟", + "value": "1522" + }, + { + "label": "锡林郭勒盟", + "value": "1525" + }, + { + "label": "阿拉善盟", + "value": "1529" + } + ], + [{ + "label": "沈阳市", + "value": "2101" + }, + { + "label": "大连市", + "value": "2102" + }, + { + "label": "鞍山市", + "value": "2103" + }, + { + "label": "抚顺市", + "value": "2104" + }, + { + "label": "本溪市", + "value": "2105" + }, + { + "label": "丹东市", + "value": "2106" + }, + { + "label": "锦州市", + "value": "2107" + }, + { + "label": "营口市", + "value": "2108" + }, + { + "label": "阜新市", + "value": "2109" + }, + { + "label": "辽阳市", + "value": "2110" + }, + { + "label": "盘锦市", + "value": "2111" + }, + { + "label": "铁岭市", + "value": "2112" + }, + { + "label": "朝阳市", + "value": "2113" + }, + { + "label": "葫芦岛市", + "value": "2114" + } + ], + [{ + "label": "长春市", + "value": "2201" + }, + { + "label": "吉林市", + "value": "2202" + }, + { + "label": "四平市", + "value": "2203" + }, + { + "label": "辽源市", + "value": "2204" + }, + { + "label": "通化市", + "value": "2205" + }, + { + "label": "白山市", + "value": "2206" + }, + { + "label": "松原市", + "value": "2207" + }, + { + "label": "白城市", + "value": "2208" + }, + { + "label": "延边朝鲜族自治州", + "value": "2224" + } + ], + [{ + "label": "哈尔滨市", + "value": "2301" + }, + { + "label": "齐齐哈尔市", + "value": "2302" + }, + { + "label": "鸡西市", + "value": "2303" + }, + { + "label": "鹤岗市", + "value": "2304" + }, + { + "label": "双鸭山市", + "value": "2305" + }, + { + "label": "大庆市", + "value": "2306" + }, + { + "label": "伊春市", + "value": "2307" + }, + { + "label": "佳木斯市", + "value": "2308" + }, + { + "label": "七台河市", + "value": "2309" + }, + { + "label": "牡丹江市", + "value": "2310" + }, + { + "label": "黑河市", + "value": "2311" + }, + { + "label": "绥化市", + "value": "2312" + }, + { + "label": "大兴安岭地区", + "value": "2327" + } + ], + [{ + "label": "市辖区", + "value": "3101" + }], + [{ + "label": "南京市", + "value": "3201" + }, + { + "label": "无锡市", + "value": "3202" + }, + { + "label": "徐州市", + "value": "3203" + }, + { + "label": "常州市", + "value": "3204" + }, + { + "label": "苏州市", + "value": "3205" + }, + { + "label": "南通市", + "value": "3206" + }, + { + "label": "连云港市", + "value": "3207" + }, + { + "label": "淮安市", + "value": "3208" + }, + { + "label": "盐城市", + "value": "3209" + }, + { + "label": "扬州市", + "value": "3210" + }, + { + "label": "镇江市", + "value": "3211" + }, + { + "label": "泰州市", + "value": "3212" + }, + { + "label": "宿迁市", + "value": "3213" + } + ], + [{ + "label": "杭州市", + "value": "3301" + }, + { + "label": "宁波市", + "value": "3302" + }, + { + "label": "温州市", + "value": "3303" + }, + { + "label": "嘉兴市", + "value": "3304" + }, + { + "label": "湖州市", + "value": "3305" + }, + { + "label": "绍兴市", + "value": "3306" + }, + { + "label": "金华市", + "value": "3307" + }, + { + "label": "衢州市", + "value": "3308" + }, + { + "label": "舟山市", + "value": "3309" + }, + { + "label": "台州市", + "value": "3310" + }, + { + "label": "丽水市", + "value": "3311" + } + ], + [{ + "label": "合肥市", + "value": "3401" + }, + { + "label": "芜湖市", + "value": "3402" + }, + { + "label": "蚌埠市", + "value": "3403" + }, + { + "label": "淮南市", + "value": "3404" + }, + { + "label": "马鞍山市", + "value": "3405" + }, + { + "label": "淮北市", + "value": "3406" + }, + { + "label": "铜陵市", + "value": "3407" + }, + { + "label": "安庆市", + "value": "3408" + }, + { + "label": "黄山市", + "value": "3410" + }, + { + "label": "滁州市", + "value": "3411" + }, + { + "label": "阜阳市", + "value": "3412" + }, + { + "label": "宿州市", + "value": "3413" + }, + { + "label": "六安市", + "value": "3415" + }, + { + "label": "亳州市", + "value": "3416" + }, + { + "label": "池州市", + "value": "3417" + }, + { + "label": "宣城市", + "value": "3418" + } + ], + [{ + "label": "福州市", + "value": "3501" + }, + { + "label": "厦门市", + "value": "3502" + }, + { + "label": "莆田市", + "value": "3503" + }, + { + "label": "三明市", + "value": "3504" + }, + { + "label": "泉州市", + "value": "3505" + }, + { + "label": "漳州市", + "value": "3506" + }, + { + "label": "南平市", + "value": "3507" + }, + { + "label": "龙岩市", + "value": "3508" + }, + { + "label": "宁德市", + "value": "3509" + } + ], + [{ + "label": "南昌市", + "value": "3601" + }, + { + "label": "景德镇市", + "value": "3602" + }, + { + "label": "萍乡市", + "value": "3603" + }, + { + "label": "九江市", + "value": "3604" + }, + { + "label": "新余市", + "value": "3605" + }, + { + "label": "鹰潭市", + "value": "3606" + }, + { + "label": "赣州市", + "value": "3607" + }, + { + "label": "吉安市", + "value": "3608" + }, + { + "label": "宜春市", + "value": "3609" + }, + { + "label": "抚州市", + "value": "3610" + }, + { + "label": "上饶市", + "value": "3611" + } + ], + [{ + "label": "济南市", + "value": "3701" + }, + { + "label": "青岛市", + "value": "3702" + }, + { + "label": "淄博市", + "value": "3703" + }, + { + "label": "枣庄市", + "value": "3704" + }, + { + "label": "东营市", + "value": "3705" + }, + { + "label": "烟台市", + "value": "3706" + }, + { + "label": "潍坊市", + "value": "3707" + }, + { + "label": "济宁市", + "value": "3708" + }, + { + "label": "泰安市", + "value": "3709" + }, + { + "label": "威海市", + "value": "3710" + }, + { + "label": "日照市", + "value": "3711" + }, + { + "label": "莱芜市", + "value": "3712" + }, + { + "label": "临沂市", + "value": "3713" + }, + { + "label": "德州市", + "value": "3714" + }, + { + "label": "聊城市", + "value": "3715" + }, + { + "label": "滨州市", + "value": "3716" + }, + { + "label": "菏泽市", + "value": "3717" + } + ], + [{ + "label": "郑州市", + "value": "4101" + }, + { + "label": "开封市", + "value": "4102" + }, + { + "label": "洛阳市", + "value": "4103" + }, + { + "label": "平顶山市", + "value": "4104" + }, + { + "label": "安阳市", + "value": "4105" + }, + { + "label": "鹤壁市", + "value": "4106" + }, + { + "label": "新乡市", + "value": "4107" + }, + { + "label": "焦作市", + "value": "4108" + }, + { + "label": "濮阳市", + "value": "4109" + }, + { + "label": "许昌市", + "value": "4110" + }, + { + "label": "漯河市", + "value": "4111" + }, + { + "label": "三门峡市", + "value": "4112" + }, + { + "label": "南阳市", + "value": "4113" + }, + { + "label": "商丘市", + "value": "4114" + }, + { + "label": "信阳市", + "value": "4115" + }, + { + "label": "周口市", + "value": "4116" + }, + { + "label": "驻马店市", + "value": "4117" + }, + { + "label": "省直辖县级行政区划", + "value": "4190" + } + ], + [{ + "label": "武汉市", + "value": "4201" + }, + { + "label": "黄石市", + "value": "4202" + }, + { + "label": "十堰市", + "value": "4203" + }, + { + "label": "宜昌市", + "value": "4205" + }, + { + "label": "襄阳市", + "value": "4206" + }, + { + "label": "鄂州市", + "value": "4207" + }, + { + "label": "荆门市", + "value": "4208" + }, + { + "label": "孝感市", + "value": "4209" + }, + { + "label": "荆州市", + "value": "4210" + }, + { + "label": "黄冈市", + "value": "4211" + }, + { + "label": "咸宁市", + "value": "4212" + }, + { + "label": "随州市", + "value": "4213" + }, + { + "label": "恩施土家族苗族自治州", + "value": "4228" + }, + { + "label": "省直辖县级行政区划", + "value": "4290" + } + ], + [{ + "label": "长沙市", + "value": "4301" + }, + { + "label": "株洲市", + "value": "4302" + }, + { + "label": "湘潭市", + "value": "4303" + }, + { + "label": "衡阳市", + "value": "4304" + }, + { + "label": "邵阳市", + "value": "4305" + }, + { + "label": "岳阳市", + "value": "4306" + }, + { + "label": "常德市", + "value": "4307" + }, + { + "label": "张家界市", + "value": "4308" + }, + { + "label": "益阳市", + "value": "4309" + }, + { + "label": "郴州市", + "value": "4310" + }, + { + "label": "永州市", + "value": "4311" + }, + { + "label": "怀化市", + "value": "4312" + }, + { + "label": "娄底市", + "value": "4313" + }, + { + "label": "湘西土家族苗族自治州", + "value": "4331" + } + ], + [{ + "label": "广州市", + "value": "4401" + }, + { + "label": "韶关市", + "value": "4402" + }, + { + "label": "深圳市", + "value": "4403" + }, + { + "label": "珠海市", + "value": "4404" + }, + { + "label": "汕头市", + "value": "4405" + }, + { + "label": "佛山市", + "value": "4406" + }, + { + "label": "江门市", + "value": "4407" + }, + { + "label": "湛江市", + "value": "4408" + }, + { + "label": "茂名市", + "value": "4409" + }, + { + "label": "肇庆市", + "value": "4412" + }, + { + "label": "惠州市", + "value": "4413" + }, + { + "label": "梅州市", + "value": "4414" + }, + { + "label": "汕尾市", + "value": "4415" + }, + { + "label": "河源市", + "value": "4416" + }, + { + "label": "阳江市", + "value": "4417" + }, + { + "label": "清远市", + "value": "4418" + }, + { + "label": "东莞市", + "value": "4419" + }, + { + "label": "中山市", + "value": "4420" + }, + { + "label": "潮州市", + "value": "4451" + }, + { + "label": "揭阳市", + "value": "4452" + }, + { + "label": "云浮市", + "value": "4453" + } + ], + [{ + "label": "南宁市", + "value": "4501" + }, + { + "label": "柳州市", + "value": "4502" + }, + { + "label": "桂林市", + "value": "4503" + }, + { + "label": "梧州市", + "value": "4504" + }, + { + "label": "北海市", + "value": "4505" + }, + { + "label": "防城港市", + "value": "4506" + }, + { + "label": "钦州市", + "value": "4507" + }, + { + "label": "贵港市", + "value": "4508" + }, + { + "label": "玉林市", + "value": "4509" + }, + { + "label": "百色市", + "value": "4510" + }, + { + "label": "贺州市", + "value": "4511" + }, + { + "label": "河池市", + "value": "4512" + }, + { + "label": "来宾市", + "value": "4513" + }, + { + "label": "崇左市", + "value": "4514" + } + ], + [{ + "label": "海口市", + "value": "4601" + }, + { + "label": "三亚市", + "value": "4602" + }, + { + "label": "三沙市", + "value": "4603" + }, + { + "label": "儋州市", + "value": "4604" + }, + { + "label": "省直辖县级行政区划", + "value": "4690" + } + ], + [{ + "label": "市辖区", + "value": "5001" + }, + { + "label": "县", + "value": "5002" + } + ], + [{ + "label": "成都市", + "value": "5101" + }, + { + "label": "自贡市", + "value": "5103" + }, + { + "label": "攀枝花市", + "value": "5104" + }, + { + "label": "泸州市", + "value": "5105" + }, + { + "label": "德阳市", + "value": "5106" + }, + { + "label": "绵阳市", + "value": "5107" + }, + { + "label": "广元市", + "value": "5108" + }, + { + "label": "遂宁市", + "value": "5109" + }, + { + "label": "内江市", + "value": "5110" + }, + { + "label": "乐山市", + "value": "5111" + }, + { + "label": "南充市", + "value": "5113" + }, + { + "label": "眉山市", + "value": "5114" + }, + { + "label": "宜宾市", + "value": "5115" + }, + { + "label": "广安市", + "value": "5116" + }, + { + "label": "达州市", + "value": "5117" + }, + { + "label": "雅安市", + "value": "5118" + }, + { + "label": "巴中市", + "value": "5119" + }, + { + "label": "资阳市", + "value": "5120" + }, + { + "label": "阿坝藏族羌族自治州", + "value": "5132" + }, + { + "label": "甘孜藏族自治州", + "value": "5133" + }, + { + "label": "凉山彝族自治州", + "value": "5134" + } + ], + [{ + "label": "贵阳市", + "value": "5201" + }, + { + "label": "六盘水市", + "value": "5202" + }, + { + "label": "遵义市", + "value": "5203" + }, + { + "label": "安顺市", + "value": "5204" + }, + { + "label": "毕节市", + "value": "5205" + }, + { + "label": "铜仁市", + "value": "5206" + }, + { + "label": "黔西南布依族苗族自治州", + "value": "5223" + }, + { + "label": "黔东南苗族侗族自治州", + "value": "5226" + }, + { + "label": "黔南布依族苗族自治州", + "value": "5227" + } + ], + [{ + "label": "昆明市", + "value": "5301" + }, + { + "label": "曲靖市", + "value": "5303" + }, + { + "label": "玉溪市", + "value": "5304" + }, + { + "label": "保山市", + "value": "5305" + }, + { + "label": "昭通市", + "value": "5306" + }, + { + "label": "丽江市", + "value": "5307" + }, + { + "label": "普洱市", + "value": "5308" + }, + { + "label": "临沧市", + "value": "5309" + }, + { + "label": "楚雄彝族自治州", + "value": "5323" + }, + { + "label": "红河哈尼族彝族自治州", + "value": "5325" + }, + { + "label": "文山壮族苗族自治州", + "value": "5326" + }, + { + "label": "西双版纳傣族自治州", + "value": "5328" + }, + { + "label": "大理白族自治州", + "value": "5329" + }, + { + "label": "德宏傣族景颇族自治州", + "value": "5331" + }, + { + "label": "怒江傈僳族自治州", + "value": "5333" + }, + { + "label": "迪庆藏族自治州", + "value": "5334" + } + ], + [{ + "label": "拉萨市", + "value": "5401" + }, + { + "label": "日喀则市", + "value": "5402" + }, + { + "label": "昌都市", + "value": "5403" + }, + { + "label": "林芝市", + "value": "5404" + }, + { + "label": "山南市", + "value": "5405" + }, + { + "label": "那曲地区", + "value": "5424" + }, + { + "label": "阿里地区", + "value": "5425" + } + ], + [{ + "label": "西安市", + "value": "6101" + }, + { + "label": "铜川市", + "value": "6102" + }, + { + "label": "宝鸡市", + "value": "6103" + }, + { + "label": "咸阳市", + "value": "6104" + }, + { + "label": "渭南市", + "value": "6105" + }, + { + "label": "延安市", + "value": "6106" + }, + { + "label": "汉中市", + "value": "6107" + }, + { + "label": "榆林市", + "value": "6108" + }, + { + "label": "安康市", + "value": "6109" + }, + { + "label": "商洛市", + "value": "6110" + } + ], + [{ + "label": "兰州市", + "value": "6201" + }, + { + "label": "嘉峪关市", + "value": "6202" + }, + { + "label": "金昌市", + "value": "6203" + }, + { + "label": "白银市", + "value": "6204" + }, + { + "label": "天水市", + "value": "6205" + }, + { + "label": "武威市", + "value": "6206" + }, + { + "label": "张掖市", + "value": "6207" + }, + { + "label": "平凉市", + "value": "6208" + }, + { + "label": "酒泉市", + "value": "6209" + }, + { + "label": "庆阳市", + "value": "6210" + }, + { + "label": "定西市", + "value": "6211" + }, + { + "label": "陇南市", + "value": "6212" + }, + { + "label": "临夏回族自治州", + "value": "6229" + }, + { + "label": "甘南藏族自治州", + "value": "6230" + } + ], + [{ + "label": "西宁市", + "value": "6301" + }, + { + "label": "海东市", + "value": "6302" + }, + { + "label": "海北藏族自治州", + "value": "6322" + }, + { + "label": "黄南藏族自治州", + "value": "6323" + }, + { + "label": "海南藏族自治州", + "value": "6325" + }, + { + "label": "果洛藏族自治州", + "value": "6326" + }, + { + "label": "玉树藏族自治州", + "value": "6327" + }, + { + "label": "海西蒙古族藏族自治州", + "value": "6328" + } + ], + [{ + "label": "银川市", + "value": "6401" + }, + { + "label": "石嘴山市", + "value": "6402" + }, + { + "label": "吴忠市", + "value": "6403" + }, + { + "label": "固原市", + "value": "6404" + }, + { + "label": "中卫市", + "value": "6405" + } + ], + [{ + "label": "乌鲁木齐市", + "value": "6501" + }, + { + "label": "克拉玛依市", + "value": "6502" + }, + { + "label": "吐鲁番市", + "value": "6504" + }, + { + "label": "哈密市", + "value": "6505" + }, + { + "label": "昌吉回族自治州", + "value": "6523" + }, + { + "label": "博尔塔拉蒙古自治州", + "value": "6527" + }, + { + "label": "巴音郭楞蒙古自治州", + "value": "6528" + }, + { + "label": "阿克苏地区", + "value": "6529" + }, + { + "label": "克孜勒苏柯尔克孜自治州", + "value": "6530" + }, + { + "label": "喀什地区", + "value": "6531" + }, + { + "label": "和田地区", + "value": "6532" + }, + { + "label": "伊犁哈萨克自治州", + "value": "6540" + }, + { + "label": "塔城地区", + "value": "6542" + }, + { + "label": "阿勒泰地区", + "value": "6543" + }, + { + "label": "自治区直辖县级行政区划", + "value": "6590" + } + ], + [{ + "label": "台北", + "value": "6601" + }, + { + "label": "高雄", + "value": "6602" + }, + { + "label": "基隆", + "value": "6603" + }, + { + "label": "台中", + "value": "6604" + }, + { + "label": "台南", + "value": "6605" + }, + { + "label": "新竹", + "value": "6606" + }, + { + "label": "嘉义", + "value": "6607" + }, + { + "label": "宜兰", + "value": "6608" + }, + { + "label": "桃园", + "value": "6609" + }, + { + "label": "苗栗", + "value": "6610" + }, + { + "label": "彰化", + "value": "6611" + }, + { + "label": "南投", + "value": "6612" + }, + { + "label": "云林", + "value": "6613" + }, + { + "label": "屏东", + "value": "6614" + }, + { + "label": "台东", + "value": "6615" + }, + { + "label": "花莲", + "value": "6616" + }, + { + "label": "澎湖", + "value": "6617" + } + ], + [{ + "label": "香港岛", + "value": "6701" + }, + { + "label": "九龙", + "value": "6702" + }, + { + "label": "新界", + "value": "6703" + } + ], + [{ + "label": "澳门半岛", + "value": "6801" + }, + { + "label": "氹仔岛", + "value": "6802" + }, + { + "label": "路环岛", + "value": "6803" + }, + { + "label": "路氹城", + "value": "6804" + } + ] +] +export default cityData; diff --git a/components/mpvue-citypicker/city-data/province.js b/components/mpvue-citypicker/city-data/province.js new file mode 100644 index 0000000..1bd680e --- /dev/null +++ b/components/mpvue-citypicker/city-data/province.js @@ -0,0 +1,139 @@ +/* eslint-disable */ +var provinceData = [{ + "label": "北京市", + "value": "11" + }, + { + "label": "天津市", + "value": "12" + }, + { + "label": "河北省", + "value": "13" + }, + { + "label": "山西省", + "value": "14" + }, + { + "label": "内蒙古自治区", + "value": "15" + }, + { + "label": "辽宁省", + "value": "21" + }, + { + "label": "吉林省", + "value": "22" + }, + { + "label": "黑龙江省", + "value": "23" + }, + { + "label": "上海市", + "value": "31" + }, + { + "label": "江苏省", + "value": "32" + }, + { + "label": "浙江省", + "value": "33" + }, + { + "label": "安徽省", + "value": "34" + }, + { + "label": "福建省", + "value": "35" + }, + { + "label": "江西省", + "value": "36" + }, + { + "label": "山东省", + "value": "37" + }, + { + "label": "河南省", + "value": "41" + }, + { + "label": "湖北省", + "value": "42" + }, + { + "label": "湖南省", + "value": "43" + }, + { + "label": "广东省", + "value": "44" + }, + { + "label": "广西壮族自治区", + "value": "45" + }, + { + "label": "海南省", + "value": "46" + }, + { + "label": "重庆市", + "value": "50" + }, + { + "label": "四川省", + "value": "51" + }, + { + "label": "贵州省", + "value": "52" + }, + { + "label": "云南省", + "value": "53" + }, + { + "label": "西藏自治区", + "value": "54" + }, + { + "label": "陕西省", + "value": "61" + }, + { + "label": "甘肃省", + "value": "62" + }, + { + "label": "青海省", + "value": "63" + }, + { + "label": "宁夏回族自治区", + "value": "64" + }, + { + "label": "新疆维吾尔自治区", + "value": "65" + }, + { + "label": "台湾", + "value": "66" + }, + { + "label": "香港", + "value": "67" + }, + { + "label": "澳门", + "value": "68" + } +] +export default provinceData; diff --git a/components/mpvue-citypicker/mpvueCityPicker.vue b/components/mpvue-citypicker/mpvueCityPicker.vue new file mode 100644 index 0000000..2a0416c --- /dev/null +++ b/components/mpvue-citypicker/mpvueCityPicker.vue @@ -0,0 +1,210 @@ +<template> + <div class="mpvue-picker"> + <div :class="{'pickerMask':showPicker}" @click="maskClick" catchtouchmove="true"></div> + <div class="mpvue-picker-content " :class="{'mpvue-picker-view-show':showPicker}"> + <div class="mpvue-picker__hd" catchtouchmove="true"> + <div class="mpvue-picker__action" @click="pickerCancel">取消</div> + <div class="mpvue-picker__action" :style="{color:themeColor}" @click="pickerConfirm">确定</div> + </div> + <picker-view indicator-style="height: 40px;" class="mpvue-picker-view" :value="pickerValue" @change="pickerChange"> + <block> + <picker-view-column> + <div class="picker-item" v-for="(item,index) in provinceDataList" :key="index">{{item.label}}</div> + </picker-view-column> + <picker-view-column> + <div class="picker-item" v-for="(item,index) in cityDataList" :key="index">{{item.label}}</div> + </picker-view-column> + <picker-view-column> + <div class="picker-item" v-for="(item,index) in areaDataList" :key="index">{{item.label}}</div> + </picker-view-column> + </block> + </picker-view> + </div> + </div> +</template> + +<script> +import provinceData from './city-data/province.js'; +import cityData from './city-data/city.js'; +import areaData from './city-data/area.js'; +export default { + data() { + return { + pickerValue: [0, 0, 0], + provinceDataList: [], + cityDataList: [], + areaDataList: [], + /* 是否显示控件 */ + showPicker: false, + }; + }, + created() { + this.init() + }, + props: { + /* 默认值 */ + pickerValueDefault: { + type: Array, + default(){ + return [0, 0, 0] + } + }, + /* 主题色 */ + themeColor: String + }, + watch:{ + pickerValueDefault(){ + this.init(); + } + }, + methods: { + init() { + this.handPickValueDefault(); // 对 pickerValueDefault 做兼容处理 + this.provinceDataList = provinceData; + this.cityDataList = cityData[this.pickerValueDefault[0]]; + this.areaDataList = areaData[this.pickerValueDefault[0]][this.pickerValueDefault[1]]; + this.pickerValue = this.pickerValueDefault; + }, + show() { + setTimeout(() => { + this.showPicker = true; + }, 0); + }, + maskClick() { + this.pickerCancel(); + }, + pickerCancel() { + this.showPicker = false; + this._$emit('onCancel'); + }, + pickerConfirm(e) { + this.showPicker = false; + this._$emit('onConfirm'); + }, + showPickerView() { + this.showPicker = true; + }, + handPickValueDefault() { + if (this.pickerValueDefault !== [0, 0, 0]) { + if (this.pickerValueDefault[0] > provinceData.length - 1) { + this.pickerValueDefault[0] = provinceData.length - 1; + } + if (this.pickerValueDefault[1] > cityData[this.pickerValueDefault[0]].length - 1) { + this.pickerValueDefault[1] = cityData[this.pickerValueDefault[0]].length - 1; + } + if (this.pickerValueDefault[2] > areaData[this.pickerValueDefault[0]][this.pickerValueDefault[1]].length - 1) { + this.pickerValueDefault[2] = areaData[this.pickerValueDefault[0]][this.pickerValueDefault[1]].length - 1; + } + } + }, + pickerChange(e) { + let changePickerValue = e.mp.detail.value; + if (this.pickerValue[0] !== changePickerValue[0]) { + // 第一级发生滚动 + this.cityDataList = cityData[changePickerValue[0]]; + this.areaDataList = areaData[changePickerValue[0]][0]; + changePickerValue[1] = 0; + changePickerValue[2] = 0; + } else if (this.pickerValue[1] !== changePickerValue[1]) { + // 第二级滚动 + this.areaDataList = + areaData[changePickerValue[0]][changePickerValue[1]]; + changePickerValue[2] = 0; + } + this.pickerValue = changePickerValue; + this._$emit('onChange'); + }, + _$emit(emitName) { + let pickObj = { + label: this._getLabel(), + value: this.pickerValue, + cityCode: this._getCityCode() + }; + this.$emit(emitName, pickObj); + }, + _getLabel() { + let pcikerLabel = + this.provinceDataList[this.pickerValue[0]].label + + '-' + + this.cityDataList[this.pickerValue[1]].label + + '-' + + this.areaDataList[this.pickerValue[2]].label; + return pcikerLabel; + }, + _getCityCode() { + return this.areaDataList[this.pickerValue[2]].value; + } + } +}; +</script> + +<style> +.pickerMask { + position: fixed; + z-index: 1000; + top: 0; + right: 0; + left: 0; + bottom: 0; + background: rgba(0, 0, 0, 0.6); +} +.mpvue-picker-content { + position: fixed; + bottom: 0; + left: 0; + width: 100%; + transition: all 0.3s ease; + transform: translateY(100%); + z-index: 3000; +} +.mpvue-picker-view-show { + transform: translateY(0); +} +.mpvue-picker__hd { + display: flex; + padding: 9px 15px; + background-color: #fff; + position: relative; + text-align: center; + font-size: 17px; +} +.mpvue-picker__hd:after { + content: ' '; + position: absolute; + left: 0; + bottom: 0; + right: 0; + height: 1px; + border-bottom: 1px solid #e5e5e5; + color: #e5e5e5; + transform-origin: 0 100%; + transform: scaleY(0.5); +} +.mpvue-picker__action { + display: block; + flex: 1; + color: #1aad19; +} +.mpvue-picker__action:first-child { + text-align: left; + color: #888; +} +.mpvue-picker__action:last-child { + text-align: right; +} +.picker-item { + text-align: center; + line-height: 40px; + text-overflow: ellipsis; + white-space: nowrap; + font-size: 16px; +} +.mpvue-picker-view { + position: relative; + bottom: 0; + left: 0; + width: 100%; + height: 238px; + background-color: rgba(255, 255, 255, 1); +} +</style> diff --git a/components/mpvue-picker/mpvuePicker.vue b/components/mpvue-picker/mpvuePicker.vue new file mode 100644 index 0000000..413fd40 --- /dev/null +++ b/components/mpvue-picker/mpvuePicker.vue @@ -0,0 +1,464 @@ +<template> + <view class="mpvue-picker"> + <view :class="{'pickerMask':showPicker}" @click="maskClick" catchtouchmove="true"></view> + <view class="mpvue-picker-content " :class="{'mpvue-picker-view-show':showPicker}"> + <view class="mpvue-picker__hd" catchtouchmove="true"> + <view class="mpvue-picker__action" @click.prevent="pickerCancel">取消</view> + <view class="mpvue-picker__action" :style="{color:themeColor}" @click.prevent="pickerConfirm">确定</view> + </view> + <!-- 单列 --> + <picker-view indicator-style="height: 40px;" class="mpvue-picker-view" :value="pickerValue" @change.prevent="pickerChange" v-if="mode==='selector' && pickerValueSingleArray.length > 0"> + <block> + <picker-view-column> + <view class="picker-item" v-for="(item,index) in pickerValueSingleArray" :key="index">{{item.label}}</view> + </picker-view-column> + </block> + </picker-view> + <!-- 时间选择器 --> + <picker-view indicator-style="height: 40px;" class="mpvue-picker-view" :value="pickerValue" @change="pickerChange" v-if="mode==='timeSelector'"> + <block> + <picker-view-column> + <view class="picker-item" v-for="(item,index) in pickerValueHour" :key="index">{{item.label}}</view> + </picker-view-column> + <picker-view-column> + <view class="picker-item" v-for="(item,index) in pickerValueMinute" :key="index">{{item.label}}</view> + </picker-view-column> + </block> + </picker-view> + <!-- 多列选择 --> + <picker-view indicator-style="height: 40px;" class="mpvue-picker-view" :value="pickerValue" @change="pickerChange" v-if="mode==='multiSelector'"> + <block v-for="(n,index) in pickerValueMulArray.length" :key="index"> + <picker-view-column> + <view class="picker-item" v-for="(item,index1) in pickerValueMulArray[n]" :key="index1">{{item.label}}</view> + </picker-view-column> + </block> + </picker-view> + <!-- 二级联动 --> + <picker-view indicator-style="height: 40px;" class="mpvue-picker-view" :value="pickerValue" @change="pickerChangeMul" v-if="mode==='multiLinkageSelector' && deepLength===2"> + <block> + <picker-view-column> + <view class="picker-item" v-for="(item,index) in pickerValueMulTwoOne" :key="index">{{item.label}}</view> + </picker-view-column> + <picker-view-column> + <view class="picker-item" v-for="(item,index) in pickerValueMulTwoTwo" :key="index">{{item.label}}</view> + </picker-view-column> + </block> + </picker-view> + <!-- 三级联动 --> + <picker-view indicator-style="height: 40px;" class="mpvue-picker-view" :value="pickerValue" @change="pickerChangeMul" v-if="mode==='multiLinkageSelector' && deepLength===3"> + <block> + <picker-view-column> + <view class="picker-item" v-for="(item,index) in pickerValueMulThreeOne" :key="index">{{item.label}}</view> + </picker-view-column> + <picker-view-column> + <view class="picker-item" v-for="(item,index) in pickerValueMulThreeTwo" :key="index">{{item.label}}</view> + </picker-view-column> + <picker-view-column> + <view class="picker-item" v-for="(item,index) in pickerValueMulThreeThree" :key="index">{{item.label}}</view> + </picker-view-column> + </block> + </picker-view> + </view> + </view> +</template> + +<script> + export default { + data() { + return { + pickerChangeValue: [], + pickerValue: [], + pickerValueArrayChange: true, + modeChange: false, + pickerValueSingleArray: [], + pickerValueHour: [], + pickerValueMinute: [], + pickerValueMulArray: [], + pickerValueMulTwoOne: [], + pickerValueMulTwoTwo: [], + pickerValueMulThreeOne: [], + pickerValueMulThreeTwo: [], + pickerValueMulThreeThree: [], + /* 是否显示控件 */ + showPicker: false, + }; + }, + props: { + /* mode */ + mode: { + type: String, + default: 'selector' + }, + /* picker 数值 */ + pickerValueArray: { + type: Array, + default(){ + return [] + } + }, + /* 默认值 */ + pickerValueDefault: { + type: Array, + default(){ + return [] + } + }, + /* 几级联动 */ + deepLength: { + type: Number, + default: 2 + }, + /* 主题色 */ + themeColor: String + }, + watch: { + pickerValueArray(oldVal, newVal) { + this.pickerValueArrayChange = true; + }, + mode(oldVal, newVal) { + this.modeChange = true; + }, + pickerValueArray(val){ + this.initPicker(val); + } + }, + methods: { + initPicker(valueArray) { + let pickerValueArray = valueArray; + this.pickerValue = this.pickerValueDefault; + // 初始化多级联动 + if (this.mode === 'selector') { + this.pickerValueSingleArray = valueArray; + } else if (this.mode === 'timeSelector') { + this.modeChange = false; + let hourArray = []; + let minuteArray = []; + for (let i = 0; i < 24; i++) { + hourArray.push({ + value: i, + label: i > 9 ? `${i} 时` : `0${i} 时` + }); + } + for (let i = 0; i < 60; i++) { + minuteArray.push({ + value: i, + label: i > 9 ? `${i} 分` : `0${i} 分` + }); + } + this.pickerValueHour = hourArray; + this.pickerValueMinute = minuteArray; + } else if (this.mode === 'multiSelector') { + this.pickerValueMulArray = valueArray; + } else if (this.mode === 'multiLinkageSelector' && this.deepLength === 2) { + // 两级联动 + let pickerValueMulTwoOne = []; + let pickerValueMulTwoTwo = []; + // 第一列 + for (let i = 0, length = pickerValueArray.length; i < length; i++) { + pickerValueMulTwoOne.push(pickerValueArray[i]); + } + // 渲染第二列 + // 如果有设定的默认值 + if (this.pickerValueDefault.length === 2) { + let num = this.pickerValueDefault[0]; + for ( + let i = 0, length = pickerValueArray[num].children.length; i < length; i++ + ) { + pickerValueMulTwoTwo.push(pickerValueArray[num].children[i]); + } + } else { + for ( + let i = 0, length = pickerValueArray[0].children.length; i < length; i++ + ) { + pickerValueMulTwoTwo.push(pickerValueArray[0].children[i]); + } + } + this.pickerValueMulTwoOne = pickerValueMulTwoOne; + this.pickerValueMulTwoTwo = pickerValueMulTwoTwo; + } else if ( + this.mode === 'multiLinkageSelector' && + this.deepLength === 3 + ) { + let pickerValueMulThreeOne = []; + let pickerValueMulThreeTwo = []; + let pickerValueMulThreeThree = []; + // 第一列 + for (let i = 0, length = pickerValueArray.length; i < length; i++) { + pickerValueMulThreeOne.push(pickerValueArray[i]); + } + // 渲染第二列 + this.pickerValueDefault = + this.pickerValueDefault.length === 3 ? + this.pickerValueDefault : + [0, 0, 0]; + if (this.pickerValueDefault.length === 3) { + let num = this.pickerValueDefault[0]; + for ( + let i = 0, length = pickerValueArray[num].children.length; i < length; i++ + ) { + pickerValueMulThreeTwo.push(pickerValueArray[num].children[i]); + } + // 第三列 + let numSecond = this.pickerValueDefault[1]; + for (let i = 0, length = pickerValueArray[num].children[numSecond].children.length; i < length; i++) { + pickerValueMulThreeThree.push( + pickerValueArray[num].children[numSecond].children[i] + ); + } + } + this.pickerValueMulThreeOne = pickerValueMulThreeOne; + this.pickerValueMulThreeTwo = pickerValueMulThreeTwo; + this.pickerValueMulThreeThree = pickerValueMulThreeThree; + } + }, + show() { + setTimeout(() => { + if (this.pickerValueArrayChange || this.modeChange) { + this.initPicker(this.pickerValueArray); + this.showPicker = true; + this.pickerValueArrayChange = false; + this.modeChange = false; + } else { + this.showPicker = true; + } + }, 0); + }, + maskClick() { + this.pickerCancel(); + }, + pickerCancel() { + this.showPicker = false; + this._initPickerVale(); + let pickObj = { + index: this.pickerValue, + value: this._getPickerLabelAndValue(this.pickerValue, this.mode).value, + label: this._getPickerLabelAndValue(this.pickerValue, this.mode).label + }; + this.$emit('onCancel', pickObj); + }, + pickerConfirm(e) { + this.showPicker = false; + this._initPickerVale(); + let pickObj = { + index: this.pickerValue, + value: this._getPickerLabelAndValue(this.pickerValue, this.mode).value, + label: this._getPickerLabelAndValue(this.pickerValue, this.mode).label + }; + this.$emit('onConfirm', pickObj); + }, + showPickerView() { + this.showPicker = true; + }, + pickerChange(e) { + this.pickerValue = e.mp.detail.value; + let pickObj = { + index: this.pickerValue, + value: this._getPickerLabelAndValue(this.pickerValue, this.mode).value, + label: this._getPickerLabelAndValue(this.pickerValue, this.mode).label + }; + this.$emit('onChange', pickObj); + }, + pickerChangeMul(e) { + if (this.deepLength === 2) { + let pickerValueArray = this.pickerValueArray; + let changeValue = e.mp.detail.value; + // 处理第一列滚动 + if (changeValue[0] !== this.pickerValue[0]) { + let pickerValueMulTwoTwo = []; + // 第一列滚动第二列数据更新 + for (let i = 0, length = pickerValueArray[changeValue[0]].children.length; i < length; i++) { + pickerValueMulTwoTwo.push(pickerValueArray[changeValue[0]].children[i]); + } + this.pickerValueMulTwoTwo = pickerValueMulTwoTwo; + // 第二列初始化为 0 + changeValue[1] = 0; + } + this.pickerValue = changeValue; + } else if (this.deepLength === 3) { + let pickerValueArray = this.pickerValueArray; + let changeValue = e.mp.detail.value; + let pickerValueMulThreeTwo = []; + let pickerValueMulThreeThree = []; + // 重新渲染第二列 + // 如果是第一列滚动 + if (changeValue[0] !== this.pickerValue[0]) { + this.pickerValueMulThreeTwo = []; + for (let i = 0, length = pickerValueArray[changeValue[0]].children.length; i < length; i++) { + pickerValueMulThreeTwo.push(pickerValueArray[changeValue[0]].children[i]); + } + // 重新渲染第三列 + for (let i = 0, length = pickerValueArray[changeValue[0]].children[0].children.length; i < + length; i++) { + pickerValueMulThreeThree.push(pickerValueArray[changeValue[0]].children[0].children[i]); + } + changeValue[1] = 0; + changeValue[2] = 0; + this.pickerValueMulThreeTwo = pickerValueMulThreeTwo; + this.pickerValueMulThreeThree = pickerValueMulThreeThree; + } else if (changeValue[1] !== this.pickerValue[1]) { + // 第二列滚动 + // 重新渲染第三列 + this.pickerValueMulThreeThree = []; + pickerValueMulThreeTwo = this.pickerValueMulThreeTwo; + for (let i = 0, length = pickerValueArray[changeValue[0]].children[changeValue[1]].children.length; i < + length; i++) { + pickerValueMulThreeThree.push(pickerValueArray[changeValue[0]].children[changeValue[1]].children[ + i]); + } + changeValue[2] = 0; + this.pickerValueMulThreeThree = pickerValueMulThreeThree; + } + this.pickerValue = changeValue; + } + let pickObj = { + index: this.pickerValue, + value: this._getPickerLabelAndValue(this.pickerValue, this.mode).value, + label: this._getPickerLabelAndValue(this.pickerValue, this.mode).label + }; + this.$emit('onChange', pickObj); + }, + // 获取 pxikerLabel + _getPickerLabelAndValue(value, mode) { + let pickerLable; + let pickerGetValue = []; + // selector + if (mode === 'selector') { + pickerLable = this.pickerValueSingleArray[value].label; + pickerGetValue.push(this.pickerValueSingleArray[value].value); + } else if (mode === 'timeSelector') { + pickerLable = `${this.pickerValueHour[value[0]].label}-${this.pickerValueMinute[value[1]].label}`; + pickerGetValue.push(this.pickerValueHour[value[0]].value); + pickerGetValue.push(this.pickerValueHour[value[1]].value); + } else if (mode === 'multiSelector') { + for (let i = 0; i < value.length; i++) { + if (i > 0) { + pickerLable += this.pickerValueMulArray[i][value[i]].label + (i === value.length - 1 ? '' : + '-'); + } else { + pickerLable = this.pickerValueMulArray[i][value[i]].label + '-'; + } + pickerGetValue.push(this.pickerValueMulArray[i][value[i]].value); + } + } else if (mode === 'multiLinkageSelector') { + /* eslint-disable indent */ + pickerLable = + this.deepLength === 2 ? + `${this.pickerValueMulTwoOne[value[0]].label}-${this.pickerValueMulTwoTwo[value[1]].label}` : + `${this.pickerValueMulThreeOne[value[0]].label}-${this.pickerValueMulThreeTwo[value[1]].label}-${this.pickerValueMulThreeThree[value[2]].label}`; + if (this.deepLength === 2) { + pickerGetValue.push(this.pickerValueMulTwoOne[value[0]].value); + pickerGetValue.push(this.pickerValueMulTwoTwo[value[1]].value); + } else { + pickerGetValue.push(this.pickerValueMulThreeOne[value[0]].value); + pickerGetValue.push(this.pickerValueMulThreeTwo[value[1]].value); + pickerGetValue.push(this.pickerValueMulThreeThree[value[2]].value); + } + /* eslint-enable indent */ + } + return { + label: pickerLable, + value: pickerGetValue + }; + }, + // 初始化 pickerValue 默认值 + _initPickerVale() { + if (this.pickerValue.length === 0) { + if (this.mode === 'selector') { + this.pickerValue = [0]; + } else if (this.mode === 'multiSelector') { + this.pickerValue = new Int8Array(this.pickerValueArray.length); + } else if ( + this.mode === 'multiLinkageSelector' && + this.deepLength === 2 + ) { + this.pickerValue = [0, 0]; + } else if ( + this.mode === 'multiLinkageSelector' && + this.deepLength === 3 + ) { + this.pickerValue = [0, 0, 0]; + } + } + } + } + }; +</script> + +<style> + .pickerMask { + position: fixed; + z-index: 9999; + top: 0; + right: 0; + left: 0; + bottom: 0; + background: rgba(0, 0, 0, 0.6); + } + + .mpvue-picker-content { + position: fixed; + bottom: 0; + left: 0; + width: 100%; + transition: all 0.3s ease; + transform: translateY(100%); + z-index: 9999; + } + + .mpvue-picker-view-show { + transform: translateY(0); + } + + .mpvue-picker__hd { + display: flex; + padding: 9px 15px; + background-color: #fff; + position: relative; + text-align: center; + font-size: 17px; + } + + .mpvue-picker__hd:after { + content: ' '; + position: absolute; + left: 0; + bottom: 0; + right: 0; + height: 1px; + border-bottom: 1px solid #e5e5e5; + color: #e5e5e5; + transform-origin: 0 100%; + transform: scaleY(0.5); + } + + .mpvue-picker__action { + display: block; + flex: 1; + color: #1aad19; + } + + .mpvue-picker__action:first-child { + text-align: left; + color: #888; + } + + .mpvue-picker__action:last-child { + text-align: right; + } + + .picker-item { + text-align: center; + line-height: 40px; + font-size: 16px; + color: #000000; + } + + .mpvue-picker-view { + position: relative; + bottom: 0; + left: 0; + width: 100%; + height: 238px; + background-color: rgba(255, 255, 255, 1); + } +</style> diff --git a/components/mpvue-picker/mpvuePickernew.vue b/components/mpvue-picker/mpvuePickernew.vue new file mode 100644 index 0000000..2276eb8 --- /dev/null +++ b/components/mpvue-picker/mpvuePickernew.vue @@ -0,0 +1,333 @@ +<template> + <view class="mpvue-picker"> + <view :class="{'pickerMask':showPicker}" @click="maskClick" catchtouchmove="true"></view> + <view class="mpvue-picker-content " :class="{'mpvue-picker-view-show':showPicker}"> + <view class="mpvue-picker__hd" catchtouchmove="true"> + <view class="mpvue-picker__action" @click="pickerCancel">取消</view> + <view class="mpvue-picker__action" style="color: #000;">选择时间</view> + <view class="mpvue-picker__action" :style="{color:themeColor}" @click="pickerConfirm">确定</view> + </view> + <view style=" display: flex; justify-content:center; padding: 9px 15px; background-color: #fff; position: relative; text-align: center; font-size: 17px;"> + <view @click="active(1)" :class="[mpvue_active == 1 ? 'mpvue_active' : '']" style="padding: 10upx 30upx; border: 1upx solid #53B2B0; border-radius: 4upx 0 0 4upx; font-size: 24upx; ">按年</view> + <view @click="active(2)" :class="[mpvue_active == 2 ? 'mpvue_active' : '']" style="padding: 10upx 30upx; border: 1upx solid #53B2B0; border-left: 0; border-right: 0; font-size: 24upx;" >按月</view> + <view @click="active(3)" :class="[mpvue_active == 3 ? 'mpvue_active' : '']" style="padding: 10upx 30upx; border: 1upx solid #53B2B0; border-radius: 0 4upx 4upx 0; font-size: 24upx;">按日</view> + </view> + <!-- 单列 --> + <picker-view indicator-style="height: 40px;" class="mpvue-picker-view" :value="pickerValue" @change="pickerChange" v-if="mpvue_active == 1"> + <block> + <picker-view-column> + <view class="picker-item" v-for="(item,index) in pickerValueSingleArray" :key="index">{{item.label}}</view> + </picker-view-column> + </block> + </picker-view> + <!-- 多列选择 --> + <picker-view indicator-style="height: 40px;" class="mpvue-picker-view" :value="pickerValue" @change="pickerChange" v-if="mpvue_active == 2 || mpvue_active == 3"> + <block v-for="(n,index) in pickerValueMulArray.length" :key="index"> + <picker-view-column> + <view class="picker-item" v-for="(item,index1) in pickerValueMulArray[n]" :key="index1">{{item.label}}</view> + </picker-view-column> + </block> + </picker-view> + </view> + </view> +</template> + +<script> + export default { + data() { + return { + pickerValue: [], + pickerValueArrayChange: true, + modeChange: false, + pickerValueSingleArray: [], + pickerValueMulArray: [], + pickerValueMulArraythree: [], + /* 是否显示控件 */ + showPicker: false, + mpvue_active:3, //初始化按日 + years:[], //年 + months:[], //月 + days:[] //日 + }; + }, + props: { + /* mode */ + mode: { + type: String, + default: 'selector' + }, + /* picker 数值 */ + pickerValueArray: { + type: Array, + default(){ + return [] + } + }, + /* 默认值 */ + pickerValueDefault: { + type: Array, + default(){ + return [] + } + }, + /* 主题色 */ + themeColor: String + }, + watch: { + pickerValueArray(oldVal, newVal) { + this.pickerValueArrayChange = true; + }, + mode(oldVal, newVal) { + this.modeChange = true; + }, + pickerValueArray(val){ + this.initPicker(val); + } + }, + methods: { + active(index){ + this.mpvue_active = index + this.initPicker(index); + + }, + initPicker(index) { + //默认年月日 获取当前日期 + var date = new Date() + let myMonth = date.getMonth() + 1; + let mydate = date.getDate(); + this.years = [] + this.months = [] + this.days = [] + for (let i = 2010; i <= date.getFullYear(); i++) { + this.years.push({ + label:i + '年',value:i + }) + } + for (let i = 1; i <= 12; i++) { + this.months.push({ + label:i + '月',value:i + }) + } + for (let i = 1; i <= 31; i++) { + this.days.push({ + label:i + '日',value:i + }) + } + var list = [] + list.push(this.years) + list.push(this.months) + list.push(this.days) + this.pickerValueMulArray = list + if(index.length == 1){ + // 年 + this.pickerValue = [this.years.length - 1]; + this.pickerValueSingleArray = [] + this.pickerValueSingleArray = this.years + if(index[0] == 'yesterday'){ + this.mpvue_active = 3 + this.pickerValue = [this.years.length - 1,myMonth - 1,mydate - 2]; + } + if(index[0] == 'month'){ + var list = [] + list.push(this.years) + list.push(this.months) + this.pickerValueMulArray = list + this.mpvue_active = 2 + this.pickerValue = [this.years.length - 1,myMonth - 1]; + } + }else{ + // 年 + this.pickerValue = [this.years.length - 1]; + this.pickerValueSingleArray = [] + this.pickerValueSingleArray = this.years + // 月 + if(this.mpvue_active == 2){ + this.pickerValueMulArray = [] + this.pickerValue = [this.years.length - 1,myMonth - 1]; + var list = [] + list.push(this.years) + list.push(this.months) + this.pickerValueMulArray = list + }else if(this.mpvue_active == 3){ + // 日 + this.pickerValueMulArray = [] + this.pickerValue = [this.years.length - 1,myMonth - 1,mydate - 1]; + var list = [] + list.push(this.years) + list.push(this.months) + list.push(this.days) + this.pickerValueMulArray = list + } + } + }, + show() { + setTimeout(() => { + if (this.pickerValueArrayChange || this.modeChange) { + this.initPicker(this.pickerValueArray); + this.showPicker = true; + this.pickerValueArrayChange = false; + this.modeChange = false; + } else { + this.showPicker = true; + } + }, 0); + }, + maskClick() { + this.pickerCancel(); + }, + pickerCancel() { + this.showPicker = false; + this._initPickerVale(); + let pickObj = { + index: this.pickerValue, + value: this._getPickerLabelAndValue(this.pickerValue, this.mode).value, + label: this._getPickerLabelAndValue(this.pickerValue, this.mode).label + }; + this.$emit('onCancel', pickObj); + }, + pickerConfirm(e) { + this.showPicker = false; + this._initPickerVale(); + let pickObj = { + index: this.pickerValue, + value: this._getPickerLabelAndValue(this.pickerValue, this.mode).value, + label: this._getPickerLabelAndValue(this.pickerValue, this.mode).label + }; + this.$emit('onConfirm', pickObj); + }, + showPickerView() { + this.showPicker = true; + }, + pickerChange(e) { + this.pickerValue = e.mp.detail.value; + let pickObj = { + index: this.pickerValue, + value: this._getPickerLabelAndValue(this.pickerValue, this.mode).value, + label: this._getPickerLabelAndValue(this.pickerValue, this.mode).label + }; + this.$emit('onChange', pickObj); + }, + // 获取 pxikerLabel + _getPickerLabelAndValue(value, mode) { + let pickerLable; + let pickerGetValue = []; + // selector + if (this.mpvue_active == 1) { + pickerLable = this.pickerValueSingleArray[value].label; + pickerGetValue.push(this.pickerValueSingleArray[value].value); + } else if (this.mpvue_active == 2 || this.mpvue_active == 3) { + for (let i = 0; i < value.length; i++) { + if (i > 0) { + pickerLable += this.pickerValueMulArray[i][value[i]].label + (i === value.length - 1 ? '' : + '-'); + } else { + pickerLable = this.pickerValueMulArray[i][value[i]].label + '-'; + } + pickerGetValue.push(this.pickerValueMulArray[i][value[i]].value); + } + } + return { + label: pickerLable, + value: pickerGetValue + }; + }, + // 初始化 pickerValue 默认值 + _initPickerVale() { + if (this.pickerValue.length === 0) { + if (this.mpvue_active == 1) { + this.pickerValue = [0]; + } else if (this.mpvue_active == 2) { + this.pickerValue = new Int8Array(this.pickerValueArray.length); + }else if (this.mpvue_active == 3) { + this.pickerValue = [0,0,0]; + } + } + } + }, + onShow() { + + } + }; +</script> + +<style> + .mpvue_active{ + background: #53B2B0; + color: #fff; + } + .pickerMask { + position: fixed; + z-index: 1000; + top: 0; + right: 0; + left: 0; + bottom: 0; + background: rgba(0, 0, 0, 0.6); + } + + .mpvue-picker-content { + position: fixed; + bottom: 0; + left: 0; + width: 100%; + transition: all 0.3s ease; + transform: translateY(100%); + z-index: 3000; + } + + .mpvue-picker-view-show { + transform: translateY(0); + } + + .mpvue-picker__hd { + display: flex; + padding: 9px 15px; + background-color: #fff; + position: relative; + text-align: center; + font-size: 17px; + } + + .mpvue-picker__hd:after { + content: ' '; + position: absolute; + left: 0; + bottom: 0; + right: 0; + height: 1px; + border-bottom: 1px solid #e5e5e5; + color: #e5e5e5; + transform-origin: 0 100%; + transform: scaleY(0.5); + } + + .mpvue-picker__action { + display: block; + flex: 1; + color: #1aad19; + } + + .mpvue-picker__action:first-child { + text-align: left; + color: #888; + } + + .mpvue-picker__action:last-child { + text-align: right; + } + + .picker-item { + text-align: center; + line-height: 40px; + font-size: 16px; + } + + .mpvue-picker-view { + position: relative; + bottom: 0; + left: 0; + width: 100%; + height: 238px; + background-color: rgba(255, 255, 255, 1); + } +</style> diff --git a/components/t-color-picker/t-color-picker.vue b/components/t-color-picker/t-color-picker.vue new file mode 100644 index 0000000..b1f1fa7 --- /dev/null +++ b/components/t-color-picker/t-color-picker.vue @@ -0,0 +1,803 @@ +<template> + <view v-show="show" class="t-wrapper" @touchmove.stop.prevent="moveHandle"> + <view class="t-mask" :class="{active:active}" @click.stop="close"></view> + <view class="t-box" :class="{active:active}"> + <!-- <view class="t-header"> + <view class="t-header-button" @click="close">取消</view> + <view class="t-header-button" @click="confirm">确认</view> + </view> --> + <!-- 颜色 --> + <scroll-view style="box-sizing: border-box; white-space: nowrap; margin: 10upx 0;" scroll-x scroll-with-animation > + <view style="text-align: center; display: inline-block;" class="t-alternative__item" v-for="(item,index) in colorList" :key="index"> + <view class="t-alternative__item-content" :style="{ background: 'rgba(' + item.r + ',' + item.g + ',' + item.b + ',' + item.a + ')' }" + @click="selectColor(item,index)"> + <image v-if="index == selectColorIndex" src="../../static/mine/icon_confirm.png" mode="" + style="width: 31upx; height: 22upx;"></image> + </view> + </view> + <view class="t-alternative__item" style="text-align: center; display: inline-block;"> + <view class="t-alternative__item-content" style="background: rgba(0,0,0,0)" + @click="eliminate(item)"> + </view> + </view> + + </scroll-view> + <view class="t-color__box" style="height: 0;" :style="{ background: 'rgb(' + bgcolor.r + ',' + bgcolor.g + ',' + bgcolor.b + ')'}"> + <view class="t-background boxs" @touchstart="touchstart($event, 0)" @touchmove="touchmove($event, 0)" @touchend="touchend($event, 0)"> + <!-- <view class="t-color-mask"></view> + <view class="t-pointer" :style="{ top: site[0].top - 8 + 'px', left: site[0].left - 8 + 'px' }"></view> --> + </view> + </view> + <!-- <view class="t-control__box"> + <view class="t-control__color"> + <view class="t-control__color-content" :style="{ background: 'rgba(' + rgba.r + ',' + rgba.g + ',' + rgba.b + ',' + rgba.a + ')' }"></view> + </view> + <view class="t-control-box__item"> + <view class="t-controller boxs" @touchstart="touchstart($event, 1)" @touchmove="touchmove($event, 1)" @touchend="touchend($event, 1)"> + <view class="t-hue"> + <view class="t-circle" :style="{ left: site[1].left - 12 + 'px' }"></view> + </view> + </view> + </view> + </view> --> + <view class="t-control__box"> + <view class="t-control__color"> + <!-- <view class="t-control__color-content" + :style="{ background: 'rgba(' + rgba.r + ',' + rgba.g + ',' + rgba.b + ',' + rgba.a + ')' }"></view> --> + <view class="t-control__color-content" + :style="{ background: 'rgba(' + rgba.r + ',' + rgba.g + ',' + rgba.b + ',1)' }"></view> + </view> + <view class="t-control-box__item"> + <view style="height: 0;" class="t-controller boxs" @touchstart="touchstart($event, 1)" @touchmove="touchmove($event, 1)" @touchend="touchend($event, 1)"> + <!-- <view class="t-hue"> + <view class="t-circle" :style="{ left: site[1].left - 12 + 'px' }"></view> + </view> --> + </view> + <view class="t-controller boxs" @touchstart="touchstart($event, 2)" @touchmove="touchmove($event, 2)" @touchend="touchend($event, 2)"> + <!-- background: linear-gradient(to right, #f00 0%, #ff0 17%, #0f0 33%, #0ff 50%, #00f 67%, #f0f 83%, #f00 100%); --> + <view class="t-transparency" + :style="{'background': 'linear-gradient(to left, rgba(' + rgba.r + ',' + rgba.g + ',' + rgba.b + ',0.2' + ') 0%, rgb(' + rgba.r + ',' + rgba.g + ',' + rgba.b + '))'}"> + <view class="t-circle" :class="{'t-circle-active':tCircleActive}" :style="{ left: site[2].left + 'px' }"></view> + </view> + </view> + </view> + <view class="t-control__color"> + <view class="t-control__color-content" + :style="{ background: 'rgba(' + rgba.r + ',' + rgba.g + ',' + rgba.b + ',0.2)' }"></view> + </view> + </view> + <!-- <view class="t-result__box"> + <view v-if="mode" class="t-result__item"> + <view class="t-result__box-input">{{hex}}</view> + <view class="t-result__box-text">HEX</view> + </view> + <template v-else> + <view class="t-result__item"> + <view class="t-result__box-input">{{rgba.r}}</view> + <view class="t-result__box-text">R</view> + </view> + <view class="t-result__item"> + <view class="t-result__box-input">{{rgba.g}}</view> + <view class="t-result__box-text">G</view> + </view> + <view class="t-result__item"> + <view class="t-result__box-input">{{rgba.b}}</view> + <view class="t-result__box-text">B</view> + </view> + <view class="t-result__item"> + <view class="t-result__box-input">{{rgba.a}}</view> + <view class="t-result__box-text">A</view> + </view> + </template> + <view class="t-result__item t-select" @click="select"> + <view class="t-result__box-input"> + <view>切换</view> + <view>模式</view> + </view> + </view> + </view> --> + <!-- <view class="t-alternative"> + <view class="t-alternative__item" v-for="(item,index) in colorList" :key="index"> + <view class="t-alternative__item-content" :style="{ background: 'rgba(' + item.r + ',' + item.g + ',' + item.b + ',' + item.a + ')' }" + @click="selectColor(item)"> + </view> + </view> + <view class="t-alternative__item" > + <view class="t-alternative__item-content" style="background: rgba(0,0,0,0)" + @click="eliminate(item)"> + </view> + </view> + </view> --> + </view> + </view> +</template> + +<script> + export default { + props: { + color: { + type: Object, + default () { + return { + r: 0, + g: 0, + b: 0, + a: 0 + } + } + }, + spareColor: { + type: Array, + default () { + return [] + } + }, + background_color:{ + type:String, + default () { + return null + } + } + }, + data() { + return { + show: false, + active: false, + background_state:false, + // rgba 颜色 + rgba: {r: 0,g: 0,b: 0,a: 1}, + // hsb 颜色 + hsb: {h: 0,s: 0,b: 0}, + site: [{top: 0,left: 0}, {left: 0}, {left: 0}], + index: 0, + bgcolor: {r: 255,g: 0,b: 0,a: 1}, + hex: '#000000', + mode: true, + colorList: [ + {r: 0,g: 0,b: 0,a: 1}, + {r: 255,g: 255,b: 255,a: 1}, + {r: 245,g: 99,b: 100,a: 1}, + {r: 5,g: 11,b: 222,a: 1}, + {r: 255,g: 116,b: 80,a: 1}, + {r: 158,g: 235,b: 255,a: 1}, + {r: 248,g: 229,b: 12,a: 1}, + {r: 255,g: 162,b: 200,a: 1}, + {r: 95,g: 220,b: 203,a: 1}, + ], + tCircleActive:false, + selectColorIndex:0 + }; + }, + created() { + this.rgba = this.color; + if (this.spareColor.length !== 0) { + this.colorList = this.spareColor; + } + }, + methods: { + eliminate(){ + wx.showToast({title: '清空背景色',icon: 'none'}) + this.close(); + this.$emit('confirm', {rgba: {},hex: null}) + }, + /** + * 初始化 + */ + init() { + // hsb 颜色 + this.hsb = this.rgbToHex(this.rgba); + this.hex = '#' + this.rgbToHex(this.rgba); + // this.setColor(); + }, + moveHandle() {}, + open() { + this.background_state = false + this.show = true; + this.$nextTick(() => { + this.init(); + setTimeout(() => { + this.active = true; + setTimeout(() => { + this.getSelectorQuery(); + }, 350) + }, 50) + }) + + }, + close() { + this.active = false; + this.$nextTick(() => { + setTimeout(() => { + this.show = false; + }, 500) + }) + }, + confirm() { + this.close(); + this.$emit('confirm', { + rgba: this.rgba, + hex: this.hex + }) + }, + // 选择模式 + // select() { + // this.mode = !this.mode + // }, + // 常用颜色选择 + selectColor(item,index) { + this.selectColorIndex = index + this.background_state = true + this.setColorBySelect(item) + }, + touchstart(e, index) { + this.tCircleActive = true + this.background_state = true + if(index == 0) return; + const { + pageX, + pageY + } = e.touches[0]; + this.pageX = pageX; + this.pageY = pageY; + this.setPosition(pageX, pageY, index); + }, + touchmove(e, index) { + this.tCircleActive = true + this.background_state = true + if(index == 0) return; + const { + pageX, + pageY + } = e.touches[0]; + this.moveX = pageX; + this.moveY = pageY; + this.setPosition(pageX, pageY, index); + }, + touchend(e, index) { + this.tCircleActive = false + this.background_state = true + }, + /** + * 设置位置 + */ + setPosition(x, y, index) { + this.index = index; + const { + top, + left, + width, + height + } = this.position[index]; + // 设置最大最小值 + this.site[index].left = Math.max(0, Math.min(parseInt(x - left), (width - 24))); + + // if (index === 0) { + // this.site[index].top = Math.max(0, Math.min(parseInt(y - top), height)); + // // 设置颜色 + // this.hsb.s = parseInt((100 * this.site[index].left) / width); + // this.hsb.b = parseInt(100 - (100 * this.site[index].top) / height); + // this.setColor(); + // this.setValue(this.rgba); + // } else { + this.setControl(index, this.site[index].left); + // } + }, + /** + * 设置 rgb 颜色 + */ + setColor() { + const rgb = this.HSBToRGB(this.hsb); + this.rgba.r = rgb.r; + this.rgba.g = rgb.g; + this.rgba.b = rgb.b; + }, + /** + * 设置二进制颜色 + * @param {Object} rgb + */ + setValue(rgb) { + // this.hex = '#' + this.rgbToHex(rgb); + this.hex = this.getHexColor(rgb); + // console.log(this.hex) + if(this.background_state == true){ + this.$emit('confirm', { + rgba: this.rgba, + hex: this.hex + }) + } + }, + //转化颜色 值为:rgba(194, 78, 78, 1) 转化为: #c24e4e + getHexColor(color) { + // var values = color + // .replace(/rgba?\(/, '') + // .replace(/\)/, '') + // .replace(/[\s+]/g, '') + // .split(',') + var a = parseFloat(color.a || 1), + r = Math.floor(a * parseInt(color.r) + (1 - a) * 255), + g = Math.floor(a * parseInt(color.g) + (1 - a) * 255), + b = Math.floor(a * parseInt(color.b) + (1 - a) * 255) + return '#' + + ('0' + r.toString(16)).slice(-2) + + ('0' + g.toString(16)).slice(-2) + + ('0' + b.toString(16)).slice(-2) + }, + setControl(index, x) { + const { + top, + left, + width, + height + } = this.position[index]; + // if (index === 1) { + // this.hsb.h = parseInt((360 * x) / width); + // this.bgcolor = this.HSBToRGB({ + // h: this.hsb.h, + // s: 100, + // b: 100 + // }); + // this.setColor() + // this.setValue(this.rgba); + // } else { + this.rgba.a = (1 - 0.8 * (x / width)).toFixed(3); + this.setValue(this.rgba); + // } + }, + /** + * rgb 转 二进制 hex + * @param {Object} rgb + */ + rgbToHex(rgb) { + let hex = [rgb.r.toString(16), rgb.g.toString(16), rgb.b.toString(16)]; + hex.map(function(str, i) { + if (str.length == 1) { + hex[i] = '0' + str; + } + }); + return hex.join(''); + }, + setColorBySelect(getrgb) { + const { + r, + g, + b, + a + } = getrgb; + let rgb = {} + rgb = { + r: r ? parseInt(r) : 0, + g: g ? parseInt(g) : 0, + b: b ? parseInt(b) : 0, + a: a ? a : 0, + }; + this.rgba = rgb; + this.hsb = this.rgbToHsb(rgb); + this.changeViewByHsb(); + }, + changeViewByHsb() { + const [a, b, c] = this.position; + this.site[0].left = parseInt(this.hsb.s * a.width / 100); + this.site[0].top = parseInt((100 - this.hsb.b) * a.height / 100); + this.setColor(this.hsb.h); + this.setValue(this.rgba); + this.bgcolor = this.HSBToRGB({ + h: this.hsb.h, + s: 100, + b: 100 + }); + this.site[1].left = this.hsb.h / 360 * b.width; + // this.site[2].left = (1 - this.rgba.a) * c.width; + this.site[2].left = (1 - this.rgba.a) / 0.8 * c.width + // console.log(this.site[2].left) + // (1 - 0.8 * (x100 / width400)).toFixed(1); + }, + /** + * hsb 转 rgb + * @param {Object} 颜色模式 H(hues)表示色相,S(saturation)表示饱和度,B(brightness)表示亮度 + */ + HSBToRGB(hsb) { + let rgb = {}; + let h = Math.round(hsb.h); + let s = Math.round((hsb.s * 255) / 100); + let v = Math.round((hsb.b * 255) / 100); + if (s == 0) { + rgb.r = rgb.g = rgb.b = v; + } else { + let t1 = v; + let t2 = ((255 - s) * v) / 255; + let t3 = ((t1 - t2) * (h % 60)) / 60; + if (h == 360) h = 0; + if (h < 60) { + rgb.r = t1; + rgb.b = t2; + rgb.g = t2 + t3; + } else if (h < 120) { + rgb.g = t1; + rgb.b = t2; + rgb.r = t1 - t3; + } else if (h < 180) { + rgb.g = t1; + rgb.r = t2; + rgb.b = t2 + t3; + } else if (h < 240) { + rgb.b = t1; + rgb.r = t2; + rgb.g = t1 - t3; + } else if (h < 300) { + rgb.b = t1; + rgb.g = t2; + rgb.r = t2 + t3; + } else if (h < 360) { + rgb.r = t1; + rgb.g = t2; + rgb.b = t1 - t3; + } else { + rgb.r = 0; + rgb.g = 0; + rgb.b = 0; + } + } + return { + r: Math.round(rgb.r), + g: Math.round(rgb.g), + b: Math.round(rgb.b) + }; + }, + rgbToHsb(rgb) { + let hsb = { + h: 0, + s: 0, + b: 0 + }; + let min = Math.min(rgb.r, rgb.g, rgb.b); + let max = Math.max(rgb.r, rgb.g, rgb.b); + let delta = max - min; + hsb.b = max; + hsb.s = max != 0 ? 255 * delta / max : 0; + if (hsb.s != 0) { + if (rgb.r == max) hsb.h = (rgb.g - rgb.b) / delta; + else if (rgb.g == max) hsb.h = 2 + (rgb.b - rgb.r) / delta; + else hsb.h = 4 + (rgb.r - rgb.g) / delta; + } else hsb.h = -1; + hsb.h *= 60; + if (hsb.h < 0) hsb.h = 0; + hsb.s *= 100 / 255; + hsb.b *= 100 / 255; + return hsb; + }, + getSelectorQuery() { + const views = uni.createSelectorQuery().in(this); + views + .selectAll('.boxs') + .boundingClientRect(data => { + if (!data || data.length === 0) { + setTimeout(() => this.getSelectorQuery(), 20) + return + } + this.position = data; + // this.site[0].top = data[0].height; + // this.site[0].left = 0; + // this.site[1].left = data[1].width; + // this.site[2].left = data[2].width; + this.setColorBySelect(this.rgba); + }) + .exec(); + } + }, + watch: { + spareColor(newVal) { + this.colorList = newVal; + } + } + }; +</script> + +<style lang="scss"> + //隐藏滚动条 + ::-webkit-scrollbar { + width: 0; + height: 0; + color: transparent; + display: none; + } + + .t-wrapper { + position: fixed; + top: 0; + bottom: 0; + left: 0; + width: 100%; + box-sizing: border-box; + z-index: 9999; + } + + .t-box { + width: 100%; + position: absolute; + bottom: 0; + padding: 30upx 0; + padding-top: 0; + background: #262730; + transition: all 0.3s; + transform: translateY(100%); + } + + .t-box.active { + transform: translateY(0%); + } + + .t-header { + display: flex; + justify-content: space-between; + width: 100%; + height: 100upx; + border-bottom: 1px #eee solid; + box-shadow: 1px 0 2px rgba(0, 0, 0, 0.1); + background: #fff; + } + + .t-header-button { + display: flex; + align-items: center; + width: 150upx; + height: 100upx; + font-size: 30upx; + color: #666; + padding-left: 20upx; + } + + .t-header-button:last-child { + justify-content: flex-end; + padding-right: 20upx; + } + + .t-mask { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: rgba(0, 0, 0, 0.6); + z-index: -1; + transition: all 0.3s; + opacity: 0; + } + + .t-mask.active { + opacity: 1; + } + + .t-color__box { + position: relative; + height: 400upx; + background: rgb(255, 0, 0); + overflow: hidden; + box-sizing: border-box; + margin: 0 20upx; + margin-top: 20upx; + box-sizing: border-box; + } + + .t-background { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: linear-gradient(to right, #fff, rgba(255, 255, 255, 0)); + } + + .t-color-mask { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + width: 100%; + height: 400upx; + background: linear-gradient(to top, #000, rgba(0, 0, 0, 0)); + } + + .t-pointer { + position: absolute; + bottom: -8px; + left: -8px; + z-index: 2; + width: 15px; + height: 15px; + border: 1px #fff solid; + border-radius: 50%; + } + + .t-show-color { + width: 100upx; + height: 50upx; + } + + .t-control__box { + /* margin-top: 50upx;*/ + margin-bottom: 50upx; + width: 100%; + display: flex; + padding:0 20upx; + box-sizing: border-box; + align-items: center; + } + + .t-control__color { + flex-shrink: 0; + width: 47upx; + height: 47upx; + border-radius: 50%; + // background-color: #fff; + // background-image: linear-gradient(45deg, #eee 25%, transparent 25%, transparent 75%, #eee 75%, #eee), + // linear-gradient(45deg, #eee 25%, transparent 25%, transparent 75%, #eee 75%, #eee); + // background-size: 36upx 36upx; + // background-position: 0 0, 18upx 18upx; + // border: 1px #eee solid; + overflow: hidden; + } + + .t-control__color-content { + width: 100%; + height: 100%; + } + + .t-control-box__item { + display: flex; + flex-direction: column; + justify-content: space-between; + width: 100%; + padding: 0 20upx; + } + + .t-controller { + position: relative; + width: 100%; + height: 10px; + // background-color: #fff; + // background-image: linear-gradient(45deg, #eee 25%, transparent 25%, transparent 75%, #eee 75%, #eee), + // linear-gradient(45deg, #eee 25%, transparent 25%, transparent 75%, #eee 75%, #eee); + // background-size: 32upx 32upx; + // background-position: 0 0, 16upx 16upx; + border-radius: 15upx; + } + + .t-hue { + width: 100%; + height: 100%; + background: linear-gradient(to right, #f00 0%, #ff0 17%, #0f0 33%, #0ff 50%, #00f 67%, #f0f 83%, #f00 100%); + } + + .t-transparency { + width: 100%; + height: 100%; + border-radius: 15upx; + } + .t-circle-active{ + border: 1px solid #33B3D5 !important; + // box-sizing: border-box; + box-shadow: 0 0 2px 10px rgba(0, 0, 0, 0.1); + } + .t-circle { + position: absolute; + right: -12px; + top: -7px; + width: 24px; + height: 24px; + // box-sizing: border-box; + border-radius: 50%; + background: #FFFFFF; + // box-shadow: 0 0 2px 1px rgba(0, 0, 0, 0.1); + // border: 1px solid #86D1EA; + box-shadow: 0px 7px 22px 5px rgba(2, 11, 31, 0.35); + // &:before { + // position: absolute; + // top: 0; + // left: 0; + // right: 0; + // bottom: 0; + // margin: auto; + // display: block; + // width: 10px; + // height: 10px; + // border-radius: 50%; + // background: #33B3D5; + // content: ''; + // } + } + + .t-result__box { + margin-top: 20upx; + padding: 10upx; + width: 100%; + display: flex; + box-sizing: border-box; + } + + .t-result__item { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + padding: 10upx; + width: 100%; + box-sizing: border-box; + } + + .t-result__box-input { + padding: 10upx 0; + width: 100%; + font-size: 28upx; + box-shadow: 0 0 1px 1px rgba(0, 0, 0, 0.1); + color: #999; + text-align: center; + background: #fff; + } + + .t-result__box-text { + margin-top: 10upx; + font-size: 28upx; + line-height: 2; + } + + .t-select { + flex-shrink: 0; + width: 150upx; + padding: 0 30upx; + } + + .t-select .t-result__box-input { + border-radius: 10upx; + border: none; + color: #999; + box-shadow: 1px 1px 2px 1px rgba(0, 0, 0, 0.1); + background: #fff; + } + + .t-select .t-result__box-input:active { + box-shadow: 0px 0px 1px 0px rgba(0, 0, 0, 0.1); + } + + .t-alternative { + display: flex; + flex-wrap: wrap; + /* justify-content: space-between; */ + width: 100%; + padding-right: 10upx; + box-sizing: border-box; + } + + .t-alternative__item { + margin-left: 12upx; + margin-top: 10upx; + // width: 60upx; + // height: 60upx; + // border-radius: 10upx; + width: 67upx; + height: 67upx; + border-radius: 50%; + + background-color: #fff; + background-image: linear-gradient(45deg, #eee 25%, transparent 25%, transparent 75%, #eee 75%, #eee), + linear-gradient(45deg, #eee 25%, transparent 25%, transparent 75%, #eee 75%, #eee); + background-size: 36upx 36upx; + background-position: 0 0, 18upx 18upx; + // border: 1px #eee solid; + overflow: hidden; + } + + .t-alternative__item-content { + width: 67upx; + height: 67upx; + // background: rgba(255, 0, 0, 0.5); + display: flex; + align-items: center; + justify-content: center; + } + + .t-alternative__item:active { + transition: all 0.3s; + transform: scale(1.1); + } +</style> diff --git a/components/tabBar.vue b/components/tabBar.vue new file mode 100644 index 0000000..d7c4485 --- /dev/null +++ b/components/tabBar.vue @@ -0,0 +1,104 @@ +<template> + <view class="weui-tabbar" :class="extClass"> + <view @click="tabChange(index)" v-for="(item, index) in list" :key="index" class="weui-tabbar__item" :class="{'weui-bar__item_on':index === current}"> + <view style="position: relative;display:inline-block;margin-top: 7upx;"> + <image :src="current === index ? item.selectedIconPath : item.iconPath" class="weui-tabbar__icon"></image> + </view> + <view class="weui-tabbar__label">{{ item.text }}</view> + </view> + </view> +</template> + +<script> +export default { + props: { + list: { + type: Array, + default: function() { + return [] + } + } + }, + data() { + return { + extClass: '', + current: 0 + }; + }, + methods: { + tabChange(index) { + if (index === this.current) { + return; + } + this.current = index; + this.$emit('tabChange',index) + } + } +}; +</script> + +<style lang="scss" scoped > +.weui-tabbar { + display: flex; + position: relative; + z-index: 500; + background-color: #333333; + height: 110upx; + font-size: 24upx; + +} +.weui-tabbar:before { + content: ' '; + position: absolute; + left: 0; + top: 0; + right: 0; + height: 1upx; + border-top: 1upx solid rgba(0, 0, 0, 0.1); + color: rgba(0, 0, 0, 0.1); +} +.weui-tabbar__item { + display: block; + flex: 1; + padding: 8upx 0 4upx; + padding-bottom: calc(8upx + constant(safe-area-inset-bottom)); + padding-bottom: calc(8upx + env(safe-area-inset-bottom)); + color: rgba(0, 0, 0, 0.5); + text-align: center; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); + font-size: 24upx; +} +.weui-tabbar__item:first-child { + padding-left: constant(safe-area-inset-left); + padding-left: env(safe-area-inset-left); +} +.weui-tabbar__item:last-child { + padding-right: constant(safe-area-inset-right); + padding-right: env(safe-area-inset-right); +} +.weui-tabbar__item.weui-bar__item_on .weui-tabbar__icon, +.weui-tabbar__item.weui-bar__item_on .weui-tabbar__icon > i, +.weui-tabbar__item.weui-bar__item_on .weui-tabbar__label { + color:#43CF7C; + font-size: 24upx; +} +.weui-tabbar__icon { + display: inline-block; + width: 45upx; + height: 45upx; + margin-bottom: 2upx; +} +i.weui-tabbar__icon, +.weui-tabbar__icon > i { + font-size: 24upx; + color: rgba(0, 0, 0, 0.5); +} +.weui-tabbar__icon image { + width: 100%; + height: 100%; +} +.weui-tabbar__label { + color: #bfbfbf; + font-size: 24upx; +} +</style> \ No newline at end of file diff --git a/components/uParse/src/components/wxParseAudio.vue b/components/uParse/src/components/wxParseAudio.vue new file mode 100644 index 0000000..86df246 --- /dev/null +++ b/components/uParse/src/components/wxParseAudio.vue @@ -0,0 +1,27 @@ +<template> + <!--增加audio标签支持--> + <audio + :id="node.attr.id" + :class="node.classStr" + :style="node.styleStr" + :src="node.attr.src" + :loop="node.attr.loop" + :poster="node.attr.poster" + :name="node.attr.name" + :author="node.attr.author" + controls></audio> +</template> + +<script> +export default { + name: 'wxParseAudio', + props: { + node: { + type: Object, + default() { + return {}; + }, + }, + }, +}; +</script> diff --git a/components/uParse/src/components/wxParseImg.vue b/components/uParse/src/components/wxParseImg.vue new file mode 100644 index 0000000..0bd54ae --- /dev/null +++ b/components/uParse/src/components/wxParseImg.vue @@ -0,0 +1,91 @@ +<template> + <image :mode="node.attr.mode" :lazy-load="node.attr.lazyLoad" :class="node.classStr || ''" :style="newStyleStr || node.styleStr || ''" + :data-src="node.attr.src" :src="node.attr.src" @tap="wxParseImgTap" @load="wxParseImgLoad" + style="display:block;vertical-align:top;vertical-align:bottom;font-size:0;"/> +</template> + +<script> + export default { + name: 'wxParseImg', + data() { + return { + newStyleStr: '', + preview: true, + }; + }, + props: { + node: { + type: Object, + default () { + return {}; + }, + }, + }, + inject: ['uparse'], + methods: { + wxParseImgTap(e) { + if (!this.preview) return; + const { + src + } = e.currentTarget.dataset; + if (!src) return; + this.uparse.preview(src, e); + }, + // 图片视觉宽高计算函数区 + wxParseImgLoad(e) { + const { + src + } = e.currentTarget.dataset; + if (!src) return; + const { + width, + height + } = e.mp.detail; + const recal = this.wxAutoImageCal(width, height); + const { + imageheight, + imageWidth + } = recal; + const { + padding, + mode + } = this.node.attr; + const { + styleStr + } = this.node; + const imageHeightStyle = mode === 'widthFix' ? '' : `height: ${imageheight}px;`; + this.newStyleStr = `${styleStr || ''}; ${imageHeightStyle || ''}; width:` + (!imageWidth || imageWidth === '100%' ? '100%;' : `${imageWidth}px;`) +`padding: 0 ${+padding}px;`; + }, + // 计算视觉优先的图片宽高 + wxAutoImageCal(originalWidth, originalHeight) { + // 获取图片的原始长宽 + const { + padding + } = this.node.attr; + const windowWidth = this.node.$screen.width - (2 * padding); + const results = {}; + + if (originalWidth < 60 || originalHeight < 60) { + const { + src + } = this.node.attr; + this.uparse.removeImageUrl(src); + this.preview = false; + } + + // 判断按照那种方式进行缩放 + if (originalWidth > windowWidth) { + // 在图片width大于手机屏幕width时候 + results.imageWidth = '100%'; + results.imageheight = (windowWidth * (originalHeight / originalWidth)); + } else { + // 否则展示原来的数据 + results.imageWidth = originalWidth; + results.imageheight = originalHeight; + } + + return results; + } + } + }; +</script> diff --git a/components/uParse/src/components/wxParseTemplate0.vue b/components/uParse/src/components/wxParseTemplate0.vue new file mode 100644 index 0000000..5e34c1f --- /dev/null +++ b/components/uParse/src/components/wxParseTemplate0.vue @@ -0,0 +1,105 @@ +<template> + <view> + <!--判断是否是标签节点--> + <block v-if="node.node == 'element'"> + + <block v-if="node.tag == 'button'"> + <button type="default" size="mini"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </button> + </block> + + <!--li类型--> + <block v-else-if="node.tag == 'li'"> + <view :class="node.classStr" :style="node.styleStr"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </view> + </block> + + <!--video类型--> + <block v-else-if="node.tag == 'video'"> + <wx-parse-video :node="node" /> + </block> + + <!--audio类型--> + <block v-else-if="node.tag == 'audio'"> + <wx-parse-audio :node="node" /> + </block> + + <!--img类型--> + <block v-else-if="node.tag == 'img'"> + <wx-parse-img :node="node" /> + </block> + + <!--a类型--> + <block v-else-if="node.tag == 'a'"> + <view @click="wxParseATap" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </view> + </block> + + <!--table类型--> + <block v-else-if="node.tag == 'table'"> + <view :class="node.classStr" class="table" :style="node.styleStr"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </view> + </block> + + <!--br类型--> + <block v-else-if="node.tag == 'br'"> + <text>\n</text> + </block> + + <!--其他标签--> + <block v-else> + <view :class="node.classStr" :style="node.styleStr"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </view> + </block> + + </block> + + <!--判断是否是文本节点--> + <block v-else-if="node.node == 'text'">{{node.text}}</block> + </view> +</template> + +<script> + import wxParseTemplate from './wxParseTemplate1'; + import wxParseImg from './wxParseImg'; + import wxParseVideo from './wxParseVideo'; + import wxParseAudio from './wxParseAudio'; + + export default { + name: 'wxParseTemplate0', + props: { + node: {}, + }, + components: { + wxParseTemplate, + wxParseImg, + wxParseVideo, + wxParseAudio, + }, + inject: ['uparse'], + methods: { + wxParseATap(e) { + const { + href + } = e.currentTarget.dataset;// TODO currentTarget才有dataset + if (!href) return; + this.uparse.navigate(href, e); + } + } + }; +</script> diff --git a/components/uParse/src/components/wxParseTemplate1.vue b/components/uParse/src/components/wxParseTemplate1.vue new file mode 100644 index 0000000..8a1e10a --- /dev/null +++ b/components/uParse/src/components/wxParseTemplate1.vue @@ -0,0 +1,96 @@ +<template> + <view :class="(node.tag == 'li' ? node.classStr : (node.node==='text'?'text':''))"> + <!--判断是否是标签节点--> + <block v-if="node.node == 'element'"> + <block v-if="node.tag == 'button'"> + <button type="default" size="mini"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </button> + </block> + + <!--li类型--> + <block v-else-if="node.tag == 'li'"> + <!-- <view :class="node.classStr" :style="node.styleStr"> --> + <view :style="node.styleStr"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </view> + </block> + + <!--video类型--> + <block v-else-if="node.tag == 'video'"> + <wx-parse-video :node="node" /> + </block> + + <!--audio类型--> + <block v-else-if="node.tag == 'audio'"> + <wx-parse-audio :node="node" /> + </block> + + <!--img类型--> + <block v-else-if="node.tag == 'img'"> + <wx-parse-img :node="node" /> + </block> + + <!--a类型--> + <block v-else-if="node.tag == 'a'"> + <view @click="wxParseATap" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </view> + </block> + + <!--br类型--> + <block v-else-if="node.tag == 'br'"> + <!-- <text>\n</text> --> + </block> + + <!--其他标签--> + <block v-else> + <view :class="node.classStr" :style="node.styleStr"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </view> + </block> + + </block> + + <!--判断是否是文本节点--> + <block v-else-if="node.node == 'text'">{{node.text}}</block> + </view> +</template> + +<script> + import wxParseTemplate from './wxParseTemplate2'; + import wxParseImg from './wxParseImg'; + import wxParseVideo from './wxParseVideo'; + import wxParseAudio from './wxParseAudio'; + + export default { + name: 'wxParseTemplate1', + props: { + node: {}, + }, + components: { + wxParseTemplate, + wxParseImg, + wxParseVideo, + wxParseAudio, + }, + inject: ['uparse'], + methods: { + wxParseATap(e) { + const { + href + } = e.currentTarget.dataset; + if (!href) return; + this.uparse.navigate(href, e); + }, + }, + }; +</script> diff --git a/components/uParse/src/components/wxParseTemplate10.vue b/components/uParse/src/components/wxParseTemplate10.vue new file mode 100644 index 0000000..40f0d54 --- /dev/null +++ b/components/uParse/src/components/wxParseTemplate10.vue @@ -0,0 +1,94 @@ +<template> + <view> + <!--判断是否是标签节点--> + <block v-if="node.node == 'element'"> + <block v-if="node.tag == 'button'"> + <button type="default" size="mini"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </button> + </block> + + <!--li类型--> + <block v-else-if="node.tag == 'li'"> + <view :class="node.classStr" :style="node.styleStr"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </view> + </block> + + <!--video类型--> + <block v-else-if="node.tag == 'video'"> + <wx-parse-video :node="node" /> + </block> + + <!--audio类型--> + <block v-else-if="node.tag == 'audio'"> + <wx-parse-audio :node="node" /> + </block> + + <!--img类型--> + <block v-else-if="node.tag == 'img'"> + <wx-parse-img :node="node" /> + </block> + + <!--a类型--> + <block v-else-if="node.tag == 'a'"> + <view @click="wxParseATap" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </view> + </block> + + <!--br类型--> + <block v-else-if="node.tag == 'br'"> + <text>\n</text> + </block> + + <!--其他标签--> + <block v-else> + <view :class="node.classStr" :style="node.styleStr"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </view> + </block> + </block> + + <!--判断是否是文本节点--> + <block v-else-if="node.node == 'text'">{{node.text}}</block> + </view> +</template> + +<script> + import wxParseTemplate from './wxParseTemplate11'; + import wxParseImg from './wxParseImg'; + import wxParseVideo from './wxParseVideo'; + import wxParseAudio from './wxParseAudio'; + + export default { + name: 'wxParseTemplate10', + props: { + node: {}, + }, + components: { + wxParseTemplate, + wxParseImg, + wxParseVideo, + wxParseAudio, + }, + inject: ['uparse'], + methods: { + wxParseATap(e) { + const { + href + } = e.currentTarget.dataset; + if (!href) return; + this.uparse.navigate(href, e); + } + } + }; +</script> diff --git a/components/uParse/src/components/wxParseTemplate11.vue b/components/uParse/src/components/wxParseTemplate11.vue new file mode 100644 index 0000000..81caa7f --- /dev/null +++ b/components/uParse/src/components/wxParseTemplate11.vue @@ -0,0 +1,84 @@ +<template> + <view> + <!--判断是否是标签节点--> + <block v-if="node.node == 'element'"> + <!--button类型--> + <block v-if="node.tag == 'button'"> + <button type="default" size="mini"> + </button> + </block> + + <!--li类型--> + <block v-else-if="node.tag == 'li'"> + <view :class="node.classStr" :style="node.styleStr"> + {{node.text}} + </view> + </block> + + <!--video类型--> + <block v-else-if="node.tag == 'video'"> + <wx-parse-video :node="node" /> + </block> + + <!--audio类型--> + <block v-else-if="node.tag == 'audio'"> + <wx-parse-audio :node="node" /> + </block> + + <!--img类型--> + <block v-else-if="node.tag == 'img'"> + <wx-parse-img :node="node" /> + </block> + + <!--a类型--> + <block v-else-if="node.tag == 'a'"> + <view @click="wxParseATap" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr"> + {{node.text}} + </view> + </block> + + <!--br类型--> + <block v-else-if="node.tag == 'br'"> + <text>\n</text> + </block> + + <!--其他标签--> + <block v-else> + <view :class="node.classStr" :style="node.styleStr"> + {{node.text}} + </view> + </block> + </block> + + <!--判断是否是文本节点--> + <block v-else-if="node.node == 'text'">{{node.text}}</block> + </view> +</template> + +<script> + import wxParseImg from './wxParseImg'; + import wxParseVideo from './wxParseVideo'; + import wxParseAudio from './wxParseAudio'; + + export default { + name: 'wxParseTemplate11', + props: { + node: {}, + }, + components: { + wxParseImg, + wxParseVideo, + wxParseAudio, + }, + inject: ['uparse'], + methods: { + wxParseATap(e) { + const { + href + } = e.currentTarget.dataset; + if (!href) return; + this.uparse.navigate(href, e); + } + } + }; +</script> diff --git a/components/uParse/src/components/wxParseTemplate2.vue b/components/uParse/src/components/wxParseTemplate2.vue new file mode 100644 index 0000000..a48f1be --- /dev/null +++ b/components/uParse/src/components/wxParseTemplate2.vue @@ -0,0 +1,95 @@ +<template> + <view> + <!--判断是否是标签节点--> + <block v-if="node.node == 'element'"> + <block v-if="node.tag == 'button'"> + <button type="default" size="mini"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </button> + </block> + + <!--li类型--> + <block v-else-if="node.tag == 'li'"> + <view :class="node.classStr" :style="node.styleStr"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </view> + </block> + + <!--video类型--> + <block v-else-if="node.tag == 'video'"> + <wx-parse-video :node="node" /> + </block> + + <!--audio类型--> + <block v-else-if="node.tag == 'audio'"> + <wx-parse-audio :node="node" /> + </block> + + <!--img类型--> + <block v-else-if="node.tag == 'img'"> + <wx-parse-img :node="node" /> + </block> + + <!--a类型--> + <block v-else-if="node.tag == 'a'"> + <view @click="wxParseATap" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </view> + </block> + + <!--br类型--> + <block v-else-if="node.tag == 'br'"> + <text>\n</text> + </block> + + <!--其他标签--> + <block v-else> + <view :class="node.classStr" :style="node.styleStr"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </view> + </block> + + </block> + + <!--判断是否是文本节点--> + <block v-else-if="node.node == 'text'">{{node.text}}</block> + </view> +</template> + +<script> + import wxParseTemplate from './wxParseTemplate3'; + import wxParseImg from './wxParseImg'; + import wxParseVideo from './wxParseVideo'; + import wxParseAudio from './wxParseAudio'; + + export default { + name: 'wxParseTemplate2', + props: { + node: {}, + }, + components: { + wxParseTemplate, + wxParseImg, + wxParseVideo, + wxParseAudio, + }, + inject: ['uparse'], + methods: { + wxParseATap(e) { + const { + href + } = e.currentTarget.dataset; + if (!href) return; + this.uparse.navigate(href, e); + } + } + }; +</script> diff --git a/components/uParse/src/components/wxParseTemplate3.vue b/components/uParse/src/components/wxParseTemplate3.vue new file mode 100644 index 0000000..90fc9bd --- /dev/null +++ b/components/uParse/src/components/wxParseTemplate3.vue @@ -0,0 +1,95 @@ +<template> + <view> + <!--判断是否是标签节点--> + <block v-if="node.node == 'element'"> + <block v-if="node.tag == 'button'"> + <button type="default" size="mini"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </button> + </block> + + <!--li类型--> + <block v-else-if="node.tag == 'li'"> + <view :class="node.classStr" :style="node.styleStr"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </view> + </block> + + <!--video类型--> + <block v-else-if="node.tag == 'video'"> + <wx-parse-video :node="node" /> + </block> + + <!--audio类型--> + <block v-else-if="node.tag == 'audio'"> + <wx-parse-audio :node="node" /> + </block> + + <!--img类型--> + <block v-else-if="node.tag == 'img'"> + <wx-parse-img :node="node" /> + </block> + + <!--a类型--> + <block v-else-if="node.tag == 'a'"> + <view @click="wxParseATap" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </view> + </block> + + <!--br类型--> + <block v-else-if="node.tag == 'br'"> + <text>\n</text> + </block> + + <!--其他标签--> + <block v-else> + <view :class="node.classStr" :style="node.styleStr"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </view> + </block> + + </block> + + <!--判断是否是文本节点--> + <block v-else-if="node.node == 'text'">{{node.text}}</block> + </view> +</template> + +<script> + import wxParseTemplate from './wxParseTemplate4'; + import wxParseImg from './wxParseImg'; + import wxParseVideo from './wxParseVideo'; + import wxParseAudio from './wxParseAudio'; + + export default { + name: 'wxParseTemplate3', + props: { + node: {}, + }, + components: { + wxParseTemplate, + wxParseImg, + wxParseVideo, + wxParseAudio, + }, + inject: ['uparse'], + methods: { + wxParseATap(e) { + const { + href + } = e.currentTarget.dataset; + if (!href) return; + this.uparse.navigate(href, e); + } + } + }; +</script> diff --git a/components/uParse/src/components/wxParseTemplate4.vue b/components/uParse/src/components/wxParseTemplate4.vue new file mode 100644 index 0000000..af20eef --- /dev/null +++ b/components/uParse/src/components/wxParseTemplate4.vue @@ -0,0 +1,95 @@ +<template> + <view> + <!--判断是否是标签节点--> + <block v-if="node.node == 'element'"> + <block v-if="node.tag == 'button'"> + <button type="default" size="mini"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </button> + </block> + + <!--li类型--> + <block v-else-if="node.tag == 'li'"> + <view :class="node.classStr" :style="node.styleStr"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </view> + </block> + + <!--video类型--> + <block v-else-if="node.tag == 'video'"> + <wx-parse-video :node="node" /> + </block> + + <!--audio类型--> + <block v-else-if="node.tag == 'audio'"> + <wx-parse-audio :node="node" /> + </block> + + <!--img类型--> + <block v-else-if="node.tag == 'img'"> + <wx-parse-img :node="node" /> + </block> + + <!--a类型--> + <block v-else-if="node.tag == 'a'"> + <view @click="wxParseATap" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </view> + </block> + + <!--br类型--> + <block v-else-if="node.tag == 'br'"> + <text>\n</text> + </block> + + <!--其他标签--> + <block v-else> + <view :class="node.classStr" :style="node.styleStr"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </view> + </block> + + </block> + + <!--判断是否是文本节点--> + <block v-else-if="node.node == 'text'">{{node.text}}</block> + </view> +</template> + +<script> + import wxParseTemplate from './wxParseTemplate5'; + import wxParseImg from './wxParseImg'; + import wxParseVideo from './wxParseVideo'; + import wxParseAudio from './wxParseAudio'; + + export default { + name: 'wxParseTemplate4', + props: { + node: {}, + }, + components: { + wxParseTemplate, + wxParseImg, + wxParseVideo, + wxParseAudio, + }, + inject: ['uparse'], + methods: { + wxParseATap(e) { + const { + href + } = e.currentTarget.dataset; + if (!href) return; + this.uparse.navigate(href, e); + } + } + }; +</script> diff --git a/components/uParse/src/components/wxParseTemplate5.vue b/components/uParse/src/components/wxParseTemplate5.vue new file mode 100644 index 0000000..0962239 --- /dev/null +++ b/components/uParse/src/components/wxParseTemplate5.vue @@ -0,0 +1,95 @@ +<template> + <view> + <!--判断是否是标签节点--> + <block v-if="node.node == 'element'"> + <block v-if="node.tag == 'button'"> + <button type="default" size="mini"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </button> + </block> + + <!--li类型--> + <block v-else-if="node.tag == 'li'"> + <view :class="node.classStr" :style="node.styleStr"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </view> + </block> + + <!--video类型--> + <block v-else-if="node.tag == 'video'"> + <wx-parse-video :node="node" /> + </block> + + <!--audio类型--> + <block v-else-if="node.tag == 'audio'"> + <wx-parse-audio :node="node" /> + </block> + + <!--img类型--> + <block v-else-if="node.tag == 'img'"> + <wx-parse-img :node="node" /> + </block> + + <!--a类型--> + <block v-else-if="node.tag == 'a'"> + <view @click="wxParseATap" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </view> + </block> + + <!--br类型--> + <block v-else-if="node.tag == 'br'"> + <text>\n</text> + </block> + + <!--其他标签--> + <block v-else> + <view :class="node.classStr" :style="node.styleStr"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </view> + </block> + + </block> + + <!--判断是否是文本节点--> + <block v-else-if="node.node == 'text'">{{node.text}}</block> + </view> +</template> + +<script> + import wxParseTemplate from './wxParseTemplate6'; + import wxParseImg from './wxParseImg'; + import wxParseVideo from './wxParseVideo'; + import wxParseAudio from './wxParseAudio'; + + export default { + name: 'wxParseTemplate5', + props: { + node: {}, + }, + components: { + wxParseTemplate, + wxParseImg, + wxParseVideo, + wxParseAudio, + }, + inject: ['uparse'], + methods: { + wxParseATap(e) { + const { + href + } = e.currentTarget.dataset; + if (!href) return; + this.uparse.navigate(href, e); + } + } + }; +</script> diff --git a/components/uParse/src/components/wxParseTemplate6.vue b/components/uParse/src/components/wxParseTemplate6.vue new file mode 100644 index 0000000..c322ab0 --- /dev/null +++ b/components/uParse/src/components/wxParseTemplate6.vue @@ -0,0 +1,95 @@ +<template> + <view> + <!--判断是否是标签节点--> + <block v-if="node.node == 'element'"> + <block v-if="node.tag == 'button'"> + <button type="default" size="mini"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </button> + </block> + + <!--li类型--> + <block v-else-if="node.tag == 'li'"> + <view :class="node.classStr" :style="node.styleStr"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </view> + </block> + + <!--video类型--> + <block v-else-if="node.tag == 'video'"> + <wx-parse-video :node="node" /> + </block> + + <!--audio类型--> + <block v-else-if="node.tag == 'audio'"> + <wx-parse-audio :node="node" /> + </block> + + <!--img类型--> + <block v-else-if="node.tag == 'img'"> + <wx-parse-img :node="node" /> + </block> + + <!--a类型--> + <block v-else-if="node.tag == 'a'"> + <view @click="wxParseATap" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </view> + </block> + + <!--br类型--> + <block v-else-if="node.tag == 'br'"> + <text>\n</text> + </block> + + <!--其他标签--> + <block v-else> + <view :class="node.classStr" :style="node.styleStr"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </view> + </block> + + </block> + + <!--判断是否是文本节点--> + <block v-else-if="node.node == 'text'">{{node.text}}</block> + </view> +</template> + +<script> + import wxParseTemplate from './wxParseTemplate7'; + import wxParseImg from './wxParseImg'; + import wxParseVideo from './wxParseVideo'; + import wxParseAudio from './wxParseAudio'; + + export default { + name: 'wxParseTemplate6', + props: { + node: {}, + }, + components: { + wxParseTemplate, + wxParseImg, + wxParseVideo, + wxParseAudio, + }, + inject: ['uparse'], + methods: { + wxParseATap(e) { + const { + href + } = e.currentTarget.dataset; + if (!href) return; + this.uparse.navigate(href, e); + } + } + }; +</script> diff --git a/components/uParse/src/components/wxParseTemplate7.vue b/components/uParse/src/components/wxParseTemplate7.vue new file mode 100644 index 0000000..591bcd6 --- /dev/null +++ b/components/uParse/src/components/wxParseTemplate7.vue @@ -0,0 +1,95 @@ +<template> + <view> + <!--判断是否是标签节点--> + <block v-if="node.node == 'element'"> + <block v-if="node.tag == 'button'"> + <button type="default" size="mini"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </button> + </block> + + <!--li类型--> + <block v-else-if="node.tag == 'li'"> + <view :class="node.classStr" :style="node.styleStr"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </view> + </block> + + <!--video类型--> + <block v-else-if="node.tag == 'video'"> + <wx-parse-video :node="node" /> + </block> + + <!--audio类型--> + <block v-else-if="node.tag == 'audio'"> + <wx-parse-audio :node="node" /> + </block> + + <!--img类型--> + <block v-else-if="node.tag == 'img'"> + <wx-parse-img :node="node" /> + </block> + + <!--a类型--> + <block v-else-if="node.tag == 'a'"> + <view @click="wxParseATap" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </view> + </block> + + <!--br类型--> + <block v-else-if="node.tag == 'br'"> + <text>\n</text> + </block> + + <!--其他标签--> + <block v-else> + <view :class="node.classStr" :style="node.styleStr"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </view> + </block> + + </block> + + <!--判断是否是文本节点--> + <block v-else-if="node.node == 'text'">{{node.text}}</block> + </view> +</template> + +<script> + import wxParseTemplate from './wxParseTemplate8'; + import wxParseImg from './wxParseImg'; + import wxParseVideo from './wxParseVideo'; + import wxParseAudio from './wxParseAudio'; + + export default { + name: 'wxParseTemplate7', + props: { + node: {}, + }, + components: { + wxParseTemplate, + wxParseImg, + wxParseVideo, + wxParseAudio, + }, + inject: ['uparse'], + methods: { + wxParseATap(e) { + const { + href + } = e.currentTarget.dataset; + if (!href) return; + this.uparse.navigate(href, e); + } + } + }; +</script> diff --git a/components/uParse/src/components/wxParseTemplate8.vue b/components/uParse/src/components/wxParseTemplate8.vue new file mode 100644 index 0000000..0ec0b3f --- /dev/null +++ b/components/uParse/src/components/wxParseTemplate8.vue @@ -0,0 +1,95 @@ +<template> + <view> + <!--判断是否是标签节点--> + <block v-if="node.node == 'element'"> + <block v-if="node.tag == 'button'"> + <button type="default" size="mini"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </button> + </block> + + <!--li类型--> + <block v-else-if="node.tag == 'li'"> + <view :class="node.classStr" :style="node.styleStr"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </view> + </block> + + <!--video类型--> + <block v-else-if="node.tag == 'video'"> + <wx-parse-video :node="node" /> + </block> + + <!--audio类型--> + <block v-else-if="node.tag == 'audio'"> + <wx-parse-audio :node="node" /> + </block> + + <!--img类型--> + <block v-else-if="node.tag == 'img'"> + <wx-parse-img :node="node" /> + </block> + + <!--a类型--> + <block v-else-if="node.tag == 'a'"> + <view @click="wxParseATap" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </view> + </block> + + <!--br类型--> + <block v-else-if="node.tag == 'br'"> + <text>\n</text> + </block> + + <!--其他标签--> + <block v-else> + <view :class="node.classStr" :style="node.styleStr"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </view> + </block> + + </block> + + <!--判断是否是文本节点--> + <block v-else-if="node.node == 'text'">{{node.text}}</block> + </view> +</template> + +<script> + import wxParseTemplate from './wxParseTemplate9'; + import wxParseImg from './wxParseImg'; + import wxParseVideo from './wxParseVideo'; + import wxParseAudio from './wxParseAudio'; + + export default { + name: 'wxParseTemplate8', + props: { + node: {}, + }, + components: { + wxParseTemplate, + wxParseImg, + wxParseVideo, + wxParseAudio, + }, + inject: ['uparse'], + methods: { + wxParseATap(e) { + const { + href + } = e.currentTarget.dataset; + if (!href) return; + this.uparse.navigate(href, e); + } + } + }; +</script> diff --git a/components/uParse/src/components/wxParseTemplate9.vue b/components/uParse/src/components/wxParseTemplate9.vue new file mode 100644 index 0000000..ec799ac --- /dev/null +++ b/components/uParse/src/components/wxParseTemplate9.vue @@ -0,0 +1,95 @@ +<template> + <view> + <!--判断是否是标签节点--> + <block v-if="node.node == 'element'"> + <block v-if="node.tag == 'button'"> + <button type="default" size="mini"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </button> + </block> + + <!--li类型--> + <block v-else-if="node.tag == 'li'"> + <view :class="node.classStr" :style="node.styleStr"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </view> + </block> + + <!--video类型--> + <block v-else-if="node.tag == 'video'"> + <wx-parse-video :node="node" /> + </block> + + <!--audio类型--> + <block v-else-if="node.tag == 'audio'"> + <wx-parse-audio :node="node" /> + </block> + + <!--img类型--> + <block v-else-if="node.tag == 'img'"> + <wx-parse-img :node="node" /> + </block> + + <!--a类型--> + <block v-else-if="node.tag == 'a'"> + <view @click="wxParseATap" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </view> + </block> + + <!--br类型--> + <block v-else-if="node.tag == 'br'"> + <text>\n</text> + </block> + + <!--其他标签--> + <block v-else> + <view :class="node.classStr" :style="node.styleStr"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </view> + </block> + + </block> + + <!--判断是否是文本节点--> + <block v-else-if="node.node == 'text'">{{node.text}}</block> + </view> +</template> + +<script> + import wxParseTemplate from './wxParseTemplate10'; + import wxParseImg from './wxParseImg'; + import wxParseVideo from './wxParseVideo'; + import wxParseAudio from './wxParseAudio'; + + export default { + name: 'wxParseTemplate9', + props: { + node: {}, + }, + components: { + wxParseTemplate, + wxParseImg, + wxParseVideo, + wxParseAudio, + }, + inject: ['uparse'], + methods: { + wxParseATap(e) { + const { + href + } = e.currentTarget.dataset; + if (!href) return; + this.uparse.navigate(href, e); + } + } + }; +</script> diff --git a/components/uParse/src/components/wxParseVideo.vue b/components/uParse/src/components/wxParseVideo.vue new file mode 100644 index 0000000..a952f58 --- /dev/null +++ b/components/uParse/src/components/wxParseVideo.vue @@ -0,0 +1,15 @@ +<template> + <!--增加video标签支持,并循环添加--> + <view :class="node.classStr" :style="node.styleStr"> + <video :class="node.classStr" class="video-video" :src="node.attr.src"></video> + </view> +</template> + +<script> +export default { + name: 'wxParseVideo', + props: { + node: {}, + }, +}; +</script> diff --git a/components/uParse/src/libs/html2json.js b/components/uParse/src/libs/html2json.js new file mode 100644 index 0000000..de1bdd4 --- /dev/null +++ b/components/uParse/src/libs/html2json.js @@ -0,0 +1,274 @@ +/** + * html2Json 改造来自: https://github.com/Jxck/html2json + * + * + * author: Di (微信小程序开发工程师) + * organization: WeAppDev(微信小程序开发论坛)(http://weappdev.com) + * 垂直微信小程序开发交流社区 + * + * github地址: https://github.com/icindy/wxParse + * + * for: 微信小程序富文本解析 + * detail : http://weappdev.com/t/wxparse-alpha0-1-html-markdown/184 + */ + +import wxDiscode from './wxDiscode'; +import HTMLParser from './htmlparser'; + +function makeMap(str) { + const obj = {}; + const items = str.split(','); + for (let i = 0; i < items.length; i += 1) obj[items[i]] = true; + return obj; +} + +// Block Elements - HTML 5 +const block = makeMap( + 'br,code,address,article,applet,aside,audio,blockquote,button,canvas,center,dd,del,dir,div,dl,dt,fieldset,figcaption,figure,footer,form,frameset,h1,h2,h3,h4,h5,h6,header,hgroup,hr,iframe,ins,isindex,li,map,menu,noframes,noscript,object,ol,output,p,pre,section,script,table,tbody,td,tfoot,th,thead,tr,ul,video' +); + +// Inline Elements - HTML 5 +const inline = makeMap( + 'a,abbr,acronym,applet,b,basefont,bdo,big,button,cite,del,dfn,em,font,i,iframe,img,input,ins,kbd,label,map,object,q,s,samp,script,select,small,span,strike,strong,sub,sup,textarea,tt,u,var' +); + +// Elements that you can, intentionally, leave open +// (and which close themselves) +const closeSelf = makeMap('colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr'); + +function removeDOCTYPE(html) { + const isDocument = /<body.*>([^]*)<\/body>/.test(html); + return isDocument ? RegExp.$1 : html; +} + +function trimHtml(html) { + return html + .replace(/<!--.*?-->/gi, '') + .replace(/\/\*.*?\*\//gi, '') + .replace(/[ ]+</gi, '<') + .replace(/<script[^]*<\/script>/gi, '') + .replace(/<style[^]*<\/style>/gi, ''); +} + +function getScreenInfo() { + const screen = {}; + wx.getSystemInfo({ + success: (res) => { + screen.width = res.windowWidth; + screen.height = res.windowHeight; + }, + }); + return screen; +} + +function html2json(html, customHandler, imageProp, host) { + // 处理字符串 + html = removeDOCTYPE(html); + html = trimHtml(html); + html = wxDiscode.strDiscode(html); + // 生成node节点 + const bufArray = []; + const results = { + nodes: [], + imageUrls: [], + }; + + const screen = getScreenInfo(); + + function Node(tag) { + this.node = 'element'; + this.tag = tag; + + this.$screen = screen; + } + + HTMLParser(html, { + start(tag, attrs, unary) { + // node for this element + const node = new Node(tag); + + if (bufArray.length !== 0) { + const parent = bufArray[0]; + if (parent.nodes === undefined) { + parent.nodes = []; + } + } + + if (block[tag]) { + node.tagType = 'block'; + } else if (inline[tag]) { + node.tagType = 'inline'; + } else if (closeSelf[tag]) { + node.tagType = 'closeSelf'; + } + + node.attr = attrs.reduce((pre, attr) => { + const { + name + } = attr; + let { + value + } = attr; + if (name === 'class') { + node.classStr = value; + } + // has multi attibutes + // make it array of attribute + if (name === 'style') { + node.styleStr = value; + } + if (name === 'align') { + node.styleStr = node.styleStr || ''; + node.styleStr = node.styleStr += 'text-align:' + value + ';'; + } + if (value.match(/ /)) { + value = value.split(' '); + } + + // if attr already exists + // merge it + if (pre[name]) { + if (Array.isArray(pre[name])) { + // already array, push to last + pre[name].push(value); + } else { + // single value, make it array + pre[name] = [pre[name], value]; + } + } else { + // not exist, put it + pre[name] = value; + } + + return pre; + }, {}); + + // 优化样式相关属性 + if (node.classStr) { + node.classStr += ` ${node.tag}`; + } else { + node.classStr = node.tag; + } + if (node.tagType === 'inline') { + node.classStr += ' inline'; + } + + // 对img添加额外数据 + if (node.tag === 'img') { + let imgUrl = node.attr.src; + imgUrl = wxDiscode.urlToHttpUrl(imgUrl, imageProp.domain); + Object.assign(node.attr, imageProp, { + src: imgUrl || '', + }); + if (imgUrl) { + results.imageUrls.push(imgUrl); + } + } + + // 处理a标签属性 + if (node.tag === 'a') { + node.attr.href = node.attr.href || ''; + } + + // 处理font标签样式属性 + if (node.tag === 'font') { + const fontSize = [ + 'x-small', + 'small', + 'medium', + 'large', + 'x-large', + 'xx-large', + '-webkit-xxx-large', + ]; + const styleAttrs = { + color: 'color', + face: 'font-family', + size: 'font-size', + }; + if (!node.styleStr) node.styleStr = ''; + Object.keys(styleAttrs).forEach((key) => { + if (node.attr[key]) { + const value = key === 'size' ? fontSize[node.attr[key] - 1] : node.attr[key]; + node.styleStr += `${styleAttrs[key]}: ${value};`; + } + }); + } + + // 临时记录source资源 + if (node.tag === 'source') { + results.source = node.attr.src; + } + + if (customHandler.start) { + customHandler.start(node, results); + } + + if (unary) { + // if this tag doesn't have end tag + // like <img src="hoge.png"/> + // add to parents + const parent = bufArray[0] || results; + if (parent.nodes === undefined) { + parent.nodes = []; + } + parent.nodes.push(node); + } else { + bufArray.unshift(node); + } + }, + end(tag) { + // merge into parent tag + const node = bufArray.shift(); + if (node.tag !== tag) { + console.error('invalid state: mismatch end tag'); + } + + // 当有缓存source资源时于于video补上src资源 + if (node.tag === 'video' && results.source) { + node.attr.src = results.source; + delete results.source; + } + + if (customHandler.end) { + customHandler.end(node, results); + } + + if (bufArray.length === 0) { + results.nodes.push(node); + } else { + const parent = bufArray[0]; + if (!parent.nodes) { + parent.nodes = []; + } + parent.nodes.push(node); + } + }, + chars(text) { + if (!text.trim()) return; + + const node = { + node: 'text', + text, + }; + + if (customHandler.chars) { + customHandler.chars(node, results); + } + + if (bufArray.length === 0) { + results.nodes.push(node); + } else { + const parent = bufArray[0]; + if (parent.nodes === undefined) { + parent.nodes = []; + } + parent.nodes.push(node); + } + }, + }); + + return results; +} + +export default html2json; diff --git a/components/uParse/src/libs/htmlparser.js b/components/uParse/src/libs/htmlparser.js new file mode 100644 index 0000000..2939da3 --- /dev/null +++ b/components/uParse/src/libs/htmlparser.js @@ -0,0 +1,156 @@ +/** + * + * htmlParser改造自: https://github.com/blowsie/Pure-JavaScript-HTML5-Parser + * + * author: Di (微信小程序开发工程师) + * organization: WeAppDev(微信小程序开发论坛)(http://weappdev.com) + * 垂直微信小程序开发交流社区 + * + * github地址: https://github.com/icindy/wxParse + * + * for: 微信小程序富文本解析 + * detail : http://weappdev.com/t/wxparse-alpha0-1-html-markdown/184 + */ +// Regular Expressions for parsing tags and attributes + +const startTag = /^<([-A-Za-z0-9_]+)((?:\s+[a-zA-Z0-9_:][-a-zA-Z0-9_:.]*(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)>/; +const endTag = /^<\/([-A-Za-z0-9_]+)[^>]*>/; +const attr = /([a-zA-Z0-9_:][-a-zA-Z0-9_:.]*)(?:\s*=\s*(?:(?:"((?:\\.|[^"])*)")|(?:'((?:\\.|[^'])*)')|([^>\s]+)))?/g; + +function makeMap(str) { + const obj = {}; + const items = str.split(','); + for (let i = 0; i < items.length; i += 1) obj[items[i]] = true; + return obj; +} + +// Empty Elements - HTML 5 +const empty = makeMap('area,base,basefont,br,col,frame,hr,img,input,link,meta,param,embed,command,keygen,source,track,wbr'); + +// Block Elements - HTML 5 +const block = makeMap('address,code,article,applet,aside,audio,blockquote,button,canvas,center,dd,del,dir,div,dl,dt,fieldset,figcaption,figure,footer,form,frameset,h1,h2,h3,h4,h5,h6,header,hgroup,hr,iframe,ins,isindex,li,map,menu,noframes,noscript,object,ol,output,p,pre,section,script,table,tbody,td,tfoot,th,thead,tr,ul,video'); + +// Inline Elements - HTML 5 +const inline = makeMap('a,abbr,acronym,applet,b,basefont,bdo,big,br,button,cite,del,dfn,em,font,i,iframe,img,input,ins,kbd,label,map,object,q,s,samp,script,select,small,span,strike,strong,sub,sup,textarea,tt,u,var'); + +// Elements that you can, intentionally, leave open +// (and which close themselves) +const closeSelf = makeMap('colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr'); + +// Attributes that have their values filled in disabled="disabled" +const fillAttrs = makeMap('checked,compact,declare,defer,disabled,ismap,multiple,nohref,noresize,noshade,nowrap,readonly,selected'); + +function HTMLParser(html, handler) { + let index; + let chars; + let match; + let last = html; + const stack = []; + + stack.last = () => stack[stack.length - 1]; + + function parseEndTag(tag, tagName) { + // If no tag name is provided, clean shop + let pos; + if (!tagName) { + pos = 0; + } else { + // Find the closest opened tag of the same type + tagName = tagName.toLowerCase(); + for (pos = stack.length - 1; pos >= 0; pos -= 1) { + if (stack[pos] === tagName) break; + } + } + if (pos >= 0) { + // Close all the open elements, up the stack + for (let i = stack.length - 1; i >= pos; i -= 1) { + if (handler.end) handler.end(stack[i]); + } + + // Remove the open elements from the stack + stack.length = pos; + } + } + + function parseStartTag(tag, tagName, rest, unary) { + tagName = tagName.toLowerCase(); + + if (block[tagName]) { + while (stack.last() && inline[stack.last()]) { + parseEndTag('', stack.last()); + } + } + + if (closeSelf[tagName] && stack.last() === tagName) { + parseEndTag('', tagName); + } + + unary = empty[tagName] || !!unary; + + if (!unary) stack.push(tagName); + + if (handler.start) { + const attrs = []; + + rest.replace(attr, function genAttr(matches, name) { + const value = arguments[2] || arguments[3] || arguments[4] || (fillAttrs[name] ? name : ''); + + attrs.push({ + name, + value, + escaped: value.replace(/(^|[^\\])"/g, '$1\\"'), // " + }); + }); + + if (handler.start) { + handler.start(tagName, attrs, unary); + } + } + } + + while (html) { + chars = true; + + if (html.indexOf('</') === 0) { + match = html.match(endTag); + + if (match) { + html = html.substring(match[0].length); + match[0].replace(endTag, parseEndTag); + chars = false; + } + + // start tag + } else if (html.indexOf('<') === 0) { + match = html.match(startTag); + + if (match) { + html = html.substring(match[0].length); + match[0].replace(startTag, parseStartTag); + chars = false; + } + } + + if (chars) { + index = html.indexOf('<'); + let text = ''; + while (index === 0) { + text += '<'; + html = html.substring(1); + index = html.indexOf('<'); + } + text += index < 0 ? html : html.substring(0, index); + html = index < 0 ? '' : html.substring(index); + + if (handler.chars) handler.chars(text); + } + + if (html === last) throw new Error(`Parse Error: ${html}`); + last = html; + } + + // Clean up any remaining tags + parseEndTag(); +} + +export default HTMLParser; diff --git a/components/uParse/src/libs/wxDiscode.js b/components/uParse/src/libs/wxDiscode.js new file mode 100644 index 0000000..a7a36a6 --- /dev/null +++ b/components/uParse/src/libs/wxDiscode.js @@ -0,0 +1,195 @@ +// HTML 支持的数学符号 +function strNumDiscode(str) { + str = str.replace(/∀/g, '∀'); + str = str.replace(/∂/g, '∂'); + str = str.replace(/∃/g, '∃'); + str = str.replace(/∅/g, '∅'); + str = str.replace(/∇/g, '∇'); + str = str.replace(/∈/g, '∈'); + str = str.replace(/∉/g, '∉'); + str = str.replace(/∋/g, '∋'); + str = str.replace(/∏/g, '∏'); + str = str.replace(/∑/g, '∑'); + str = str.replace(/−/g, '−'); + str = str.replace(/∗/g, '∗'); + str = str.replace(/√/g, '√'); + str = str.replace(/∝/g, '∝'); + str = str.replace(/∞/g, '∞'); + str = str.replace(/∠/g, '∠'); + str = str.replace(/∧/g, '∧'); + str = str.replace(/∨/g, '∨'); + str = str.replace(/∩/g, '∩'); + str = str.replace(/∪/g, '∪'); + str = str.replace(/∫/g, '∫'); + str = str.replace(/∴/g, '∴'); + str = str.replace(/∼/g, '∼'); + str = str.replace(/≅/g, '≅'); + str = str.replace(/≈/g, '≈'); + str = str.replace(/≠/g, '≠'); + str = str.replace(/≤/g, '≤'); + str = str.replace(/≥/g, '≥'); + str = str.replace(/⊂/g, '⊂'); + str = str.replace(/⊃/g, '⊃'); + str = str.replace(/⊄/g, '⊄'); + str = str.replace(/⊆/g, '⊆'); + str = str.replace(/⊇/g, '⊇'); + str = str.replace(/⊕/g, '⊕'); + str = str.replace(/⊗/g, '⊗'); + str = str.replace(/⊥/g, '⊥'); + str = str.replace(/⋅/g, '⋅'); + return str; +} + +// HTML 支持的希腊字母 +function strGreeceDiscode(str) { + str = str.replace(/Α/g, 'Α'); + str = str.replace(/Β/g, 'Β'); + str = str.replace(/Γ/g, 'Γ'); + str = str.replace(/Δ/g, 'Δ'); + str = str.replace(/Ε/g, 'Ε'); + str = str.replace(/Ζ/g, 'Ζ'); + str = str.replace(/Η/g, 'Η'); + str = str.replace(/Θ/g, 'Θ'); + str = str.replace(/Ι/g, 'Ι'); + str = str.replace(/Κ/g, 'Κ'); + str = str.replace(/Λ/g, 'Λ'); + str = str.replace(/Μ/g, 'Μ'); + str = str.replace(/Ν/g, 'Ν'); + str = str.replace(/Ξ/g, 'Ν'); + str = str.replace(/Ο/g, 'Ο'); + str = str.replace(/Π/g, 'Π'); + str = str.replace(/Ρ/g, 'Ρ'); + str = str.replace(/Σ/g, 'Σ'); + str = str.replace(/Τ/g, 'Τ'); + str = str.replace(/Υ/g, 'Υ'); + str = str.replace(/Φ/g, 'Φ'); + str = str.replace(/Χ/g, 'Χ'); + str = str.replace(/Ψ/g, 'Ψ'); + str = str.replace(/Ω/g, 'Ω'); + + str = str.replace(/α/g, 'α'); + str = str.replace(/β/g, 'β'); + str = str.replace(/γ/g, 'γ'); + str = str.replace(/δ/g, 'δ'); + str = str.replace(/ε/g, 'ε'); + str = str.replace(/ζ/g, 'ζ'); + str = str.replace(/η/g, 'η'); + str = str.replace(/θ/g, 'θ'); + str = str.replace(/ι/g, 'ι'); + str = str.replace(/κ/g, 'κ'); + str = str.replace(/λ/g, 'λ'); + str = str.replace(/μ/g, 'μ'); + str = str.replace(/ν/g, 'ν'); + str = str.replace(/ξ/g, 'ξ'); + str = str.replace(/ο/g, 'ο'); + str = str.replace(/π/g, 'π'); + str = str.replace(/ρ/g, 'ρ'); + str = str.replace(/ς/g, 'ς'); + str = str.replace(/σ/g, 'σ'); + str = str.replace(/τ/g, 'τ'); + str = str.replace(/υ/g, 'υ'); + str = str.replace(/φ/g, 'φ'); + str = str.replace(/χ/g, 'χ'); + str = str.replace(/ψ/g, 'ψ'); + str = str.replace(/ω/g, 'ω'); + str = str.replace(/ϑ/g, 'ϑ'); + str = str.replace(/ϒ/g, 'ϒ'); + str = str.replace(/ϖ/g, 'ϖ'); + str = str.replace(/·/g, '·'); + return str; +} + +function strcharacterDiscode(str) { + // 加入常用解析 + str = str.replace(/ /g, ' '); + str = str.replace(/ /g, ' '); + str = str.replace(/ /g, ' '); + str = str.replace(/"/g, "'"); + str = str.replace(/&/g, '&'); + str = str.replace(/</g, '<'); + str = str.replace(/>/g, '>'); + str = str.replace(/•/g, '•'); + + return str; +} + +// HTML 支持的其他实体 +function strOtherDiscode(str) { + str = str.replace(/Œ/g, 'Œ'); + str = str.replace(/œ/g, 'œ'); + str = str.replace(/Š/g, 'Š'); + str = str.replace(/š/g, 'š'); + str = str.replace(/Ÿ/g, 'Ÿ'); + str = str.replace(/ƒ/g, 'ƒ'); + str = str.replace(/ˆ/g, 'ˆ'); + str = str.replace(/˜/g, '˜'); + str = str.replace(/ /g, ''); + str = str.replace(/ /g, ''); + str = str.replace(/ /g, ''); + str = str.replace(/‌/g, ''); + str = str.replace(/‍/g, ''); + str = str.replace(/‎/g, ''); + str = str.replace(/‏/g, ''); + str = str.replace(/–/g, '–'); + str = str.replace(/—/g, '—'); + str = str.replace(/‘/g, '‘'); + str = str.replace(/’/g, '’'); + str = str.replace(/‚/g, '‚'); + str = str.replace(/“/g, '“'); + str = str.replace(/”/g, '”'); + str = str.replace(/„/g, '„'); + str = str.replace(/†/g, '†'); + str = str.replace(/‡/g, '‡'); + str = str.replace(/•/g, '•'); + str = str.replace(/…/g, '…'); + str = str.replace(/‰/g, '‰'); + str = str.replace(/′/g, '′'); + str = str.replace(/″/g, '″'); + str = str.replace(/‹/g, '‹'); + str = str.replace(/›/g, '›'); + str = str.replace(/‾/g, '‾'); + str = str.replace(/€/g, '€'); + str = str.replace(/™/g, '™'); + + str = str.replace(/←/g, '←'); + str = str.replace(/↑/g, '↑'); + str = str.replace(/→/g, '→'); + str = str.replace(/↓/g, '↓'); + str = str.replace(/↔/g, '↔'); + str = str.replace(/↵/g, '↵'); + str = str.replace(/⌈/g, '⌈'); + str = str.replace(/⌉/g, '⌉'); + + str = str.replace(/⌊/g, '⌊'); + str = str.replace(/⌋/g, '⌋'); + str = str.replace(/◊/g, '◊'); + str = str.replace(/♠/g, '♠'); + str = str.replace(/♣/g, '♣'); + str = str.replace(/♥/g, '♥'); + + str = str.replace(/♦/g, '♦'); + str = str.replace(/'/g, "'"); + return str; +} + +function strDiscode(str) { + str = strNumDiscode(str); + str = strGreeceDiscode(str); + str = strcharacterDiscode(str); + str = strOtherDiscode(str); + return str; +} + +function urlToHttpUrl(url, domain) { + if (/^\/\//.test(url)) { + return `https:${url}`; + } else if (/^\//.test(url)) { + return `https://${domain}${url}`; + } + return url; +} + +export default { + strDiscode, + urlToHttpUrl, +}; diff --git a/components/uParse/src/wxParse.css b/components/uParse/src/wxParse.css new file mode 100644 index 0000000..691993a --- /dev/null +++ b/components/uParse/src/wxParse.css @@ -0,0 +1,232 @@ +/** + * author: Di (微信小程序开发工程师) + * organization: WeAppDev(微信小程序开发论坛)(http://weappdev.com) + * 垂直微信小程序开发交流社区 + * + * github地址: https://github.com/icindy/wxParse + * + * for: 微信小程序富文本解析 + * detail : http://weappdev.com/t/wxparse-alpha0-1-html-markdown/184 + */ + +.wxParse { + width: 100%; + font-family: Helvetica, sans-serif; + font-size: 30upx; + color: #666; + line-height: 1.8; +} + +.wxParse view { + word-break: hyphenate; +} + +.wxParse .inline { + display: inline; + margin: 0; + padding: 0; +} + +.wxParse .div { + margin: 0; + padding: 0; +} + +.wxParse .h1 .text { + font-size: 2em; + margin: 0.67em 0; +} +.wxParse .h2 .text { + font-size: 1.5em; + margin: 0.83em 0; +} +.wxParse .h3 .text { + font-size: 1.17em; + margin: 1em 0; +} +.wxParse .h4 .text { + margin: 1.33em 0; +} +.wxParse .h5 .text { + font-size: 0.83em; + margin: 1.67em 0; +} +.wxParse .h6 .text { + font-size: 0.67em; + margin: 2.33em 0; +} + +.wxParse .h1 .text, +.wxParse .h2 .text, +.wxParse .h3 .text, +.wxParse .h4 .text, +.wxParse .h5 .text, +.wxParse .h6 .text, +.wxParse .b, +.wxParse .strong { + font-weight: bolder; +} + + +.wxParse .p { + margin: 1em 0; +} + +.wxParse .i, +.wxParse .cite, +.wxParse .em, +.wxParse .var, +.wxParse .address { + font-style: italic; +} + +.wxParse .pre, +.wxParse .tt, +.wxParse .code, +.wxParse .kbd, +.wxParse .samp { + font-family: monospace; +} +.wxParse .pre { + overflow: auto; + background: #f5f5f5; + padding: 16upx; + white-space: pre; + margin: 1em 0upx; +} +.wxParse .code { + display: inline; + background: #f5f5f5; +} + +.wxParse .big { + font-size: 1.17em; +} + +.wxParse .small, +.wxParse .sub, +.wxParse .sup { + font-size: 0.83em; +} + +.wxParse .sub { + vertical-align: sub; +} +.wxParse .sup { + vertical-align: super; +} + +.wxParse .s, +.wxParse .strike, +.wxParse .del { + text-decoration: line-through; +} + +.wxParse .strong, +.wxParse .s { + display: inline; +} + +.wxParse .a { + color: deepskyblue; +} + +.wxParse .video { + text-align: center; + margin: 22upx 0; +} + +.wxParse .video-video { + width: 100%; +} + +.wxParse .img { + display: inline-block; + width: 0; + height: 0; + max-width: 100%; + overflow: hidden; +} + +.wxParse .blockquote { + margin: 10upx 0; + padding: 22upx 0 22upx 22upx; + font-family: Courier, Calibri, "宋体"; + background: #f5f5f5; + border-left: 6upx solid #dbdbdb; +} +.wxParse .blockquote .p { + margin: 0; +} + +.wxParse .ul, .wxParse .ol { + display: block; + margin: 1em 0; + padding-left: 33upx; +} +.wxParse .ol { + list-style-type: disc; +} +.wxParse .ol { + list-style-type: decimal; +} +.wxParse .ol>weixin-parse-template,.wxParse .ul>weixin-parse-template { + display: list-item; + align-items: baseline; + text-align: match-parent; +} + +.wxParse .ol>.li,.wxParse .ul>.li { + display: list-item; + align-items: baseline; + text-align: match-parent; +} +.wxParse .ul .ul, .wxParse .ol .ul { + list-style-type: circle; +} +.wxParse .ol .ol .ul, .wxParse .ol .ul .ul, .wxParse .ul .ol .ul, .wxParse .ul .ul .ul { + list-style-type: square; +} + +.wxParse .u { + text-decoration: underline; +} +.wxParse .hide { + display: none; +} +.wxParse .del { + display: inline; +} +.wxParse .figure { + overflow: hidden; +} + +.wxParse .table { + width: 100%; +} +.wxParse .thead, .wxParse .tfoot, .wxParse .tr { + display: flex; + flex-direction: row; +} +.wxParse .tr { + width:100%; + display: flex; + border-right: 2upx solid #e0e0e0; + border-bottom: 2upx solid #e0e0e0; +} +.wxParse .th, +.wxParse .td { + display: flex; + width: 1276upx; + overflow: auto; + flex: 1; + padding: 11upx; + border-left: 2upx solid #e0e0e0; +} +.wxParse .td:last { + border-top: 2upx solid #e0e0e0; +} +.wxParse .th { + background: #f0f0f0; + border-top: 2upx solid #e0e0e0; +} diff --git a/components/uParse/src/wxParse.vue b/components/uParse/src/wxParse.vue new file mode 100644 index 0000000..0af913b --- /dev/null +++ b/components/uParse/src/wxParse.vue @@ -0,0 +1,126 @@ +<!--** + * forked from:https://github.com/F-loat/mpvue-wxParse + * + * github地址: https://github.com/dcloudio/uParse + * + * for: uni-app框架下 富文本解析 + */--> + +<template> + <!--基础元素--> + <view class="wxParse" :class="className" v-if="!loading"> + <view v-for="(node,index) of nodes" :key="index"> + <wxParseTemplate :node="node" /> + </view> + </view> +</template> + +<script> +import HtmlToJson from './libs/html2json'; +import wxParseTemplate from './components/wxParseTemplate0'; + +export default { + name: 'wxParse', + props: { + loading: { + type: Boolean, + default: false, + }, + className: { + type: String, + default: '', + }, + content: { + type: String, + default: '', + }, + noData: { + type: String, + default: '<div style="color: red;">数据不能为空</div>', + }, + startHandler: { + type: Function, + default() { + return (node) => { + node.attr.class = null; + node.attr.style = null; + }; + }, + }, + endHandler: { + type: Function, + default: null, + }, + charsHandler: { + type: Function, + default: null, + }, + imageProp: { + type: Object, + default() { + return { + mode: 'aspectFit', + padding: 0, + lazyLoad: false, + domain: '', + }; + }, + }, + }, + provide() { + return { + uparse: this + } + }, + components: { + wxParseTemplate, + }, + data() { + return { + imageUrls: [] + }; + }, + computed: { + nodes() { + const { + content, + noData, + imageProp, + startHandler, + endHandler, + charsHandler, + } = this; + const parseData = content || noData; + const customHandler = { + start: startHandler, + end: endHandler, + chars: charsHandler, + }; + const results = HtmlToJson(parseData, customHandler, imageProp, this); + this.imageUrls = results.imageUrls; + console.log(results.nodes) + return results.nodes; + }, + }, + methods: { + navigate(href, $event) { + this.$emit('navigate', href, $event); + }, + preview(src, $event) { + if (!this.imageUrls.length) return; + wx.previewImage({ + current: src, + urls: this.imageUrls, + }); + this.$emit('preview', src, $event); + }, + removeImageUrl(src) { + const { imageUrls } = this; + imageUrls.splice(imageUrls.indexOf(src), 1); + }, + }, +}; +</script> +<style> + +</style> diff --git a/components/uni-badge/uni-badge.vue b/components/uni-badge/uni-badge.vue new file mode 100644 index 0000000..0224ea4 --- /dev/null +++ b/components/uni-badge/uni-badge.vue @@ -0,0 +1,99 @@ +<template> + <text class="uni-badge" v-if="text" :class="inverted ? 'uni-badge-' + type + ' uni-badge--' + size + ' uni-badge-inverted' : 'uni-badge-' + type + ' uni-badge--' + size" @click="onClick()">{{text}}</text> +</template> + +<script> + export default { + name: 'uni-badge', + props: { + type: { + type: String, + default: 'default' + }, + inverted: { + type: Boolean, + default: false + }, + text: { + type: String, + default: '' + }, + size: { //small.normal + type: String, + default: 'normal' + } + }, + methods: { + onClick() { + this.$emit('click') + } + } + } +</script> + +<style> + @charset "UTF-8"; + + .uni-badge { + font-family: 'Helvetica Neue', Helvetica, sans-serif; + box-sizing: border-box; + font-size: 12px; + line-height: 1; + display: inline-block; + padding: 3px 6px; + color: #333; + border-radius: 100px; + background-color: #f1f1f1 + } + + .uni-badge.uni-badge-inverted { + padding: 0 5px 0 0; + color: #999; + background-color: transparent + } + + .uni-badge-primary { + color: #fff; + background-color: #007aff + } + + .uni-badge-primary.uni-badge-inverted { + color: #007aff; + background-color: transparent + } + + .uni-badge-success { + color: #fff; + background-color: #4cd964 + } + + .uni-badge-success.uni-badge-inverted { + color: #4cd964; + background-color: transparent + } + + .uni-badge-warning { + color: #fff; + background-color: #f0ad4e + } + + .uni-badge-warning.uni-badge-inverted { + color: #f0ad4e; + background-color: transparent + } + + .uni-badge-error { + color: #fff; + background-color: #dd524d + } + + .uni-badge-error.uni-badge-inverted { + color: #dd524d; + background-color: transparent + } + + .uni-badge--small { + transform: scale(.8); + transform-origin: center center + } +</style> \ No newline at end of file diff --git a/components/uni-calendar/calendar.js b/components/uni-calendar/calendar.js new file mode 100644 index 0000000..b8d7d6f --- /dev/null +++ b/components/uni-calendar/calendar.js @@ -0,0 +1,546 @@ +/** +* @1900-2100区间内的公历、农历互转 +* @charset UTF-8 +* @github https://github.com/jjonline/calendar.js +* @Author Jea杨(JJonline@JJonline.Cn) +* @Time 2014-7-21 +* @Time 2016-8-13 Fixed 2033hex、Attribution Annals +* @Time 2016-9-25 Fixed lunar LeapMonth Param Bug +* @Time 2017-7-24 Fixed use getTerm Func Param Error.use solar year,NOT lunar year +* @Version 1.0.3 +* @公历转农历:calendar.solar2lunar(1987,11,01); //[you can ignore params of prefix 0] +* @农历转公历:calendar.lunar2solar(1987,09,10); //[you can ignore params of prefix 0] +*/ +/* eslint-disable */ +var calendar = { + + /** + * 农历1900-2100的润大小信息表 + * @Array Of Property + * @return Hex + */ + lunarInfo: [0x04bd8, 0x04ae0, 0x0a570, 0x054d5, 0x0d260, 0x0d950, 0x16554, 0x056a0, 0x09ad0, 0x055d2, // 1900-1909 + 0x04ae0, 0x0a5b6, 0x0a4d0, 0x0d250, 0x1d255, 0x0b540, 0x0d6a0, 0x0ada2, 0x095b0, 0x14977, // 1910-1919 + 0x04970, 0x0a4b0, 0x0b4b5, 0x06a50, 0x06d40, 0x1ab54, 0x02b60, 0x09570, 0x052f2, 0x04970, // 1920-1929 + 0x06566, 0x0d4a0, 0x0ea50, 0x06e95, 0x05ad0, 0x02b60, 0x186e3, 0x092e0, 0x1c8d7, 0x0c950, // 1930-1939 + 0x0d4a0, 0x1d8a6, 0x0b550, 0x056a0, 0x1a5b4, 0x025d0, 0x092d0, 0x0d2b2, 0x0a950, 0x0b557, // 1940-1949 + 0x06ca0, 0x0b550, 0x15355, 0x04da0, 0x0a5b0, 0x14573, 0x052b0, 0x0a9a8, 0x0e950, 0x06aa0, // 1950-1959 + 0x0aea6, 0x0ab50, 0x04b60, 0x0aae4, 0x0a570, 0x05260, 0x0f263, 0x0d950, 0x05b57, 0x056a0, // 1960-1969 + 0x096d0, 0x04dd5, 0x04ad0, 0x0a4d0, 0x0d4d4, 0x0d250, 0x0d558, 0x0b540, 0x0b6a0, 0x195a6, // 1970-1979 + 0x095b0, 0x049b0, 0x0a974, 0x0a4b0, 0x0b27a, 0x06a50, 0x06d40, 0x0af46, 0x0ab60, 0x09570, // 1980-1989 + 0x04af5, 0x04970, 0x064b0, 0x074a3, 0x0ea50, 0x06b58, 0x05ac0, 0x0ab60, 0x096d5, 0x092e0, // 1990-1999 + 0x0c960, 0x0d954, 0x0d4a0, 0x0da50, 0x07552, 0x056a0, 0x0abb7, 0x025d0, 0x092d0, 0x0cab5, // 2000-2009 + 0x0a950, 0x0b4a0, 0x0baa4, 0x0ad50, 0x055d9, 0x04ba0, 0x0a5b0, 0x15176, 0x052b0, 0x0a930, // 2010-2019 + 0x07954, 0x06aa0, 0x0ad50, 0x05b52, 0x04b60, 0x0a6e6, 0x0a4e0, 0x0d260, 0x0ea65, 0x0d530, // 2020-2029 + 0x05aa0, 0x076a3, 0x096d0, 0x04afb, 0x04ad0, 0x0a4d0, 0x1d0b6, 0x0d250, 0x0d520, 0x0dd45, // 2030-2039 + 0x0b5a0, 0x056d0, 0x055b2, 0x049b0, 0x0a577, 0x0a4b0, 0x0aa50, 0x1b255, 0x06d20, 0x0ada0, // 2040-2049 + /** Add By JJonline@JJonline.Cn**/ + 0x14b63, 0x09370, 0x049f8, 0x04970, 0x064b0, 0x168a6, 0x0ea50, 0x06b20, 0x1a6c4, 0x0aae0, // 2050-2059 + 0x0a2e0, 0x0d2e3, 0x0c960, 0x0d557, 0x0d4a0, 0x0da50, 0x05d55, 0x056a0, 0x0a6d0, 0x055d4, // 2060-2069 + 0x052d0, 0x0a9b8, 0x0a950, 0x0b4a0, 0x0b6a6, 0x0ad50, 0x055a0, 0x0aba4, 0x0a5b0, 0x052b0, // 2070-2079 + 0x0b273, 0x06930, 0x07337, 0x06aa0, 0x0ad50, 0x14b55, 0x04b60, 0x0a570, 0x054e4, 0x0d160, // 2080-2089 + 0x0e968, 0x0d520, 0x0daa0, 0x16aa6, 0x056d0, 0x04ae0, 0x0a9d4, 0x0a2d0, 0x0d150, 0x0f252, // 2090-2099 + 0x0d520], // 2100 + + /** + * 公历每个月份的天数普通表 + * @Array Of Property + * @return Number + */ + solarMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31], + + /** + * 天干地支之天干速查表 + * @Array Of Property trans["甲","乙","丙","丁","戊","己","庚","辛","壬","癸"] + * @return Cn string + */ + Gan: ['\u7532', '\u4e59', '\u4e19', '\u4e01', '\u620a', '\u5df1', '\u5e9a', '\u8f9b', '\u58ec', '\u7678'], + + /** + * 天干地支之地支速查表 + * @Array Of Property + * @trans["子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"] + * @return Cn string + */ + Zhi: ['\u5b50', '\u4e11', '\u5bc5', '\u536f', '\u8fb0', '\u5df3', '\u5348', '\u672a', '\u7533', '\u9149', '\u620c', '\u4ea5'], + + /** + * 天干地支之地支速查表<=>生肖 + * @Array Of Property + * @trans["鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪"] + * @return Cn string + */ + Animals: ['\u9f20', '\u725b', '\u864e', '\u5154', '\u9f99', '\u86c7', '\u9a6c', '\u7f8a', '\u7334', '\u9e21', '\u72d7', '\u732a'], + + /** + * 24节气速查表 + * @Array Of Property + * @trans["小寒","大寒","立春","雨水","惊蛰","春分","清明","谷雨","立夏","小满","芒种","夏至","小暑","大暑","立秋","处暑","白露","秋分","寒露","霜降","立冬","小雪","大雪","冬至"] + * @return Cn string + */ + solarTerm: ['\u5c0f\u5bd2', '\u5927\u5bd2', '\u7acb\u6625', '\u96e8\u6c34', '\u60ca\u86f0', '\u6625\u5206', '\u6e05\u660e', '\u8c37\u96e8', '\u7acb\u590f', '\u5c0f\u6ee1', '\u8292\u79cd', '\u590f\u81f3', '\u5c0f\u6691', '\u5927\u6691', '\u7acb\u79cb', '\u5904\u6691', '\u767d\u9732', '\u79cb\u5206', '\u5bd2\u9732', '\u971c\u964d', '\u7acb\u51ac', '\u5c0f\u96ea', '\u5927\u96ea', '\u51ac\u81f3'], + + /** + * 1900-2100各年的24节气日期速查表 + * @Array Of Property + * @return 0x string For splice + */ + sTermInfo: ['9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf97c3598082c95f8c965cc920f', + '97bd0b06bdb0722c965ce1cfcc920f', 'b027097bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf97c359801ec95f8c965cc920f', '97bd0b06bdb0722c965ce1cfcc920f', 'b027097bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f', '97bd0b06bdb0722c965ce1cfcc920f', + 'b027097bd097c36b0b6fc9274c91aa', '9778397bd19801ec9210c965cc920e', '97b6b97bd19801ec95f8c965cc920f', + '97bd09801d98082c95f8e1cfcc920f', '97bd097bd097c36b0b6fc9210c8dc2', '9778397bd197c36c9210c9274c91aa', + '97b6b97bd19801ec95f8c965cc920e', '97bd09801d98082c95f8e1cfcc920f', '97bd097bd097c36b0b6fc9210c8dc2', + '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec95f8c965cc920e', '97bcf97c3598082c95f8e1cfcc920f', + '97bd097bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf97c3598082c95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c965cc920e', '97bcf97c3598082c95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722', + '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f', + '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf97c359801ec95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f', '97bd097bd07f595b0b6fc920fb0722', + '9778397bd097c36b0b6fc9210c8dc2', '9778397bd19801ec9210c9274c920e', '97b6b97bd19801ec95f8c965cc920f', + '97bd07f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c920e', + '97b6b97bd19801ec95f8c965cc920f', '97bd07f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2', + '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bd07f1487f595b0b0bc920fb0722', + '7f0e397bd097c36b0b6fc9210c8dc2', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf7f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c965cc920e', '97bcf7f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', + '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf7f1487f531b0b0bb0b6fb0722', + '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf7f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c9274c920e', '97bcf7f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', + '9778397bd097c36b0b6fc9210c91aa', '97b6b97bd197c36c9210c9274c920e', '97bcf7f0e47f531b0b0bb0b6fb0722', + '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c920e', + '97b6b7f0e47f531b0723b0b6fb0722', '7f0e37f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2', + '9778397bd097c36b0b70c9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', '7f0e37f1487f595b0b0bb0b6fb0722', + '7f0e397bd097c35b0b6fc9210c8dc2', '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', + '7f0e27f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', + '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', + '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', + '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b7f0e47f531b0723b0787b0721', '7f0e27f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', + '9778397bd097c36b0b6fc9210c91aa', '97b6b7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', + '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9210c8dc2', '977837f0e37f149b0723b0787b0721', + '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f5307f595b0b0bc920fb0722', '7f0e397bd097c35b0b6fc9210c8dc2', + '977837f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e37f1487f595b0b0bb0b6fb0722', + '7f0e397bd097c35b0b6fc9210c8dc2', '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', + '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '977837f0e37f14998082b0787b06bd', + '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', + '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', + '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', + '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14998082b0787b06bd', + '7f07e7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', + '977837f0e37f14998082b0723b06bd', '7f07e7f0e37f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', + '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b0721', + '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f1487f595b0b0bb0b6fb0722', '7f0e37f0e37f14898082b0723b02d5', + '7ec967f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f1487f531b0b0bb0b6fb0722', + '7f0e37f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', + '7f0e37f1487f531b0b0bb0b6fb0722', '7f0e37f0e37f14898082b072297c35', '7ec967f0e37f14998082b0787b06bd', + '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e37f0e37f14898082b072297c35', + '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', + '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f149b0723b0787b0721', + '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14998082b0723b06bd', + '7f07e7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', '7f0e37f0e366aa89801eb072297c35', + '7ec967f0e37f14998082b0723b06bd', '7f07e7f0e37f14998083b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', + '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14898082b0723b02d5', '7f07e7f0e37f14998082b0787b0721', + '7f07e7f0e47f531b0723b0b6fb0722', '7f0e36665b66aa89801e9808297c35', '665f67f0e37f14898082b0723b02d5', + '7ec967f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0722', '7f0e36665b66a449801e9808297c35', + '665f67f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', + '7f0e36665b66a449801e9808297c35', '665f67f0e37f14898082b072297c35', '7ec967f0e37f14998082b0787b06bd', + '7f07e7f0e47f531b0723b0b6fb0721', '7f0e26665b66a449801e9808297c35', '665f67f0e37f1489801eb072297c35', + '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722'], + + /** + * 数字转中文速查表 + * @Array Of Property + * @trans ['日','一','二','三','四','五','六','七','八','九','十'] + * @return Cn string + */ + nStr1: ['\u65e5', '\u4e00', '\u4e8c', '\u4e09', '\u56db', '\u4e94', '\u516d', '\u4e03', '\u516b', '\u4e5d', '\u5341'], + + /** + * 日期转农历称呼速查表 + * @Array Of Property + * @trans ['初','十','廿','卅'] + * @return Cn string + */ + nStr2: ['\u521d', '\u5341', '\u5eff', '\u5345'], + + /** + * 月份转农历称呼速查表 + * @Array Of Property + * @trans ['正','一','二','三','四','五','六','七','八','九','十','冬','腊'] + * @return Cn string + */ + nStr3: ['\u6b63', '\u4e8c', '\u4e09', '\u56db', '\u4e94', '\u516d', '\u4e03', '\u516b', '\u4e5d', '\u5341', '\u51ac', '\u814a'], + + /** + * 返回农历y年一整年的总天数 + * @param lunar Year + * @return Number + * @eg:var count = calendar.lYearDays(1987) ;//count=387 + */ + lYearDays: function (y) { + var i; var sum = 348 + for (i = 0x8000; i > 0x8; i >>= 1) { sum += (this.lunarInfo[y - 1900] & i) ? 1 : 0 } + return (sum + this.leapDays(y)) + }, + + /** + * 返回农历y年闰月是哪个月;若y年没有闰月 则返回0 + * @param lunar Year + * @return Number (0-12) + * @eg:var leapMonth = calendar.leapMonth(1987) ;//leapMonth=6 + */ + leapMonth: function (y) { // 闰字编码 \u95f0 + return (this.lunarInfo[y - 1900] & 0xf) + }, + + /** + * 返回农历y年闰月的天数 若该年没有闰月则返回0 + * @param lunar Year + * @return Number (0、29、30) + * @eg:var leapMonthDay = calendar.leapDays(1987) ;//leapMonthDay=29 + */ + leapDays: function (y) { + if (this.leapMonth(y)) { + return ((this.lunarInfo[y - 1900] & 0x10000) ? 30 : 29) + } + return (0) + }, + + /** + * 返回农历y年m月(非闰月)的总天数,计算m为闰月时的天数请使用leapDays方法 + * @param lunar Year + * @return Number (-1、29、30) + * @eg:var MonthDay = calendar.monthDays(1987,9) ;//MonthDay=29 + */ + monthDays: function (y, m) { + if (m > 12 || m < 1) { return -1 }// 月份参数从1至12,参数错误返回-1 + return ((this.lunarInfo[y - 1900] & (0x10000 >> m)) ? 30 : 29) + }, + + /** + * 返回公历(!)y年m月的天数 + * @param solar Year + * @return Number (-1、28、29、30、31) + * @eg:var solarMonthDay = calendar.leapDays(1987) ;//solarMonthDay=30 + */ + solarDays: function (y, m) { + if (m > 12 || m < 1) { return -1 } // 若参数错误 返回-1 + var ms = m - 1 + if (ms == 1) { // 2月份的闰平规律测算后确认返回28或29 + return (((y % 4 == 0) && (y % 100 != 0) || (y % 400 == 0)) ? 29 : 28) + } else { + return (this.solarMonth[ms]) + } + }, + + /** + * 农历年份转换为干支纪年 + * @param lYear 农历年的年份数 + * @return Cn string + */ + toGanZhiYear: function (lYear) { + var ganKey = (lYear - 3) % 10 + var zhiKey = (lYear - 3) % 12 + if (ganKey == 0) ganKey = 10// 如果余数为0则为最后一个天干 + if (zhiKey == 0) zhiKey = 12// 如果余数为0则为最后一个地支 + return this.Gan[ganKey - 1] + this.Zhi[zhiKey - 1] + }, + + /** + * 公历月、日判断所属星座 + * @param cMonth [description] + * @param cDay [description] + * @return Cn string + */ + toAstro: function (cMonth, cDay) { + var s = '\u9b54\u7faf\u6c34\u74f6\u53cc\u9c7c\u767d\u7f8a\u91d1\u725b\u53cc\u5b50\u5de8\u87f9\u72ee\u5b50\u5904\u5973\u5929\u79e4\u5929\u874e\u5c04\u624b\u9b54\u7faf' + var arr = [20, 19, 21, 21, 21, 22, 23, 23, 23, 23, 22, 22] + return s.substr(cMonth * 2 - (cDay < arr[cMonth - 1] ? 2 : 0), 2) + '\u5ea7'// 座 + }, + + /** + * 传入offset偏移量返回干支 + * @param offset 相对甲子的偏移量 + * @return Cn string + */ + toGanZhi: function (offset) { + return this.Gan[offset % 10] + this.Zhi[offset % 12] + }, + + /** + * 传入公历(!)y年获得该年第n个节气的公历日期 + * @param y公历年(1900-2100);n二十四节气中的第几个节气(1~24);从n=1(小寒)算起 + * @return day Number + * @eg:var _24 = calendar.getTerm(1987,3) ;//_24=4;意即1987年2月4日立春 + */ + getTerm: function (y, n) { + if (y < 1900 || y > 2100) { return -1 } + if (n < 1 || n > 24) { return -1 } + var _table = this.sTermInfo[y - 1900] + var _info = [ + parseInt('0x' + _table.substr(0, 5)).toString(), + parseInt('0x' + _table.substr(5, 5)).toString(), + parseInt('0x' + _table.substr(10, 5)).toString(), + parseInt('0x' + _table.substr(15, 5)).toString(), + parseInt('0x' + _table.substr(20, 5)).toString(), + parseInt('0x' + _table.substr(25, 5)).toString() + ] + var _calday = [ + _info[0].substr(0, 1), + _info[0].substr(1, 2), + _info[0].substr(3, 1), + _info[0].substr(4, 2), + + _info[1].substr(0, 1), + _info[1].substr(1, 2), + _info[1].substr(3, 1), + _info[1].substr(4, 2), + + _info[2].substr(0, 1), + _info[2].substr(1, 2), + _info[2].substr(3, 1), + _info[2].substr(4, 2), + + _info[3].substr(0, 1), + _info[3].substr(1, 2), + _info[3].substr(3, 1), + _info[3].substr(4, 2), + + _info[4].substr(0, 1), + _info[4].substr(1, 2), + _info[4].substr(3, 1), + _info[4].substr(4, 2), + + _info[5].substr(0, 1), + _info[5].substr(1, 2), + _info[5].substr(3, 1), + _info[5].substr(4, 2) + ] + return parseInt(_calday[n - 1]) + }, + + /** + * 传入农历数字月份返回汉语通俗表示法 + * @param lunar month + * @return Cn string + * @eg:var cnMonth = calendar.toChinaMonth(12) ;//cnMonth='腊月' + */ + toChinaMonth: function (m) { // 月 => \u6708 + if (m > 12 || m < 1) { return -1 } // 若参数错误 返回-1 + var s = this.nStr3[m - 1] + s += '\u6708'// 加上月字 + return s + }, + + /** + * 传入农历日期数字返回汉字表示法 + * @param lunar day + * @return Cn string + * @eg:var cnDay = calendar.toChinaDay(21) ;//cnMonth='廿一' + */ + toChinaDay: function (d) { // 日 => \u65e5 + var s + switch (d) { + case 10: + s = '\u521d\u5341'; break + case 20: + s = '\u4e8c\u5341'; break + break + case 30: + s = '\u4e09\u5341'; break + break + default : + s = this.nStr2[Math.floor(d / 10)] + s += this.nStr1[d % 10] + } + return (s) + }, + + /** + * 年份转生肖[!仅能大致转换] => 精确划分生肖分界线是“立春” + * @param y year + * @return Cn string + * @eg:var animal = calendar.getAnimal(1987) ;//animal='兔' + */ + getAnimal: function (y) { + return this.Animals[(y - 4) % 12] + }, + + /** + * 传入阳历年月日获得详细的公历、农历object信息 <=>JSON + * @param y solar year + * @param m solar month + * @param d solar day + * @return JSON object + * @eg:console.log(calendar.solar2lunar(1987,11,01)); + */ + solar2lunar: function (y, m, d) { // 参数区间1900.1.31~2100.12.31 + // 年份限定、上限 + if (y < 1900 || y > 2100) { + return -1// undefined转换为数字变为NaN + } + // 公历传参最下限 + if (y == 1900 && m == 1 && d < 31) { + return -1 + } + // 未传参 获得当天 + if (!y) { + var objDate = new Date() + } else { + var objDate = new Date(y, parseInt(m) - 1, d) + } + var i; var leap = 0; var temp = 0 + // 修正ymd参数 + var y = objDate.getFullYear() + var m = objDate.getMonth() + 1 + var d = objDate.getDate() + var offset = (Date.UTC(objDate.getFullYear(), objDate.getMonth(), objDate.getDate()) - Date.UTC(1900, 0, 31)) / 86400000 + for (i = 1900; i < 2101 && offset > 0; i++) { + temp = this.lYearDays(i) + offset -= temp + } + if (offset < 0) { + offset += temp; i-- + } + + // 是否今天 + var isTodayObj = new Date() + var isToday = false + if (isTodayObj.getFullYear() == y && isTodayObj.getMonth() + 1 == m && isTodayObj.getDate() == d) { + isToday = true + } + // 星期几 + var nWeek = objDate.getDay() + var cWeek = this.nStr1[nWeek] + // 数字表示周几顺应天朝周一开始的惯例 + if (nWeek == 0) { + nWeek = 7 + } + // 农历年 + var year = i + var leap = this.leapMonth(i) // 闰哪个月 + var isLeap = false + + // 效验闰月 + for (i = 1; i < 13 && offset > 0; i++) { + // 闰月 + if (leap > 0 && i == (leap + 1) && isLeap == false) { + --i + isLeap = true; temp = this.leapDays(year) // 计算农历闰月天数 + } else { + temp = this.monthDays(year, i)// 计算农历普通月天数 + } + // 解除闰月 + if (isLeap == true && i == (leap + 1)) { isLeap = false } + offset -= temp + } + // 闰月导致数组下标重叠取反 + if (offset == 0 && leap > 0 && i == leap + 1) { + if (isLeap) { + isLeap = false + } else { + isLeap = true; --i + } + } + if (offset < 0) { + offset += temp; --i + } + // 农历月 + var month = i + // 农历日 + var day = offset + 1 + // 天干地支处理 + var sm = m - 1 + var gzY = this.toGanZhiYear(year) + + // 当月的两个节气 + // bugfix-2017-7-24 11:03:38 use lunar Year Param `y` Not `year` + var firstNode = this.getTerm(y, (m * 2 - 1))// 返回当月「节」为几日开始 + var secondNode = this.getTerm(y, (m * 2))// 返回当月「节」为几日开始 + + // 依据12节气修正干支月 + var gzM = this.toGanZhi((y - 1900) * 12 + m + 11) + if (d >= firstNode) { + gzM = this.toGanZhi((y - 1900) * 12 + m + 12) + } + + // 传入的日期的节气与否 + var isTerm = false + var Term = null + if (firstNode == d) { + isTerm = true + Term = this.solarTerm[m * 2 - 2] + } + if (secondNode == d) { + isTerm = true + Term = this.solarTerm[m * 2 - 1] + } + // 日柱 当月一日与 1900/1/1 相差天数 + var dayCyclical = Date.UTC(y, sm, 1, 0, 0, 0, 0) / 86400000 + 25567 + 10 + var gzD = this.toGanZhi(dayCyclical + d - 1) + // 该日期所属的星座 + var astro = this.toAstro(m, d) + + return { 'lYear': year, 'lMonth': month, 'lDay': day, 'Animal': this.getAnimal(year), 'IMonthCn': (isLeap ? '\u95f0' : '') + this.toChinaMonth(month), 'IDayCn': this.toChinaDay(day), 'cYear': y, 'cMonth': m, 'cDay': d, 'gzYear': gzY, 'gzMonth': gzM, 'gzDay': gzD, 'isToday': isToday, 'isLeap': isLeap, 'nWeek': nWeek, 'ncWeek': '\u661f\u671f' + cWeek, 'isTerm': isTerm, 'Term': Term, 'astro': astro } + }, + + /** + * 传入农历年月日以及传入的月份是否闰月获得详细的公历、农历object信息 <=>JSON + * @param y lunar year + * @param m lunar month + * @param d lunar day + * @param isLeapMonth lunar month is leap or not.[如果是农历闰月第四个参数赋值true即可] + * @return JSON object + * @eg:console.log(calendar.lunar2solar(1987,9,10)); + */ + lunar2solar: function (y, m, d, isLeapMonth) { // 参数区间1900.1.31~2100.12.1 + var isLeapMonth = !!isLeapMonth + var leapOffset = 0 + var leapMonth = this.leapMonth(y) + var leapDay = this.leapDays(y) + if (isLeapMonth && (leapMonth != m)) { return -1 }// 传参要求计算该闰月公历 但该年得出的闰月与传参的月份并不同 + if (y == 2100 && m == 12 && d > 1 || y == 1900 && m == 1 && d < 31) { return -1 }// 超出了最大极限值 + var day = this.monthDays(y, m) + var _day = day + // bugFix 2016-9-25 + // if month is leap, _day use leapDays method + if (isLeapMonth) { + _day = this.leapDays(y, m) + } + if (y < 1900 || y > 2100 || d > _day) { return -1 }// 参数合法性效验 + + // 计算农历的时间差 + var offset = 0 + for (var i = 1900; i < y; i++) { + offset += this.lYearDays(i) + } + var leap = 0; var isAdd = false + for (var i = 1; i < m; i++) { + leap = this.leapMonth(y) + if (!isAdd) { // 处理闰月 + if (leap <= i && leap > 0) { + offset += this.leapDays(y); isAdd = true + } + } + offset += this.monthDays(y, i) + } + // 转换闰月农历 需补充该年闰月的前一个月的时差 + if (isLeapMonth) { offset += day } + // 1900年农历正月一日的公历时间为1900年1月30日0时0分0秒(该时间也是本农历的最开始起始点) + var stmap = Date.UTC(1900, 1, 30, 0, 0, 0) + var calObj = new Date((offset + d - 31) * 86400000 + stmap) + var cY = calObj.getUTCFullYear() + var cM = calObj.getUTCMonth() + 1 + var cD = calObj.getUTCDate() + + return this.solar2lunar(cY, cM, cD) + } +} + +export default calendar diff --git a/components/uni-calendar/uni-calendar-item.vue b/components/uni-calendar/uni-calendar-item.vue new file mode 100644 index 0000000..c66a58d --- /dev/null +++ b/components/uni-calendar/uni-calendar-item.vue @@ -0,0 +1,170 @@ +<template> + <view class="uni-calendar-item__weeks-box" :class="{ + 'uni-calendar-item--disable':weeks.disable, + 'uni-calendar-item--isDay':calendar.fullDate === weeks.fullDate && weeks.isDay, + 'uni-calendar-item--checked':(calendar.fullDate === weeks.fullDate && !weeks.isDay) , + 'uni-calendar-item--before-checked':weeks.beforeMultiple, + 'uni-calendar-item--multiple': weeks.multiple, + 'uni-calendar-item--after-checked':weeks.afterMultiple, + }" + @click="choiceDate(weeks)"> + <view class="uni-calendar-item__weeks-box-item"> + <text v-if="selected&&weeks.extraInfo" class="uni-calendar-item__weeks-box-circle"></text> + <text class="uni-calendar-item__weeks-box-text" :class="{ + 'uni-calendar-item--isDay-text': weeks.isDay, + 'uni-calendar-item--isDay':calendar.fullDate === weeks.fullDate && weeks.isDay, + 'uni-calendar-item--checked':calendar.fullDate === weeks.fullDate && !weeks.isDay, + 'uni-calendar-item--before-checked':weeks.beforeMultiple, + 'uni-calendar-item--multiple': weeks.multiple, + 'uni-calendar-item--after-checked':weeks.afterMultiple, + 'uni-calendar-item--disable':weeks.disable, + }">{{weeks.date}}</text> + <text v-if="!lunar&&!weeks.extraInfo && weeks.isDay" class="uni-calendar-item__weeks-lunar-text" :class="{ + 'uni-calendar-item--isDay-text':weeks.isDay, + 'uni-calendar-item--isDay':calendar.fullDate === weeks.fullDate && weeks.isDay, + 'uni-calendar-item--checked':calendar.fullDate === weeks.fullDate && !weeks.isDay, + 'uni-calendar-item--before-checked':weeks.beforeMultiple, + 'uni-calendar-item--multiple': weeks.multiple, + 'uni-calendar-item--after-checked':weeks.afterMultiple, + }">今天</text> + <text v-if="lunar&&!weeks.extraInfo" class="uni-calendar-item__weeks-lunar-text" :class="{ + 'uni-calendar-item--isDay-text':weeks.isDay, + 'uni-calendar-item--isDay':calendar.fullDate === weeks.fullDate && weeks.isDay, + 'uni-calendar-item--checked':calendar.fullDate === weeks.fullDate && !weeks.isDay, + 'uni-calendar-item--before-checked':weeks.beforeMultiple, + 'uni-calendar-item--multiple': weeks.multiple, + 'uni-calendar-item--after-checked':weeks.afterMultiple, + 'uni-calendar-item--disable':weeks.disable, + }">{{weeks.isDay?'今天': (weeks.lunar.IDayCn === '初一'?weeks.lunar.IMonthCn:weeks.lunar.IDayCn)}}</text> + <text v-if="weeks.extraInfo&&weeks.extraInfo.info" class="uni-calendar-item__weeks-lunar-text" :class="{ + 'uni-calendar-item--extra':weeks.extraInfo.info, + 'uni-calendar-item--isDay-text':weeks.isDay, + 'uni-calendar-item--isDay':calendar.fullDate === weeks.fullDate && weeks.isDay, + 'uni-calendar-item--checked':calendar.fullDate === weeks.fullDate && !weeks.isDay, + 'uni-calendar-item--before-checked':weeks.beforeMultiple, + 'uni-calendar-item--multiple': weeks.multiple, + 'uni-calendar-item--after-checked':weeks.afterMultiple, + 'uni-calendar-item--disable':weeks.disable, + }">{{weeks.extraInfo.info}}</text> + </view> + </view> +</template> + +<script> + export default { + props: { + weeks: { + type: Object, + default () { + return {} + } + }, + calendar: { + type: Object, + default: () => { + return {} + } + }, + selected: { + type: Array, + default: () => { + return [] + } + }, + lunar: { + type: Boolean, + default: false + } + }, + methods: { + choiceDate(weeks) { + this.$emit('change', weeks) + } + } + } +</script> + +<style lang="scss" scoped> + .uni-calendar-item__weeks-box { + flex: 1; + /* #ifndef APP-NVUE */ + display: flex; + /* #endif */ + flex-direction: column; + justify-content: center; + align-items: center; + } + + .uni-calendar-item__weeks-box-text { + font-size: $uni-font-size-base; + color: $uni-text-color; + } + + .uni-calendar-item__weeks-lunar-text { + font-size: $uni-font-size-sm; + color: $uni-text-color; + } + + .uni-calendar-item__weeks-box-item { + position: relative; + /* #ifndef APP-NVUE */ + display: flex; + /* #endif */ + flex-direction: column; + justify-content: center; + align-items: center; + width: 100rpx; + height: 100rpx; + } + + .uni-calendar-item__weeks-box-circle { + position: absolute; + top: 5px; + right: 5px; + width: 8px; + height: 8px; + border-radius: 8px; + background-color: $uni-color-error; + + } + + .uni-calendar-item--disable { + background-color: rgba(249, 249, 249, $uni-opacity-disabled); + color: $uni-text-color-disable; + } + + .uni-calendar-item--isDay-text { + color: $uni-color-primary; + } + + .uni-calendar-item--isDay { + background-color: $uni-color-primary; + opacity: 0.8; + color: #fff; + } + + .uni-calendar-item--extra { + color: $uni-color-error; + opacity: 0.8; + } + + .uni-calendar-item--checked { + background-color: $uni-color-primary; + color: #fff; + opacity: 0.8; + } + + .uni-calendar-item--multiple { + background-color: $uni-color-primary; + color: #fff; + opacity: 0.8; + } + .uni-calendar-item--before-checked { + background-color: #ff5a5f; + color: #fff; + } + .uni-calendar-item--after-checked { + background-color: #ff5a5f; + color: #fff; + } +</style> diff --git a/components/uni-calendar/uni-calendar.vue b/components/uni-calendar/uni-calendar.vue new file mode 100644 index 0000000..e0e0d90 --- /dev/null +++ b/components/uni-calendar/uni-calendar.vue @@ -0,0 +1,505 @@ +<template> + <view class="uni-calendar"> + <view v-if="!insert&&show" class="uni-calendar__mask" :class="{'uni-calendar--mask-show':aniMaskShow}" @click="clean"></view> + <view v-if="insert || show" class="uni-calendar__content" :class="{'uni-calendar--fixed':!insert,'uni-calendar--ani-show':aniMaskShow}"> + <view v-if="!insert" class="uni-calendar__header uni-calendar--fixed-top"> + <view class="uni-calendar__header-btn-box" @click="close"> + <text class="uni-calendar__header-text uni-calendar--fixed-width" style="color:#E72C31 ;">取消</text> + </view> + <view class="uni-calendar__header-btn-box" @click="confirm"> + <text class="uni-calendar__header-text uni-calendar--fixed-width" style="color: #5CE6B5;">确定</text> + </view> + </view> + <view class="uni-calendar__header"> + <view class="uni-calendar__header-btn-box" @click.stop="pre"> + <view class="uni-calendar__header-btn uni-calendar--left"></view> + </view> + <picker mode="date" :value="date" fields="month" @change="bindDateChange"> + <text class="uni-calendar__header-text">{{ (nowDate.year||'') +'年'+( nowDate.month||'') +'月'}}</text> + </picker> + <view class="uni-calendar__header-btn-box" @click.stop="next"> + <view class="uni-calendar__header-btn uni-calendar--right"></view> + </view> + <text class="uni-calendar__backtoday" @click="backtoday">回到今天</text> + + </view> + <view class="uni-calendar__box"> + <view v-if="showMonth" class="uni-calendar__box-bg"> + <text class="uni-calendar__box-bg-text">{{nowDate.month}}</text> + </view> + <view class="uni-calendar__weeks"> + <view class="uni-calendar__weeks-day"> + <text class="uni-calendar__weeks-day-text">日</text> + </view> + <view class="uni-calendar__weeks-day"> + <text class="uni-calendar__weeks-day-text">一</text> + </view> + <view class="uni-calendar__weeks-day"> + <text class="uni-calendar__weeks-day-text">二</text> + </view> + <view class="uni-calendar__weeks-day"> + <text class="uni-calendar__weeks-day-text">三</text> + </view> + <view class="uni-calendar__weeks-day"> + <text class="uni-calendar__weeks-day-text">四</text> + </view> + <view class="uni-calendar__weeks-day"> + <text class="uni-calendar__weeks-day-text">五</text> + </view> + <view class="uni-calendar__weeks-day"> + <text class="uni-calendar__weeks-day-text">六</text> + </view> + </view> + <view class="uni-calendar__weeks" v-for="(item,weekIndex) in weeks" :key="weekIndex"> + <view class="uni-calendar__weeks-item" v-for="(weeks,weeksIndex) in item" :key="weeksIndex"> + <calendar-item :weeks="weeks" :calendar="calendar" :selected="selected" :lunar="lunar" @change="choiceDate"></calendar-item> + </view> + </view> + </view> + </view> + </view> +</template> + +<script> + import Calendar from './util.js'; + import calendarItem from './uni-calendar-item.vue' + /** + * Calendar 日历 + * @description 日历组件可以查看日期,选择任意范围内的日期,打点操作。常用场景如:酒店日期预订、火车机票选择购买日期、上下班打卡等 + * @tutorial https://ext.dcloud.net.cn/plugin?id=56 + * @property {String} date 自定义当前时间,默认为今天 + * @property {Boolean} lunar 显示农历 + * @property {String} startDate 日期选择范围-开始日期 + * @property {String} endDate 日期选择范围-结束日期 + * @property {Boolean} range 范围选择 + * @property {Boolean} insert = [true|false] 插入模式,默认为false + * @value true 弹窗模式 + * @value false 插入模式 + * @property {Boolean} clearDate = [true|false] 弹窗模式是否清空上次选择内容 + * @property {Array} selected 打点,期待格式[{date: '2019-06-27', info: '签到', data: { custom: '自定义信息', name: '自定义消息头',xxx:xxx... }}] + * @property {Boolean} showMonth 是否选择月份为背景 + * @event {Function} change 日期改变,`insert :ture` 时生效 + * @event {Function} confirm 确认选择`insert :false` 时生效 + * @event {Function} monthSwitch 切换月份时触发 + * @example <uni-calendar :insert="true":lunar="true" :start-date="'2019-3-2'":end-date="'2019-5-20'"@change="change" /> + */ + export default { + components: { + calendarItem + }, + props: { + date: { + type: String, + default: '' + }, + selected: { + type: Array, + default () { + return [] + } + }, + lunar: { + type: Boolean, + default: false + }, + startDate: { + type: String, + default: '' + }, + endDate: { + type: String, + default: '' + }, + range: { + type: Boolean, + default: false + }, + insert: { + type: Boolean, + default: true + }, + showMonth: { + type: Boolean, + default: true + }, + clearDate: { + type: Boolean, + default: true + } + }, + data() { + return { + show: false, + weeks: [], + calendar: {}, + nowDate: '', + aniMaskShow: false + } + }, + watch: { + date(newVal) { + this.cale.setDate(newVal) + this.init(this.cale.selectDate.fullDate) + }, + startDate(val){ + this.cale.resetSatrtDate(val) + }, + endDate(val){ + this.cale.resetEndDate(val) + }, + selected(newVal) { + this.cale.setSelectInfo(this.nowDate.fullDate, newVal) + this.weeks = this.cale.weeks + } + }, + created() { + // 获取日历方法实例 + this.cale = new Calendar({ + // date: new Date(), + selected: this.selected, + startDate: this.startDate, + endDate: this.endDate, + range: this.range, + }) + // 选中某一天 + this.cale.setDate(this.date) + this.init(this.cale.selectDate.fullDate) + // this.setDay + }, + methods: { + // 取消穿透 + clean() {}, + bindDateChange(e) { + const value = e.detail.value + '-1' + console.log(this.cale.getDate(value)); + this.cale.setDate(value) + this.init(value) + }, + /** + * 初始化日期显示 + * @param {Object} date + */ + init(date) { + this.weeks = this.cale.weeks + this.nowDate = this.calendar = this.cale.getInfo(date) + }, + /** + * 打开日历弹窗 + */ + open() { + // 弹窗模式并且清理数据 + if (this.clearDate && !this.insert) { + this.cale.cleanMultipleStatus() + this.cale.setDate(this.date) + this.init(this.cale.selectDate.fullDate) + } + this.show = true + this.$nextTick(() => { + setTimeout(() => { + this.aniMaskShow = true + }, 50) + }) + }, + /** + * 关闭日历弹窗 + */ + close() { + this.aniMaskShow = false + this.$nextTick(() => { + setTimeout(() => { + this.show = false + this.$emit('close') + }, 300) + }) + }, + /** + * 确认按钮 + */ + confirm() { + this.setEmit('confirm') + this.close() + }, + /** + * 变化触发 + */ + change() { + if (!this.insert) return + this.setEmit('change') + }, + /** + * 选择月份触发 + */ + monthSwitch() { + let { + year, + month + } = this.nowDate + this.$emit('monthSwitch', { + year, + month: Number(month) + }) + }, + /** + * 派发事件 + * @param {Object} name + */ + setEmit(name) { + let { + year, + month, + date, + fullDate, + lunar, + extraInfo + } = this.calendar + this.$emit(name, { + range: this.cale.multipleStatus, + year, + month, + date, + fulldate: fullDate, + lunar, + extraInfo: extraInfo || {} + }) + }, + /** + * 选择天触发 + * @param {Object} weeks + */ + choiceDate(weeks) { + if (weeks.disable) return + this.calendar = weeks + // 设置多选 + this.cale.setMultiple(this.calendar.fullDate) + this.weeks = this.cale.weeks + this.change() + }, + /** + * 回到今天 + */ + backtoday() { + console.log(this.cale.getDate(new Date()).fullDate); + let date = this.cale.getDate(new Date()).fullDate + this.cale.setDate(date) + this.init(date) + this.change() + }, + /** + * 上个月 + */ + pre() { + const preDate = this.cale.getDate(this.nowDate.fullDate, -1, 'month').fullDate + this.setDate(preDate) + this.monthSwitch() + + }, + /** + * 下个月 + */ + next() { + const nextDate = this.cale.getDate(this.nowDate.fullDate, +1, 'month').fullDate + this.setDate(nextDate) + this.monthSwitch() + }, + /** + * 设置日期 + * @param {Object} date + */ + setDate(date) { + this.cale.setDate(date) + this.weeks = this.cale.weeks + this.nowDate = this.cale.getInfo(date) + } + } + } +</script> + +<style lang="scss" scoped> + .uni-calendar { + /* #ifndef APP-NVUE */ + display: flex; + /* #endif */ + flex-direction: column; + } + + .uni-calendar__mask { + position: fixed; + bottom: 0; + top: 0; + left: 0; + right: 0; + background-color: $uni-bg-color-mask; + transition-property: opacity; + transition-duration: 0.3s; + opacity: 0; + /* #ifndef APP-NVUE */ + z-index: 99; + /* #endif */ + } + + .uni-calendar--mask-show { + opacity: 1 + } + + .uni-calendar--fixed { + position: fixed; + bottom: 0; + left: 0; + right: 0; + transition-property: transform; + transition-duration: 0.3s; + transform: translateY(460px); + /* #ifndef APP-NVUE */ + z-index: 99; + /* #endif */ + } + + .uni-calendar--ani-show { + transform: translateY(0); + } + + .uni-calendar__content { + background-color: #fff; + } + + .uni-calendar__header { + position: relative; + /* #ifndef APP-NVUE */ + display: flex; + /* #endif */ + flex-direction: row; + justify-content: center; + align-items: center; + height: 50px; + border-bottom-color: $uni-border-color; + border-bottom-style: solid; + border-bottom-width: 1px; + } + + .uni-calendar--fixed-top { + /* #ifndef APP-NVUE */ + display: flex; + /* #endif */ + flex-direction: row; + justify-content: space-between; + border-top-color: $uni-border-color; + border-top-style: solid; + border-top-width: 1px; + } + + .uni-calendar--fixed-width { + width: 50px; + // padding: 0 15px; + } + + .uni-calendar__backtoday { + position: absolute; + right: 0; + top: 25rpx; + padding: 0 5px; + padding-left: 10px; + height: 25px; + line-height: 25px; + font-size: 12px; + border-top-left-radius: 25px; + border-bottom-left-radius: 25px; + color: $uni-text-color; + background-color: $uni-bg-color-hover; + } + + .uni-calendar__header-text { + text-align: center; + width: 100px; + font-size: $uni-font-size-base; + color: $uni-text-color; + } + + .uni-calendar__header-btn-box { + /* #ifndef APP-NVUE */ + display: flex; + /* #endif */ + flex-direction: row; + align-items: center; + justify-content: center; + width: 50px; + height: 50px; + } + + .uni-calendar__header-btn { + width: 10px; + height: 10px; + border-left-color: $uni-text-color-placeholder; + border-left-style: solid; + border-left-width: 2px; + border-top-color: $uni-color-subtitle; + border-top-style: solid; + border-top-width: 2px; + } + + .uni-calendar--left { + transform: rotate(-45deg); + } + + .uni-calendar--right { + transform: rotate(135deg); + } + + + .uni-calendar__weeks { + position: relative; + /* #ifndef APP-NVUE */ + display: flex; + /* #endif */ + flex-direction: row; + } + + .uni-calendar__weeks-item { + flex: 1; + } + + .uni-calendar__weeks-day { + flex: 1; + /* #ifndef APP-NVUE */ + display: flex; + /* #endif */ + flex-direction: column; + justify-content: center; + align-items: center; + height: 45px; + border-bottom-color: #F5F5F5; + border-bottom-style: solid; + border-bottom-width: 1px; + } + + .uni-calendar__weeks-day-text { + font-size: 14px; + } + + .uni-calendar__box { + position: relative; + } + + .uni-calendar__box-bg { + /* #ifndef APP-NVUE */ + display: flex; + /* #endif */ + justify-content: center; + align-items: center; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + } + + .uni-calendar__box-bg-text { + font-size: 200px; + font-weight: bold; + color: $uni-text-color-grey; + opacity: 0.1; + text-align: center; + /* #ifndef APP-NVUE */ + line-height: 1; + /* #endif */ + } +</style> diff --git a/components/uni-calendar/util.js b/components/uni-calendar/util.js new file mode 100644 index 0000000..37f4432 --- /dev/null +++ b/components/uni-calendar/util.js @@ -0,0 +1,352 @@ +import CALENDAR from './calendar.js' + +class Calendar { + constructor({ + date, + selected, + startDate, + endDate, + range + } = {}) { + // 当前日期 + this.date = this.getDate(new Date()) // 当前初入日期 + // 打点信息 + this.selected = selected || []; + // 范围开始 + this.startDate = startDate + // 范围结束 + this.endDate = endDate + this.range = range + // 多选状态 + this.cleanMultipleStatus() + // 每周日期 + this.weeks = {} + // this._getWeek(this.date.fullDate) + } + /** + * 设置日期 + * @param {Object} date + */ + setDate(date) { + this.selectDate = this.getDate(date) + this._getWeek(this.selectDate.fullDate) + } + + /** + * 清理多选状态 + */ + cleanMultipleStatus() { + this.multipleStatus = { + before: '', + after: '', + data: [] + } + } + + /** + * 重置开始日期 + */ + resetSatrtDate(startDate) { + // 范围开始 + this.startDate = startDate + + } + + /** + * 重置结束日期 + */ + resetEndDate(endDate) { + // 范围结束 + this.endDate = endDate + } + + /** + * 获取任意时间 + */ + getDate(date, AddDayCount = 0, str = 'day') { + if (!date) { + date = new Date() + } + if (typeof date !== 'object') { + date = date.replace(/-/g, '/') + } + const dd = new Date(date) + switch (str) { + case 'day': + dd.setDate(dd.getDate() + AddDayCount) // 获取AddDayCount天后的日期 + break + case 'month': + if (dd.getDate() === 31) { + dd.setDate(dd.getDate() + AddDayCount) + } else { + dd.setMonth(dd.getMonth() + AddDayCount) // 获取AddDayCount天后的日期 + } + break + case 'year': + dd.setFullYear(dd.getFullYear() + AddDayCount) // 获取AddDayCount天后的日期 + break + } + const y = dd.getFullYear() + const m = dd.getMonth() + 1 < 10 ? '0' + (dd.getMonth() + 1) : dd.getMonth() + 1 // 获取当前月份的日期,不足10补0 + const d = dd.getDate() < 10 ? '0' + dd.getDate() : dd.getDate() // 获取当前几号,不足10补0 + return { + fullDate: y + '-' + m + '-' + d, + year: y, + month: m, + date: d, + day: dd.getDay() + } + } + + + /** + * 获取上月剩余天数 + */ + _getLastMonthDays(firstDay, full) { + let dateArr = [] + for (let i = firstDay; i > 0; i--) { + const beforeDate = new Date(full.year, full.month - 1, -i + 1).getDate() + dateArr.push({ + date: beforeDate, + month: full.month - 1, + lunar: this.getlunar(full.year, full.month - 1, beforeDate), + disable: true + }) + } + return dateArr + } + /** + * 获取本月天数 + */ + _currentMonthDys(dateData, full) { + let dateArr = [] + let fullDate = this.date.fullDate + for (let i = 1; i <= dateData; i++) { + let isinfo = false + let nowDate = full.year + '-' + (full.month < 10 ? + full.month : full.month) + '-' + (i < 10 ? + '0' + i : i) + // 是否今天 + let isDay = fullDate === nowDate + // 获取打点信息 + let info = this.selected && this.selected.find((item) => { + if (this.dateEqual(nowDate, item.date)) { + return item + } + }) + + // 日期禁用 + let disableBefore = true + let disableAfter = true + if (this.startDate) { + let dateCompBefore = this.dateCompare(this.startDate, fullDate) + disableBefore = this.dateCompare(dateCompBefore ? this.startDate : fullDate, nowDate) + } + + if (this.endDate) { + let dateCompAfter = this.dateCompare(fullDate, this.endDate) + disableAfter = this.dateCompare(nowDate, dateCompAfter ? this.endDate : fullDate) + } + let multiples = this.multipleStatus.data + let checked = false + let multiplesStatus = -1 + if (this.range) { + if (multiples) { + multiplesStatus = multiples.findIndex((item) => { + return this.dateEqual(item, nowDate) + }) + } + if (multiplesStatus !== -1) { + checked = true + } + } + let data = { + fullDate: nowDate, + year: full.year, + date: i, + multiple: this.range ? checked : false, + beforeMultiple: this.dateEqual(this.multipleStatus.before, nowDate), + afterMultiple: this.dateEqual(this.multipleStatus.after, nowDate), + month: full.month, + lunar: this.getlunar(full.year, full.month, i), + disable: !disableBefore || !disableAfter, + isDay + } + if (info) { + data.extraInfo = info + } + + dateArr.push(data) + } + return dateArr + } + /** + * 获取下月天数 + */ + _getNextMonthDays(surplus, full) { + let dateArr = [] + for (let i = 1; i < surplus + 1; i++) { + dateArr.push({ + date: i, + month: Number(full.month) + 1, + lunar: this.getlunar(full.year, Number(full.month) + 1, i), + disable: true + }) + } + return dateArr + } + + /** + * 获取当前日期详情 + * @param {Object} date + */ + getInfo(date) { + if (!date) { + date = new Date() + } + const dateInfo = this.canlender.find(item => item.fullDate === this.getDate(date).fullDate) + return dateInfo + } + + /** + * 比较时间大小 + */ + dateCompare(startDate, endDate) { + // 计算截止时间 + startDate = new Date(startDate.replace('-', '/').replace('-', '/')) + // 计算详细项的截止时间 + endDate = new Date(endDate.replace('-', '/').replace('-', '/')) + if (startDate <= endDate) { + return true + } else { + return false + } + } + + /** + * 比较时间是否相等 + */ + dateEqual(before, after) { + // 计算截止时间 + before = new Date(before.replace('-', '/').replace('-', '/')) + // 计算详细项的截止时间 + after = new Date(after.replace('-', '/').replace('-', '/')) + if (before.getTime() - after.getTime() === 0) { + return true + } else { + return false + } + } + + + /** + * 获取日期范围内所有日期 + * @param {Object} begin + * @param {Object} end + */ + geDateAll(begin, end) { + var arr = [] + var ab = begin.split('-') + var ae = end.split('-') + var db = new Date() + db.setFullYear(ab[0], ab[1] - 1, ab[2]) + var de = new Date() + de.setFullYear(ae[0], ae[1] - 1, ae[2]) + var unixDb = db.getTime() - 24 * 60 * 60 * 1000 + var unixDe = de.getTime() - 24 * 60 * 60 * 1000 + for (var k = unixDb; k <= unixDe;) { + k = k + 24 * 60 * 60 * 1000 + arr.push(this.getDate(new Date(parseInt(k))).fullDate) + } + return arr + } + /** + * 计算阴历日期显示 + */ + getlunar(year, month, date) { + return CALENDAR.solar2lunar(year, month, date) + } + /** + * 设置打点 + */ + setSelectInfo(data, value) { + this.selected = value + this._getWeek(data) + } + + /** + * 获取多选状态 + */ + setMultiple(fullDate) { + let { + before, + after + } = this.multipleStatus + + if (!this.range) return + if (before && after) { + this.multipleStatus.before = '' + this.multipleStatus.after = '' + this.multipleStatus.data = [] + } else { + if (!before) { + this.multipleStatus.before = fullDate + } else { + this.multipleStatus.after = fullDate + if (this.dateCompare(this.multipleStatus.before, this.multipleStatus.after)) { + this.multipleStatus.data = this.geDateAll(this.multipleStatus.before, this.multipleStatus.after); + } else { + this.multipleStatus.data = this.geDateAll(this.multipleStatus.after, this.multipleStatus.before); + } + } + } + this._getWeek(fullDate) + } + + /** + * 获取每周数据 + * @param {Object} dateData + */ + _getWeek(dateData) { + const { + fullDate, + year, + month, + date, + day + } = this.getDate(dateData) + let firstDay = new Date(year, month - 1, 1).getDay() + let currentDay = new Date(year, month, 0).getDate() + let dates = { + lastMonthDays: this._getLastMonthDays(firstDay, this.getDate(dateData)), // 上个月末尾几天 + currentMonthDys: this._currentMonthDys(currentDay, this.getDate(dateData)), // 本月天数 + nextMonthDays: [], // 下个月开始几天 + weeks: [] + } + let canlender = [] + const surplus = 42 - (dates.lastMonthDays.length + dates.currentMonthDys.length) + dates.nextMonthDays = this._getNextMonthDays(surplus, this.getDate(dateData)) + canlender = canlender.concat(dates.lastMonthDays, dates.currentMonthDys, dates.nextMonthDays) + let weeks = {} + // 拼接数组 上个月开始几天 + 本月天数+ 下个月开始几天 + for (let i = 0; i < canlender.length; i++) { + if (i % 7 === 0) { + weeks[parseInt(i / 7)] = new Array(7) + } + weeks[parseInt(i / 7)][i % 7] = canlender[i] + } + this.canlender = canlender + this.weeks = weeks + } + + //静态方法 + // static init(date) { + // if (!this.instance) { + // this.instance = new Calendar(date); + // } + // return this.instance; + // } +} + + +export default Calendar diff --git a/components/uni-card/uni-card.vue b/components/uni-card/uni-card.vue new file mode 100644 index 0000000..d2ed513 --- /dev/null +++ b/components/uni-card/uni-card.vue @@ -0,0 +1,139 @@ +<template> + <view class="uni-card" :class="isFull === true || isFull === 'true' ? 'uni-card--full' : ''" @click="onClick"> + <view class="uni-card__header" v-if="title"> + <view class="uni-card__header-extra-img-view" v-if="thumbnail"> + <image class="uni-card__header-extra-img" :src="thumbnail"></image> + </view> + <view class="uni-card__header-title-text">{{title}}</view> + <view class="uni-card__header-extra-text" v-if="extra">{{extra}}</view> + </view> + <view class="uni-card__content uni-card__content--pd"> + <slot /> + </view> + <view class="uni-card__footer" v-if="note">{{note}}</view> + </view> +</template> + +<script> + export default { + name: "uni-card", + props: { + title: String, //标题 + extra: String, //扩展信息 + note: String, //Tips + thumbnail: String, //缩略图 + isFull: { //内容区域是否通栏 + type: [Boolean, String], + default: false + } + }, + methods: { + onClick() { + this.$emit('click') + } + } + } +</script> + +<style> + @charset "UTF-8"; + + .uni-card { + margin-left: 24upx; + margin-right: 24upx; + background: #fff; + box-shadow: none; + position: relative; + display: flex; + flex-direction: column + } + + .uni-card:after { + content: ''; + position: absolute; + transform-origin: center; + box-sizing: border-box; + pointer-events: none; + top: -50%; + left: -50%; + right: -50%; + bottom: -50%; + border: 1px solid #c8c7cc; + border-radius: 12upx; + transform: scale(.5) + } + + .uni-card__footer, + .uni-card__header { + position: relative; + display: flex; + flex-direction: row; + padding: 16upx; + align-items: center + } + + .uni-card__header:after { + position: absolute; + bottom: 0; + right: 0; + left: 0; + height: 1px; + content: ''; + -webkit-transform: scaleY(.5); + transform: scaleY(.5); + background-color: #c8c7cc + } + + .uni-card__header-title { + flex: 1; + margin-right: 16upx; + display: flex; + flex-direction: row; + justify-content: flex-start; + align-items: center + } + + .uni-card__header-title-text { + font-size: 32upx; + flex: 1; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden + } + + .uni-card__header-extra-img-view { + display: flex + } + + .uni-card__header-extra-img { + height: 40upx; + width: 40upx; + margin-right: 16upx + } + + .uni-card__header-extra-text { + flex: 0 0 auto; + width: 30%; + margin-left: 16upx; + font-size: 28upx; + text-align: right; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden + } + + .uni-card__content--pd { + padding: 16upx + } + + .uni-card__footer { + justify-content: space-between; + color: #999; + font-size: 24upx; + padding-top: 0 + } + + .uni-card--full { + margin: 0 + } +</style> \ No newline at end of file diff --git a/components/uni-collapse-item/uni-collapse-item.vue b/components/uni-collapse-item/uni-collapse-item.vue new file mode 100644 index 0000000..a525666 --- /dev/null +++ b/components/uni-collapse-item/uni-collapse-item.vue @@ -0,0 +1,217 @@ +<template> + <view :class="['uni-collapse-cell',{'uni-collapse-cell--disabled':disabled,'uni-collapse-cell--open':isOpen}]" :hover-class="disabled ? '' : 'uni-collapse-cell--hover'"> + <view class="uni-collapse-cell__title" @click="onClick"> + <view class="uni-collapse-cell__title-extra" v-if="thumb"> + <image class="uni-collapse-cell__title-img" :src="thumb"></image> + </view> + <view class="uni-collapse-cell__title-inner"> + <view class="uni-collapse-cell__title-text">{{title}}</view> + </view> + <view class="uni-collapse-cell__title-arrow" :class="{'uni-active':isOpen,'uni-collapse-cell--animation':showAnimation===true}"> + <uni-icon color="#bbb" size="20" type="arrowdown"></uni-icon> + </view> + </view> + <view class="uni-collapse-cell__content" :class="{'uni-collapse-cell--animation':showAnimation===true}" :style="{height:isOpen ? height : '0px'}"> + <view :id="elId"> + <slot /> + </view> + </view> + </view> +</template> + +<script> + import uniIcon from '../uni-icon/uni-icon.vue' + export default { + name: 'uni-collapse-item', + components: { + uniIcon + }, + props: { + title: { //列表标题 + type: String, + default: '' + }, + name: { //唯一标识符 + type: [Number, String], + default: 0 + }, + disabled: { //是否禁用 + type: [Boolean, String], + default: false + }, + showAnimation: { //是否显示动画 + type: Boolean, + default: false + }, + open: { //是否展开 + type: [Boolean, String], + default: false + }, + thumb: { //缩略图 + type: String, + default: '' + } + }, + data() { + const elId = `Uni_${Math.ceil(Math.random() * 10e5).toString(36)}` + return { + isOpen: false, + height: 'auto', + elId: elId + }; + }, + watch: { + open(val) { + this.isOpen = val + } + }, + inject: ['collapse'], + created() { + this.isOpen = this.open + this.nameSync = this.name ? this.name : this.collapse.childrens.length + this.collapse.childrens.push(this) + if (String(this.collapse.accordion) === 'true') { + if (this.isOpen) { + let lastEl = this.collapse.childrens[this.collapse.childrens.length - 2] + if (lastEl) { + this.collapse.childrens[this.collapse.childrens.length - 2].isOpen = false + } + } + } + }, + // #ifdef H5 + mounted() { + this.getSize() + }, + // #endif + // #ifndef H5 + onReady() { + this.getSize() + }, + // #endif + methods: { + getSize() { + if (this.showAnimation) { + uni.createSelectorQuery().in(this).select(`#${this.elId}`).boundingClientRect().exec((ret) => { + this.height = ret[0].height + 'px' + }); + } + }, + onClick() { + if (this.disabled) { + return + } + if (String(this.collapse.accordion) === 'true') { + this.collapse.childrens.forEach(vm => { + if (vm === this) { + return + } + vm.isOpen = false + }) + } + this.isOpen = !this.isOpen + this.collapse.onChange && this.collapse.onChange() + } + } + } +</script> + +<style> + @charset "UTF-8"; + + .uni-collapse-cell { + position: relative + } + + .uni-collapse-cell--hover { + background-color: #f1f1f1 + } + + .uni-collapse-cell--open { + background-color: #f1f1f1 + } + + .uni-collapse-cell--disabled { + opacity: .3 + } + + .uni-collapse-cell--animation { + transition: all .3s + } + + .uni-collapse-cell:after { + position: absolute; + z-index: 3; + right: 0; + bottom: 0; + left: 0; + height: 1px; + content: ''; + -webkit-transform: scaleY(.5); + transform: scaleY(.5); + background-color: #c8c7cc + } + + .uni-collapse-cell__title { + padding: 24upx 30upx; + width: 100%; + box-sizing: border-box; + flex: 1; + position: relative; + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center + } + + .uni-collapse-cell__title-extra { + margin-right: 18upx; + display: flex; + flex-direction: row; + justify-content: center; + align-items: center + } + + .uni-collapse-cell__title-img { + height: 52upx; + width: 52upx + } + + .uni-collapse-cell__title-arrow { + width: 20px; + height: 20px; + transform: rotate(0); + transform-origin: center center + } + + .uni-collapse-cell__title-arrow.uni-active { + transform: rotate(-180deg) + } + + .uni-collapse-cell__title-inner { + flex: 1; + overflow: hidden; + display: flex; + flex-direction: column + } + + .uni-collapse-cell__title-text { + font-size: 32upx; + text-overflow: ellipsis; + white-space: nowrap; + color: inherit; + line-height: 1.5; + overflow: hidden + } + + .uni-collapse-cell__content { + position: relative; + width: 100%; + overflow: hidden; + background: #fff + } + + .uni-collapse-cell__content view { + font-size: 28upx + } +</style> \ No newline at end of file diff --git a/components/uni-collapse/uni-collapse.vue b/components/uni-collapse/uni-collapse.vue new file mode 100644 index 0000000..5ea42b2 --- /dev/null +++ b/components/uni-collapse/uni-collapse.vue @@ -0,0 +1,75 @@ +<template> + <view class="uni-collapse"> + <slot></slot> + </view> +</template> +<script> + export default { + name: 'uni-collapse', + props: { + accordion: { //是否开启手风琴效果 + type: [Boolean, String], + default: false + } + }, + data() { + return {} + }, + provide() { + return { + collapse: this + } + }, + created() { + this.childrens = [] + }, + methods: { + onChange() { + let activeItem = [] + this.childrens.forEach((vm, index) => { + if (vm.isOpen) { + activeItem.push(vm.nameSync) + } + }) + this.$emit('change', activeItem) + } + } + } +</script> +<style> + @charset "UTF-8"; + + .uni-collapse { + background-color: #fff; + position: relative; + width: 100%; + display: flex; + flex-direction: column + } + + .uni-collapse:after { + position: absolute; + z-index: 10; + right: 0; + bottom: 0; + left: 0; + height: 1px; + content: ''; + -webkit-transform: scaleY(.5); + transform: scaleY(.5); + background-color: #c8c7cc + } + + .uni-collapse:before { + position: absolute; + z-index: 10; + right: 0; + top: 0; + left: 0; + height: 1px; + content: ''; + -webkit-transform: scaleY(.5); + transform: scaleY(.5); + background-color: #c8c7cc + } +</style> \ No newline at end of file diff --git a/components/uni-countdown/uni-countdown.vue b/components/uni-countdown/uni-countdown.vue new file mode 100644 index 0000000..d474351 --- /dev/null +++ b/components/uni-countdown/uni-countdown.vue @@ -0,0 +1,117 @@ +<template> + <view class="uni-countdown"> + <view v-if="showDay" class="uni-countdown__number" :style="{borderColor:borderColor, color:color, background:backgroundColor}">{{d}}</view> + <view v-if="showDay" class="uni-countdown__splitor" :style="{color:splitorColor}">天</view> + <view class="uni-countdown__number" :style="{borderColor:borderColor, color:color, background:backgroundColor}">{{h}}</view> + <view class="uni-countdown__splitor" :style="{color:splitorColor}">{{showColon ? ':' : '时'}}</view> + <view class="uni-countdown__number" :style="{borderColor:borderColor, color:color, background:backgroundColor}">{{i}}</view> + <view class="uni-countdown__splitor" :style="{color:splitorColor}">{{showColon ? ':' : '分'}}</view> + <view class="uni-countdown__number" :style="{borderColor:borderColor, color:color, background:backgroundColor}">{{s}}</view> + <view v-if="!showColon" class="uni-countdown__splitor" :style="{color:splitorColor}">秒</view> + </view> +</template> +<script> + export default { + name: "uni-countdown", + props: { + showColon: { + type: Boolean, + default: true + }, + backgroundColor: { + type: String, + default: "inherit" + }, + borderColor: { + type: String, + default: "#000000" + }, + color: { + type: String, + value: "#000000" + }, + splitorColor: { + type: String, + default: "#000000" + }, + dateTime: { + type: String, + default: new Date()._format('yyyy/MM/dd') + } + }, + data() { + return { + timer: null, + d: '00', + h: '00', + i: '00', + s: '00', + ms: 0, + leftTime: 0, + seconds: 0, + showDay: true + } + }, + created: function(e) { + this.countDown() + this.timer = setInterval(() => { + this.seconds-- + if (this.seconds < 0) { + this.timeUp() + return + } + this.countDown() + }, 1000) + }, + beforeDestroy() { + clearInterval(this.timer) + }, + methods: { + timeUp() { + clearInterval(this.timer) + this.$emit('timeup') + }, + countDown() { + let [day, hour, minute, second, millisecond] = [0, 0, 0, 0, 0] + if (this.dateTime) { + this.seconds = new Date(this.dateTime).getTime() - new Date().getTime() + day = Math.floor(this.seconds / (1000 * 60 * 60 * 24)) + hour = Math.floor(this.seconds / (1000 * 60 * 60)) - (day * 24) + minute = Math.floor(this.seconds / (1000 * 60)) - (day * 24 * 60) - (hour * 60) + second = Math.floor(this.seconds / 1000) - (day * 24 * 60 * 60) - (hour * 60 * 60) - (minute * 60) + } else this.timeUp() + if (day && day < 10) day = '0' + day + else if (day == 0) this.showDay = false + if (hour < 10) hour = '0' + hour + if (minute < 10) minute = '0' + minute + if (second < 10) second = '0' + second + this.d = day + this.h = hour + this.i = minute + this.s = second + } + } + } +</script> +<style> + @charset "UTF-8"; + + .uni-countdown { + padding: 2upx 0; + display: inline-flex; + flex-wrap: nowrap; + justify-content: center + } + + .uni-countdown__splitor { + justify-content: center; + line-height: 44upx; + padding: 0 10upx + } + + .uni-countdown__number { + line-height: 44upx; + justify-content: center; + height: 44upx; + } +</style> \ No newline at end of file diff --git a/components/uni-drawer/uni-drawer.vue b/components/uni-drawer/uni-drawer.vue new file mode 100644 index 0000000..c776704 --- /dev/null +++ b/components/uni-drawer/uni-drawer.vue @@ -0,0 +1,138 @@ +<template> + <view v-if="visibleSync" class="uni-drawer" @touchmove.stop.prevent="moveHandle" :class="{'uni-drawer--visible':showDrawer,'uni-drawer--right':rightMode}"> + <view class="uni-drawer__mask" @tap="close"></view> + <view class="uni-drawer__content"> + <slot></slot> + </view> + </view> +</template> + +<script> + export default { + name: 'uni-drawer', + props: { + /** + * 显示状态 + */ + visible: { + type: Boolean, + default: false + }, + /** + * 显示模式(左、右),只在初始化生效 + */ + mode: String, + /** + * 蒙层显示状态 + */ + mask: { + type: [Boolean, String], + default: true + } + }, + data() { + return { + visibleSync: false, + showDrawer: false, + rightMode: false, + closeTimer: null, + watchTimer: null + } + }, + watch: { + visible(val) { + clearTimeout(this.watchTimer) + setTimeout(() => { + this.showDrawer = val + }, 100) + if (this.visibleSync) { + clearTimeout(this.closeTimer) + } + if (val) { + this.visibleSync = val + } else { + this.watchTimer = setTimeout(() => { + this.visibleSync = val + }, 300) + } + } + }, + created() { + this.visibleSync = this.visible + setTimeout(() => { + this.showDrawer = this.visible + }, 100) + this.rightMode = this.mode === 'right' + }, + methods: { + close() { + this.showDrawer = false + this.closeTimer = setTimeout(() => { + this.visibleSync = false + this.$emit('close') + }, 200) + }, + moveHandle() {} + } + } +</script> + +<style> + @charset "UTF-8"; + + .uni-drawer { + display: block; + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: hidden; + visibility: hidden; + z-index: 10001; + height: 100% + } + + .uni-drawer.uni-drawer--right .uni-drawer__content { + left: auto; + right: 0; + transform: translatex(100%) + } + + .uni-drawer.uni-drawer--visible { + visibility: visible + } + + .uni-drawer.uni-drawer--visible .uni-drawer__content { + transform: translatex(0) + } + + .uni-drawer.uni-drawer--visible .uni-drawer__mask { + display: block; + opacity: 1 + } + + .uni-drawer__mask { + display: block; + opacity: 0; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(0, 0, 0, .4); + transition: opacity .3s + } + + .uni-drawer__content { + display: block; + position: absolute; + top: 0; + left: 0; + width: 61.8%; + height: 100%; + background: #fff; + transition: all .3s ease-out; + transform: translatex(-100%) + } +</style> \ No newline at end of file diff --git a/components/uni-fab/uni-fab.vue b/components/uni-fab/uni-fab.vue new file mode 100644 index 0000000..78bac7f --- /dev/null +++ b/components/uni-fab/uni-fab.vue @@ -0,0 +1,433 @@ +<template> + <view> + <view v-if="popMenu && (leftBottom||rightBottom||leftTop||rightTop)" :class="{ + 'uni-fab--leftBottom': leftBottom, + 'uni-fab--rightBottom': rightBottom, + 'uni-fab--leftTop': leftTop, + 'uni-fab--rightTop': rightTop + }" + class="uni-fab"> + <view :class="{ + 'uni-fab__content--left': horizontal === 'left', + 'uni-fab__content--right': horizontal === 'right', + 'uni-fab__content--flexDirection': direction === 'vertical', + 'uni-fab__content--flexDirectionStart': flexDirectionStart, + 'uni-fab__content--flexDirectionEnd': flexDirectionEnd, + 'uni-fab__content--other-platform': !isAndroidNvue + }" + :style="{ width: boxWidth, height: boxHeight, backgroundColor: styles.backgroundColor }" class="uni-fab__content" + elevation="5"> + <view v-if="flexDirectionStart || horizontalLeft" class="uni-fab__item uni-fab__item--first" /> + <view v-for="(item, index) in content" :key="index" :class="{ 'uni-fab__item--active': isShow }" class="uni-fab__item" + @click="_onItemClick(index, item)"> + <image :src="item.active ? item.selectedIconPath : item.iconPath" class="uni-fab__item-image" mode="widthFix" /> + <text class="uni-fab__item-text" :style="{ color: item.active ? styles.selectedColor : styles.color }">{{ item.text }}</text> + </view> + <view v-if="flexDirectionEnd || horizontalRight" class="uni-fab__item uni-fab__item--first" /> + </view> + </view> + <view :class="{ + 'uni-fab__circle--leftBottom': leftBottom, + 'uni-fab__circle--rightBottom': rightBottom, + 'uni-fab__circle--leftTop': leftTop, + 'uni-fab__circle--rightTop': rightTop, + 'uni-fab__content--other-platform': !isAndroidNvue + }" + class="uni-fab__circle uni-fab__plus" :style="{ 'background-color': styles.buttonColor }" @click="_onClick"> + <view class="fab-circle-v" :class="{'uni-fab__plus--active': isShow}"></view> + <view class="fab-circle-h" :class="{'uni-fab__plus--active': isShow}"></view> + </view> + </view> +</template> + +<script> + let platform = 'other' + // #ifdef APP-NVUE + platform = uni.getSystemInfoSync().platform + // #endif + + /** + * Fab 悬浮按钮 + * @description 点击可展开一个图形按钮菜单 + * @tutorial https://ext.dcloud.net.cn/plugin?id=144 + * @property {Object} pattern 可选样式配置项 + * @property {Object} horizontal = [left | right] 水平对齐方式 + * @value left 左对齐 + * @value right 右对齐 + * @property {Object} vertical = [bottom | top] 垂直对齐方式 + * @value bottom 下对齐 + * @value top 上对齐 + * @property {Object} direction = [horizontal | vertical] 展开菜单显示方式 + * @value horizontal 水平显示 + * @value vertical 垂直显示 + * @property {Array} content 展开菜单内容配置项 + * @property {Boolean} popMenu 是否使用弹出菜单 + * @event {Function} trigger 展开菜单点击事件,返回点击信息 + * @event {Function} fabClick 悬浮按钮点击事件 + */ + export default { + name: 'UniFab', + props: { + pattern: { + type: Object, + default () { + return {} + } + }, + horizontal: { + type: String, + default: 'left' + }, + vertical: { + type: String, + default: 'bottom' + }, + direction: { + type: String, + default: 'horizontal' + }, + content: { + type: Array, + default () { + return [] + } + }, + show: { + type: Boolean, + default: false + }, + popMenu: { + type: Boolean, + default: true + } + }, + data() { + return { + fabShow: false, + isShow: false, + isAndroidNvue: platform === 'android', + styles: { + color: '#3c3e49', + selectedColor: '#007AFF', + backgroundColor: '#fff', + buttonColor: '#3c3e49' + } + } + }, + computed: { + contentWidth(e) { + return (this.content.length + 1) * 55 + 10 + 'px' + }, + contentWidthMin() { + return 55 + 'px' + }, + // 动态计算宽度 + boxWidth() { + return this.getPosition(3, 'horizontal') + }, + // 动态计算高度 + boxHeight() { + return this.getPosition(3, 'vertical') + }, + // 计算左下位置 + leftBottom() { + return this.getPosition(0, 'left', 'bottom') + }, + // 计算右下位置 + rightBottom() { + return this.getPosition(0, 'right', 'bottom') + }, + // 计算左上位置 + leftTop() { + return this.getPosition(0, 'left', 'top') + }, + rightTop() { + return this.getPosition(0, 'right', 'top') + }, + flexDirectionStart() { + return this.getPosition(1, 'vertical', 'top') + }, + flexDirectionEnd() { + return this.getPosition(1, 'vertical', 'bottom') + }, + horizontalLeft() { + return this.getPosition(2, 'horizontal', 'left') + }, + horizontalRight() { + return this.getPosition(2, 'horizontal', 'right') + } + }, + watch: { + pattern(newValue, oldValue) { + //console.log(JSON.stringify(newValue)) + this.styles = Object.assign({}, this.styles, newValue) + } + }, + created() { + this.isShow = this.show + if (this.top === 0) { + this.fabShow = true + } + // 初始化样式 + this.styles = Object.assign({}, this.styles, this.pattern) + }, + methods: { + _onClick() { + this.$emit('fabClick') + if (!this.popMenu) { + return + } + this.isShow = !this.isShow + }, + open() { + this.isShow = true + }, + close() { + this.isShow = false + }, + /** + * 按钮点击事件 + */ + _onItemClick(index, item) { + this.$emit('trigger', { + index, + item + }) + }, + /** + * 获取 位置信息 + */ + getPosition(types, paramA, paramB) { + if (types === 0) { + return this.horizontal === paramA && this.vertical === paramB + } else if (types === 1) { + return this.direction === paramA && this.vertical === paramB + } else if (types === 2) { + return this.direction === paramA && this.horizontal === paramB + } else { + return this.isShow && this.direction === paramA ? this.contentWidth : this.contentWidthMin + } + } + } + } +</script> + +<style lang="scss" scoped> + .uni-fab { + position: fixed; + /* #ifndef APP-NVUE */ + display: flex; + /* #endif */ + justify-content: center; + align-items: center; + z-index: 10; + } + + .uni-fab--active { + opacity: 1; + } + + .uni-fab--leftBottom { + left: 5px; + bottom: 20px; + /* #ifdef H5 */ + bottom: calc(20px + var(--window-bottom)); + /* #endif */ + padding: 10px; + } + + .uni-fab--leftTop { + left: 5px; + top: 30px; + /* #ifdef H5 */ + top: calc(30px + var(--window-top)); + /* #endif */ + padding: 10px; + } + + .uni-fab--rightBottom { + right: 5px; + bottom: 20px; + /* #ifdef H5 */ + bottom: calc(20px + var(--window-bottom)); + /* #endif */ + padding: 10px; + } + + .uni-fab--rightTop { + right: 5px; + top: 30px; + /* #ifdef H5 */ + top: calc(30px + var(--window-top)); + /* #endif */ + padding: 10px; + } + + .uni-fab__circle { + position: fixed; + /* #ifndef APP-NVUE */ + display: flex; + /* #endif */ + justify-content: center; + align-items: center; + width: 55px; + height: 55px; + background-color: #3c3e49; + border-radius: 55px; + z-index: 11; + } + + .uni-fab__circle--leftBottom { + left: 15px; + bottom: 30px; + /* #ifdef H5 */ + bottom: calc(30px + var(--window-bottom)); + /* #endif */ + } + + .uni-fab__circle--leftTop { + left: 15px; + top: 40px; + /* #ifdef H5 */ + top: calc(40px + var(--window-top)); + /* #endif */ + } + + .uni-fab__circle--rightBottom { + right: 15px; + bottom: 30px; + /* #ifdef H5 */ + bottom: calc(30px + var(--window-bottom)); + /* #endif */ + } + + .uni-fab__circle--rightTop { + right: 15px; + top: 40px; + /* #ifdef H5 */ + top: calc(40px + var(--window-top)); + /* #endif */ + } + + .uni-fab__circle--left { + left: 0; + } + + .uni-fab__circle--right { + right: 0; + } + + .uni-fab__circle--top { + top: 0; + } + + .uni-fab__circle--bottom { + bottom: 0; + } + + .uni-fab__plus { + font-weight: bold; + } + + .fab-circle-v { + position: absolute; + width: 3px; + height: 31px; + left: 26px; + top: 12px; + background-color: white; + transform: rotate(0deg); + transition: transform 0.3s; + } + + .fab-circle-h { + position: absolute; + width: 31px; + height: 3px; + left: 12px; + top: 26px; + background-color: white; + transform: rotate(0deg); + transition: transform 0.3s; + } + + .uni-fab__plus--active { + transform: rotate(135deg); + } + + .uni-fab__content { + /* #ifndef APP-NVUE */ + box-sizing: border-box; + display: flex; + /* #endif */ + flex-direction: row; + border-radius: 55px; + overflow: hidden; + transition-property: width, height; + transition-duration: 0.2s; + width: 55px; + border-color: #DDDDDD; + border-width: 1rpx; + border-style: solid; + } + + .uni-fab__content--other-platform { + border-width: 0px; + box-shadow: 0 0 5px 2px rgba(0, 0, 0, 0.2); + } + + .uni-fab__content--left { + justify-content: flex-start; + } + + .uni-fab__content--right { + justify-content: flex-end; + } + + .uni-fab__content--flexDirection { + flex-direction: column; + justify-content: flex-end; + } + + .uni-fab__content--flexDirectionStart { + flex-direction: column; + justify-content: flex-start; + } + + .uni-fab__content--flexDirectionEnd { + flex-direction: column; + justify-content: flex-end; + } + + .uni-fab__item { + /* #ifndef APP-NVUE */ + display: flex; + /* #endif */ + flex-direction: column; + justify-content: center; + align-items: center; + width: 55px; + height: 55px; + opacity: 0; + transition: opacity 0.2s; + } + + .uni-fab__item--active { + opacity: 1; + } + + .uni-fab__item-image { + width: 25px; + height: 25px; + margin-bottom: 3px; + } + + .uni-fab__item-text { + color: #FFFFFF; + font-size: 12px; + } + + .uni-fab__item--first { + width: 55px; + } +</style> diff --git a/components/uni-grid/uni-grid.vue b/components/uni-grid/uni-grid.vue new file mode 100644 index 0000000..948347d --- /dev/null +++ b/components/uni-grid/uni-grid.vue @@ -0,0 +1,203 @@ +<template> + <view class="uni-grid" :class="{'uni-grid-no-border':!showBorder,'uni-grid-no-out-border':showBorder && !showOutBorder}"> + <view class="uni-grid__flex" v-for="(items,i) in gridGroup" :key="i"> + <view class="uni-grid-item" hover-class="uni-grid-item-hover" :hover-start-time="20" :hover-stay-time="70" v-for="(item,index) in items" :key="index" :class="[index == columnNum ? 'uni-grid-item-last' : '','uni-grid-item-' + type]" @click="onClick(i,index)" :style="{visibility:item.seize ? 'hidden' : 'inherit'}"> + <view class="uni-grid-item__content" v-if="!item.seize"> + <image class="uni-grid-item-image" :src="item.image"></image> + <text class="uni-grid-item-text">{{item.text}}</text> + </view> + </view> + </view> + </view> +</template> + +<script> + export default { + name: "uni-grid", + props: { + options: Array, + type: { //布局格式,长方形oblong,正方形square + type: String, + default: 'square' + }, + columnNum: { //每一行有多少个 + type: [Number, String], + default: 3 + }, + showOutBorder: { //显示外边框 + type: [Boolean, String], + default: true + }, + showBorder: { //是否显示border,如果为false,showOutBorder无效 + type: [Boolean, String], + default: true + } + }, + data() { + return {} + }, + created() { + this.columnNumber = this.gridGroup[0].length + }, + computed: { + gridGroup() { + let group = [] + let groupItem = [] + this.options && this.options.forEach((item, index) => { + groupItem.push(item) + if (index % this.columnNum === this.columnNum - 1) { + group.push(groupItem) + groupItem = [] + } + }) + if (groupItem.length > 0) { + if (this.columnNum > groupItem.length) { + for (let i = 0, length = groupItem.length; i < this.columnNum - length; i++) { + groupItem.push({ + seize: true + }) + } + } + group.push(groupItem) + } + groupItem = null + return group + } + }, + methods: { + onClick(index, num) { + this.$emit('click', { + index: index * this.columnNumber + num + }) + } + } + } +</script> + +<style> + @charset "UTF-8"; + + .uni-grid { + position: relative; + display: flex; + flex-direction: column + } + + .uni-grid__flex { + display: flex; + flex-direction: row + } + + .uni-grid-item { + display: flex; + position: relative; + flex-direction: column; + flex: 1 + } + + .uni-grid-item:before { + display: block; + content: " "; + padding-bottom: 100% + } + + .uni-grid-item:after { + content: ''; + position: absolute; + z-index: 1; + transform-origin: center; + box-sizing: border-box; + top: -50%; + left: -50%; + right: -50%; + bottom: -50%; + border-color: #c8c7cc; + border-style: solid; + border-width: 1px; + -webkit-transform: scale(.5); + transform: scale(.5); + border-top-width: 0; + border-left-width: 0 + } + + .uni-grid-item__content { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center + } + + .uni-grid-item-text { + font-size: 32upx; + color: #333; + margin-top: 12upx + } + + .uni-grid-item-hover { + background-color: #f1f1f1 + } + + .uni-grid-item-image { + width: 80upx; + height: 80upx + } + + .uni-grid .uni-grid__flex:first-child .uni-grid-item:after { + border-top-width: 1px + } + + .uni-grid .uni-grid__flex .uni-grid-item:first-child:after { + border-left-width: 1px + } + + .uni-grid.uni-grid-no-out-border .uni-grid__flex:first-child .uni-grid-item:after { + border-top-width: 0 + } + + .uni-grid.uni-grid-no-out-border .uni-grid__flex:last-child .uni-grid-item:after { + border-bottom-width: 0 + } + + .uni-grid.uni-grid-no-out-border .uni-grid__flex .uni-grid-item:first-child:after { + border-left-width: 0 + } + + .uni-grid.uni-grid-no-out-border .uni-grid__flex .uni-grid-item:last-child:after { + border-right-width: 0 + } + + .uni-grid.uni-grid-no-border .uni-grid-item:after { + border-width: 0 + } + + .uni-grid.uni-grid-no-border .uni-grid__flex:first-child .uni-grid-item:after { + border-top-width: 0 + } + + .uni-grid.uni-grid-no-border .uni-grid__flex .uni-grid-item:first-child:after { + border-left-width: 0 + } + + .uni-grid-item-oblong.uni-grid-item:before { + padding-bottom: 60% + } + + .uni-grid-item-oblong .uni-grid-item__content { + flex-direction: row + } + + .uni-grid-item-oblong .uni-grid-item-image { + width: 52upx; + height: 52upx + } + + .uni-grid-item-oblong .uni-grid-item-text { + margin-top: 0; + margin-left: 12upx + } +</style> \ No newline at end of file diff --git a/components/uni-icon/uni-icon.vue b/components/uni-icon/uni-icon.vue new file mode 100644 index 0000000..8f1fc99 --- /dev/null +++ b/components/uni-icon/uni-icon.vue @@ -0,0 +1,419 @@ +<template> + <view class="uni-icon" :class="'uni-icon-' + type" :style="{ color: color, 'font-size': size + 'px' }" @click="_onClick"></view> +</template> + +<script> + export default { + name: 'uni-icon', + props: { + type: { + type: String, + default: '' + }, + color: { + type: String, + default: '#333333' + }, + size: { + type: [Number, String], + default: 16 + } + }, + methods: { + _onClick() { + this.$emit('click'); + } + } + }; +</script> + +<style> + @font-face { + font-family: uniicons; + font-weight: normal; + font-style: normal; + src: url(data:font/truetype;charset=utf-8;base64,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PDgtsDEssAAWILAJI0IgICBGI0ewACsjYTgtsDIssAAWsAMlsAIlRyNHI2GwAFRYLiA8IyEbsAIlsAIlRyNHI2EgsAUlsAQlRyNHI2GwBiWwBSVJsAIlYbABRWMjIFhiGyFZY7ABRWJgIy4jICA8ijgjIVktsDMssAAWILAJQyAuRyNHI2EgYLAgYGawgGIjICA8ijgtsDQsIyAuRrACJUZSWCA8WS6xJAEUKy2wNSwjIC5GsAIlRlBYIDxZLrEkARQrLbA2LCMgLkawAiVGUlggPFkjIC5GsAIlRlBYIDxZLrEkARQrLbA3LLAuKyMgLkawAiVGUlggPFkusSQBFCstsDgssC8riiAgPLAEI0KKOCMgLkawAiVGUlggPFkusSQBFCuwBEMusCQrLbA5LLAAFrAEJbAEJiAuRyNHI2GwBkUrIyA8IC4jOLEkARQrLbA6LLEJBCVCsAAWsAQlsAQlIC5HI0cjYSCwBCNCsAZFKyCwYFBYILBAUVizAiADIBuzAiYDGllCQiMgR7AEQ7CAYmAgsAArIIqKYSCwAkNgZCOwA0NhZFBYsAJDYRuwA0NgWbADJbCAYmGwAiVGYTgjIDwjOBshICBGI0ewACsjYTghWbEkARQrLbA7LLAuKy6xJAEUKy2wPCywLyshIyAgPLAEI0IjOLEkARQrsARDLrAkKy2wPSywABUgR7AAI0KyAAEBFRQTLrAqKi2wPiywABUgR7AAI0KyAAEBFRQTLrAqKi2wPyyxAAEUE7ArKi2wQCywLSotsEEssAAWRSMgLiBGiiNhOLEkARQrLbBCLLAJI0KwQSstsEMssgAAOistsEQssgABOistsEUssgEAOistsEYssgEBOistsEcssgAAOystsEgssgABOystsEkssgEAOystsEossgEBOystsEsssgAANystsEwssgABNystsE0ssgEANystsE4ssgEBNystsE8ssgAAOSstsFAssgABOSstsFEssgEAOSstsFIssgEBOSstsFMssgAAPCstsFQssgABPCstsFUssgEAPCstsFYssgEBPCstsFcssgAAOCstsFgssgABOCstsFkssgEAOCstsFossgEBOCstsFsssDArLrEkARQrLbBcLLAwK7A0Ky2wXSywMCuwNSstsF4ssAAWsDArsDYrLbBfLLAxKy6xJAEUKy2wYCywMSuw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AVkBWgFbAVwBXQd1bmlFMTAwB3VuaUUxMDEHdW5pRTEwMgd1bmlFMTMwB3VuaUUxMzEHdW5pRTEzMgd1bmlFMjAwB3VuaUUyMDEHdW5pRTIwMgd1bmlFMjAzB3VuaUUyMzAHdW5pRTIzMQd1bmlFMjMyB3VuaUUyMzMHdW5pRTI2MAd1bmlFMjYxB3VuaUUyNjIHdW5pRTI2Mwd1bmlFMjY0B3VuaUUzMDAHdW5pRTMwMQd1bmlFMzAyB3VuaUUzMDMHdW5pRTMzMgd1bmlFMzMzB3VuaUUzNjAHdW5pRTM2Mwd1bmlFMzY0B3VuaUU0MDAHdW5pRTQwMQd1bmlFNDAyB3VuaUU0MDMHdW5pRTQwNAd1bmlFNDA1B3VuaUU0MDYHdW5pRTQwNwd1bmlFNDA4B3VuaUU0MDkHdW5pRTQxMAd1bmlFNDExB3VuaUU0MTMHdW5pRTQzNAd1bmlFNDM3B3VuaUU0MzgHdW5pRTQzOQd1bmlFNDQwB3VuaUU0NDEHdW5pRTQ0Mgd1bmlFNDQzB3VuaUU0NjAHdW5pRTQ2MQd1bmlFNDYyB3VuaUU0NjMHdW5pRTQ2NAd1bmlFNDY1B3VuaUU0NjYHdW5pRTQ2OAd1bmlFNDcwB3VuaUU0NzEHdW5pRTQ3Mgd1bmlFNTAwB3VuaUU1MDEHdW5pRTUwMgd1bmlFNTAzB3VuaUU1MDQHdW5pRTUwNQd1bmlFNTA2B3VuaUU1MDcHdW5pRTUwOAd1bmlFNTMwB3VuaUU1MzIHdW5pRTUzNAd1bmlFNTM1B3VuaUU1MzcHdW5pRTU2MAd1bmlFNTYyB3VuaUU1NjMHdW5pRTU2NQd1bmlFNTY3B3VuaUU1NjgHdW5pRTU4MAd1bmlFNTgxB3VuaUU1ODIHdW5pRTU4Mwd1bmlFNTg0B3VuaUU1ODUHdW5pRTU4Ngd1bmlFNTg3B3VuaUU1ODgHdW5pRTU4OQRFdXJvBEV1cm8AAQAB//8ADwABAAAADAAAABYAAAACAAEAAQBfAAEABAAAAAIAAAAAAAAAAQAAAADVpCcIAAAAANJrTZkAAAAA2DhhuQ==) format('truetype'); + } + + /* uni-icon { + line-height: 1; + } */ + + .uni-icon { + font-family: uniicons; + font-weight: normal; + font-style: normal; + line-height: 1; + display: inline-block; + text-decoration: none; + -webkit-font-smoothing: antialiased; + } + + .uni-icon.uni-active { + color: #007aff; + } + + .uni-icon-contact:before { + content: '\e100'; + } + + .uni-icon-person:before { + content: '\e101'; + } + + .uni-icon-personadd:before { + content: '\e102'; + } + + .uni-icon-contact-filled:before { + content: '\e130'; + } + + .uni-icon-person-filled:before { + content: '\e131'; + } + + .uni-icon-personadd-filled:before { + content: '\e132'; + } + + .uni-icon-phone:before { + content: '\e200'; + } + + .uni-icon-email:before { + content: '\e201'; + } + + .uni-icon-chatbubble:before { + content: '\e202'; + } + + .uni-icon-chatboxes:before { + content: '\e203'; + } + + .uni-icon-phone-filled:before { + content: '\e230'; + } + + .uni-icon-email-filled:before { + content: '\e231'; + } + + .uni-icon-chatbubble-filled:before { + content: '\e232'; + } + + .uni-icon-chatboxes-filled:before { + content: '\e233'; + } + + .uni-icon-weibo:before { + content: '\e260'; + } + + .uni-icon-weixin:before { + content: '\e261'; + } + + .uni-icon-pengyouquan:before { + content: '\e262'; + } + + .uni-icon-chat:before { + content: '\e263'; + } + + .uni-icon-qq:before { + content: '\e264'; + } + + .uni-icon-videocam:before { + content: '\e300'; + } + + .uni-icon-camera:before { + content: '\e301'; + } + + .uni-icon-mic:before { + content: '\e302'; + } + + .uni-icon-location:before { + content: '\e303'; + } + + .uni-icon-mic-filled:before, + .uni-icon-speech:before { + content: '\e332'; + } + + .uni-icon-location-filled:before { + content: '\e333'; + } + + .uni-icon-micoff:before { + content: '\e360'; + } + + .uni-icon-image:before { + content: '\e363'; + } + + .uni-icon-map:before { + content: '\e364'; + } + + .uni-icon-compose:before { + content: '\e400'; + } + + .uni-icon-trash:before { + content: '\e401'; + } + + .uni-icon-upload:before { + content: '\e402'; + } + + .uni-icon-download:before { + content: '\e403'; + } + + .uni-icon-close:before { + content: '\e404'; + } + + .uni-icon-redo:before { + content: '\e405'; + } + + .uni-icon-undo:before { + content: '\e406'; + } + + .uni-icon-refresh:before { + content: '\e407'; + } + + .uni-icon-star:before { + content: '\e408'; + } + + .uni-icon-plus:before { + content: '\e409'; + } + + .uni-icon-minus:before { + content: '\e410'; + } + + .uni-icon-circle:before, + .uni-icon-checkbox:before { + content: '\e411'; + } + + .uni-icon-close-filled:before, + .uni-icon-clear:before { + content: '\e434'; + } + + .uni-icon-refresh-filled:before { + content: '\e437'; + } + + .uni-icon-star-filled:before { + content: '\e438'; + } + + .uni-icon-plus-filled:before { + content: '\e439'; + } + + .uni-icon-minus-filled:before { + content: '\e440'; + } + + .uni-icon-circle-filled:before { + content: '\e441'; + } + + .uni-icon-checkbox-filled:before { + content: '\e442'; + } + + .uni-icon-closeempty:before { + content: '\e460'; + } + + .uni-icon-refreshempty:before { + content: '\e461'; + } + + .uni-icon-reload:before { + content: '\e462'; + } + + .uni-icon-starhalf:before { + content: '\e463'; + } + + .uni-icon-spinner:before { + content: '\e464'; + } + + .uni-icon-spinner-cycle:before { + content: '\e465'; + } + + .uni-icon-search:before { + content: '\e466'; + } + + .uni-icon-plusempty:before { + content: '\e468'; + } + + .uni-icon-forward:before { + content: '\e470'; + } + + .uni-icon-back:before, + .uni-icon-left-nav:before { + content: '\e471'; + } + + .uni-icon-checkmarkempty:before { + content: '\e472'; + } + + .uni-icon-home:before { + content: '\e500'; + } + + .uni-icon-navigate:before { + content: '\e501'; + } + + .uni-icon-gear:before { + content: '\e502'; + } + + .uni-icon-paperplane:before { + content: '\e503'; + } + + .uni-icon-info:before { + content: '\e504'; + } + + .uni-icon-help:before { + content: '\e505'; + } + + .uni-icon-locked:before { + content: '\e506'; + } + + .uni-icon-more:before { + content: '\e507'; + } + + .uni-icon-flag:before { + content: '\e508'; + } + + .uni-icon-home-filled:before { + content: '\e530'; + } + + .uni-icon-gear-filled:before { + content: '\e532'; + } + + .uni-icon-info-filled:before { + content: '\e534'; + } + + .uni-icon-help-filled:before { + content: '\e535'; + } + + .uni-icon-more-filled:before { + content: '\e537'; + } + + .uni-icon-settings:before { + content: '\e560'; + } + + .uni-icon-list:before { + content: '\e562'; + } + + .uni-icon-bars:before { + content: '\e563'; + } + + .uni-icon-loop:before { + content: '\e565'; + } + + .uni-icon-paperclip:before { + content: '\e567'; + } + + .uni-icon-eye:before { + content: '\e568'; + } + + .uni-icon-arrowup:before { + content: '\e580'; + } + + .uni-icon-arrowdown:before { + content: '\e581'; + } + + .uni-icon-arrowleft:before { + content: '\e582'; + } + + .uni-icon-arrowright:before { + content: '\e583'; + } + + .uni-icon-arrowthinup:before { + content: '\e584'; + } + + .uni-icon-arrowthindown:before { + content: '\e585'; + } + + .uni-icon-arrowthinleft:before { + content: '\e586'; + } + + .uni-icon-arrowthinright:before { + content: '\e587'; + } + + .uni-icon-pulldown:before { + content: '\e588'; + } + + .uni-icon-closefill:before { + content: '\e589'; + } + + .uni-icon-sound:before { + content: '\e590'; + } + + .uni-icon-scan:before { + content: '\e612'; + } +</style> \ No newline at end of file diff --git a/components/uni-icons/uni-icons.vue b/components/uni-icons/uni-icons.vue new file mode 100644 index 0000000..6d6ef78 --- /dev/null +++ b/components/uni-icons/uni-icons.vue @@ -0,0 +1,425 @@ +<template> + <view + :class="'uni-icon-' + type" + :style="{ color: color, 'font-size': size + 'px' }" + class="uni-icon" + @click="_onClick" + /> +</template> + +<script> +export default { + name: 'UniIcons', + props: { + type: { + type: String, + default: '' + }, + color: { + type: String, + default: '#333333' + }, + size: { + type: [Number, String], + default: 16 + } + }, + methods: { + _onClick () { + this.$emit('click') + } + } +} +</script> + +<style> +@font-face { + font-family: uniicons; + font-weight: normal; + font-style: normal; + src: url(data:font/truetype;charset=utf-8;base64,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PDgtsDEssAAWILAJI0IgICBGI0ewACsjYTgtsDIssAAWsAMlsAIlRyNHI2GwAFRYLiA8IyEbsAIlsAIlRyNHI2EgsAUlsAQlRyNHI2GwBiWwBSVJsAIlYbABRWMjIFhiGyFZY7ABRWJgIy4jICA8ijgjIVktsDMssAAWILAJQyAuRyNHI2EgYLAgYGawgGIjICA8ijgtsDQsIyAuRrACJUZSWCA8WS6xJAEUKy2wNSwjIC5GsAIlRlBYIDxZLrEkARQrLbA2LCMgLkawAiVGUlggPFkjIC5GsAIlRlBYIDxZLrEkARQrLbA3LLAuKyMgLkawAiVGUlggPFkusSQBFCstsDgssC8riiAgPLAEI0KKOCMgLkawAiVGUlggPFkusSQBFCuwBEMusCQrLbA5LLAAFrAEJbAEJiAuRyNHI2GwBkUrIyA8IC4jOLEkARQrLbA6LLEJBCVCsAAWsAQlsAQlIC5HI0cjYSCwBCNCsAZFKyCwYFBYILBAUVizAiADIBuzAiYDGllCQiMgR7AEQ7CAYmAgsAArIIqKYSCwAkNgZCOwA0NhZFBYsAJDYRuwA0NgWbADJbCAYmGwAiVGYTgjIDwjOBshICBGI0ewACsjYTghWbEkARQrLbA7LLAuKy6xJAEUKy2wPCywLyshIyAgPLAEI0IjOLEkARQrsARDLrAkKy2wPSywABUgR7AAI0KyAAEBFRQTLrAqKi2wPiywABUgR7AAI0KyAAEBFRQTLrAqKi2wPyyxAAEUE7ArKi2wQCywLSotsEEssAAWRSMgLiBGiiNhOLEkARQrLbBCLLAJI0KwQSstsEMssgAAOistsEQssgABOistsEUssgEAOistsEYssgEBOistsEcssgAAOystsEgssgABOystsEkssgEAOystsEossgEBOystsEsssgAANystsEwssgABNystsE0ssgEANystsE4ssgEBNystsE8ssgAAOSstsFAssgABOSstsFEssgEAOSstsFIssgEBOSstsFMssgAAPCstsFQssgABPCstsFUssgEAPCstsFYssgEBPCstsFcssgAAOCstsFgssgABOCstsFkssgEAOCstsFossgEBOCstsFsssDArLrEkARQrLbBcLLAwK7A0Ky2wXSywMCuwNSstsF4ssAAWsDArsDYrLbBfLLAxKy6xJAEUKy2wYCywMSuw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AVkBWgFbAVwBXQd1bmlFMTAwB3VuaUUxMDEHdW5pRTEwMgd1bmlFMTMwB3VuaUUxMzEHdW5pRTEzMgd1bmlFMjAwB3VuaUUyMDEHdW5pRTIwMgd1bmlFMjAzB3VuaUUyMzAHdW5pRTIzMQd1bmlFMjMyB3VuaUUyMzMHdW5pRTI2MAd1bmlFMjYxB3VuaUUyNjIHdW5pRTI2Mwd1bmlFMjY0B3VuaUUzMDAHdW5pRTMwMQd1bmlFMzAyB3VuaUUzMDMHdW5pRTMzMgd1bmlFMzMzB3VuaUUzNjAHdW5pRTM2Mwd1bmlFMzY0B3VuaUU0MDAHdW5pRTQwMQd1bmlFNDAyB3VuaUU0MDMHdW5pRTQwNAd1bmlFNDA1B3VuaUU0MDYHdW5pRTQwNwd1bmlFNDA4B3VuaUU0MDkHdW5pRTQxMAd1bmlFNDExB3VuaUU0MTMHdW5pRTQzNAd1bmlFNDM3B3VuaUU0MzgHdW5pRTQzOQd1bmlFNDQwB3VuaUU0NDEHdW5pRTQ0Mgd1bmlFNDQzB3VuaUU0NjAHdW5pRTQ2MQd1bmlFNDYyB3VuaUU0NjMHdW5pRTQ2NAd1bmlFNDY1B3VuaUU0NjYHdW5pRTQ2OAd1bmlFNDcwB3VuaUU0NzEHdW5pRTQ3Mgd1bmlFNTAwB3VuaUU1MDEHdW5pRTUwMgd1bmlFNTAzB3VuaUU1MDQHdW5pRTUwNQd1bmlFNTA2B3VuaUU1MDcHdW5pRTUwOAd1bmlFNTMwB3VuaUU1MzIHdW5pRTUzNAd1bmlFNTM1B3VuaUU1MzcHdW5pRTU2MAd1bmlFNTYyB3VuaUU1NjMHdW5pRTU2NQd1bmlFNTY3B3VuaUU1NjgHdW5pRTU4MAd1bmlFNTgxB3VuaUU1ODIHdW5pRTU4Mwd1bmlFNTg0B3VuaUU1ODUHdW5pRTU4Ngd1bmlFNTg3B3VuaUU1ODgHdW5pRTU4OQRFdXJvBEV1cm8AAQAB//8ADwABAAAADAAAABYAAAACAAEAAQBfAAEABAAAAAIAAAAAAAAAAQAAAADVpCcIAAAAANJrTZkAAAAA2DhhuQ==) + format('truetype'); +} + +.uni-icon-wrapper { + line-height: 1; +} + +.uni-icon { + font-family: uniicons; + font-weight: normal; + font-style: normal; + line-height: 1; + display: inline-block; + text-decoration: none; + -webkit-font-smoothing: antialiased; +} + +.uni-icon.uni-active { + color: #007aff; +} + +.uni-icon-contact:before { + content: '\e100'; +} + +.uni-icon-person:before { + content: '\e101'; +} + +.uni-icon-personadd:before { + content: '\e102'; +} + +.uni-icon-contact-filled:before { + content: '\e130'; +} + +.uni-icon-person-filled:before { + content: '\e131'; +} + +.uni-icon-personadd-filled:before { + content: '\e132'; +} + +.uni-icon-phone:before { + content: '\e200'; +} + +.uni-icon-email:before { + content: '\e201'; +} + +.uni-icon-chatbubble:before { + content: '\e202'; +} + +.uni-icon-chatboxes:before { + content: '\e203'; +} + +.uni-icon-phone-filled:before { + content: '\e230'; +} + +.uni-icon-email-filled:before { + content: '\e231'; +} + +.uni-icon-chatbubble-filled:before { + content: '\e232'; +} + +.uni-icon-chatboxes-filled:before { + content: '\e233'; +} + +.uni-icon-weibo:before { + content: '\e260'; +} + +.uni-icon-weixin:before { + content: '\e261'; +} + +.uni-icon-pengyouquan:before { + content: '\e262'; +} + +.uni-icon-chat:before { + content: '\e263'; +} + +.uni-icon-qq:before { + content: '\e264'; +} + +.uni-icon-videocam:before { + content: '\e300'; +} + +.uni-icon-camera:before { + content: '\e301'; +} + +.uni-icon-mic:before { + content: '\e302'; +} + +.uni-icon-location:before { + content: '\e303'; +} + +.uni-icon-mic-filled:before, +.uni-icon-speech:before { + content: '\e332'; +} + +.uni-icon-location-filled:before { + content: '\e333'; +} + +.uni-icon-micoff:before { + content: '\e360'; +} + +.uni-icon-image:before { + content: '\e363'; +} + +.uni-icon-map:before { + content: '\e364'; +} + +.uni-icon-compose:before { + content: '\e400'; +} + +.uni-icon-trash:before { + content: '\e401'; +} + +.uni-icon-upload:before { + content: '\e402'; +} + +.uni-icon-download:before { + content: '\e403'; +} + +.uni-icon-close:before { + content: '\e404'; +} + +.uni-icon-redo:before { + content: '\e405'; +} + +.uni-icon-undo:before { + content: '\e406'; +} + +.uni-icon-refresh:before { + content: '\e407'; +} + +.uni-icon-star:before { + content: '\e408'; +} + +.uni-icon-plus:before { + content: '\e409'; +} + +.uni-icon-minus:before { + content: '\e410'; +} + +.uni-icon-circle:before, +.uni-icon-checkbox:before { + content: '\e411'; +} + +.uni-icon-close-filled:before, +.uni-icon-clear:before { + content: '\e434'; +} + +.uni-icon-refresh-filled:before { + content: '\e437'; +} + +.uni-icon-star-filled:before { + content: '\e438'; +} + +.uni-icon-plus-filled:before { + content: '\e439'; +} + +.uni-icon-minus-filled:before { + content: '\e440'; +} + +.uni-icon-circle-filled:before { + content: '\e441'; +} + +.uni-icon-checkbox-filled:before { + content: '\e442'; +} + +.uni-icon-closeempty:before { + content: '\e460'; +} + +.uni-icon-refreshempty:before { + content: '\e461'; +} + +.uni-icon-reload:before { + content: '\e462'; +} + +.uni-icon-starhalf:before { + content: '\e463'; +} + +.uni-icon-spinner:before { + content: '\e464'; +} + +.uni-icon-spinner-cycle:before { + content: '\e465'; +} + +.uni-icon-search:before { + content: '\e466'; +} + +.uni-icon-plusempty:before { + content: '\e468'; +} + +.uni-icon-forward:before { + content: '\e470'; +} + +.uni-icon-back:before, +.uni-icon-left-nav:before { + content: '\e471'; +} + +.uni-icon-checkmarkempty:before { + content: '\e472'; +} + +.uni-icon-home:before { + content: '\e500'; +} + +.uni-icon-navigate:before { + content: '\e501'; +} + +.uni-icon-gear:before { + content: '\e502'; +} + +.uni-icon-paperplane:before { + content: '\e503'; +} + +.uni-icon-info:before { + content: '\e504'; +} + +.uni-icon-help:before { + content: '\e505'; +} + +.uni-icon-locked:before { + content: '\e506'; +} + +.uni-icon-more:before { + content: '\e507'; +} + +.uni-icon-flag:before { + content: '\e508'; +} + +.uni-icon-home-filled:before { + content: '\e530'; +} + +.uni-icon-gear-filled:before { + content: '\e532'; +} + +.uni-icon-info-filled:before { + content: '\e534'; +} + +.uni-icon-help-filled:before { + content: '\e535'; +} + +.uni-icon-more-filled:before { + content: '\e537'; +} + +.uni-icon-settings:before { + content: '\e560'; +} + +.uni-icon-list:before { + content: '\e562'; +} + +.uni-icon-bars:before { + content: '\e563'; +} + +.uni-icon-loop:before { + content: '\e565'; +} + +.uni-icon-paperclip:before { + content: '\e567'; +} + +.uni-icon-eye:before { + content: '\e568'; +} + +.uni-icon-arrowup:before { + content: '\e580'; +} + +.uni-icon-arrowdown:before { + content: '\e581'; +} + +.uni-icon-arrowleft:before { + content: '\e582'; +} + +.uni-icon-arrowright:before { + content: '\e583'; +} + +.uni-icon-arrowthinup:before { + content: '\e584'; +} + +.uni-icon-arrowthindown:before { + content: '\e585'; +} + +.uni-icon-arrowthinleft:before { + content: '\e586'; +} + +.uni-icon-arrowthinright:before { + content: '\e587'; +} + +.uni-icon-pulldown:before { + content: '\e588'; +} + +.uni-icon-closefill:before { + content: '\e589'; +} + +.uni-icon-sound:before { + content: '\e590'; +} + +.uni-icon-scan:before { + content: '\e612'; +} +</style> diff --git a/components/uni-list-item/uni-list-item.vue b/components/uni-list-item/uni-list-item.vue new file mode 100644 index 0000000..9fb7d55 --- /dev/null +++ b/components/uni-list-item/uni-list-item.vue @@ -0,0 +1,193 @@ +<template> + <view class="uni-list-item" :class="[disabled === true || disabled === 'true' ? 'uni-list-item--disabled' : '']" :hover-class="disabled === true || disabled === 'true' || showSwitch === true || showSwitch === 'true' ? '' : 'uni-list-item--hover'" @click="onClick"> + <view class="uni-list-item__container"> + <view class="uni-list-item__icon" v-if="thumb"> + <image class="uni-list-item__icon-img" :src="thumb"></image> + </view> + <view class="uni-list-item__icon" v-else-if="showExtraIcon === true || showExtraIcon === 'true'"> + <uni-icon :color="extraIcon.color" :size="extraIcon.size" :type="extraIcon.type"></uni-icon> + </view> + <view class="uni-list-item__content"> + <view class="uni-list-item__content-title">{{title}}</view> + <view class="uni-list-item__content-note" v-if="note">{{note}}</view> + </view> + <view class="uni-list-item__extra" v-if="showBadge === true || showBadge === 'true' || showArrow === true || showArrow === 'true'||showSwitch === true || showSwitch === 'true'"> + <uni-badge v-if="showBadge === true || showBadge === 'true'" :type="badgeType" :text="badgeText"></uni-badge> + <switch v-if="showSwitch === true || showSwitch === 'true'" :disabled='disabled' :checked="switchChecked" @change="onSwitchChange" /> + <uni-icon v-if="showArrow === true || showArrow === 'true'" color="#bbb" size="20" type="arrowright"></uni-icon> + </view> + </view> + </view> +</template> + +<script> + import uniIcon from '../uni-icon/uni-icon.vue' + import uniBadge from '../uni-badge/uni-badge.vue' + export default { + name: 'uni-list-item', + components: { + uniIcon, + uniBadge + }, + data() { + return { + + }; + }, + props: { + title: { + type: String, + default: '' + }, //列表标题 + note: { + type: String, + default: '' + }, //列表描述 + disabled: { //是否禁用 + type: [Boolean, String], + default: false + }, + showArrow: { //是否显示箭头 + type: [Boolean, String], + default: true + }, + showBadge: { //是否显示数字角标 + type: [Boolean, String], + default: false + }, + showSwitch: { //是否显示Switch + type: [Boolean, String], + default: false + }, + switchChecked: { //Switch是否被选中 + type: [Boolean, String], + default: false + }, + badgeText: String, //badge内容 + badgeType: { //badge类型 + type: String, + default: 'success' + }, + thumb: String, //缩略图 + showExtraIcon: { //是否显示扩展图标 + type: [Boolean, String], + default: false + }, + extraIcon: { + type: Object, + default () { + return { + type: 'contact', + color: '#000000', + size: 20 + }; + } + } + }, + methods: { + onClick() { + this.$emit('click') + }, + onSwitchChange(e) { + this.$emit('switchChange', e.detail) + } + } + } +</script> + +<style> + @charset "UTF-8"; + + .uni-list-item { + font-size: 32upx; + position: relative; + display: flex; + flex-direction: column; + justify-content: space-between; + align-items: center + } + + .uni-list-item--disabled { + opacity: .3 + } + + .uni-list-item--hover { + background-color: #f1f1f1 + } + + .uni-list-item__container { + padding: 24upx 30upx; + width: 100%; + box-sizing: border-box; + flex: 1; + position: relative; + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center + } + + .uni-list-item__container:after { + position: absolute; + z-index: 3; + right: 0; + bottom: 0; + left: 30upx; + height: 1px; + content: ''; + -webkit-transform: scaleY(.5); + transform: scaleY(.5); + background-color: #c8c7cc + } + + .uni-list-item__content { + flex: 1; + overflow: hidden; + display: flex; + flex-direction: column + } + + .uni-list-item__content-title { + font-size: 32upx; + text-overflow: ellipsis; + white-space: nowrap; + color: inherit; + line-height: 1.5; + overflow: hidden + } + + .uni-list-item__content-note { + color: #999; + font-size: 28upx; + white-space: normal; + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; + overflow: hidden + } + + .uni-list-item__extra { + width: 25%; + display: flex; + flex-direction: row; + justify-content: flex-end; + align-items: center + } + + .uni-list-item__icon { + margin-right: 18upx; + display: flex; + flex-direction: row; + justify-content: center; + align-items: center + } + + .uni-list-item__icon-img { + height: 52upx; + width: 52upx + } + + .uni-list>.uni-list-item:last-child .uni-list-item-container:after { + height: 0 + } +</style> \ No newline at end of file diff --git a/components/uni-list/uni-list.vue b/components/uni-list/uni-list.vue new file mode 100644 index 0000000..db4f9fd --- /dev/null +++ b/components/uni-list/uni-list.vue @@ -0,0 +1,47 @@ +<template> + <view class="uni-list"> + <slot></slot> + </view> +</template> +<script> + export default { + name: 'uni-list' + } +</script> +<style> + @charset "UTF-8"; + + .uni-list { + background-color: #fff; + position: relative; + width: 100%; + display: flex; + flex-direction: column + } + + .uni-list:after { + position: absolute; + z-index: 10; + right: 0; + bottom: 0; + left: 0; + height: 1px; + content: ''; + -webkit-transform: scaleY(.5); + transform: scaleY(.5); + background-color: #c8c7cc + } + + .uni-list:before { + position: absolute; + z-index: 10; + right: 0; + top: 0; + left: 0; + height: 1px; + content: ''; + -webkit-transform: scaleY(.5); + transform: scaleY(.5); + background-color: #c8c7cc + } +</style> \ No newline at end of file diff --git a/components/uni-load-more/uni-load-more.vue b/components/uni-load-more/uni-load-more.vue new file mode 100644 index 0000000..6c43365 --- /dev/null +++ b/components/uni-load-more/uni-load-more.vue @@ -0,0 +1,194 @@ +<template> + <view class="uni-load-more"> + <view class="uni-load-more__img" v-show="status === 'loading' && showIcon"> + <view class="load1"> + <view :style="{background:color}"></view> + <view :style="{background:color}"></view> + <view :style="{background:color}"></view> + <view :style="{background:color}"></view> + </view> + <view class="load2"> + <view :style="{background:color}"></view> + <view :style="{background:color}"></view> + <view :style="{background:color}"></view> + <view :style="{background:color}"></view> + </view> + <view class="load3"> + <view :style="{background:color}"></view> + <view :style="{background:color}"></view> + <view :style="{background:color}"></view> + <view :style="{background:color}"></view> + </view> + </view> + <text class="uni-load-more__text" :style="{color:color}">{{status === 'more' ? contentText.contentdown : (status === 'loading' ? contentText.contentrefresh : contentText.contentnomore)}}</text> + </view> +</template> + +<script> + export default { + name: "uni-load-more", + props: { + status: { + //上拉的状态:more-loading前;loading-loading中;noMore-没有更多了 + type: String, + default: 'more' + }, + showIcon: { + type: Boolean, + default: true + }, + color: { + type: String, + default: "#777777" + }, + contentText: { + type: Object, + default () { + return { + contentdown: "上拉显示更多", + contentrefresh: "正在加载...", + contentnomore: "没有更多数据了" + }; + } + } + }, + data() { + return {} + } + } +</script> + +<style> + @charset "UTF-8"; + + .uni-load-more { + display: flex; + flex-direction: row; + height: 80upx; + align-items: center; + justify-content: center + } + + .uni-load-more__text { + font-size: 28upx; + color: #999 + } + + .uni-load-more__img { + height: 24px; + width: 24px; + margin-right: 10px + } + + .uni-load-more__img>view { + position: absolute + } + + .uni-load-more__img>view view { + width: 6px; + height: 2px; + border-top-left-radius: 1px; + border-bottom-left-radius: 1px; + background: #999; + position: absolute; + opacity: .2; + transform-origin: 50%; + animation: load 1.56s ease infinite + } + + .uni-load-more__img>view view:nth-child(1) { + transform: rotate(90deg); + top: 2px; + left: 9px + } + + .uni-load-more__img>view view:nth-child(2) { + transform: rotate(180deg); + top: 11px; + right: 0 + } + + .uni-load-more__img>view view:nth-child(3) { + transform: rotate(270deg); + bottom: 2px; + left: 9px + } + + .uni-load-more__img>view view:nth-child(4) { + top: 11px; + left: 0 + } + + .load1, + .load2, + .load3 { + height: 24px; + width: 24px + } + + .load2 { + transform: rotate(30deg) + } + + .load3 { + transform: rotate(60deg) + } + + .load1 view:nth-child(1) { + animation-delay: 0s + } + + .load2 view:nth-child(1) { + animation-delay: .13s + } + + .load3 view:nth-child(1) { + animation-delay: .26s + } + + .load1 view:nth-child(2) { + animation-delay: .39s + } + + .load2 view:nth-child(2) { + animation-delay: .52s + } + + .load3 view:nth-child(2) { + animation-delay: .65s + } + + .load1 view:nth-child(3) { + animation-delay: .78s + } + + .load2 view:nth-child(3) { + animation-delay: .91s + } + + .load3 view:nth-child(3) { + animation-delay: 1.04s + } + + .load1 view:nth-child(4) { + animation-delay: 1.17s + } + + .load2 view:nth-child(4) { + animation-delay: 1.3s + } + + .load3 view:nth-child(4) { + animation-delay: 1.43s + } + + @-webkit-keyframes load { + 0% { + opacity: 1 + } + + 100% { + opacity: .2 + } + } +</style> \ No newline at end of file diff --git a/components/uni-notice-bar/uni-notice-bar.vue b/components/uni-notice-bar/uni-notice-bar.vue new file mode 100644 index 0000000..ec997b8 --- /dev/null +++ b/components/uni-notice-bar/uni-notice-bar.vue @@ -0,0 +1,258 @@ +<template> + <view + v-if="show" + :style="{ backgroundColor: backgroundColor, color: color }" + class="uni-noticebar" + @click="onClick"> + <view + v-if="showClose === 'true' || showClose === true" + class="uni-noticebar__close"><uni-icons + type="closefill" + size="12" /></view> + <view + :class="{ 'uni-noticebar--flex': scrollable || single || moreText }" + class="uni-noticebar__content"> + <view + v-if="showIcon === 'true' || showIcon === true" + :style="{ backgroundColor: backgroundColor, color: color }" + class="uni-noticebar__content-icon"> + <uni-icons + :color="color" + type="sound" + size="14" /> + </view> + <view + :class="{ 'uni-noticebar--scrollable': scrollable, 'uni-noticebar--single': !scrollable && (single || moreText) }" + class="uni-noticebar__content-text"> + <view + :id="elId" + :style="{ animation: animation, '-webkit-animation': animation }" + class="uni-noticebar__content-inner">{{ text }}</view> + </view> + <view + v-if="showGetMore === 'true' || showGetMore === true" + :style="{ width: moreText ? '180upx' : '20px' }" + class="uni-noticebar__content-more" + @click="clickMore"> + <view + v-if="moreText" + class="uni-noticebar__content-more-text">{{ moreText }}</view> + <uni-icons + type="arrowright" + size="14" /> + </view> + </view> + </view> +</template> + +<script> +import uniIcons from '../uni-icons/uni-icons.vue' +export default { + name: 'UniNoticeBar', + components: { + uniIcons + }, + props: { + text: { + type: String, + default: '' + }, + moreText: { + type: String, + default: '' + }, + backgroundColor: { + type: String, + default: '#fffbe8' + }, + speed: { + // 默认1s滚动100px + type: [String, Number], + default: 100 + }, + color: { + type: String, + default: '#de8c17' + }, + single: { + // 是否单行 + type: [String, Boolean], + default: false + }, + scrollable: { + // 是否滚动,添加后控制单行效果取消 + type: [String, Boolean], + default: false + }, + showIcon: { + // 是否显示左侧icon + type: [String, Boolean], + default: false + }, + showGetMore: { + // 是否显示右侧查看更多 + type: [String, Boolean], + default: false + }, + showClose: { + // 是否显示左侧关闭按钮 + type: [String, Boolean], + default: false + } + }, + data () { + const elId = `Uni_${Math.ceil(Math.random() * 10e5).toString(36)}` + return { + elId: elId, + show: true, + animation: '' + } + }, + watch: { + text (newValue, oldValue) { + this.$nextTick(() => { + setTimeout(this.setAnimation, 200) + }) + } + }, + // #ifdef H5 + mounted () { + this.setAnimation() + }, + // #endif + // #ifndef H5 + onReady () { + this.setAnimation() + }, + // #endif + methods: { + clickMore () { + this.$emit('getmore') + }, + onClick (e) { + let clientX = e.touches ? (e.touches[0] ? e.touches[0].clientX : e.changedTouches[0].clientX) : e.detail.clientX + if (uni.upx2px(48) + 12 > clientX && String(this.showClose) === 'true') { + this.show = false + this.$emit('close') + } + this.$emit('click') + }, + setAnimation () { + if (this.scrollable === false || this.scrollable === 'false') { + return + } + // #ifdef MP-TOUTIAO + setTimeout(() => { + uni.createSelectorQuery() + .in(this) + .select(`#${this.elId}`) + .boundingClientRect() + .exec(ret => { + this.animation = `notice ${ret[0].width / this.speed}s linear infinite both` + }) + }, 200) + // #endif + // #ifndef MP-TOUTIAO + uni.createSelectorQuery() + .in(this) + .select(`#${this.elId}`) + .boundingClientRect() + .exec(ret => { + this.animation = `notice ${ret[0].width / this.speed}s linear infinite both` + }) + // #endif + } + } +} +</script> + +<style lang="scss"> +@mixin flex-row-center { + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; +} + +.uni-noticebar { + padding: 12upx 24upx; + font-size: $uni-font-size-sm; + line-height: 1.5; + margin-bottom: 20upx; + @include flex-row-center; + justify-content: left; + + &__close { + color: $uni-text-color-grey; + margin-right: 24upx; + @include flex-row-center; + } + + &__content { + flex: 1; + overflow: hidden; + + &.uni-noticebar--flex { + flex: 1; + display: flex; + flex-direction: row; + } + + &-icon { + display: inline-block; + z-index: 1; + padding-right: 12upx; + } + + &-more { + width: 180upx; + @include flex-row-center; + justify-content: flex-end; + word-break: keep-all; + margin-left: 10upx; + color: $uni-text-color-grey; + + &-text { + font-size: $uni-font-size-sm; + white-space: nowrap; + } + } + + &-text { + word-break: break-all; + line-height: 1.5; + display: inline; + + &.uni-noticebar--single { + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + } + + &.uni-noticebar--scrollable { + flex: 1; + display: block; + overflow: hidden; + + .uni-noticebar__content-inner { + padding-left: 100%; + white-space: nowrap; + display: inline-block; + transform: translateZ(0); + } + } + } + + &-inner { + font-size: $uni-font-size-sm; + display: inline; + } + } +} + +@keyframes notice { + 100% { + transform: translate3d(-100%, 0, 0); + } +} +</style> diff --git a/components/uni-number-box/uni-number-box.vue b/components/uni-number-box/uni-number-box.vue new file mode 100644 index 0000000..f27c06f --- /dev/null +++ b/components/uni-number-box/uni-number-box.vue @@ -0,0 +1,167 @@ +<template> + <view class="uni-numbox"> + <view class="uni-numbox__minus" :class="{'uni-numbox--disabled': inputValue <= min || disabled}" @click="_calcValue('minus')">-</view> + <input class="uni-numbox__value" type="number" :disabled="disabled" v-model="inputValue" @blur="_onBlur"> + <view class="uni-numbox__plus" :class="{'uni-numbox--disabled': inputValue >= max || disabled}" @click="_calcValue('plus')">+</view> + </view> +</template> +<script> + export default { + name: 'uni-number-box', + props: { + value: { + type: [Number, String], + default: 1 + }, + min: { + type: Number, + default: 0 + }, + max: { + type: Number, + default: 100 + }, + step: { + type: Number, + default: 1 + }, + disabled: { + type: Boolean, + default: false + } + }, + data() { + return { + inputValue: 0 + } + }, + watch: { + value(val) { + this.inputValue = +val; + }, + inputValue(newVal, oldVal) { + if (+newVal !== +oldVal) { + this.$emit('change', newVal); + } + } + }, + methods: { + _calcValue(type) { + if (this.disabled) { + return + } + const scale = this._getDecimalScale() + let value = this.inputValue * scale + let step = this.step * scale + if (type === 'minus') { + value -= step + } else if (type === 'plus') { + value += step + } + if (value < this.min || value > this.max) { + return + } + this.inputValue = value / scale; + }, + _getDecimalScale() { + let scale = 1 + // 浮点型 + if (~~this.step !== this.step) { + scale = Math.pow(10, (this.step + '').split('.')[1].length) + } + return scale + }, + _onBlur(event) { + let value = event.detail.value + if (!value) { + this.inputValue = 0 + return + } + value = +value; + if (value > this.max) { + value = this.max + } else if (value < this.min) { + value = this.min + } + this.inputValue = value + } + }, + created() { + this.inputValue = +this.value; + } + } +</script> +<style> + @charset "UTF-8"; + + .uni-numbox { + display: inline-flex; + flex-direction: row; + justify-content: flex-start; + height: 70upx; + position: relative + } + + .uni-numbox:after { + content: ''; + position: absolute; + transform-origin: center; + box-sizing: border-box; + pointer-events: none; + top: -50%; + left: -50%; + right: -50%; + bottom: -50%; + border: 1px solid #c8c7cc; + border-radius: 12upx; + transform: scale(.5) + } + + .uni-numbox__minus, + .uni-numbox__plus { + margin: 0; + background-color: #f8f8f8; + width: 70upx; + font-size: 40upx; + height: 100%; + line-height: 70upx; + text-align: center; + display: inline-flex; + align-items: center; + justify-content: center; + color: #333; + position: relative + } + + .uni-numbox__value { + position: relative; + background-color: #fff; + width: 80upx; + height: 100%; + text-align: center; + padding: 0 + } + + .uni-numbox__value:after { + content: ''; + position: absolute; + transform-origin: center; + box-sizing: border-box; + pointer-events: none; + top: -50%; + left: -50%; + right: -50%; + bottom: -50%; + border-style: solid; + border-color: #c8c7cc; + border-left-width: 1px; + border-right-width: 1px; + border-top-width: 0; + border-bottom-width: 0; + transform: scale(.5) + } + + .uni-numbox--disabled { + color: silver + } +</style> \ No newline at end of file diff --git a/components/uni-pagination/uni-pagination.vue b/components/uni-pagination/uni-pagination.vue new file mode 100644 index 0000000..ff98598 --- /dev/null +++ b/components/uni-pagination/uni-pagination.vue @@ -0,0 +1,183 @@ +<template> + <view class="uni-pagination"> + <view class="uni-pagination__btns"> + <view @click="clickLeft" :class="['uni-pagination__btn',{'uni-pagination--disabled':currentIndex === 1}]" :hover-class="currentIndex === 1 ? '' : 'uni-pagination--hover'" :hover-start-time="20" :hover-stay-time="70"> + <template v-if="showIcon===true || showIcon === 'true'"> + <uni-icon color="#000" size="20" type="arrowleft"></uni-icon> + </template> + <template v-else> + {{prevText}} + </template> + </view> + <view @click="clickRight" :class="['uni-pagination__btn',{'uni-pagination--disabled':currentIndex === maxPage}]" :hover-class="currentIndex === maxPage ? '' : 'uni-pagination--hover'" :hover-start-time="20" :hover-stay-time="70"> + <template v-if="showIcon===true || showIcon === 'true'"> + <uni-icon color="#000" size="20" type="arrowright"></uni-icon> + </template> + <template v-else> + {{nextText}} + </template> + </view> + </view> + <view class="uni-pagination__num"> + <text class="uni-pagination__num-current">{{currentIndex}}</text>/{{maxPage}} + </view> + </view> +</template> + +<script> + import uniIcon from '../uni-icon/uni-icon.vue' + export default { + name: 'uni-pagination', + components: { + uniIcon + }, + props: { + prevText: { + type: String, + default: '上一页' + }, + nextText: { + type: String, + default: '下一页' + }, + current: { + type: [Number, String], + default: 1 + }, + total: { //数据总量 + type: [Number, String], + default: 0 + }, + pageSize: { //每页数据量 + type: [Number, String], + default: 10 + }, + showIcon: { //是否以 icon 形式展示按钮 + type: [Boolean, String], + default: false + } + }, + watch: { + current(val) { + this.currentIndex = +val + } + }, + data() { + return { + currentIndex: 1 + } + }, + computed: { + maxPage() { + let maxPage = 1 + let total = Number(this.total) + let pageSize = Number(this.pageSize) + if (total && pageSize) { + maxPage = Math.ceil(total / pageSize) + } + return maxPage + } + }, + methods: { + clickLeft() { + if (Number(this.currentIndex) === 1) { + return + } + this.currentIndex -= 1 + this.change('prev') + }, + clickRight() { + if (Number(this.currentIndex) === this.maxPage) { + return + } + this.currentIndex += 1 + this.change('next') + }, + change(e) { + this.$emit('change', { + type: e, + current: this.currentIndex + }) + } + }, + created() { + this.currentIndex = +this.current; + } + } +</script> + +<style> + @charset "UTF-8"; + + .uni-pagination { + width: 100%; + box-sizing: border-box; + padding: 0 40upx; + position: relative; + overflow: hidden; + display: flex; + flex-direction: row + } + + .uni-pagination__btns { + flex: 1; + display: flex; + justify-content: space-between; + align-items: center; + flex-direction: row + } + + .uni-pagination__btn { + width: 120upx; + height: 60upx; + padding: 0 16upx; + line-height: 60upx; + font-size: 28upx; + box-sizing: border-box; + position: relative; + background-color: #f8f8f8; + display: flex; + flex-direction: row; + justify-content: center; + align-items: center + } + + .uni-pagination__btn:after { + content: ""; + width: 200%; + height: 200%; + position: absolute; + top: 0; + left: 0; + border: 1px solid #c8c7cc; + transform: scale(.5); + transform-origin: 0 0; + box-sizing: border-box; + border-radius: 12upx + } + + .uni-pagination__num { + width: 100upx; + height: 60upx; + line-height: 60upx; + font-size: 28upx; + color: #333; + position: absolute; + left: 50%; + top: 0; + transform: translateX(-50%) + } + + .uni-pagination__num-current { + color: #007aff + } + + .uni-pagination--disabled { + opacity: .3 + } + + .uni-pagination--hover { + color: rgba(0, 0, 0, .6); + background-color: #f1f1f1 + } +</style> \ No newline at end of file diff --git a/components/uni-popup/uni-popup.vue b/components/uni-popup/uni-popup.vue new file mode 100644 index 0000000..b36fb3c --- /dev/null +++ b/components/uni-popup/uni-popup.vue @@ -0,0 +1,190 @@ +<template> + <view class="full-width"> + <view class="uni-mask" v-show="show" :style="{ top: offsetTop + 'px' }" @click="hide" @touchmove.stop.prevent="moveHandle"></view> + <view class="uni-popup" :class="'uni-popup-' + position + ' ' + 'uni-popup-' + mode" v-show="show"> + {{ msg }} + <slot></slot> + <view v-if="position === 'middle' && mode === 'insert'" class=" uni-icon uni-icon-close" :class="{ + 'uni-close-bottom': buttonMode === 'bottom', + 'uni-close-right': buttonMode === 'right' + }" @click="closeMask"></view> + </view> + </view> +</template> + +<script> + export default { + name: 'uni-popup', + props: { + /** + * 页面显示 + */ + show: { + type: Boolean, + default: false + }, + /** + * 对齐方式 + */ + position: { + type: String, + //top - 顶部, middle - 居中, bottom - 底部 + default: 'middle' + }, + /** + * 显示模式 + */ + mode: { + type: String, + default: 'insert' + }, + /** + * 额外信息 + */ + msg: { + type: String, + default: '' + }, + /** + * h5遮罩是否到顶 + */ + h5Top: { + type: Boolean, + default: false + }, + buttonMode: { + type: String, + default: 'bottom' + } + }, + data() { + return { + offsetTop: 0 + }; + }, + watch: { + h5Top(newVal) { + if (newVal) { + this.offsetTop = 44; + } else { + this.offsetTop = 0; + } + } + }, + methods: { + hide() { + if (this.mode === 'insert' && this.position === 'middle') return; + this.$emit('hidePopup'); + }, + closeMask() { + if (this.mode === 'insert') { + this.$emit('hidePopup'); + } + }, + moveHandle() {} + }, + created() { + let offsetTop = 0; + //#ifdef H5 + if (!this.h5Top) { + offsetTop = 44; + } else { + offsetTop = 0; + } + //#endif + this.offsetTop = offsetTop; + } + }; +</script> +<style> + .uni-mask { + position: fixed; + z-index: 998; + top: 0; + right: 0; + bottom: 0; + left: 0; + background-color: rgba(0, 0, 0, 0.3); + } + + .uni-popup { + position: absolute; + z-index: 999; + background-color: #ffffff; + } + + .uni-popup-middle { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + } + + .uni-popup-middle.uni-popup-insert { + min-height: 380upx; + max-height: 80%; + transform: translate(-50%, -65%); + background: none; + box-shadow: none; + } + + .uni-popup-middle.uni-popup-fixed { + border-radius: 10upx; + padding: 30upx; + } + + .uni-close-bottom, + .uni-close-right { + position: absolute; + bottom: -180upx; + text-align: center; + border-radius: 50%; + color: #f5f5f5; + font-size: 60upx; + font-weight: bold; + opacity: 0.8; + z-index: -1; + } + + .uni-close-bottom { + margin: auto; + left: 0; + right: 0; + } + + .uni-close-right { + right: -60upx; + top: -80upx; + } + + .uni-close-bottom:after { + content: ''; + position: absolute; + width: 0px; + border: 1px #f5f5f5 solid; + top: -200upx; + bottom: 56upx; + left: 50%; + transform: translate(-50%, -0%); + opacity: 0.8; + } + + .uni-popup-top { + top: 0; + left: 0; + width: 100%; + height: 100upx; + line-height: 100upx; + text-align: center; + } + + .uni-popup-bottom { + left: 0; + bottom: 0; + width: 100%; + min-height: 100upx; + } +</style> \ No newline at end of file diff --git a/components/uni-rate/uni-rate.vue b/components/uni-rate/uni-rate.vue new file mode 100644 index 0000000..53686a1 --- /dev/null +++ b/components/uni-rate/uni-rate.vue @@ -0,0 +1,131 @@ +<template> + <view class="uni-rate"> + <view class="uni-rate-icon" v-for="(star, index) in stars" :key="index" :style="{ marginLeft: margin + 'px' }" @click="_onClick(index)"> + <uni-icon :size="size" :color="color" :type="isFill ? 'star-filled' : 'star'"></uni-icon> + <view class="uni-rate-icon-on" :style="{ width: star.activeWitch }"> + <uni-icon :size="size" :color="activeColor" type="star-filled"></uni-icon> + </view> + </view> + </view> +</template> + +<script> + import uniIcon from '../uni-icon/uni-icon.vue'; + export default { + name: 'uni-rate', + components: { + uniIcon + }, + props: { + isFill: { + //星星的类型,是否镂空 + type: [Boolean, String], + default: true + }, + color: { + //星星的颜色 + type: String, + default: '#ececec' + }, + activeColor: { + //星星选中状态颜色 + type: String, + default: '#ffca3e' + }, + size: { + //星星的大小 + type: [Number, String], + default: 24 + }, + value: { + //当前评分 + type: [Number, String], + default: 0 + }, + max: { + //最大评分 + type: [Number, String], + default: 5 + }, + margin: { + //星星的间距 + type: [Number, String], + default: 0 + }, + disabled: { + //是否可点击 + type: [Boolean, String], + default: false + } + }, + data() { + return { + valueSync: '' + }; + }, + computed: { + stars() { + const value = Number(this.valueSync) ? Number(this.valueSync) : 0; + const starList = []; + const floorValue = Math.floor(value); + const ceilValue = Math.ceil(value); + for (let i = 0; i < this.max; i++) { + if (floorValue > i) { + starList.push({ + activeWitch: '100%' + }); + } else if (ceilValue - 1 === i) { + starList.push({ + activeWitch: (value - floorValue) * 100 + '%' + }); + } else { + starList.push({ + activeWitch: '0' + }); + } + } + return starList; + } + }, + methods: { + _onClick(index) { + if (this.disabled) { + return; + } + this.valueSync = index + 1; + this.$emit('change', { + value: this.valueSync + }); + } + }, + created() { + this.valueSync = this.value; + } + }; +</script> + +<style> + @charset "UTF-8"; + + .uni-rate { + line-height: 0; + font-size: 0; + display: flex; + flex-direction: row + } + + .uni-rate-icon { + position: relative; + line-height: 0; + font-size: 0; + display: inline-block + } + + .uni-rate-icon-on { + line-height: 1; + position: absolute; + top: 0; + left: 0; + overflow: hidden + } +</style> \ No newline at end of file diff --git a/components/uni-status-bar/uni-status-bar.vue b/components/uni-status-bar/uni-status-bar.vue new file mode 100644 index 0000000..06f57a3 --- /dev/null +++ b/components/uni-status-bar/uni-status-bar.vue @@ -0,0 +1,26 @@ +<template> + <view class="uni-status-bar" :style="{ height: statusBarHeight }"> + <slot></slot> + </view> +</template> + +<script> + var statusBarHeight = uni.getSystemInfoSync().statusBarHeight + 'px'; + export default { + name: 'uni-status-bar', + data() { + return { + statusBarHeight: statusBarHeight + }; + } + }; +</script> + +<style> + .uni-status-bar { + display: block; + width: 100%; + height: 20px; + height: var(--status-bar-height); + } +</style> \ No newline at end of file diff --git a/components/uni-steps/uni-steps.vue b/components/uni-steps/uni-steps.vue new file mode 100644 index 0000000..573ffee --- /dev/null +++ b/components/uni-steps/uni-steps.vue @@ -0,0 +1,218 @@ +<template> + <view class="uni-steps"> + <view class="uni-steps-items" :class="'uni-steps-' + direction"> + <view class="uni-steps-item" v-for="(item,index) in options" :key="index" :class="{'uni-steps-process':index === active,'uni-steps-finish':index < active}"> + <view class="uni-steps-item-title-container" :style="{color:index === active ? activeColor : ''}"> + <view class="uni-steps-item-title">{{ item.title }}</view> + <view class="uni-steps-item-desc" v-if="item.desc">{{ item.desc}}</view> + </view> + <view class="uni-steps-item-circle-container"> + <view class="uni-steps-item-circle" v-if="index !== active" :style="{backgroundColor:index < active ? activeColor : ''}"></view> + <uni-icon v-else type="checkbox-filled" size="14" :color="activeColor"></uni-icon> + </view> + <view class="uni-steps-item-line" v-if="index !== options.length-1" :style="{backgroundColor:index < active ? activeColor : ''}"></view> + </view> + </view> + </view> +</template> + +<script> + import uniIcon from '../uni-icon/uni-icon.vue' + export default { + name: "uni-steps", + components: { + uniIcon + }, + props: { + direction: { //排列方向 row column + type: String, + default: 'row' + }, + activeColor: { //激活状态颜色 + type: String, + default: '#1aad19' + }, + active: { //当前步骤 + type: Number, + default: 0 + }, + options: Array //数据 + }, + data() { + return {} + } + } +</script> + +<style> + @charset "UTF-8"; + + .uni-steps { + width: 100%; + box-sizing: border-box; + display: flex; + flex-direction: column; + overflow: hidden; + position: relative + } + + .uni-steps-items { + position: relative; + display: flex; + flex-direction: row; + margin: 10px; + box-sizing: border-box; + overflow: hidden + } + + .uni-steps-items.uni-steps-column { + margin: 10px 0; + padding-left: 31px; + flex-direction: column + } + + .uni-steps-items.uni-steps-column .uni-steps-item:after { + content: ' '; + position: absolute; + height: 1px; + width: 100%; + bottom: 9px; + left: 0; + background-color: #ebedf0; + transform: scaleY(.5) + } + + .uni-steps-items.uni-steps-column .uni-steps-item:last-child { + position: relative + } + + .uni-steps-items.uni-steps-column .uni-steps-item:last-child:after { + height: 0 + } + + .uni-steps-items.uni-steps-column .uni-steps-item:last-child .uni-steps-item-title-container { + text-align: left + } + + .uni-steps-items.uni-steps-column .uni-steps-item:last-child .uni-steps-item-circle-container { + left: -17px; + right: auto + } + + .uni-steps-items.uni-steps-column .uni-steps-item-title-container { + transform: none; + display: block; + line-height: 36upx + } + + .uni-steps-items.uni-steps-column .uni-steps-item-title { + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden + } + + .uni-steps-items.uni-steps-column .uni-steps-item-desc { + white-space: normal; + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; + overflow: hidden + } + + .uni-steps-items.uni-steps-column .uni-steps-item-circle-container { + left: -17px; + top: -1px; + bottom: auto; + padding: 8px 0; + z-index: 1 + } + + .uni-steps-items.uni-steps-column .uni-steps-item-line { + height: 100%; + width: 1px; + left: -15px; + top: -1px; + bottom: auto + } + + .uni-steps-items.uni-steps-column .uni-steps-item.uni-steps-process .uni-steps-item-circle-container { + bottom: auto; + left: -21px + } + + .uni-steps-item { + flex: 1; + position: relative; + padding-bottom: 18px + } + + .uni-steps-item-title-container { + text-align: left; + margin-left: 3px; + display: inline-block; + transform: translateX(-50%); + color: #999 + } + + .uni-steps-item-title { + font-size: 28upx + } + + .uni-steps-item-desc { + font-size: 24upx + } + + .uni-steps-item:first-child .uni-steps-item-title-container { + transform: none; + margin-left: 0 + } + + .uni-steps-item:last-child { + position: absolute; + right: 0 + } + + .uni-steps-item:last-child .uni-steps-item-title-container { + transform: none; + text-align: right + } + + .uni-steps-item:last-child .uni-steps-item-circle-container { + left: auto; + right: -8px + } + + .uni-steps-item-circle-container { + position: absolute; + bottom: 8px; + left: -8px; + padding: 0 8px; + background-color: #fff; + z-index: 1 + } + + .uni-steps-item-circle { + width: 5px; + height: 5px; + background-color: #999; + border-radius: 50% + } + + .uni-steps-item-line { + background-color: #ebedf0; + position: absolute; + bottom: 10px; + left: 0; + width: 100%; + height: 1px + } + + .uni-steps-item.uni-steps-finish .uni-steps-item-title-container { + color: #333 + } + + .uni-steps-item.uni-steps-process .uni-steps-item-circle-container { + bottom: 3px; + display: flex + } +</style> \ No newline at end of file diff --git a/components/uni-swipe-action/uni-swipe-action.vue b/components/uni-swipe-action/uni-swipe-action.vue new file mode 100644 index 0000000..d4b481a --- /dev/null +++ b/components/uni-swipe-action/uni-swipe-action.vue @@ -0,0 +1,233 @@ +<template> + <view class="uni-swipe-action"> + <view class="uni-swipe-action__container" :class="{'uni-swipe-action--show':isShowBtn}" @touchstart="touchStart" @touchmove="touchMove" @touchend="touchEnd" @touchcancel="touchEnd" @click="bindClickCont" :style="{'transform':transformX,'-webkit-transform':transformX}"> + <view class="uni-swipe-action__content"> + <slot></slot> + </view> + <view class="uni-swipe-action__btn-group" :id="elId"> + <div v-for="(item,index) in options" :key="index" class="uni-swipe-action--btn" :style="{backgroundColor: item.style && item.style.backgroundColor ? item.style.backgroundColor : '#C7C6CD',color: item.style && item.style.color ? item.style.color : '#FFFFFF',fontSize: item.style && item.style.fontSize ? item.style.fontSize : '28rpx',borderRadius: item.style && item.style.borderRadius ? item.style.borderRadius : '1rpx'}" @click="bindClickBtn(item,index)"> + {{item.text}} + </div> + </view> + </view> + <view class="uni-swipe-action__mask" v-if="isShowBtn" @click="close" @touchmove.stop.prevent="close"></view> + </view> +</template> + +<script> + export default { + name: 'uni-swipe-action', + props: { + isDrag: { + type: Boolean, + default: false + }, + isOpened: { + type: Boolean, + default: false + }, + disabled: { + type: Boolean, + default: false + }, + autoClose: { + type: Boolean, + default: true + }, + options: Array + }, + watch: { + isOpened(newValue, oldValue) { + this.isShowBtn = newValue ? true : false; + this.endMove(); + } + }, + data() { + const elId = `Uni_${Math.ceil(Math.random() * 10e5).toString(36)}` + return { + elId: elId, + isShowBtn: false, + transformX: 'translateX(0px)' + } + }, + created() { + this.direction = '' + this.startX = 0 + this.startY = 0 + this.btnGroupWidth = 0 + this.isMoving = false + this.startTime = 0 + }, + // #ifdef H5 + mounted() { + this.getSize() + }, + // #endif + // #ifndef H5 + onReady() { + this.getSize() + }, + // #endif + methods: { + getSize() { + uni.createSelectorQuery().in(this).select(`#${this.elId}`).boundingClientRect().exec((ret) => { + this.btnGroupWidth = ret[0].width; + }); + if (this.isOpened === true) { + this.isShowBtn = true; + this.endMove(); + } + }, + bindClickBtn(item, index) { + this.$emit('click', { + text: item.text, + style: item.style, + index: index + }) + }, + bindClickCont(e) { + if (this.isShowBtn && this.autoClose === true) { + this.isShowBtn = false; + this.endMove(); + } + }, + touchStart(event) { + this.startTime = event.timeStamp; + this.startX = event.touches[0].pageX; + this.startY = event.touches[0].pageY; + }, + touchMove(event) { + if (this.direction === 'Y' || this.disabled === true) { + return; + } + var moveY = event.touches[0].pageY - this.startY, + moveX = event.touches[0].pageX - this.startX; + if (!this.isMoving && Math.abs(moveY) > Math.abs(moveX)) { //纵向滑动 + this.direction = 'Y'; + return; + } + this.direction = moveX > 0 ? 'right' : 'left'; + this.isMoving = true; + if (this.isDrag) { + let movedLength = this.isShowBtn ? -this.btnGroupWidth : 0; + if (movedLength + moveX >= 0) { + this.transformX = `translateX(0px)`; + return; + } + if (-movedLength - moveX >= this.btnGroupWidth) { + this.transformX = `translateX(${-this.btnGroupWidth}px)`; + return; + } + if (movedLength - moveX > 0) { + this.transformX = `translateX(${moveX}px)`; + } else { + if (moveX >= -this.btnGroupWidth) { + this.transformX = `translateX(${moveX - this.btnGroupWidth}px)`; + } + } + } + }, + touchEnd(event) { + this.isMoving = false; + if (this.direction !== 'right' && this.direction !== 'left') { + this.direction = ''; + return; + } + if (this.isDrag) { + let movedLength = Math.abs(Number(this.transformX.slice(11, -3))); + let movedTime = event.timeStamp - this.startTime; + this.isShowBtn = movedLength >= this.btnGroupWidth / 2 ? true : false; + if (50 < movedTime && movedTime < 300 && movedLength > 20) { //在这个时间里面,且滑动了一定的距离 + if (this.direction == 'right') { + this.isShowBtn = false + } else { + this.isShowBtn = true + } + } + } else { + if (this.direction == 'right') { + this.isShowBtn = false + } else { + this.isShowBtn = true + } + } + + this.endMove() + }, + endMove() { + if (this.direction === 'Y' || this.disabled === true) { + this.direction = ''; + return; + } + if (this.isShowBtn) { + this.transformX = `translateX(${-this.btnGroupWidth}px)`; + this.$emit('opened'); + } else { + this.transformX = 'translateX(0px)'; + this.$emit('closed'); + } + this.direction = ''; + }, + close() { + this.isShowBtn = false + this.endMove() + } + } + } +</script> + +<style> + @charset "UTF-8"; + + .uni-swipe-action { + width: 100%; + overflow: hidden + } + + .uni-swipe-action__container { + position: relative; + color: #FF9900; + /* background-color: #fff; */ + width: 200%; + display: flex; + flex-direction: row; + flex-wrap: wrap; + transition: transform 350ms cubic-bezier(.165, .84, .44, 1) + } + + .uni-swipe-action__content { + width: 50% + } + + .uni-swipe-action__btn-group { + display: flex; + flex-direction: row + } + + .uni-swipe-action--show { + position: relative; + z-index: 1000 + } + + .uni-swipe-action--btn { + padding: 0 32upx; + color: #fff; + background-color: #c7c6cd; + font-size: 28upx; + display: inline-flex; + text-align: center; + flex-direction: row; + align-items: center + } + + .uni-swipe-action__mask { + display: block; + opacity: 0; + position: fixed; + z-index: 999; + top: 0; + left: 0; + width: 100%; + height: 100% + } +</style> \ No newline at end of file diff --git a/components/uni-swiper-dot/uni-swiper-dot.vue b/components/uni-swiper-dot/uni-swiper-dot.vue new file mode 100644 index 0000000..64083b5 --- /dev/null +++ b/components/uni-swiper-dot/uni-swiper-dot.vue @@ -0,0 +1,158 @@ +<template> + <view class="uni-swiper__warp"> + <slot></slot> + <view v-if="mode === 'default'" class="uni-swiper__dots-box" :style="{'bottom':dots.bottom + 'px'}"> + <view class="uni-swiper__dots-item" v-for="(item,index) in info" :style="{ + 'width': dots.width + 'px','height':dots.height +'px' ,'background-color':index !== current?dots.backgroundColor:dots.selectedBackgroundColor,'border':index !==current ? dots.border:dots.selectedBorder}" :key="index"></view> + </view> + <view v-if="mode === 'long'" class="uni-swiper__dots-box" :style="{'bottom':dots.bottom + 'px'}"> + <view class="uni-swiper__dots-item " v-for="(item,index) in info" :class="[index === current&&'uni-swiper__dots-long']" :style="{ + 'width':(index === current? dots.width*3:dots.width ) + 'px','height':dots.height +'px' ,'background-color':index !== current?dots.backgroundColor:dots.selectedBackgroundColor,'border':index !==current ? dots.border:dots.selectedBorder}" :key="index"></view> + </view> + <view v-if="mode === 'nav'" class="uni-swiper__dots-box uni-swiper__dots-nav" :style="{'background-color':dotsStyles.backgroundColor}"> + <view class="uni-swiper__dots-nav-item" :style="{'color':dotsStyles.color}">{{(current+1)+"/"+info.length}} + {{info[current][field]}}</view> + </view> + <view v-if="mode === 'indexes'" class="uni-swiper__dots-box" :style="{'bottom':dots.bottom + 'px'}"> + <view class="uni-swiper__dots-item uni-swiper__dots-indexes" v-for="(item,index) in info" :style="{ + 'width':dots.width + 'px','height':dots.height +'px' ,'color':index === current?dots.selectedColor:dots.color,'background-color':index !== current?dots.backgroundColor:dots.selectedBackgroundColor,'border':index !==current ? dots.border:dots.selectedBorder}" :key="index">{{index+1}}</view> + </view> + </view> +</template> + +<script> + export default { + name: 'uni-swiper-dot', + props: { + info: { + type: Array, + default () { + return [] + } + }, + current: { + info: Number, + default: 0 + }, + dotsStyles: { + type: Object, + default () { + return {} + } + }, + // 类型 :default(默认) indexes long nav + mode: { + type: String, + default: 'default' + }, + // 只在 nav 模式下生效,变量名称 + field: { + type: String, + default: '' + } + }, + data() { + return { + dots: { + width: 8, + height: 8, + bottom: 10, + color: '#fff', + backgroundColor: 'rgba(0, 0, 0, .3)', + border: '1px rgba(0, 0, 0, .3) solid', + selectedBackgroundColor: '#333', + selectedBorder: '1px rgba(0, 0, 0, .9) solid' + } + }; + }, + created() { + if (this.mode === 'indexes') { + this.dots.width = 20 + this.dots.height = 20 + } + this.dots = Object.assign(this.dots, this.dotsStyles) + }, + watch: { + dotsStyles(newVal) { + this.dots = Object.assign(this.dots, this.dotsStyles) + }, + mode(newVal) { + if (newVal === 'indexes') { + this.dots.width = 20 + this.dots.height = 20 + } else { + this.dots.width = 8 + this.dots.height = 8 + } + } + + } + } +</script> + +<style> + .uni-swiper__warp { + position: relative; + width: 100%; + box-sizing: border-box; + overflow: hidden; + } + + .uni-swiper__dots-box { + position: absolute; + bottom: 20upx; + display: flex; + justify-content: center; + align-items: center; + box-sizing: box-sizing; + width: 100%; + } + + .uni-swiper__dots-item { + flex-shrink: 0; + width: 16upx; + border-radius: 50%; + margin-left: 12upx; + background: rgba(0, 0, 0, .3); + transition: all 0.2s linear; + } + + .uni-swiper__dots-item:first-child { + margin: 0; + } + + .uni-swiper__dots-default { + border-radius: 50%; + } + + .uni-swiper__dots-long { + border-radius: 100upx; + } + + .uni-swiper__dots-nav { + bottom: 0; + height: 80upx; + justify-content: flex-start; + background: rgba(0, 0, 0, 0.2); + box-sizing: box-sizing; + overflow: hidden; + } + + .uni-swiper__dots-nav-item { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + font-size: 28upx; + color: #fff; + box-sizing: box-sizing; + margin: 0 30upx; + } + + .uni-swiper__dots-indexes { + display: flex; + justify-content: center; + align-items: center; + color: #fff; + font-size: 24upx; + } +</style> \ No newline at end of file diff --git a/components/uni-tag/uni-tag.vue b/components/uni-tag/uni-tag.vue new file mode 100644 index 0000000..46bda64 --- /dev/null +++ b/components/uni-tag/uni-tag.vue @@ -0,0 +1,135 @@ +<template> + <view class="uni-tag" v-if="text" :class="[disabled === true || disabled === 'true' ? 'uni-tag--disabled' : '',inverted === true || inverted === 'true' ? 'uni-tag--inverted' : '',circle === true || circle === 'true' ? 'uni-tag--circle' : '',mark === true || mark === 'true' ? 'uni-tag--mark' : '','uni-tag--'+size,'uni-tag--'+type]" @click="onClick()">{{text}}</view> +</template> + +<script> + export default { + name: 'uni-tag', + props: { + type: { //标签类型default、primary、success、warning、danger、royal + type: String, + default: 'default' + }, + size: { //标签大小 normal, small + type: String, + default: 'normal' + }, + text: String, //标签内容 + disabled: { //是否为禁用状态 + type: [String, Boolean], + defalut: false + }, + inverted: { //是否为空心 + type: [String, Boolean], + defalut: false + }, + circle: { //是否为圆角样式 + type: [String, Boolean], + defalut: false + }, + mark: { //是否为标记样式 + type: [String, Boolean], + defalut: false + } + }, + methods: { + onClick() { + if (this.disabled === true || this.disabled === 'true') { + return; + } + this.$emit('click') + } + } + } +</script> + +<style> + @charset "UTF-8"; + + .uni-tag { + box-sizing: border-box; + padding: 0 32upx; + height: 60upx; + line-height: calc(60upx - 2px); + font-size: 28upx; + display: inline-flex; + align-items: center; + color: #333; + border-radius: 6upx; + background-color: #f8f8f8; + border: 1px solid #f8f8f8 + } + + .uni-tag--circle { + border-radius: 30upx + } + + .uni-tag--mark { + border-radius: 0 30upx 30upx 0 + } + + .uni-tag--disabled { + opacity: .5 + } + + .uni-tag--small { + height: 40upx; + padding: 0 16upx; + line-height: calc(40upx - 2px); + font-size: 24upx + } + + .uni-tag--primary { + color: #fff; + background-color: #007aff; + border: 1px solid #007aff + } + + .uni-tag--primary.uni-tag--inverted { + color: #007aff; + background-color: #fff; + border: 1px solid #007aff + } + + .uni-tag--success { + color: #fff; + background-color: #4cd964; + border: 1px solid #4cd964 + } + + .uni-tag--success.uni-tag--inverted { + color: #4cd964; + background-color: #fff; + border: 1px solid #4cd964 + } + + .uni-tag--warning { + color: #fff; + background-color: #f0ad4e; + border: 1px solid #f0ad4e + } + + .uni-tag--warning.uni-tag--inverted { + color: #f0ad4e; + background-color: #fff; + border: 1px solid #f0ad4e + } + + .uni-tag--error { + color: #fff; + background-color: #dd524d; + border: 1px solid #dd524d + } + + .uni-tag--error.uni-tag--inverted { + color: #dd524d; + background-color: #fff; + border: 1px solid #dd524d + } + + .uni-tag--inverted { + color: #333; + background-color: #fff; + border: 1px solid #f8f8f8 + } +</style> \ No newline at end of file diff --git a/components/xing-refresh/xing-refresh.vue b/components/xing-refresh/xing-refresh.vue new file mode 100644 index 0000000..d07f465 --- /dev/null +++ b/components/xing-refresh/xing-refresh.vue @@ -0,0 +1,162 @@ +<template> + <view> + <movable-area :style="'height:' + scrollHeight + 'px;width:100%'"> + <movable-view :style="'height:' + (topHeight + scrollHeight) + 'px;width:100%;z-index:3'" direction="vertical" + :out-of-bounds="true" :disabled="!scrollmark || status == 3" :y="y" :damping="50" @touchstart="touchstart" + @touchend="touchend" @change="change"> + <view :style="'height:' + topHeight + 'px;position:relative'"> + <slot name="top"></slot> + </view> + <scroll-view :style="'height:' + scrollHeight + 'px;'" :scroll-y="status !== 3" :scroll-with-animation="scrollAnimation" + :scroll-top="top" @scroll="scroll" @scrolltolower="scrolltolower"> + <view> + <slot name="content"></slot> + <template v-if="downLoading"> + <slot name="bottom"></slot> + </template> + </view> + </scroll-view> + </movable-view> + </movable-area> + </view> +</template> + +<script> + export default { + props: { + downLoading: { + //控制下面下拉加载区的显示 , 默认关闭 + type: Boolean, + default: false + }, + scrollHeight: { + //scroll显示区的高度(px) + type: Number, + default: 550 + }, + topHeight: { + //下拉区的高度(px) + type: Number, + default: 60 + }, + interruptPosition: { + //暂停区的高度(px) + type: Number, + default: 40 + }, + damping: { + //回弹动画的速度 , 值越大越快 + type: Number, + default: 50 + }, + scrollTop: { + //即scroll-top属性 设置竖向滚动条位置 + type: Number, + default: 0 + }, + scrollAnimation: { + type: Boolean, + default: false + } + }, + data() { + return { + isTouch: false, //触摸的标识 + y: 0, //控制y + diff: 0, //定值topHeight-interruptPotion + scrollmark: true, + timeId: null, + top: 0, + status: 0, + count: 0.01, + scrollCount: 0.01, + fingers: 0, //记录手指数 + clearFingers: null, //清除手指定时器 + }; + }, + changePositon() { + + }, + created() { + this.y = -this.topHeight; + this.diff = this.interruptPosition - this.topHeight; + }, + methods: { + change(e) { + //为3即是正在回弹状态 + if (this.status == 3 || !this.isTouch) return; + + if (e.detail.y >= this.diff || this.fingers > 1) { + this.status = 2; + } else if (e.detail.y < this.diff) { + this.status = 1; + } + }, + touchstart(e) { + this.fingers++; + this.isTouch = true; + }, + touchend(e) { + clearTimeout(this.clearFingers); + this.clearFingers = setTimeout(() => { + this.fingers = 0; + //重置手指数防止bug; + }, 200); + this.fingers--; + if (this.status == 3 || this.fingers != 0) return; //防止多指下滑问题 , 匹配手指 只用到最后一次touchend;栈的思想 + this.isTouch = false; + if (this.scrollmark) { + if (this.status == 2) { + this.status = 3; + this.y = this.diff; + this.$emit('interrupt', () => { + this.y = -this.topHeight - 0.02; + setTimeout(() => { + this.$emit('finished'); + this.status = 0; //回弹过程中 + this.y = -this.topHeight; //结束之后,再次设置y坐标 + }, 200); + }); + } else if (this.status == 1) { + this.status = 3; + this.y = -this.topHeight + this.count; + //微小改变 否则无响应 + this.count = -this.count; + setTimeout(() => { + this.status = 0; //回弹过程中 + }, 200); + } + } + }, + + scroll(e) { + //事件 + this.$emit('scroll', e) + clearTimeout(this.timeId); + this.scrollmark = false; + this.timeId = setTimeout(() => { + if (e.detail.scrollTop <= 15 || e.detail.scrollTop - e.detail.deltaY <= 0) { + this.top = 0 + this.count; + this.$emit('scrolltoupper', e) + this.scrollCount = -this.scrollCount; + this.scrollmark = true; + } + }, 100); + }, + scrolltolower(e) { + this.$emit('scrolltolower', e); + } + }, + watch: { + status(value) { + if (this.status == 2) this.$emit('pushToInterrupt'); + else if (this.status == 1) this.$emit('backToInterrupt'); + }, + scrollTop() { + this.top = this.scrollTop; + } + } + }; +</script> + +<style></style> diff --git "a/components/xing-refresh/\345\256\214\345\205\250\350\207\252\345\256\232\344\271\211\347\232\204\345\270\246\346\234\211\344\270\213\346\213\211\345\210\267\346\226\260\347\232\204scroll-view\347\273\204\344\273\266.md" "b/components/xing-refresh/\345\256\214\345\205\250\350\207\252\345\256\232\344\271\211\347\232\204\345\270\246\346\234\211\344\270\213\346\213\211\345\210\267\346\226\260\347\232\204scroll-view\347\273\204\344\273\266.md" new file mode 100644 index 0000000..b115110 --- /dev/null +++ "b/components/xing-refresh/\345\256\214\345\205\250\350\207\252\345\256\232\344\271\211\347\232\204\345\270\246\346\234\211\344\270\213\346\213\211\345\210\267\346\226\260\347\232\204scroll-view\347\273\204\344\273\266.md" @@ -0,0 +1,192 @@ +## 完全自定义的带有下拉刷新的scroll-view组件 + + 看到很多人都需要下拉刷新的scroll-view组件 , 也有很多是从自己项目中抽离出来的组件 . 前端不是设计师 , 而且也难以定制样式 , 授人🐟不如授之以渔 , 所以我这边写了一个基于scroll-view的带下拉刷新的组件 . 我这边只封装了逻辑和进行优化组件的性能 . + + 大致说明下效果 下拉时遵循一个 ease-in-out曲线(慢快慢,即手滑动距离与下拉距离非线性) , 下拉距离至超过设置值时 可以有回弹后暂停继续回弹的效果,可以参照手机QQ的下拉刷新效果 ; 过程中有钩子事件 , 你可以改变下拉框的内容和发送请求或别的事情 . 可以看gif 可能有些卡 但是实际上不是卡的(电脑端) 手机端不知道怎么样 + + + +#### 自定义属性 + +```Javascript +upRefresh: { + //是否开启下拉刷新功能 , 不要动态改变这个属性 + type: Boolean, + + default: true + + }, + //控制显示底部的提示框(可配合scrolltolower事件用于底部加载 ) + downLoading: { + + type: Boolean, + + default: false + + }, + + scrollHeight: { + + //scroll显示区的高度(rpx) + + type: Number, + + default: 800 + + }, + + moveMax: { + + //可下拉的最大距离 指手指滑动的距离(px) 超出后会被截断 此时下拉框已经完全显示 即已经到达 +//下面属性topHeight的高度 + + type: Number, + + default: 300 + + }, + + topHeight: { + + //下拉整个框的最大的高度 + + type: Number, + + default: 100 + + }, + + animationTime: { + + //回弹的缓动时间 当upFresh完全显示时 需要花费300ms回弹 + + //upFresh不完全显示时 时间减少 距离曲线按照ease-in-out函数 慢->快->慢 + + type: Number, + + default: 300 + + }, + + interruptPosition: { + //回弹中断时的高度(px),同时判断是否下拉成功钩子的临界点 建议设置成传入提示框的高度以保持回弹暂停时文字的居中 + type: Number, + + default: 40 + + } +``` + +#### 自定义事件和下拉时的钩子 + +@start,@move,@end 对应touchstart,touchmove,touchend事件参数为event + +**注意这些事件判断标准都是下拉的高度 , 而不是手指移动的距离** + +**重要!** + +##### @pushToInterrupt 下拉达到interruptPosition就会触发这个钩子 下拉过程中只会执行一次 + +##### @interrupt 回弹暂停的钩子,此时高度为interruptPosition,参数为解除回弹暂停的函数 + +##### @finished 最后回弹结束高度为0时的钩子 + +#### **插槽** + +``` +<template slot="top"></template> +<template slot="content"></template> +<template slot="bottom"></template> +``` + +top对应传入提示文字内容 整个下拉框要因为要设置height的变化 所以无法移除 设置了 position:relative , 你可以 slot可以设置position:absolute来控制居中之类的 如果有有要求可以回到源码中改 比如 + +```html +<template slot="top"> +<view :style="'position: absolute;bottom: 0px;height: ' + 40 + 'px;line-height:' + 40 + 'px;width: 100%;text-align: center;'">{{tip}}</view> +</template> +//设置 position: absolute;bottom: 0px; 可以使提示文字一直在下拉框底部 +//上面提到interruptPosition建议为slot的view的高度40 以保证暂停时文字的居中 +``` + +```html +源码 + <view + class="transform will" + v-if="upRefresh" + :style="'position:relative;height:' + height + 'px;'" + > + <slot name="top"></slot> + </view> +//其他样式也可自行修改 , "'height:'+height+'px'"为控制下拉框变化部分 , 不可修改 +``` + +其他两个content即为view-scroll的内容 bottom为底部加载的内容(默认关闭) + +#### 示例 + +```Javascript +<view class="content"> + <refresh @interrupt="interrupt" @pushToInterrupt="pushToInterrupt" @finished="finished" @scrolltolower="g"> + <template slot="top"> + <view :style="'position: absolute;bottom: 0px;height: ' + 40 + 'px;line-height:' + 40 + 'px;width: 100%;text-align: center;'"> + {{tip}} + </view> + </template> + <template slot="content"> + <view v-for="index in 5" :key="index" class="" style="height: 500px;background:#B2B2B2;border: #2C405A 1px solid;">在美国总统眼里,一切都是生意,只要是生意他不在乎用什么手段。他更喜欢用敲诈勒索,刮地三尺来榨取别国的血汗钱来实现美国的伟大。就在这段日子里,美国总统喊话日韩,要求韩国上交50亿美元保护费,要求日本支付比现在多5倍的保护费,如果不给,就等着美国的怒火吧。美国总统这种做法给了日韩很大的压力,他们在给与不给的选择上左右为难,然而有一个国家却不管美国总统的臭毛病。要求韩国上交50亿美元保护费,要求日本支付比现在多5倍的保护费,如果不给,就等着美国的怒火吧。美国总统这种做法给了日韩很大的压力,他们在给与不给的选择上左右为难,然而有一个国家却不管美国总统的臭毛病。 + </view> + </template> + <template slot="bottom"> + <view> + 11111111111111111111111111111111111111111111111 + </view> + </template> + </refresh> + </view> + <script> +import refresh from '@/components/refresh.vue'; +export default { + components: { + refresh + }, + data() { + return { + tip: '下拉刷新' + }; + }, + onLoad() {}, + methods: { + g(e){}, + interrupt(e) { + this.tip = '刷新中' + //模拟发送请求 + setTimeout(e, 500); + this.tip = '刷新成功'; + }, + pushToInterrupt() { + this.tip = '释放刷新'; + }, + finished() { + this.tip = '下拉刷新'; + } + } +}; +</script> + +<style></style> + +``` + +(1)下拉至interrupt,tip:下拉刷新->释放刷新 + +(2)回弹中断:tip->刷新中,发送请求 ,回调函数 tip->刷新成功 ,执行参数e() 回弹继续 + +(3)完成整个过程 tip->释放刷新 + +###### 其他的问题 + +我这边只测试了h5端和微信小程序开发者工具 , 基本上bug已经被改完了,但是注意小程序端我这边使用的是自定义组件是成功的 非自定义组件不成功 , 貌似是uniapp非自定义组件不支持多slot的原因 只显示了content的slot(再次吐槽uniapp对插槽支持度 不完善slot和slot作用域非常影响插件质量) 你可以把提示移入源码都可以的 . 视极端与否 有bug可以在下面反馈下 + + + diff --git a/components/zhihuai-DigitJump/uParse/src/components/wxParseAudio.vue b/components/zhihuai-DigitJump/uParse/src/components/wxParseAudio.vue new file mode 100644 index 0000000..86df246 --- /dev/null +++ b/components/zhihuai-DigitJump/uParse/src/components/wxParseAudio.vue @@ -0,0 +1,27 @@ +<template> + <!--增加audio标签支持--> + <audio + :id="node.attr.id" + :class="node.classStr" + :style="node.styleStr" + :src="node.attr.src" + :loop="node.attr.loop" + :poster="node.attr.poster" + :name="node.attr.name" + :author="node.attr.author" + controls></audio> +</template> + +<script> +export default { + name: 'wxParseAudio', + props: { + node: { + type: Object, + default() { + return {}; + }, + }, + }, +}; +</script> diff --git a/components/zhihuai-DigitJump/uParse/src/components/wxParseImg.vue b/components/zhihuai-DigitJump/uParse/src/components/wxParseImg.vue new file mode 100644 index 0000000..623c416 --- /dev/null +++ b/components/zhihuai-DigitJump/uParse/src/components/wxParseImg.vue @@ -0,0 +1,90 @@ +<template> + <image :mode="node.attr.mode" :lazy-load="node.attr.lazyLoad" :class="node.classStr || ''" :style="newStyleStr || node.styleStr || ''" + :data-src="node.attr.src" :src="node.attr.src" @tap="wxParseImgTap" @load="wxParseImgLoad" /> +</template> + +<script> + export default { + name: 'wxParseImg', + data() { + return { + newStyleStr: '', + preview: true, + }; + }, + props: { + node: { + type: Object, + default () { + return {}; + }, + }, + }, + inject: ['uparse'], + methods: { + wxParseImgTap(e) { + if (!this.preview) return; + const { + src + } = e.currentTarget.dataset; + if (!src) return; + this.uparse.preview(src, e); + }, + // 图片视觉宽高计算函数区 + wxParseImgLoad(e) { + const { + src + } = e.currentTarget.dataset; + if (!src) return; + const { + width, + height + } = e.mp.detail; + const recal = this.wxAutoImageCal(width, height); + const { + imageheight, + imageWidth + } = recal; + const { + padding, + mode + } = this.node.attr; + const { + styleStr + } = this.node; + const imageHeightStyle = mode === 'widthFix' ? '' : `height: ${imageheight}px;`; + this.newStyleStr = `${styleStr || ''}; ${imageHeightStyle || ''}; width:` + (!imageWidth || imageWidth === '100%' ? '100%;' : `${imageWidth}px;`) +`padding: 0 ${+padding}px;`; + }, + // 计算视觉优先的图片宽高 + wxAutoImageCal(originalWidth, originalHeight) { + // 获取图片的原始长宽 + const { + padding + } = this.node.attr; + const windowWidth = this.node.$screen.width - (2 * padding); + const results = {}; + + if (originalWidth < 60 || originalHeight < 60) { + const { + src + } = this.node.attr; + this.uparse.removeImageUrl(src); + this.preview = false; + } + + // 判断按照那种方式进行缩放 + if (originalWidth > windowWidth) { + // 在图片width大于手机屏幕width时候 + results.imageWidth = '100%'; + results.imageheight = (windowWidth * (originalHeight / originalWidth)); + } else { + // 否则展示原来的数据 + results.imageWidth = originalWidth; + results.imageheight = originalHeight; + } + + return results; + } + } + }; +</script> diff --git a/components/zhihuai-DigitJump/uParse/src/components/wxParseTemplate0.vue b/components/zhihuai-DigitJump/uParse/src/components/wxParseTemplate0.vue new file mode 100644 index 0000000..1045ebb --- /dev/null +++ b/components/zhihuai-DigitJump/uParse/src/components/wxParseTemplate0.vue @@ -0,0 +1,104 @@ +<template> + <view> + <!--判断是否是标签节点--> + <block v-if="node.node == 'element'"> + <block v-if="node.tag == 'button'"> + <button type="default" size="mini"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </button> + </block> + + <!--li类型--> + <block v-else-if="node.tag == 'li'"> + <view :class="node.classStr" :style="node.styleStr"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </view> + </block> + + <!--video类型--> + <block v-else-if="node.tag == 'video'"> + <wx-parse-video :node="node" /> + </block> + + <!--audio类型--> + <block v-else-if="node.tag == 'audio'"> + <wx-parse-audio :node="node" /> + </block> + + <!--img类型--> + <block v-else-if="node.tag == 'img'"> + <wx-parse-img :node="node" /> + </block> + + <!--a类型--> + <block v-else-if="node.tag == 'a'"> + <view @click="wxParseATap" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </view> + </block> + + <!--table类型--> + <block v-else-if="node.tag == 'table'"> + <view :class="node.classStr" class="table" :style="node.styleStr"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </view> + </block> + + <!--br类型--> + <block v-else-if="node.tag == 'br'"> + <text>\n</text> + </block> + + <!--其他标签--> + <block v-else> + <view :class="node.classStr" :style="node.styleStr"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </view> + </block> + + </block> + + <!--判断是否是文本节点--> + <block v-else-if="node.node == 'text'">{{node.text}}</block> + </view> +</template> + +<script> + import wxParseTemplate from './wxParseTemplate1'; + import wxParseImg from './wxParseImg'; + import wxParseVideo from './wxParseVideo'; + import wxParseAudio from './wxParseAudio'; + + export default { + name: 'wxParseTemplate0', + props: { + node: {}, + }, + components: { + wxParseTemplate, + wxParseImg, + wxParseVideo, + wxParseAudio, + }, + inject: ['uparse'], + methods: { + wxParseATap(e) { + const { + href + } = e.currentTarget.dataset;// TODO currentTarget才有dataset + if (!href) return; + this.uparse.navigate(href, e); + } + } + }; +</script> diff --git a/components/zhihuai-DigitJump/uParse/src/components/wxParseTemplate1.vue b/components/zhihuai-DigitJump/uParse/src/components/wxParseTemplate1.vue new file mode 100644 index 0000000..354a4ff --- /dev/null +++ b/components/zhihuai-DigitJump/uParse/src/components/wxParseTemplate1.vue @@ -0,0 +1,96 @@ +<template> + <view :class="(node.tag == 'li' ? node.classStr : (node.node==='text'?'text':''))"> + <!--判断是否是标签节点--> + <block v-if="node.node == 'element'"> + <block v-if="node.tag == 'button'"> + <button type="default" size="mini"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </button> + </block> + + <!--li类型--> + <block v-else-if="node.tag == 'li'"> + <!-- <view :class="node.classStr" :style="node.styleStr"> --> + <view :style="node.styleStr"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </view> + </block> + + <!--video类型--> + <block v-else-if="node.tag == 'video'"> + <wx-parse-video :node="node" /> + </block> + + <!--audio类型--> + <block v-else-if="node.tag == 'audio'"> + <wx-parse-audio :node="node" /> + </block> + + <!--img类型--> + <block v-else-if="node.tag == 'img'"> + <wx-parse-img :node="node" /> + </block> + + <!--a类型--> + <block v-else-if="node.tag == 'a'"> + <view @click="wxParseATap" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </view> + </block> + + <!--br类型--> + <block v-else-if="node.tag == 'br'"> + <text>\n</text> + </block> + + <!--其他标签--> + <block v-else> + <view :class="node.classStr" :style="node.styleStr"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </view> + </block> + + </block> + + <!--判断是否是文本节点--> + <block v-else-if="node.node == 'text'">{{node.text}}</block> + </view> +</template> + +<script> + import wxParseTemplate from './wxParseTemplate2'; + import wxParseImg from './wxParseImg'; + import wxParseVideo from './wxParseVideo'; + import wxParseAudio from './wxParseAudio'; + + export default { + name: 'wxParseTemplate1', + props: { + node: {}, + }, + components: { + wxParseTemplate, + wxParseImg, + wxParseVideo, + wxParseAudio, + }, + inject: ['uparse'], + methods: { + wxParseATap(e) { + const { + href + } = e.currentTarget.dataset; + if (!href) return; + this.uparse.navigate(href, e); + }, + }, + }; +</script> diff --git a/components/zhihuai-DigitJump/uParse/src/components/wxParseTemplate10.vue b/components/zhihuai-DigitJump/uParse/src/components/wxParseTemplate10.vue new file mode 100644 index 0000000..40f0d54 --- /dev/null +++ b/components/zhihuai-DigitJump/uParse/src/components/wxParseTemplate10.vue @@ -0,0 +1,94 @@ +<template> + <view> + <!--判断是否是标签节点--> + <block v-if="node.node == 'element'"> + <block v-if="node.tag == 'button'"> + <button type="default" size="mini"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </button> + </block> + + <!--li类型--> + <block v-else-if="node.tag == 'li'"> + <view :class="node.classStr" :style="node.styleStr"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </view> + </block> + + <!--video类型--> + <block v-else-if="node.tag == 'video'"> + <wx-parse-video :node="node" /> + </block> + + <!--audio类型--> + <block v-else-if="node.tag == 'audio'"> + <wx-parse-audio :node="node" /> + </block> + + <!--img类型--> + <block v-else-if="node.tag == 'img'"> + <wx-parse-img :node="node" /> + </block> + + <!--a类型--> + <block v-else-if="node.tag == 'a'"> + <view @click="wxParseATap" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </view> + </block> + + <!--br类型--> + <block v-else-if="node.tag == 'br'"> + <text>\n</text> + </block> + + <!--其他标签--> + <block v-else> + <view :class="node.classStr" :style="node.styleStr"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </view> + </block> + </block> + + <!--判断是否是文本节点--> + <block v-else-if="node.node == 'text'">{{node.text}}</block> + </view> +</template> + +<script> + import wxParseTemplate from './wxParseTemplate11'; + import wxParseImg from './wxParseImg'; + import wxParseVideo from './wxParseVideo'; + import wxParseAudio from './wxParseAudio'; + + export default { + name: 'wxParseTemplate10', + props: { + node: {}, + }, + components: { + wxParseTemplate, + wxParseImg, + wxParseVideo, + wxParseAudio, + }, + inject: ['uparse'], + methods: { + wxParseATap(e) { + const { + href + } = e.currentTarget.dataset; + if (!href) return; + this.uparse.navigate(href, e); + } + } + }; +</script> diff --git a/components/zhihuai-DigitJump/uParse/src/components/wxParseTemplate11.vue b/components/zhihuai-DigitJump/uParse/src/components/wxParseTemplate11.vue new file mode 100644 index 0000000..81caa7f --- /dev/null +++ b/components/zhihuai-DigitJump/uParse/src/components/wxParseTemplate11.vue @@ -0,0 +1,84 @@ +<template> + <view> + <!--判断是否是标签节点--> + <block v-if="node.node == 'element'"> + <!--button类型--> + <block v-if="node.tag == 'button'"> + <button type="default" size="mini"> + </button> + </block> + + <!--li类型--> + <block v-else-if="node.tag == 'li'"> + <view :class="node.classStr" :style="node.styleStr"> + {{node.text}} + </view> + </block> + + <!--video类型--> + <block v-else-if="node.tag == 'video'"> + <wx-parse-video :node="node" /> + </block> + + <!--audio类型--> + <block v-else-if="node.tag == 'audio'"> + <wx-parse-audio :node="node" /> + </block> + + <!--img类型--> + <block v-else-if="node.tag == 'img'"> + <wx-parse-img :node="node" /> + </block> + + <!--a类型--> + <block v-else-if="node.tag == 'a'"> + <view @click="wxParseATap" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr"> + {{node.text}} + </view> + </block> + + <!--br类型--> + <block v-else-if="node.tag == 'br'"> + <text>\n</text> + </block> + + <!--其他标签--> + <block v-else> + <view :class="node.classStr" :style="node.styleStr"> + {{node.text}} + </view> + </block> + </block> + + <!--判断是否是文本节点--> + <block v-else-if="node.node == 'text'">{{node.text}}</block> + </view> +</template> + +<script> + import wxParseImg from './wxParseImg'; + import wxParseVideo from './wxParseVideo'; + import wxParseAudio from './wxParseAudio'; + + export default { + name: 'wxParseTemplate11', + props: { + node: {}, + }, + components: { + wxParseImg, + wxParseVideo, + wxParseAudio, + }, + inject: ['uparse'], + methods: { + wxParseATap(e) { + const { + href + } = e.currentTarget.dataset; + if (!href) return; + this.uparse.navigate(href, e); + } + } + }; +</script> diff --git a/components/zhihuai-DigitJump/uParse/src/components/wxParseTemplate2.vue b/components/zhihuai-DigitJump/uParse/src/components/wxParseTemplate2.vue new file mode 100644 index 0000000..a48f1be --- /dev/null +++ b/components/zhihuai-DigitJump/uParse/src/components/wxParseTemplate2.vue @@ -0,0 +1,95 @@ +<template> + <view> + <!--判断是否是标签节点--> + <block v-if="node.node == 'element'"> + <block v-if="node.tag == 'button'"> + <button type="default" size="mini"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </button> + </block> + + <!--li类型--> + <block v-else-if="node.tag == 'li'"> + <view :class="node.classStr" :style="node.styleStr"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </view> + </block> + + <!--video类型--> + <block v-else-if="node.tag == 'video'"> + <wx-parse-video :node="node" /> + </block> + + <!--audio类型--> + <block v-else-if="node.tag == 'audio'"> + <wx-parse-audio :node="node" /> + </block> + + <!--img类型--> + <block v-else-if="node.tag == 'img'"> + <wx-parse-img :node="node" /> + </block> + + <!--a类型--> + <block v-else-if="node.tag == 'a'"> + <view @click="wxParseATap" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </view> + </block> + + <!--br类型--> + <block v-else-if="node.tag == 'br'"> + <text>\n</text> + </block> + + <!--其他标签--> + <block v-else> + <view :class="node.classStr" :style="node.styleStr"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </view> + </block> + + </block> + + <!--判断是否是文本节点--> + <block v-else-if="node.node == 'text'">{{node.text}}</block> + </view> +</template> + +<script> + import wxParseTemplate from './wxParseTemplate3'; + import wxParseImg from './wxParseImg'; + import wxParseVideo from './wxParseVideo'; + import wxParseAudio from './wxParseAudio'; + + export default { + name: 'wxParseTemplate2', + props: { + node: {}, + }, + components: { + wxParseTemplate, + wxParseImg, + wxParseVideo, + wxParseAudio, + }, + inject: ['uparse'], + methods: { + wxParseATap(e) { + const { + href + } = e.currentTarget.dataset; + if (!href) return; + this.uparse.navigate(href, e); + } + } + }; +</script> diff --git a/components/zhihuai-DigitJump/uParse/src/components/wxParseTemplate3.vue b/components/zhihuai-DigitJump/uParse/src/components/wxParseTemplate3.vue new file mode 100644 index 0000000..90fc9bd --- /dev/null +++ b/components/zhihuai-DigitJump/uParse/src/components/wxParseTemplate3.vue @@ -0,0 +1,95 @@ +<template> + <view> + <!--判断是否是标签节点--> + <block v-if="node.node == 'element'"> + <block v-if="node.tag == 'button'"> + <button type="default" size="mini"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </button> + </block> + + <!--li类型--> + <block v-else-if="node.tag == 'li'"> + <view :class="node.classStr" :style="node.styleStr"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </view> + </block> + + <!--video类型--> + <block v-else-if="node.tag == 'video'"> + <wx-parse-video :node="node" /> + </block> + + <!--audio类型--> + <block v-else-if="node.tag == 'audio'"> + <wx-parse-audio :node="node" /> + </block> + + <!--img类型--> + <block v-else-if="node.tag == 'img'"> + <wx-parse-img :node="node" /> + </block> + + <!--a类型--> + <block v-else-if="node.tag == 'a'"> + <view @click="wxParseATap" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </view> + </block> + + <!--br类型--> + <block v-else-if="node.tag == 'br'"> + <text>\n</text> + </block> + + <!--其他标签--> + <block v-else> + <view :class="node.classStr" :style="node.styleStr"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </view> + </block> + + </block> + + <!--判断是否是文本节点--> + <block v-else-if="node.node == 'text'">{{node.text}}</block> + </view> +</template> + +<script> + import wxParseTemplate from './wxParseTemplate4'; + import wxParseImg from './wxParseImg'; + import wxParseVideo from './wxParseVideo'; + import wxParseAudio from './wxParseAudio'; + + export default { + name: 'wxParseTemplate3', + props: { + node: {}, + }, + components: { + wxParseTemplate, + wxParseImg, + wxParseVideo, + wxParseAudio, + }, + inject: ['uparse'], + methods: { + wxParseATap(e) { + const { + href + } = e.currentTarget.dataset; + if (!href) return; + this.uparse.navigate(href, e); + } + } + }; +</script> diff --git a/components/zhihuai-DigitJump/uParse/src/components/wxParseTemplate4.vue b/components/zhihuai-DigitJump/uParse/src/components/wxParseTemplate4.vue new file mode 100644 index 0000000..af20eef --- /dev/null +++ b/components/zhihuai-DigitJump/uParse/src/components/wxParseTemplate4.vue @@ -0,0 +1,95 @@ +<template> + <view> + <!--判断是否是标签节点--> + <block v-if="node.node == 'element'"> + <block v-if="node.tag == 'button'"> + <button type="default" size="mini"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </button> + </block> + + <!--li类型--> + <block v-else-if="node.tag == 'li'"> + <view :class="node.classStr" :style="node.styleStr"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </view> + </block> + + <!--video类型--> + <block v-else-if="node.tag == 'video'"> + <wx-parse-video :node="node" /> + </block> + + <!--audio类型--> + <block v-else-if="node.tag == 'audio'"> + <wx-parse-audio :node="node" /> + </block> + + <!--img类型--> + <block v-else-if="node.tag == 'img'"> + <wx-parse-img :node="node" /> + </block> + + <!--a类型--> + <block v-else-if="node.tag == 'a'"> + <view @click="wxParseATap" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </view> + </block> + + <!--br类型--> + <block v-else-if="node.tag == 'br'"> + <text>\n</text> + </block> + + <!--其他标签--> + <block v-else> + <view :class="node.classStr" :style="node.styleStr"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </view> + </block> + + </block> + + <!--判断是否是文本节点--> + <block v-else-if="node.node == 'text'">{{node.text}}</block> + </view> +</template> + +<script> + import wxParseTemplate from './wxParseTemplate5'; + import wxParseImg from './wxParseImg'; + import wxParseVideo from './wxParseVideo'; + import wxParseAudio from './wxParseAudio'; + + export default { + name: 'wxParseTemplate4', + props: { + node: {}, + }, + components: { + wxParseTemplate, + wxParseImg, + wxParseVideo, + wxParseAudio, + }, + inject: ['uparse'], + methods: { + wxParseATap(e) { + const { + href + } = e.currentTarget.dataset; + if (!href) return; + this.uparse.navigate(href, e); + } + } + }; +</script> diff --git a/components/zhihuai-DigitJump/uParse/src/components/wxParseTemplate5.vue b/components/zhihuai-DigitJump/uParse/src/components/wxParseTemplate5.vue new file mode 100644 index 0000000..0962239 --- /dev/null +++ b/components/zhihuai-DigitJump/uParse/src/components/wxParseTemplate5.vue @@ -0,0 +1,95 @@ +<template> + <view> + <!--判断是否是标签节点--> + <block v-if="node.node == 'element'"> + <block v-if="node.tag == 'button'"> + <button type="default" size="mini"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </button> + </block> + + <!--li类型--> + <block v-else-if="node.tag == 'li'"> + <view :class="node.classStr" :style="node.styleStr"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </view> + </block> + + <!--video类型--> + <block v-else-if="node.tag == 'video'"> + <wx-parse-video :node="node" /> + </block> + + <!--audio类型--> + <block v-else-if="node.tag == 'audio'"> + <wx-parse-audio :node="node" /> + </block> + + <!--img类型--> + <block v-else-if="node.tag == 'img'"> + <wx-parse-img :node="node" /> + </block> + + <!--a类型--> + <block v-else-if="node.tag == 'a'"> + <view @click="wxParseATap" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </view> + </block> + + <!--br类型--> + <block v-else-if="node.tag == 'br'"> + <text>\n</text> + </block> + + <!--其他标签--> + <block v-else> + <view :class="node.classStr" :style="node.styleStr"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </view> + </block> + + </block> + + <!--判断是否是文本节点--> + <block v-else-if="node.node == 'text'">{{node.text}}</block> + </view> +</template> + +<script> + import wxParseTemplate from './wxParseTemplate6'; + import wxParseImg from './wxParseImg'; + import wxParseVideo from './wxParseVideo'; + import wxParseAudio from './wxParseAudio'; + + export default { + name: 'wxParseTemplate5', + props: { + node: {}, + }, + components: { + wxParseTemplate, + wxParseImg, + wxParseVideo, + wxParseAudio, + }, + inject: ['uparse'], + methods: { + wxParseATap(e) { + const { + href + } = e.currentTarget.dataset; + if (!href) return; + this.uparse.navigate(href, e); + } + } + }; +</script> diff --git a/components/zhihuai-DigitJump/uParse/src/components/wxParseTemplate6.vue b/components/zhihuai-DigitJump/uParse/src/components/wxParseTemplate6.vue new file mode 100644 index 0000000..c322ab0 --- /dev/null +++ b/components/zhihuai-DigitJump/uParse/src/components/wxParseTemplate6.vue @@ -0,0 +1,95 @@ +<template> + <view> + <!--判断是否是标签节点--> + <block v-if="node.node == 'element'"> + <block v-if="node.tag == 'button'"> + <button type="default" size="mini"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </button> + </block> + + <!--li类型--> + <block v-else-if="node.tag == 'li'"> + <view :class="node.classStr" :style="node.styleStr"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </view> + </block> + + <!--video类型--> + <block v-else-if="node.tag == 'video'"> + <wx-parse-video :node="node" /> + </block> + + <!--audio类型--> + <block v-else-if="node.tag == 'audio'"> + <wx-parse-audio :node="node" /> + </block> + + <!--img类型--> + <block v-else-if="node.tag == 'img'"> + <wx-parse-img :node="node" /> + </block> + + <!--a类型--> + <block v-else-if="node.tag == 'a'"> + <view @click="wxParseATap" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </view> + </block> + + <!--br类型--> + <block v-else-if="node.tag == 'br'"> + <text>\n</text> + </block> + + <!--其他标签--> + <block v-else> + <view :class="node.classStr" :style="node.styleStr"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </view> + </block> + + </block> + + <!--判断是否是文本节点--> + <block v-else-if="node.node == 'text'">{{node.text}}</block> + </view> +</template> + +<script> + import wxParseTemplate from './wxParseTemplate7'; + import wxParseImg from './wxParseImg'; + import wxParseVideo from './wxParseVideo'; + import wxParseAudio from './wxParseAudio'; + + export default { + name: 'wxParseTemplate6', + props: { + node: {}, + }, + components: { + wxParseTemplate, + wxParseImg, + wxParseVideo, + wxParseAudio, + }, + inject: ['uparse'], + methods: { + wxParseATap(e) { + const { + href + } = e.currentTarget.dataset; + if (!href) return; + this.uparse.navigate(href, e); + } + } + }; +</script> diff --git a/components/zhihuai-DigitJump/uParse/src/components/wxParseTemplate7.vue b/components/zhihuai-DigitJump/uParse/src/components/wxParseTemplate7.vue new file mode 100644 index 0000000..591bcd6 --- /dev/null +++ b/components/zhihuai-DigitJump/uParse/src/components/wxParseTemplate7.vue @@ -0,0 +1,95 @@ +<template> + <view> + <!--判断是否是标签节点--> + <block v-if="node.node == 'element'"> + <block v-if="node.tag == 'button'"> + <button type="default" size="mini"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </button> + </block> + + <!--li类型--> + <block v-else-if="node.tag == 'li'"> + <view :class="node.classStr" :style="node.styleStr"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </view> + </block> + + <!--video类型--> + <block v-else-if="node.tag == 'video'"> + <wx-parse-video :node="node" /> + </block> + + <!--audio类型--> + <block v-else-if="node.tag == 'audio'"> + <wx-parse-audio :node="node" /> + </block> + + <!--img类型--> + <block v-else-if="node.tag == 'img'"> + <wx-parse-img :node="node" /> + </block> + + <!--a类型--> + <block v-else-if="node.tag == 'a'"> + <view @click="wxParseATap" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </view> + </block> + + <!--br类型--> + <block v-else-if="node.tag == 'br'"> + <text>\n</text> + </block> + + <!--其他标签--> + <block v-else> + <view :class="node.classStr" :style="node.styleStr"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </view> + </block> + + </block> + + <!--判断是否是文本节点--> + <block v-else-if="node.node == 'text'">{{node.text}}</block> + </view> +</template> + +<script> + import wxParseTemplate from './wxParseTemplate8'; + import wxParseImg from './wxParseImg'; + import wxParseVideo from './wxParseVideo'; + import wxParseAudio from './wxParseAudio'; + + export default { + name: 'wxParseTemplate7', + props: { + node: {}, + }, + components: { + wxParseTemplate, + wxParseImg, + wxParseVideo, + wxParseAudio, + }, + inject: ['uparse'], + methods: { + wxParseATap(e) { + const { + href + } = e.currentTarget.dataset; + if (!href) return; + this.uparse.navigate(href, e); + } + } + }; +</script> diff --git a/components/zhihuai-DigitJump/uParse/src/components/wxParseTemplate8.vue b/components/zhihuai-DigitJump/uParse/src/components/wxParseTemplate8.vue new file mode 100644 index 0000000..0ec0b3f --- /dev/null +++ b/components/zhihuai-DigitJump/uParse/src/components/wxParseTemplate8.vue @@ -0,0 +1,95 @@ +<template> + <view> + <!--判断是否是标签节点--> + <block v-if="node.node == 'element'"> + <block v-if="node.tag == 'button'"> + <button type="default" size="mini"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </button> + </block> + + <!--li类型--> + <block v-else-if="node.tag == 'li'"> + <view :class="node.classStr" :style="node.styleStr"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </view> + </block> + + <!--video类型--> + <block v-else-if="node.tag == 'video'"> + <wx-parse-video :node="node" /> + </block> + + <!--audio类型--> + <block v-else-if="node.tag == 'audio'"> + <wx-parse-audio :node="node" /> + </block> + + <!--img类型--> + <block v-else-if="node.tag == 'img'"> + <wx-parse-img :node="node" /> + </block> + + <!--a类型--> + <block v-else-if="node.tag == 'a'"> + <view @click="wxParseATap" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </view> + </block> + + <!--br类型--> + <block v-else-if="node.tag == 'br'"> + <text>\n</text> + </block> + + <!--其他标签--> + <block v-else> + <view :class="node.classStr" :style="node.styleStr"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </view> + </block> + + </block> + + <!--判断是否是文本节点--> + <block v-else-if="node.node == 'text'">{{node.text}}</block> + </view> +</template> + +<script> + import wxParseTemplate from './wxParseTemplate9'; + import wxParseImg from './wxParseImg'; + import wxParseVideo from './wxParseVideo'; + import wxParseAudio from './wxParseAudio'; + + export default { + name: 'wxParseTemplate8', + props: { + node: {}, + }, + components: { + wxParseTemplate, + wxParseImg, + wxParseVideo, + wxParseAudio, + }, + inject: ['uparse'], + methods: { + wxParseATap(e) { + const { + href + } = e.currentTarget.dataset; + if (!href) return; + this.uparse.navigate(href, e); + } + } + }; +</script> diff --git a/components/zhihuai-DigitJump/uParse/src/components/wxParseTemplate9.vue b/components/zhihuai-DigitJump/uParse/src/components/wxParseTemplate9.vue new file mode 100644 index 0000000..ec799ac --- /dev/null +++ b/components/zhihuai-DigitJump/uParse/src/components/wxParseTemplate9.vue @@ -0,0 +1,95 @@ +<template> + <view> + <!--判断是否是标签节点--> + <block v-if="node.node == 'element'"> + <block v-if="node.tag == 'button'"> + <button type="default" size="mini"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </button> + </block> + + <!--li类型--> + <block v-else-if="node.tag == 'li'"> + <view :class="node.classStr" :style="node.styleStr"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </view> + </block> + + <!--video类型--> + <block v-else-if="node.tag == 'video'"> + <wx-parse-video :node="node" /> + </block> + + <!--audio类型--> + <block v-else-if="node.tag == 'audio'"> + <wx-parse-audio :node="node" /> + </block> + + <!--img类型--> + <block v-else-if="node.tag == 'img'"> + <wx-parse-img :node="node" /> + </block> + + <!--a类型--> + <block v-else-if="node.tag == 'a'"> + <view @click="wxParseATap" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </view> + </block> + + <!--br类型--> + <block v-else-if="node.tag == 'br'"> + <text>\n</text> + </block> + + <!--其他标签--> + <block v-else> + <view :class="node.classStr" :style="node.styleStr"> + <block v-for="(node, index) of node.nodes" :key="index"> + <wx-parse-template :node="node" /> + </block> + </view> + </block> + + </block> + + <!--判断是否是文本节点--> + <block v-else-if="node.node == 'text'">{{node.text}}</block> + </view> +</template> + +<script> + import wxParseTemplate from './wxParseTemplate10'; + import wxParseImg from './wxParseImg'; + import wxParseVideo from './wxParseVideo'; + import wxParseAudio from './wxParseAudio'; + + export default { + name: 'wxParseTemplate9', + props: { + node: {}, + }, + components: { + wxParseTemplate, + wxParseImg, + wxParseVideo, + wxParseAudio, + }, + inject: ['uparse'], + methods: { + wxParseATap(e) { + const { + href + } = e.currentTarget.dataset; + if (!href) return; + this.uparse.navigate(href, e); + } + } + }; +</script> diff --git a/components/zhihuai-DigitJump/uParse/src/components/wxParseVideo.vue b/components/zhihuai-DigitJump/uParse/src/components/wxParseVideo.vue new file mode 100644 index 0000000..a952f58 --- /dev/null +++ b/components/zhihuai-DigitJump/uParse/src/components/wxParseVideo.vue @@ -0,0 +1,15 @@ +<template> + <!--增加video标签支持,并循环添加--> + <view :class="node.classStr" :style="node.styleStr"> + <video :class="node.classStr" class="video-video" :src="node.attr.src"></video> + </view> +</template> + +<script> +export default { + name: 'wxParseVideo', + props: { + node: {}, + }, +}; +</script> diff --git a/components/zhihuai-DigitJump/uParse/src/libs/html2json.js b/components/zhihuai-DigitJump/uParse/src/libs/html2json.js new file mode 100644 index 0000000..de1bdd4 --- /dev/null +++ b/components/zhihuai-DigitJump/uParse/src/libs/html2json.js @@ -0,0 +1,274 @@ +/** + * html2Json 改造来自: https://github.com/Jxck/html2json + * + * + * author: Di (微信小程序开发工程师) + * organization: WeAppDev(微信小程序开发论坛)(http://weappdev.com) + * 垂直微信小程序开发交流社区 + * + * github地址: https://github.com/icindy/wxParse + * + * for: 微信小程序富文本解析 + * detail : http://weappdev.com/t/wxparse-alpha0-1-html-markdown/184 + */ + +import wxDiscode from './wxDiscode'; +import HTMLParser from './htmlparser'; + +function makeMap(str) { + const obj = {}; + const items = str.split(','); + for (let i = 0; i < items.length; i += 1) obj[items[i]] = true; + return obj; +} + +// Block Elements - HTML 5 +const block = makeMap( + 'br,code,address,article,applet,aside,audio,blockquote,button,canvas,center,dd,del,dir,div,dl,dt,fieldset,figcaption,figure,footer,form,frameset,h1,h2,h3,h4,h5,h6,header,hgroup,hr,iframe,ins,isindex,li,map,menu,noframes,noscript,object,ol,output,p,pre,section,script,table,tbody,td,tfoot,th,thead,tr,ul,video' +); + +// Inline Elements - HTML 5 +const inline = makeMap( + 'a,abbr,acronym,applet,b,basefont,bdo,big,button,cite,del,dfn,em,font,i,iframe,img,input,ins,kbd,label,map,object,q,s,samp,script,select,small,span,strike,strong,sub,sup,textarea,tt,u,var' +); + +// Elements that you can, intentionally, leave open +// (and which close themselves) +const closeSelf = makeMap('colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr'); + +function removeDOCTYPE(html) { + const isDocument = /<body.*>([^]*)<\/body>/.test(html); + return isDocument ? RegExp.$1 : html; +} + +function trimHtml(html) { + return html + .replace(/<!--.*?-->/gi, '') + .replace(/\/\*.*?\*\//gi, '') + .replace(/[ ]+</gi, '<') + .replace(/<script[^]*<\/script>/gi, '') + .replace(/<style[^]*<\/style>/gi, ''); +} + +function getScreenInfo() { + const screen = {}; + wx.getSystemInfo({ + success: (res) => { + screen.width = res.windowWidth; + screen.height = res.windowHeight; + }, + }); + return screen; +} + +function html2json(html, customHandler, imageProp, host) { + // 处理字符串 + html = removeDOCTYPE(html); + html = trimHtml(html); + html = wxDiscode.strDiscode(html); + // 生成node节点 + const bufArray = []; + const results = { + nodes: [], + imageUrls: [], + }; + + const screen = getScreenInfo(); + + function Node(tag) { + this.node = 'element'; + this.tag = tag; + + this.$screen = screen; + } + + HTMLParser(html, { + start(tag, attrs, unary) { + // node for this element + const node = new Node(tag); + + if (bufArray.length !== 0) { + const parent = bufArray[0]; + if (parent.nodes === undefined) { + parent.nodes = []; + } + } + + if (block[tag]) { + node.tagType = 'block'; + } else if (inline[tag]) { + node.tagType = 'inline'; + } else if (closeSelf[tag]) { + node.tagType = 'closeSelf'; + } + + node.attr = attrs.reduce((pre, attr) => { + const { + name + } = attr; + let { + value + } = attr; + if (name === 'class') { + node.classStr = value; + } + // has multi attibutes + // make it array of attribute + if (name === 'style') { + node.styleStr = value; + } + if (name === 'align') { + node.styleStr = node.styleStr || ''; + node.styleStr = node.styleStr += 'text-align:' + value + ';'; + } + if (value.match(/ /)) { + value = value.split(' '); + } + + // if attr already exists + // merge it + if (pre[name]) { + if (Array.isArray(pre[name])) { + // already array, push to last + pre[name].push(value); + } else { + // single value, make it array + pre[name] = [pre[name], value]; + } + } else { + // not exist, put it + pre[name] = value; + } + + return pre; + }, {}); + + // 优化样式相关属性 + if (node.classStr) { + node.classStr += ` ${node.tag}`; + } else { + node.classStr = node.tag; + } + if (node.tagType === 'inline') { + node.classStr += ' inline'; + } + + // 对img添加额外数据 + if (node.tag === 'img') { + let imgUrl = node.attr.src; + imgUrl = wxDiscode.urlToHttpUrl(imgUrl, imageProp.domain); + Object.assign(node.attr, imageProp, { + src: imgUrl || '', + }); + if (imgUrl) { + results.imageUrls.push(imgUrl); + } + } + + // 处理a标签属性 + if (node.tag === 'a') { + node.attr.href = node.attr.href || ''; + } + + // 处理font标签样式属性 + if (node.tag === 'font') { + const fontSize = [ + 'x-small', + 'small', + 'medium', + 'large', + 'x-large', + 'xx-large', + '-webkit-xxx-large', + ]; + const styleAttrs = { + color: 'color', + face: 'font-family', + size: 'font-size', + }; + if (!node.styleStr) node.styleStr = ''; + Object.keys(styleAttrs).forEach((key) => { + if (node.attr[key]) { + const value = key === 'size' ? fontSize[node.attr[key] - 1] : node.attr[key]; + node.styleStr += `${styleAttrs[key]}: ${value};`; + } + }); + } + + // 临时记录source资源 + if (node.tag === 'source') { + results.source = node.attr.src; + } + + if (customHandler.start) { + customHandler.start(node, results); + } + + if (unary) { + // if this tag doesn't have end tag + // like <img src="hoge.png"/> + // add to parents + const parent = bufArray[0] || results; + if (parent.nodes === undefined) { + parent.nodes = []; + } + parent.nodes.push(node); + } else { + bufArray.unshift(node); + } + }, + end(tag) { + // merge into parent tag + const node = bufArray.shift(); + if (node.tag !== tag) { + console.error('invalid state: mismatch end tag'); + } + + // 当有缓存source资源时于于video补上src资源 + if (node.tag === 'video' && results.source) { + node.attr.src = results.source; + delete results.source; + } + + if (customHandler.end) { + customHandler.end(node, results); + } + + if (bufArray.length === 0) { + results.nodes.push(node); + } else { + const parent = bufArray[0]; + if (!parent.nodes) { + parent.nodes = []; + } + parent.nodes.push(node); + } + }, + chars(text) { + if (!text.trim()) return; + + const node = { + node: 'text', + text, + }; + + if (customHandler.chars) { + customHandler.chars(node, results); + } + + if (bufArray.length === 0) { + results.nodes.push(node); + } else { + const parent = bufArray[0]; + if (parent.nodes === undefined) { + parent.nodes = []; + } + parent.nodes.push(node); + } + }, + }); + + return results; +} + +export default html2json; diff --git a/components/zhihuai-DigitJump/uParse/src/libs/htmlparser.js b/components/zhihuai-DigitJump/uParse/src/libs/htmlparser.js new file mode 100644 index 0000000..2939da3 --- /dev/null +++ b/components/zhihuai-DigitJump/uParse/src/libs/htmlparser.js @@ -0,0 +1,156 @@ +/** + * + * htmlParser改造自: https://github.com/blowsie/Pure-JavaScript-HTML5-Parser + * + * author: Di (微信小程序开发工程师) + * organization: WeAppDev(微信小程序开发论坛)(http://weappdev.com) + * 垂直微信小程序开发交流社区 + * + * github地址: https://github.com/icindy/wxParse + * + * for: 微信小程序富文本解析 + * detail : http://weappdev.com/t/wxparse-alpha0-1-html-markdown/184 + */ +// Regular Expressions for parsing tags and attributes + +const startTag = /^<([-A-Za-z0-9_]+)((?:\s+[a-zA-Z0-9_:][-a-zA-Z0-9_:.]*(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)>/; +const endTag = /^<\/([-A-Za-z0-9_]+)[^>]*>/; +const attr = /([a-zA-Z0-9_:][-a-zA-Z0-9_:.]*)(?:\s*=\s*(?:(?:"((?:\\.|[^"])*)")|(?:'((?:\\.|[^'])*)')|([^>\s]+)))?/g; + +function makeMap(str) { + const obj = {}; + const items = str.split(','); + for (let i = 0; i < items.length; i += 1) obj[items[i]] = true; + return obj; +} + +// Empty Elements - HTML 5 +const empty = makeMap('area,base,basefont,br,col,frame,hr,img,input,link,meta,param,embed,command,keygen,source,track,wbr'); + +// Block Elements - HTML 5 +const block = makeMap('address,code,article,applet,aside,audio,blockquote,button,canvas,center,dd,del,dir,div,dl,dt,fieldset,figcaption,figure,footer,form,frameset,h1,h2,h3,h4,h5,h6,header,hgroup,hr,iframe,ins,isindex,li,map,menu,noframes,noscript,object,ol,output,p,pre,section,script,table,tbody,td,tfoot,th,thead,tr,ul,video'); + +// Inline Elements - HTML 5 +const inline = makeMap('a,abbr,acronym,applet,b,basefont,bdo,big,br,button,cite,del,dfn,em,font,i,iframe,img,input,ins,kbd,label,map,object,q,s,samp,script,select,small,span,strike,strong,sub,sup,textarea,tt,u,var'); + +// Elements that you can, intentionally, leave open +// (and which close themselves) +const closeSelf = makeMap('colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr'); + +// Attributes that have their values filled in disabled="disabled" +const fillAttrs = makeMap('checked,compact,declare,defer,disabled,ismap,multiple,nohref,noresize,noshade,nowrap,readonly,selected'); + +function HTMLParser(html, handler) { + let index; + let chars; + let match; + let last = html; + const stack = []; + + stack.last = () => stack[stack.length - 1]; + + function parseEndTag(tag, tagName) { + // If no tag name is provided, clean shop + let pos; + if (!tagName) { + pos = 0; + } else { + // Find the closest opened tag of the same type + tagName = tagName.toLowerCase(); + for (pos = stack.length - 1; pos >= 0; pos -= 1) { + if (stack[pos] === tagName) break; + } + } + if (pos >= 0) { + // Close all the open elements, up the stack + for (let i = stack.length - 1; i >= pos; i -= 1) { + if (handler.end) handler.end(stack[i]); + } + + // Remove the open elements from the stack + stack.length = pos; + } + } + + function parseStartTag(tag, tagName, rest, unary) { + tagName = tagName.toLowerCase(); + + if (block[tagName]) { + while (stack.last() && inline[stack.last()]) { + parseEndTag('', stack.last()); + } + } + + if (closeSelf[tagName] && stack.last() === tagName) { + parseEndTag('', tagName); + } + + unary = empty[tagName] || !!unary; + + if (!unary) stack.push(tagName); + + if (handler.start) { + const attrs = []; + + rest.replace(attr, function genAttr(matches, name) { + const value = arguments[2] || arguments[3] || arguments[4] || (fillAttrs[name] ? name : ''); + + attrs.push({ + name, + value, + escaped: value.replace(/(^|[^\\])"/g, '$1\\"'), // " + }); + }); + + if (handler.start) { + handler.start(tagName, attrs, unary); + } + } + } + + while (html) { + chars = true; + + if (html.indexOf('</') === 0) { + match = html.match(endTag); + + if (match) { + html = html.substring(match[0].length); + match[0].replace(endTag, parseEndTag); + chars = false; + } + + // start tag + } else if (html.indexOf('<') === 0) { + match = html.match(startTag); + + if (match) { + html = html.substring(match[0].length); + match[0].replace(startTag, parseStartTag); + chars = false; + } + } + + if (chars) { + index = html.indexOf('<'); + let text = ''; + while (index === 0) { + text += '<'; + html = html.substring(1); + index = html.indexOf('<'); + } + text += index < 0 ? html : html.substring(0, index); + html = index < 0 ? '' : html.substring(index); + + if (handler.chars) handler.chars(text); + } + + if (html === last) throw new Error(`Parse Error: ${html}`); + last = html; + } + + // Clean up any remaining tags + parseEndTag(); +} + +export default HTMLParser; diff --git a/components/zhihuai-DigitJump/uParse/src/libs/wxDiscode.js b/components/zhihuai-DigitJump/uParse/src/libs/wxDiscode.js new file mode 100644 index 0000000..a7a36a6 --- /dev/null +++ b/components/zhihuai-DigitJump/uParse/src/libs/wxDiscode.js @@ -0,0 +1,195 @@ +// HTML 支持的数学符号 +function strNumDiscode(str) { + str = str.replace(/∀/g, '∀'); + str = str.replace(/∂/g, '∂'); + str = str.replace(/∃/g, '∃'); + str = str.replace(/∅/g, '∅'); + str = str.replace(/∇/g, '∇'); + str = str.replace(/∈/g, '∈'); + str = str.replace(/∉/g, '∉'); + str = str.replace(/∋/g, '∋'); + str = str.replace(/∏/g, '∏'); + str = str.replace(/∑/g, '∑'); + str = str.replace(/−/g, '−'); + str = str.replace(/∗/g, '∗'); + str = str.replace(/√/g, '√'); + str = str.replace(/∝/g, '∝'); + str = str.replace(/∞/g, '∞'); + str = str.replace(/∠/g, '∠'); + str = str.replace(/∧/g, '∧'); + str = str.replace(/∨/g, '∨'); + str = str.replace(/∩/g, '∩'); + str = str.replace(/∪/g, '∪'); + str = str.replace(/∫/g, '∫'); + str = str.replace(/∴/g, '∴'); + str = str.replace(/∼/g, '∼'); + str = str.replace(/≅/g, '≅'); + str = str.replace(/≈/g, '≈'); + str = str.replace(/≠/g, '≠'); + str = str.replace(/≤/g, '≤'); + str = str.replace(/≥/g, '≥'); + str = str.replace(/⊂/g, '⊂'); + str = str.replace(/⊃/g, '⊃'); + str = str.replace(/⊄/g, '⊄'); + str = str.replace(/⊆/g, '⊆'); + str = str.replace(/⊇/g, '⊇'); + str = str.replace(/⊕/g, '⊕'); + str = str.replace(/⊗/g, '⊗'); + str = str.replace(/⊥/g, '⊥'); + str = str.replace(/⋅/g, '⋅'); + return str; +} + +// HTML 支持的希腊字母 +function strGreeceDiscode(str) { + str = str.replace(/Α/g, 'Α'); + str = str.replace(/Β/g, 'Β'); + str = str.replace(/Γ/g, 'Γ'); + str = str.replace(/Δ/g, 'Δ'); + str = str.replace(/Ε/g, 'Ε'); + str = str.replace(/Ζ/g, 'Ζ'); + str = str.replace(/Η/g, 'Η'); + str = str.replace(/Θ/g, 'Θ'); + str = str.replace(/Ι/g, 'Ι'); + str = str.replace(/Κ/g, 'Κ'); + str = str.replace(/Λ/g, 'Λ'); + str = str.replace(/Μ/g, 'Μ'); + str = str.replace(/Ν/g, 'Ν'); + str = str.replace(/Ξ/g, 'Ν'); + str = str.replace(/Ο/g, 'Ο'); + str = str.replace(/Π/g, 'Π'); + str = str.replace(/Ρ/g, 'Ρ'); + str = str.replace(/Σ/g, 'Σ'); + str = str.replace(/Τ/g, 'Τ'); + str = str.replace(/Υ/g, 'Υ'); + str = str.replace(/Φ/g, 'Φ'); + str = str.replace(/Χ/g, 'Χ'); + str = str.replace(/Ψ/g, 'Ψ'); + str = str.replace(/Ω/g, 'Ω'); + + str = str.replace(/α/g, 'α'); + str = str.replace(/β/g, 'β'); + str = str.replace(/γ/g, 'γ'); + str = str.replace(/δ/g, 'δ'); + str = str.replace(/ε/g, 'ε'); + str = str.replace(/ζ/g, 'ζ'); + str = str.replace(/η/g, 'η'); + str = str.replace(/θ/g, 'θ'); + str = str.replace(/ι/g, 'ι'); + str = str.replace(/κ/g, 'κ'); + str = str.replace(/λ/g, 'λ'); + str = str.replace(/μ/g, 'μ'); + str = str.replace(/ν/g, 'ν'); + str = str.replace(/ξ/g, 'ξ'); + str = str.replace(/ο/g, 'ο'); + str = str.replace(/π/g, 'π'); + str = str.replace(/ρ/g, 'ρ'); + str = str.replace(/ς/g, 'ς'); + str = str.replace(/σ/g, 'σ'); + str = str.replace(/τ/g, 'τ'); + str = str.replace(/υ/g, 'υ'); + str = str.replace(/φ/g, 'φ'); + str = str.replace(/χ/g, 'χ'); + str = str.replace(/ψ/g, 'ψ'); + str = str.replace(/ω/g, 'ω'); + str = str.replace(/ϑ/g, 'ϑ'); + str = str.replace(/ϒ/g, 'ϒ'); + str = str.replace(/ϖ/g, 'ϖ'); + str = str.replace(/·/g, '·'); + return str; +} + +function strcharacterDiscode(str) { + // 加入常用解析 + str = str.replace(/ /g, ' '); + str = str.replace(/ /g, ' '); + str = str.replace(/ /g, ' '); + str = str.replace(/"/g, "'"); + str = str.replace(/&/g, '&'); + str = str.replace(/</g, '<'); + str = str.replace(/>/g, '>'); + str = str.replace(/•/g, '•'); + + return str; +} + +// HTML 支持的其他实体 +function strOtherDiscode(str) { + str = str.replace(/Œ/g, 'Œ'); + str = str.replace(/œ/g, 'œ'); + str = str.replace(/Š/g, 'Š'); + str = str.replace(/š/g, 'š'); + str = str.replace(/Ÿ/g, 'Ÿ'); + str = str.replace(/ƒ/g, 'ƒ'); + str = str.replace(/ˆ/g, 'ˆ'); + str = str.replace(/˜/g, '˜'); + str = str.replace(/ /g, ''); + str = str.replace(/ /g, ''); + str = str.replace(/ /g, ''); + str = str.replace(/‌/g, ''); + str = str.replace(/‍/g, ''); + str = str.replace(/‎/g, ''); + str = str.replace(/‏/g, ''); + str = str.replace(/–/g, '–'); + str = str.replace(/—/g, '—'); + str = str.replace(/‘/g, '‘'); + str = str.replace(/’/g, '’'); + str = str.replace(/‚/g, '‚'); + str = str.replace(/“/g, '“'); + str = str.replace(/”/g, '”'); + str = str.replace(/„/g, '„'); + str = str.replace(/†/g, '†'); + str = str.replace(/‡/g, '‡'); + str = str.replace(/•/g, '•'); + str = str.replace(/…/g, '…'); + str = str.replace(/‰/g, '‰'); + str = str.replace(/′/g, '′'); + str = str.replace(/″/g, '″'); + str = str.replace(/‹/g, '‹'); + str = str.replace(/›/g, '›'); + str = str.replace(/‾/g, '‾'); + str = str.replace(/€/g, '€'); + str = str.replace(/™/g, '™'); + + str = str.replace(/←/g, '←'); + str = str.replace(/↑/g, '↑'); + str = str.replace(/→/g, '→'); + str = str.replace(/↓/g, '↓'); + str = str.replace(/↔/g, '↔'); + str = str.replace(/↵/g, '↵'); + str = str.replace(/⌈/g, '⌈'); + str = str.replace(/⌉/g, '⌉'); + + str = str.replace(/⌊/g, '⌊'); + str = str.replace(/⌋/g, '⌋'); + str = str.replace(/◊/g, '◊'); + str = str.replace(/♠/g, '♠'); + str = str.replace(/♣/g, '♣'); + str = str.replace(/♥/g, '♥'); + + str = str.replace(/♦/g, '♦'); + str = str.replace(/'/g, "'"); + return str; +} + +function strDiscode(str) { + str = strNumDiscode(str); + str = strGreeceDiscode(str); + str = strcharacterDiscode(str); + str = strOtherDiscode(str); + return str; +} + +function urlToHttpUrl(url, domain) { + if (/^\/\//.test(url)) { + return `https:${url}`; + } else if (/^\//.test(url)) { + return `https://${domain}${url}`; + } + return url; +} + +export default { + strDiscode, + urlToHttpUrl, +}; diff --git a/components/zhihuai-DigitJump/uParse/src/wxParse.css b/components/zhihuai-DigitJump/uParse/src/wxParse.css new file mode 100644 index 0000000..691993a --- /dev/null +++ b/components/zhihuai-DigitJump/uParse/src/wxParse.css @@ -0,0 +1,232 @@ +/** + * author: Di (微信小程序开发工程师) + * organization: WeAppDev(微信小程序开发论坛)(http://weappdev.com) + * 垂直微信小程序开发交流社区 + * + * github地址: https://github.com/icindy/wxParse + * + * for: 微信小程序富文本解析 + * detail : http://weappdev.com/t/wxparse-alpha0-1-html-markdown/184 + */ + +.wxParse { + width: 100%; + font-family: Helvetica, sans-serif; + font-size: 30upx; + color: #666; + line-height: 1.8; +} + +.wxParse view { + word-break: hyphenate; +} + +.wxParse .inline { + display: inline; + margin: 0; + padding: 0; +} + +.wxParse .div { + margin: 0; + padding: 0; +} + +.wxParse .h1 .text { + font-size: 2em; + margin: 0.67em 0; +} +.wxParse .h2 .text { + font-size: 1.5em; + margin: 0.83em 0; +} +.wxParse .h3 .text { + font-size: 1.17em; + margin: 1em 0; +} +.wxParse .h4 .text { + margin: 1.33em 0; +} +.wxParse .h5 .text { + font-size: 0.83em; + margin: 1.67em 0; +} +.wxParse .h6 .text { + font-size: 0.67em; + margin: 2.33em 0; +} + +.wxParse .h1 .text, +.wxParse .h2 .text, +.wxParse .h3 .text, +.wxParse .h4 .text, +.wxParse .h5 .text, +.wxParse .h6 .text, +.wxParse .b, +.wxParse .strong { + font-weight: bolder; +} + + +.wxParse .p { + margin: 1em 0; +} + +.wxParse .i, +.wxParse .cite, +.wxParse .em, +.wxParse .var, +.wxParse .address { + font-style: italic; +} + +.wxParse .pre, +.wxParse .tt, +.wxParse .code, +.wxParse .kbd, +.wxParse .samp { + font-family: monospace; +} +.wxParse .pre { + overflow: auto; + background: #f5f5f5; + padding: 16upx; + white-space: pre; + margin: 1em 0upx; +} +.wxParse .code { + display: inline; + background: #f5f5f5; +} + +.wxParse .big { + font-size: 1.17em; +} + +.wxParse .small, +.wxParse .sub, +.wxParse .sup { + font-size: 0.83em; +} + +.wxParse .sub { + vertical-align: sub; +} +.wxParse .sup { + vertical-align: super; +} + +.wxParse .s, +.wxParse .strike, +.wxParse .del { + text-decoration: line-through; +} + +.wxParse .strong, +.wxParse .s { + display: inline; +} + +.wxParse .a { + color: deepskyblue; +} + +.wxParse .video { + text-align: center; + margin: 22upx 0; +} + +.wxParse .video-video { + width: 100%; +} + +.wxParse .img { + display: inline-block; + width: 0; + height: 0; + max-width: 100%; + overflow: hidden; +} + +.wxParse .blockquote { + margin: 10upx 0; + padding: 22upx 0 22upx 22upx; + font-family: Courier, Calibri, "宋体"; + background: #f5f5f5; + border-left: 6upx solid #dbdbdb; +} +.wxParse .blockquote .p { + margin: 0; +} + +.wxParse .ul, .wxParse .ol { + display: block; + margin: 1em 0; + padding-left: 33upx; +} +.wxParse .ol { + list-style-type: disc; +} +.wxParse .ol { + list-style-type: decimal; +} +.wxParse .ol>weixin-parse-template,.wxParse .ul>weixin-parse-template { + display: list-item; + align-items: baseline; + text-align: match-parent; +} + +.wxParse .ol>.li,.wxParse .ul>.li { + display: list-item; + align-items: baseline; + text-align: match-parent; +} +.wxParse .ul .ul, .wxParse .ol .ul { + list-style-type: circle; +} +.wxParse .ol .ol .ul, .wxParse .ol .ul .ul, .wxParse .ul .ol .ul, .wxParse .ul .ul .ul { + list-style-type: square; +} + +.wxParse .u { + text-decoration: underline; +} +.wxParse .hide { + display: none; +} +.wxParse .del { + display: inline; +} +.wxParse .figure { + overflow: hidden; +} + +.wxParse .table { + width: 100%; +} +.wxParse .thead, .wxParse .tfoot, .wxParse .tr { + display: flex; + flex-direction: row; +} +.wxParse .tr { + width:100%; + display: flex; + border-right: 2upx solid #e0e0e0; + border-bottom: 2upx solid #e0e0e0; +} +.wxParse .th, +.wxParse .td { + display: flex; + width: 1276upx; + overflow: auto; + flex: 1; + padding: 11upx; + border-left: 2upx solid #e0e0e0; +} +.wxParse .td:last { + border-top: 2upx solid #e0e0e0; +} +.wxParse .th { + background: #f0f0f0; + border-top: 2upx solid #e0e0e0; +} diff --git a/components/zhihuai-DigitJump/uParse/src/wxParse.vue b/components/zhihuai-DigitJump/uParse/src/wxParse.vue new file mode 100644 index 0000000..824f533 --- /dev/null +++ b/components/zhihuai-DigitJump/uParse/src/wxParse.vue @@ -0,0 +1,122 @@ +<!--** + * forked from:https://github.com/F-loat/mpvue-wxParse + * + * github地址: https://github.com/dcloudio/uParse + * + * for: uni-app框架下 富文本解析 + */--> + +<template> +<!--基础元素--> +<div class="wxParse" :class="className" v-if="!loading"> + <block v-for="(node,index) of nodes" :key="index"> + <wxParseTemplate :node="node" /> + </block> +</div> +</template> + +<script> +import HtmlToJson from './libs/html2json'; +import wxParseTemplate from './components/wxParseTemplate0'; + +export default { + name: 'wxParse', + props: { + loading: { + type: Boolean, + default: false, + }, + className: { + type: String, + default: '', + }, + content: { + type: String, + default: '', + }, + noData: { + type: String, + default: '<div style="color: red;">数据不能为空</div>', + }, + startHandler: { + type: Function, + default() { + return (node) => { + node.attr.class = null; + node.attr.style = null; + }; + }, + }, + endHandler: { + type: Function, + default: null, + }, + charsHandler: { + type: Function, + default: null, + }, + imageProp: { + type: Object, + default() { + return { + mode: 'aspectFit', + padding: 0, + lazyLoad: false, + domain: '', + }; + }, + }, + }, + provide() { + return { + uparse: this + } + }, + components: { + wxParseTemplate, + }, + data() { + return { + imageUrls: [] + }; + }, + computed: { + nodes() { + const { + content, + noData, + imageProp, + startHandler, + endHandler, + charsHandler, + } = this; + const parseData = content || noData; + const customHandler = { + start: startHandler, + end: endHandler, + chars: charsHandler, + }; + const results = HtmlToJson(parseData, customHandler, imageProp, this); + this.imageUrls = results.imageUrls; + return results.nodes; + }, + }, + methods: { + navigate(href, $event) { + this.$emit('navigate', href, $event); + }, + preview(src, $event) { + if (!this.imageUrls.length) return; + wx.previewImage({ + current: src, + urls: this.imageUrls, + }); + this.$emit('preview', src, $event); + }, + removeImageUrl(src) { + const { imageUrls } = this; + imageUrls.splice(imageUrls.indexOf(src), 1); + }, + }, +}; +</script> diff --git a/components/zhihuai-DigitJump/zhihuai-DigitJump.vue b/components/zhihuai-DigitJump/zhihuai-DigitJump.vue new file mode 100644 index 0000000..e815b27 --- /dev/null +++ b/components/zhihuai-DigitJump/zhihuai-DigitJump.vue @@ -0,0 +1,113 @@ +<template> + <view :class="[textColor]">{{digit}}</view> +</template> + +<script> + export default { + data() { + return { + speed: 10, + digit: 0, + }; + }, + props: { + digitTo: { + type: Number, + default: 1000, + }, + digitFrom: { + type: Number, + default: 0, + }, + runTime: { + type: Number, + default: 1000, + }, + digitFiex: { + type: Number, + default: 0, + }, + digitDelay: { + type: Number, + default: 1000, + }, + modeType: { + type: String, + default: 'RANDOM' + },textColor:{ + type:String, + default:'zh_text_black' + } + }, + methods: { + start() { + let that = this; + that.digit = that.digitFrom + if (that.modeType == "RANDOM") { + var times = that.runTime / that.speed; + let i = 0; + let time = setInterval(function() { + + var addVal = 0; + if (times == 0) { + clearInterval(time); + } else if (times == 1) { + var dVal = (that.digitTo - that.digit) / times; + addVal = dVal; + } else { + var dVal = (that.digitTo - that.digit) / times; + addVal = parseFloat(Math.random() * dVal).toFixed(that.digitFiex); + } + + that.digit = (parseFloat(that.digit) + parseFloat(addVal)).toFixed(that.digitFiex); + times--; + }, that.speed) + } else if (that.modeType == "AVERAGE") { + var times = that.runTime / that.speed; + var dValue = (that.digitTo - that.digitFrom) / times; + let i = 0; + let time = setInterval(function() { + that.digit = parseFloat((that.digitFrom + dValue * i)).toFixed(that.digitFiex); + if (times == i) { + clearInterval(time); + } + i++; + }, that.speed) + } + + + } + }, + created() { + let that = this; + setTimeout(function() { + that.start(); + }, that.digitDelay); + }, + watch: { + digitTo(newVal, oldVal) { + this.digitFrom = oldVal; + this.start(); + } + } + } +</script> + +<style> + .zh_text_white{ + color: #FFFFFF; + } + + .zh_text_black{ + color: #000000; + } +</style> + +<!-- 属性 类型 默认 备注 +digitTo Number 1000 数字目标值 +digitFrom Number 0 数字起始值 +runTime Number 1000 总运行时间(单位毫秒),单次运行时间 10毫秒,如果需要改动则去插件代码中,修改speed值 +digitFiex Number 0 保留小数位数 +digitDelay Number 1000 首次执行延迟时间 +modeType String 'RANDOM' 执行方式;RANDOM,随机增长;AVERAGE,均速增长; +textColor String 'zh_text_black' 默认黑色,值为class名 --> \ No newline at end of file diff --git a/css/uni.css b/css/uni.css new file mode 100644 index 0000000..9d7059e --- /dev/null +++ b/css/uni.css @@ -0,0 +1,1873 @@ +.white-color { + color: #FFFFFF; +} + +.primary-color { + color: #2d8cf0; +} + +.light-primary-color { + color: #5cadff; +} + +.dark-primary-color { + color: #2b85e4; +} + +.info-color { + color: #2d8cf0; +} + + + +.success-color { + color: #19be6b; +} + +.warning-color { + color: #ff9900; +} + +.error-color { + color: #ed3f14; +} + +.title-color { + color: #1c2438; +} + +.content-color { + color: #495060; +} + +.sub-color { + color: #80848f; +} + +.disabled-color { + color: #bbbec4; +} + +.border-color { + color: #dddee1; +} + +.divider-color { + color: #e9eaec; +} + +.gray-color { + color: #666666; +} + +.pink-color { + color: #e7507b; +} + +.bg-gray-color { + background: #666666; +} + +.bg-color { + background: #EBEEF5; +} + +.bg-primary-color { + background: #2d8cf0; +} + +.bg-light-primary-color { + background: #5cadff; +} + +.bg-dark-primary-color { + background: #2b85e4; +} + +.bg-info-color { + background: #2d8cf0; +} + +.bg-success-color { + background: #19be6b; +} + +.bg-warning-color { + background: #ff9900; +} + +.bg-error-color { + background: #ed3f14; +} + +.bg-pink-color { + background: #e7507b; +} + +.bg-title-color { + background: #1c2438; +} + +.bg-content-color { + background: #495060; +} + +.bg-sub-color { + background: #80848f; +} + +.bg-disabled-color { + background: #bbbec4; +} + +.bg-border-color { + background: #dddee1; +} + +.bg-divider-color { + background: #e9eaec; +} + +.bg-white-color { + background: #FFFFFF; +} + +.bg-black-color { + background: #000; +} + +.full-height { + height: 100%; +} + +.full-width { + width: 100%; +} + +.align-center { + text-align: center; +} + +.align-left { + text-align: left; +} + +.align-right { + text-align: right; +} + +.float-left { + float: left; +} + +.float-right { + float: right; +} +.border-radius-50 { + border-radius: 50%; +} + +.text-overflow { + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box !important; + -webkit-line-clamp: 1; + /* 限制在一个块元素显示的文本的行数 */ + -webkit-box-orient: vertical; + /* 垂直排列 */ + word-break: break-all; + /* 内容自动换行 */ +} + +.text-overflow2 { + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box !important; + -webkit-line-clamp: 2; + /* 限制在一个块元素显示的文本的行数 */ + -webkit-box-orient: vertical; + /* 垂直排列 */ + word-break: break-all; + /* 内容自动换行 */ +} + +.uni-flex { + display: flex; + flex-direction: row; +} + +.uni-flex-item { + flex: 1; +} + +.uni-row { + flex-direction: row; +} + +.uni-column { + flex-direction: column; +} + +.uni-link { + color: #576B95; + font-size: 26upx; +} + +.uni-center { + text-align: center; +} + +.uni-inline-item { + display: flex; + flex-direction: row; + align-items: center; +} + +.uni-inline-item text { + margin-right: 20upx; +} + +.uni-inline-item text:last-child { + margin-right: 0upx; + margin-left: 20upx; +} + +/* page */ +.uni-page-head { + padding: 35upx; + text-align: center; +} + +.uni-page-head-title { + display: inline-block; + padding: 0 40upx; + font-size: 30upx; + height: 88upx; + line-height: 88upx; + color: #BEBEBE; + box-sizing: border-box; + border-bottom: 2upx solid #D8D8D8; +} + +.uni-page-body { + width: 100%; + flex-grow: 1; + overflow-x: hidden; +} + +.uni-padding-wrap { + width: 690upx; + padding: 0 30upx; +} + +.uni-word { + text-align: center; + padding: 200upx 100upx; +} + +.uni-title { + font-size: 30upx; + font-weight: 500; + padding: 20upx 0; + line-height: 1.5; +} + +.uni-text { + font-size: 28upx; +} + +.uni-title text { + font-size: 24upx; + color: #888; +} + +.uni-text-gray { + color: #ccc; +} + +.uni-text-small { + font-size: 24upx; +} + +.uni-common-mb { + margin-bottom: 30upx; +} + +.uni-common-pb { + padding-bottom: 30upx; +} + +.uni-common-pl { + padding-left: 30upx; +} + +.uni-common-mt { + margin-top: 30upx; +} + +/* 背景色 */ +.uni-bg-red { + background: #F76260; + color: #FFF; +} + +.uni-bg-green { + background: #09BB07; + color: #FFF; +} + +.uni-bg-blue { + background: #007AFF; + color: #FFF; +} + +/* 标题 */ +.uni-h1 { + font-size: 80upx; + font-weight: 700; +} + +.uni-h2 { + font-size: 60upx; + font-weight: 700; +} + +.uni-h3 { + font-size: 48upx; + font-weight: 700; +} + +.uni-h4 { + font-size: 36upx; + font-weight: 700; +} + +.uni-h5 { + font-size: 28upx; + color: #8f8f94; +} + +.uni-h6 { + font-size: 24upx; + color: #8f8f94; +} + +.uni-bold { + font-weight: bold; +} + +/* 文本溢出隐藏 */ +.uni-ellipsis { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +/* 竖向百分百按钮 */ +.uni-btn-v { + padding: 10upx 0; +} + +.uni-btn-v button { + margin: 20upx 0; +} + +/* 表单 */ +.uni-form-item { + display: flex; + width: 100%; + padding: 10upx 0; +} + +.uni-form-item .title { + padding: 10upx 25upx; +} + +.uni-label { + width: 210upx; + word-wrap: break-word; + word-break: break-all; + text-indent: 20upx; +} + +.uni-input { + height: 50upx; + padding: 15upx 25upx; + line-height: 50upx; + font-size: 28upx; + background: #FFF; + flex: 1; +} + +radio-group, +checkbox-group { + width: 100%; +} + +radio-group label, +checkbox-group label { + padding-right: 20upx; +} + +.uni-form-item .with-fun { + display: flex; + flex-wrap: nowrap; + background: #FFFFFF; +} + +.uni-form-item .with-fun .uni-icon { + width: 40px; + height: 80upx; + line-height: 80upx; + flex-shrink: 0; +} + +/* loadmore */ +.uni-loadmore { + height: 80upx; + line-height: 80upx; + text-align: center; + padding-bottom: 30upx; +} + +/*数字角标*/ +.uni-badge, +.uni-badge-default { + font-family: 'Helvetica Neue', Helvetica, sans-serif; + font-size: 12px; + line-height: 1; + display: inline-block; + padding: 3px 6px; + color: #333; + border-radius: 100px; + background-color: rgba(0, 0, 0, .15); +} + +.uni-badge.uni-badge-inverted { + padding: 0 5px 0 0; + color: #929292; + background-color: transparent +} + +.uni-badge-primary { + color: #fff; + background-color: #007aff +} + +.uni-badge-blue.uni-badge-inverted, +.uni-badge-primary.uni-badge-inverted { + color: #007aff; + background-color: transparent +} + +.uni-badge-green, +.uni-badge-success { + color: #fff; + background-color: #4cd964; +} + +.uni-badge-green.uni-badge-inverted, +.uni-badge-success.uni-badge-inverted { + color: #4cd964; + background-color: transparent +} + +.uni-badge-warning, +.uni-badge-yellow { + color: #fff; + background-color: #f0ad4e +} + +.uni-badge-warning.uni-badge-inverted, +.uni-badge-yellow.uni-badge-inverted { + color: #f0ad4e; + background-color: transparent +} + +.uni-badge-danger, +.uni-badge-red { + color: #fff; + background-color: #dd524d +} + +.uni-badge-danger.uni-badge-inverted, +.uni-badge-red.uni-badge-inverted { + color: #dd524d; + background-color: transparent +} + +.uni-badge-purple, +.uni-badge-royal { + color: #fff; + background-color: #8a6de9 +} + +.uni-badge-purple.uni-badge-inverted, +.uni-badge-royal.uni-badge-inverted { + color: #8a6de9; + background-color: transparent +} + +/*折叠面板 */ +.uni-collapse-content { + height: 0; + width: 100%; + overflow: hidden; +} + +.uni-collapse-content.uni-active { + height: auto; +} + +/*卡片视图 */ +.uni-card { + background: #fff; + border-radius: 8upx; + margin: 20upx 0; + position: relative; + box-shadow: 0 2upx 4upx rgba(0, 0, 0, .3); +} + +.uni-card-content { + font-size: 30upx; +} + +.uni-card-content.image-view { + width: 100%; + margin: 0; +} + +.uni-card-content-inner { + position: relative; + padding: 30upx; +} + +.uni-card-footer, +.uni-card-header { + position: relative; + display: flex; + min-height: 50upx; + padding: 20upx 30upx; + justify-content: space-between; + align-items: center; +} + +.uni-card-header { + font-size: 36upx; +} + +.uni-card-footer { + color: #6d6d72; +} + +.uni-card-footer:before, +.uni-card-header:after { + position: absolute; + top: 0; + right: 0; + left: 0; + height: 2upx; + content: ''; + -webkit-transform: scaleY(.5); + transform: scaleY(.5); + background-color: #c8c7cc; +} + +.uni-card-header:after { + top: auto; + bottom: 0; +} + +.uni-card-media { + justify-content: flex-start; +} + +.uni-card-media-logo { + height: 84upx; + width: 84upx; + margin-right: 20upx; +} + +.uni-card-media-body { + height: 84upx; + display: flex; + flex-direction: column; + justify-content: space-between; + align-items: flex-start; +} + +.uni-card-media-text-top { + line-height: 36upx; + font-size: 34upx; +} + +.uni-card-media-text-bottom { + line-height: 30upx; + font-size: 28upx; + color: #8f8f94; +} + +.uni-card-link { + color: #007AFF; +} + +/* 列表 */ +.uni-list { + background-color: #FFFFFF; + position: relative; + width: 100%; + display: flex; + flex-direction: column; +} + +.uni-list:after { + position: absolute; + z-index: 10; + right: 0; + bottom: 0; + left: 0; + height: 1px; + content: ''; + -webkit-transform: scaleY(.5); + transform: scaleY(.5); + background-color: #c8c7cc; +} + +.uni-list::before { + position: absolute; + z-index: 10; + right: 0; + top: 0; + left: 0; + height: 1px; + content: ''; + -webkit-transform: scaleY(.5); + transform: scaleY(.5); + background-color: #c8c7cc; +} + +.uni-list-cell { + position: relative; + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; +} + +.uni-list-cell-hover { + background-color: #eee; +} + +.uni-list-cell-pd { + padding: 22upx 30upx; +} + +.uni-list-cell-left { + font-size: 28upx; + padding: 0 30upx; +} + +.uni-list-cell-db, +.uni-list-cell-right { + flex: 1; +} + +.uni-list-cell::after { + position: absolute; + z-index: 3; + right: 0; + bottom: 0; + left: 30upx; + height: 1px; + content: ''; + -webkit-transform: scaleY(.5); + transform: scaleY(.5); + background-color: #c8c7cc; +} + +.uni-list .uni-list-cell:last-child::after { + height: 0upx; +} + +.uni-list-cell-last.uni-list-cell::after { + height: 0upx; +} + +.uni-list-cell-divider { + position: relative; + display: flex; + color: #999; + background-color: #f7f7f7; + padding: 15upx 20upx; +} + +.uni-list-cell-divider::before { + position: absolute; + right: 0; + top: 0; + left: 0; + height: 1px; + content: ''; + -webkit-transform: scaleY(.5); + transform: scaleY(.5); + background-color: #c8c7cc; +} + +.uni-list-cell-divider::after { + position: absolute; + right: 0; + bottom: 0; + left: 0upx; + height: 1px; + content: ''; + -webkit-transform: scaleY(.5); + transform: scaleY(.5); + background-color: #c8c7cc; +} + +.uni-list-cell-navigate { + font-size: 30upx; + padding: 22upx 30upx; + line-height: 48upx; + position: relative; + display: flex; + box-sizing: border-box; + width: 100%; + flex: 1; + justify-content: space-between; + align-items: center; +} + +.uni-list-cell-navigate { + padding-right: 36upx; +} + +.uni-navigate-badge { + padding-right: 50upx; +} + +.uni-list-cell-navigate.uni-navigate-right:after { + font-family: uniicons; + content: '\e583'; + position: absolute; + right: 24upx; + top: 50%; + color: #bbb; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); +} + +.uni-list-cell-navigate.uni-navigate-bottom:after { + font-family: uniicons; + content: '\e581'; + position: absolute; + right: 24upx; + top: 50%; + color: #bbb; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); +} + +.uni-list-cell-navigate.uni-navigate-bottom.uni-active::after { + font-family: uniicons; + content: '\e580'; + position: absolute; + right: 24upx; + top: 50%; + color: #bbb; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); +} + +.uni-collapse.uni-list-cell { + flex-direction: column; +} + +.uni-list-cell-navigate.uni-active { + background: #eee; +} + +.uni-list.uni-collapse { + box-sizing: border-box; + height: 0; + overflow: hidden; +} + +.uni-collapse .uni-list-cell { + padding-left: 20upx; +} + +.uni-collapse .uni-list-cell::after { + left: 52upx; +} + +.uni-list.uni-active { + height: auto; +} + +/* 三行列表 */ +.uni-triplex-row { + display: flex; + flex: 1; + width: 100%; + box-sizing: border-box; + flex-direction: row; + padding: 22upx 30upx; +} + +.uni-triplex-right, +.uni-triplex-left { + display: flex; + flex-direction: column; +} + +.uni-triplex-left { + width: 84%; +} + +.uni-triplex-left .uni-title { + padding: 8upx 0; +} + +.uni-triplex-left .uni-text, +.uni-triplex-left .uni-text-small { + color: #999999; +} + +.uni-triplex-right { + width: 16%; + text-align: right; +} + +/* 图文列表 */ +.uni-media-list { + padding: 22upx 30upx; + box-sizing: border-box; + display: flex; + width: 100%; + flex-direction: row; +} + +.uni-navigate-right.uni-media-list { + padding-right: 74upx; +} + +.uni-pull-right { + flex-direction: row-reverse; +} + +.uni-pull-right>.uni-media-list-logo { + margin-right: 0upx; + margin-left: 20upx; +} + +.uni-media-list-logo { + height: 84upx; + width: 84upx; + margin-right: 20upx; +} + +.uni-media-list-logo image { + height: 100%; + width: 100%; +} + +.uni-media-list-body { + height: 84upx; + display: flex; + flex: 1; + flex-direction: column; + justify-content: space-between; + align-items: flex-start; + overflow: hidden; +} + +.uni-media-list-text-top { + width: 100%; + line-height: 36upx; + font-size: 30upx; +} + +.uni-media-list-text-bottom { + width: 100%; + line-height: 30upx; + font-size: 26upx; + color: #8f8f94; +} + +/* 九宫格 */ +.uni-grid-9 { + background: #f2f2f2; + width: 750upx; + display: flex; + flex-direction: row; + flex-wrap: wrap; + border-top: 2upx solid #eee; +} + +.uni-grid-9-item { + width: 250upx; + height: 200upx; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + border-bottom: 2upx solid; + border-right: 2upx solid; + border-color: #eee; + box-sizing: border-box; +} + +.no-border-right { + border-right: none; +} + +.uni-grid-9-image { + width: 100upx; + height: 100upx; +} + +.uni-grid-9-text { + width: 250upx; + line-height: 4upx; + height: 40upx; + text-align: center; + font-size: 30upx; +} + +.uni-grid-9-item-hover { + background: rgba(0, 0, 0, 0.1); +} + +/* 上传 */ +.uni-uploader { + flex: 1; + flex-direction: column; +} + +.uni-uploader-head { + display: flex; + flex-direction: row; + justify-content: space-between; +} + +.uni-uploader-info { + color: #B2B2B2; +} + +.uni-uploader-body { + margin-top: 16upx; +} + +.uni-uploader__files { + display: flex; + flex-direction: row; + flex-wrap: wrap; +} + +.uni-uploader__file { + margin: 10upx; + width: 210upx; + height: 210upx; +} + +.uni-uploader__img { + display: block; + width: 210upx; + height: 210upx; +} + +.uni-uploader__input-box { + position: relative; + margin: 10upx; + width: 208upx; + height: 208upx; + border: 2upx solid #D9D9D9; +} + +.uni-uploader__input-box:before, +.uni-uploader__input-box:after { + content: " "; + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + background-color: #D9D9D9; +} + +.uni-uploader__input-box:before { + width: 4upx; + height: 79upx; +} + +.uni-uploader__input-box:after { + width: 79upx; + height: 4upx; +} + +.uni-uploader__input-box:active { + border-color: #999999; +} + +.uni-uploader__input-box:active:before, +.uni-uploader__input-box:active:after { + background-color: #999999; +} + +.uni-uploader__input { + position: absolute; + z-index: 1; + top: 0; + left: 0; + width: 100%; + height: 100%; + opacity: 0; +} + +/*问题反馈*/ +.feedback-title { + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + padding: 20upx; + color: #8f8f94; + font-size: 28upx; +} + +.feedback-star-view.feedback-title { + justify-content: flex-start; + margin: 0; +} + +.feedback-quick { + position: relative; + padding-right: 40upx; +} + +.feedback-quick:after { + font-family: uniicons; + font-size: 40upx; + content: '\e581'; + position: absolute; + right: 0; + top: 50%; + color: #bbb; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); +} + +.feedback-body { + background: #fff; +} + +.feedback-textare { + height: 200upx; + font-size: 34upx; + line-height: 50upx; + width: 100%; + box-sizing: border-box; + padding: 20upx 30upx 0; +} + +.feedback-input { + font-size: 34upx; + height: 50upx; + min-height: 50upx; + padding: 15upx 20upx; + line-height: 50upx; +} + +.feedback-uploader { + padding: 22upx 20upx; +} + +.feedback-star { + font-family: uniicons; + font-size: 40upx; + margin-left: 6upx; +} + +.feedback-star-view { + margin-left: 20upx; +} + +.feedback-star:after { + content: '\e408'; +} + +.feedback-star.active { + color: #FFB400; +} + +.feedback-star.active:after { + content: '\e438'; +} + +.feedback-submit { + background: #007AFF; + color: #FFFFFF; + margin: 20upx; +} + +/* input group */ +.uni-input-group { + position: relative; + padding: 0; + border: 0; + background-color: #fff; +} + +.uni-input-group:before { + position: absolute; + top: 0; + right: 0; + left: 0; + height: 2upx; + content: ''; + transform: scaleY(.5); + background-color: #c8c7cc; +} + +.uni-input-group:after { + position: absolute; + right: 0; + bottom: 0; + left: 0; + height: 2upx; + content: ''; + transform: scaleY(.5); + background-color: #c8c7cc; +} + +.uni-input-row { + position: relative; + display: flex; + flex-direction: row; + font-size: 28upx; + padding: 22upx 30upx; + justify-content: space-between; +} + +.uni-input-group .uni-input-row:after { + position: absolute; + right: 0; + bottom: 0; + left: 30upx; + height: 2upx; + content: ''; + transform: scaleY(.5); + background-color: #c8c7cc; +} + +.uni-input-row label { + line-height: 70upx; +} + +/* textarea */ +.uni-textarea { + width: 100%; + background: #FFF; +} + +.uni-textarea textarea { + width: 96%; + padding: 18upx 2%; + line-height: 1.6; + font-size: 28upx; + height: 150upx; +} + +/* tab bar */ +.uni-tab-bar { + display: flex; + flex: 1; + flex-direction: column; + overflow: hidden; + height: 100%; +} + +.uni-tab-bar .list { + width: 750upx; + height: 100%; +} + +.uni-swiper-tab { + width: 100%; + white-space: nowrap; + line-height: 100upx; + height: 100upx; + border-bottom: 1px solid #c8c7cc; +} + +.swiper-tab-list { + font-size: 30upx; + width: 150upx; + display: inline-block; + text-align: center; +} + +.uni-tab-bar .active { + color: #007AFF; +} + +.uni-tab-bar .swiper-box { + flex: 1; + width: 100%; + height: calc(100% - 100upx); +} + +.uni-tab-bar-loading { + padding: 20upx 0; +} + +/* comment */ +.uni-comment { + padding: 5upx 0; + display: flex; + flex-grow: 1; + flex-direction: column; +} + +.uni-comment-list { + flex-wrap: nowrap; + padding: 10upx 0; + margin: 10upx 0; + width: 100%; + display: flex; +} + +.uni-comment-face { + width: 70upx; + height: 70upx; + border-radius: 100%; + margin-right: 20upx; + flex-shrink: 0; + overflow: hidden; +} + +.uni-comment-face image { + width: 100%; + border-radius: 100%; +} + +.uni-comment-body { + width: 100%; +} + +.uni-comment-top { + line-height: 1.5em; + justify-content: space-between; +} + +.uni-comment-top text { + color: #0A98D5; + font-size: 24upx; +} + +.uni-comment-date { + line-height: 38upx; + flex-direction: row; + justify-content: space-between; + display: flex !important; + flex-grow: 1; +} + +.uni-comment-date view { + color: #666666; + font-size: 24upx; + line-height: 38upx; +} + +.uni-comment-content { + line-height: 1.6em; + font-size: 28upx; + padding: 8upx 0; +} + +.uni-comment-replay-btn { + background: #FFF; + font-size: 24upx; + line-height: 28upx; + padding: 5upx 20upx; + border-radius: 30upx; + color: #333 !important; + margin: 0 10upx; +} + +/* swiper msg */ +.uni-swiper-msg { + width: 100%; + padding: 12upx 0; + flex-wrap: nowrap; + display: flex; +} + +.uni-swiper-msg-icon { + width: 50upx; + margin-right: 20upx; +} + +.uni-swiper-msg-icon image { + width: 100%; + flex-shrink: 0; +} + +.uni-swiper-msg swiper { + width: 100%; + height: 50upx; +} + +.uni-swiper-msg swiper-item { + line-height: 50upx; +} + +/* product */ +.uni-product-list { + display: flex; + width: 100%; + flex-wrap: wrap; + flex-direction: row; +} + +.uni-product { + padding: 20upx; + display: flex; + flex-direction: column; +} + +.image-view { + height: 330upx; + width: 330upx; + margin: 12upx 0; +} + +.uni-product-image { + height: 330upx; + width: 330upx; +} + +.uni-product-title { + width: 300upx; + word-break: break-all; + display: -webkit-box; + overflow: hidden; + line-height: 1.5; + text-overflow: ellipsis; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; +} + +.uni-product-price { + margin-top: 10upx; + font-size: 28upx; + line-height: 1.5; + position: relative; +} + +.uni-product-price-original { + color: #e80080; +} + +.uni-product-price-favour { + color: #888888; + text-decoration: line-through; + margin-left: 10upx; +} + +.uni-product-tip { + position: absolute; + right: 10upx; + background-color: #ff3333; + color: #ffffff; + padding: 0 10upx; + border-radius: 5upx; +} + +/* timeline */ +.uni-timeline { + margin: 35upx 0; + display: flex; + flex-direction: column; + position: relative; +} + + +.uni-timeline-item { + display: flex; + flex-direction: row; + position: relative; + padding-bottom: 20upx; + box-sizing: border-box; + overflow: hidden; + +} + +.uni-timeline-item .uni-timeline-item-keynode { + width: 160upx; + flex-shrink: 0; + box-sizing: border-box; + padding-right: 20upx; + text-align: right; + line-height: 65upx; +} + +.uni-timeline-item .uni-timeline-item-divider { + flex-shrink: 0; + position: relative; + width: 30upx; + height: 30upx; + top: 15upx; + border-radius: 50%; + background-color: #bbb; +} + + + +.uni-timeline-item-divider::before, +.uni-timeline-item-divider::after { + position: absolute; + left: 15upx; + width: 1upx; + height: 100vh; + content: ''; + background: inherit; +} + +.uni-timeline-item-divider::before { + bottom: 100%; +} + +.uni-timeline-item-divider::after { + top: 100%; +} + + +.uni-timeline-last-item .uni-timeline-item-divider:after { + display: none; +} + +.uni-timeline-first-item .uni-timeline-item-divider:before { + display: none; +} + +.uni-timeline-item .uni-timeline-item-content { + padding-left: 20upx; +} + +.uni-timeline-last-item .bottom-border::after { + display: none; +} + +.uni-timeline-item-content .datetime { + color: #CCCCCC; +} + +/* 自定义节点颜色 */ +.uni-timeline-last-item .uni-timeline-item-divider { + background-color: #1AAD19; +} + + +/* uni-icon */ + +.uni-icon { + font-family: uniicons; + font-size: 24px; + font-weight: normal; + font-style: normal; + line-height: 1; + display: inline-block; + text-decoration: none; + -webkit-font-smoothing: antialiased; +} + +.uni-icon.uni-active { + color: #007aff; +} + +.uni-icon-contact:before { + content: '\e100'; +} + +.uni-icon-person:before { + content: '\e101'; +} + +.uni-icon-personadd:before { + content: '\e102'; +} + +.uni-icon-contact-filled:before { + content: '\e130'; +} + +.uni-icon-person-filled:before { + content: '\e131'; +} + +.uni-icon-personadd-filled:before { + content: '\e132'; +} + +.uni-icon-phone:before { + content: '\e200'; +} + +.uni-icon-email:before { + content: '\e201'; +} + +.uni-icon-chatbubble:before { + content: '\e202'; +} + +.uni-icon-chatboxes:before { + content: '\e203'; +} + +.uni-icon-phone-filled:before { + content: '\e230'; +} + +.uni-icon-email-filled:before { + content: '\e231'; +} + +.uni-icon-chatbubble-filled:before { + content: '\e232'; +} + +.uni-icon-chatboxes-filled:before { + content: '\e233'; +} + +.uni-icon-weibo:before { + content: '\e260'; +} + +.uni-icon-weixin:before { + content: '\e261'; +} + +.uni-icon-pengyouquan:before { + content: '\e262'; +} + +.uni-icon-chat:before { + content: '\e263'; +} + +.uni-icon-qq:before { + content: '\e264'; +} + +.uni-icon-videocam:before { + content: '\e300'; +} + +.uni-icon-camera:before { + content: '\e301'; +} + +.uni-icon-mic:before { + content: '\e302'; +} + +.uni-icon-location:before { + content: '\e303'; +} + +.uni-icon-mic-filled:before, +.uni-icon-speech:before { + content: '\e332'; +} + +.uni-icon-location-filled:before { + content: '\e333'; +} + +.uni-icon-micoff:before { + content: '\e360'; +} + +.uni-icon-image:before { + content: '\e363'; +} + +.uni-icon-map:before { + content: '\e364'; +} + +.uni-icon-compose:before { + content: '\e400'; +} + +.uni-icon-trash:before { + content: '\e401'; +} + +.uni-icon-upload:before { + content: '\e402'; +} + +.uni-icon-download:before { + content: '\e403'; +} + +.uni-icon-close:before { + content: '\e404'; +} + +.uni-icon-redo:before { + content: '\e405'; +} + +.uni-icon-undo:before { + content: '\e406'; +} + +.uni-icon-refresh:before { + content: '\e407'; +} + +.uni-icon-star:before { + content: '\e408'; +} + +.uni-icon-plus:before { + content: '\e409'; +} + +.uni-icon-minus:before { + content: '\e410'; +} + +.uni-icon-circle:before, +.uni-icon-checkbox:before { + content: '\e411'; +} + +.uni-icon-close-filled:before, +.uni-icon-clear:before { + content: '\e434'; +} + +.uni-icon-refresh-filled:before { + content: '\e437'; +} + +.uni-icon-star-filled:before { + content: '\e438'; +} + +.uni-icon-plus-filled:before { + content: '\e439'; +} + +.uni-icon-minus-filled:before { + content: '\e440'; +} + +.uni-icon-circle-filled:before { + content: '\e441'; +} + +.uni-icon-checkbox-filled:before { + content: '\e442'; +} + +.uni-icon-closeempty:before { + content: '\e460'; +} + +.uni-icon-refreshempty:before { + content: '\e461'; +} + +.uni-icon-reload:before { + content: '\e462'; +} + +.uni-icon-starhalf:before { + content: '\e463'; +} + +.uni-icon-spinner:before { + content: '\e464'; +} + +.uni-icon-spinner-cycle:before { + content: '\e465'; +} + +.uni-icon-search:before { + content: '\e466'; +} + +.uni-icon-plusempty:before { + content: '\e468'; +} + +.uni-icon-forward:before { + content: '\e470'; +} + +.uni-icon-back:before, +.uni-icon-left-nav:before { + content: '\e471'; +} + +.uni-icon-checkmarkempty:before { + content: '\e472'; +} + +.uni-icon-home:before { + content: '\e500'; +} + +.uni-icon-navigate:before { + content: '\e501'; +} + +.uni-icon-gear:before { + content: '\e502'; +} + +.uni-icon-paperplane:before { + content: '\e503'; +} + +.uni-icon-info:before { + content: '\e504'; +} + +.uni-icon-help:before { + content: '\e505'; +} + +.uni-icon-locked:before { + content: '\e506'; +} + +.uni-icon-more:before { + content: '\e507'; +} + +.uni-icon-flag:before { + content: '\e508'; +} + +.uni-icon-home-filled:before { + content: '\e530'; +} + +.uni-icon-gear-filled:before { + content: '\e532'; +} + +.uni-icon-info-filled:before { + content: '\e534'; +} + +.uni-icon-help-filled:before { + content: '\e535'; +} + +.uni-icon-more-filled:before { + content: '\e537'; +} + +.uni-icon-settings:before { + content: '\e560'; +} + +.uni-icon-list:before { + content: '\e562'; +} + +.uni-icon-bars:before { + content: '\e563'; +} + +.uni-icon-loop:before { + content: '\e565'; +} + +.uni-icon-paperclip:before { + content: '\e567'; +} + +.uni-icon-eye:before { + content: '\e568'; +} + +.uni-icon-arrowup:before { + content: '\e580'; +} + +.uni-icon-arrowdown:before { + content: '\e581'; +} + +.uni-icon-arrowleft:before { + content: '\e582'; +} + +.uni-icon-arrowright:before { + content: '\e583'; +} + +.uni-icon-arrowthinup:before { + content: '\e584'; +} + +.uni-icon-arrowthindown:before { + content: '\e585'; +} + +.uni-icon-arrowthinleft:before { + content: '\e586'; +} + +.uni-icon-arrowthinright:before { + content: '\e587'; +} + +.uni-icon-pulldown:before { + content: '\e588'; +} + +.uni-icon-scan:before { + content: "\e612"; +} + +/* 分界线 */ +.uni-divider { + height: 110upx; + display: flex; + align-items: center; + justify-content: center; + position: relative; +} + +.uni-divider__content { + font-size: 28upx; + color: #999; + padding: 0 20upx; + position: relative; + z-index: 101; + background: #F4F5F6; +} + +.uni-divider__line { + background-color: #CCCCCC; + height: 1px; + width: 100%; + position: absolute; + z-index: 100; + top: 50%; + left: 0; + transform: translateY(50%); +} diff --git a/js_sdk/u-charts/config.js b/js_sdk/u-charts/config.js new file mode 100644 index 0000000..0fe89ef --- /dev/null +++ b/js_sdk/u-charts/config.js @@ -0,0 +1,471 @@ +/* + * uCharts组件 默认配置文件,如有修改,更新前请备份此文件!! + * Copyright (c) 2021 QIUN秋云 https://www.ucharts.cn All rights reserved. + * Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) + * + * uCharts官方网站 + * https://www.uCharts.cn + * + * 开源地址: + * https://gitee.com/uCharts/uCharts + * + * uni-app插件市场地址: + * http://ext.dcloud.net.cn/plugin?id=271 + * + */ +module.exports = { + "type":["pie","ring","rose","word","funnel","map","arcbar","line","column","area","radar","gauge","candle","mix","point","bubble"], + "categories":["line","column","area","radar","gauge","candle","mix","point","bubble"], + //以上数据请勿改动,下面是自定义默认配置,请添加项目所需的个性配置 + "pie":{ + type: 'pie', + padding:[15,15,0,15], + legend:{ + show:true, + padding:5, + lineHeight:11, + margin:0, + }, + dataLabel: true, + extra: { + pie: { + border:true, + borderColor:'#FFFFFF', + borderWidth:3 + } + } + }, + "ring":{ + type: 'ring', + padding:[5,5,5,5], + legend:{ + show:true, + position:'right', + float:'center', + itemGap:10, + padding:5, + lineHeight:26, + margin:5, + borderWidth :1 + }, + disablePieStroke: true, + dataLabel: true, + subtitle: { + name: '70%', + color: '#7cb5ec', + fontSize: 25, + }, + title: { + name: '收益率', + color: '#666666', + fontSize: 15, + }, + extra: { + pie: { + offsetAngle: 0, + ringWidth: 40, + labelWidth:15 + } + } + }, + "rose":{ + type: 'rose', + padding:[15,15,0,15], + legend:{ + show:true, + position:'left', + float:'center', + itemGap:10, + padding:5, + lineHeight:26, + margin:5, + borderWidth :1 + }, + dataLabel: true, + extra: { + rose: { + type:'area', + minRadius:50, + activeOpacity:0.5, + offsetAngle:0, + labelWidth:15 + } + } + }, + "word":{ + type: 'word', + extra: { + word: { + type: 'normal' + } + } + }, + "funnel":{ + type: 'funnel', + padding:[15,15,0,15], + legend:{ + show:true, + padding:5, + lineHeight:11, + margin:0, + }, + dataLabel: true, + extra: { + funnel: { + border:true, + borderWidth:2, + borderColor:'#FFFFFF' + } + } + }, + "map":{ + type: 'map', + padding:[0,0,0,0], + legend:{ + show:false + }, + dataLabel:true, + extra: { + map: { + border:true, + borderWidth:1, + borderColor:'#666666', + fillOpacity:0.6 + } + } + }, + "arcbar":{ + type: 'arcbar', + legend:{show:false}, + dataLabel: true, + title: { + name: "百分比", + color: '#00FF00', + fontSize: 25 + }, + subtitle: { + name: "默认标题", + color: '#666666', + fontSize: 15 + }, + extra: { + arcbar:{ + type:'default', + width: 12, + } + } + }, + "line":{ + type: 'line', + padding:[15,30,0,15], + legend:{ + show:true, + padding:5, + lineHeight:11, + margin:0, + }, + dataLabel: true, + dataPointShape:true, + xAxis: { + disableGrid: true, + }, + yAxis: { + gridType: 'dash', + gridColor: '#CCCCCC', + dashLength: 8, + splitNumber: 4, + format: val => { + return val.toFixed(0); + } + }, + extra: { + line:{ + type: 'straight' + } + } + }, + "column":{ + type: 'column', + padding:[15,5,0,15], + legend:{ + show:true, + padding:5, + lineHeight:11, + margin:0, + }, + animation: true, + dataLabel: true, + xAxis: { + disableGrid:true, + }, + yAxis: { + data:[{ + position:'right', + axisLine:false, + format:(val)=>{return val.toFixed(0)}, + }] + }, + extra: { + column: { + type:'group', + width:30 + } + } + }, + "area":{ + type: 'area', + padding:[15,15,0,15], + legend:{ + show:true, + }, + dataLabel:true, + dataPointShape:true, + xAxis: { + disableGrid:true, + }, + yAxis: { + gridType:'dash', + gridColor:'#CCCCCC', + dashLength:8, + splitNumber:5, + }, + extra: { + area:{ + type: 'straight', + opacity:0.2, + addLine:true, + width:2, + gradient:false + } + } + }, + "radar":{ + type: 'radar', + padding:[15,15,0,15], + legend:{ + show:true, + padding:5, + lineHeight:11, + margin:0, + }, + animation: true, + dataLabel: true, + extra: { + radar: { + max: 200, + gridType:'radar'//radar或者circle可选,网格样式,默认radar + } + } + }, + "gauge":{ + type: 'gauge', + legend:{show:false}, + animation: true, + dataLabel: true, + title: { + name: "字符串类型", + color: '#00FF00', + fontSize: 25, + offsetY:50, + }, + subtitle: { + name: "字符串类型", + color: '#666666', + fontSize: 15, + offsetY:-50, + }, + extra: { + gauge:{ + type:'default', + width: 30, + startAngle:0.75, + endAngle:0.25, + startNumber:0, + endNumber:100, + splitLine:{ + fixRadius:0, + splitNumber:10, + width: 30, + color:'#FFFFFF', + childNumber:5, + childWidth:30*0.4, + }, + pointer:{ + width: 30*0.8, + color:'auto' + } + } + } + }, + "candle":{ + type: 'candle', + padding:[15,15,0,15], + legend:{ + show:true, + padding:5, + lineHeight:11, + margin:8, + }, + enableMarkLine: true, + enableScroll: true, + dataLabel: false, + dataPointShape: true, + xAxis: { + disableGrid:true, + labelCount:4, + itemCount:5, + scrollShow:true, + scrollAlign:'right', + }, + yAxis: { + gridType:'dash', + splitNumber:5, + format:(val)=>{return val.toFixed(0)} + }, + extra: { + candle:{ + color:{ + upLine:'#f04864', + upFill:'#f04864', + downLine:'#2fc25b', + downFill:'#2fc25b' + }, + average:{ + show:true, + name:['MA5','MA10','MA30'], + day:[5,10,20], + color:['#1890ff', '#2fc25b', '#facc14'] + } + }, + tooltip:{ + bgColor:'#000000', + bgOpacity:0.7, + gridType:'dash', + dashLength:5, + gridColor:'#1890ff', + fontColor:'#FFFFFF', + horizentalLine:true, + xAxisLabel:true, + yAxisLabel:true, + labelBgColor:'#DFE8FF', + labelBgOpacity:0.95, + labelAlign:'left', + labelFontColor:'#666666' + }, + markLine: { + type: 'dash', + dashLength: 5, + data: [{ + value:2150, + lineColor: '#f04864', + showLabel:true + },{ + value:2350, + lineColor: '#f04864', + showLabel:true + }] + } + } + }, + "mix":{ + type: 'mix', + padding:[15,15,0,15], + legend:{ + show:true, + position:'bottom', + float:'center', + padding:5, + lineHeight:11, + margin:6, + }, + dataLabel: true, + dataPointShape: true, + xAxis: { + disableGrid:true, + }, + yAxis: { + data:[{ + calibration:true, + position:'left', + title:'折线', + titleFontSize:12, + format:(val)=>{return val.toFixed(0)+'度'} + },{ + calibration:true, + position:'right', + min:0, + max:200, + title:'柱状图', + titleFontSize:12, + format:(val)=>{return val.toFixed(0)+'元'} + },{ + calibration:true, + position:'right', + min:0, + max:200, + title:'点', + titleFontSize:12 + }], + showTitle:true, + gridType:'dash', + dashLength:4, + splitNumber:5 + }, + extra: { + column:{ + width:20 + } + } + }, + "point":{ + type: 'point', + padding:[15,30,0,15], + legend:{ + show:true + }, + dataLabel: false, + dataPointShape:true, + xAxis: { + disableGrid: true, + labelCount: 4 + }, + yAxis: { + gridType: 'dash', + gridColor: '#CCCCCC', + dashLength: 8, + splitNumber: 4, + format: val => { + return val.toFixed(1); + } + }, + extra: { + point:{ + } + } + }, + "bubble":{ + type: 'bubble', + padding:[15,30,0,15], + legend:{ + show:true + }, + dataLabel: true, + xAxis: { + disableGrid: true, + labelCount: 4 + }, + yAxis: { + gridType: 'dash', + gridColor: '#CCCCCC', + dashLength: 8, + splitNumber: 4, + format: val => { + return val.toFixed(1); + } + }, + extra: { + bubble:{ + } + } + } +} \ No newline at end of file diff --git a/js_sdk/u-charts/demodata.json b/js_sdk/u-charts/demodata.json new file mode 100644 index 0000000..fb4e343 --- /dev/null +++ b/js_sdk/u-charts/demodata.json @@ -0,0 +1,267 @@ +{ + "Column": { + "categories": ["2016", "2017", "2018", "2019", "2020", "2021"], + "series": [{ + "name": "目标值", + "data": [35, 36, 31, 33, 13, 34] + }, { + "name": "完成量", + "data": [18, 27, 21, 24, 6, 28] + }] + }, + "ColumnA": { + "categories": ["2016", "2017", "2018", "2019", "2020", "2021"], + "series": [{ + "name": "成交量1", + "data": [15, { + "value": 20, + "color": "#f04864" + }, 45, 37, 43, 34] + }, { + "name": "成交量2", + "data": [30, { + "value": 40, + "color": "#facc14" + }, 25, 14, 34, 18] + }] + }, + "Mix": { + "categories": ["2016", "2017", "2018", "2019", "2020", "2021"], + "series": [{ + "name": "曲面", + "data": [70, 50, 85, 130, 64, 88], + "type": "area", + "style": "curve" + }, { + "name": "柱1", + "data": [40, 30, 55, 110, 24, 58], + "type": "column" + }, { + "name": "柱2", + "data": [50, 20, 75, 60, 34, 38], + "type": "column" + }, { + "name": "曲线", + "data": [70, 50, 85, 130, 64, 88], + "type": "line", + "style": "curve", + "color": "#1890ff", + "disableLegend": true + }, { + "name": "折线", + "data": [120, 140, 105, 170, 95, 160], + "type": "line", + "color": "#2fc25b" + }, { + "name": "点", + "data": [100, 80, 125, 150, 112, 132], + "type": "point", + "color": "#f04864" + }] + }, + "Line": { + "categories": ["2016", "2017", "2018", "2019", "2020", "2021"], + "series": [{ + "name": "成交量A", + "data": [35, 8, 25, 37, 4, 20] + }, { + "name": "成交量B", + "data": [70, 40, 65, 100, 44, 68] + }, { + "name": "成交量C", + "data": [100, 80, 95, 150, 112, 132] + }] + }, + "Pie": { + "series": [{ + "name": "一班", + "data": 50 + }, { + "name": "二班", + "data": 30 + }, { + "name": "三班", + "data": 20 + }, { + "name": "四班", + "data": 18 + }, { + "name": "五班", + "data": 8 + }] + }, + "Radar": { + "categories": ["维度1", "维度2", "维度3", "维度4", "维度5", "维度6"], + "series": [{ + "name": "成交量1", + "data": [90, 110, 165, 195, 187, 172] + }, { + "name": "成交量2", + "data": [190, 210, 105, 35, 27, 102] + }] + }, + "Arcbar": { + "series": [{ + "name": "正确率", + "data": 0.29, + "color": "#2fc25b" + }] + }, + "Gauge": { + "categories": [{ + "value": 0.2, + "color": "#1890ff" + }, { + "value": 0.8, + "color": "#2fc25b" + }, { + "value": 1, + "color": "#f04864" + }], + "series": [{ + "name": "完成率", + "data": 0.66 + }] + }, + "Candle": { + "categories": [ + "2020/1/24", "2020/1/25", "2020/1/28", "2020/1/29", "2020/1/30", + "2020/1/31", "2020/2/1", "2020/2/4", "2020/2/5", "2020/2/6", + "2020/2/7", "2020/2/8", "2020/2/18", "2020/2/19", "2020/2/20", + "2020/2/21", "2020/2/22", "2020/2/25", "2020/2/26", "2020/2/27", + "2020/2/28", "2020/3/1", "2020/3/4", "2020/3/5", "2020/3/6", + "2020/3/7", "2020/3/8", "2020/3/11", "2020/3/12", "2020/3/13", + "2020/3/14", "2020/3/15", "2020/3/18", "2020/3/19", "2020/3/20", + "2020/3/21", "2020/3/22", "2020/3/25", "2020/3/26", "2020/3/27", + "2020/3/28", "2020/3/29", "2020/4/1", "2020/4/2", "2020/4/3", + "2020/4/8", "2020/4/9", "2020/4/10", "2020/4/11", "2020/4/12", + "2020/4/15", "2020/4/16", "2020/4/17", "2020/4/18", "2020/4/19", + "2020/4/22", "2020/4/23", "2020/4/24", "2020/4/25", "2020/4/26", + "2020/5/2", "2020/5/3", "2020/5/6", "2020/5/7", "2020/5/8", + "2020/5/9", "2020/5/10", "2020/5/13", "2020/5/14", "2020/5/15", + "2020/5/16", "2020/5/17", "2020/5/20", "2020/5/21", "2020/5/22", + "2020/5/23", "2020/5/24", "2020/5/27", "2020/5/28", "2020/5/29", + "2020/5/30", "2020/5/31", "2020/6/3", "2020/6/4", "2020/6/5", + "2020/6/6", "2020/6/7", "2020/6/13" + ], + "series": [{ + "name": "上证指数", + "data": [ + [2320.26, 2302.6, 2287.3, 2362.94], + [2300, 2291.3, 2288.26, 2308.38], + [2295.35, 2346.5, 2295.35, 2346.92], + [2347.22, 2358.98, 2337.35, 2363.8], + [2360.75, 2382.48, 2347.89, 2383.76], + [2383.43, 2385.42, 2371.23, 2391.82], + [2377.41, 2419.02, 2369.57, 2421.15], + [2425.92, 2428.15, 2417.58, 2440.38], + [2411, 2433.13, 2403.3, 2437.42], + [2432.68, 2434.48, 2427.7, 2441.73], + [2430.69, 2418.53, 2394.22, 2433.89], + [2416.62, 2432.4, 2414.4, 2443.03], + [2441.91, 2421.56, 2415.43, 2444.8], + [2420.26, 2382.91, 2373.53, 2427.07], + [2383.49, 2397.18, 2370.61, 2397.94], + [2378.82, 2325.95, 2309.17, 2378.82], + [2322.94, 2314.16, 2308.76, 2330.88], + [2320.62, 2325.82, 2315.01, 2338.78], + [2313.74, 2293.34, 2289.89, 2340.71], + [2297.77, 2313.22, 2292.03, 2324.63], + [2322.32, 2365.59, 2308.92, 2366.16], + [2364.54, 2359.51, 2330.86, 2369.65], + [2332.08, 2273.4, 2259.25, 2333.54], + [2274.81, 2326.31, 2270.1, 2328.14], + [2333.61, 2347.18, 2321.6, 2351.44], + [2340.44, 2324.29, 2304.27, 2352.02], + [2326.42, 2318.61, 2314.59, 2333.67], + [2314.68, 2310.59, 2296.58, 2320.96], + [2309.16, 2286.6, 2264.83, 2333.29], + [2282.17, 2263.97, 2253.25, 2286.33], + [2255.77, 2270.28, 2253.31, 2276.22], + [2269.31, 2278.4, 2250, 2312.08], + [2267.29, 2240.02, 2239.21, 2276.05], + [2244.26, 2257.43, 2232.02, 2261.31], + [2257.74, 2317.37, 2257.42, 2317.86], + [2318.21, 2324.24, 2311.6, 2330.81], + [2321.4, 2328.28, 2314.97, 2332], + [2334.74, 2326.72, 2319.91, 2344.89], + [2318.58, 2297.67, 2281.12, 2319.99], + [2299.38, 2301.26, 2289, 2323.48], + [2273.55, 2236.3, 2232.91, 2273.55], + [2238.49, 2236.62, 2228.81, 2246.87], + [2229.46, 2234.4, 2227.31, 2243.95], + [2234.9, 2227.74, 2220.44, 2253.42], + [2232.69, 2225.29, 2217.25, 2241.34], + [2196.24, 2211.59, 2180.67, 2212.59], + [2215.47, 2225.77, 2215.47, 2234.73], + [2224.93, 2226.13, 2212.56, 2233.04], + [2236.98, 2219.55, 2217.26, 2242.48], + [2218.09, 2206.78, 2204.44, 2226.26], + [2199.91, 2181.94, 2177.39, 2204.99], + [2169.63, 2194.85, 2165.78, 2196.43], + [2195.03, 2193.8, 2178.47, 2197.51], + [2181.82, 2197.6, 2175.44, 2206.03], + [2201.12, 2244.64, 2200.58, 2250.11], + [2236.4, 2242.17, 2232.26, 2245.12], + [2242.62, 2184.54, 2182.81, 2242.62], + [2187.35, 2218.32, 2184.11, 2226.12], + [2213.19, 2199.31, 2191.85, 2224.63], + [2203.89, 2177.91, 2173.86, 2210.58], + [2170.78, 2174.12, 2161.14, 2179.65], + [2179.05, 2205.5, 2179.05, 2222.81], + [2212.5, 2231.17, 2212.5, 2236.07], + [2227.86, 2235.57, 2219.44, 2240.26], + [2242.39, 2246.3, 2235.42, 2255.21], + [2246.96, 2232.97, 2221.38, 2247.86], + [2228.82, 2246.83, 2225.81, 2247.67], + [2247.68, 2241.92, 2231.36, 2250.85], + [2238.9, 2217.01, 2205.87, 2239.93], + [2217.09, 2224.8, 2213.58, 2225.19], + [2221.34, 2251.81, 2210.77, 2252.87], + [2249.81, 2282.87, 2248.41, 2288.09], + [2286.33, 2299.99, 2281.9, 2309.39], + [2297.11, 2305.11, 2290.12, 2305.3], + [2303.75, 2302.4, 2292.43, 2314.18], + [2293.81, 2275.67, 2274.1, 2304.95], + [2281.45, 2288.53, 2270.25, 2292.59], + [2286.66, 2293.08, 2283.94, 2301.7], + [2293.4, 2321.32, 2281.47, 2322.1], + [2323.54, 2324.02, 2321.17, 2334.33], + [2316.25, 2317.75, 2310.49, 2325.72], + [2320.74, 2300.59, 2299.37, 2325.53], + [2300.21, 2299.25, 2294.11, 2313.43], + [2297.1, 2272.42, 2264.76, 2297.1], + [2270.71, 2270.93, 2260.87, 2276.86], + [2264.43, 2242.11, 2240.07, 2266.69], + [2242.26, 2210.9, 2205.07, 2250.63], + [2190.1, 2148.35, 2126.22, 2190.1] + ] + }] + }, + "CandleColumn": { + "categories": [ + "2020/1/24", "2020/1/25", "2020/1/28", "2020/1/29", "2020/1/30", + "2020/1/31", "2020/2/1", "2020/2/4", "2020/2/5", "2020/2/6", + "2020/2/7", "2020/2/8", "2020/2/18", "2020/2/19", "2020/2/20", + "2020/2/21", "2020/2/22", "2020/2/25", "2020/2/26", "2020/2/27", + "2020/2/28", "2020/3/1", "2020/3/4", "2020/3/5", "2020/3/6", + "2020/3/7", "2020/3/8", "2020/3/11", "2020/3/12", "2020/3/13", + "2020/3/14", "2020/3/15", "2020/3/18", "2020/3/19", "2020/3/20", + "2020/3/21", "2020/3/22", "2020/3/25", "2020/3/26", "2020/3/27", + "2020/3/28", "2020/3/29", "2020/4/1", "2020/4/2", "2020/4/3", + "2020/4/8", "2020/4/9", "2020/4/10", "2020/4/11", "2020/4/12", + "2020/4/15", "2020/4/16", "2020/4/17", "2020/4/18", "2020/4/19", + "2020/4/22", "2020/4/23", "2020/4/24", "2020/4/25", "2020/4/26", + "2020/5/2", "2020/5/3", "2020/5/6", "2020/5/7", "2020/5/8", + "2020/5/9", "2020/5/10", "2020/5/13", "2020/5/14", "2020/5/15", + "2020/5/16", "2020/5/17", "2020/5/20", "2020/5/21", "2020/5/22", + "2020/5/23", "2020/5/24", "2020/5/27", "2020/5/28", "2020/5/29", + "2020/5/30", "2020/5/31", "2020/6/3", "2020/6/4", "2020/6/5", + "2020/6/6", "2020/6/7", "2020/6/13" + ], + "series": [{ + "name": "成交量1", + "data": [15, 20, 45, 37, 43, 15, 20, 45, 37, 43, 15, 20, 45, 37, 43, 15, 20, 45, 37, 43, 15, 20, 45, 37, 43, 15, 20, 45, 37, 43, 15, 20, 45, 37, 43, 15, 20, 45, 37, 43, 15, 20, 45, 37, 43, 15, 20, 45, 37, 43, 15, 20, 45, 37, 43, 15, 20, 45, 37, 43, 15, 20, 45, 37, 43, 15, 20, 45, 37, 43, 15, 20, 45, 37, 43, 15, 20, 45, 37, 43, 15, 20, 45, 37, 43, 15, 20, 45] + }] + } +} diff --git a/js_sdk/u-charts/mapdata.json b/js_sdk/u-charts/mapdata.json new file mode 100644 index 0000000..4aa4573 --- /dev/null +++ b/js_sdk/u-charts/mapdata.json @@ -0,0 +1,41 @@ +{ +"type": "FeatureCollection", +"name": "100000_full", +"features": [ +{ "type": "Feature", "properties": { "adcode": "110000", "name": "北京市", "center": [ 116.405285, 39.904989 ], "centroid": [ 116.41995, 40.18994 ], "childrenNum": 16, "level": "province", "parent": { "adcode": 100000 }, "subFeatureIndex": 0, "acroutes": [ 100000 ] }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 117.348611, 40.581141 ], [ 117.348611, 40.581141 ], [ 117.269771, 40.560684 ], [ 117.247597, 40.539766 ], [ 117.262995, 40.512927 ], [ 117.208793, 40.501552 ], [ 117.263611, 40.442367 ], [ 117.234046, 40.417312 ], [ 117.226039, 40.368997 ], [ 117.243285, 40.369453 ], [ 117.271618, 40.325211 ], [ 117.271618, 40.325211 ], [ 117.295024, 40.2782 ], [ 117.331365, 40.289613 ], [ 117.351075, 40.229786 ], [ 117.389879, 40.227958 ], [ 117.383719, 40.188195 ], [ 117.367089, 40.172649 ], [ 117.367089, 40.173106 ], [ 117.367089, 40.173106 ], [ 117.367089, 40.172649 ], [ 117.349227, 40.136513 ], [ 117.307343, 40.136971 ], [ 117.274082, 40.105852 ], [ 117.254988, 40.114548 ], [ 117.254988, 40.114548 ], [ 117.254988, 40.114548 ], [ 117.224191, 40.094865 ], [ 117.224191, 40.094865 ], [ 117.210024, 40.082045 ], [ 117.204481, 40.069681 ], [ 117.159517, 40.077008 ], [ 117.140423, 40.064185 ], [ 117.105315, 40.074261 ], [ 117.105315, 40.074261 ], [ 117.051728, 40.059605 ], [ 117.025243, 40.030283 ], [ 116.945171, 40.04128 ], [ 116.927924, 40.055024 ], [ 116.867562, 40.041739 ], [ 116.831222, 40.051359 ], [ 116.820135, 40.02845 ], [ 116.781331, 40.034866 ], [ 116.757925, 39.967934 ], [ 116.782563, 39.947749 ], [ 116.78441, 39.891294 ], [ 116.812128, 39.889916 ], [ 116.865714, 39.843982 ], [ 116.907598, 39.832494 ], [ 116.918069, 39.84628 ], [ 116.949482, 39.778703 ], [ 116.902055, 39.763523 ], [ 116.916837, 39.731314 ], [ 116.887272, 39.72533 ], [ 116.889736, 39.687576 ], [ 116.90575, 39.688037 ], [ 116.906366, 39.677444 ], [ 116.8497, 39.66777 ], [ 116.812128, 39.615695 ], [ 116.79057, 39.595868 ], [ 116.748686, 39.619844 ], [ 116.709266, 39.618 ], [ 116.726512, 39.595407 ], [ 116.726512, 39.595407 ], [ 116.724048, 39.59264 ], [ 116.723432, 39.59264 ], [ 116.724048, 39.59264 ], [ 116.723432, 39.59264 ], [ 116.664918, 39.605552 ], [ 116.620571, 39.601863 ], [ 116.592237, 39.621227 ], [ 116.592237, 39.621227 ], [ 116.524484, 39.596329 ], [ 116.50847, 39.551122 ], [ 116.473361, 39.552968 ], [ 116.478289, 39.535431 ], [ 116.437637, 39.526661 ], [ 116.443796, 39.510041 ], [ 116.401912, 39.528046 ], [ 116.411767, 39.482794 ], [ 116.444412, 39.482332 ], [ 116.454883, 39.453226 ], [ 116.434557, 39.442597 ], [ 116.361876, 39.455074 ], [ 116.361876, 39.455074 ], [ 116.337854, 39.455536 ], [ 116.307057, 39.488337 ], [ 116.257782, 39.500344 ], [ 116.240536, 39.564041 ], [ 116.198652, 39.589412 ], [ 116.151841, 39.583416 ], [ 116.130283, 39.567732 ], [ 116.09887, 39.575113 ], [ 116.036044, 39.571884 ], [ 116.026189, 39.587567 ], [ 115.995392, 39.576958 ], [ 115.978146, 39.595868 ], [ 115.957204, 39.560812 ], [ 115.910393, 39.600479 ], [ 115.910393, 39.600479 ], [ 115.91532, 39.582955 ], [ 115.91532, 39.582955 ], [ 115.867893, 39.546507 ], [ 115.867893, 39.546507 ], [ 115.828473, 39.541431 ], [ 115.821081, 39.522968 ], [ 115.821081, 39.522968 ], [ 115.806299, 39.510041 ], [ 115.806299, 39.510041 ], [ 115.752712, 39.515581 ], [ 115.738545, 39.539585 ], [ 115.738545, 39.540046 ], [ 115.738545, 39.539585 ], [ 115.738545, 39.540046 ], [ 115.724995, 39.5442 ], [ 115.724995, 39.5442 ], [ 115.722531, 39.543738 ], [ 115.721299, 39.543738 ], [ 115.722531, 39.543738 ], [ 115.722531, 39.5442 ], [ 115.721299, 39.543738 ], [ 115.722531, 39.5442 ], [ 115.720683, 39.551122 ], [ 115.720683, 39.551122 ], [ 115.718835, 39.553891 ], [ 115.718835, 39.553891 ], [ 115.716988, 39.56035 ], [ 115.716988, 39.56035 ], [ 115.699125, 39.570039 ], [ 115.699125, 39.570039 ], [ 115.698509, 39.577881 ], [ 115.698509, 39.577881 ], [ 115.667712, 39.615234 ], [ 115.633836, 39.599557 ], [ 115.633836, 39.599557 ], [ 115.587024, 39.589873 ], [ 115.545756, 39.618922 ], [ 115.518039, 39.597252 ], [ 115.522351, 39.640124 ], [ 115.478619, 39.650723 ], [ 115.478619, 39.650723 ], [ 115.491554, 39.670074 ], [ 115.486626, 39.741899 ], [ 115.439815, 39.752022 ], [ 115.443511, 39.785601 ], [ 115.483547, 39.798477 ], [ 115.483547, 39.798477 ], [ 115.50572, 39.784222 ], [ 115.552532, 39.794799 ], [ 115.567314, 39.816407 ], [ 115.514344, 39.837549 ], [ 115.526046, 39.87568 ], [ 115.515575, 39.892212 ], [ 115.515575, 39.892212 ], [ 115.522967, 39.899099 ], [ 115.481083, 39.935819 ], [ 115.426264, 39.950502 ], [ 115.428728, 39.984443 ], [ 115.450286, 39.992697 ], [ 115.454597, 40.029825 ], [ 115.485394, 40.040364 ], [ 115.527278, 40.076092 ], [ 115.59072, 40.096239 ], [ 115.599959, 40.119583 ], [ 115.75456, 40.145663 ], [ 115.75456, 40.145663 ], [ 115.773654, 40.176307 ], [ 115.806299, 40.15344 ], [ 115.847567, 40.147036 ], [ 115.855574, 40.188652 ], [ 115.870356, 40.185909 ], [ 115.89869, 40.234354 ], [ 115.968907, 40.264045 ], [ 115.95166, 40.281852 ], [ 115.917784, 40.354405 ], [ 115.864197, 40.359422 ], [ 115.771806, 40.443734 ], [ 115.781045, 40.49336 ], [ 115.736082, 40.503372 ], [ 115.755176, 40.540221 ], [ 115.784741, 40.55841 ], [ 115.819849, 40.55932 ], [ 115.827857, 40.587504 ], [ 115.885139, 40.595229 ], [ 115.907929, 40.617493 ], [ 115.971986, 40.6025 ], [ 115.982457, 40.578868 ], [ 116.005247, 40.583868 ], [ 116.09887, 40.630665 ], [ 116.133979, 40.666536 ], [ 116.162928, 40.662451 ], [ 116.171551, 40.695582 ], [ 116.204812, 40.740035 ], [ 116.22021, 40.744115 ], [ 116.247311, 40.791707 ], [ 116.273181, 40.762703 ], [ 116.311369, 40.754996 ], [ 116.316912, 40.772221 ], [ 116.453651, 40.765876 ], [ 116.46597, 40.774487 ], [ 116.438253, 40.81934 ], [ 116.334159, 40.90443 ], [ 116.339702, 40.929303 ], [ 116.370499, 40.94377 ], [ 116.398216, 40.90624 ], [ 116.477057, 40.899907 ], [ 116.447492, 40.953715 ], [ 116.455499, 40.980828 ], [ 116.519557, 40.98128 ], [ 116.519557, 40.98128 ], [ 116.5676, 40.992574 ], [ 116.598397, 40.974503 ], [ 116.623034, 41.021026 ], [ 116.615643, 41.053076 ], [ 116.647672, 41.059394 ], [ 116.688324, 41.044501 ], [ 116.698795, 41.021477 ], [ 116.677853, 40.970888 ], [ 116.722201, 40.927495 ], [ 116.713577, 40.909858 ], [ 116.759773, 40.889954 ], [ 116.81336, 40.848319 ], [ 116.848468, 40.839264 ], [ 116.924229, 40.773581 ], [ 116.926692, 40.745022 ], [ 116.964881, 40.709647 ], [ 117.012308, 40.693767 ], [ 117.11209, 40.707379 ], [ 117.117018, 40.70012 ], [ 117.208177, 40.694675 ], [ 117.278394, 40.664267 ], [ 117.319662, 40.657911 ], [ 117.342451, 40.673799 ], [ 117.408973, 40.686961 ], [ 117.493973, 40.675161 ], [ 117.514914, 40.660181 ], [ 117.501364, 40.636569 ], [ 117.467487, 40.649738 ], [ 117.467487, 40.649738 ], [ 117.412669, 40.605226 ], [ 117.429915, 40.576141 ], [ 117.389879, 40.561593 ], [ 117.348611, 40.581141 ] ] ] ] } }, +{ "type": "Feature", "properties": { "adcode": "120000", "name": "天津市", "center": [ 117.190182, 39.125596 ], "centroid": [ 117.347019, 39.28803 ], "childrenNum": 16, "level": "province", "parent": { "adcode": 100000 }, "subFeatureIndex": 1, "acroutes": [ 100000 ] }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 117.765602, 39.400527 ], [ 117.699696, 39.407463 ], [ 117.673211, 39.386652 ], [ 117.668899, 39.412087 ], [ 117.614081, 39.407001 ], [ 117.601146, 39.419485 ], [ 117.570965, 39.404689 ], [ 117.521074, 39.357043 ], [ 117.536472, 39.338068 ], [ 117.594987, 39.349176 ], [ 117.669515, 39.322792 ], [ 117.670747, 39.35658 ], [ 117.74466, 39.354729 ], [ 117.784696, 39.376938 ], [ 117.805022, 39.373237 ], [ 117.810565, 39.354729 ], [ 117.850601, 39.363984 ], [ 117.850601, 39.363984 ], [ 117.854297, 39.328348 ], [ 117.854913, 39.328348 ], [ 117.854297, 39.328348 ], [ 117.854913, 39.328348 ], [ 117.88879, 39.332051 ], [ 117.919587, 39.318162 ], [ 117.919587, 39.318162 ], [ 117.965782, 39.314921 ], [ 117.965782, 39.314921 ], [ 117.973173, 39.312143 ], [ 117.973173, 39.312143 ], [ 117.979333, 39.300566 ], [ 117.979333, 39.300566 ], [ 117.982412, 39.298714 ], [ 117.982412, 39.298714 ], [ 118.024296, 39.289451 ], [ 118.024296, 39.289451 ], [ 118.036615, 39.264898 ], [ 118.064948, 39.256094 ], [ 118.064948, 39.231065 ], [ 118.037231, 39.220402 ], [ 117.977485, 39.206028 ], [ 117.96455, 39.172631 ], [ 117.871543, 39.122506 ], [ 117.837667, 39.057011 ], [ 117.855529, 38.957492 ], [ 117.898029, 38.948649 ], [ 117.875855, 38.920252 ], [ 117.847522, 38.855502 ], [ 117.778536, 38.869016 ], [ 117.752051, 38.847579 ], [ 117.64611, 38.828933 ], [ 117.646725, 38.788827 ], [ 117.671363, 38.772032 ], [ 117.740964, 38.753833 ], [ 117.740964, 38.700141 ], [ 117.729261, 38.680055 ], [ 117.65658, 38.66043 ], [ 117.639334, 38.626776 ], [ 117.55803, 38.613683 ], [ 117.47919, 38.616489 ], [ 117.432379, 38.601524 ], [ 117.368937, 38.564566 ], [ 117.25314, 38.556143 ], [ 117.238358, 38.580943 ], [ 117.258684, 38.608072 ], [ 117.258684, 38.608072 ], [ 117.213104, 38.639866 ], [ 117.213104, 38.639866 ], [ 117.183539, 38.61836 ], [ 117.183539, 38.61836 ], [ 117.150894, 38.617892 ], [ 117.109626, 38.584685 ], [ 117.070822, 38.608072 ], [ 117.055424, 38.639398 ], [ 117.068358, 38.680522 ], [ 117.038793, 38.688464 ], [ 116.95133, 38.689398 ], [ 116.948866, 38.689398 ], [ 116.950714, 38.689398 ], [ 116.95133, 38.689398 ], [ 116.950714, 38.689398 ], [ 116.948866, 38.689398 ], [ 116.877417, 38.680522 ], [ 116.858939, 38.741231 ], [ 116.794265, 38.744498 ], [ 116.794265, 38.744498 ], [ 116.746222, 38.754299 ], [ 116.737599, 38.784629 ], [ 116.75115, 38.831264 ], [ 116.723432, 38.852706 ], [ 116.722201, 38.896968 ], [ 116.708034, 38.931892 ], [ 116.72836, 38.975174 ], [ 116.754845, 39.003084 ], [ 116.754229, 39.034701 ], [ 116.754229, 39.034701 ], [ 116.783179, 39.05097 ], [ 116.783179, 39.05097 ], [ 116.812744, 39.05097 ], [ 116.812744, 39.05097 ], [ 116.871874, 39.054688 ], [ 116.912526, 39.110898 ], [ 116.91191, 39.111362 ], [ 116.91191, 39.111362 ], [ 116.912526, 39.110898 ], [ 116.909446, 39.150822 ], [ 116.870026, 39.153607 ], [ 116.855859, 39.215766 ], [ 116.881729, 39.225966 ], [ 116.881729, 39.225966 ], [ 116.87249, 39.291304 ], [ 116.889736, 39.338068 ], [ 116.870642, 39.357506 ], [ 116.829374, 39.338994 ], [ 116.818287, 39.3737 ], [ 116.840461, 39.378326 ], [ 116.839845, 39.413474 ], [ 116.876185, 39.43474 ], [ 116.832454, 39.435664 ], [ 116.785026, 39.465702 ], [ 116.820751, 39.482332 ], [ 116.819519, 39.528507 ], [ 116.78749, 39.554352 ], [ 116.808432, 39.576497 ], [ 116.812128, 39.615695 ], [ 116.8497, 39.66777 ], [ 116.906366, 39.677444 ], [ 116.90575, 39.688037 ], [ 116.932236, 39.706456 ], [ 116.932236, 39.706456 ], [ 116.944555, 39.695405 ], [ 116.944555, 39.695405 ], [ 116.948866, 39.680668 ], [ 116.948866, 39.680668 ], [ 116.964265, 39.64335 ], [ 116.983359, 39.638742 ], [ 116.983359, 39.638742 ], [ 117.016004, 39.653949 ], [ 117.10901, 39.625375 ], [ 117.10901, 39.625375 ], [ 117.152742, 39.623532 ], [ 117.177996, 39.645194 ], [ 117.165061, 39.718886 ], [ 117.165061, 39.718886 ], [ 117.161981, 39.748801 ], [ 117.205713, 39.763984 ], [ 117.15767, 39.796638 ], [ 117.156438, 39.817326 ], [ 117.192162, 39.832953 ], [ 117.251908, 39.834332 ], [ 117.247597, 39.860981 ], [ 117.227887, 39.852712 ], [ 117.162597, 39.876598 ], [ 117.162597, 39.876598 ], [ 117.150894, 39.944996 ], [ 117.198322, 39.992697 ], [ 117.192162, 40.066475 ], [ 117.210024, 40.082045 ], [ 117.224191, 40.094865 ], [ 117.224191, 40.094865 ], [ 117.254988, 40.114548 ], [ 117.254988, 40.114548 ], [ 117.254988, 40.114548 ], [ 117.274082, 40.105852 ], [ 117.307343, 40.136971 ], [ 117.349227, 40.136513 ], [ 117.367089, 40.172649 ], [ 117.367089, 40.173106 ], [ 117.367089, 40.173106 ], [ 117.367089, 40.172649 ], [ 117.383719, 40.188195 ], [ 117.389879, 40.227958 ], [ 117.415748, 40.248973 ], [ 117.450241, 40.252627 ], [ 117.505059, 40.227044 ], [ 117.548791, 40.232527 ], [ 117.571581, 40.219276 ], [ 117.576508, 40.178593 ], [ 117.609769, 40.160301 ], [ 117.609769, 40.160301 ], [ 117.613465, 40.158014 ], [ 117.613465, 40.158014 ], [ 117.651653, 40.122786 ], [ 117.651653, 40.122786 ], [ 117.654117, 40.114548 ], [ 117.654117, 40.114548 ], [ 117.655965, 40.109514 ], [ 117.655965, 40.109514 ], [ 117.675059, 40.082045 ], [ 117.71879, 40.082045 ], [ 117.71879, 40.082045 ], [ 117.752667, 40.081588 ], [ 117.776073, 40.059605 ], [ 117.74774, 40.047236 ], [ 117.744044, 40.018368 ], [ 117.768681, 40.022034 ], [ 117.768681, 40.022034 ], [ 117.793319, 40.005534 ], [ 117.793319, 40.005534 ], [ 117.795167, 39.996823 ], [ 117.795167, 39.996823 ], [ 117.781616, 39.966558 ], [ 117.781616, 39.966558 ], [ 117.756363, 39.965181 ], [ 117.691073, 39.984902 ], [ 117.671363, 39.973896 ], [ 117.614697, 39.97252 ], [ 117.594987, 39.994531 ], [ 117.594987, 39.994531 ], [ 117.546327, 39.999116 ], [ 117.534625, 39.954631 ], [ 117.514914, 39.946832 ], [ 117.513067, 39.910576 ], [ 117.513067, 39.910576 ], [ 117.512451, 39.90874 ], [ 117.512451, 39.90874 ], [ 117.508139, 39.901854 ], [ 117.508139, 39.901854 ], [ 117.529081, 39.859144 ], [ 117.529081, 39.859144 ], [ 117.561726, 39.799856 ], [ 117.546327, 39.775943 ], [ 117.56111, 39.754782 ], [ 117.595603, 39.74604 ], [ 117.57774, 39.726711 ], [ 117.627015, 39.703693 ], [ 117.668899, 39.666849 ], [ 117.66274, 39.636437 ], [ 117.637486, 39.603246 ], [ 117.654117, 39.575113 ], [ 117.684914, 39.58895 ], [ 117.707088, 39.576036 ], [ 117.715711, 39.529892 ], [ 117.745276, 39.547892 ], [ 117.753899, 39.579726 ], [ 117.753899, 39.579726 ], [ 117.766834, 39.598635 ], [ 117.829659, 39.589873 ], [ 117.868464, 39.59679 ], [ 117.933753, 39.574191 ], [ 117.904804, 39.533585 ], [ 117.912195, 39.517428 ], [ 117.912195, 39.517428 ], [ 117.899877, 39.474479 ], [ 117.870311, 39.455074 ], [ 117.871543, 39.411625 ], [ 117.846906, 39.407926 ], [ 117.765602, 39.400527 ] ] ], [ [ [ 117.805022, 39.373237 ], [ 117.784696, 39.376938 ], [ 117.765602, 39.400527 ], [ 117.846906, 39.407926 ], [ 117.852449, 39.380639 ], [ 117.805022, 39.373237 ] ] ] ] } }, +{ "type": "Feature", "properties": { "adcode": "130000", "name": "河北省", "center": [ 114.502461, 38.045474 ], "childrenNum": 11, "level": "province", "parent": { "adcode": 100000 }, "subFeatureIndex": 2, "acroutes": [ 100000 ] }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 117.467487, 40.649738 ], [ 117.467487, 40.649738 ], [ 117.501364, 40.636569 ], [ 117.514914, 40.660181 ], [ 117.493973, 40.675161 ], [ 117.408973, 40.686961 ], [ 117.342451, 40.673799 ], [ 117.319662, 40.657911 ], [ 117.278394, 40.664267 ], [ 117.208177, 40.694675 ], [ 117.117018, 40.70012 ], [ 117.11209, 40.707379 ], [ 117.012308, 40.693767 ], [ 116.964881, 40.709647 ], [ 116.926692, 40.745022 ], [ 116.924229, 40.773581 ], [ 116.848468, 40.839264 ], [ 116.81336, 40.848319 ], [ 116.759773, 40.889954 ], [ 116.713577, 40.909858 ], [ 116.722201, 40.927495 ], [ 116.677853, 40.970888 ], [ 116.698795, 41.021477 ], [ 116.688324, 41.044501 ], [ 116.647672, 41.059394 ], [ 116.615643, 41.053076 ], [ 116.623034, 41.021026 ], [ 116.598397, 40.974503 ], [ 116.5676, 40.992574 ], [ 116.519557, 40.98128 ], [ 116.519557, 40.98128 ], [ 116.455499, 40.980828 ], [ 116.447492, 40.953715 ], [ 116.477057, 40.899907 ], [ 116.398216, 40.90624 ], [ 116.370499, 40.94377 ], [ 116.339702, 40.929303 ], [ 116.334159, 40.90443 ], [ 116.438253, 40.81934 ], [ 116.46597, 40.774487 ], [ 116.453651, 40.765876 ], [ 116.316912, 40.772221 ], [ 116.311369, 40.754996 ], [ 116.273181, 40.762703 ], [ 116.247311, 40.791707 ], [ 116.22021, 40.744115 ], [ 116.204812, 40.740035 ], [ 116.171551, 40.695582 ], [ 116.162928, 40.662451 ], [ 116.133979, 40.666536 ], [ 116.09887, 40.630665 ], [ 116.005247, 40.583868 ], [ 115.982457, 40.578868 ], [ 115.971986, 40.6025 ], [ 115.907929, 40.617493 ], [ 115.885139, 40.595229 ], [ 115.827857, 40.587504 ], [ 115.819849, 40.55932 ], [ 115.784741, 40.55841 ], [ 115.755176, 40.540221 ], [ 115.736082, 40.503372 ], [ 115.781045, 40.49336 ], [ 115.771806, 40.443734 ], [ 115.864197, 40.359422 ], [ 115.917784, 40.354405 ], [ 115.95166, 40.281852 ], [ 115.968907, 40.264045 ], [ 115.89869, 40.234354 ], [ 115.870356, 40.185909 ], [ 115.855574, 40.188652 ], [ 115.847567, 40.147036 ], [ 115.806299, 40.15344 ], [ 115.773654, 40.176307 ], [ 115.75456, 40.145663 ], [ 115.75456, 40.145663 ], [ 115.599959, 40.119583 ], [ 115.59072, 40.096239 ], [ 115.527278, 40.076092 ], [ 115.485394, 40.040364 ], [ 115.454597, 40.029825 ], [ 115.450286, 39.992697 ], [ 115.428728, 39.984443 ], [ 115.426264, 39.950502 ], [ 115.481083, 39.935819 ], [ 115.522967, 39.899099 ], [ 115.515575, 39.892212 ], [ 115.515575, 39.892212 ], [ 115.526046, 39.87568 ], [ 115.514344, 39.837549 ], [ 115.567314, 39.816407 ], [ 115.552532, 39.794799 ], [ 115.50572, 39.784222 ], [ 115.483547, 39.798477 ], [ 115.483547, 39.798477 ], [ 115.443511, 39.785601 ], [ 115.439815, 39.752022 ], [ 115.486626, 39.741899 ], [ 115.491554, 39.670074 ], [ 115.478619, 39.650723 ], [ 115.478619, 39.650723 ], [ 115.522351, 39.640124 ], [ 115.518039, 39.597252 ], [ 115.545756, 39.618922 ], [ 115.587024, 39.589873 ], [ 115.633836, 39.599557 ], [ 115.633836, 39.599557 ], [ 115.667712, 39.615234 ], [ 115.698509, 39.577881 ], [ 115.698509, 39.577881 ], [ 115.699125, 39.570039 ], [ 115.699125, 39.570039 ], [ 115.716988, 39.56035 ], [ 115.716988, 39.56035 ], [ 115.718835, 39.553891 ], [ 115.718835, 39.553891 ], [ 115.720683, 39.551122 ], [ 115.720683, 39.551122 ], [ 115.722531, 39.5442 ], [ 115.721299, 39.543738 ], [ 115.722531, 39.5442 ], [ 115.722531, 39.543738 ], [ 115.721299, 39.543738 ], [ 115.722531, 39.543738 ], [ 115.724995, 39.5442 ], [ 115.724995, 39.5442 ], [ 115.738545, 39.540046 ], [ 115.738545, 39.539585 ], [ 115.738545, 39.540046 ], [ 115.738545, 39.539585 ], [ 115.752712, 39.515581 ], [ 115.806299, 39.510041 ], [ 115.806299, 39.510041 ], [ 115.821081, 39.522968 ], [ 115.821081, 39.522968 ], [ 115.828473, 39.541431 ], [ 115.867893, 39.546507 ], [ 115.867893, 39.546507 ], [ 115.91532, 39.582955 ], [ 115.91532, 39.582955 ], [ 115.910393, 39.600479 ], [ 115.910393, 39.600479 ], [ 115.957204, 39.560812 ], [ 115.978146, 39.595868 ], [ 115.995392, 39.576958 ], [ 116.026189, 39.587567 ], [ 116.036044, 39.571884 ], [ 116.09887, 39.575113 ], [ 116.130283, 39.567732 ], [ 116.151841, 39.583416 ], [ 116.198652, 39.589412 ], [ 116.240536, 39.564041 ], [ 116.257782, 39.500344 ], [ 116.307057, 39.488337 ], [ 116.337854, 39.455536 ], [ 116.361876, 39.455074 ], [ 116.361876, 39.455074 ], [ 116.434557, 39.442597 ], [ 116.454883, 39.453226 ], [ 116.444412, 39.482332 ], [ 116.411767, 39.482794 ], [ 116.401912, 39.528046 ], [ 116.443796, 39.510041 ], [ 116.437637, 39.526661 ], [ 116.478289, 39.535431 ], [ 116.473361, 39.552968 ], [ 116.50847, 39.551122 ], [ 116.524484, 39.596329 ], [ 116.592237, 39.621227 ], [ 116.592237, 39.621227 ], [ 116.620571, 39.601863 ], [ 116.664918, 39.605552 ], [ 116.723432, 39.59264 ], [ 116.724048, 39.59264 ], [ 116.723432, 39.59264 ], [ 116.724048, 39.59264 ], [ 116.726512, 39.595407 ], [ 116.726512, 39.595407 ], [ 116.709266, 39.618 ], [ 116.748686, 39.619844 ], [ 116.79057, 39.595868 ], [ 116.812128, 39.615695 ], [ 116.808432, 39.576497 ], [ 116.78749, 39.554352 ], [ 116.819519, 39.528507 ], [ 116.820751, 39.482332 ], [ 116.785026, 39.465702 ], [ 116.832454, 39.435664 ], [ 116.876185, 39.43474 ], [ 116.839845, 39.413474 ], [ 116.840461, 39.378326 ], [ 116.818287, 39.3737 ], [ 116.829374, 39.338994 ], [ 116.870642, 39.357506 ], [ 116.889736, 39.338068 ], [ 116.87249, 39.291304 ], [ 116.881729, 39.225966 ], [ 116.881729, 39.225966 ], [ 116.855859, 39.215766 ], [ 116.870026, 39.153607 ], [ 116.909446, 39.150822 ], [ 116.912526, 39.110898 ], [ 116.91191, 39.111362 ], [ 116.91191, 39.111362 ], [ 116.912526, 39.110898 ], [ 116.871874, 39.054688 ], [ 116.812744, 39.05097 ], [ 116.812744, 39.05097 ], [ 116.783179, 39.05097 ], [ 116.783179, 39.05097 ], [ 116.754229, 39.034701 ], [ 116.754229, 39.034701 ], [ 116.754845, 39.003084 ], [ 116.72836, 38.975174 ], [ 116.708034, 38.931892 ], [ 116.722201, 38.896968 ], [ 116.723432, 38.852706 ], [ 116.75115, 38.831264 ], [ 116.737599, 38.784629 ], [ 116.746222, 38.754299 ], [ 116.794265, 38.744498 ], [ 116.794265, 38.744498 ], [ 116.858939, 38.741231 ], [ 116.877417, 38.680522 ], [ 116.948866, 38.689398 ], [ 116.950714, 38.689398 ], [ 116.95133, 38.689398 ], [ 116.950714, 38.689398 ], [ 116.948866, 38.689398 ], [ 116.95133, 38.689398 ], [ 117.038793, 38.688464 ], [ 117.068358, 38.680522 ], [ 117.055424, 38.639398 ], [ 117.070822, 38.608072 ], [ 117.109626, 38.584685 ], [ 117.150894, 38.617892 ], [ 117.183539, 38.61836 ], [ 117.183539, 38.61836 ], [ 117.213104, 38.639866 ], [ 117.213104, 38.639866 ], [ 117.258684, 38.608072 ], [ 117.258684, 38.608072 ], [ 117.238358, 38.580943 ], [ 117.25314, 38.556143 ], [ 117.368937, 38.564566 ], [ 117.432379, 38.601524 ], [ 117.47919, 38.616489 ], [ 117.55803, 38.613683 ], [ 117.639334, 38.626776 ], [ 117.638102, 38.54491 ], [ 117.68553, 38.539293 ], [ 117.644878, 38.52759 ], [ 117.678754, 38.477008 ], [ 117.72495, 38.457328 ], [ 117.730493, 38.424985 ], [ 117.781, 38.373862 ], [ 117.84629, 38.368232 ], [ 117.937449, 38.387936 ], [ 117.957775, 38.376208 ], [ 117.948536, 38.346644 ], [ 117.895565, 38.301572 ], [ 117.848754, 38.255062 ], [ 117.808718, 38.22827 ], [ 117.789007, 38.180772 ], [ 117.766834, 38.158658 ], [ 117.771145, 38.134655 ], [ 117.746508, 38.12524 ], [ 117.704624, 38.076262 ], [ 117.586979, 38.071551 ], [ 117.557414, 38.046105 ], [ 117.557414, 38.046105 ], [ 117.524154, 37.989527 ], [ 117.513067, 37.94329 ], [ 117.481038, 37.914967 ], [ 117.438538, 37.854035 ], [ 117.400966, 37.844584 ], [ 117.320278, 37.861596 ], [ 117.271618, 37.839858 ], [ 117.185387, 37.849783 ], [ 117.150278, 37.839385 ], [ 117.074518, 37.848837 ], [ 117.027091, 37.832296 ], [ 116.919301, 37.846002 ], [ 116.837997, 37.835132 ], [ 116.804736, 37.848837 ], [ 116.753613, 37.793054 ], [ 116.753613, 37.77035 ], [ 116.724664, 37.744327 ], [ 116.679085, 37.728708 ], [ 116.66307, 37.686096 ], [ 116.604556, 37.624975 ], [ 116.575607, 37.610754 ], [ 116.4826, 37.521573 ], [ 116.448108, 37.503059 ], [ 116.433941, 37.473142 ], [ 116.38097, 37.522522 ], [ 116.379738, 37.522047 ], [ 116.38097, 37.522522 ], [ 116.379738, 37.522047 ], [ 116.36742, 37.566177 ], [ 116.336007, 37.581355 ], [ 116.295355, 37.554316 ], [ 116.278724, 37.524895 ], [ 116.290427, 37.484065 ], [ 116.27626, 37.466967 ], [ 116.240536, 37.489764 ], [ 116.240536, 37.489764 ], [ 116.224522, 37.479791 ], [ 116.243, 37.447965 ], [ 116.226369, 37.428007 ], [ 116.2855, 37.404241 ], [ 116.236224, 37.361442 ], [ 116.193109, 37.365723 ], [ 116.169087, 37.384271 ], [ 116.106261, 37.368577 ], [ 116.085935, 37.373809 ], [ 116.024341, 37.360015 ], [ 115.975682, 37.337179 ], [ 115.969523, 37.239572 ], [ 115.909777, 37.20669 ], [ 115.91224, 37.177132 ], [ 115.879596, 37.150901 ], [ 115.888219, 37.112254 ], [ 115.85619, 37.060694 ], [ 115.776734, 36.992848 ], [ 115.79706, 36.968945 ], [ 115.75764, 36.902453 ], [ 115.71206, 36.883308 ], [ 115.688654, 36.838777 ], [ 115.686807, 36.810034 ], [ 115.524815, 36.763543 ], [ 115.479851, 36.760187 ], [ 115.451518, 36.702151 ], [ 115.420105, 36.686795 ], [ 115.365902, 36.621979 ], [ 115.355431, 36.627262 ], [ 115.33141, 36.550378 ], [ 115.272895, 36.497476 ], [ 115.291374, 36.460423 ], [ 115.317243, 36.454166 ], [ 115.297533, 36.413239 ], [ 115.340033, 36.398307 ], [ 115.368982, 36.342409 ], [ 115.366518, 36.30914 ], [ 115.423185, 36.32216 ], [ 115.417025, 36.292742 ], [ 115.462605, 36.276339 ], [ 115.466916, 36.258969 ], [ 115.466916, 36.258969 ], [ 115.474923, 36.248352 ], [ 115.483547, 36.148865 ], [ 115.465068, 36.170125 ], [ 115.450902, 36.152248 ], [ 115.376989, 36.128083 ], [ 115.365902, 36.099074 ], [ 115.312931, 36.088436 ], [ 115.30246, 36.127599 ], [ 115.279055, 36.13775 ], [ 115.242098, 36.19138 ], [ 115.202678, 36.208765 ], [ 115.202678, 36.208765 ], [ 115.202678, 36.209248 ], [ 115.202678, 36.209248 ], [ 115.201446, 36.210214 ], [ 115.201446, 36.210214 ], [ 115.1842, 36.193312 ], [ 115.12507, 36.209731 ], [ 115.104744, 36.172058 ], [ 115.06286, 36.178338 ], [ 115.048693, 36.161912 ], [ 115.04623, 36.112613 ], [ 114.998186, 36.069572 ], [ 114.914419, 36.052155 ], [ 114.926737, 36.089403 ], [ 114.912571, 36.140649 ], [ 114.858368, 36.144516 ], [ 114.857752, 36.127599 ], [ 114.771521, 36.124699 ], [ 114.734564, 36.15563 ], [ 114.720398, 36.140166 ], [ 114.640326, 36.137266 ], [ 114.588587, 36.118414 ], [ 114.586739, 36.141133 ], [ 114.533152, 36.171575 ], [ 114.480181, 36.177855 ], [ 114.466015, 36.197658 ], [ 114.417356, 36.205868 ], [ 114.408117, 36.224699 ], [ 114.356378, 36.230492 ], [ 114.345291, 36.255591 ], [ 114.299095, 36.245938 ], [ 114.257827, 36.263794 ], [ 114.241197, 36.251247 ], [ 114.2104, 36.272962 ], [ 114.203009, 36.245456 ], [ 114.170364, 36.245938 ], [ 114.170364, 36.245938 ], [ 114.175907, 36.264759 ], [ 114.129096, 36.280199 ], [ 114.080437, 36.269585 ], [ 114.04348, 36.303353 ], [ 114.056415, 36.329392 ], [ 114.002828, 36.334214 ], [ 113.981887, 36.31782 ], [ 113.962792, 36.353977 ], [ 113.911054, 36.314927 ], [ 113.882104, 36.353977 ], [ 113.84946, 36.347711 ], [ 113.856851, 36.329392 ], [ 113.813119, 36.332285 ], [ 113.755221, 36.366026 ], [ 113.731199, 36.363135 ], [ 113.708409, 36.423352 ], [ 113.670221, 36.425278 ], [ 113.635729, 36.451277 ], [ 113.587069, 36.460904 ], [ 113.554425, 36.494589 ], [ 113.559968, 36.528741 ], [ 113.588917, 36.547974 ], [ 113.569823, 36.585947 ], [ 113.539642, 36.594116 ], [ 113.54457, 36.62342 ], [ 113.486671, 36.635427 ], [ 113.476816, 36.655114 ], [ 113.506997, 36.705029 ], [ 113.465113, 36.707908 ], [ 113.499606, 36.740527 ], [ 113.535946, 36.732373 ], [ 113.549497, 36.752515 ], [ 113.600004, 36.752995 ], [ 113.680692, 36.789907 ], [ 113.676381, 36.855539 ], [ 113.696707, 36.882351 ], [ 113.731815, 36.878521 ], [ 113.731815, 36.858891 ], [ 113.773083, 36.85506 ], [ 113.792793, 36.894796 ], [ 113.76138, 36.956034 ], [ 113.791561, 36.98759 ], [ 113.771851, 37.016745 ], [ 113.788482, 37.059739 ], [ 113.758301, 37.075497 ], [ 113.773699, 37.107004 ], [ 113.773083, 37.151855 ], [ 113.832213, 37.167594 ], [ 113.853155, 37.215269 ], [ 113.886416, 37.239095 ], [ 113.90243, 37.310052 ], [ 113.962792, 37.355734 ], [ 113.973879, 37.40329 ], [ 114.014531, 37.42468 ], [ 114.036705, 37.494037 ], [ 114.118625, 37.59084 ], [ 114.115545, 37.619761 ], [ 114.139567, 37.675676 ], [ 114.12848, 37.698409 ], [ 114.068118, 37.721608 ], [ 113.993589, 37.706932 ], [ 113.996669, 37.730128 ], [ 114.044712, 37.761834 ], [ 114.006524, 37.813386 ], [ 113.976959, 37.816696 ], [ 113.959097, 37.906468 ], [ 113.936307, 37.922993 ], [ 113.901198, 37.984811 ], [ 113.872249, 37.990471 ], [ 113.876561, 38.055059 ], [ 113.811271, 38.117707 ], [ 113.831597, 38.16854 ], [ 113.797105, 38.162894 ], [ 113.720728, 38.174656 ], [ 113.711489, 38.213695 ], [ 113.678844, 38.20523 ], [ 113.64312, 38.232031 ], [ 113.598772, 38.22733 ], [ 113.570439, 38.237202 ], [ 113.54457, 38.270569 ], [ 113.557504, 38.343359 ], [ 113.525475, 38.383245 ], [ 113.537794, 38.417952 ], [ 113.583374, 38.459671 ], [ 113.5612, 38.485909 ], [ 113.561816, 38.558483 ], [ 113.603084, 38.587024 ], [ 113.612939, 38.645942 ], [ 113.70225, 38.651551 ], [ 113.720728, 38.713218 ], [ 113.775547, 38.709949 ], [ 113.802648, 38.763166 ], [ 113.839605, 38.7585 ], [ 113.836525, 38.795824 ], [ 113.855619, 38.828933 ], [ 113.795257, 38.860628 ], [ 113.776163, 38.885788 ], [ 113.76754, 38.959819 ], [ 113.776779, 38.986804 ], [ 113.80696, 38.989595 ], [ 113.898119, 39.067699 ], [ 113.930148, 39.063517 ], [ 113.961561, 39.100681 ], [ 113.994821, 39.095572 ], [ 114.006524, 39.122971 ], [ 114.050872, 39.135969 ], [ 114.064422, 39.094179 ], [ 114.082901, 39.09325 ], [ 114.082901, 39.09325 ], [ 114.10877, 39.052364 ], [ 114.157429, 39.061194 ], [ 114.180835, 39.049111 ], [ 114.252284, 39.073739 ], [ 114.345907, 39.075133 ], [ 114.369928, 39.107648 ], [ 114.360689, 39.134112 ], [ 114.388406, 39.176807 ], [ 114.443841, 39.174023 ], [ 114.47587, 39.21623 ], [ 114.416124, 39.242654 ], [ 114.437066, 39.259337 ], [ 114.430906, 39.307513 ], [ 114.466631, 39.329736 ], [ 114.469095, 39.400989 ], [ 114.496812, 39.438437 ], [ 114.501739, 39.476789 ], [ 114.532536, 39.486027 ], [ 114.568877, 39.573729 ], [ 114.51529, 39.564964 ], [ 114.49558, 39.608318 ], [ 114.431522, 39.613851 ], [ 114.408117, 39.652106 ], [ 114.409964, 39.761683 ], [ 114.41674, 39.775943 ], [ 114.390254, 39.819165 ], [ 114.406885, 39.833413 ], [ 114.395182, 39.867412 ], [ 114.285545, 39.858225 ], [ 114.286776, 39.871087 ], [ 114.215943, 39.8619 ], [ 114.204241, 39.885324 ], [ 114.229494, 39.899558 ], [ 114.212248, 39.918839 ], [ 114.17406, 39.897722 ], [ 114.067502, 39.922511 ], [ 114.047176, 39.916085 ], [ 114.028082, 39.959218 ], [ 114.029314, 39.985819 ], [ 113.910438, 40.015618 ], [ 113.959097, 40.033491 ], [ 113.989278, 40.11226 ], [ 114.018227, 40.103563 ], [ 114.045944, 40.056856 ], [ 114.086596, 40.071513 ], [ 114.101995, 40.099901 ], [ 114.073046, 40.168533 ], [ 114.073046, 40.168533 ], [ 114.097683, 40.193681 ], [ 114.135871, 40.175392 ], [ 114.180219, 40.191395 ], [ 114.235654, 40.198252 ], [ 114.255364, 40.236182 ], [ 114.292936, 40.230242 ], [ 114.362537, 40.249886 ], [ 114.406269, 40.246232 ], [ 114.46971, 40.268155 ], [ 114.510978, 40.302851 ], [ 114.530688, 40.345283 ], [ 114.481413, 40.34802 ], [ 114.438914, 40.371733 ], [ 114.390254, 40.351213 ], [ 114.381015, 40.36307 ], [ 114.31203, 40.372645 ], [ 114.286161, 40.425057 ], [ 114.299711, 40.44009 ], [ 114.267066, 40.474242 ], [ 114.282465, 40.494725 ], [ 114.293552, 40.55159 ], [ 114.273842, 40.552954 ], [ 114.283081, 40.590685 ], [ 114.236269, 40.607043 ], [ 114.183299, 40.67153 ], [ 114.162357, 40.71373 ], [ 114.134639, 40.737314 ], [ 114.103227, 40.770861 ], [ 114.104458, 40.797597 ], [ 114.080437, 40.790348 ], [ 114.044712, 40.830661 ], [ 114.073661, 40.857372 ], [ 114.055183, 40.867782 ], [ 114.041633, 40.917546 ], [ 114.057647, 40.925234 ], [ 113.994821, 40.938798 ], [ 113.973263, 40.983087 ], [ 113.868554, 41.06887 ], [ 113.819279, 41.09774 ], [ 113.877793, 41.115777 ], [ 113.920293, 41.172112 ], [ 113.960945, 41.171211 ], [ 113.996669, 41.19238 ], [ 114.016379, 41.231999 ], [ 113.992357, 41.269794 ], [ 113.971416, 41.239649 ], [ 113.95109, 41.282837 ], [ 113.914749, 41.294529 ], [ 113.899351, 41.316108 ], [ 113.92522, 41.325546 ], [ 113.94493, 41.392477 ], [ 113.871017, 41.413126 ], [ 113.877793, 41.431076 ], [ 113.919677, 41.454404 ], [ 113.933227, 41.487139 ], [ 113.953553, 41.483553 ], [ 113.976959, 41.505966 ], [ 114.032394, 41.529715 ], [ 114.101379, 41.537779 ], [ 114.230726, 41.513584 ], [ 114.221487, 41.582111 ], [ 114.226414, 41.616572 ], [ 114.259059, 41.623282 ], [ 114.215328, 41.68499 ], [ 114.237501, 41.698843 ], [ 114.206704, 41.7386 ], [ 114.215328, 41.75646 ], [ 114.200545, 41.789934 ], [ 114.282465, 41.863517 ], [ 114.343443, 41.926774 ], [ 114.352066, 41.953484 ], [ 114.419203, 41.942356 ], [ 114.478334, 41.951704 ], [ 114.511594, 41.981962 ], [ 114.467863, 42.025989 ], [ 114.480181, 42.064654 ], [ 114.502355, 42.06732 ], [ 114.510978, 42.110844 ], [ 114.560254, 42.132595 ], [ 114.647717, 42.109512 ], [ 114.675434, 42.12061 ], [ 114.75489, 42.115727 ], [ 114.789383, 42.130819 ], [ 114.79431, 42.149457 ], [ 114.825723, 42.139695 ], [ 114.86268, 42.097967 ], [ 114.860832, 42.054879 ], [ 114.9021, 42.015763 ], [ 114.915035, 41.960605 ], [ 114.923658, 41.871093 ], [ 114.939056, 41.846132 ], [ 114.922426, 41.825175 ], [ 114.868839, 41.813579 ], [ 114.89594, 41.76762 ], [ 114.902716, 41.695715 ], [ 114.895325, 41.636255 ], [ 114.860832, 41.60091 ], [ 115.016049, 41.615229 ], [ 115.056085, 41.602253 ], [ 115.0992, 41.62373 ], [ 115.195287, 41.602253 ], [ 115.20391, 41.571367 ], [ 115.256881, 41.580768 ], [ 115.26612, 41.616124 ], [ 115.290142, 41.622835 ], [ 115.310468, 41.592854 ], [ 115.377605, 41.603148 ], [ 115.345576, 41.635807 ], [ 115.360975, 41.661297 ], [ 115.319091, 41.691693 ], [ 115.346808, 41.712247 ], [ 115.42996, 41.728775 ], [ 115.488474, 41.760924 ], [ 115.519887, 41.76762 ], [ 115.57409, 41.80555 ], [ 115.654162, 41.829189 ], [ 115.688038, 41.867528 ], [ 115.726227, 41.870202 ], [ 115.811226, 41.912525 ], [ 115.834632, 41.93835 ], [ 115.85311, 41.927665 ], [ 115.916552, 41.945027 ], [ 115.954124, 41.874213 ], [ 115.994776, 41.828743 ], [ 116.007095, 41.797966 ], [ 116.007095, 41.79752 ], [ 116.007095, 41.797966 ], [ 116.007095, 41.79752 ], [ 116.034196, 41.782795 ], [ 116.09887, 41.776547 ], [ 116.129051, 41.805996 ], [ 116.106877, 41.831419 ], [ 116.122892, 41.861734 ], [ 116.194341, 41.861734 ], [ 116.212819, 41.885352 ], [ 116.223906, 41.932562 ], [ 116.298434, 41.96817 ], [ 116.310137, 41.997086 ], [ 116.373579, 42.009983 ], [ 116.414231, 41.982407 ], [ 116.393289, 41.942802 ], [ 116.453651, 41.945917 ], [ 116.4826, 41.975734 ], [ 116.510933, 41.974399 ], [ 116.553433, 41.928555 ], [ 116.597165, 41.935679 ], [ 116.639049, 41.929891 ], [ 116.66923, 41.947698 ], [ 116.727744, 41.951259 ], [ 116.748686, 41.984186 ], [ 116.796113, 41.977958 ], [ 116.879881, 42.018431 ], [ 116.890352, 42.092639 ], [ 116.850316, 42.156556 ], [ 116.825062, 42.155669 ], [ 116.789338, 42.200462 ], [ 116.903287, 42.190708 ], [ 116.918685, 42.229716 ], [ 116.897743, 42.297479 ], [ 116.886656, 42.366496 ], [ 116.910678, 42.394789 ], [ 116.910678, 42.394789 ], [ 116.910062, 42.395231 ], [ 116.910062, 42.395231 ], [ 116.921765, 42.403628 ], [ 116.921765, 42.403628 ], [ 116.936547, 42.410256 ], [ 116.936547, 42.410256 ], [ 116.944555, 42.415116 ], [ 116.944555, 42.415116 ], [ 116.97104, 42.427486 ], [ 116.97104, 42.427486 ], [ 116.974736, 42.426603 ], [ 116.974736, 42.426603 ], [ 116.99075, 42.425719 ], [ 116.99075, 42.425719 ], [ 117.005533, 42.43367 ], [ 117.005533, 42.43367 ], [ 117.009228, 42.44957 ], [ 117.009228, 42.44957 ], [ 117.01662, 42.456193 ], [ 117.01662, 42.456193 ], [ 117.080061, 42.463699 ], [ 117.080061, 42.463699 ], [ 117.09546, 42.484004 ], [ 117.135496, 42.468996 ], [ 117.188467, 42.468114 ], [ 117.188467, 42.468114 ], [ 117.275314, 42.481797 ], [ 117.275314, 42.481797 ], [ 117.332596, 42.46105 ], [ 117.332596, 42.46105 ], [ 117.390495, 42.461933 ], [ 117.413284, 42.471645 ], [ 117.410205, 42.519743 ], [ 117.387415, 42.517537 ], [ 117.387415, 42.517537 ], [ 117.434226, 42.557224 ], [ 117.435458, 42.585431 ], [ 117.475494, 42.602613 ], [ 117.530313, 42.590278 ], [ 117.537088, 42.603054 ], [ 117.60053, 42.603054 ], [ 117.667051, 42.582347 ], [ 117.708935, 42.588515 ], [ 117.779768, 42.61847 ], [ 117.801326, 42.612744 ], [ 117.797631, 42.585431 ], [ 117.856761, 42.539148 ], [ 117.874007, 42.510038 ], [ 117.997811, 42.416884 ], [ 118.024296, 42.385064 ], [ 118.008898, 42.346595 ], [ 118.060021, 42.298364 ], [ 118.047702, 42.280656 ], [ 117.974405, 42.25054 ], [ 117.977485, 42.229716 ], [ 118.033535, 42.199132 ], [ 118.106216, 42.172082 ], [ 118.089586, 42.12283 ], [ 118.097593, 42.105072 ], [ 118.155491, 42.081091 ], [ 118.116687, 42.037102 ], [ 118.194296, 42.031324 ], [ 118.220165, 42.058434 ], [ 118.212774, 42.081091 ], [ 118.239259, 42.092639 ], [ 118.27252, 42.083312 ], [ 118.296541, 42.057545 ], [ 118.286686, 42.033991 ], [ 118.239875, 42.024655 ], [ 118.291614, 42.007759 ], [ 118.313788, 41.98819 ], [ 118.306396, 41.940131 ], [ 118.268824, 41.930336 ], [ 118.340273, 41.87243 ], [ 118.335346, 41.845241 ], [ 118.29223, 41.772976 ], [ 118.247266, 41.773869 ], [ 118.236179, 41.80778 ], [ 118.178281, 41.814917 ], [ 118.140093, 41.784134 ], [ 118.132702, 41.733241 ], [ 118.155491, 41.712694 ], [ 118.159187, 41.67605 ], [ 118.206614, 41.650566 ], [ 118.215237, 41.59554 ], [ 118.302701, 41.55256 ], [ 118.315636, 41.512688 ], [ 118.271904, 41.471446 ], [ 118.327338, 41.450816 ], [ 118.348896, 41.428384 ], [ 118.361215, 41.384844 ], [ 118.348896, 41.342622 ], [ 118.380309, 41.312062 ], [ 118.412338, 41.331838 ], [ 118.528135, 41.355202 ], [ 118.629765, 41.346666 ], [ 118.677192, 41.35026 ], [ 118.741866, 41.324198 ], [ 118.770199, 41.352956 ], [ 118.843496, 41.374516 ], [ 118.844727, 41.342622 ], [ 118.890923, 41.300823 ], [ 118.949437, 41.317906 ], [ 118.980234, 41.305769 ], [ 119.092951, 41.293629 ], [ 119.168712, 41.294978 ], [ 119.197661, 41.282837 ], [ 119.211827, 41.308016 ], [ 119.239545, 41.31431 ], [ 119.2494, 41.279689 ], [ 119.209364, 41.244599 ], [ 119.204436, 41.222546 ], [ 119.169943, 41.222996 ], [ 119.189038, 41.198234 ], [ 119.126212, 41.138767 ], [ 119.081248, 41.131555 ], [ 119.080632, 41.095936 ], [ 119.037516, 41.067516 ], [ 118.964836, 41.079246 ], [ 118.937118, 41.052625 ], [ 118.951901, 41.018317 ], [ 119.013495, 41.007479 ], [ 119.00056, 40.967273 ], [ 118.977154, 40.959138 ], [ 118.977154, 40.959138 ], [ 118.916792, 40.969984 ], [ 118.90201, 40.960946 ], [ 118.873061, 40.847866 ], [ 118.845959, 40.822057 ], [ 118.878604, 40.783098 ], [ 118.907553, 40.775394 ], [ 118.895234, 40.75409 ], [ 118.950053, 40.747743 ], [ 118.96114, 40.72008 ], [ 119.011031, 40.687414 ], [ 119.028277, 40.692406 ], [ 119.054763, 40.664721 ], [ 119.115125, 40.666536 ], [ 119.165632, 40.69286 ], [ 119.184726, 40.680153 ], [ 119.14469, 40.632482 ], [ 119.162552, 40.600228 ], [ 119.177951, 40.609315 ], [ 119.230921, 40.603863 ], [ 119.22045, 40.569322 ], [ 119.256175, 40.543404 ], [ 119.30237, 40.530215 ], [ 119.429254, 40.540221 ], [ 119.477913, 40.533399 ], [ 119.503783, 40.553864 ], [ 119.559217, 40.547952 ], [ 119.572152, 40.523846 ], [ 119.553674, 40.502007 ], [ 119.604797, 40.455119 ], [ 119.586934, 40.375381 ], [ 119.598021, 40.334335 ], [ 119.651608, 40.271808 ], [ 119.639289, 40.231613 ], [ 119.639289, 40.231613 ], [ 119.671934, 40.23938 ], [ 119.716898, 40.195966 ], [ 119.745847, 40.207851 ], [ 119.760629, 40.136056 ], [ 119.736608, 40.104936 ], [ 119.772332, 40.08113 ], [ 119.783419, 40.046778 ], [ 119.783419, 40.046778 ], [ 119.787115, 40.041739 ], [ 119.787115, 40.041739 ], [ 119.81668, 40.050443 ], [ 119.81668, 40.050443 ], [ 119.854252, 40.033033 ], [ 119.845629, 40.000949 ], [ 119.845629, 40.000949 ], [ 119.854252, 39.98857 ], [ 119.872114, 39.960594 ], [ 119.842549, 39.956007 ], [ 119.820375, 39.979399 ], [ 119.787115, 39.950502 ], [ 119.726137, 39.940867 ], [ 119.681789, 39.922511 ], [ 119.642369, 39.925264 ], [ 119.620195, 39.904609 ], [ 119.588166, 39.910576 ], [ 119.540739, 39.888079 ], [ 119.520413, 39.840306 ], [ 119.536427, 39.809052 ], [ 119.474217, 39.813189 ], [ 119.366428, 39.734996 ], [ 119.269726, 39.498497 ], [ 119.316537, 39.437051 ], [ 119.317153, 39.4107 ], [ 119.272805, 39.363521 ], [ 119.185342, 39.342234 ], [ 119.121284, 39.281576 ], [ 119.096031, 39.24219 ], [ 119.038132, 39.211593 ], [ 119.023966, 39.187012 ], [ 118.97777, 39.163352 ], [ 118.926031, 39.123435 ], [ 118.890307, 39.118792 ], [ 118.896466, 39.139683 ], [ 118.951285, 39.178662 ], [ 118.920488, 39.171703 ], [ 118.897082, 39.151286 ], [ 118.857662, 39.162888 ], [ 118.814546, 39.138754 ], [ 118.76096, 39.133648 ], [ 118.637156, 39.157319 ], [ 118.578642, 39.130863 ], [ 118.588497, 39.107648 ], [ 118.533062, 39.090928 ], [ 118.570634, 38.999363 ], [ 118.604511, 38.971452 ], [ 118.539837, 38.910008 ], [ 118.491178, 38.909077 ], [ 118.377845, 38.971917 ], [ 118.366143, 39.016104 ], [ 118.319331, 39.009594 ], [ 118.225092, 39.034701 ], [ 118.1906, 39.080708 ], [ 118.162883, 39.136433 ], [ 118.12531, 39.182838 ], [ 118.065564, 39.218084 ], [ 118.056941, 39.219939 ], [ 118.037231, 39.220402 ], [ 118.064948, 39.231065 ], [ 118.064948, 39.256094 ], [ 118.036615, 39.264898 ], [ 118.024296, 39.289451 ], [ 118.024296, 39.289451 ], [ 117.982412, 39.298714 ], [ 117.982412, 39.298714 ], [ 117.979333, 39.300566 ], [ 117.979333, 39.300566 ], [ 117.973173, 39.312143 ], [ 117.973173, 39.312143 ], [ 117.965782, 39.314921 ], [ 117.965782, 39.314921 ], [ 117.919587, 39.318162 ], [ 117.919587, 39.318162 ], [ 117.88879, 39.332051 ], [ 117.854913, 39.328348 ], [ 117.854297, 39.328348 ], [ 117.854913, 39.328348 ], [ 117.854297, 39.328348 ], [ 117.850601, 39.363984 ], [ 117.850601, 39.363984 ], [ 117.810565, 39.354729 ], [ 117.805022, 39.373237 ], [ 117.852449, 39.380639 ], [ 117.846906, 39.407926 ], [ 117.871543, 39.411625 ], [ 117.870311, 39.455074 ], [ 117.899877, 39.474479 ], [ 117.912195, 39.517428 ], [ 117.912195, 39.517428 ], [ 117.904804, 39.533585 ], [ 117.933753, 39.574191 ], [ 117.868464, 39.59679 ], [ 117.829659, 39.589873 ], [ 117.766834, 39.598635 ], [ 117.753899, 39.579726 ], [ 117.753899, 39.579726 ], [ 117.745276, 39.547892 ], [ 117.715711, 39.529892 ], [ 117.707088, 39.576036 ], [ 117.684914, 39.58895 ], [ 117.654117, 39.575113 ], [ 117.637486, 39.603246 ], [ 117.66274, 39.636437 ], [ 117.668899, 39.666849 ], [ 117.627015, 39.703693 ], [ 117.57774, 39.726711 ], [ 117.595603, 39.74604 ], [ 117.56111, 39.754782 ], [ 117.546327, 39.775943 ], [ 117.561726, 39.799856 ], [ 117.529081, 39.859144 ], [ 117.529081, 39.859144 ], [ 117.508139, 39.901854 ], [ 117.508139, 39.901854 ], [ 117.512451, 39.90874 ], [ 117.512451, 39.90874 ], [ 117.513067, 39.910576 ], [ 117.513067, 39.910576 ], [ 117.514914, 39.946832 ], [ 117.534625, 39.954631 ], [ 117.546327, 39.999116 ], [ 117.594987, 39.994531 ], [ 117.594987, 39.994531 ], [ 117.614697, 39.97252 ], [ 117.671363, 39.973896 ], [ 117.691073, 39.984902 ], [ 117.756363, 39.965181 ], [ 117.781616, 39.966558 ], [ 117.781616, 39.966558 ], [ 117.795167, 39.996823 ], [ 117.795167, 39.996823 ], [ 117.793319, 40.005534 ], [ 117.793319, 40.005534 ], [ 117.768681, 40.022034 ], [ 117.768681, 40.022034 ], [ 117.744044, 40.018368 ], [ 117.74774, 40.047236 ], [ 117.776073, 40.059605 ], [ 117.752667, 40.081588 ], [ 117.71879, 40.082045 ], [ 117.71879, 40.082045 ], [ 117.675059, 40.082045 ], [ 117.655965, 40.109514 ], [ 117.655965, 40.109514 ], [ 117.654117, 40.114548 ], [ 117.654117, 40.114548 ], [ 117.651653, 40.122786 ], [ 117.651653, 40.122786 ], [ 117.613465, 40.158014 ], [ 117.613465, 40.158014 ], [ 117.609769, 40.160301 ], [ 117.609769, 40.160301 ], [ 117.576508, 40.178593 ], [ 117.571581, 40.219276 ], [ 117.548791, 40.232527 ], [ 117.505059, 40.227044 ], [ 117.450241, 40.252627 ], [ 117.415748, 40.248973 ], [ 117.389879, 40.227958 ], [ 117.351075, 40.229786 ], [ 117.331365, 40.289613 ], [ 117.295024, 40.2782 ], [ 117.271618, 40.325211 ], [ 117.271618, 40.325211 ], [ 117.243285, 40.369453 ], [ 117.226039, 40.368997 ], [ 117.234046, 40.417312 ], [ 117.263611, 40.442367 ], [ 117.208793, 40.501552 ], [ 117.262995, 40.512927 ], [ 117.247597, 40.539766 ], [ 117.269771, 40.560684 ], [ 117.348611, 40.581141 ], [ 117.348611, 40.581141 ], [ 117.389879, 40.561593 ], [ 117.429915, 40.576141 ], [ 117.412669, 40.605226 ], [ 117.467487, 40.649738 ] ] ], [ [ [ 117.210024, 40.082045 ], [ 117.192162, 40.066475 ], [ 117.198322, 39.992697 ], [ 117.150894, 39.944996 ], [ 117.162597, 39.876598 ], [ 117.162597, 39.876598 ], [ 117.227887, 39.852712 ], [ 117.247597, 39.860981 ], [ 117.251908, 39.834332 ], [ 117.192162, 39.832953 ], [ 117.156438, 39.817326 ], [ 117.15767, 39.796638 ], [ 117.205713, 39.763984 ], [ 117.161981, 39.748801 ], [ 117.165061, 39.718886 ], [ 117.165061, 39.718886 ], [ 117.177996, 39.645194 ], [ 117.152742, 39.623532 ], [ 117.10901, 39.625375 ], [ 117.10901, 39.625375 ], [ 117.016004, 39.653949 ], [ 116.983359, 39.638742 ], [ 116.983359, 39.638742 ], [ 116.964265, 39.64335 ], [ 116.948866, 39.680668 ], [ 116.948866, 39.680668 ], [ 116.944555, 39.695405 ], [ 116.944555, 39.695405 ], [ 116.932236, 39.706456 ], [ 116.932236, 39.706456 ], [ 116.90575, 39.688037 ], [ 116.889736, 39.687576 ], [ 116.887272, 39.72533 ], [ 116.916837, 39.731314 ], [ 116.902055, 39.763523 ], [ 116.949482, 39.778703 ], [ 116.918069, 39.84628 ], [ 116.907598, 39.832494 ], [ 116.865714, 39.843982 ], [ 116.812128, 39.889916 ], [ 116.78441, 39.891294 ], [ 116.782563, 39.947749 ], [ 116.757925, 39.967934 ], [ 116.781331, 40.034866 ], [ 116.820135, 40.02845 ], [ 116.831222, 40.051359 ], [ 116.867562, 40.041739 ], [ 116.927924, 40.055024 ], [ 116.945171, 40.04128 ], [ 117.025243, 40.030283 ], [ 117.051728, 40.059605 ], [ 117.105315, 40.074261 ], [ 117.105315, 40.074261 ], [ 117.140423, 40.064185 ], [ 117.159517, 40.077008 ], [ 117.204481, 40.069681 ], [ 117.210024, 40.082045 ] ] ], [ [ [ 117.784696, 39.376938 ], [ 117.74466, 39.354729 ], [ 117.670747, 39.35658 ], [ 117.669515, 39.322792 ], [ 117.594987, 39.349176 ], [ 117.536472, 39.338068 ], [ 117.521074, 39.357043 ], [ 117.570965, 39.404689 ], [ 117.601146, 39.419485 ], [ 117.614081, 39.407001 ], [ 117.668899, 39.412087 ], [ 117.673211, 39.386652 ], [ 117.699696, 39.407463 ], [ 117.765602, 39.400527 ], [ 117.784696, 39.376938 ] ] ], [ [ [ 118.869365, 39.142932 ], [ 118.857662, 39.098824 ], [ 118.82009, 39.108576 ], [ 118.869365, 39.142932 ] ] ] ] } }, +{ "type": "Feature", "properties": { "adcode": "140000", "name": "山西省", "center": [ 112.549248, 37.857014 ], "centroid": [ 112.304761, 37.618555 ], "childrenNum": 11, "level": "province", "parent": { "adcode": 100000 }, "subFeatureIndex": 3, "acroutes": [ 100000 ] }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 114.134639, 40.737314 ], [ 114.162357, 40.71373 ], [ 114.183299, 40.67153 ], [ 114.236269, 40.607043 ], [ 114.283081, 40.590685 ], [ 114.273842, 40.552954 ], [ 114.293552, 40.55159 ], [ 114.282465, 40.494725 ], [ 114.267066, 40.474242 ], [ 114.299711, 40.44009 ], [ 114.286161, 40.425057 ], [ 114.31203, 40.372645 ], [ 114.381015, 40.36307 ], [ 114.390254, 40.351213 ], [ 114.438914, 40.371733 ], [ 114.481413, 40.34802 ], [ 114.530688, 40.345283 ], [ 114.510978, 40.302851 ], [ 114.46971, 40.268155 ], [ 114.406269, 40.246232 ], [ 114.362537, 40.249886 ], [ 114.292936, 40.230242 ], [ 114.255364, 40.236182 ], [ 114.235654, 40.198252 ], [ 114.180219, 40.191395 ], [ 114.135871, 40.175392 ], [ 114.097683, 40.193681 ], [ 114.073046, 40.168533 ], [ 114.073046, 40.168533 ], [ 114.101995, 40.099901 ], [ 114.086596, 40.071513 ], [ 114.045944, 40.056856 ], [ 114.018227, 40.103563 ], [ 113.989278, 40.11226 ], [ 113.959097, 40.033491 ], [ 113.910438, 40.015618 ], [ 114.029314, 39.985819 ], [ 114.028082, 39.959218 ], [ 114.047176, 39.916085 ], [ 114.067502, 39.922511 ], [ 114.17406, 39.897722 ], [ 114.212248, 39.918839 ], [ 114.229494, 39.899558 ], [ 114.204241, 39.885324 ], [ 114.215943, 39.8619 ], [ 114.286776, 39.871087 ], [ 114.285545, 39.858225 ], [ 114.395182, 39.867412 ], [ 114.406885, 39.833413 ], [ 114.390254, 39.819165 ], [ 114.41674, 39.775943 ], [ 114.409964, 39.761683 ], [ 114.408117, 39.652106 ], [ 114.431522, 39.613851 ], [ 114.49558, 39.608318 ], [ 114.51529, 39.564964 ], [ 114.568877, 39.573729 ], [ 114.532536, 39.486027 ], [ 114.501739, 39.476789 ], [ 114.496812, 39.438437 ], [ 114.469095, 39.400989 ], [ 114.466631, 39.329736 ], [ 114.430906, 39.307513 ], [ 114.437066, 39.259337 ], [ 114.416124, 39.242654 ], [ 114.47587, 39.21623 ], [ 114.443841, 39.174023 ], [ 114.388406, 39.176807 ], [ 114.360689, 39.134112 ], [ 114.369928, 39.107648 ], [ 114.345907, 39.075133 ], [ 114.252284, 39.073739 ], [ 114.180835, 39.049111 ], [ 114.157429, 39.061194 ], [ 114.10877, 39.052364 ], [ 114.082901, 39.09325 ], [ 114.082901, 39.09325 ], [ 114.064422, 39.094179 ], [ 114.050872, 39.135969 ], [ 114.006524, 39.122971 ], [ 113.994821, 39.095572 ], [ 113.961561, 39.100681 ], [ 113.930148, 39.063517 ], [ 113.898119, 39.067699 ], [ 113.80696, 38.989595 ], [ 113.776779, 38.986804 ], [ 113.76754, 38.959819 ], [ 113.776163, 38.885788 ], [ 113.795257, 38.860628 ], [ 113.855619, 38.828933 ], [ 113.836525, 38.795824 ], [ 113.839605, 38.7585 ], [ 113.802648, 38.763166 ], [ 113.775547, 38.709949 ], [ 113.720728, 38.713218 ], [ 113.70225, 38.651551 ], [ 113.612939, 38.645942 ], [ 113.603084, 38.587024 ], [ 113.561816, 38.558483 ], [ 113.5612, 38.485909 ], [ 113.583374, 38.459671 ], [ 113.537794, 38.417952 ], [ 113.525475, 38.383245 ], [ 113.557504, 38.343359 ], [ 113.54457, 38.270569 ], [ 113.570439, 38.237202 ], [ 113.598772, 38.22733 ], [ 113.64312, 38.232031 ], [ 113.678844, 38.20523 ], [ 113.711489, 38.213695 ], [ 113.720728, 38.174656 ], [ 113.797105, 38.162894 ], [ 113.831597, 38.16854 ], [ 113.811271, 38.117707 ], [ 113.876561, 38.055059 ], [ 113.872249, 37.990471 ], [ 113.901198, 37.984811 ], [ 113.936307, 37.922993 ], [ 113.959097, 37.906468 ], [ 113.976959, 37.816696 ], [ 114.006524, 37.813386 ], [ 114.044712, 37.761834 ], [ 113.996669, 37.730128 ], [ 113.993589, 37.706932 ], [ 114.068118, 37.721608 ], [ 114.12848, 37.698409 ], [ 114.139567, 37.675676 ], [ 114.115545, 37.619761 ], [ 114.118625, 37.59084 ], [ 114.036705, 37.494037 ], [ 114.014531, 37.42468 ], [ 113.973879, 37.40329 ], [ 113.962792, 37.355734 ], [ 113.90243, 37.310052 ], [ 113.886416, 37.239095 ], [ 113.853155, 37.215269 ], [ 113.832213, 37.167594 ], [ 113.773083, 37.151855 ], [ 113.773699, 37.107004 ], [ 113.758301, 37.075497 ], [ 113.788482, 37.059739 ], [ 113.771851, 37.016745 ], [ 113.791561, 36.98759 ], [ 113.76138, 36.956034 ], [ 113.792793, 36.894796 ], [ 113.773083, 36.85506 ], [ 113.731815, 36.858891 ], [ 113.731815, 36.878521 ], [ 113.696707, 36.882351 ], [ 113.676381, 36.855539 ], [ 113.680692, 36.789907 ], [ 113.600004, 36.752995 ], [ 113.549497, 36.752515 ], [ 113.535946, 36.732373 ], [ 113.499606, 36.740527 ], [ 113.465113, 36.707908 ], [ 113.506997, 36.705029 ], [ 113.476816, 36.655114 ], [ 113.486671, 36.635427 ], [ 113.54457, 36.62342 ], [ 113.539642, 36.594116 ], [ 113.569823, 36.585947 ], [ 113.588917, 36.547974 ], [ 113.559968, 36.528741 ], [ 113.554425, 36.494589 ], [ 113.587069, 36.460904 ], [ 113.635729, 36.451277 ], [ 113.670221, 36.425278 ], [ 113.708409, 36.423352 ], [ 113.731199, 36.363135 ], [ 113.736127, 36.324571 ], [ 113.712105, 36.303353 ], [ 113.716417, 36.262347 ], [ 113.681924, 36.216491 ], [ 113.697939, 36.181719 ], [ 113.651127, 36.174473 ], [ 113.705946, 36.148865 ], [ 113.712721, 36.129533 ], [ 113.655439, 36.125182 ], [ 113.671453, 36.115514 ], [ 113.68562, 36.056026 ], [ 113.660366, 36.034735 ], [ 113.694859, 36.026991 ], [ 113.678844, 35.985841 ], [ 113.648663, 35.994073 ], [ 113.654207, 35.931586 ], [ 113.637576, 35.870019 ], [ 113.660982, 35.837035 ], [ 113.582758, 35.818111 ], [ 113.604932, 35.797727 ], [ 113.587685, 35.736542 ], [ 113.592613, 35.691838 ], [ 113.622794, 35.674825 ], [ 113.625258, 35.632518 ], [ 113.578446, 35.633491 ], [ 113.547649, 35.656835 ], [ 113.55812, 35.621816 ], [ 113.513773, 35.57364 ], [ 113.49899, 35.532254 ], [ 113.439244, 35.507412 ], [ 113.391817, 35.506925 ], [ 113.348085, 35.468429 ], [ 113.31236, 35.481101 ], [ 113.304353, 35.426989 ], [ 113.243375, 35.449418 ], [ 113.189789, 35.44893 ], [ 113.188557, 35.412357 ], [ 113.165151, 35.412845 ], [ 113.149137, 35.350878 ], [ 113.126347, 35.332327 ], [ 113.067217, 35.353806 ], [ 112.996384, 35.362104 ], [ 112.985913, 35.33965 ], [ 112.992072, 35.29619 ], [ 112.936022, 35.284466 ], [ 112.934174, 35.262968 ], [ 112.884283, 35.243909 ], [ 112.822073, 35.258082 ], [ 112.772798, 35.207732 ], [ 112.720443, 35.206265 ], [ 112.628052, 35.263457 ], [ 112.637291, 35.225822 ], [ 112.513487, 35.218489 ], [ 112.390915, 35.239021 ], [ 112.36751, 35.219956 ], [ 112.288053, 35.219956 ], [ 112.304684, 35.251728 ], [ 112.242474, 35.234622 ], [ 112.21722, 35.253195 ], [ 112.094033, 35.279092 ], [ 112.058924, 35.280069 ], [ 112.078634, 35.219467 ], [ 112.03983, 35.194039 ], [ 112.066315, 35.153437 ], [ 112.05646, 35.098615 ], [ 112.062004, 35.056005 ], [ 112.039214, 35.045717 ], [ 112.018888, 35.068742 ], [ 111.97762, 35.067272 ], [ 111.933272, 35.083435 ], [ 111.810084, 35.062374 ], [ 111.807005, 35.032977 ], [ 111.739251, 35.00406 ], [ 111.664107, 34.984449 ], [ 111.681969, 34.9511 ], [ 111.646861, 34.938836 ], [ 111.617911, 34.894671 ], [ 111.592042, 34.881416 ], [ 111.570484, 34.843114 ], [ 111.543999, 34.853428 ], [ 111.502731, 34.829851 ], [ 111.439289, 34.838202 ], [ 111.389398, 34.815113 ], [ 111.345666, 34.831816 ], [ 111.29208, 34.806759 ], [ 111.255123, 34.819535 ], [ 111.232949, 34.789559 ], [ 111.148566, 34.807742 ], [ 111.118385, 34.756623 ], [ 111.035233, 34.740887 ], [ 110.976103, 34.706456 ], [ 110.929907, 34.731543 ], [ 110.89911, 34.661673 ], [ 110.870777, 34.636072 ], [ 110.812263, 34.624746 ], [ 110.780234, 34.648874 ], [ 110.749437, 34.65232 ], [ 110.710017, 34.605045 ], [ 110.610851, 34.607508 ], [ 110.533242, 34.583368 ], [ 110.488279, 34.610956 ], [ 110.424837, 34.588295 ], [ 110.379257, 34.600612 ], [ 110.29549, 34.610956 ], [ 110.23636, 34.670533 ], [ 110.231432, 34.701044 ], [ 110.259149, 34.737937 ], [ 110.232664, 34.80332 ], [ 110.233896, 34.83722 ], [ 110.259149, 34.884853 ], [ 110.257301, 34.934912 ], [ 110.272084, 34.942761 ], [ 110.325671, 35.014844 ], [ 110.369402, 35.158329 ], [ 110.374946, 35.251728 ], [ 110.45009, 35.327933 ], [ 110.477808, 35.413821 ], [ 110.531394, 35.511309 ], [ 110.567735, 35.539559 ], [ 110.609619, 35.632031 ], [ 110.57759, 35.701559 ], [ 110.571431, 35.800639 ], [ 110.550489, 35.838005 ], [ 110.549257, 35.877778 ], [ 110.511684, 35.879718 ], [ 110.516612, 35.918501 ], [ 110.502445, 35.947575 ], [ 110.516612, 35.971796 ], [ 110.49259, 35.994073 ], [ 110.491974, 36.034735 ], [ 110.467953, 36.074893 ], [ 110.447011, 36.164328 ], [ 110.45625, 36.22663 ], [ 110.474112, 36.248352 ], [ 110.474112, 36.306729 ], [ 110.459946, 36.327946 ], [ 110.487047, 36.393972 ], [ 110.489511, 36.430094 ], [ 110.47288, 36.453203 ], [ 110.503677, 36.488335 ], [ 110.488895, 36.556628 ], [ 110.496902, 36.582102 ], [ 110.447627, 36.621018 ], [ 110.426685, 36.657514 ], [ 110.394656, 36.676716 ], [ 110.402663, 36.697352 ], [ 110.438388, 36.685835 ], [ 110.447011, 36.737649 ], [ 110.407591, 36.776007 ], [ 110.423605, 36.818179 ], [ 110.406975, 36.824886 ], [ 110.424221, 36.855539 ], [ 110.376178, 36.882351 ], [ 110.408823, 36.892403 ], [ 110.424221, 36.963685 ], [ 110.381721, 37.002408 ], [ 110.382953, 37.022001 ], [ 110.426685, 37.008621 ], [ 110.417446, 37.027257 ], [ 110.460561, 37.044932 ], [ 110.49567, 37.086956 ], [ 110.535706, 37.115118 ], [ 110.53509, 37.138021 ], [ 110.590525, 37.187145 ], [ 110.651503, 37.256722 ], [ 110.660126, 37.281011 ], [ 110.690307, 37.287201 ], [ 110.678604, 37.317668 ], [ 110.695234, 37.34955 ], [ 110.641648, 37.360015 ], [ 110.630561, 37.372858 ], [ 110.644111, 37.435135 ], [ 110.740198, 37.44939 ], [ 110.759292, 37.474567 ], [ 110.770995, 37.538184 ], [ 110.795017, 37.558586 ], [ 110.771611, 37.594634 ], [ 110.763604, 37.639668 ], [ 110.793169, 37.650567 ], [ 110.775306, 37.680886 ], [ 110.706321, 37.705511 ], [ 110.716792, 37.728708 ], [ 110.750669, 37.736281 ], [ 110.735886, 37.77035 ], [ 110.680452, 37.790216 ], [ 110.59422, 37.922049 ], [ 110.522771, 37.955088 ], [ 110.528315, 37.990471 ], [ 110.507989, 38.013107 ], [ 110.501829, 38.097929 ], [ 110.519692, 38.130889 ], [ 110.509221, 38.192061 ], [ 110.528315, 38.211814 ], [ 110.565887, 38.215105 ], [ 110.57759, 38.297345 ], [ 110.601612, 38.308147 ], [ 110.661358, 38.308617 ], [ 110.701394, 38.353215 ], [ 110.746973, 38.366355 ], [ 110.77777, 38.440924 ], [ 110.796864, 38.453579 ], [ 110.840596, 38.439986 ], [ 110.874473, 38.453579 ], [ 110.870777, 38.510265 ], [ 110.907733, 38.521035 ], [ 110.920052, 38.581878 ], [ 110.898494, 38.587024 ], [ 110.880632, 38.626776 ], [ 110.916357, 38.673981 ], [ 110.915125, 38.704345 ], [ 110.965016, 38.755699 ], [ 111.009363, 38.847579 ], [ 110.995813, 38.868084 ], [ 111.016755, 38.889981 ], [ 111.009979, 38.932823 ], [ 110.980414, 38.970056 ], [ 110.998276, 38.998433 ], [ 111.038313, 39.020289 ], [ 111.094363, 39.030053 ], [ 111.138095, 39.064447 ], [ 111.147334, 39.100681 ], [ 111.173819, 39.135041 ], [ 111.163348, 39.152678 ], [ 111.219399, 39.244044 ], [ 111.213239, 39.257021 ], [ 111.247732, 39.302419 ], [ 111.202152, 39.305197 ], [ 111.179363, 39.326959 ], [ 111.186138, 39.35149 ], [ 111.155341, 39.338531 ], [ 111.159037, 39.362596 ], [ 111.125776, 39.366297 ], [ 111.143022, 39.407926 ], [ 111.171971, 39.423183 ], [ 111.287152, 39.417173 ], [ 111.358601, 39.432428 ], [ 111.385086, 39.489722 ], [ 111.431282, 39.508656 ], [ 111.422043, 39.539123 ], [ 111.441137, 39.59679 ], [ 111.460847, 39.606935 ], [ 111.445448, 39.640124 ], [ 111.497187, 39.661781 ], [ 111.525521, 39.662242 ], [ 111.61668, 39.633211 ], [ 111.646245, 39.644272 ], [ 111.707839, 39.621227 ], [ 111.722621, 39.606013 ], [ 111.783599, 39.58895 ], [ 111.842729, 39.620305 ], [ 111.87907, 39.606013 ], [ 111.9382, 39.623071 ], [ 111.925265, 39.66731 ], [ 111.959758, 39.692642 ], [ 111.970229, 39.796638 ], [ 112.012729, 39.827438 ], [ 112.042294, 39.886243 ], [ 112.07617, 39.919298 ], [ 112.133453, 40.001866 ], [ 112.142076, 40.027076 ], [ 112.182112, 40.061437 ], [ 112.183344, 40.083877 ], [ 112.232003, 40.133311 ], [ 112.232619, 40.169905 ], [ 112.299756, 40.21105 ], [ 112.310227, 40.256281 ], [ 112.349031, 40.257194 ], [ 112.418017, 40.295091 ], [ 112.456205, 40.300112 ], [ 112.511639, 40.269068 ], [ 112.6299, 40.235725 ], [ 112.712436, 40.178593 ], [ 112.744464, 40.167161 ], [ 112.848558, 40.206937 ], [ 112.898449, 40.329317 ], [ 113.03334, 40.368997 ], [ 113.083231, 40.374925 ], [ 113.251382, 40.413211 ], [ 113.27602, 40.388601 ], [ 113.316672, 40.319736 ], [ 113.387505, 40.319279 ], [ 113.500222, 40.334335 ], [ 113.559968, 40.348476 ], [ 113.688699, 40.448288 ], [ 113.763228, 40.473787 ], [ 113.794641, 40.517932 ], [ 113.850691, 40.460583 ], [ 113.890112, 40.466503 ], [ 113.948626, 40.514747 ], [ 114.011452, 40.515657 ], [ 114.061959, 40.52885 ], [ 114.080437, 40.547952 ], [ 114.076741, 40.575686 ], [ 114.041633, 40.608861 ], [ 114.07243, 40.679246 ], [ 114.063806, 40.706925 ], [ 114.084748, 40.729605 ], [ 114.134639, 40.737314 ] ] ] ] } }, +{ "type": "Feature", "properties": { "adcode": "150000", "name": "内蒙古自治区", "center": [ 111.670801, 40.818311 ], "centroid": [ 114.077404, 44.331072 ], "childrenNum": 12, "level": "province", "parent": { "adcode": 100000 }, "subFeatureIndex": 4, "acroutes": [ 100000 ] }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 111.125776, 39.366297 ], [ 111.087588, 39.376013 ], [ 111.098059, 39.401914 ], [ 111.064182, 39.400989 ], [ 111.058639, 39.447681 ], [ 111.10545, 39.472631 ], [ 111.10545, 39.497573 ], [ 111.148566, 39.531277 ], [ 111.154725, 39.569116 ], [ 111.136863, 39.587106 ], [ 111.101138, 39.559428 ], [ 111.017371, 39.552045 ], [ 110.958856, 39.519275 ], [ 110.891103, 39.509118 ], [ 110.869545, 39.494341 ], [ 110.782698, 39.38804 ], [ 110.73835, 39.348713 ], [ 110.731575, 39.30705 ], [ 110.702626, 39.273701 ], [ 110.626249, 39.266751 ], [ 110.596684, 39.282966 ], [ 110.566503, 39.320014 ], [ 110.559728, 39.351027 ], [ 110.524003, 39.382952 ], [ 110.482735, 39.360745 ], [ 110.434692, 39.381101 ], [ 110.429764, 39.341308 ], [ 110.385417, 39.310291 ], [ 110.257917, 39.407001 ], [ 110.243751, 39.423645 ], [ 110.152592, 39.45415 ], [ 110.12549, 39.432891 ], [ 110.136577, 39.39174 ], [ 110.161831, 39.387115 ], [ 110.184005, 39.355192 ], [ 110.217881, 39.281113 ], [ 110.109476, 39.249606 ], [ 110.041107, 39.21623 ], [ 109.962267, 39.212056 ], [ 109.90252, 39.271848 ], [ 109.871723, 39.243581 ], [ 109.961035, 39.191651 ], [ 109.893897, 39.141075 ], [ 109.92223, 39.107183 ], [ 109.890818, 39.103932 ], [ 109.851397, 39.122971 ], [ 109.793499, 39.074204 ], [ 109.762086, 39.057476 ], [ 109.72513, 39.018429 ], [ 109.665384, 38.981687 ], [ 109.685094, 38.968195 ], [ 109.672159, 38.928167 ], [ 109.624116, 38.85457 ], [ 109.549587, 38.805618 ], [ 109.511399, 38.833595 ], [ 109.444262, 38.782763 ], [ 109.404226, 38.720689 ], [ 109.338936, 38.701542 ], [ 109.329081, 38.66043 ], [ 109.367269, 38.627711 ], [ 109.331545, 38.597783 ], [ 109.276726, 38.623035 ], [ 109.196654, 38.552867 ], [ 109.175712, 38.518694 ], [ 109.128901, 38.480288 ], [ 109.054372, 38.433892 ], [ 109.051292, 38.385122 ], [ 109.007561, 38.359316 ], [ 108.961981, 38.26493 ], [ 108.976148, 38.245192 ], [ 108.938575, 38.207582 ], [ 108.964445, 38.154894 ], [ 109.069155, 38.091336 ], [ 109.050676, 38.055059 ], [ 109.06977, 38.023008 ], [ 109.037742, 38.021593 ], [ 109.018648, 37.971602 ], [ 108.982923, 37.964053 ], [ 108.9743, 37.931962 ], [ 108.93488, 37.922521 ], [ 108.893612, 37.978207 ], [ 108.883141, 38.01405 ], [ 108.830786, 38.049875 ], [ 108.797525, 38.04799 ], [ 108.82709, 37.989056 ], [ 108.798141, 37.93385 ], [ 108.791982, 37.872934 ], [ 108.799989, 37.784068 ], [ 108.784591, 37.764673 ], [ 108.791982, 37.700303 ], [ 108.777815, 37.683728 ], [ 108.720533, 37.683728 ], [ 108.699591, 37.669518 ], [ 108.628142, 37.651988 ], [ 108.532671, 37.690832 ], [ 108.485244, 37.678044 ], [ 108.422418, 37.648672 ], [ 108.301078, 37.640616 ], [ 108.293071, 37.656726 ], [ 108.24626, 37.665728 ], [ 108.205608, 37.655779 ], [ 108.193905, 37.638246 ], [ 108.134159, 37.622131 ], [ 108.055318, 37.652462 ], [ 108.025137, 37.649619 ], [ 108.012819, 37.66857 ], [ 108.025753, 37.696041 ], [ 107.993109, 37.735335 ], [ 107.982022, 37.787378 ], [ 107.884703, 37.808186 ], [ 107.842819, 37.828987 ], [ 107.732566, 37.84931 ], [ 107.684523, 37.888522 ], [ 107.65003, 37.86443 ], [ 107.560719, 37.893717 ], [ 107.49235, 37.944706 ], [ 107.448618, 37.933378 ], [ 107.411662, 37.948009 ], [ 107.440611, 37.995659 ], [ 107.3938, 38.014993 ], [ 107.33159, 38.086625 ], [ 107.240431, 38.111586 ], [ 107.19054, 38.153953 ], [ 107.138801, 38.161011 ], [ 107.119091, 38.134185 ], [ 107.071047, 38.138892 ], [ 107.051337, 38.122886 ], [ 107.010069, 38.120532 ], [ 106.942316, 38.132302 ], [ 106.858548, 38.156306 ], [ 106.779092, 38.171833 ], [ 106.737824, 38.197706 ], [ 106.654672, 38.22921 ], [ 106.627571, 38.232501 ], [ 106.555506, 38.263521 ], [ 106.482209, 38.319417 ], [ 106.599854, 38.389812 ], [ 106.647897, 38.470917 ], [ 106.66268, 38.601524 ], [ 106.709491, 38.718821 ], [ 106.756302, 38.748699 ], [ 106.837606, 38.847579 ], [ 106.954019, 38.941202 ], [ 106.971881, 39.026333 ], [ 106.96757, 39.054688 ], [ 106.933693, 39.076527 ], [ 106.878874, 39.091392 ], [ 106.859164, 39.107648 ], [ 106.825288, 39.19397 ], [ 106.795723, 39.214375 ], [ 106.790795, 39.241263 ], [ 106.806193, 39.277407 ], [ 106.806809, 39.318625 ], [ 106.781556, 39.371849 ], [ 106.751375, 39.381564 ], [ 106.683622, 39.357506 ], [ 106.643586, 39.357969 ], [ 106.602318, 39.37555 ], [ 106.556122, 39.322329 ], [ 106.525325, 39.308439 ], [ 106.511774, 39.272311 ], [ 106.402753, 39.291767 ], [ 106.280181, 39.262118 ], [ 106.29558, 39.167992 ], [ 106.285109, 39.146181 ], [ 106.251232, 39.131327 ], [ 106.192718, 39.142932 ], [ 106.170544, 39.163352 ], [ 106.145907, 39.153142 ], [ 106.096631, 39.084889 ], [ 106.078153, 39.026333 ], [ 106.087392, 39.006339 ], [ 106.060907, 38.96866 ], [ 106.021487, 38.953769 ], [ 105.97098, 38.909077 ], [ 105.992538, 38.857366 ], [ 105.909386, 38.791159 ], [ 105.908154, 38.737496 ], [ 105.88598, 38.716953 ], [ 105.894603, 38.696405 ], [ 105.852719, 38.641735 ], [ 105.874277, 38.593105 ], [ 105.856415, 38.569714 ], [ 105.863806, 38.53508 ], [ 105.836705, 38.476071 ], [ 105.850872, 38.443736 ], [ 105.827466, 38.432486 ], [ 105.835473, 38.387467 ], [ 105.821307, 38.366824 ], [ 105.86627, 38.296406 ], [ 105.842248, 38.240962 ], [ 105.802828, 38.220277 ], [ 105.775111, 38.186887 ], [ 105.76772, 38.121474 ], [ 105.780655, 38.084741 ], [ 105.840401, 38.004147 ], [ 105.799749, 37.939986 ], [ 105.80406, 37.862068 ], [ 105.760944, 37.799674 ], [ 105.677177, 37.771769 ], [ 105.622358, 37.777919 ], [ 105.616199, 37.722555 ], [ 105.598952, 37.699356 ], [ 105.467141, 37.695094 ], [ 105.4037, 37.710246 ], [ 105.315004, 37.702197 ], [ 105.221998, 37.677097 ], [ 105.187505, 37.657674 ], [ 105.111128, 37.633981 ], [ 105.027977, 37.580881 ], [ 104.866601, 37.566651 ], [ 104.805007, 37.539133 ], [ 104.623305, 37.522522 ], [ 104.433595, 37.515402 ], [ 104.419429, 37.511604 ], [ 104.407726, 37.464592 ], [ 104.322726, 37.44844 ], [ 104.287002, 37.428007 ], [ 104.237727, 37.411847 ], [ 104.183524, 37.406618 ], [ 104.089285, 37.465067 ], [ 103.935916, 37.572818 ], [ 103.874938, 37.604117 ], [ 103.841062, 37.64725 ], [ 103.683381, 37.777919 ], [ 103.627947, 37.797783 ], [ 103.40744, 37.860651 ], [ 103.362477, 38.037621 ], [ 103.368636, 38.08898 ], [ 103.53494, 38.156776 ], [ 103.507838, 38.280905 ], [ 103.465339, 38.353215 ], [ 103.416063, 38.404821 ], [ 103.85954, 38.64454 ], [ 104.011677, 38.85923 ], [ 104.044322, 38.895105 ], [ 104.173053, 38.94446 ], [ 104.196459, 38.9882 ], [ 104.190915, 39.042139 ], [ 104.207546, 39.083495 ], [ 104.171205, 39.160567 ], [ 104.047401, 39.297788 ], [ 104.073271, 39.351953 ], [ 104.089901, 39.419947 ], [ 103.955626, 39.456923 ], [ 103.85338, 39.461543 ], [ 103.728961, 39.430117 ], [ 103.595302, 39.386652 ], [ 103.428998, 39.353341 ], [ 103.344615, 39.331588 ], [ 103.259615, 39.263971 ], [ 103.188166, 39.215302 ], [ 103.133347, 39.192579 ], [ 103.007696, 39.099753 ], [ 102.883892, 39.120649 ], [ 102.616574, 39.171703 ], [ 102.579002, 39.183301 ], [ 102.45335, 39.255167 ], [ 102.3548, 39.231993 ], [ 102.276576, 39.188868 ], [ 102.050526, 39.141075 ], [ 102.012338, 39.127149 ], [ 101.902701, 39.111827 ], [ 101.833715, 39.08907 ], [ 101.926106, 39.000758 ], [ 101.955055, 38.985874 ], [ 102.045599, 38.904885 ], [ 102.075164, 38.891378 ], [ 101.941505, 38.808883 ], [ 101.873751, 38.733761 ], [ 101.777049, 38.66043 ], [ 101.672955, 38.6908 ], [ 101.601506, 38.65529 ], [ 101.562702, 38.713218 ], [ 101.412413, 38.764099 ], [ 101.331109, 38.777164 ], [ 101.307087, 38.80282 ], [ 101.34158, 38.822406 ], [ 101.33542, 38.847113 ], [ 101.24303, 38.860628 ], [ 101.237486, 38.907214 ], [ 101.198682, 38.943064 ], [ 101.228863, 39.020754 ], [ 101.117378, 38.975174 ], [ 100.969553, 38.946788 ], [ 100.961545, 39.005874 ], [ 100.901799, 39.030053 ], [ 100.875314, 39.002619 ], [ 100.835278, 39.025869 ], [ 100.829118, 39.075133 ], [ 100.864227, 39.106719 ], [ 100.842669, 39.199999 ], [ 100.842053, 39.405614 ], [ 100.707778, 39.404689 ], [ 100.606764, 39.387577 ], [ 100.498975, 39.400527 ], [ 100.500823, 39.481408 ], [ 100.44354, 39.485565 ], [ 100.326512, 39.509118 ], [ 100.301258, 39.572345 ], [ 100.314193, 39.606935 ], [ 100.250135, 39.685274 ], [ 100.128179, 39.702312 ], [ 100.040716, 39.757083 ], [ 99.958796, 39.769504 ], [ 99.904593, 39.785601 ], [ 99.822058, 39.860063 ], [ 99.672384, 39.888079 ], [ 99.469124, 39.875221 ], [ 99.440791, 39.885783 ], [ 99.459885, 39.898181 ], [ 99.491298, 39.884406 ], [ 99.533182, 39.891753 ], [ 99.714268, 39.972061 ], [ 99.751225, 40.006909 ], [ 99.841152, 40.013326 ], [ 99.927383, 40.063727 ], [ 99.955716, 40.150695 ], [ 100.007455, 40.20008 ], [ 100.169447, 40.277743 ], [ 100.169447, 40.541131 ], [ 100.242744, 40.618855 ], [ 100.237201, 40.716905 ], [ 100.224882, 40.727337 ], [ 100.107853, 40.875475 ], [ 100.057346, 40.908049 ], [ 99.985897, 40.909858 ], [ 99.673, 40.93292 ], [ 99.565827, 40.846961 ], [ 99.174705, 40.858278 ], [ 99.172858, 40.747289 ], [ 99.12543, 40.715091 ], [ 99.102025, 40.676522 ], [ 99.041662, 40.693767 ], [ 98.984996, 40.782644 ], [ 98.790975, 40.705564 ], [ 98.80699, 40.660181 ], [ 98.802678, 40.607043 ], [ 98.762642, 40.639748 ], [ 98.72199, 40.657911 ], [ 98.689345, 40.691952 ], [ 98.668403, 40.773128 ], [ 98.569853, 40.746836 ], [ 98.627751, 40.677884 ], [ 98.344419, 40.568413 ], [ 98.333332, 40.918903 ], [ 98.25018, 40.93925 ], [ 98.184891, 40.988056 ], [ 98.142391, 41.001607 ], [ 97.971776, 41.09774 ], [ 97.903407, 41.168057 ], [ 97.629314, 41.440498 ], [ 97.613915, 41.477276 ], [ 97.84674, 41.656379 ], [ 97.653335, 41.986856 ], [ 97.500582, 42.243894 ], [ 97.371235, 42.457076 ], [ 97.172903, 42.795257 ], [ 97.28254, 42.782081 ], [ 97.831958, 42.706047 ], [ 98.195362, 42.653251 ], [ 98.546447, 42.638284 ], [ 98.962822, 42.607018 ], [ 99.51224, 42.568244 ], [ 99.969267, 42.647969 ], [ 100.004376, 42.648849 ], [ 100.272309, 42.636523 ], [ 100.32528, 42.690213 ], [ 100.826655, 42.675255 ], [ 100.862995, 42.671295 ], [ 101.291689, 42.586312 ], [ 101.557775, 42.529887 ], [ 101.770274, 42.509597 ], [ 101.803534, 42.503861 ], [ 101.877447, 42.432345 ], [ 102.070236, 42.232374 ], [ 102.093642, 42.223512 ], [ 102.449039, 42.144133 ], [ 102.540814, 42.162323 ], [ 102.621502, 42.154338 ], [ 102.712045, 42.153007 ], [ 103.021862, 42.028212 ], [ 103.20726, 41.96283 ], [ 103.418527, 41.882233 ], [ 103.454868, 41.877332 ], [ 103.868779, 41.802427 ], [ 104.080046, 41.805104 ], [ 104.30856, 41.840782 ], [ 104.418813, 41.860397 ], [ 104.530298, 41.875104 ], [ 104.524138, 41.661745 ], [ 104.68921, 41.6452 ], [ 104.803775, 41.652355 ], [ 104.923267, 41.654143 ], [ 105.009498, 41.583007 ], [ 105.230621, 41.751103 ], [ 105.291599, 41.749763 ], [ 105.385221, 41.797073 ], [ 105.589713, 41.888471 ], [ 105.74185, 41.949033 ], [ 106.01348, 42.032213 ], [ 106.344855, 42.149457 ], [ 106.372572, 42.161436 ], [ 106.612789, 42.241679 ], [ 106.785867, 42.291281 ], [ 107.051337, 42.319166 ], [ 107.271844, 42.364285 ], [ 107.303872, 42.412465 ], [ 107.46648, 42.458842 ], [ 107.501589, 42.456635 ], [ 107.57427, 42.412907 ], [ 107.736262, 42.415116 ], [ 107.939522, 42.403628 ], [ 107.986949, 42.413349 ], [ 108.022058, 42.433229 ], [ 108.089195, 42.436321 ], [ 108.238252, 42.460167 ], [ 108.298614, 42.438529 ], [ 108.532671, 42.442945 ], [ 108.705134, 42.413349 ], [ 108.798757, 42.415116 ], [ 108.845569, 42.395673 ], [ 108.983539, 42.449128 ], [ 109.026039, 42.458401 ], [ 109.291509, 42.435879 ], [ 109.486761, 42.458842 ], [ 109.544044, 42.472528 ], [ 109.683862, 42.558988 ], [ 109.733753, 42.579262 ], [ 109.906216, 42.635643 ], [ 110.108244, 42.642687 ], [ 110.139657, 42.674815 ], [ 110.34846, 42.742098 ], [ 110.437156, 42.781203 ], [ 110.469801, 42.839156 ], [ 110.631177, 42.936061 ], [ 110.689691, 43.02144 ], [ 110.687227, 43.036314 ], [ 110.736502, 43.089657 ], [ 110.769763, 43.099272 ], [ 110.82027, 43.149067 ], [ 111.02045, 43.329998 ], [ 111.069725, 43.357852 ], [ 111.151029, 43.38004 ], [ 111.183674, 43.396132 ], [ 111.354289, 43.436125 ], [ 111.400485, 43.472618 ], [ 111.456535, 43.494329 ], [ 111.564325, 43.490422 ], [ 111.606209, 43.513863 ], [ 111.79407, 43.672068 ], [ 111.891388, 43.6738 ], [ 111.951135, 43.693275 ], [ 111.970845, 43.748205 ], [ 111.959758, 43.823382 ], [ 111.870447, 43.940279 ], [ 111.773128, 44.010479 ], [ 111.702295, 44.034147 ], [ 111.662875, 44.061247 ], [ 111.559397, 44.171238 ], [ 111.541535, 44.206855 ], [ 111.534144, 44.26217 ], [ 111.507042, 44.294305 ], [ 111.428818, 44.319573 ], [ 111.415883, 44.35724 ], [ 111.427586, 44.394455 ], [ 111.478709, 44.488884 ], [ 111.514434, 44.507666 ], [ 111.530448, 44.55033 ], [ 111.569868, 44.57634 ], [ 111.560629, 44.647062 ], [ 111.585267, 44.705789 ], [ 111.624687, 44.778477 ], [ 111.69244, 44.859983 ], [ 111.764505, 44.969325 ], [ 111.903707, 45.052252 ], [ 112.002874, 45.090713 ], [ 112.071243, 45.096206 ], [ 112.113743, 45.072965 ], [ 112.396459, 45.064512 ], [ 112.438959, 45.071697 ], [ 112.540589, 45.001072 ], [ 112.599719, 44.930783 ], [ 112.712436, 44.879494 ], [ 112.850406, 44.840466 ], [ 112.937869, 44.840042 ], [ 113.037652, 44.822641 ], [ 113.11526, 44.799714 ], [ 113.503918, 44.777628 ], [ 113.540874, 44.759358 ], [ 113.631417, 44.745333 ], [ 113.712105, 44.788247 ], [ 113.798953, 44.849377 ], [ 113.861778, 44.863377 ], [ 113.907358, 44.915104 ], [ 114.065038, 44.931206 ], [ 114.116777, 44.957045 ], [ 114.158045, 44.994301 ], [ 114.19069, 45.036607 ], [ 114.313262, 45.107189 ], [ 114.347139, 45.119436 ], [ 114.409348, 45.179371 ], [ 114.459855, 45.21353 ], [ 114.519602, 45.283893 ], [ 114.539928, 45.325985 ], [ 114.551014, 45.387383 ], [ 114.600906, 45.403773 ], [ 114.745035, 45.438217 ], [ 114.920578, 45.386122 ], [ 114.983404, 45.379397 ], [ 115.178041, 45.396209 ], [ 115.36467, 45.392427 ], [ 115.586408, 45.440317 ], [ 115.699741, 45.45963 ], [ 115.864197, 45.572853 ], [ 115.936878, 45.632727 ], [ 116.026805, 45.661177 ], [ 116.035428, 45.685013 ], [ 116.1155, 45.679577 ], [ 116.17463, 45.688775 ], [ 116.217746, 45.72221 ], [ 116.22329, 45.747273 ], [ 116.260862, 45.776082 ], [ 116.286731, 45.775247 ], [ 116.278108, 45.831152 ], [ 116.288579, 45.839074 ], [ 116.243, 45.876169 ], [ 116.271949, 45.966926 ], [ 116.414231, 46.133896 ], [ 116.439484, 46.137628 ], [ 116.536187, 46.23251 ], [ 116.573143, 46.258998 ], [ 116.585462, 46.292504 ], [ 116.673541, 46.325163 ], [ 116.745606, 46.327642 ], [ 116.81336, 46.355737 ], [ 116.834302, 46.384229 ], [ 116.876801, 46.375559 ], [ 117.097308, 46.356976 ], [ 117.247597, 46.366888 ], [ 117.372017, 46.36028 ], [ 117.383719, 46.394962 ], [ 117.375712, 46.416421 ], [ 117.392343, 46.463023 ], [ 117.447777, 46.528117 ], [ 117.42006, 46.582029 ], [ 117.49582, 46.600535 ], [ 117.596218, 46.603414 ], [ 117.622704, 46.596012 ], [ 117.641182, 46.558166 ], [ 117.704008, 46.516587 ], [ 117.748355, 46.521941 ], [ 117.769913, 46.537586 ], [ 117.813645, 46.530588 ], [ 117.870927, 46.549935 ], [ 117.868464, 46.575447 ], [ 117.914659, 46.607936 ], [ 117.982412, 46.614925 ], [ 117.992883, 46.631366 ], [ 118.04647, 46.631366 ], [ 118.124078, 46.678195 ], [ 118.192448, 46.682711 ], [ 118.238643, 46.709392 ], [ 118.274984, 46.715957 ], [ 118.316252, 46.73934 ], [ 118.41049, 46.728265 ], [ 118.446831, 46.704467 ], [ 118.586033, 46.692975 ], [ 118.639004, 46.721291 ], [ 118.677192, 46.6979 ], [ 118.788061, 46.687227 ], [ 118.788061, 46.717598 ], [ 118.845343, 46.771731 ], [ 118.914329, 46.77501 ], [ 118.912481, 46.733188 ], [ 118.951285, 46.722111 ], [ 119.011647, 46.745902 ], [ 119.073857, 46.676552 ], [ 119.123132, 46.642872 ], [ 119.152081, 46.658072 ], [ 119.20074, 46.648213 ], [ 119.26295, 46.649034 ], [ 119.325776, 46.608759 ], [ 119.357805, 46.619447 ], [ 119.374435, 46.603414 ], [ 119.431718, 46.638763 ], [ 119.491464, 46.629311 ], [ 119.557985, 46.633832 ], [ 119.598637, 46.618214 ], [ 119.656535, 46.625612 ], [ 119.682405, 46.605058 ], [ 119.677477, 46.584908 ], [ 119.739687, 46.615336 ], [ 119.783419, 46.626023 ], [ 119.8136, 46.66834 ], [ 119.804361, 46.68189 ], [ 119.859179, 46.669572 ], [ 119.911534, 46.669572 ], [ 119.93494, 46.712674 ], [ 119.917078, 46.758203 ], [ 119.936172, 46.790173 ], [ 119.920157, 46.853238 ], [ 119.926933, 46.903963 ], [ 119.859795, 46.917046 ], [ 119.845013, 46.964852 ], [ 119.795122, 47.013024 ], [ 119.79081, 47.04525 ], [ 119.806825, 47.055037 ], [ 119.763093, 47.13082 ], [ 119.716282, 47.195518 ], [ 119.627586, 47.247544 ], [ 119.56784, 47.248357 ], [ 119.559217, 47.303172 ], [ 119.450812, 47.353065 ], [ 119.437877, 47.378602 ], [ 119.386138, 47.397645 ], [ 119.365812, 47.423161 ], [ 119.32208, 47.42721 ], [ 119.365812, 47.47739 ], [ 119.205052, 47.520249 ], [ 119.152081, 47.540453 ], [ 119.134219, 47.664335 ], [ 118.773278, 47.771034 ], [ 118.568171, 47.992187 ], [ 118.441903, 47.995791 ], [ 118.422193, 48.01461 ], [ 118.37415, 48.016612 ], [ 118.351976, 48.006203 ], [ 118.284839, 48.011007 ], [ 118.238027, 48.031422 ], [ 118.238643, 48.041826 ], [ 118.150564, 48.036224 ], [ 118.124694, 48.047427 ], [ 118.107448, 48.031021 ], [ 118.052014, 48.01421 ], [ 117.96147, 48.011007 ], [ 117.886942, 48.025418 ], [ 117.813645, 48.016212 ], [ 117.529081, 47.782697 ], [ 117.519226, 47.761782 ], [ 117.493357, 47.758563 ], [ 117.384335, 47.641356 ], [ 117.094844, 47.8241 ], [ 116.879265, 47.893968 ], [ 116.791186, 47.89758 ], [ 116.669846, 47.890758 ], [ 116.453035, 47.837358 ], [ 116.26579, 47.876711 ], [ 116.130283, 47.823296 ], [ 116.111189, 47.811642 ], [ 115.968291, 47.689721 ], [ 115.939342, 47.683275 ], [ 115.580249, 47.921649 ], [ 115.539597, 48.104607 ], [ 115.545141, 48.134971 ], [ 115.529126, 48.155336 ], [ 115.81061, 48.257042 ], [ 115.822929, 48.259432 ], [ 115.799523, 48.514982 ], [ 115.83032, 48.560156 ], [ 116.069305, 48.811437 ], [ 116.077928, 48.822471 ], [ 116.048363, 48.873274 ], [ 116.428397, 49.430659 ], [ 116.717889, 49.847288 ], [ 116.736367, 49.847674 ], [ 117.068974, 49.695389 ], [ 117.278394, 49.636512 ], [ 117.485349, 49.633024 ], [ 117.638102, 49.574847 ], [ 117.809333, 49.521263 ], [ 117.849369, 49.551557 ], [ 117.866, 49.591532 ], [ 117.950999, 49.596187 ], [ 117.995963, 49.623332 ], [ 118.011362, 49.614803 ], [ 118.082811, 49.616741 ], [ 118.129622, 49.669446 ], [ 118.156723, 49.660149 ], [ 118.211542, 49.690744 ], [ 118.220781, 49.729831 ], [ 118.284223, 49.743755 ], [ 118.315636, 49.766953 ], [ 118.384005, 49.783958 ], [ 118.398787, 49.802502 ], [ 118.385853, 49.827217 ], [ 118.443751, 49.835709 ], [ 118.483787, 49.830691 ], [ 118.485019, 49.866194 ], [ 118.531214, 49.887791 ], [ 118.574946, 49.931342 ], [ 118.605127, 49.926719 ], [ 118.672264, 49.955991 ], [ 118.739402, 49.946364 ], [ 118.761576, 49.959456 ], [ 118.791757, 49.955606 ], [ 118.964836, 49.988708 ], [ 118.982082, 49.979087 ], [ 119.090487, 49.985629 ], [ 119.12498, 50.019095 ], [ 119.163168, 50.027554 ], [ 119.193965, 50.069826 ], [ 119.190269, 50.087877 ], [ 119.236465, 50.075204 ], [ 119.290052, 50.121655 ], [ 119.309762, 50.161161 ], [ 119.350414, 50.166145 ], [ 119.339327, 50.192206 ], [ 119.358421, 50.197953 ], [ 119.319001, 50.220933 ], [ 119.339943, 50.244668 ], [ 119.35103, 50.303953 ], [ 119.381827, 50.324208 ], [ 119.358421, 50.358965 ], [ 119.322696, 50.352474 ], [ 119.277117, 50.366218 ], [ 119.259871, 50.345218 ], [ 119.232153, 50.365455 ], [ 119.188422, 50.347509 ], [ 119.155777, 50.364691 ], [ 119.176719, 50.378814 ], [ 119.125596, 50.389118 ], [ 119.165016, 50.422683 ], [ 119.217371, 50.414675 ], [ 119.22353, 50.441363 ], [ 119.250631, 50.448604 ], [ 119.262334, 50.490124 ], [ 119.264182, 50.536933 ], [ 119.295595, 50.573814 ], [ 119.281428, 50.601551 ], [ 119.298059, 50.616743 ], [ 119.361501, 50.632689 ], [ 119.394145, 50.667219 ], [ 119.385522, 50.682769 ], [ 119.430486, 50.684286 ], [ 119.450196, 50.695281 ], [ 119.506862, 50.763846 ], [ 119.496391, 50.771795 ], [ 119.515485, 50.814165 ], [ 119.498855, 50.827776 ], [ 119.491464, 50.87878 ], [ 119.569688, 50.933879 ], [ 119.598637, 50.984767 ], [ 119.630666, 51.00925 ], [ 119.678093, 51.016404 ], [ 119.726753, 51.051028 ], [ 119.719361, 51.075099 ], [ 119.764325, 51.092017 ], [ 119.752622, 51.117193 ], [ 119.771716, 51.124331 ], [ 119.788346, 51.174636 ], [ 119.760629, 51.212516 ], [ 119.784035, 51.22601 ], [ 119.821607, 51.21439 ], [ 119.797586, 51.243622 ], [ 119.828383, 51.263099 ], [ 119.811136, 51.281071 ], [ 119.885049, 51.302777 ], [ 119.883817, 51.336813 ], [ 119.946643, 51.360736 ], [ 119.914614, 51.374187 ], [ 119.910918, 51.390994 ], [ 119.97128, 51.40033 ], [ 119.982983, 51.445112 ], [ 120.002693, 51.459283 ], [ 119.982367, 51.482396 ], [ 119.985447, 51.505125 ], [ 120.017476, 51.52114 ], [ 120.052584, 51.560967 ], [ 120.035954, 51.583657 ], [ 120.05936, 51.634203 ], [ 120.100628, 51.649058 ], [ 120.087077, 51.678013 ], [ 120.172693, 51.679868 ], [ 120.226279, 51.717703 ], [ 120.294649, 51.752171 ], [ 120.317438, 51.785873 ], [ 120.363634, 51.789945 ], [ 120.40675, 51.81659 ], [ 120.40059, 51.833605 ], [ 120.480046, 51.855049 ], [ 120.481278, 51.885719 ], [ 120.549032, 51.882394 ], [ 120.548416, 51.907877 ], [ 120.656821, 51.926333 ], [ 120.66298, 51.958061 ], [ 120.704864, 51.983501 ], [ 120.717799, 52.015556 ], [ 120.691929, 52.026973 ], [ 120.690698, 52.047221 ], [ 120.717183, 52.072978 ], [ 120.753523, 52.085483 ], [ 120.76769, 52.10938 ], [ 120.760299, 52.136937 ], [ 120.786784, 52.15787 ], [ 120.745516, 52.20594 ], [ 120.755371, 52.258355 ], [ 120.715951, 52.261286 ], [ 120.695625, 52.290214 ], [ 120.653741, 52.302658 ], [ 120.627256, 52.323878 ], [ 120.62356, 52.361172 ], [ 120.653741, 52.371038 ], [ 120.64943, 52.3904 ], [ 120.688234, 52.427637 ], [ 120.68269, 52.464479 ], [ 120.706712, 52.492909 ], [ 120.687002, 52.511489 ], [ 120.734429, 52.536977 ], [ 120.690698, 52.547532 ], [ 120.658669, 52.56718 ], [ 120.62664, 52.570818 ], [ 120.605082, 52.589364 ], [ 120.56135, 52.595544 ], [ 120.483742, 52.630066 ], [ 120.462184, 52.64532 ], [ 120.396895, 52.616261 ], [ 120.289721, 52.623527 ], [ 120.194866, 52.578819 ], [ 120.125265, 52.586819 ], [ 120.07599, 52.586092 ], [ 120.049505, 52.598453 ], [ 120.035338, 52.646409 ], [ 120.071063, 52.70628 ], [ 120.031642, 52.773674 ], [ 120.101244, 52.788877 ], [ 120.14128, 52.813119 ], [ 120.181316, 52.806969 ], [ 120.222584, 52.84277 ], [ 120.297112, 52.869872 ], [ 120.295265, 52.891542 ], [ 120.350699, 52.906343 ], [ 120.363018, 52.94134 ], [ 120.411061, 52.957927 ], [ 120.452945, 53.01017 ], [ 120.529321, 53.045803 ], [ 120.562582, 53.082845 ], [ 120.643886, 53.106923 ], [ 120.659901, 53.137091 ], [ 120.687002, 53.142476 ], [ 120.690698, 53.174771 ], [ 120.736277, 53.204892 ], [ 120.821893, 53.241797 ], [ 120.838523, 53.239648 ], [ 120.820661, 53.269007 ], [ 120.867472, 53.278669 ], [ 120.882871, 53.294411 ], [ 120.936457, 53.28833 ], [ 120.950624, 53.29763 ], [ 121.055334, 53.29155 ], [ 121.098449, 53.306929 ], [ 121.129246, 53.277238 ], [ 121.155732, 53.285468 ], [ 121.227797, 53.280459 ], [ 121.308485, 53.301565 ], [ 121.336818, 53.325877 ], [ 121.416274, 53.319443 ], [ 121.499426, 53.337314 ], [ 121.504969, 53.323018 ], [ 121.575802, 53.29155 ], [ 121.615222, 53.258984 ], [ 121.642324, 53.262564 ], [ 121.679896, 53.240722 ], [ 121.67928, 53.199515 ], [ 121.660186, 53.195213 ], [ 121.665114, 53.170467 ], [ 121.722396, 53.145706 ], [ 121.753193, 53.147501 ], [ 121.784606, 53.104408 ], [ 121.775367, 53.089674 ], [ 121.817867, 53.061631 ], [ 121.785838, 53.018451 ], [ 121.715621, 52.997926 ], [ 121.677432, 52.948192 ], [ 121.66265, 52.912478 ], [ 121.610295, 52.892264 ], [ 121.604136, 52.872401 ], [ 121.620766, 52.853251 ], [ 121.591201, 52.824693 ], [ 121.537614, 52.801542 ], [ 121.511129, 52.779104 ], [ 121.476636, 52.772225 ], [ 121.455078, 52.73528 ], [ 121.373158, 52.683067 ], [ 121.309717, 52.676173 ], [ 121.29247, 52.651855 ], [ 121.237036, 52.619167 ], [ 121.182217, 52.59918 ], [ 121.225333, 52.577364 ], [ 121.280151, 52.586819 ], [ 121.323883, 52.573727 ], [ 121.353448, 52.534793 ], [ 121.411963, 52.52205 ], [ 121.416274, 52.499468 ], [ 121.474172, 52.482706 ], [ 121.495114, 52.484892 ], [ 121.519136, 52.456821 ], [ 121.565331, 52.460468 ], [ 121.590585, 52.443326 ], [ 121.63986, 52.44442 ], [ 121.678664, 52.419973 ], [ 121.658338, 52.3904 ], [ 121.715621, 52.342894 ], [ 121.714389, 52.318025 ], [ 121.769207, 52.308147 ], [ 121.841272, 52.282526 ], [ 121.901018, 52.280695 ], [ 121.94783, 52.298266 ], [ 121.976779, 52.343626 ], [ 122.035909, 52.377615 ], [ 122.040837, 52.413038 ], [ 122.091344, 52.427272 ], [ 122.080873, 52.440407 ], [ 122.107358, 52.452445 ], [ 122.142467, 52.495096 ], [ 122.140003, 52.510032 ], [ 122.168952, 52.513674 ], [ 122.178191, 52.48963 ], [ 122.207756, 52.469218 ], [ 122.310618, 52.475416 ], [ 122.326016, 52.459374 ], [ 122.342031, 52.414133 ], [ 122.367284, 52.413768 ], [ 122.378987, 52.395512 ], [ 122.419023, 52.375057 ], [ 122.447356, 52.394052 ], [ 122.484313, 52.341432 ], [ 122.478153, 52.29607 ], [ 122.560689, 52.282526 ], [ 122.585943, 52.266413 ], [ 122.67895, 52.276667 ], [ 122.710979, 52.256157 ], [ 122.76087, 52.26678 ], [ 122.787355, 52.252494 ], [ 122.766413, 52.232705 ], [ 122.769493, 52.179893 ], [ 122.73808, 52.153464 ], [ 122.690653, 52.140243 ], [ 122.629059, 52.13657 ], [ 122.643841, 52.111585 ], [ 122.625363, 52.067459 ], [ 122.650616, 52.058997 ], [ 122.664783, 51.99861 ], [ 122.683877, 51.974654 ], [ 122.726377, 51.978709 ], [ 122.729457, 51.919321 ], [ 122.706051, 51.890151 ], [ 122.725761, 51.87833 ], [ 122.732536, 51.832495 ], [ 122.771957, 51.779579 ], [ 122.749167, 51.746613 ], [ 122.778732, 51.698048 ], [ 122.816304, 51.655371 ], [ 122.820616, 51.633088 ], [ 122.85634, 51.606707 ], [ 122.832935, 51.581797 ], [ 122.874202, 51.561339 ], [ 122.880362, 51.537894 ], [ 122.858804, 51.524864 ], [ 122.880362, 51.511085 ], [ 122.854492, 51.477551 ], [ 122.871123, 51.455181 ], [ 122.900072, 51.445112 ], [ 122.903768, 51.415262 ], [ 122.946267, 51.405183 ], [ 122.965977, 51.386886 ], [ 122.965977, 51.345786 ], [ 123.002934, 51.31213 ], [ 123.069455, 51.321108 ], [ 123.127969, 51.297913 ], [ 123.231447, 51.279199 ], [ 123.231447, 51.268716 ], [ 123.294273, 51.254111 ], [ 123.339853, 51.27246 ], [ 123.376809, 51.266844 ], [ 123.414381, 51.278825 ], [ 123.440251, 51.270963 ], [ 123.46304, 51.286686 ], [ 123.582533, 51.294545 ], [ 123.582533, 51.306893 ], [ 123.661989, 51.319237 ], [ 123.660141, 51.342795 ], [ 123.711264, 51.398089 ], [ 123.794416, 51.361109 ], [ 123.842459, 51.367462 ], [ 123.887423, 51.320734 ], [ 123.926227, 51.300532 ], [ 123.939777, 51.313253 ], [ 123.994596, 51.322604 ], [ 124.071588, 51.320734 ], [ 124.090067, 51.3413 ], [ 124.128255, 51.347281 ], [ 124.192313, 51.33943 ], [ 124.239124, 51.344664 ], [ 124.271769, 51.308389 ], [ 124.297638, 51.298661 ], [ 124.339522, 51.293422 ], [ 124.406659, 51.272086 ], [ 124.430065, 51.301281 ], [ 124.426985, 51.331953 ], [ 124.443616, 51.35812 ], [ 124.478108, 51.36223 ], [ 124.490427, 51.380537 ], [ 124.555717, 51.375307 ], [ 124.58713, 51.363725 ], [ 124.62655, 51.327465 ], [ 124.693687, 51.3327 ], [ 124.752817, 51.35812 ], [ 124.76452, 51.38726 ], [ 124.783614, 51.392115 ], [ 124.864302, 51.37979 ], [ 124.885244, 51.40817 ], [ 124.942527, 51.447349 ], [ 124.917889, 51.474196 ], [ 124.928976, 51.498419 ], [ 124.983795, 51.508478 ], [ 125.004737, 51.529332 ], [ 125.047236, 51.529704 ], [ 125.073106, 51.553526 ], [ 125.060171, 51.59667 ], [ 125.098975, 51.658341 ], [ 125.12854, 51.659083 ], [ 125.130388, 51.635317 ], [ 125.175968, 51.639403 ], [ 125.214772, 51.627888 ], [ 125.228938, 51.640517 ], [ 125.289301, 51.633831 ], [ 125.316402, 51.610052 ], [ 125.35151, 51.623801 ], [ 125.38046, 51.585516 ], [ 125.424807, 51.562827 ], [ 125.528285, 51.488359 ], [ 125.559082, 51.461521 ], [ 125.595422, 51.416755 ], [ 125.60035, 51.413396 ], [ 125.600966, 51.410409 ], [ 125.62314, 51.398089 ], [ 125.623756, 51.387633 ], [ 125.626219, 51.380163 ], [ 125.700132, 51.327465 ], [ 125.740784, 51.27583 ], [ 125.76111, 51.261976 ], [ 125.761726, 51.226385 ], [ 125.819008, 51.227134 ], [ 125.850421, 51.21364 ], [ 125.864588, 51.146487 ], [ 125.909551, 51.138977 ], [ 125.946508, 51.108176 ], [ 125.970529, 51.123955 ], [ 125.993935, 51.119072 ], [ 125.976073, 51.084498 ], [ 126.059225, 51.043503 ], [ 126.033971, 51.011132 ], [ 126.041978, 50.981753 ], [ 126.068464, 50.967434 ], [ 126.042594, 50.92558 ], [ 126.02042, 50.927466 ], [ 125.996399, 50.906715 ], [ 125.997631, 50.872738 ], [ 125.961906, 50.901054 ], [ 125.939732, 50.85423 ], [ 125.913247, 50.825885 ], [ 125.878138, 50.816812 ], [ 125.890457, 50.805845 ], [ 125.836255, 50.793363 ], [ 125.846726, 50.769524 ], [ 125.828863, 50.756654 ], [ 125.804226, 50.773309 ], [ 125.758646, 50.746809 ], [ 125.795603, 50.738856 ], [ 125.78082, 50.725598 ], [ 125.825784, 50.70362 ], [ 125.789443, 50.679735 ], [ 125.804226, 50.658874 ], [ 125.793139, 50.643316 ], [ 125.814697, 50.62092 ], [ 125.807921, 50.60383 ], [ 125.829479, 50.56165 ], [ 125.794987, 50.532748 ], [ 125.770349, 50.531227 ], [ 125.754335, 50.506874 ], [ 125.740784, 50.523237 ], [ 125.699516, 50.487078 ], [ 125.654553, 50.471082 ], [ 125.627451, 50.443268 ], [ 125.580024, 50.449366 ], [ 125.562162, 50.438314 ], [ 125.583104, 50.409717 ], [ 125.567089, 50.402852 ], [ 125.536292, 50.420014 ], [ 125.522126, 50.404759 ], [ 125.546763, 50.358965 ], [ 125.520278, 50.3498 ], [ 125.530749, 50.331085 ], [ 125.463611, 50.295925 ], [ 125.466075, 50.266861 ], [ 125.442053, 50.260357 ], [ 125.448829, 50.216338 ], [ 125.417416, 50.195654 ], [ 125.39093, 50.199868 ], [ 125.382923, 50.172278 ], [ 125.335496, 50.161161 ], [ 125.376148, 50.137385 ], [ 125.311474, 50.140453 ], [ 125.27883, 50.127411 ], [ 125.258504, 50.103618 ], [ 125.287453, 50.093636 ], [ 125.283757, 50.070211 ], [ 125.328105, 50.065985 ], [ 125.315786, 50.04562 ], [ 125.289916, 50.057917 ], [ 125.25296, 50.041393 ], [ 125.283757, 50.036012 ], [ 125.297924, 50.014481 ], [ 125.278214, 49.996402 ], [ 125.241873, 49.987938 ], [ 125.231402, 49.957531 ], [ 125.190134, 49.959841 ], [ 125.199373, 49.935194 ], [ 125.225859, 49.922481 ], [ 125.212924, 49.907452 ], [ 125.245569, 49.87198 ], [ 125.225243, 49.867351 ], [ 125.239409, 49.844587 ], [ 125.177815, 49.829533 ], [ 125.222779, 49.799026 ], [ 125.221547, 49.754969 ], [ 125.204301, 49.734086 ], [ 125.225243, 49.726349 ], [ 125.219699, 49.669058 ], [ 125.185207, 49.634574 ], [ 125.189518, 49.652401 ], [ 125.164881, 49.669446 ], [ 125.132236, 49.672157 ], [ 125.127308, 49.655113 ], [ 125.15441, 49.616741 ], [ 125.16796, 49.629923 ], [ 125.205533, 49.593859 ], [ 125.23017, 49.595411 ], [ 125.233866, 49.536801 ], [ 125.211076, 49.539908 ], [ 125.228323, 49.487063 ], [ 125.270822, 49.454395 ], [ 125.256656, 49.437275 ], [ 125.25604, 49.395227 ], [ 125.277598, 49.379644 ], [ 125.256656, 49.359769 ], [ 125.261583, 49.322336 ], [ 125.214772, 49.277066 ], [ 125.233866, 49.255587 ], [ 125.219699, 49.189139 ], [ 125.187671, 49.186792 ], [ 125.158721, 49.144921 ], [ 125.117453, 49.126127 ], [ 125.034302, 49.157056 ], [ 125.039845, 49.17623 ], [ 124.983179, 49.162535 ], [ 124.906802, 49.184054 ], [ 124.860607, 49.166448 ], [ 124.847672, 49.129651 ], [ 124.809484, 49.115943 ], [ 124.828578, 49.077933 ], [ 124.808252, 49.020666 ], [ 124.756513, 48.967262 ], [ 124.744194, 48.920487 ], [ 124.709086, 48.920487 ], [ 124.715861, 48.885475 ], [ 124.697383, 48.841775 ], [ 124.654267, 48.83429 ], [ 124.644412, 48.80789 ], [ 124.656115, 48.783842 ], [ 124.612383, 48.747945 ], [ 124.624702, 48.701755 ], [ 124.601912, 48.632587 ], [ 124.579122, 48.596582 ], [ 124.520608, 48.556195 ], [ 124.548941, 48.535593 ], [ 124.533543, 48.515379 ], [ 124.555717, 48.467784 ], [ 124.507674, 48.445558 ], [ 124.52492, 48.426897 ], [ 124.51876, 48.378027 ], [ 124.547094, 48.35775 ], [ 124.540934, 48.335476 ], [ 124.579738, 48.297269 ], [ 124.558796, 48.268197 ], [ 124.579122, 48.262221 ], [ 124.547094, 48.200829 ], [ 124.512601, 48.164518 ], [ 124.529847, 48.146951 ], [ 124.505826, 48.124985 ], [ 124.478108, 48.123387 ], [ 124.46579, 48.098213 ], [ 124.415899, 48.08782 ], [ 124.430065, 48.12099 ], [ 124.471333, 48.133373 ], [ 124.467637, 48.178886 ], [ 124.418978, 48.181679 ], [ 124.412819, 48.219175 ], [ 124.422058, 48.245884 ], [ 124.365392, 48.283731 ], [ 124.353689, 48.315978 ], [ 124.317964, 48.35099 ], [ 124.331515, 48.380015 ], [ 124.309957, 48.413393 ], [ 124.330283, 48.435633 ], [ 124.302566, 48.456673 ], [ 124.314269, 48.503881 ], [ 124.25945, 48.536385 ], [ 124.136878, 48.463023 ], [ 124.07898, 48.43603 ], [ 124.019234, 48.39313 ], [ 123.862785, 48.271782 ], [ 123.746373, 48.197638 ], [ 123.705105, 48.152142 ], [ 123.579453, 48.045427 ], [ 123.537569, 48.021816 ], [ 123.300432, 47.953723 ], [ 123.256085, 47.876711 ], [ 123.214201, 47.824502 ], [ 123.161846, 47.781892 ], [ 123.041122, 47.746492 ], [ 122.926557, 47.697777 ], [ 122.848949, 47.67441 ], [ 122.765181, 47.614333 ], [ 122.59395, 47.54732 ], [ 122.543443, 47.495589 ], [ 122.507103, 47.401291 ], [ 122.418407, 47.350632 ], [ 122.441197, 47.310476 ], [ 122.462755, 47.27841 ], [ 122.498479, 47.255262 ], [ 122.531124, 47.198771 ], [ 122.582863, 47.158092 ], [ 122.615508, 47.124306 ], [ 122.679566, 47.094164 ], [ 122.710363, 47.093349 ], [ 122.821232, 47.065636 ], [ 122.852645, 47.072158 ], [ 122.845869, 47.046881 ], [ 122.778116, 47.002822 ], [ 122.77442, 46.973837 ], [ 122.798442, 46.9575 ], [ 122.791051, 46.941567 ], [ 122.83971, 46.937072 ], [ 122.895144, 46.960359 ], [ 122.893913, 46.895376 ], [ 122.906847, 46.80738 ], [ 122.996774, 46.761483 ], [ 123.00355, 46.730726 ], [ 123.026339, 46.718829 ], [ 123.076846, 46.745082 ], [ 123.103332, 46.734828 ], [ 123.163694, 46.74016 ], [ 123.198802, 46.803283 ], [ 123.22344, 46.821305 ], [ 123.221592, 46.850373 ], [ 123.295505, 46.865105 ], [ 123.341084, 46.826628 ], [ 123.374345, 46.837683 ], [ 123.40699, 46.906416 ], [ 123.404526, 46.935438 ], [ 123.360179, 46.970978 ], [ 123.304128, 46.964852 ], [ 123.301664, 46.999965 ], [ 123.337389, 46.988943 ], [ 123.42362, 46.934212 ], [ 123.487678, 46.959951 ], [ 123.52833, 46.944836 ], [ 123.483366, 46.84587 ], [ 123.506772, 46.827038 ], [ 123.562823, 46.82581 ], [ 123.575757, 46.845461 ], [ 123.576989, 46.891286 ], [ 123.605322, 46.891286 ], [ 123.599163, 46.868378 ], [ 123.625648, 46.847508 ], [ 123.580069, 46.827447 ], [ 123.629344, 46.813524 ], [ 123.631808, 46.728675 ], [ 123.603475, 46.68928 ], [ 123.474743, 46.686817 ], [ 123.366338, 46.677784 ], [ 123.318295, 46.662179 ], [ 123.276411, 46.660947 ], [ 123.279491, 46.616981 ], [ 123.228368, 46.588198 ], [ 123.18094, 46.614103 ], [ 123.098404, 46.603002 ], [ 123.077462, 46.622324 ], [ 123.04605, 46.617803 ], [ 123.052825, 46.579972 ], [ 123.002318, 46.574624 ], [ 123.010325, 46.524823 ], [ 123.011557, 46.434984 ], [ 123.089781, 46.347888 ], [ 123.142136, 46.298293 ], [ 123.178476, 46.248239 ], [ 123.128585, 46.210565 ], [ 123.127354, 46.174523 ], [ 123.102716, 46.172037 ], [ 123.112571, 46.130163 ], [ 123.070071, 46.123527 ], [ 123.04605, 46.099878 ], [ 122.792898, 46.073313 ], [ 122.828623, 45.912406 ], [ 122.80029, 45.856583 ], [ 122.772572, 45.856583 ], [ 122.752246, 45.834905 ], [ 122.792283, 45.766063 ], [ 122.751015, 45.735996 ], [ 122.741775, 45.705077 ], [ 122.671558, 45.70048 ], [ 122.650001, 45.731401 ], [ 122.640761, 45.771072 ], [ 122.603189, 45.778169 ], [ 122.556378, 45.82156 ], [ 122.522501, 45.786933 ], [ 122.504639, 45.786933 ], [ 122.496016, 45.85825 ], [ 122.446125, 45.916986 ], [ 122.362357, 45.917403 ], [ 122.372828, 45.856166 ], [ 122.337719, 45.859917 ], [ 122.301379, 45.813218 ], [ 122.253952, 45.7982 ], [ 122.236705, 45.831569 ], [ 122.200981, 45.857 ], [ 122.091344, 45.882002 ], [ 122.085184, 45.912406 ], [ 122.040221, 45.959022 ], [ 121.92812, 45.988552 ], [ 121.923808, 46.004767 ], [ 121.864062, 46.002272 ], [ 121.843736, 46.024301 ], [ 121.819098, 46.023054 ], [ 121.761816, 45.998947 ], [ 121.809243, 45.961102 ], [ 121.821562, 45.918235 ], [ 121.805548, 45.900746 ], [ 121.817251, 45.875336 ], [ 121.769823, 45.84366 ], [ 121.766744, 45.830318 ], [ 121.754425, 45.794862 ], [ 121.697142, 45.76314 ], [ 121.657106, 45.770238 ], [ 121.644172, 45.752284 ], [ 121.666345, 45.727641 ], [ 121.713773, 45.701734 ], [ 121.811091, 45.687103 ], [ 121.812323, 45.704659 ], [ 121.867142, 45.719703 ], [ 121.934279, 45.71051 ], [ 121.970004, 45.692956 ], [ 122.003264, 45.623102 ], [ 121.995873, 45.59882 ], [ 121.966308, 45.596308 ], [ 121.993409, 45.552741 ], [ 122.002648, 45.507882 ], [ 122.064242, 45.472641 ], [ 122.168336, 45.439897 ], [ 122.180039, 45.409655 ], [ 122.146778, 45.374352 ], [ 122.147394, 45.295682 ], [ 122.239169, 45.276313 ], [ 122.22993, 45.206784 ], [ 122.192358, 45.180636 ], [ 122.143082, 45.183167 ], [ 122.109822, 45.142236 ], [ 122.119677, 45.068739 ], [ 122.098735, 45.02138 ], [ 122.074713, 45.006573 ], [ 122.087032, 44.95281 ], [ 122.079025, 44.914256 ], [ 122.04946, 44.912985 ], [ 122.098119, 44.81882 ], [ 122.099967, 44.7823 ], [ 122.168952, 44.770405 ], [ 122.142467, 44.753833 ], [ 122.110438, 44.767856 ], [ 122.10243, 44.736406 ], [ 122.152322, 44.744057 ], [ 122.161561, 44.728328 ], [ 122.117213, 44.701961 ], [ 122.103046, 44.67388 ], [ 122.113517, 44.615546 ], [ 122.13138, 44.577619 ], [ 122.196053, 44.559712 ], [ 122.224386, 44.526016 ], [ 122.228082, 44.480345 ], [ 122.28598, 44.477783 ], [ 122.294604, 44.41113 ], [ 122.291524, 44.310152 ], [ 122.271198, 44.255741 ], [ 122.319241, 44.233018 ], [ 122.483081, 44.236877 ], [ 122.515726, 44.251025 ], [ 122.641993, 44.283595 ], [ 122.675254, 44.285738 ], [ 122.702971, 44.319145 ], [ 122.76087, 44.369648 ], [ 122.85634, 44.398304 ], [ 123.025108, 44.493153 ], [ 123.06576, 44.505959 ], [ 123.12489, 44.5098 ], [ 123.137209, 44.486322 ], [ 123.125506, 44.455147 ], [ 123.142136, 44.428228 ], [ 123.114419, 44.40258 ], [ 123.128585, 44.367081 ], [ 123.196955, 44.34483 ], [ 123.277027, 44.25274 ], [ 123.286882, 44.211574 ], [ 123.323838, 44.179823 ], [ 123.386664, 44.161794 ], [ 123.362642, 44.133452 ], [ 123.350939, 44.092633 ], [ 123.32815, 44.084035 ], [ 123.331229, 44.028984 ], [ 123.365722, 44.013922 ], [ 123.400831, 43.979481 ], [ 123.37065, 43.970006 ], [ 123.397135, 43.954929 ], [ 123.467968, 43.853599 ], [ 123.461809, 43.822518 ], [ 123.498149, 43.771114 ], [ 123.48275, 43.737396 ], [ 123.520323, 43.708419 ], [ 123.518475, 43.682024 ], [ 123.536953, 43.633964 ], [ 123.510468, 43.624867 ], [ 123.5117, 43.592801 ], [ 123.421157, 43.598435 ], [ 123.434091, 43.575461 ], [ 123.461193, 43.568523 ], [ 123.452569, 43.545971 ], [ 123.360179, 43.567223 ], [ 123.304744, 43.550742 ], [ 123.329998, 43.519071 ], [ 123.315831, 43.492159 ], [ 123.36449, 43.483475 ], [ 123.382968, 43.469143 ], [ 123.419925, 43.410046 ], [ 123.442098, 43.437863 ], [ 123.486446, 43.44525 ], [ 123.519707, 43.402219 ], [ 123.54496, 43.415262 ], [ 123.608402, 43.366119 ], [ 123.703873, 43.37047 ], [ 123.698329, 43.272071 ], [ 123.664453, 43.264663 ], [ 123.676771, 43.223684 ], [ 123.645974, 43.208855 ], [ 123.666916, 43.179623 ], [ 123.636119, 43.141644 ], [ 123.631192, 43.088346 ], [ 123.580685, 43.036314 ], [ 123.572678, 43.003498 ], [ 123.536337, 43.007 ], [ 123.474743, 43.042438 ], [ 123.434707, 43.027565 ], [ 123.323222, 43.000872 ], [ 123.259165, 42.993431 ], [ 123.18402, 42.925983 ], [ 123.188947, 42.895739 ], [ 123.169853, 42.859777 ], [ 123.227752, 42.831695 ], [ 123.118114, 42.801405 ], [ 123.058368, 42.768903 ], [ 122.980144, 42.777689 ], [ 122.945651, 42.753524 ], [ 122.925941, 42.772417 ], [ 122.887137, 42.770221 ], [ 122.883442, 42.751766 ], [ 122.848949, 42.712203 ], [ 122.786123, 42.757479 ], [ 122.73808, 42.77066 ], [ 122.733152, 42.786034 ], [ 122.653696, 42.78252 ], [ 122.624747, 42.773296 ], [ 122.580399, 42.789987 ], [ 122.576088, 42.819405 ], [ 122.556378, 42.827745 ], [ 122.436886, 42.843105 ], [ 122.35127, 42.830378 ], [ 122.371596, 42.776371 ], [ 122.439349, 42.770221 ], [ 122.460907, 42.755282 ], [ 122.396234, 42.707366 ], [ 122.396234, 42.684054 ], [ 122.338951, 42.669975 ], [ 122.324785, 42.684934 ], [ 122.261343, 42.695931 ], [ 122.204676, 42.732867 ], [ 122.204676, 42.685374 ], [ 122.160945, 42.684934 ], [ 122.072865, 42.710444 ], [ 122.062394, 42.723635 ], [ 122.018663, 42.69901 ], [ 121.939207, 42.688453 ], [ 121.94167, 42.666014 ], [ 121.915801, 42.656332 ], [ 121.921344, 42.605697 ], [ 121.889931, 42.556784 ], [ 121.844352, 42.522389 ], [ 121.831417, 42.533856 ], [ 121.817867, 42.504303 ], [ 121.803084, 42.514891 ], [ 121.747649, 42.484887 ], [ 121.69899, 42.438529 ], [ 121.66573, 42.437204 ], [ 121.604136, 42.495037 ], [ 121.607831, 42.516214 ], [ 121.570875, 42.487093 ], [ 121.506201, 42.482239 ], [ 121.4791, 42.49636 ], [ 121.434752, 42.475176 ], [ 121.386093, 42.474294 ], [ 121.304789, 42.435879 ], [ 121.314644, 42.42837 ], [ 121.285079, 42.387717 ], [ 121.218558, 42.371802 ], [ 121.184681, 42.333324 ], [ 121.133558, 42.300135 ], [ 121.120623, 42.280656 ], [ 121.087978, 42.278885 ], [ 121.070732, 42.254083 ], [ 121.028848, 42.242565 ], [ 120.992508, 42.264714 ], [ 120.933994, 42.27977 ], [ 120.883487, 42.269585 ], [ 120.883487, 42.242565 ], [ 120.8299, 42.252755 ], [ 120.820661, 42.227943 ], [ 120.79048, 42.218636 ], [ 120.745516, 42.223512 ], [ 120.72211, 42.203565 ], [ 120.624792, 42.154338 ], [ 120.58414, 42.167203 ], [ 120.56751, 42.152119 ], [ 120.466496, 42.105516 ], [ 120.493597, 42.073539 ], [ 120.450481, 42.057101 ], [ 120.456641, 42.016208 ], [ 120.399358, 41.984631 ], [ 120.373489, 41.994862 ], [ 120.309431, 41.951704 ], [ 120.318054, 41.93746 ], [ 120.271859, 41.925439 ], [ 120.260156, 41.904062 ], [ 120.290337, 41.897381 ], [ 120.286641, 41.880005 ], [ 120.251533, 41.884016 ], [ 120.215808, 41.853265 ], [ 120.188707, 41.848361 ], [ 120.183164, 41.826513 ], [ 120.127113, 41.77253 ], [ 120.1382, 41.729221 ], [ 120.096316, 41.697056 ], [ 120.035954, 41.708226 ], [ 120.024867, 41.737707 ], [ 120.050737, 41.776101 ], [ 120.041498, 41.818932 ], [ 120.023019, 41.816701 ], [ 119.989759, 41.899163 ], [ 119.954034, 41.923212 ], [ 119.950954, 41.974399 ], [ 119.924469, 41.98908 ], [ 119.921389, 42.014429 ], [ 119.897368, 42.030879 ], [ 119.87581, 42.077982 ], [ 119.845629, 42.097079 ], [ 119.837622, 42.135257 ], [ 119.854868, 42.170308 ], [ 119.841933, 42.215534 ], [ 119.744615, 42.211545 ], [ 119.679941, 42.240793 ], [ 119.617115, 42.252755 ], [ 119.609108, 42.276671 ], [ 119.557985, 42.289068 ], [ 119.539507, 42.297922 ], [ 119.571536, 42.335536 ], [ 119.572152, 42.359421 ], [ 119.540123, 42.363401 ], [ 119.502551, 42.388159 ], [ 119.482841, 42.347037 ], [ 119.432949, 42.317396 ], [ 119.34795, 42.300578 ], [ 119.280197, 42.260728 ], [ 119.274037, 42.239021 ], [ 119.237697, 42.200905 ], [ 119.277733, 42.185387 ], [ 119.286972, 42.154781 ], [ 119.30853, 42.147239 ], [ 119.314689, 42.119723 ], [ 119.352261, 42.118391 ], [ 119.384906, 42.08953 ], [ 119.375667, 42.023322 ], [ 119.324544, 41.969505 ], [ 119.323928, 41.937014 ], [ 119.340559, 41.926774 ], [ 119.323312, 41.889807 ], [ 119.334399, 41.871539 ], [ 119.312841, 41.80555 ], [ 119.292515, 41.790827 ], [ 119.317769, 41.764049 ], [ 119.319001, 41.727435 ], [ 119.299907, 41.705545 ], [ 119.307914, 41.657273 ], [ 119.342406, 41.617914 ], [ 119.415703, 41.590169 ], [ 119.420015, 41.567785 ], [ 119.362116, 41.566442 ], [ 119.361501, 41.545841 ], [ 119.406464, 41.503276 ], [ 119.401537, 41.472343 ], [ 119.378131, 41.459787 ], [ 119.376283, 41.422102 ], [ 119.309762, 41.405944 ], [ 119.330704, 41.385293 ], [ 119.296211, 41.325097 ], [ 119.239545, 41.31431 ], [ 119.211827, 41.308016 ], [ 119.197661, 41.282837 ], [ 119.168712, 41.294978 ], [ 119.092951, 41.293629 ], [ 118.980234, 41.305769 ], [ 118.949437, 41.317906 ], [ 118.890923, 41.300823 ], [ 118.844727, 41.342622 ], [ 118.843496, 41.374516 ], [ 118.770199, 41.352956 ], [ 118.741866, 41.324198 ], [ 118.677192, 41.35026 ], [ 118.629765, 41.346666 ], [ 118.528135, 41.355202 ], [ 118.412338, 41.331838 ], [ 118.380309, 41.312062 ], [ 118.348896, 41.342622 ], [ 118.361215, 41.384844 ], [ 118.348896, 41.428384 ], [ 118.327338, 41.450816 ], [ 118.271904, 41.471446 ], [ 118.315636, 41.512688 ], [ 118.302701, 41.55256 ], [ 118.215237, 41.59554 ], [ 118.206614, 41.650566 ], [ 118.159187, 41.67605 ], [ 118.155491, 41.712694 ], [ 118.132702, 41.733241 ], [ 118.140093, 41.784134 ], [ 118.178281, 41.814917 ], [ 118.236179, 41.80778 ], [ 118.247266, 41.773869 ], [ 118.29223, 41.772976 ], [ 118.335346, 41.845241 ], [ 118.340273, 41.87243 ], [ 118.268824, 41.930336 ], [ 118.306396, 41.940131 ], [ 118.313788, 41.98819 ], [ 118.291614, 42.007759 ], [ 118.239875, 42.024655 ], [ 118.286686, 42.033991 ], [ 118.296541, 42.057545 ], [ 118.27252, 42.083312 ], [ 118.239259, 42.092639 ], [ 118.212774, 42.081091 ], [ 118.220165, 42.058434 ], [ 118.194296, 42.031324 ], [ 118.116687, 42.037102 ], [ 118.155491, 42.081091 ], [ 118.097593, 42.105072 ], [ 118.089586, 42.12283 ], [ 118.106216, 42.172082 ], [ 118.033535, 42.199132 ], [ 117.977485, 42.229716 ], [ 117.974405, 42.25054 ], [ 118.047702, 42.280656 ], [ 118.060021, 42.298364 ], [ 118.008898, 42.346595 ], [ 118.024296, 42.385064 ], [ 117.997811, 42.416884 ], [ 117.874007, 42.510038 ], [ 117.856761, 42.539148 ], [ 117.797631, 42.585431 ], [ 117.801326, 42.612744 ], [ 117.779768, 42.61847 ], [ 117.708935, 42.588515 ], [ 117.667051, 42.582347 ], [ 117.60053, 42.603054 ], [ 117.537088, 42.603054 ], [ 117.530313, 42.590278 ], [ 117.475494, 42.602613 ], [ 117.435458, 42.585431 ], [ 117.434226, 42.557224 ], [ 117.387415, 42.517537 ], [ 117.410205, 42.519743 ], [ 117.413284, 42.471645 ], [ 117.390495, 42.461933 ], [ 117.332596, 42.46105 ], [ 117.275314, 42.481797 ], [ 117.188467, 42.468114 ], [ 117.135496, 42.468996 ], [ 117.09546, 42.484004 ], [ 117.080061, 42.463699 ], [ 117.01662, 42.456193 ], [ 117.009228, 42.44957 ], [ 117.005533, 42.43367 ], [ 116.99075, 42.425719 ], [ 116.974736, 42.426603 ], [ 116.97104, 42.427486 ], [ 116.944555, 42.415116 ], [ 116.936547, 42.410256 ], [ 116.921765, 42.403628 ], [ 116.910062, 42.395231 ], [ 116.910678, 42.394789 ], [ 116.886656, 42.366496 ], [ 116.897743, 42.297479 ], [ 116.918685, 42.229716 ], [ 116.903287, 42.190708 ], [ 116.789338, 42.200462 ], [ 116.825062, 42.155669 ], [ 116.850316, 42.156556 ], [ 116.890352, 42.092639 ], [ 116.879881, 42.018431 ], [ 116.796113, 41.977958 ], [ 116.748686, 41.984186 ], [ 116.727744, 41.951259 ], [ 116.66923, 41.947698 ], [ 116.639049, 41.929891 ], [ 116.597165, 41.935679 ], [ 116.553433, 41.928555 ], [ 116.510933, 41.974399 ], [ 116.4826, 41.975734 ], [ 116.453651, 41.945917 ], [ 116.393289, 41.942802 ], [ 116.414231, 41.982407 ], [ 116.373579, 42.009983 ], [ 116.310137, 41.997086 ], [ 116.298434, 41.96817 ], [ 116.223906, 41.932562 ], [ 116.212819, 41.885352 ], [ 116.194341, 41.861734 ], [ 116.122892, 41.861734 ], [ 116.106877, 41.831419 ], [ 116.129051, 41.805996 ], [ 116.09887, 41.776547 ], [ 116.034196, 41.782795 ], [ 116.007095, 41.79752 ], [ 116.007095, 41.797966 ], [ 116.007095, 41.79752 ], [ 116.007095, 41.797966 ], [ 115.994776, 41.828743 ], [ 115.954124, 41.874213 ], [ 115.916552, 41.945027 ], [ 115.85311, 41.927665 ], [ 115.834632, 41.93835 ], [ 115.811226, 41.912525 ], [ 115.726227, 41.870202 ], [ 115.688038, 41.867528 ], [ 115.654162, 41.829189 ], [ 115.57409, 41.80555 ], [ 115.519887, 41.76762 ], [ 115.488474, 41.760924 ], [ 115.42996, 41.728775 ], [ 115.346808, 41.712247 ], [ 115.319091, 41.691693 ], [ 115.360975, 41.661297 ], [ 115.345576, 41.635807 ], [ 115.377605, 41.603148 ], [ 115.310468, 41.592854 ], [ 115.290142, 41.622835 ], [ 115.26612, 41.616124 ], [ 115.256881, 41.580768 ], [ 115.20391, 41.571367 ], [ 115.195287, 41.602253 ], [ 115.0992, 41.62373 ], [ 115.056085, 41.602253 ], [ 115.016049, 41.615229 ], [ 114.860832, 41.60091 ], [ 114.895325, 41.636255 ], [ 114.902716, 41.695715 ], [ 114.89594, 41.76762 ], [ 114.868839, 41.813579 ], [ 114.922426, 41.825175 ], [ 114.939056, 41.846132 ], [ 114.923658, 41.871093 ], [ 114.915035, 41.960605 ], [ 114.9021, 42.015763 ], [ 114.860832, 42.054879 ], [ 114.86268, 42.097967 ], [ 114.825723, 42.139695 ], [ 114.79431, 42.149457 ], [ 114.789383, 42.130819 ], [ 114.75489, 42.115727 ], [ 114.675434, 42.12061 ], [ 114.647717, 42.109512 ], [ 114.560254, 42.132595 ], [ 114.510978, 42.110844 ], [ 114.502355, 42.06732 ], [ 114.480181, 42.064654 ], [ 114.467863, 42.025989 ], [ 114.511594, 41.981962 ], [ 114.478334, 41.951704 ], [ 114.419203, 41.942356 ], [ 114.352066, 41.953484 ], [ 114.343443, 41.926774 ], [ 114.282465, 41.863517 ], [ 114.200545, 41.789934 ], [ 114.215328, 41.75646 ], [ 114.206704, 41.7386 ], [ 114.237501, 41.698843 ], [ 114.215328, 41.68499 ], [ 114.259059, 41.623282 ], [ 114.226414, 41.616572 ], [ 114.221487, 41.582111 ], [ 114.230726, 41.513584 ], [ 114.101379, 41.537779 ], [ 114.032394, 41.529715 ], [ 113.976959, 41.505966 ], [ 113.953553, 41.483553 ], [ 113.933227, 41.487139 ], [ 113.919677, 41.454404 ], [ 113.877793, 41.431076 ], [ 113.871017, 41.413126 ], [ 113.94493, 41.392477 ], [ 113.92522, 41.325546 ], [ 113.899351, 41.316108 ], [ 113.914749, 41.294529 ], [ 113.95109, 41.282837 ], [ 113.971416, 41.239649 ], [ 113.992357, 41.269794 ], [ 114.016379, 41.231999 ], [ 113.996669, 41.19238 ], [ 113.960945, 41.171211 ], [ 113.920293, 41.172112 ], [ 113.877793, 41.115777 ], [ 113.819279, 41.09774 ], [ 113.868554, 41.06887 ], [ 113.973263, 40.983087 ], [ 113.994821, 40.938798 ], [ 114.057647, 40.925234 ], [ 114.041633, 40.917546 ], [ 114.055183, 40.867782 ], [ 114.073661, 40.857372 ], [ 114.044712, 40.830661 ], [ 114.080437, 40.790348 ], [ 114.104458, 40.797597 ], [ 114.103227, 40.770861 ], [ 114.134639, 40.737314 ], [ 114.084748, 40.729605 ], [ 114.063806, 40.706925 ], [ 114.07243, 40.679246 ], [ 114.041633, 40.608861 ], [ 114.076741, 40.575686 ], [ 114.080437, 40.547952 ], [ 114.061959, 40.52885 ], [ 114.011452, 40.515657 ], [ 113.948626, 40.514747 ], [ 113.890112, 40.466503 ], [ 113.850691, 40.460583 ], [ 113.794641, 40.517932 ], [ 113.763228, 40.473787 ], [ 113.688699, 40.448288 ], [ 113.559968, 40.348476 ], [ 113.500222, 40.334335 ], [ 113.387505, 40.319279 ], [ 113.316672, 40.319736 ], [ 113.27602, 40.388601 ], [ 113.251382, 40.413211 ], [ 113.083231, 40.374925 ], [ 113.03334, 40.368997 ], [ 112.898449, 40.329317 ], [ 112.848558, 40.206937 ], [ 112.744464, 40.167161 ], [ 112.712436, 40.178593 ], [ 112.6299, 40.235725 ], [ 112.511639, 40.269068 ], [ 112.456205, 40.300112 ], [ 112.418017, 40.295091 ], [ 112.349031, 40.257194 ], [ 112.310227, 40.256281 ], [ 112.299756, 40.21105 ], [ 112.232619, 40.169905 ], [ 112.232003, 40.133311 ], [ 112.183344, 40.083877 ], [ 112.182112, 40.061437 ], [ 112.142076, 40.027076 ], [ 112.133453, 40.001866 ], [ 112.07617, 39.919298 ], [ 112.042294, 39.886243 ], [ 112.012729, 39.827438 ], [ 111.970229, 39.796638 ], [ 111.959758, 39.692642 ], [ 111.925265, 39.66731 ], [ 111.9382, 39.623071 ], [ 111.87907, 39.606013 ], [ 111.842729, 39.620305 ], [ 111.783599, 39.58895 ], [ 111.722621, 39.606013 ], [ 111.707839, 39.621227 ], [ 111.646245, 39.644272 ], [ 111.61668, 39.633211 ], [ 111.525521, 39.662242 ], [ 111.497187, 39.661781 ], [ 111.445448, 39.640124 ], [ 111.460847, 39.606935 ], [ 111.441137, 39.59679 ], [ 111.422043, 39.539123 ], [ 111.431282, 39.508656 ], [ 111.385086, 39.489722 ], [ 111.358601, 39.432428 ], [ 111.287152, 39.417173 ], [ 111.171971, 39.423183 ], [ 111.143022, 39.407926 ], [ 111.125776, 39.366297 ] ] ] } }, +{ "type": "Feature", "properties": { "adcode": "210000", "name": "辽宁省", "center": [ 123.429096, 41.796767 ], "centroid": [ 122.605251, 41.299975 ], "childrenNum": 14, "level": "province", "parent": { "adcode": 100000 }, "subFeatureIndex": 5, "acroutes": [ 100000 ] }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 119.557985, 42.289068 ], [ 119.557985, 42.289068 ], [ 119.609108, 42.276671 ], [ 119.617115, 42.252755 ], [ 119.679941, 42.240793 ], [ 119.744615, 42.211545 ], [ 119.841933, 42.215534 ], [ 119.854868, 42.170308 ], [ 119.837622, 42.135257 ], [ 119.845629, 42.097079 ], [ 119.87581, 42.077982 ], [ 119.897368, 42.030879 ], [ 119.921389, 42.014429 ], [ 119.924469, 41.98908 ], [ 119.950954, 41.974399 ], [ 119.954034, 41.923212 ], [ 119.989759, 41.899163 ], [ 120.023019, 41.816701 ], [ 120.041498, 41.818932 ], [ 120.050737, 41.776101 ], [ 120.024867, 41.737707 ], [ 120.035954, 41.708226 ], [ 120.096316, 41.697056 ], [ 120.1382, 41.729221 ], [ 120.127113, 41.77253 ], [ 120.183164, 41.826513 ], [ 120.188707, 41.848361 ], [ 120.215808, 41.853265 ], [ 120.251533, 41.884016 ], [ 120.286641, 41.880005 ], [ 120.290337, 41.897381 ], [ 120.260156, 41.904062 ], [ 120.271859, 41.925439 ], [ 120.318054, 41.93746 ], [ 120.309431, 41.951704 ], [ 120.373489, 41.994862 ], [ 120.399358, 41.984631 ], [ 120.456641, 42.016208 ], [ 120.450481, 42.057101 ], [ 120.493597, 42.073539 ], [ 120.466496, 42.105516 ], [ 120.56751, 42.152119 ], [ 120.58414, 42.167203 ], [ 120.624792, 42.154338 ], [ 120.72211, 42.203565 ], [ 120.745516, 42.223512 ], [ 120.79048, 42.218636 ], [ 120.820661, 42.227943 ], [ 120.8299, 42.252755 ], [ 120.883487, 42.242565 ], [ 120.883487, 42.269585 ], [ 120.883487, 42.269585 ], [ 120.933994, 42.27977 ], [ 120.992508, 42.264714 ], [ 121.028848, 42.242565 ], [ 121.070732, 42.254083 ], [ 121.087978, 42.278885 ], [ 121.120623, 42.280656 ], [ 121.133558, 42.300135 ], [ 121.184681, 42.333324 ], [ 121.218558, 42.371802 ], [ 121.285079, 42.387717 ], [ 121.314644, 42.42837 ], [ 121.304789, 42.435879 ], [ 121.386093, 42.474294 ], [ 121.434752, 42.475176 ], [ 121.4791, 42.49636 ], [ 121.506201, 42.482239 ], [ 121.570875, 42.487093 ], [ 121.607831, 42.516214 ], [ 121.604136, 42.495037 ], [ 121.66573, 42.437204 ], [ 121.69899, 42.438529 ], [ 121.747649, 42.484887 ], [ 121.803084, 42.514891 ], [ 121.817867, 42.504303 ], [ 121.831417, 42.533856 ], [ 121.844352, 42.522389 ], [ 121.889931, 42.556784 ], [ 121.921344, 42.605697 ], [ 121.915801, 42.656332 ], [ 121.94167, 42.666014 ], [ 121.939207, 42.688453 ], [ 122.018663, 42.69901 ], [ 122.062394, 42.723635 ], [ 122.072865, 42.710444 ], [ 122.160945, 42.684934 ], [ 122.204676, 42.685374 ], [ 122.204676, 42.732867 ], [ 122.261343, 42.695931 ], [ 122.324785, 42.684934 ], [ 122.338951, 42.669975 ], [ 122.396234, 42.684054 ], [ 122.396234, 42.707366 ], [ 122.460907, 42.755282 ], [ 122.439349, 42.770221 ], [ 122.371596, 42.776371 ], [ 122.35127, 42.830378 ], [ 122.436886, 42.843105 ], [ 122.556378, 42.827745 ], [ 122.576088, 42.819405 ], [ 122.580399, 42.789987 ], [ 122.624747, 42.773296 ], [ 122.653696, 42.78252 ], [ 122.733152, 42.786034 ], [ 122.73808, 42.77066 ], [ 122.786123, 42.757479 ], [ 122.848949, 42.712203 ], [ 122.848949, 42.712203 ], [ 122.883442, 42.751766 ], [ 122.883442, 42.751766 ], [ 122.887137, 42.770221 ], [ 122.925941, 42.772417 ], [ 122.945651, 42.753524 ], [ 122.980144, 42.777689 ], [ 123.058368, 42.768903 ], [ 123.118114, 42.801405 ], [ 123.227752, 42.831695 ], [ 123.169853, 42.859777 ], [ 123.188947, 42.895739 ], [ 123.18402, 42.925983 ], [ 123.259165, 42.993431 ], [ 123.323222, 43.000872 ], [ 123.434707, 43.027565 ], [ 123.474743, 43.042438 ], [ 123.536337, 43.007 ], [ 123.572678, 43.003498 ], [ 123.580685, 43.036314 ], [ 123.631192, 43.088346 ], [ 123.636119, 43.141644 ], [ 123.666916, 43.179623 ], [ 123.645974, 43.208855 ], [ 123.676771, 43.223684 ], [ 123.664453, 43.264663 ], [ 123.698329, 43.272071 ], [ 123.703873, 43.37047 ], [ 123.710032, 43.417001 ], [ 123.749452, 43.439167 ], [ 123.747604, 43.472184 ], [ 123.79688, 43.489988 ], [ 123.857858, 43.459153 ], [ 123.857858, 43.459153 ], [ 123.852314, 43.406133 ], [ 123.881263, 43.392218 ], [ 123.881263, 43.392218 ], [ 123.896046, 43.361333 ], [ 123.964415, 43.34088 ], [ 124.032784, 43.280786 ], [ 124.099306, 43.292983 ], [ 124.117168, 43.2773 ], [ 124.114088, 43.247229 ], [ 124.168291, 43.244177 ], [ 124.215102, 43.255947 ], [ 124.228653, 43.235022 ], [ 124.27608, 43.233278 ], [ 124.287167, 43.207983 ], [ 124.273617, 43.17875 ], [ 124.366007, 43.121554 ], [ 124.425754, 43.076107 ], [ 124.333363, 42.997371 ], [ 124.369703, 42.972854 ], [ 124.42329, 42.975482 ], [ 124.442384, 42.958841 ], [ 124.431913, 42.930803 ], [ 124.38079, 42.912835 ], [ 124.371551, 42.880831 ], [ 124.435609, 42.880831 ], [ 124.466406, 42.847054 ], [ 124.586514, 42.905384 ], [ 124.607456, 42.937376 ], [ 124.632093, 42.949642 ], [ 124.635173, 42.972854 ], [ 124.658579, 42.972854 ], [ 124.677673, 43.002185 ], [ 124.686912, 43.051185 ], [ 124.719557, 43.069987 ], [ 124.755281, 43.074359 ], [ 124.785462, 43.117185 ], [ 124.882781, 43.13422 ], [ 124.88894, 43.074796 ], [ 124.840897, 43.032377 ], [ 124.869846, 42.988178 ], [ 124.87231, 42.962344 ], [ 124.84952, 42.882585 ], [ 124.856911, 42.824234 ], [ 124.874157, 42.789987 ], [ 124.897563, 42.787791 ], [ 124.92836, 42.819844 ], [ 124.975171, 42.802722 ], [ 124.996729, 42.745174 ], [ 124.968396, 42.722756 ], [ 124.99057, 42.677455 ], [ 125.014592, 42.666014 ], [ 125.010896, 42.63212 ], [ 125.038613, 42.615387 ], [ 125.097127, 42.622433 ], [ 125.082961, 42.591159 ], [ 125.089736, 42.567803 ], [ 125.066946, 42.534738 ], [ 125.090968, 42.515773 ], [ 125.068794, 42.499449 ], [ 125.105135, 42.490624 ], [ 125.150098, 42.458842 ], [ 125.140243, 42.44692 ], [ 125.186439, 42.427928 ], [ 125.185823, 42.38197 ], [ 125.203685, 42.366938 ], [ 125.167345, 42.351903 ], [ 125.175352, 42.308102 ], [ 125.224011, 42.30102 ], [ 125.264047, 42.312528 ], [ 125.299156, 42.289953 ], [ 125.27575, 42.266928 ], [ 125.27575, 42.231045 ], [ 125.312706, 42.219966 ], [ 125.280677, 42.175187 ], [ 125.312706, 42.197359 ], [ 125.305931, 42.146351 ], [ 125.357054, 42.145464 ], [ 125.368141, 42.182726 ], [ 125.41372, 42.156112 ], [ 125.458068, 42.160105 ], [ 125.458068, 42.160105 ], [ 125.490097, 42.136145 ], [ 125.446365, 42.098411 ], [ 125.414336, 42.101964 ], [ 125.416184, 42.063766 ], [ 125.363213, 42.017097 ], [ 125.369989, 42.002868 ], [ 125.29854, 41.974399 ], [ 125.291764, 41.958825 ], [ 125.35151, 41.92811 ], [ 125.307779, 41.924548 ], [ 125.294844, 41.822945 ], [ 125.319482, 41.776993 ], [ 125.319482, 41.776993 ], [ 125.323177, 41.771191 ], [ 125.323177, 41.771191 ], [ 125.336112, 41.768067 ], [ 125.336112, 41.768067 ], [ 125.332416, 41.711354 ], [ 125.317018, 41.676944 ], [ 125.344119, 41.672474 ], [ 125.412488, 41.691246 ], [ 125.446981, 41.67605 ], [ 125.461148, 41.642516 ], [ 125.450061, 41.597777 ], [ 125.479626, 41.544946 ], [ 125.507343, 41.534195 ], [ 125.493176, 41.509103 ], [ 125.533212, 41.479069 ], [ 125.534444, 41.428833 ], [ 125.547995, 41.401006 ], [ 125.581256, 41.396517 ], [ 125.589879, 41.359245 ], [ 125.610205, 41.365084 ], [ 125.637306, 41.34442 ], [ 125.62006, 41.318355 ], [ 125.642234, 41.296327 ], [ 125.646545, 41.264396 ], [ 125.685349, 41.273842 ], [ 125.695205, 41.244599 ], [ 125.749407, 41.245499 ], [ 125.758646, 41.232449 ], [ 125.73832, 41.178418 ], [ 125.791291, 41.167607 ], [ 125.759878, 41.132908 ], [ 125.734009, 41.125695 ], [ 125.712451, 41.095485 ], [ 125.739552, 41.08917 ], [ 125.726617, 41.055332 ], [ 125.684118, 41.021929 ], [ 125.674879, 40.974503 ], [ 125.650241, 40.970888 ], [ 125.635458, 40.94151 ], [ 125.589263, 40.931112 ], [ 125.584335, 40.891764 ], [ 125.652089, 40.91619 ], [ 125.687813, 40.897645 ], [ 125.707523, 40.866877 ], [ 125.648393, 40.826133 ], [ 125.641002, 40.798503 ], [ 125.67611, 40.788082 ], [ 125.685349, 40.769048 ], [ 125.61698, 40.763609 ], [ 125.585567, 40.788535 ], [ 125.551075, 40.761796 ], [ 125.544915, 40.729605 ], [ 125.49564, 40.728697 ], [ 125.459916, 40.707379 ], [ 125.453756, 40.676522 ], [ 125.418648, 40.673345 ], [ 125.422343, 40.635661 ], [ 125.375532, 40.658365 ], [ 125.329337, 40.643835 ], [ 125.305315, 40.661089 ], [ 125.279445, 40.655187 ], [ 125.262815, 40.620218 ], [ 125.181511, 40.611132 ], [ 125.113758, 40.569322 ], [ 125.076801, 40.562048 ], [ 125.015823, 40.533853 ], [ 125.004737, 40.496091 ], [ 125.042925, 40.483802 ], [ 125.044157, 40.466503 ], [ 124.985642, 40.475153 ], [ 124.945606, 40.45603 ], [ 124.913578, 40.481981 ], [ 124.834121, 40.423235 ], [ 124.739267, 40.371733 ], [ 124.722636, 40.321561 ], [ 124.62655, 40.291896 ], [ 124.513833, 40.22019 ], [ 124.490427, 40.18408 ], [ 124.457782, 40.177679 ], [ 124.428217, 40.144291 ], [ 124.346913, 40.079756 ], [ 124.336442, 40.049985 ], [ 124.372167, 40.021576 ], [ 124.349377, 39.989029 ], [ 124.288399, 39.962888 ], [ 124.286551, 39.931689 ], [ 124.241588, 39.928477 ], [ 124.216334, 39.89313 ], [ 124.214486, 39.865116 ], [ 124.173218, 39.841225 ], [ 124.151045, 39.74558 ], [ 124.099306, 39.777323 ], [ 124.103001, 39.823302 ], [ 124.002603, 39.800316 ], [ 123.95148, 39.817786 ], [ 123.812278, 39.831115 ], [ 123.795032, 39.822842 ], [ 123.687858, 39.808132 ], [ 123.674924, 39.826979 ], [ 123.645358, 39.823761 ], [ 123.642279, 39.796178 ], [ 123.612714, 39.775023 ], [ 123.579453, 39.781002 ], [ 123.546808, 39.756163 ], [ 123.536337, 39.788361 ], [ 123.484598, 39.763063 ], [ 123.477823, 39.74696 ], [ 123.392823, 39.723949 ], [ 123.388512, 39.74742 ], [ 123.350939, 39.750641 ], [ 123.274563, 39.753862 ], [ 123.270251, 39.714743 ], [ 123.286882, 39.704154 ], [ 123.253005, 39.689879 ], [ 123.215433, 39.696786 ], [ 123.212969, 39.665928 ], [ 123.166774, 39.674219 ], [ 123.146448, 39.647037 ], [ 123.103332, 39.676983 ], [ 123.010941, 39.655331 ], [ 123.021412, 39.64335 ], [ 122.978912, 39.616156 ], [ 122.972753, 39.594946 ], [ 122.941956, 39.604629 ], [ 122.860652, 39.604629 ], [ 122.847101, 39.581571 ], [ 122.808913, 39.559889 ], [ 122.682645, 39.514658 ], [ 122.649385, 39.516505 ], [ 122.637066, 39.488799 ], [ 122.581631, 39.464316 ], [ 122.532972, 39.419947 ], [ 122.489856, 39.403764 ], [ 122.412864, 39.411625 ], [ 122.366053, 39.370461 ], [ 122.30877, 39.346399 ], [ 122.274893, 39.322329 ], [ 122.242865, 39.267678 ], [ 122.160329, 39.238019 ], [ 122.117213, 39.213911 ], [ 122.123988, 39.172631 ], [ 122.167104, 39.158711 ], [ 122.127684, 39.144788 ], [ 122.088264, 39.112291 ], [ 122.048228, 39.101146 ], [ 122.071634, 39.074204 ], [ 122.061778, 39.060264 ], [ 122.013735, 39.073275 ], [ 121.963228, 39.030053 ], [ 121.913953, 39.0598 ], [ 121.929352, 39.024939 ], [ 121.864062, 39.037026 ], [ 121.855439, 39.025869 ], [ 121.905946, 38.997503 ], [ 121.920728, 38.969591 ], [ 121.863446, 38.942598 ], [ 121.804932, 38.970986 ], [ 121.790149, 39.022614 ], [ 121.756889, 39.025869 ], [ 121.73841, 38.998898 ], [ 121.671273, 39.010059 ], [ 121.66265, 38.966333 ], [ 121.618918, 38.950046 ], [ 121.655874, 38.946788 ], [ 121.719316, 38.920252 ], [ 121.708845, 38.872744 ], [ 121.675585, 38.86156 ], [ 121.618302, 38.862492 ], [ 121.564715, 38.874607 ], [ 121.509897, 38.817743 ], [ 121.399028, 38.812613 ], [ 121.359608, 38.822406 ], [ 121.302325, 38.78976 ], [ 121.259825, 38.786495 ], [ 121.198848, 38.721623 ], [ 121.13787, 38.723023 ], [ 121.112, 38.776231 ], [ 121.12863, 38.799089 ], [ 121.110768, 38.862026 ], [ 121.129862, 38.879266 ], [ 121.094138, 38.894173 ], [ 121.08921, 38.922115 ], [ 121.128014, 38.958888 ], [ 121.180369, 38.959819 ], [ 121.204391, 38.941202 ], [ 121.275224, 38.971917 ], [ 121.341129, 38.980757 ], [ 121.317108, 39.012384 ], [ 121.370695, 39.060264 ], [ 121.431057, 39.027263 ], [ 121.508049, 39.034237 ], [ 121.581962, 39.075598 ], [ 121.599208, 39.098824 ], [ 121.562252, 39.127149 ], [ 121.590585, 39.154999 ], [ 121.642324, 39.11972 ], [ 121.605983, 39.080708 ], [ 121.631853, 39.077921 ], [ 121.68236, 39.117863 ], [ 121.639244, 39.166136 ], [ 121.604136, 39.166136 ], [ 121.586889, 39.193506 ], [ 121.591201, 39.228748 ], [ 121.631237, 39.22643 ], [ 121.589353, 39.263044 ], [ 121.623846, 39.285745 ], [ 121.672505, 39.275554 ], [ 121.667577, 39.310754 ], [ 121.70207, 39.326496 ], [ 121.72486, 39.364447 ], [ 121.621382, 39.326033 ], [ 121.562252, 39.322792 ], [ 121.51544, 39.286672 ], [ 121.464933, 39.30103 ], [ 121.466781, 39.320014 ], [ 121.435984, 39.329736 ], [ 121.432904, 39.357506 ], [ 121.35468, 39.377863 ], [ 121.324499, 39.371386 ], [ 121.307869, 39.391277 ], [ 121.270296, 39.374162 ], [ 121.245659, 39.389427 ], [ 121.246891, 39.421334 ], [ 121.304173, 39.48187 ], [ 121.286927, 39.507271 ], [ 121.268449, 39.482794 ], [ 121.224717, 39.519275 ], [ 121.226565, 39.554814 ], [ 121.263521, 39.589873 ], [ 121.299246, 39.606013 ], [ 121.325731, 39.601402 ], [ 121.450151, 39.624914 ], [ 121.451999, 39.658095 ], [ 121.482796, 39.659478 ], [ 121.502506, 39.703233 ], [ 121.45939, 39.747881 ], [ 121.487107, 39.760303 ], [ 121.472325, 39.802155 ], [ 121.530223, 39.851334 ], [ 121.541926, 39.874302 ], [ 121.572107, 39.865116 ], [ 121.626925, 39.882569 ], [ 121.699606, 39.937196 ], [ 121.76428, 39.933525 ], [ 121.779062, 39.942702 ], [ 121.796309, 39.999116 ], [ 121.824642, 40.025701 ], [ 121.910257, 40.072887 ], [ 121.956453, 40.133311 ], [ 121.995257, 40.128277 ], [ 122.003264, 40.172191 ], [ 121.98109, 40.173106 ], [ 121.950293, 40.204194 ], [ 121.940438, 40.242121 ], [ 122.02667, 40.244862 ], [ 122.039605, 40.260391 ], [ 122.040221, 40.322017 ], [ 122.079641, 40.332967 ], [ 122.110438, 40.315629 ], [ 122.138155, 40.338897 ], [ 122.111054, 40.348932 ], [ 122.135691, 40.374925 ], [ 122.152322, 40.357597 ], [ 122.198517, 40.382219 ], [ 122.186814, 40.422779 ], [ 122.229314, 40.424146 ], [ 122.250872, 40.445555 ], [ 122.241633, 40.465137 ], [ 122.278589, 40.482891 ], [ 122.244712, 40.485167 ], [ 122.245944, 40.519752 ], [ 122.150474, 40.588413 ], [ 122.133843, 40.614313 ], [ 122.148626, 40.671983 ], [ 122.122141, 40.657457 ], [ 122.06609, 40.64883 ], [ 122.025438, 40.674253 ], [ 121.951525, 40.680607 ], [ 121.936127, 40.711462 ], [ 121.934279, 40.79805 ], [ 121.883772, 40.802127 ], [ 121.84312, 40.831567 ], [ 121.816019, 40.894931 ], [ 121.778446, 40.886787 ], [ 121.735331, 40.862351 ], [ 121.732251, 40.846961 ], [ 121.682976, 40.829755 ], [ 121.626309, 40.844244 ], [ 121.576418, 40.837906 ], [ 121.553013, 40.817528 ], [ 121.55486, 40.849677 ], [ 121.526527, 40.85194 ], [ 121.499426, 40.880001 ], [ 121.440296, 40.88181 ], [ 121.440912, 40.84017 ], [ 121.342977, 40.841528 ], [ 121.290622, 40.851488 ], [ 121.274608, 40.886335 ], [ 121.251202, 40.880453 ], [ 121.23642, 40.851035 ], [ 121.177906, 40.873665 ], [ 121.126167, 40.86914 ], [ 121.076892, 40.815716 ], [ 121.086747, 40.79805 ], [ 121.010986, 40.784457 ], [ 121.00729, 40.807563 ], [ 120.971566, 40.805751 ], [ 120.994356, 40.790801 ], [ 120.980189, 40.766329 ], [ 120.991276, 40.744115 ], [ 121.028848, 40.746382 ], [ 121.032544, 40.709193 ], [ 120.983269, 40.712822 ], [ 120.945081, 40.687868 ], [ 120.861313, 40.684692 ], [ 120.8299, 40.671076 ], [ 120.837291, 40.644289 ], [ 120.822509, 40.59432 ], [ 120.72827, 40.539311 ], [ 120.72211, 40.515657 ], [ 120.693777, 40.505647 ], [ 120.666676, 40.467413 ], [ 120.615553, 40.453298 ], [ 120.617401, 40.41959 ], [ 120.596459, 40.399084 ], [ 120.602618, 40.36079 ], [ 120.537329, 40.325211 ], [ 120.52193, 40.304676 ], [ 120.523778, 40.256737 ], [ 120.491749, 40.20008 ], [ 120.451097, 40.177679 ], [ 120.371641, 40.174478 ], [ 120.273091, 40.127362 ], [ 120.161606, 40.096239 ], [ 120.134504, 40.074719 ], [ 120.092005, 40.077466 ], [ 119.947259, 40.040364 ], [ 119.941715, 40.009659 ], [ 119.91831, 39.989946 ], [ 119.854252, 39.98857 ], [ 119.845629, 40.000949 ], [ 119.845629, 40.000949 ], [ 119.854252, 40.033033 ], [ 119.81668, 40.050443 ], [ 119.81668, 40.050443 ], [ 119.787115, 40.041739 ], [ 119.787115, 40.041739 ], [ 119.783419, 40.046778 ], [ 119.783419, 40.046778 ], [ 119.772332, 40.08113 ], [ 119.736608, 40.104936 ], [ 119.760629, 40.136056 ], [ 119.745847, 40.207851 ], [ 119.716898, 40.195966 ], [ 119.671934, 40.23938 ], [ 119.639289, 40.231613 ], [ 119.639289, 40.231613 ], [ 119.651608, 40.271808 ], [ 119.598021, 40.334335 ], [ 119.586934, 40.375381 ], [ 119.604797, 40.455119 ], [ 119.553674, 40.502007 ], [ 119.572152, 40.523846 ], [ 119.559217, 40.547952 ], [ 119.503783, 40.553864 ], [ 119.477913, 40.533399 ], [ 119.429254, 40.540221 ], [ 119.30237, 40.530215 ], [ 119.256175, 40.543404 ], [ 119.22045, 40.569322 ], [ 119.230921, 40.603863 ], [ 119.177951, 40.609315 ], [ 119.162552, 40.600228 ], [ 119.14469, 40.632482 ], [ 119.184726, 40.680153 ], [ 119.165632, 40.69286 ], [ 119.115125, 40.666536 ], [ 119.054763, 40.664721 ], [ 119.028277, 40.692406 ], [ 119.011031, 40.687414 ], [ 118.96114, 40.72008 ], [ 118.950053, 40.747743 ], [ 118.895234, 40.75409 ], [ 118.907553, 40.775394 ], [ 118.878604, 40.783098 ], [ 118.845959, 40.822057 ], [ 118.873061, 40.847866 ], [ 118.90201, 40.960946 ], [ 118.916792, 40.969984 ], [ 118.977154, 40.959138 ], [ 118.977154, 40.959138 ], [ 119.00056, 40.967273 ], [ 119.013495, 41.007479 ], [ 118.951901, 41.018317 ], [ 118.937118, 41.052625 ], [ 118.964836, 41.079246 ], [ 119.037516, 41.067516 ], [ 119.080632, 41.095936 ], [ 119.081248, 41.131555 ], [ 119.126212, 41.138767 ], [ 119.189038, 41.198234 ], [ 119.169943, 41.222996 ], [ 119.204436, 41.222546 ], [ 119.209364, 41.244599 ], [ 119.2494, 41.279689 ], [ 119.239545, 41.31431 ], [ 119.296211, 41.325097 ], [ 119.330704, 41.385293 ], [ 119.309762, 41.405944 ], [ 119.376283, 41.422102 ], [ 119.378131, 41.459787 ], [ 119.401537, 41.472343 ], [ 119.406464, 41.503276 ], [ 119.361501, 41.545841 ], [ 119.362116, 41.566442 ], [ 119.420015, 41.567785 ], [ 119.415703, 41.590169 ], [ 119.342406, 41.617914 ], [ 119.307914, 41.657273 ], [ 119.299907, 41.705545 ], [ 119.319001, 41.727435 ], [ 119.317769, 41.764049 ], [ 119.292515, 41.790827 ], [ 119.312841, 41.80555 ], [ 119.334399, 41.871539 ], [ 119.323312, 41.889807 ], [ 119.340559, 41.926774 ], [ 119.323928, 41.937014 ], [ 119.324544, 41.969505 ], [ 119.375667, 42.023322 ], [ 119.384906, 42.08953 ], [ 119.352261, 42.118391 ], [ 119.314689, 42.119723 ], [ 119.30853, 42.147239 ], [ 119.286972, 42.154781 ], [ 119.277733, 42.185387 ], [ 119.237697, 42.200905 ], [ 119.274037, 42.239021 ], [ 119.280197, 42.260728 ], [ 119.34795, 42.300578 ], [ 119.432949, 42.317396 ], [ 119.482841, 42.347037 ], [ 119.502551, 42.388159 ], [ 119.540123, 42.363401 ], [ 119.572152, 42.359421 ], [ 119.571536, 42.335536 ], [ 119.539507, 42.297922 ], [ 119.557985, 42.289068 ] ] ], [ [ [ 122.673406, 39.269531 ], [ 122.67895, 39.268605 ], [ 122.57732, 39.269994 ], [ 122.497248, 39.300566 ], [ 122.540979, 39.308439 ], [ 122.593334, 39.278334 ], [ 122.641993, 39.288061 ], [ 122.673406, 39.269531 ] ] ], [ [ [ 122.335256, 39.149894 ], [ 122.316161, 39.185157 ], [ 122.343263, 39.203246 ], [ 122.393154, 39.213448 ], [ 122.383299, 39.190723 ], [ 122.398697, 39.16196 ], [ 122.366053, 39.174951 ], [ 122.335256, 39.149894 ] ] ], [ [ [ 122.691884, 39.23292 ], [ 122.691268, 39.23431 ], [ 122.690037, 39.234774 ], [ 122.628443, 39.231993 ], [ 122.635834, 39.241727 ], [ 122.740544, 39.248679 ], [ 122.751631, 39.229675 ], [ 122.696812, 39.206492 ], [ 122.691884, 39.23292 ] ] ], [ [ [ 122.759022, 39.025404 ], [ 122.732536, 39.013779 ], [ 122.704819, 39.044463 ], [ 122.725145, 39.048181 ], [ 122.759022, 39.025404 ] ] ], [ [ [ 123.022644, 39.546507 ], [ 123.036194, 39.533123 ], [ 122.995542, 39.495264 ], [ 122.945035, 39.520198 ], [ 122.96105, 39.551122 ], [ 123.022644, 39.546507 ] ] ], [ [ [ 122.503407, 39.241263 ], [ 122.547755, 39.229211 ], [ 122.502175, 39.224112 ], [ 122.503407, 39.241263 ] ] ], [ [ [ 120.786784, 40.473787 ], [ 120.774465, 40.48016 ], [ 120.805262, 40.525666 ], [ 120.8299, 40.516112 ], [ 120.83298, 40.491995 ], [ 120.786784, 40.473787 ] ] ], [ [ [ 123.086702, 39.426881 ], [ 123.054057, 39.457847 ], [ 123.090397, 39.450915 ], [ 123.086702, 39.426881 ] ] ], [ [ [ 123.160614, 39.025404 ], [ 123.143984, 39.038885 ], [ 123.145832, 39.091857 ], [ 123.20065, 39.077921 ], [ 123.205578, 39.057011 ], [ 123.160614, 39.025404 ] ] ], [ [ [ 123.716807, 39.74512 ], [ 123.719887, 39.763063 ], [ 123.756843, 39.754322 ], [ 123.716807, 39.74512 ] ] ] ] } }, +{ "type": "Feature", "properties": { "adcode": "220000", "name": "吉林省", "center": [ 125.3245, 43.886841 ], "centroid": [ 126.171249, 43.70394 ], "childrenNum": 9, "level": "province", "parent": { "adcode": 100000 }, "subFeatureIndex": 6, "acroutes": [ 100000 ] }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 126.188572, 41.114875 ], [ 126.187956, 41.113072 ], [ 126.16763, 41.094583 ], [ 126.124514, 41.092327 ], [ 126.133753, 41.063906 ], [ 126.099877, 41.036376 ], [ 126.1085, 41.011995 ], [ 126.066, 40.997542 ], [ 126.08263, 40.976762 ], [ 126.051833, 40.96185 ], [ 126.041362, 40.928851 ], [ 126.008102, 40.936537 ], [ 125.959442, 40.88181 ], [ 125.921254, 40.882715 ], [ 125.875059, 40.908501 ], [ 125.860892, 40.888597 ], [ 125.817161, 40.866877 ], [ 125.778356, 40.897645 ], [ 125.707523, 40.866877 ], [ 125.687813, 40.897645 ], [ 125.652089, 40.91619 ], [ 125.584335, 40.891764 ], [ 125.589263, 40.931112 ], [ 125.635458, 40.94151 ], [ 125.650241, 40.970888 ], [ 125.674879, 40.974503 ], [ 125.684118, 41.021929 ], [ 125.726617, 41.055332 ], [ 125.739552, 41.08917 ], [ 125.712451, 41.095485 ], [ 125.734009, 41.125695 ], [ 125.759878, 41.132908 ], [ 125.791291, 41.167607 ], [ 125.73832, 41.178418 ], [ 125.758646, 41.232449 ], [ 125.749407, 41.245499 ], [ 125.695205, 41.244599 ], [ 125.685349, 41.273842 ], [ 125.646545, 41.264396 ], [ 125.642234, 41.296327 ], [ 125.62006, 41.318355 ], [ 125.637306, 41.34442 ], [ 125.610205, 41.365084 ], [ 125.589879, 41.359245 ], [ 125.581256, 41.396517 ], [ 125.547995, 41.401006 ], [ 125.534444, 41.428833 ], [ 125.533212, 41.479069 ], [ 125.493176, 41.509103 ], [ 125.507343, 41.534195 ], [ 125.479626, 41.544946 ], [ 125.450061, 41.597777 ], [ 125.461148, 41.642516 ], [ 125.446981, 41.67605 ], [ 125.412488, 41.691246 ], [ 125.344119, 41.672474 ], [ 125.317018, 41.676944 ], [ 125.332416, 41.711354 ], [ 125.336112, 41.768067 ], [ 125.336112, 41.768067 ], [ 125.323177, 41.771191 ], [ 125.323177, 41.771191 ], [ 125.319482, 41.776993 ], [ 125.319482, 41.776993 ], [ 125.294844, 41.822945 ], [ 125.307779, 41.924548 ], [ 125.35151, 41.92811 ], [ 125.291764, 41.958825 ], [ 125.29854, 41.974399 ], [ 125.369989, 42.002868 ], [ 125.363213, 42.017097 ], [ 125.416184, 42.063766 ], [ 125.414336, 42.101964 ], [ 125.446365, 42.098411 ], [ 125.490097, 42.136145 ], [ 125.458068, 42.160105 ], [ 125.458068, 42.160105 ], [ 125.41372, 42.156112 ], [ 125.368141, 42.182726 ], [ 125.357054, 42.145464 ], [ 125.305931, 42.146351 ], [ 125.312706, 42.197359 ], [ 125.280677, 42.175187 ], [ 125.312706, 42.219966 ], [ 125.27575, 42.231045 ], [ 125.27575, 42.266928 ], [ 125.299156, 42.289953 ], [ 125.264047, 42.312528 ], [ 125.224011, 42.30102 ], [ 125.175352, 42.308102 ], [ 125.167345, 42.351903 ], [ 125.203685, 42.366938 ], [ 125.185823, 42.38197 ], [ 125.186439, 42.427928 ], [ 125.140243, 42.44692 ], [ 125.150098, 42.458842 ], [ 125.105135, 42.490624 ], [ 125.068794, 42.499449 ], [ 125.090968, 42.515773 ], [ 125.066946, 42.534738 ], [ 125.089736, 42.567803 ], [ 125.082961, 42.591159 ], [ 125.097127, 42.622433 ], [ 125.038613, 42.615387 ], [ 125.010896, 42.63212 ], [ 125.014592, 42.666014 ], [ 124.99057, 42.677455 ], [ 124.968396, 42.722756 ], [ 124.996729, 42.745174 ], [ 124.975171, 42.802722 ], [ 124.92836, 42.819844 ], [ 124.897563, 42.787791 ], [ 124.874157, 42.789987 ], [ 124.856911, 42.824234 ], [ 124.84952, 42.882585 ], [ 124.87231, 42.962344 ], [ 124.869846, 42.988178 ], [ 124.840897, 43.032377 ], [ 124.88894, 43.074796 ], [ 124.882781, 43.13422 ], [ 124.785462, 43.117185 ], [ 124.755281, 43.074359 ], [ 124.719557, 43.069987 ], [ 124.686912, 43.051185 ], [ 124.677673, 43.002185 ], [ 124.658579, 42.972854 ], [ 124.635173, 42.972854 ], [ 124.632093, 42.949642 ], [ 124.607456, 42.937376 ], [ 124.586514, 42.905384 ], [ 124.466406, 42.847054 ], [ 124.435609, 42.880831 ], [ 124.371551, 42.880831 ], [ 124.38079, 42.912835 ], [ 124.431913, 42.930803 ], [ 124.442384, 42.958841 ], [ 124.42329, 42.975482 ], [ 124.369703, 42.972854 ], [ 124.333363, 42.997371 ], [ 124.425754, 43.076107 ], [ 124.366007, 43.121554 ], [ 124.273617, 43.17875 ], [ 124.287167, 43.207983 ], [ 124.27608, 43.233278 ], [ 124.228653, 43.235022 ], [ 124.215102, 43.255947 ], [ 124.168291, 43.244177 ], [ 124.114088, 43.247229 ], [ 124.117168, 43.2773 ], [ 124.099306, 43.292983 ], [ 124.032784, 43.280786 ], [ 123.964415, 43.34088 ], [ 123.896046, 43.361333 ], [ 123.881263, 43.392218 ], [ 123.881263, 43.392218 ], [ 123.852314, 43.406133 ], [ 123.857858, 43.459153 ], [ 123.857858, 43.459153 ], [ 123.79688, 43.489988 ], [ 123.747604, 43.472184 ], [ 123.749452, 43.439167 ], [ 123.710032, 43.417001 ], [ 123.703873, 43.37047 ], [ 123.608402, 43.366119 ], [ 123.54496, 43.415262 ], [ 123.519707, 43.402219 ], [ 123.486446, 43.44525 ], [ 123.442098, 43.437863 ], [ 123.419925, 43.410046 ], [ 123.382968, 43.469143 ], [ 123.36449, 43.483475 ], [ 123.315831, 43.492159 ], [ 123.329998, 43.519071 ], [ 123.304744, 43.550742 ], [ 123.360179, 43.567223 ], [ 123.452569, 43.545971 ], [ 123.452569, 43.545971 ], [ 123.461193, 43.568523 ], [ 123.434091, 43.575461 ], [ 123.421157, 43.598435 ], [ 123.5117, 43.592801 ], [ 123.510468, 43.624867 ], [ 123.536953, 43.633964 ], [ 123.518475, 43.682024 ], [ 123.520323, 43.708419 ], [ 123.48275, 43.737396 ], [ 123.498149, 43.771114 ], [ 123.461809, 43.822518 ], [ 123.467968, 43.853599 ], [ 123.397135, 43.954929 ], [ 123.37065, 43.970006 ], [ 123.400831, 43.979481 ], [ 123.365722, 44.013922 ], [ 123.331229, 44.028984 ], [ 123.32815, 44.084035 ], [ 123.350939, 44.092633 ], [ 123.362642, 44.133452 ], [ 123.386664, 44.161794 ], [ 123.323838, 44.179823 ], [ 123.286882, 44.211574 ], [ 123.277027, 44.25274 ], [ 123.196955, 44.34483 ], [ 123.128585, 44.367081 ], [ 123.114419, 44.40258 ], [ 123.142136, 44.428228 ], [ 123.125506, 44.455147 ], [ 123.137209, 44.486322 ], [ 123.12489, 44.5098 ], [ 123.06576, 44.505959 ], [ 123.025108, 44.493153 ], [ 122.85634, 44.398304 ], [ 122.76087, 44.369648 ], [ 122.702971, 44.319145 ], [ 122.675254, 44.285738 ], [ 122.641993, 44.283595 ], [ 122.515726, 44.251025 ], [ 122.483081, 44.236877 ], [ 122.319241, 44.233018 ], [ 122.271198, 44.255741 ], [ 122.291524, 44.310152 ], [ 122.294604, 44.41113 ], [ 122.28598, 44.477783 ], [ 122.228082, 44.480345 ], [ 122.224386, 44.526016 ], [ 122.196053, 44.559712 ], [ 122.13138, 44.577619 ], [ 122.113517, 44.615546 ], [ 122.103046, 44.67388 ], [ 122.117213, 44.701961 ], [ 122.161561, 44.728328 ], [ 122.152322, 44.744057 ], [ 122.10243, 44.736406 ], [ 122.110438, 44.767856 ], [ 122.142467, 44.753833 ], [ 122.168952, 44.770405 ], [ 122.099967, 44.7823 ], [ 122.098119, 44.81882 ], [ 122.04946, 44.912985 ], [ 122.079025, 44.914256 ], [ 122.087032, 44.95281 ], [ 122.074713, 45.006573 ], [ 122.098735, 45.02138 ], [ 122.119677, 45.068739 ], [ 122.109822, 45.142236 ], [ 122.143082, 45.183167 ], [ 122.192358, 45.180636 ], [ 122.22993, 45.206784 ], [ 122.239169, 45.276313 ], [ 122.147394, 45.295682 ], [ 122.146778, 45.374352 ], [ 122.180039, 45.409655 ], [ 122.168336, 45.439897 ], [ 122.064242, 45.472641 ], [ 122.002648, 45.507882 ], [ 121.993409, 45.552741 ], [ 121.966308, 45.596308 ], [ 121.995873, 45.59882 ], [ 122.003264, 45.623102 ], [ 121.970004, 45.692956 ], [ 121.934279, 45.71051 ], [ 121.867142, 45.719703 ], [ 121.812323, 45.704659 ], [ 121.811091, 45.687103 ], [ 121.713773, 45.701734 ], [ 121.666345, 45.727641 ], [ 121.644172, 45.752284 ], [ 121.657106, 45.770238 ], [ 121.697142, 45.76314 ], [ 121.754425, 45.794862 ], [ 121.766744, 45.830318 ], [ 121.766744, 45.830318 ], [ 121.769823, 45.84366 ], [ 121.817251, 45.875336 ], [ 121.805548, 45.900746 ], [ 121.821562, 45.918235 ], [ 121.809243, 45.961102 ], [ 121.761816, 45.998947 ], [ 121.819098, 46.023054 ], [ 121.843736, 46.024301 ], [ 121.864062, 46.002272 ], [ 121.923808, 46.004767 ], [ 121.92812, 45.988552 ], [ 122.040221, 45.959022 ], [ 122.085184, 45.912406 ], [ 122.091344, 45.882002 ], [ 122.200981, 45.857 ], [ 122.236705, 45.831569 ], [ 122.253952, 45.7982 ], [ 122.301379, 45.813218 ], [ 122.337719, 45.859917 ], [ 122.372828, 45.856166 ], [ 122.362357, 45.917403 ], [ 122.446125, 45.916986 ], [ 122.496016, 45.85825 ], [ 122.504639, 45.786933 ], [ 122.522501, 45.786933 ], [ 122.556378, 45.82156 ], [ 122.603189, 45.778169 ], [ 122.640761, 45.771072 ], [ 122.650001, 45.731401 ], [ 122.671558, 45.70048 ], [ 122.741775, 45.705077 ], [ 122.751015, 45.735996 ], [ 122.792283, 45.766063 ], [ 122.752246, 45.834905 ], [ 122.772572, 45.856583 ], [ 122.80029, 45.856583 ], [ 122.828623, 45.912406 ], [ 122.792898, 46.073313 ], [ 123.04605, 46.099878 ], [ 123.070071, 46.123527 ], [ 123.112571, 46.130163 ], [ 123.102716, 46.172037 ], [ 123.127354, 46.174523 ], [ 123.128585, 46.210565 ], [ 123.178476, 46.248239 ], [ 123.248078, 46.273065 ], [ 123.286266, 46.250308 ], [ 123.320758, 46.254447 ], [ 123.357099, 46.232096 ], [ 123.357099, 46.232096 ], [ 123.430396, 46.243687 ], [ 123.452569, 46.233338 ], [ 123.499381, 46.259826 ], [ 123.569598, 46.223816 ], [ 123.569598, 46.223816 ], [ 123.604706, 46.251964 ], [ 123.673692, 46.258585 ], [ 123.726047, 46.255688 ], [ 123.775938, 46.263136 ], [ 123.84985, 46.302428 ], [ 123.896046, 46.303668 ], [ 123.917604, 46.25693 ], [ 123.936082, 46.286715 ], [ 123.960103, 46.288369 ], [ 123.952096, 46.256516 ], [ 123.979814, 46.228784 ], [ 123.956408, 46.206009 ], [ 123.971806, 46.170379 ], [ 124.001987, 46.166649 ], [ 123.991516, 46.143019 ], [ 124.01677, 46.118549 ], [ 123.99398, 46.101123 ], [ 124.015538, 46.088257 ], [ 124.009995, 46.057534 ], [ 124.034016, 46.045074 ], [ 124.040176, 46.01973 ], [ 123.989053, 46.011833 ], [ 124.011842, 45.981899 ], [ 123.973654, 45.973997 ], [ 123.968727, 45.936551 ], [ 123.996444, 45.906993 ], [ 124.061118, 45.886168 ], [ 124.067277, 45.840325 ], [ 124.03648, 45.83824 ], [ 124.064197, 45.802372 ], [ 124.001987, 45.770655 ], [ 124.014922, 45.749779 ], [ 124.054342, 45.751449 ], [ 124.098074, 45.722628 ], [ 124.10177, 45.700898 ], [ 124.13503, 45.690448 ], [ 124.122096, 45.669123 ], [ 124.147349, 45.665359 ], [ 124.128255, 45.641933 ], [ 124.162132, 45.616404 ], [ 124.226805, 45.633564 ], [ 124.238508, 45.591702 ], [ 124.273001, 45.584163 ], [ 124.264377, 45.555256 ], [ 124.287783, 45.539329 ], [ 124.348761, 45.546874 ], [ 124.369087, 45.512915 ], [ 124.352457, 45.496557 ], [ 124.374015, 45.45795 ], [ 124.398652, 45.440737 ], [ 124.480572, 45.456271 ], [ 124.507058, 45.424778 ], [ 124.544014, 45.411756 ], [ 124.579738, 45.424358 ], [ 124.575427, 45.451234 ], [ 124.625318, 45.437377 ], [ 124.690607, 45.452493 ], [ 124.729412, 45.444096 ], [ 124.776223, 45.468024 ], [ 124.792853, 45.436958 ], [ 124.839665, 45.455852 ], [ 124.886476, 45.442836 ], [ 124.884628, 45.495299 ], [ 124.911114, 45.535976 ], [ 124.936983, 45.53388 ], [ 124.961005, 45.495299 ], [ 125.025678, 45.493201 ], [ 125.0497, 45.428558 ], [ 125.08912, 45.420998 ], [ 125.06633, 45.39915 ], [ 125.097127, 45.38276 ], [ 125.137779, 45.409655 ], [ 125.189518, 45.39915 ], [ 125.248649, 45.417637 ], [ 125.301619, 45.402092 ], [ 125.319482, 45.422678 ], [ 125.361981, 45.392847 ], [ 125.398322, 45.416797 ], [ 125.434662, 45.462988 ], [ 125.424807, 45.485649 ], [ 125.480242, 45.486488 ], [ 125.497488, 45.469283 ], [ 125.583104, 45.491942 ], [ 125.61698, 45.517947 ], [ 125.660096, 45.507043 ], [ 125.687813, 45.514173 ], [ 125.711835, 45.477677 ], [ 125.712451, 45.389485 ], [ 125.695205, 45.352066 ], [ 125.726001, 45.336503 ], [ 125.761726, 45.291472 ], [ 125.815929, 45.264942 ], [ 125.823936, 45.237978 ], [ 125.849805, 45.23882 ], [ 125.915095, 45.196664 ], [ 125.957595, 45.201303 ], [ 125.992703, 45.192447 ], [ 125.998247, 45.162072 ], [ 126.047522, 45.170933 ], [ 126.091869, 45.149411 ], [ 126.142992, 45.147723 ], [ 126.166398, 45.13337 ], [ 126.225528, 45.154054 ], [ 126.235383, 45.140125 ], [ 126.285274, 45.162494 ], [ 126.293282, 45.180214 ], [ 126.356107, 45.185698 ], [ 126.402919, 45.222805 ], [ 126.519331, 45.248091 ], [ 126.540273, 45.23882 ], [ 126.569222, 45.252725 ], [ 126.644983, 45.225334 ], [ 126.640055, 45.214373 ], [ 126.685635, 45.187807 ], [ 126.732446, 45.187385 ], [ 126.787265, 45.159118 ], [ 126.792808, 45.135481 ], [ 126.85625, 45.145613 ], [ 126.96404, 45.132104 ], [ 126.970815, 45.070852 ], [ 126.984981, 45.067893 ], [ 127.018242, 45.024341 ], [ 127.050271, 45.004034 ], [ 127.092771, 44.94688 ], [ 127.073061, 44.907051 ], [ 127.021938, 44.898997 ], [ 126.999764, 44.87398 ], [ 126.984366, 44.823914 ], [ 126.9973, 44.764882 ], [ 127.041032, 44.712169 ], [ 127.030561, 44.673454 ], [ 127.044112, 44.653874 ], [ 127.041648, 44.591258 ], [ 127.049655, 44.566961 ], [ 127.089691, 44.593816 ], [ 127.094619, 44.615972 ], [ 127.138966, 44.607451 ], [ 127.182082, 44.644507 ], [ 127.228893, 44.642804 ], [ 127.214111, 44.624917 ], [ 127.261538, 44.61299 ], [ 127.275705, 44.640249 ], [ 127.392733, 44.632158 ], [ 127.557189, 44.575488 ], [ 127.570124, 44.55033 ], [ 127.536247, 44.522176 ], [ 127.485124, 44.528576 ], [ 127.465414, 44.516628 ], [ 127.463566, 44.484615 ], [ 127.50853, 44.437202 ], [ 127.486356, 44.410275 ], [ 127.579363, 44.310581 ], [ 127.623711, 44.278025 ], [ 127.59045, 44.227872 ], [ 127.626174, 44.187977 ], [ 127.641573, 44.193555 ], [ 127.681609, 44.166946 ], [ 127.712406, 44.199133 ], [ 127.735811, 44.11412 ], [ 127.729036, 44.09908 ], [ 127.783239, 44.071997 ], [ 127.808492, 44.086615 ], [ 127.846065, 44.081886 ], [ 127.862695, 44.062967 ], [ 127.912586, 44.064687 ], [ 127.950158, 44.088334 ], [ 128.042549, 44.103807 ], [ 128.091208, 44.133022 ], [ 128.088129, 44.158359 ], [ 128.060411, 44.168663 ], [ 128.09244, 44.181539 ], [ 128.104143, 44.230017 ], [ 128.064107, 44.251454 ], [ 128.101679, 44.293449 ], [ 128.065339, 44.307155 ], [ 128.049941, 44.349965 ], [ 128.074578, 44.370075 ], [ 128.094904, 44.354673 ], [ 128.137404, 44.357668 ], [ 128.172512, 44.34697 ], [ 128.211317, 44.431647 ], [ 128.228563, 44.445748 ], [ 128.293237, 44.467961 ], [ 128.295084, 44.480772 ], [ 128.372693, 44.514495 ], [ 128.397946, 44.483761 ], [ 128.427511, 44.473512 ], [ 128.463236, 44.431647 ], [ 128.457076, 44.409848 ], [ 128.481714, 44.375637 ], [ 128.475555, 44.346114 ], [ 128.446605, 44.339694 ], [ 128.472475, 44.320001 ], [ 128.453997, 44.257884 ], [ 128.471859, 44.247596 ], [ 128.450301, 44.203423 ], [ 128.471859, 44.157501 ], [ 128.529141, 44.112401 ], [ 128.574721, 44.047914 ], [ 128.584576, 43.990246 ], [ 128.610445, 43.960529 ], [ 128.64001, 43.948035 ], [ 128.636315, 43.891132 ], [ 128.696061, 43.903207 ], [ 128.729938, 43.889838 ], [ 128.760734, 43.857482 ], [ 128.719467, 43.816905 ], [ 128.739177, 43.806972 ], [ 128.760119, 43.755554 ], [ 128.729322, 43.736964 ], [ 128.768126, 43.732207 ], [ 128.78722, 43.686784 ], [ 128.821097, 43.637429 ], [ 128.834647, 43.587599 ], [ 128.878379, 43.539898 ], [ 128.949828, 43.553779 ], [ 128.962763, 43.53903 ], [ 129.013886, 43.522976 ], [ 129.037907, 43.540332 ], [ 129.093958, 43.547706 ], [ 129.145081, 43.570258 ], [ 129.169102, 43.561585 ], [ 129.23008, 43.593234 ], [ 129.232544, 43.635263 ], [ 129.217146, 43.648689 ], [ 129.214066, 43.695006 ], [ 129.232544, 43.709284 ], [ 129.211602, 43.784509 ], [ 129.254718, 43.819496 ], [ 129.289826, 43.797038 ], [ 129.30892, 43.812155 ], [ 129.348341, 43.798333 ], [ 129.406855, 43.819496 ], [ 129.417942, 43.843672 ], [ 129.449971, 43.850578 ], [ 129.467833, 43.874741 ], [ 129.529427, 43.870427 ], [ 129.650767, 43.873016 ], [ 129.699426, 43.8838 ], [ 129.743158, 43.876035 ], [ 129.739462, 43.895876 ], [ 129.780114, 43.892857 ], [ 129.802904, 43.964837 ], [ 129.868193, 44.012631 ], [ 129.881128, 44.000148 ], [ 129.907614, 44.023821 ], [ 129.951345, 44.027263 ], [ 129.979062, 44.015644 ], [ 130.017867, 43.961821 ], [ 130.022794, 43.917866 ], [ 130.009243, 43.889407 ], [ 130.027722, 43.851872 ], [ 130.079461, 43.835039 ], [ 130.110873, 43.852735 ], [ 130.116417, 43.878192 ], [ 130.143518, 43.878624 ], [ 130.153373, 43.915711 ], [ 130.208192, 43.948466 ], [ 130.262395, 43.949328 ], [ 130.27225, 43.981634 ], [ 130.307358, 44.002731 ], [ 130.319061, 44.03974 ], [ 130.365256, 44.044042 ], [ 130.364025, 43.992399 ], [ 130.338155, 43.963975 ], [ 130.381887, 43.910106 ], [ 130.368336, 43.894151 ], [ 130.386198, 43.85403 ], [ 130.362793, 43.844967 ], [ 130.381887, 43.817768 ], [ 130.382503, 43.777164 ], [ 130.423155, 43.745179 ], [ 130.394206, 43.703227 ], [ 130.412684, 43.652586 ], [ 130.437937, 43.646091 ], [ 130.488444, 43.65605 ], [ 130.501995, 43.636563 ], [ 130.57098, 43.626167 ], [ 130.57098, 43.626167 ], [ 130.630726, 43.622268 ], [ 130.623335, 43.589767 ], [ 130.665835, 43.583698 ], [ 130.671378, 43.565054 ], [ 130.727429, 43.560284 ], [ 130.776704, 43.52341 ], [ 130.822899, 43.503446 ], [ 130.841378, 43.454374 ], [ 130.864167, 43.437863 ], [ 130.907283, 43.434387 ], [ 130.959638, 43.48608 ], [ 131.026775, 43.508655 ], [ 131.142572, 43.425695 ], [ 131.175217, 43.444816 ], [ 131.201086, 43.442209 ], [ 131.234963, 43.475224 ], [ 131.294093, 43.470012 ], [ 131.304564, 43.502144 ], [ 131.31873, 43.499539 ], [ 131.314419, 43.461325 ], [ 131.295941, 43.441774 ], [ 131.314419, 43.392653 ], [ 131.275615, 43.369165 ], [ 131.269455, 43.297775 ], [ 131.255289, 43.265099 ], [ 131.206014, 43.237202 ], [ 131.201086, 43.203185 ], [ 131.218948, 43.191405 ], [ 131.207861, 43.1316 ], [ 131.173985, 43.111506 ], [ 131.171521, 43.06955 ], [ 131.120398, 43.068238 ], [ 131.102536, 43.021002 ], [ 131.11855, 43.007875 ], [ 131.115471, 42.975482 ], [ 131.151195, 42.968475 ], [ 131.14442, 42.939566 ], [ 131.114855, 42.915027 ], [ 131.034167, 42.929051 ], [ 131.017536, 42.915027 ], [ 131.045869, 42.866796 ], [ 130.981812, 42.857145 ], [ 130.949783, 42.876884 ], [ 130.890653, 42.852758 ], [ 130.845073, 42.881269 ], [ 130.801957, 42.879515 ], [ 130.784095, 42.842227 ], [ 130.75453, 42.845738 ], [ 130.719422, 42.831695 ], [ 130.708335, 42.846615 ], [ 130.665835, 42.847932 ], [ 130.603625, 42.819405 ], [ 130.562357, 42.815015 ], [ 130.532792, 42.787352 ], [ 130.46627, 42.772417 ], [ 130.40714, 42.731548 ], [ 130.425003, 42.706926 ], [ 130.464423, 42.688453 ], [ 130.529096, 42.703408 ], [ 130.592538, 42.671295 ], [ 130.633806, 42.603494 ], [ 130.622719, 42.573092 ], [ 130.570364, 42.557224 ], [ 130.565437, 42.506509 ], [ 130.599929, 42.486211 ], [ 130.600545, 42.450453 ], [ 130.645509, 42.426603 ], [ 130.581451, 42.435437 ], [ 130.585763, 42.485328 ], [ 130.558661, 42.495919 ], [ 130.556198, 42.523712 ], [ 130.520473, 42.583228 ], [ 130.522937, 42.622433 ], [ 130.482285, 42.626837 ], [ 130.459495, 42.588075 ], [ 130.476125, 42.570007 ], [ 130.435474, 42.553257 ], [ 130.423771, 42.574855 ], [ 130.44656, 42.607459 ], [ 130.420691, 42.617148 ], [ 130.388046, 42.603054 ], [ 130.373264, 42.630799 ], [ 130.333228, 42.64973 ], [ 130.290112, 42.702968 ], [ 130.257467, 42.710884 ], [ 130.242069, 42.738582 ], [ 130.245148, 42.799209 ], [ 130.258083, 42.860655 ], [ 130.277793, 42.892232 ], [ 130.258083, 42.90626 ], [ 130.21004, 42.902315 ], [ 130.17062, 42.912397 ], [ 130.136127, 42.90363 ], [ 130.10225, 42.922916 ], [ 130.127504, 42.932556 ], [ 130.120729, 42.954461 ], [ 130.144134, 42.976357 ], [ 130.10841, 42.989929 ], [ 130.072685, 42.971541 ], [ 130.027106, 42.9676 ], [ 130.002468, 42.981174 ], [ 129.963664, 42.978547 ], [ 129.954425, 43.010938 ], [ 129.897143, 43.001748 ], [ 129.903918, 42.968475 ], [ 129.868193, 42.97373 ], [ 129.856491, 42.951833 ], [ 129.874969, 42.923792 ], [ 129.846636, 42.918533 ], [ 129.835549, 42.866796 ], [ 129.816454, 42.851003 ], [ 129.810911, 42.795257 ], [ 129.78381, 42.762752 ], [ 129.767179, 42.707806 ], [ 129.796744, 42.681854 ], [ 129.754245, 42.645768 ], [ 129.786889, 42.615387 ], [ 129.746237, 42.58455 ], [ 129.749933, 42.546644 ], [ 129.738846, 42.500332 ], [ 129.748701, 42.471204 ], [ 129.704354, 42.427045 ], [ 129.643991, 42.43102 ], [ 129.624281, 42.459284 ], [ 129.60026, 42.41114 ], [ 129.546057, 42.361632 ], [ 129.49863, 42.412023 ], [ 129.452434, 42.441179 ], [ 129.400695, 42.449128 ], [ 129.368051, 42.425719 ], [ 129.376058, 42.447803 ], [ 129.344029, 42.451777 ], [ 129.356348, 42.427045 ], [ 129.331094, 42.429695 ], [ 129.30892, 42.403628 ], [ 129.326167, 42.389927 ], [ 129.240551, 42.376223 ], [ 129.231312, 42.356325 ], [ 129.260261, 42.335536 ], [ 129.208522, 42.293052 ], [ 129.231312, 42.283755 ], [ 129.215914, 42.265157 ], [ 129.183269, 42.262056 ], [ 129.181421, 42.242122 ], [ 129.209138, 42.237692 ], [ 129.215914, 42.208442 ], [ 129.166639, 42.188047 ], [ 129.113668, 42.140583 ], [ 129.048378, 42.137476 ], [ 129.039139, 42.107736 ], [ 129.008958, 42.09175 ], [ 128.971386, 42.097079 ], [ 128.954755, 42.083756 ], [ 128.952908, 42.025545 ], [ 128.898089, 42.016653 ], [ 128.795227, 42.042436 ], [ 128.779213, 42.033546 ], [ 128.737945, 42.050435 ], [ 128.70222, 42.02021 ], [ 128.658489, 42.018876 ], [ 128.637547, 42.035324 ], [ 128.60675, 42.02999 ], [ 128.598127, 42.007315 ], [ 128.49896, 42.000644 ], [ 128.466316, 42.020654 ], [ 128.405338, 42.018876 ], [ 128.294468, 42.026434 ], [ 128.090593, 42.022877 ], [ 128.033926, 42.000199 ], [ 128.106607, 41.949923 ], [ 128.115846, 41.896935 ], [ 128.104143, 41.843457 ], [ 128.112766, 41.793504 ], [ 128.147875, 41.78101 ], [ 128.163889, 41.721628 ], [ 128.208853, 41.688565 ], [ 128.248889, 41.681414 ], [ 128.30186, 41.627756 ], [ 128.317874, 41.575844 ], [ 128.301244, 41.544498 ], [ 128.238418, 41.497898 ], [ 128.243345, 41.477276 ], [ 128.203925, 41.410882 ], [ 128.169433, 41.404149 ], [ 128.114614, 41.364186 ], [ 128.090593, 41.374516 ], [ 128.110919, 41.393375 ], [ 128.040085, 41.393375 ], [ 128.000049, 41.442741 ], [ 127.991426, 41.421204 ], [ 127.970484, 41.438704 ], [ 127.93168, 41.444984 ], [ 127.909506, 41.42973 ], [ 127.882405, 41.448124 ], [ 127.86947, 41.4037 ], [ 127.854688, 41.420755 ], [ 127.780159, 41.427038 ], [ 127.684073, 41.422999 ], [ 127.636645, 41.413575 ], [ 127.618783, 41.432871 ], [ 127.563964, 41.432871 ], [ 127.547334, 41.477276 ], [ 127.526392, 41.467859 ], [ 127.465414, 41.479069 ], [ 127.459255, 41.461581 ], [ 127.419835, 41.460235 ], [ 127.405668, 41.478621 ], [ 127.360088, 41.479518 ], [ 127.360704, 41.466065 ], [ 127.296031, 41.486243 ], [ 127.253531, 41.486691 ], [ 127.28864, 41.501932 ], [ 127.241212, 41.520754 ], [ 127.188241, 41.527475 ], [ 127.164836, 41.542706 ], [ 127.14143, 41.530163 ], [ 127.125416, 41.566442 ], [ 127.178386, 41.600015 ], [ 127.135887, 41.600463 ], [ 127.127263, 41.622388 ], [ 127.093387, 41.629993 ], [ 127.103242, 41.647883 ], [ 127.037952, 41.676944 ], [ 127.057662, 41.703758 ], [ 127.050887, 41.744852 ], [ 127.005923, 41.749317 ], [ 126.979438, 41.776993 ], [ 126.940018, 41.773423 ], [ 126.952953, 41.804212 ], [ 126.931395, 41.812687 ], [ 126.861178, 41.768067 ], [ 126.83962, 41.727435 ], [ 126.809439, 41.749317 ], [ 126.8002, 41.702865 ], [ 126.723207, 41.753335 ], [ 126.694874, 41.751103 ], [ 126.690562, 41.728328 ], [ 126.724439, 41.710907 ], [ 126.688099, 41.674262 ], [ 126.644983, 41.661297 ], [ 126.608027, 41.669345 ], [ 126.592628, 41.624624 ], [ 126.564295, 41.608965 ], [ 126.582773, 41.563307 ], [ 126.559983, 41.548081 ], [ 126.497158, 41.406842 ], [ 126.539041, 41.366881 ], [ 126.524259, 41.349362 ], [ 126.497158, 41.374965 ], [ 126.437411, 41.353405 ], [ 126.373354, 41.289133 ], [ 126.35426, 41.244599 ], [ 126.332086, 41.236949 ], [ 126.295129, 41.171661 ], [ 126.188572, 41.114875 ] ] ] ] } }, +{ "type": "Feature", "properties": { "adcode": "230000", "name": "黑龙江省", "center": [ 126.642464, 45.756967 ], "centroid": [ 127.693016, 48.04047 ], "childrenNum": 13, "level": "province", "parent": { "adcode": 100000 }, "subFeatureIndex": 7, "acroutes": [ 100000 ] }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 123.569598, 46.223816 ], [ 123.569598, 46.223816 ], [ 123.499381, 46.259826 ], [ 123.452569, 46.233338 ], [ 123.430396, 46.243687 ], [ 123.357099, 46.232096 ], [ 123.357099, 46.232096 ], [ 123.320758, 46.254447 ], [ 123.286266, 46.250308 ], [ 123.248078, 46.273065 ], [ 123.178476, 46.248239 ], [ 123.142136, 46.298293 ], [ 123.089781, 46.347888 ], [ 123.011557, 46.434984 ], [ 123.010325, 46.524823 ], [ 123.002318, 46.574624 ], [ 123.052825, 46.579972 ], [ 123.04605, 46.617803 ], [ 123.077462, 46.622324 ], [ 123.098404, 46.603002 ], [ 123.18094, 46.614103 ], [ 123.228368, 46.588198 ], [ 123.279491, 46.616981 ], [ 123.276411, 46.660947 ], [ 123.318295, 46.662179 ], [ 123.366338, 46.677784 ], [ 123.474743, 46.686817 ], [ 123.603475, 46.68928 ], [ 123.631808, 46.728675 ], [ 123.629344, 46.813524 ], [ 123.580069, 46.827447 ], [ 123.625648, 46.847508 ], [ 123.599163, 46.868378 ], [ 123.605322, 46.891286 ], [ 123.576989, 46.891286 ], [ 123.575757, 46.845461 ], [ 123.562823, 46.82581 ], [ 123.506772, 46.827038 ], [ 123.483366, 46.84587 ], [ 123.52833, 46.944836 ], [ 123.487678, 46.959951 ], [ 123.42362, 46.934212 ], [ 123.337389, 46.988943 ], [ 123.301664, 46.999965 ], [ 123.304128, 46.964852 ], [ 123.360179, 46.970978 ], [ 123.404526, 46.935438 ], [ 123.40699, 46.906416 ], [ 123.374345, 46.837683 ], [ 123.341084, 46.826628 ], [ 123.295505, 46.865105 ], [ 123.221592, 46.850373 ], [ 123.22344, 46.821305 ], [ 123.198802, 46.803283 ], [ 123.163694, 46.74016 ], [ 123.103332, 46.734828 ], [ 123.076846, 46.745082 ], [ 123.026339, 46.718829 ], [ 123.00355, 46.730726 ], [ 122.996774, 46.761483 ], [ 122.906847, 46.80738 ], [ 122.893913, 46.895376 ], [ 122.895144, 46.960359 ], [ 122.83971, 46.937072 ], [ 122.791051, 46.941567 ], [ 122.798442, 46.9575 ], [ 122.77442, 46.973837 ], [ 122.778116, 47.002822 ], [ 122.845869, 47.046881 ], [ 122.852645, 47.072158 ], [ 122.821232, 47.065636 ], [ 122.710363, 47.093349 ], [ 122.710363, 47.093349 ], [ 122.679566, 47.094164 ], [ 122.615508, 47.124306 ], [ 122.582863, 47.158092 ], [ 122.582863, 47.158092 ], [ 122.531124, 47.198771 ], [ 122.498479, 47.255262 ], [ 122.462755, 47.27841 ], [ 122.441197, 47.310476 ], [ 122.441197, 47.310476 ], [ 122.418407, 47.350632 ], [ 122.507103, 47.401291 ], [ 122.543443, 47.495589 ], [ 122.59395, 47.54732 ], [ 122.765181, 47.614333 ], [ 122.848949, 47.67441 ], [ 122.926557, 47.697777 ], [ 123.041122, 47.746492 ], [ 123.161846, 47.781892 ], [ 123.214201, 47.824502 ], [ 123.256085, 47.876711 ], [ 123.300432, 47.953723 ], [ 123.537569, 48.021816 ], [ 123.579453, 48.045427 ], [ 123.705105, 48.152142 ], [ 123.746373, 48.197638 ], [ 123.862785, 48.271782 ], [ 124.019234, 48.39313 ], [ 124.07898, 48.43603 ], [ 124.136878, 48.463023 ], [ 124.25945, 48.536385 ], [ 124.25945, 48.536385 ], [ 124.314269, 48.503881 ], [ 124.302566, 48.456673 ], [ 124.330283, 48.435633 ], [ 124.309957, 48.413393 ], [ 124.331515, 48.380015 ], [ 124.317964, 48.35099 ], [ 124.353689, 48.315978 ], [ 124.365392, 48.283731 ], [ 124.422058, 48.245884 ], [ 124.412819, 48.219175 ], [ 124.418978, 48.181679 ], [ 124.467637, 48.178886 ], [ 124.471333, 48.133373 ], [ 124.430065, 48.12099 ], [ 124.415899, 48.08782 ], [ 124.46579, 48.098213 ], [ 124.478108, 48.123387 ], [ 124.505826, 48.124985 ], [ 124.529847, 48.146951 ], [ 124.512601, 48.164518 ], [ 124.547094, 48.200829 ], [ 124.579122, 48.262221 ], [ 124.558796, 48.268197 ], [ 124.579738, 48.297269 ], [ 124.540934, 48.335476 ], [ 124.547094, 48.35775 ], [ 124.51876, 48.378027 ], [ 124.52492, 48.426897 ], [ 124.507674, 48.445558 ], [ 124.555717, 48.467784 ], [ 124.533543, 48.515379 ], [ 124.548941, 48.535593 ], [ 124.520608, 48.556195 ], [ 124.579122, 48.596582 ], [ 124.601912, 48.632587 ], [ 124.624702, 48.701755 ], [ 124.612383, 48.747945 ], [ 124.656115, 48.783842 ], [ 124.644412, 48.80789 ], [ 124.654267, 48.83429 ], [ 124.697383, 48.841775 ], [ 124.715861, 48.885475 ], [ 124.709086, 48.920487 ], [ 124.744194, 48.920487 ], [ 124.756513, 48.967262 ], [ 124.808252, 49.020666 ], [ 124.828578, 49.077933 ], [ 124.809484, 49.115943 ], [ 124.847672, 49.129651 ], [ 124.860607, 49.166448 ], [ 124.906802, 49.184054 ], [ 124.983179, 49.162535 ], [ 125.039845, 49.17623 ], [ 125.034302, 49.157056 ], [ 125.117453, 49.126127 ], [ 125.158721, 49.144921 ], [ 125.187671, 49.186792 ], [ 125.219699, 49.189139 ], [ 125.233866, 49.255587 ], [ 125.214772, 49.277066 ], [ 125.261583, 49.322336 ], [ 125.256656, 49.359769 ], [ 125.277598, 49.379644 ], [ 125.25604, 49.395227 ], [ 125.256656, 49.437275 ], [ 125.270822, 49.454395 ], [ 125.228323, 49.487063 ], [ 125.211076, 49.539908 ], [ 125.233866, 49.536801 ], [ 125.23017, 49.595411 ], [ 125.205533, 49.593859 ], [ 125.16796, 49.629923 ], [ 125.15441, 49.616741 ], [ 125.127308, 49.655113 ], [ 125.132236, 49.672157 ], [ 125.164881, 49.669446 ], [ 125.189518, 49.652401 ], [ 125.185207, 49.634574 ], [ 125.219699, 49.669058 ], [ 125.225243, 49.726349 ], [ 125.204301, 49.734086 ], [ 125.221547, 49.754969 ], [ 125.222779, 49.799026 ], [ 125.177815, 49.829533 ], [ 125.239409, 49.844587 ], [ 125.225243, 49.867351 ], [ 125.245569, 49.87198 ], [ 125.212924, 49.907452 ], [ 125.225859, 49.922481 ], [ 125.199373, 49.935194 ], [ 125.190134, 49.959841 ], [ 125.231402, 49.957531 ], [ 125.241873, 49.987938 ], [ 125.278214, 49.996402 ], [ 125.297924, 50.014481 ], [ 125.283757, 50.036012 ], [ 125.25296, 50.041393 ], [ 125.289916, 50.057917 ], [ 125.315786, 50.04562 ], [ 125.328105, 50.065985 ], [ 125.283757, 50.070211 ], [ 125.287453, 50.093636 ], [ 125.258504, 50.103618 ], [ 125.27883, 50.127411 ], [ 125.311474, 50.140453 ], [ 125.376148, 50.137385 ], [ 125.335496, 50.161161 ], [ 125.382923, 50.172278 ], [ 125.39093, 50.199868 ], [ 125.417416, 50.195654 ], [ 125.448829, 50.216338 ], [ 125.442053, 50.260357 ], [ 125.466075, 50.266861 ], [ 125.463611, 50.295925 ], [ 125.530749, 50.331085 ], [ 125.520278, 50.3498 ], [ 125.546763, 50.358965 ], [ 125.522126, 50.404759 ], [ 125.536292, 50.420014 ], [ 125.567089, 50.402852 ], [ 125.583104, 50.409717 ], [ 125.562162, 50.438314 ], [ 125.580024, 50.449366 ], [ 125.627451, 50.443268 ], [ 125.654553, 50.471082 ], [ 125.699516, 50.487078 ], [ 125.740784, 50.523237 ], [ 125.754335, 50.506874 ], [ 125.770349, 50.531227 ], [ 125.794987, 50.532748 ], [ 125.829479, 50.56165 ], [ 125.807921, 50.60383 ], [ 125.814697, 50.62092 ], [ 125.793139, 50.643316 ], [ 125.804226, 50.658874 ], [ 125.789443, 50.679735 ], [ 125.825784, 50.70362 ], [ 125.78082, 50.725598 ], [ 125.795603, 50.738856 ], [ 125.758646, 50.746809 ], [ 125.804226, 50.773309 ], [ 125.828863, 50.756654 ], [ 125.846726, 50.769524 ], [ 125.836255, 50.793363 ], [ 125.890457, 50.805845 ], [ 125.878138, 50.816812 ], [ 125.913247, 50.825885 ], [ 125.939732, 50.85423 ], [ 125.961906, 50.901054 ], [ 125.997631, 50.872738 ], [ 125.996399, 50.906715 ], [ 126.02042, 50.927466 ], [ 126.042594, 50.92558 ], [ 126.068464, 50.967434 ], [ 126.041978, 50.981753 ], [ 126.033971, 51.011132 ], [ 126.059225, 51.043503 ], [ 125.976073, 51.084498 ], [ 125.993935, 51.119072 ], [ 125.970529, 51.123955 ], [ 125.946508, 51.108176 ], [ 125.909551, 51.138977 ], [ 125.864588, 51.146487 ], [ 125.850421, 51.21364 ], [ 125.819008, 51.227134 ], [ 125.761726, 51.226385 ], [ 125.76111, 51.261976 ], [ 125.76111, 51.261976 ], [ 125.740784, 51.27583 ], [ 125.740784, 51.27583 ], [ 125.700132, 51.327465 ], [ 125.700132, 51.327465 ], [ 125.626219, 51.380163 ], [ 125.626219, 51.380163 ], [ 125.623756, 51.387633 ], [ 125.623756, 51.387633 ], [ 125.62314, 51.398089 ], [ 125.62314, 51.398089 ], [ 125.600966, 51.410409 ], [ 125.600966, 51.410409 ], [ 125.60035, 51.413396 ], [ 125.60035, 51.413396 ], [ 125.595422, 51.416755 ], [ 125.595422, 51.416755 ], [ 125.559082, 51.461521 ], [ 125.559082, 51.461521 ], [ 125.528285, 51.488359 ], [ 125.424807, 51.562827 ], [ 125.38046, 51.585516 ], [ 125.35151, 51.623801 ], [ 125.316402, 51.610052 ], [ 125.289301, 51.633831 ], [ 125.228938, 51.640517 ], [ 125.214772, 51.627888 ], [ 125.175968, 51.639403 ], [ 125.130388, 51.635317 ], [ 125.12854, 51.659083 ], [ 125.098975, 51.658341 ], [ 125.060171, 51.59667 ], [ 125.073106, 51.553526 ], [ 125.047236, 51.529704 ], [ 125.004737, 51.529332 ], [ 124.983795, 51.508478 ], [ 124.928976, 51.498419 ], [ 124.917889, 51.474196 ], [ 124.942527, 51.447349 ], [ 124.885244, 51.40817 ], [ 124.864302, 51.37979 ], [ 124.783614, 51.392115 ], [ 124.76452, 51.38726 ], [ 124.752817, 51.35812 ], [ 124.693687, 51.3327 ], [ 124.62655, 51.327465 ], [ 124.58713, 51.363725 ], [ 124.555717, 51.375307 ], [ 124.490427, 51.380537 ], [ 124.478108, 51.36223 ], [ 124.443616, 51.35812 ], [ 124.426985, 51.331953 ], [ 124.430065, 51.301281 ], [ 124.406659, 51.272086 ], [ 124.339522, 51.293422 ], [ 124.297638, 51.298661 ], [ 124.271769, 51.308389 ], [ 124.239124, 51.344664 ], [ 124.192313, 51.33943 ], [ 124.128255, 51.347281 ], [ 124.090067, 51.3413 ], [ 124.071588, 51.320734 ], [ 123.994596, 51.322604 ], [ 123.939777, 51.313253 ], [ 123.926227, 51.300532 ], [ 123.887423, 51.320734 ], [ 123.842459, 51.367462 ], [ 123.794416, 51.361109 ], [ 123.711264, 51.398089 ], [ 123.660141, 51.342795 ], [ 123.661989, 51.319237 ], [ 123.582533, 51.306893 ], [ 123.582533, 51.294545 ], [ 123.46304, 51.286686 ], [ 123.440251, 51.270963 ], [ 123.414381, 51.278825 ], [ 123.376809, 51.266844 ], [ 123.339853, 51.27246 ], [ 123.294273, 51.254111 ], [ 123.231447, 51.268716 ], [ 123.231447, 51.279199 ], [ 123.127969, 51.297913 ], [ 123.069455, 51.321108 ], [ 123.002934, 51.31213 ], [ 122.965977, 51.345786 ], [ 122.965977, 51.386886 ], [ 122.946267, 51.405183 ], [ 122.903768, 51.415262 ], [ 122.900072, 51.445112 ], [ 122.871123, 51.455181 ], [ 122.854492, 51.477551 ], [ 122.880362, 51.511085 ], [ 122.858804, 51.524864 ], [ 122.880362, 51.537894 ], [ 122.874202, 51.561339 ], [ 122.832935, 51.581797 ], [ 122.85634, 51.606707 ], [ 122.820616, 51.633088 ], [ 122.816304, 51.655371 ], [ 122.778732, 51.698048 ], [ 122.749167, 51.746613 ], [ 122.771957, 51.779579 ], [ 122.732536, 51.832495 ], [ 122.725761, 51.87833 ], [ 122.706051, 51.890151 ], [ 122.729457, 51.919321 ], [ 122.726377, 51.978709 ], [ 122.683877, 51.974654 ], [ 122.664783, 51.99861 ], [ 122.650616, 52.058997 ], [ 122.625363, 52.067459 ], [ 122.643841, 52.111585 ], [ 122.629059, 52.13657 ], [ 122.690653, 52.140243 ], [ 122.73808, 52.153464 ], [ 122.769493, 52.179893 ], [ 122.766413, 52.232705 ], [ 122.787355, 52.252494 ], [ 122.76087, 52.26678 ], [ 122.710979, 52.256157 ], [ 122.67895, 52.276667 ], [ 122.585943, 52.266413 ], [ 122.560689, 52.282526 ], [ 122.478153, 52.29607 ], [ 122.484313, 52.341432 ], [ 122.447356, 52.394052 ], [ 122.419023, 52.375057 ], [ 122.378987, 52.395512 ], [ 122.367284, 52.413768 ], [ 122.342031, 52.414133 ], [ 122.326016, 52.459374 ], [ 122.310618, 52.475416 ], [ 122.207756, 52.469218 ], [ 122.178191, 52.48963 ], [ 122.168952, 52.513674 ], [ 122.140003, 52.510032 ], [ 122.142467, 52.495096 ], [ 122.107358, 52.452445 ], [ 122.080873, 52.440407 ], [ 122.091344, 52.427272 ], [ 122.040837, 52.413038 ], [ 122.035909, 52.377615 ], [ 121.976779, 52.343626 ], [ 121.94783, 52.298266 ], [ 121.901018, 52.280695 ], [ 121.841272, 52.282526 ], [ 121.769207, 52.308147 ], [ 121.714389, 52.318025 ], [ 121.715621, 52.342894 ], [ 121.658338, 52.3904 ], [ 121.678664, 52.419973 ], [ 121.63986, 52.44442 ], [ 121.590585, 52.443326 ], [ 121.565331, 52.460468 ], [ 121.519136, 52.456821 ], [ 121.495114, 52.484892 ], [ 121.474172, 52.482706 ], [ 121.416274, 52.499468 ], [ 121.411963, 52.52205 ], [ 121.353448, 52.534793 ], [ 121.323883, 52.573727 ], [ 121.280151, 52.586819 ], [ 121.225333, 52.577364 ], [ 121.182217, 52.59918 ], [ 121.237036, 52.619167 ], [ 121.29247, 52.651855 ], [ 121.309717, 52.676173 ], [ 121.373158, 52.683067 ], [ 121.455078, 52.73528 ], [ 121.476636, 52.772225 ], [ 121.511129, 52.779104 ], [ 121.537614, 52.801542 ], [ 121.591201, 52.824693 ], [ 121.620766, 52.853251 ], [ 121.604136, 52.872401 ], [ 121.610295, 52.892264 ], [ 121.66265, 52.912478 ], [ 121.677432, 52.948192 ], [ 121.715621, 52.997926 ], [ 121.785838, 53.018451 ], [ 121.817867, 53.061631 ], [ 121.775367, 53.089674 ], [ 121.784606, 53.104408 ], [ 121.753193, 53.147501 ], [ 121.722396, 53.145706 ], [ 121.665114, 53.170467 ], [ 121.660186, 53.195213 ], [ 121.67928, 53.199515 ], [ 121.679896, 53.240722 ], [ 121.642324, 53.262564 ], [ 121.615222, 53.258984 ], [ 121.575802, 53.29155 ], [ 121.504969, 53.323018 ], [ 121.499426, 53.337314 ], [ 121.589969, 53.350891 ], [ 121.697758, 53.392666 ], [ 121.754425, 53.389454 ], [ 121.816019, 53.41336 ], [ 121.875765, 53.426556 ], [ 122.026054, 53.428339 ], [ 122.077177, 53.422277 ], [ 122.111054, 53.426913 ], [ 122.161561, 53.468614 ], [ 122.227466, 53.461845 ], [ 122.266886, 53.470039 ], [ 122.350038, 53.505647 ], [ 122.37406, 53.47467 ], [ 122.435038, 53.444739 ], [ 122.496016, 53.458638 ], [ 122.5379, 53.453293 ], [ 122.608117, 53.465408 ], [ 122.673406, 53.459351 ], [ 122.763949, 53.463626 ], [ 122.826775, 53.457213 ], [ 122.894528, 53.462914 ], [ 122.943804, 53.483929 ], [ 123.052209, 53.506715 ], [ 123.093477, 53.508138 ], [ 123.137209, 53.498172 ], [ 123.179092, 53.509918 ], [ 123.231447, 53.549404 ], [ 123.274563, 53.563269 ], [ 123.309672, 53.56078 ], [ 123.394055, 53.538024 ], [ 123.454417, 53.536602 ], [ 123.47228, 53.509206 ], [ 123.499381, 53.497816 ], [ 123.510468, 53.509206 ], [ 123.490758, 53.542648 ], [ 123.517243, 53.558292 ], [ 123.546808, 53.551537 ], [ 123.557895, 53.531978 ], [ 123.53141, 53.507071 ], [ 123.569598, 53.505291 ], [ 123.58746, 53.546915 ], [ 123.620721, 53.550115 ], [ 123.668764, 53.533756 ], [ 123.698329, 53.498528 ], [ 123.746373, 53.500308 ], [ 123.797495, 53.489983 ], [ 123.865249, 53.489627 ], [ 123.985973, 53.434401 ], [ 124.01369, 53.403371 ], [ 124.058038, 53.404085 ], [ 124.125791, 53.348033 ], [ 124.19416, 53.37339 ], [ 124.239124, 53.379817 ], [ 124.327819, 53.331954 ], [ 124.375863, 53.258984 ], [ 124.412203, 53.248601 ], [ 124.435609, 53.223886 ], [ 124.487348, 53.217436 ], [ 124.496587, 53.207759 ], [ 124.563108, 53.201666 ], [ 124.590209, 53.208476 ], [ 124.678905, 53.207043 ], [ 124.720789, 53.192344 ], [ 124.712165, 53.162574 ], [ 124.734339, 53.146783 ], [ 124.787926, 53.140681 ], [ 124.832889, 53.145347 ], [ 124.87231, 53.099018 ], [ 124.909266, 53.118059 ], [ 124.887708, 53.164368 ], [ 124.970244, 53.194137 ], [ 125.038613, 53.202741 ], [ 125.142091, 53.204175 ], [ 125.195062, 53.198439 ], [ 125.252344, 53.18051 ], [ 125.315786, 53.144989 ], [ 125.343503, 53.14463 ], [ 125.452524, 53.107641 ], [ 125.503647, 53.095424 ], [ 125.504263, 53.061271 ], [ 125.530749, 53.0512 ], [ 125.588647, 53.081047 ], [ 125.613901, 53.083564 ], [ 125.640386, 53.06199 ], [ 125.643466, 53.039686 ], [ 125.684118, 53.00801 ], [ 125.742632, 52.993964 ], [ 125.737088, 52.943504 ], [ 125.665023, 52.913561 ], [ 125.666871, 52.869872 ], [ 125.678574, 52.86084 ], [ 125.722306, 52.880347 ], [ 125.751255, 52.88143 ], [ 125.772197, 52.89804 ], [ 125.827631, 52.899123 ], [ 125.854117, 52.891542 ], [ 125.855349, 52.866259 ], [ 125.923718, 52.815651 ], [ 125.937269, 52.786705 ], [ 125.966834, 52.759914 ], [ 125.985312, 52.758465 ], [ 126.02042, 52.795753 ], [ 126.052449, 52.800095 ], [ 126.116507, 52.768243 ], [ 126.112195, 52.757016 ], [ 126.044442, 52.739628 ], [ 126.072775, 52.691048 ], [ 126.061688, 52.673271 ], [ 125.995783, 52.675085 ], [ 125.971145, 52.654033 ], [ 125.968682, 52.630429 ], [ 125.989008, 52.603178 ], [ 126.030891, 52.576273 ], [ 126.055529, 52.582455 ], [ 126.066616, 52.603905 ], [ 126.147304, 52.573 ], [ 126.213209, 52.525327 ], [ 126.192883, 52.492181 ], [ 126.205202, 52.466302 ], [ 126.268644, 52.475051 ], [ 126.326542, 52.424353 ], [ 126.353644, 52.389304 ], [ 126.348716, 52.357882 ], [ 126.320999, 52.342163 ], [ 126.327774, 52.310342 ], [ 126.4331, 52.298632 ], [ 126.436795, 52.277034 ], [ 126.401071, 52.279597 ], [ 126.357955, 52.264216 ], [ 126.312992, 52.235271 ], [ 126.306832, 52.205574 ], [ 126.34502, 52.192002 ], [ 126.403535, 52.185031 ], [ 126.457121, 52.165212 ], [ 126.499005, 52.16044 ], [ 126.556288, 52.136203 ], [ 126.563679, 52.119302 ], [ 126.514404, 52.037282 ], [ 126.487918, 52.041699 ], [ 126.450962, 52.027709 ], [ 126.447882, 52.009294 ], [ 126.468208, 51.982395 ], [ 126.462665, 51.948471 ], [ 126.510092, 51.922274 ], [ 126.555056, 51.874266 ], [ 126.580925, 51.824728 ], [ 126.622809, 51.777357 ], [ 126.658534, 51.762544 ], [ 126.6727, 51.73179 ], [ 126.724439, 51.7266 ], [ 126.734294, 51.711399 ], [ 126.723823, 51.679126 ], [ 126.741069, 51.642374 ], [ 126.67886, 51.602246 ], [ 126.69549, 51.57845 ], [ 126.837156, 51.536033 ], [ 126.843931, 51.521885 ], [ 126.812518, 51.493948 ], [ 126.784185, 51.448095 ], [ 126.791577, 51.432428 ], [ 126.835308, 51.413769 ], [ 126.908605, 51.407423 ], [ 126.930163, 51.359241 ], [ 126.904293, 51.340552 ], [ 126.837156, 51.345038 ], [ 126.813134, 51.311756 ], [ 126.820526, 51.281071 ], [ 126.863025, 51.248492 ], [ 126.908605, 51.246619 ], [ 126.92154, 51.259729 ], [ 126.908605, 51.283691 ], [ 126.877808, 51.300906 ], [ 126.887047, 51.321856 ], [ 126.970815, 51.332327 ], [ 126.98375, 51.318863 ], [ 126.976358, 51.291551 ], [ 126.926467, 51.246244 ], [ 126.899982, 51.200518 ], [ 126.917844, 51.138977 ], [ 126.922772, 51.061937 ], [ 126.985597, 51.029202 ], [ 127.052119, 50.962911 ], [ 127.113713, 50.93765 ], [ 127.143894, 50.910111 ], [ 127.236285, 50.781256 ], [ 127.295415, 50.755139 ], [ 127.305886, 50.733932 ], [ 127.28864, 50.699451 ], [ 127.294799, 50.663426 ], [ 127.370559, 50.581415 ], [ 127.36132, 50.547582 ], [ 127.323132, 50.52552 ], [ 127.293567, 50.46575 ], [ 127.30527, 50.45432 ], [ 127.3644, 50.438314 ], [ 127.369944, 50.403996 ], [ 127.332371, 50.340634 ], [ 127.371791, 50.29669 ], [ 127.44632, 50.270686 ], [ 127.603385, 50.239309 ], [ 127.60708, 50.178794 ], [ 127.58737, 50.137768 ], [ 127.501755, 50.056764 ], [ 127.495595, 49.994479 ], [ 127.543638, 49.944438 ], [ 127.547334, 49.928645 ], [ 127.529472, 49.864265 ], [ 127.531936, 49.826059 ], [ 127.583059, 49.786277 ], [ 127.653892, 49.780094 ], [ 127.674833, 49.764247 ], [ 127.677913, 49.697712 ], [ 127.705015, 49.665185 ], [ 127.782007, 49.630698 ], [ 127.815268, 49.593859 ], [ 127.897804, 49.579116 ], [ 127.949542, 49.596187 ], [ 128.001281, 49.592307 ], [ 128.070882, 49.556604 ], [ 128.122005, 49.55311 ], [ 128.185447, 49.53952 ], [ 128.243345, 49.563203 ], [ 128.287077, 49.566309 ], [ 128.343128, 49.544956 ], [ 128.389939, 49.58998 ], [ 128.500192, 49.593859 ], [ 128.537764, 49.604332 ], [ 128.619684, 49.593471 ], [ 128.656025, 49.577564 ], [ 128.715155, 49.564756 ], [ 128.744104, 49.595023 ], [ 128.802618, 49.58222 ], [ 128.813089, 49.558157 ], [ 128.763198, 49.515824 ], [ 128.76135, 49.482009 ], [ 128.792147, 49.473065 ], [ 128.871604, 49.492506 ], [ 128.932582, 49.46801 ], [ 129.013886, 49.457119 ], [ 129.061929, 49.374189 ], [ 129.084719, 49.359769 ], [ 129.143849, 49.357431 ], [ 129.180805, 49.386657 ], [ 129.215298, 49.399122 ], [ 129.266421, 49.396006 ], [ 129.320623, 49.3586 ], [ 129.358196, 49.355871 ], [ 129.379138, 49.367175 ], [ 129.374826, 49.414309 ], [ 129.390224, 49.432605 ], [ 129.448739, 49.441167 ], [ 129.51834, 49.423652 ], [ 129.546057, 49.395227 ], [ 129.562687, 49.299706 ], [ 129.604571, 49.279018 ], [ 129.696962, 49.298535 ], [ 129.730223, 49.288387 ], [ 129.761636, 49.25754 ], [ 129.753629, 49.208692 ], [ 129.784426, 49.184054 ], [ 129.847867, 49.181316 ], [ 129.864498, 49.158621 ], [ 129.855259, 49.133567 ], [ 129.866962, 49.113985 ], [ 129.913157, 49.1085 ], [ 129.934715, 49.078717 ], [ 129.9187, 49.060681 ], [ 129.937179, 49.040285 ], [ 130.020946, 49.021058 ], [ 130.059135, 48.979047 ], [ 130.113337, 48.956653 ], [ 130.219895, 48.893739 ], [ 130.237757, 48.868551 ], [ 130.279641, 48.866976 ], [ 130.412068, 48.905148 ], [ 130.471198, 48.905541 ], [ 130.501995, 48.865795 ], [ 130.559277, 48.861071 ], [ 130.609168, 48.881146 ], [ 130.680617, 48.881146 ], [ 130.689856, 48.849651 ], [ 130.622103, 48.783842 ], [ 130.576524, 48.688719 ], [ 130.538951, 48.635751 ], [ 130.538335, 48.612016 ], [ 130.605473, 48.594207 ], [ 130.615944, 48.575601 ], [ 130.620871, 48.49595 ], [ 130.647357, 48.484844 ], [ 130.711414, 48.511414 ], [ 130.767465, 48.507846 ], [ 130.776704, 48.480084 ], [ 130.745907, 48.449131 ], [ 130.747755, 48.404256 ], [ 130.785327, 48.357353 ], [ 130.81982, 48.341444 ], [ 130.845073, 48.296473 ], [ 130.817972, 48.265409 ], [ 130.787791, 48.256643 ], [ 130.769313, 48.231136 ], [ 130.765617, 48.18926 ], [ 130.673842, 48.12818 ], [ 130.666451, 48.105007 ], [ 130.699711, 48.044227 ], [ 130.737284, 48.034223 ], [ 130.770544, 47.998194 ], [ 130.870943, 47.943301 ], [ 130.891269, 47.927263 ], [ 130.961486, 47.828118 ], [ 130.966413, 47.733211 ], [ 130.983659, 47.713081 ], [ 131.029855, 47.694555 ], [ 131.115471, 47.689721 ], [ 131.183224, 47.702611 ], [ 131.236811, 47.733211 ], [ 131.273767, 47.738846 ], [ 131.359998, 47.730796 ], [ 131.456085, 47.747297 ], [ 131.543548, 47.736028 ], [ 131.559563, 47.724757 ], [ 131.568186, 47.682469 ], [ 131.59036, 47.660707 ], [ 131.641483, 47.663932 ], [ 131.690142, 47.707041 ], [ 131.741881, 47.706638 ], [ 131.825649, 47.677231 ], [ 131.900793, 47.685692 ], [ 131.976554, 47.673201 ], [ 132.000575, 47.712276 ], [ 132.086191, 47.703013 ], [ 132.157024, 47.70543 ], [ 132.19706, 47.714289 ], [ 132.242639, 47.70986 ], [ 132.272205, 47.718718 ], [ 132.288835, 47.742065 ], [ 132.325175, 47.762184 ], [ 132.371987, 47.765402 ], [ 132.469305, 47.726368 ], [ 132.558, 47.718316 ], [ 132.6005, 47.740858 ], [ 132.599268, 47.792347 ], [ 132.621442, 47.82852 ], [ 132.662094, 47.854227 ], [ 132.687348, 47.88514 ], [ 132.662094, 47.922451 ], [ 132.661478, 47.944905 ], [ 132.691043, 47.962941 ], [ 132.723072, 47.962941 ], [ 132.769268, 47.93849 ], [ 132.819159, 47.936887 ], [ 132.883216, 48.002599 ], [ 132.992238, 48.035424 ], [ 133.016259, 48.054228 ], [ 133.02673, 48.085421 ], [ 133.053216, 48.110202 ], [ 133.130208, 48.134971 ], [ 133.182563, 48.135769 ], [ 133.239845, 48.126583 ], [ 133.302055, 48.103009 ], [ 133.407997, 48.124585 ], [ 133.451728, 48.112999 ], [ 133.545967, 48.121389 ], [ 133.573068, 48.182078 ], [ 133.59709, 48.194846 ], [ 133.667307, 48.183275 ], [ 133.693177, 48.186866 ], [ 133.740604, 48.254651 ], [ 133.791111, 48.261026 ], [ 133.824372, 48.277359 ], [ 133.876111, 48.282536 ], [ 133.940784, 48.302047 ], [ 133.995603, 48.303639 ], [ 134.029479, 48.327519 ], [ 134.0689, 48.338659 ], [ 134.116327, 48.333089 ], [ 134.150819, 48.346217 ], [ 134.20379, 48.3824 ], [ 134.369478, 48.382797 ], [ 134.438463, 48.405448 ], [ 134.501905, 48.418954 ], [ 134.578281, 48.405448 ], [ 134.696542, 48.407037 ], [ 134.764295, 48.370076 ], [ 134.820961, 48.37604 ], [ 134.848679, 48.393925 ], [ 134.886867, 48.437618 ], [ 134.927519, 48.451513 ], [ 134.996504, 48.439603 ], [ 135.035924, 48.440795 ], [ 135.068569, 48.459451 ], [ 135.09567, 48.437618 ], [ 135.090743, 48.403461 ], [ 135.009439, 48.365703 ], [ 134.864077, 48.332293 ], [ 134.77107, 48.288908 ], [ 134.679295, 48.256245 ], [ 134.67252, 48.170505 ], [ 134.632484, 48.099412 ], [ 134.551796, 48.032622 ], [ 134.55426, 47.982173 ], [ 134.599839, 47.947711 ], [ 134.607846, 47.909214 ], [ 134.658969, 47.901191 ], [ 134.677448, 47.884738 ], [ 134.670056, 47.864667 ], [ 134.678679, 47.819278 ], [ 134.772918, 47.763391 ], [ 134.779694, 47.7159 ], [ 134.689766, 47.63813 ], [ 134.678064, 47.588507 ], [ 134.627556, 47.546512 ], [ 134.576434, 47.519036 ], [ 134.568426, 47.478199 ], [ 134.522847, 47.468086 ], [ 134.490202, 47.446235 ], [ 134.339297, 47.439759 ], [ 134.307268, 47.428829 ], [ 134.266616, 47.391974 ], [ 134.263536, 47.371307 ], [ 134.203174, 47.347389 ], [ 134.177305, 47.326299 ], [ 134.156979, 47.248357 ], [ 134.210566, 47.210155 ], [ 134.230276, 47.182097 ], [ 134.232739, 47.134892 ], [ 134.222268, 47.105164 ], [ 134.142812, 47.093349 ], [ 134.118175, 47.061968 ], [ 134.10216, 47.005678 ], [ 134.063972, 46.979962 ], [ 134.076291, 46.938298 ], [ 134.042414, 46.886787 ], [ 134.041182, 46.848326 ], [ 134.025168, 46.810657 ], [ 134.052885, 46.779928 ], [ 134.033175, 46.759023 ], [ 134.030711, 46.708981 ], [ 134.011001, 46.637941 ], [ 133.919842, 46.596012 ], [ 133.890893, 46.525235 ], [ 133.849625, 46.475389 ], [ 133.852089, 46.450242 ], [ 133.902596, 46.446119 ], [ 133.948791, 46.401153 ], [ 133.940784, 46.38134 ], [ 133.876726, 46.362345 ], [ 133.869335, 46.338386 ], [ 133.922922, 46.330948 ], [ 133.908139, 46.308216 ], [ 133.91861, 46.280924 ], [ 133.909987, 46.254447 ], [ 133.867487, 46.250722 ], [ 133.87919, 46.233752 ], [ 133.849625, 46.203939 ], [ 133.814517, 46.230854 ], [ 133.794807, 46.193583 ], [ 133.764626, 46.17328 ], [ 133.706111, 46.163333 ], [ 133.690713, 46.133896 ], [ 133.745531, 46.075389 ], [ 133.740604, 46.048812 ], [ 133.681474, 45.986473 ], [ 133.676546, 45.94321 ], [ 133.614952, 45.942794 ], [ 133.618032, 45.903662 ], [ 133.583539, 45.868669 ], [ 133.55459, 45.893249 ], [ 133.51209, 45.887001 ], [ 133.491764, 45.867002 ], [ 133.494228, 45.840325 ], [ 133.467743, 45.834905 ], [ 133.469591, 45.799451 ], [ 133.505315, 45.785681 ], [ 133.469591, 45.777751 ], [ 133.486837, 45.740173 ], [ 133.454192, 45.731819 ], [ 133.445569, 45.705077 ], [ 133.484989, 45.691702 ], [ 133.485605, 45.658667 ], [ 133.448649, 45.647372 ], [ 133.471438, 45.631053 ], [ 133.412924, 45.618079 ], [ 133.423395, 45.584163 ], [ 133.393214, 45.580393 ], [ 133.342707, 45.554836 ], [ 133.333468, 45.562379 ], [ 133.246005, 45.517528 ], [ 133.201657, 45.515431 ], [ 133.170244, 45.465506 ], [ 133.164701, 45.437377 ], [ 133.143759, 45.430658 ], [ 133.144991, 45.367205 ], [ 133.119121, 45.352908 ], [ 133.128976, 45.336924 ], [ 133.097563, 45.281788 ], [ 133.109266, 45.232077 ], [ 133.124665, 45.222805 ], [ 133.137599, 45.178105 ], [ 133.139447, 45.127459 ], [ 133.107418, 45.124504 ], [ 133.089556, 45.097473 ], [ 133.070462, 45.097051 ], [ 133.045824, 45.066203 ], [ 132.986078, 45.031109 ], [ 132.954049, 45.023072 ], [ 132.916477, 45.031109 ], [ 132.867202, 45.061976 ], [ 132.76434, 45.081417 ], [ 132.394161, 45.16376 ], [ 132.17427, 45.216903 ], [ 132.003655, 45.25441 ], [ 131.976554, 45.277156 ], [ 131.93159, 45.287683 ], [ 131.917423, 45.339448 ], [ 131.887858, 45.342393 ], [ 131.82996, 45.311677 ], [ 131.825649, 45.291472 ], [ 131.788692, 45.245984 ], [ 131.79362, 45.211844 ], [ 131.759127, 45.213952 ], [ 131.721555, 45.234606 ], [ 131.681519, 45.215217 ], [ 131.650722, 45.159962 ], [ 131.687678, 45.1511 ], [ 131.695685, 45.132104 ], [ 131.63286, 45.075078 ], [ 131.566338, 45.045487 ], [ 131.529382, 45.012073 ], [ 131.484418, 44.99557 ], [ 131.501664, 44.977793 ], [ 131.464708, 44.963397 ], [ 131.409889, 44.985836 ], [ 131.380324, 44.978216 ], [ 131.355071, 44.990068 ], [ 131.313803, 44.965938 ], [ 131.311955, 44.94688 ], [ 131.274999, 44.919766 ], [ 131.263296, 44.929935 ], [ 131.207861, 44.913833 ], [ 131.20355, 44.932901 ], [ 131.16105, 44.948151 ], [ 131.090217, 44.924427 ], [ 131.10192, 44.898997 ], [ 131.07913, 44.881614 ], [ 130.965181, 44.85065 ], [ 130.972573, 44.820094 ], [ 131.016304, 44.814575 ], [ 131.016304, 44.789521 ], [ 131.064348, 44.786973 ], [ 131.069275, 44.759783 ], [ 131.093297, 44.746183 ], [ 131.090833, 44.717272 ], [ 131.111775, 44.710042 ], [ 131.310723, 44.046623 ], [ 131.26576, 44.034578 ], [ 131.245434, 43.95579 ], [ 131.26268, 43.948897 ], [ 131.254057, 43.893289 ], [ 131.2171, 43.836334 ], [ 131.213405, 43.801357 ], [ 131.232499, 43.742585 ], [ 131.215869, 43.72745 ], [ 131.221412, 43.682024 ], [ 131.239274, 43.670337 ], [ 131.216485, 43.613169 ], [ 131.222028, 43.593234 ], [ 131.20047, 43.532089 ], [ 131.276847, 43.495632 ], [ 131.304564, 43.502144 ], [ 131.294093, 43.470012 ], [ 131.234963, 43.475224 ], [ 131.201086, 43.442209 ], [ 131.175217, 43.444816 ], [ 131.142572, 43.425695 ], [ 131.026775, 43.508655 ], [ 130.959638, 43.48608 ], [ 130.907283, 43.434387 ], [ 130.864167, 43.437863 ], [ 130.841378, 43.454374 ], [ 130.822899, 43.503446 ], [ 130.776704, 43.52341 ], [ 130.727429, 43.560284 ], [ 130.671378, 43.565054 ], [ 130.665835, 43.583698 ], [ 130.623335, 43.589767 ], [ 130.630726, 43.622268 ], [ 130.57098, 43.626167 ], [ 130.57098, 43.626167 ], [ 130.501995, 43.636563 ], [ 130.488444, 43.65605 ], [ 130.437937, 43.646091 ], [ 130.412684, 43.652586 ], [ 130.394206, 43.703227 ], [ 130.423155, 43.745179 ], [ 130.382503, 43.777164 ], [ 130.381887, 43.817768 ], [ 130.362793, 43.844967 ], [ 130.386198, 43.85403 ], [ 130.368336, 43.894151 ], [ 130.381887, 43.910106 ], [ 130.338155, 43.963975 ], [ 130.364025, 43.992399 ], [ 130.365256, 44.044042 ], [ 130.319061, 44.03974 ], [ 130.307358, 44.002731 ], [ 130.27225, 43.981634 ], [ 130.262395, 43.949328 ], [ 130.208192, 43.948466 ], [ 130.153373, 43.915711 ], [ 130.143518, 43.878624 ], [ 130.116417, 43.878192 ], [ 130.110873, 43.852735 ], [ 130.079461, 43.835039 ], [ 130.027722, 43.851872 ], [ 130.009243, 43.889407 ], [ 130.022794, 43.917866 ], [ 130.017867, 43.961821 ], [ 129.979062, 44.015644 ], [ 129.951345, 44.027263 ], [ 129.907614, 44.023821 ], [ 129.881128, 44.000148 ], [ 129.868193, 44.012631 ], [ 129.802904, 43.964837 ], [ 129.780114, 43.892857 ], [ 129.739462, 43.895876 ], [ 129.743158, 43.876035 ], [ 129.699426, 43.8838 ], [ 129.650767, 43.873016 ], [ 129.529427, 43.870427 ], [ 129.467833, 43.874741 ], [ 129.449971, 43.850578 ], [ 129.417942, 43.843672 ], [ 129.406855, 43.819496 ], [ 129.348341, 43.798333 ], [ 129.30892, 43.812155 ], [ 129.289826, 43.797038 ], [ 129.254718, 43.819496 ], [ 129.211602, 43.784509 ], [ 129.232544, 43.709284 ], [ 129.214066, 43.695006 ], [ 129.217146, 43.648689 ], [ 129.232544, 43.635263 ], [ 129.23008, 43.593234 ], [ 129.169102, 43.561585 ], [ 129.145081, 43.570258 ], [ 129.093958, 43.547706 ], [ 129.037907, 43.540332 ], [ 129.013886, 43.522976 ], [ 128.962763, 43.53903 ], [ 128.949828, 43.553779 ], [ 128.878379, 43.539898 ], [ 128.834647, 43.587599 ], [ 128.821097, 43.637429 ], [ 128.78722, 43.686784 ], [ 128.768126, 43.732207 ], [ 128.729322, 43.736964 ], [ 128.760119, 43.755554 ], [ 128.739177, 43.806972 ], [ 128.719467, 43.816905 ], [ 128.760734, 43.857482 ], [ 128.729938, 43.889838 ], [ 128.696061, 43.903207 ], [ 128.636315, 43.891132 ], [ 128.64001, 43.948035 ], [ 128.610445, 43.960529 ], [ 128.584576, 43.990246 ], [ 128.574721, 44.047914 ], [ 128.529141, 44.112401 ], [ 128.471859, 44.157501 ], [ 128.450301, 44.203423 ], [ 128.471859, 44.247596 ], [ 128.453997, 44.257884 ], [ 128.472475, 44.320001 ], [ 128.446605, 44.339694 ], [ 128.475555, 44.346114 ], [ 128.481714, 44.375637 ], [ 128.457076, 44.409848 ], [ 128.463236, 44.431647 ], [ 128.427511, 44.473512 ], [ 128.397946, 44.483761 ], [ 128.372693, 44.514495 ], [ 128.295084, 44.480772 ], [ 128.293237, 44.467961 ], [ 128.228563, 44.445748 ], [ 128.211317, 44.431647 ], [ 128.172512, 44.34697 ], [ 128.137404, 44.357668 ], [ 128.094904, 44.354673 ], [ 128.074578, 44.370075 ], [ 128.049941, 44.349965 ], [ 128.065339, 44.307155 ], [ 128.101679, 44.293449 ], [ 128.064107, 44.251454 ], [ 128.104143, 44.230017 ], [ 128.09244, 44.181539 ], [ 128.060411, 44.168663 ], [ 128.088129, 44.158359 ], [ 128.091208, 44.133022 ], [ 128.042549, 44.103807 ], [ 127.950158, 44.088334 ], [ 127.912586, 44.064687 ], [ 127.862695, 44.062967 ], [ 127.846065, 44.081886 ], [ 127.808492, 44.086615 ], [ 127.783239, 44.071997 ], [ 127.729036, 44.09908 ], [ 127.735811, 44.11412 ], [ 127.712406, 44.199133 ], [ 127.681609, 44.166946 ], [ 127.641573, 44.193555 ], [ 127.626174, 44.187977 ], [ 127.59045, 44.227872 ], [ 127.623711, 44.278025 ], [ 127.579363, 44.310581 ], [ 127.486356, 44.410275 ], [ 127.50853, 44.437202 ], [ 127.463566, 44.484615 ], [ 127.465414, 44.516628 ], [ 127.485124, 44.528576 ], [ 127.536247, 44.522176 ], [ 127.570124, 44.55033 ], [ 127.557189, 44.575488 ], [ 127.392733, 44.632158 ], [ 127.275705, 44.640249 ], [ 127.261538, 44.61299 ], [ 127.214111, 44.624917 ], [ 127.228893, 44.642804 ], [ 127.182082, 44.644507 ], [ 127.138966, 44.607451 ], [ 127.094619, 44.615972 ], [ 127.089691, 44.593816 ], [ 127.049655, 44.566961 ], [ 127.041648, 44.591258 ], [ 127.044112, 44.653874 ], [ 127.030561, 44.673454 ], [ 127.041032, 44.712169 ], [ 126.9973, 44.764882 ], [ 126.984366, 44.823914 ], [ 126.999764, 44.87398 ], [ 127.021938, 44.898997 ], [ 127.073061, 44.907051 ], [ 127.092771, 44.94688 ], [ 127.050271, 45.004034 ], [ 127.018242, 45.024341 ], [ 126.984981, 45.067893 ], [ 126.970815, 45.070852 ], [ 126.96404, 45.132104 ], [ 126.85625, 45.145613 ], [ 126.792808, 45.135481 ], [ 126.787265, 45.159118 ], [ 126.732446, 45.187385 ], [ 126.685635, 45.187807 ], [ 126.640055, 45.214373 ], [ 126.644983, 45.225334 ], [ 126.569222, 45.252725 ], [ 126.540273, 45.23882 ], [ 126.519331, 45.248091 ], [ 126.402919, 45.222805 ], [ 126.356107, 45.185698 ], [ 126.293282, 45.180214 ], [ 126.285274, 45.162494 ], [ 126.235383, 45.140125 ], [ 126.225528, 45.154054 ], [ 126.166398, 45.13337 ], [ 126.142992, 45.147723 ], [ 126.091869, 45.149411 ], [ 126.047522, 45.170933 ], [ 125.998247, 45.162072 ], [ 125.992703, 45.192447 ], [ 125.957595, 45.201303 ], [ 125.915095, 45.196664 ], [ 125.849805, 45.23882 ], [ 125.823936, 45.237978 ], [ 125.815929, 45.264942 ], [ 125.761726, 45.291472 ], [ 125.726001, 45.336503 ], [ 125.695205, 45.352066 ], [ 125.712451, 45.389485 ], [ 125.711835, 45.477677 ], [ 125.687813, 45.514173 ], [ 125.660096, 45.507043 ], [ 125.61698, 45.517947 ], [ 125.583104, 45.491942 ], [ 125.497488, 45.469283 ], [ 125.480242, 45.486488 ], [ 125.424807, 45.485649 ], [ 125.434662, 45.462988 ], [ 125.398322, 45.416797 ], [ 125.361981, 45.392847 ], [ 125.319482, 45.422678 ], [ 125.301619, 45.402092 ], [ 125.248649, 45.417637 ], [ 125.189518, 45.39915 ], [ 125.137779, 45.409655 ], [ 125.097127, 45.38276 ], [ 125.06633, 45.39915 ], [ 125.08912, 45.420998 ], [ 125.0497, 45.428558 ], [ 125.025678, 45.493201 ], [ 124.961005, 45.495299 ], [ 124.936983, 45.53388 ], [ 124.911114, 45.535976 ], [ 124.884628, 45.495299 ], [ 124.886476, 45.442836 ], [ 124.839665, 45.455852 ], [ 124.792853, 45.436958 ], [ 124.776223, 45.468024 ], [ 124.729412, 45.444096 ], [ 124.690607, 45.452493 ], [ 124.625318, 45.437377 ], [ 124.575427, 45.451234 ], [ 124.579738, 45.424358 ], [ 124.544014, 45.411756 ], [ 124.507058, 45.424778 ], [ 124.480572, 45.456271 ], [ 124.398652, 45.440737 ], [ 124.374015, 45.45795 ], [ 124.352457, 45.496557 ], [ 124.369087, 45.512915 ], [ 124.348761, 45.546874 ], [ 124.287783, 45.539329 ], [ 124.264377, 45.555256 ], [ 124.273001, 45.584163 ], [ 124.238508, 45.591702 ], [ 124.226805, 45.633564 ], [ 124.162132, 45.616404 ], [ 124.128255, 45.641933 ], [ 124.147349, 45.665359 ], [ 124.122096, 45.669123 ], [ 124.13503, 45.690448 ], [ 124.10177, 45.700898 ], [ 124.098074, 45.722628 ], [ 124.054342, 45.751449 ], [ 124.014922, 45.749779 ], [ 124.001987, 45.770655 ], [ 124.064197, 45.802372 ], [ 124.03648, 45.83824 ], [ 124.067277, 45.840325 ], [ 124.061118, 45.886168 ], [ 123.996444, 45.906993 ], [ 123.968727, 45.936551 ], [ 123.973654, 45.973997 ], [ 124.011842, 45.981899 ], [ 123.989053, 46.011833 ], [ 124.040176, 46.01973 ], [ 124.034016, 46.045074 ], [ 124.009995, 46.057534 ], [ 124.015538, 46.088257 ], [ 123.99398, 46.101123 ], [ 124.01677, 46.118549 ], [ 123.991516, 46.143019 ], [ 124.001987, 46.166649 ], [ 123.971806, 46.170379 ], [ 123.956408, 46.206009 ], [ 123.979814, 46.228784 ], [ 123.952096, 46.256516 ], [ 123.960103, 46.288369 ], [ 123.936082, 46.286715 ], [ 123.917604, 46.25693 ], [ 123.896046, 46.303668 ], [ 123.84985, 46.302428 ], [ 123.775938, 46.263136 ], [ 123.726047, 46.255688 ], [ 123.673692, 46.258585 ], [ 123.604706, 46.251964 ], [ 123.569598, 46.223816 ] ] ] ] } }, +{ "type": "Feature", "properties": { "adcode": "310000", "name": "上海市", "center": [ 121.472644, 31.231706 ], "centroid": [ 121.438734, 31.07256 ], "childrenNum": 16, "level": "province", "parent": { "adcode": 100000 }, "subFeatureIndex": 8, "acroutes": [ 100000 ] }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 120.901349, 31.017327 ], [ 120.890878, 31.094229 ], [ 120.859465, 31.100379 ], [ 120.881023, 31.134706 ], [ 120.930298, 31.141365 ], [ 121.018377, 31.134194 ], [ 121.076892, 31.158267 ], [ 121.060261, 31.245289 ], [ 121.090442, 31.291838 ], [ 121.138485, 31.276495 ], [ 121.160659, 31.283144 ], [ 121.129862, 31.302577 ], [ 121.130478, 31.343987 ], [ 121.113848, 31.37465 ], [ 121.143413, 31.392021 ], [ 121.174826, 31.44922 ], [ 121.240731, 31.493627 ], [ 121.247507, 31.476785 ], [ 121.301093, 31.49873 ], [ 121.301093, 31.49873 ], [ 121.343593, 31.511996 ], [ 121.404571, 31.479337 ], [ 121.520984, 31.394575 ], [ 121.599208, 31.37465 ], [ 121.722396, 31.3036 ], [ 121.809859, 31.196669 ], [ 121.946598, 31.066039 ], [ 121.977395, 31.016301 ], [ 121.990945, 30.96859 ], [ 121.994025, 30.862823 ], [ 121.954605, 30.825828 ], [ 121.970004, 30.789333 ], [ 121.943518, 30.776993 ], [ 121.904714, 30.814007 ], [ 121.681128, 30.818633 ], [ 121.601056, 30.805269 ], [ 121.517288, 30.775451 ], [ 121.426129, 30.730192 ], [ 121.362071, 30.679764 ], [ 121.274608, 30.677191 ], [ 121.272144, 30.723504 ], [ 121.232108, 30.755909 ], [ 121.21671, 30.785734 ], [ 121.174826, 30.771851 ], [ 121.123087, 30.77905 ], [ 121.13787, 30.826342 ], [ 121.097833, 30.857171 ], [ 121.060261, 30.845354 ], [ 121.038087, 30.814007 ], [ 120.991892, 30.837133 ], [ 121.020225, 30.872069 ], [ 120.993124, 30.889532 ], [ 121.000515, 30.938309 ], [ 120.989428, 31.01425 ], [ 120.949392, 31.030148 ], [ 120.940153, 31.010146 ], [ 120.901349, 31.017327 ] ] ], [ [ [ 121.974931, 31.61704 ], [ 121.995873, 31.493117 ], [ 121.981706, 31.464024 ], [ 121.890547, 31.428795 ], [ 121.819098, 31.437987 ], [ 121.682976, 31.491075 ], [ 121.625693, 31.501792 ], [ 121.547469, 31.531382 ], [ 121.434136, 31.590535 ], [ 121.395332, 31.585437 ], [ 121.371926, 31.553314 ], [ 121.289391, 31.61653 ], [ 121.145261, 31.75403 ], [ 121.118775, 31.759119 ], [ 121.200079, 31.834907 ], [ 121.265369, 31.863883 ], [ 121.323267, 31.868458 ], [ 121.384861, 31.833382 ], [ 121.431673, 31.769295 ], [ 121.49881, 31.753012 ], [ 121.599824, 31.703128 ], [ 121.64294, 31.697527 ], [ 121.715005, 31.673592 ], [ 121.974931, 31.61704 ] ] ], [ [ [ 121.779062, 31.310247 ], [ 121.727939, 31.35472 ], [ 121.572107, 31.435944 ], [ 121.509897, 31.4824 ], [ 121.520984, 31.494137 ], [ 121.567179, 31.48342 ], [ 121.585657, 31.454836 ], [ 121.742106, 31.407345 ], [ 121.792613, 31.363408 ], [ 121.793845, 31.31945 ], [ 121.779062, 31.310247 ] ] ], [ [ [ 121.801852, 31.356765 ], [ 121.792613, 31.377715 ], [ 121.845584, 31.37465 ], [ 121.951525, 31.337343 ], [ 122.040837, 31.324051 ], [ 122.116597, 31.320984 ], [ 122.122756, 31.307179 ], [ 122.097503, 31.255522 ], [ 122.016199, 31.282121 ], [ 121.932431, 31.283144 ], [ 121.840656, 31.295418 ], [ 121.8037, 31.328652 ], [ 121.801852, 31.356765 ] ] ], [ [ [ 121.626925, 31.445135 ], [ 121.579498, 31.479848 ], [ 121.631853, 31.456878 ], [ 121.626925, 31.445135 ] ] ], [ [ [ 121.943518, 31.215608 ], [ 121.950909, 31.228915 ], [ 122.008808, 31.221238 ], [ 121.995873, 31.160828 ], [ 121.959533, 31.159291 ], [ 121.943518, 31.215608 ] ] ], [ [ [ 121.88254, 31.240684 ], [ 121.923808, 31.234032 ], [ 121.909026, 31.195133 ], [ 121.88254, 31.240684 ] ] ] ] } }, +{ "type": "Feature", "properties": { "adcode": "320000", "name": "江苏省", "center": [ 118.767413, 32.041544 ], "centroid": [ 119.486395, 32.983908 ], "childrenNum": 13, "level": "province", "parent": { "adcode": 100000 }, "subFeatureIndex": 9, "acroutes": [ 100000 ] }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 117.311654, 34.561686 ], [ 117.311654, 34.561686 ], [ 117.32151, 34.566614 ], [ 117.32151, 34.566614 ], [ 117.325205, 34.573021 ], [ 117.325205, 34.573021 ], [ 117.362777, 34.589281 ], [ 117.402813, 34.569571 ], [ 117.402813, 34.550843 ], [ 117.465023, 34.484767 ], [ 117.53832, 34.467006 ], [ 117.592523, 34.462566 ], [ 117.609769, 34.490686 ], [ 117.659044, 34.501044 ], [ 117.684298, 34.547392 ], [ 117.801942, 34.518798 ], [ 117.791471, 34.583368 ], [ 117.793935, 34.651827 ], [ 117.902956, 34.644443 ], [ 117.909732, 34.670533 ], [ 117.951615, 34.678408 ], [ 118.053861, 34.650843 ], [ 118.084042, 34.655766 ], [ 118.114839, 34.614404 ], [ 118.079115, 34.569571 ], [ 118.185056, 34.543942 ], [ 118.16473, 34.50499 ], [ 118.132702, 34.483287 ], [ 118.177665, 34.45319 ], [ 118.179513, 34.379628 ], [ 118.217701, 34.379134 ], [ 118.220165, 34.405802 ], [ 118.277447, 34.404814 ], [ 118.290382, 34.424563 ], [ 118.379693, 34.415183 ], [ 118.404947, 34.427525 ], [ 118.416034, 34.473914 ], [ 118.439439, 34.507949 ], [ 118.424657, 34.595193 ], [ 118.439439, 34.626223 ], [ 118.473932, 34.623269 ], [ 118.460997, 34.656258 ], [ 118.545997, 34.705964 ], [ 118.601431, 34.714327 ], [ 118.607591, 34.694155 ], [ 118.664257, 34.693663 ], [ 118.690127, 34.678408 ], [ 118.739402, 34.693663 ], [ 118.783749, 34.723181 ], [ 118.764039, 34.740396 ], [ 118.719076, 34.745313 ], [ 118.739402, 34.792508 ], [ 118.772047, 34.794474 ], [ 118.80038, 34.843114 ], [ 118.805307, 34.87307 ], [ 118.860742, 34.944233 ], [ 118.86259, 35.025626 ], [ 118.928495, 35.051106 ], [ 118.942662, 35.040817 ], [ 119.027045, 35.055516 ], [ 119.114509, 35.055026 ], [ 119.137915, 35.096167 ], [ 119.217371, 35.106939 ], [ 119.250016, 35.124562 ], [ 119.286972, 35.115261 ], [ 119.306066, 35.076578 ], [ 119.292515, 35.068742 ], [ 119.307298, 35.032977 ], [ 119.291899, 35.028567 ], [ 119.285124, 35.068252 ], [ 119.238313, 35.048657 ], [ 119.211211, 34.981507 ], [ 119.214907, 34.925589 ], [ 119.202588, 34.890253 ], [ 119.217371, 34.827886 ], [ 119.238313, 34.799388 ], [ 119.272189, 34.797914 ], [ 119.312841, 34.774813 ], [ 119.378747, 34.764489 ], [ 119.440957, 34.769406 ], [ 119.439725, 34.785136 ], [ 119.497007, 34.754164 ], [ 119.494543, 34.754656 ], [ 119.381827, 34.752198 ], [ 119.456971, 34.748264 ], [ 119.525956, 34.73351 ], [ 119.465594, 34.672994 ], [ 119.569072, 34.615389 ], [ 119.610956, 34.592729 ], [ 119.641137, 34.569078 ], [ 119.781571, 34.515839 ], [ 119.811752, 34.485754 ], [ 119.962657, 34.459112 ], [ 120.103707, 34.391481 ], [ 120.311895, 34.306991 ], [ 120.314359, 34.255563 ], [ 120.347619, 34.179352 ], [ 120.367329, 34.091674 ], [ 120.48559, 33.859411 ], [ 120.500372, 33.818152 ], [ 120.534249, 33.782346 ], [ 120.583524, 33.668362 ], [ 120.651277, 33.57567 ], [ 120.717183, 33.436945 ], [ 120.741205, 33.337505 ], [ 120.769538, 33.307 ], [ 120.813885, 33.303499 ], [ 120.833595, 33.274984 ], [ 120.819429, 33.237951 ], [ 120.843451, 33.209915 ], [ 120.874247, 33.093672 ], [ 120.871784, 33.047032 ], [ 120.917979, 33.02596 ], [ 120.932762, 33.005887 ], [ 120.957399, 32.893395 ], [ 120.981421, 32.85972 ], [ 120.972182, 32.761134 ], [ 120.953088, 32.714318 ], [ 120.916131, 32.701225 ], [ 120.963559, 32.68259 ], [ 120.979573, 32.636236 ], [ 120.961711, 32.612042 ], [ 121.020225, 32.605489 ], [ 121.153268, 32.52933 ], [ 121.269681, 32.483402 ], [ 121.352216, 32.474315 ], [ 121.390405, 32.460682 ], [ 121.425513, 32.430885 ], [ 121.450151, 32.282256 ], [ 121.493882, 32.263533 ], [ 121.499426, 32.211394 ], [ 121.458774, 32.177462 ], [ 121.542542, 32.152132 ], [ 121.525295, 32.136423 ], [ 121.759352, 32.059362 ], [ 121.772287, 32.032984 ], [ 121.856055, 31.955328 ], [ 121.889315, 31.866425 ], [ 121.970004, 31.718911 ], [ 121.974931, 31.61704 ], [ 121.715005, 31.673592 ], [ 121.64294, 31.697527 ], [ 121.599824, 31.703128 ], [ 121.49881, 31.753012 ], [ 121.431673, 31.769295 ], [ 121.384861, 31.833382 ], [ 121.323267, 31.868458 ], [ 121.265369, 31.863883 ], [ 121.200079, 31.834907 ], [ 121.118775, 31.759119 ], [ 121.145261, 31.75403 ], [ 121.289391, 31.61653 ], [ 121.371926, 31.553314 ], [ 121.343593, 31.511996 ], [ 121.301093, 31.49873 ], [ 121.301093, 31.49873 ], [ 121.247507, 31.476785 ], [ 121.240731, 31.493627 ], [ 121.174826, 31.44922 ], [ 121.143413, 31.392021 ], [ 121.113848, 31.37465 ], [ 121.130478, 31.343987 ], [ 121.129862, 31.302577 ], [ 121.160659, 31.283144 ], [ 121.138485, 31.276495 ], [ 121.090442, 31.291838 ], [ 121.060261, 31.245289 ], [ 121.076892, 31.158267 ], [ 121.018377, 31.134194 ], [ 120.930298, 31.141365 ], [ 120.881023, 31.134706 ], [ 120.859465, 31.100379 ], [ 120.890878, 31.094229 ], [ 120.901349, 31.017327 ], [ 120.865624, 30.989627 ], [ 120.820661, 31.006556 ], [ 120.770154, 30.996809 ], [ 120.746132, 30.962432 ], [ 120.698089, 30.970643 ], [ 120.684538, 30.955247 ], [ 120.709176, 30.933176 ], [ 120.713487, 30.88491 ], [ 120.68269, 30.882342 ], [ 120.653741, 30.846896 ], [ 120.589068, 30.854603 ], [ 120.563814, 30.835592 ], [ 120.503452, 30.757967 ], [ 120.489285, 30.763624 ], [ 120.460336, 30.839702 ], [ 120.441858, 30.860768 ], [ 120.435083, 30.920855 ], [ 120.42338, 30.902884 ], [ 120.35809, 30.886964 ], [ 120.371025, 30.948575 ], [ 120.316206, 30.933689 ], [ 120.223816, 30.926502 ], [ 120.149903, 30.937283 ], [ 120.111099, 30.955761 ], [ 120.052584, 31.00553 ], [ 120.001461, 31.027071 ], [ 119.988527, 31.059375 ], [ 119.946027, 31.106016 ], [ 119.921389, 31.170045 ], [ 119.878274, 31.160828 ], [ 119.827151, 31.174142 ], [ 119.809904, 31.148536 ], [ 119.779723, 31.17875 ], [ 119.715666, 31.169533 ], [ 119.705811, 31.152634 ], [ 119.678093, 31.167997 ], [ 119.623891, 31.130096 ], [ 119.599869, 31.10909 ], [ 119.532732, 31.159291 ], [ 119.461283, 31.156219 ], [ 119.439109, 31.177214 ], [ 119.391682, 31.174142 ], [ 119.360269, 31.213049 ], [ 119.374435, 31.258591 ], [ 119.350414, 31.301043 ], [ 119.338095, 31.259103 ], [ 119.294363, 31.263195 ], [ 119.266646, 31.250405 ], [ 119.198277, 31.270357 ], [ 119.197661, 31.295418 ], [ 119.158241, 31.294907 ], [ 119.107118, 31.250917 ], [ 119.10527, 31.235055 ], [ 119.014727, 31.241707 ], [ 118.984546, 31.237102 ], [ 118.870597, 31.242219 ], [ 118.794836, 31.229426 ], [ 118.756648, 31.279564 ], [ 118.726467, 31.282121 ], [ 118.720924, 31.322518 ], [ 118.745561, 31.372606 ], [ 118.767735, 31.363919 ], [ 118.824401, 31.375672 ], [ 118.852119, 31.393553 ], [ 118.883532, 31.500261 ], [ 118.885995, 31.519139 ], [ 118.881684, 31.564023 ], [ 118.858894, 31.623665 ], [ 118.802844, 31.619078 ], [ 118.773894, 31.682759 ], [ 118.748025, 31.675629 ], [ 118.736322, 31.633347 ], [ 118.643315, 31.649651 ], [ 118.643315, 31.671555 ], [ 118.697518, 31.709747 ], [ 118.653786, 31.73011 ], [ 118.641467, 31.75861 ], [ 118.571866, 31.746397 ], [ 118.5577, 31.73011 ], [ 118.521975, 31.743343 ], [ 118.533678, 31.76726 ], [ 118.481939, 31.778453 ], [ 118.504729, 31.841516 ], [ 118.466541, 31.857784 ], [ 118.472084, 31.879639 ], [ 118.363679, 31.930443 ], [ 118.389548, 31.985281 ], [ 118.394476, 32.076098 ], [ 118.433896, 32.086746 ], [ 118.501033, 32.121726 ], [ 118.49549, 32.165304 ], [ 118.510888, 32.194176 ], [ 118.643931, 32.209875 ], [ 118.674728, 32.250375 ], [ 118.657482, 32.30148 ], [ 118.703061, 32.328792 ], [ 118.685199, 32.403604 ], [ 118.691359, 32.472295 ], [ 118.628533, 32.467751 ], [ 118.592192, 32.481383 ], [ 118.608823, 32.536899 ], [ 118.564475, 32.562122 ], [ 118.568787, 32.585825 ], [ 118.59712, 32.600951 ], [ 118.632844, 32.578261 ], [ 118.658714, 32.594397 ], [ 118.688895, 32.588346 ], [ 118.719076, 32.614059 ], [ 118.719076, 32.614059 ], [ 118.73509, 32.58885 ], [ 118.757264, 32.603976 ], [ 118.784981, 32.582295 ], [ 118.820706, 32.60448 ], [ 118.84288, 32.56767 ], [ 118.908169, 32.59238 ], [ 118.890923, 32.553042 ], [ 118.92172, 32.557078 ], [ 118.922336, 32.557078 ], [ 118.92172, 32.557078 ], [ 118.922336, 32.557078 ], [ 118.975923, 32.505108 ], [ 119.041212, 32.515201 ], [ 119.084944, 32.452602 ], [ 119.142226, 32.499556 ], [ 119.168096, 32.536394 ], [ 119.152697, 32.557582 ], [ 119.22045, 32.576748 ], [ 119.230921, 32.607001 ], [ 119.208748, 32.641276 ], [ 119.211827, 32.708275 ], [ 119.184726, 32.825529 ], [ 119.113277, 32.823014 ], [ 119.054763, 32.8748 ], [ 119.020886, 32.955685 ], [ 118.993169, 32.958196 ], [ 118.934039, 32.93861 ], [ 118.892771, 32.941121 ], [ 118.89585, 32.957694 ], [ 118.89585, 32.957694 ], [ 118.849039, 32.956689 ], [ 118.846575, 32.922034 ], [ 118.821322, 32.920527 ], [ 118.810235, 32.853687 ], [ 118.743097, 32.853184 ], [ 118.743097, 32.853184 ], [ 118.73817, 32.772708 ], [ 118.756648, 32.737477 ], [ 118.707373, 32.72036 ], [ 118.642699, 32.744525 ], [ 118.572482, 32.719856 ], [ 118.560163, 32.729926 ], [ 118.483787, 32.721367 ], [ 118.450526, 32.743518 ], [ 118.411106, 32.715828 ], [ 118.375382, 32.718849 ], [ 118.363063, 32.770695 ], [ 118.334114, 32.761637 ], [ 118.300237, 32.783275 ], [ 118.301469, 32.846145 ], [ 118.250346, 32.848157 ], [ 118.2331, 32.914498 ], [ 118.252194, 32.936601 ], [ 118.291614, 32.946143 ], [ 118.303933, 32.96874 ], [ 118.26944, 32.969242 ], [ 118.244803, 32.998359 ], [ 118.243571, 33.027967 ], [ 118.219549, 33.114227 ], [ 118.217085, 33.191888 ], [ 118.178281, 33.217926 ], [ 118.149332, 33.169348 ], [ 118.038463, 33.134776 ], [ 118.037231, 33.152314 ], [ 117.988572, 33.180869 ], [ 117.977485, 33.226437 ], [ 117.942376, 33.224936 ], [ 117.939297, 33.262475 ], [ 117.974405, 33.279487 ], [ 117.992883, 33.333005 ], [ 118.029224, 33.374995 ], [ 118.016905, 33.402978 ], [ 118.027376, 33.455421 ], [ 118.050782, 33.491863 ], [ 118.107448, 33.475391 ], [ 118.117919, 33.594615 ], [ 118.112376, 33.617045 ], [ 118.16781, 33.663381 ], [ 118.161035, 33.735576 ], [ 118.117919, 33.766427 ], [ 118.065564, 33.76593 ], [ 118.019985, 33.738562 ], [ 117.972557, 33.74951 ], [ 117.901724, 33.720146 ], [ 117.843826, 33.736074 ], [ 117.791471, 33.733585 ], [ 117.750203, 33.710688 ], [ 117.72495, 33.74951 ], [ 117.739732, 33.758467 ], [ 117.759442, 33.874318 ], [ 117.753899, 33.891211 ], [ 117.715095, 33.879287 ], [ 117.672595, 33.934916 ], [ 117.671363, 33.992494 ], [ 117.629479, 34.028708 ], [ 117.612849, 34.000433 ], [ 117.569117, 33.985051 ], [ 117.543248, 34.038627 ], [ 117.514914, 34.060941 ], [ 117.435458, 34.028212 ], [ 117.404045, 34.03218 ], [ 117.357234, 34.088205 ], [ 117.311654, 34.067882 ], [ 117.277162, 34.078787 ], [ 117.257452, 34.065899 ], [ 117.192162, 34.068873 ], [ 117.130568, 34.101586 ], [ 117.123793, 34.128342 ], [ 117.046801, 34.151622 ], [ 117.025243, 34.167469 ], [ 117.051112, 34.221425 ], [ 116.969192, 34.283753 ], [ 116.983359, 34.348011 ], [ 116.960569, 34.363821 ], [ 116.969192, 34.389012 ], [ 116.909446, 34.408271 ], [ 116.828142, 34.389012 ], [ 116.782563, 34.429993 ], [ 116.773939, 34.453683 ], [ 116.722816, 34.472434 ], [ 116.662454, 34.472927 ], [ 116.592237, 34.493646 ], [ 116.594085, 34.511894 ], [ 116.490607, 34.573513 ], [ 116.477057, 34.614896 ], [ 116.432709, 34.630163 ], [ 116.430245, 34.650843 ], [ 116.374195, 34.640011 ], [ 116.392057, 34.710391 ], [ 116.363724, 34.715311 ], [ 116.369267, 34.749247 ], [ 116.403144, 34.756131 ], [ 116.408071, 34.850972 ], [ 116.445028, 34.895652 ], [ 116.557745, 34.908905 ], [ 116.613795, 34.922645 ], [ 116.622418, 34.939818 ], [ 116.677853, 34.939327 ], [ 116.781331, 34.916757 ], [ 116.781947, 34.961891 ], [ 116.809048, 34.968757 ], [ 116.821983, 34.929515 ], [ 116.858323, 34.928533 ], [ 116.922381, 34.894671 ], [ 116.929156, 34.843114 ], [ 116.966113, 34.844588 ], [ 116.979047, 34.815113 ], [ 116.95133, 34.81069 ], [ 116.969192, 34.771864 ], [ 117.022163, 34.759081 ], [ 117.070206, 34.713835 ], [ 117.061583, 34.675947 ], [ 117.073286, 34.639026 ], [ 117.104083, 34.648874 ], [ 117.15151, 34.559222 ], [ 117.139191, 34.526687 ], [ 117.166293, 34.434435 ], [ 117.248213, 34.451216 ], [ 117.252524, 34.48674 ], [ 117.27285, 34.499565 ], [ 117.267307, 34.528659 ], [ 117.311654, 34.561686 ] ] ] ] } }, +{ "type": "Feature", "properties": { "adcode": "330000", "name": "浙江省", "center": [ 120.153576, 30.287459 ], "centroid": [ 120.109921, 29.181449 ], "childrenNum": 11, "level": "province", "parent": { "adcode": 100000 }, "subFeatureIndex": 10, "acroutes": [ 100000 ] }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 118.433896, 28.288335 ], [ 118.480091, 28.327325 ], [ 118.455454, 28.384204 ], [ 118.432048, 28.402104 ], [ 118.456686, 28.424738 ], [ 118.474548, 28.478934 ], [ 118.414802, 28.497344 ], [ 118.4302, 28.515225 ], [ 118.412338, 28.55676 ], [ 118.428352, 28.617193 ], [ 118.428352, 28.617193 ], [ 118.428352, 28.681267 ], [ 118.403099, 28.702791 ], [ 118.364295, 28.813491 ], [ 118.300237, 28.826075 ], [ 118.270056, 28.918836 ], [ 118.195527, 28.904167 ], [ 118.227556, 28.942406 ], [ 118.165346, 28.986912 ], [ 118.133933, 28.983771 ], [ 118.115455, 29.009944 ], [ 118.115455, 29.009944 ], [ 118.097593, 28.998952 ], [ 118.066796, 29.053898 ], [ 118.076035, 29.074822 ], [ 118.037847, 29.102017 ], [ 118.045238, 29.149068 ], [ 118.027992, 29.167882 ], [ 118.042159, 29.210202 ], [ 118.073571, 29.216993 ], [ 118.077883, 29.290614 ], [ 118.138861, 29.283828 ], [ 118.178281, 29.297921 ], [ 118.166578, 29.314099 ], [ 118.205382, 29.343839 ], [ 118.193064, 29.395472 ], [ 118.248498, 29.431443 ], [ 118.316252, 29.422581 ], [ 118.306396, 29.479384 ], [ 118.329802, 29.495012 ], [ 118.347664, 29.474174 ], [ 118.381541, 29.504909 ], [ 118.496106, 29.519492 ], [ 118.500417, 29.57572 ], [ 118.532446, 29.588731 ], [ 118.573714, 29.638159 ], [ 118.61991, 29.654282 ], [ 118.647011, 29.64336 ], [ 118.700598, 29.706277 ], [ 118.744945, 29.73902 ], [ 118.740634, 29.814859 ], [ 118.841032, 29.891159 ], [ 118.838568, 29.934733 ], [ 118.894619, 29.937845 ], [ 118.902626, 30.029078 ], [ 118.878604, 30.064822 ], [ 118.873677, 30.11505 ], [ 118.895234, 30.148694 ], [ 118.852119, 30.149729 ], [ 118.852735, 30.166805 ], [ 118.929727, 30.2025 ], [ 118.905089, 30.216464 ], [ 118.877988, 30.282637 ], [ 118.880452, 30.31519 ], [ 118.954365, 30.360126 ], [ 118.988857, 30.332237 ], [ 119.06277, 30.304856 ], [ 119.091719, 30.323972 ], [ 119.126828, 30.304856 ], [ 119.201356, 30.290905 ], [ 119.236465, 30.297106 ], [ 119.246936, 30.341018 ], [ 119.277117, 30.341018 ], [ 119.326392, 30.372002 ], [ 119.349182, 30.349281 ], [ 119.402768, 30.374584 ], [ 119.36766, 30.38491 ], [ 119.335015, 30.448389 ], [ 119.336247, 30.508734 ], [ 119.326392, 30.532964 ], [ 119.272189, 30.510281 ], [ 119.237081, 30.546881 ], [ 119.265414, 30.574709 ], [ 119.238929, 30.609225 ], [ 119.323312, 30.630341 ], [ 119.343022, 30.664322 ], [ 119.39045, 30.685941 ], [ 119.408312, 30.645274 ], [ 119.444652, 30.650422 ], [ 119.482841, 30.704467 ], [ 119.479761, 30.772365 ], [ 119.527188, 30.77905 ], [ 119.55429, 30.825828 ], [ 119.575847, 30.829939 ], [ 119.557369, 30.874124 ], [ 119.563529, 30.919315 ], [ 119.582007, 30.932149 ], [ 119.580159, 30.967051 ], [ 119.633746, 31.019379 ], [ 119.629434, 31.085517 ], [ 119.649144, 31.104991 ], [ 119.623891, 31.130096 ], [ 119.678093, 31.167997 ], [ 119.705811, 31.152634 ], [ 119.715666, 31.169533 ], [ 119.779723, 31.17875 ], [ 119.809904, 31.148536 ], [ 119.827151, 31.174142 ], [ 119.878274, 31.160828 ], [ 119.921389, 31.170045 ], [ 119.946027, 31.106016 ], [ 119.988527, 31.059375 ], [ 120.001461, 31.027071 ], [ 120.052584, 31.00553 ], [ 120.111099, 30.955761 ], [ 120.149903, 30.937283 ], [ 120.223816, 30.926502 ], [ 120.316206, 30.933689 ], [ 120.371025, 30.948575 ], [ 120.35809, 30.886964 ], [ 120.42338, 30.902884 ], [ 120.435083, 30.920855 ], [ 120.441858, 30.860768 ], [ 120.460336, 30.839702 ], [ 120.489285, 30.763624 ], [ 120.503452, 30.757967 ], [ 120.563814, 30.835592 ], [ 120.589068, 30.854603 ], [ 120.653741, 30.846896 ], [ 120.68269, 30.882342 ], [ 120.713487, 30.88491 ], [ 120.709176, 30.933176 ], [ 120.684538, 30.955247 ], [ 120.698089, 30.970643 ], [ 120.746132, 30.962432 ], [ 120.770154, 30.996809 ], [ 120.820661, 31.006556 ], [ 120.865624, 30.989627 ], [ 120.901349, 31.017327 ], [ 120.940153, 31.010146 ], [ 120.949392, 31.030148 ], [ 120.989428, 31.01425 ], [ 121.000515, 30.938309 ], [ 120.993124, 30.889532 ], [ 121.020225, 30.872069 ], [ 120.991892, 30.837133 ], [ 121.038087, 30.814007 ], [ 121.060261, 30.845354 ], [ 121.097833, 30.857171 ], [ 121.13787, 30.826342 ], [ 121.123087, 30.77905 ], [ 121.174826, 30.771851 ], [ 121.21671, 30.785734 ], [ 121.232108, 30.755909 ], [ 121.272144, 30.723504 ], [ 121.274608, 30.677191 ], [ 121.239499, 30.648878 ], [ 121.188992, 30.632916 ], [ 121.148956, 30.599953 ], [ 121.058413, 30.563888 ], [ 121.092906, 30.515952 ], [ 121.183449, 30.434458 ], [ 121.225333, 30.404526 ], [ 121.328195, 30.397299 ], [ 121.371926, 30.37097 ], [ 121.395332, 30.338435 ], [ 121.497578, 30.258861 ], [ 121.561636, 30.184395 ], [ 121.635548, 30.070002 ], [ 121.652795, 30.071037 ], [ 121.699606, 30.007832 ], [ 121.721164, 29.992802 ], [ 121.78399, 29.99332 ], [ 121.835113, 29.958068 ], [ 121.919497, 29.920729 ], [ 121.971235, 29.955476 ], [ 122.00388, 29.92021 ], [ 122.00696, 29.891678 ], [ 122.140003, 29.901535 ], [ 122.143082, 29.877668 ], [ 122.10243, 29.859504 ], [ 122.043916, 29.822647 ], [ 122.003264, 29.762401 ], [ 121.937359, 29.748373 ], [ 121.833265, 29.653242 ], [ 121.872685, 29.632437 ], [ 121.909641, 29.650122 ], [ 121.966308, 29.636078 ], [ 122.000185, 29.582486 ], [ 121.995257, 29.545007 ], [ 121.968772, 29.515846 ], [ 121.973083, 29.477821 ], [ 121.993409, 29.45229 ], [ 121.975547, 29.411113 ], [ 121.937975, 29.384 ], [ 121.936127, 29.348012 ], [ 121.958301, 29.334448 ], [ 121.94475, 29.28435 ], [ 122.000185, 29.278608 ], [ 122.002032, 29.260336 ], [ 121.966924, 29.249894 ], [ 121.971851, 29.193485 ], [ 121.948446, 29.193485 ], [ 121.986634, 29.154817 ], [ 121.988482, 29.110906 ], [ 121.970004, 29.092604 ], [ 121.966308, 29.052852 ], [ 121.884388, 29.105677 ], [ 121.85975, 29.086328 ], [ 121.811091, 29.10986 ], [ 121.780294, 29.10986 ], [ 121.767975, 29.166837 ], [ 121.750113, 29.136523 ], [ 121.715621, 29.125022 ], [ 121.608447, 29.168927 ], [ 121.616454, 29.143318 ], [ 121.660186, 29.118226 ], [ 121.658954, 29.058606 ], [ 121.712541, 29.028783 ], [ 121.711309, 28.985865 ], [ 121.743338, 28.954451 ], [ 121.772287, 28.898404 ], [ 121.774751, 28.863818 ], [ 121.687287, 28.863294 ], [ 121.704534, 28.804577 ], [ 121.689135, 28.719062 ], [ 121.646019, 28.682842 ], [ 121.540694, 28.655537 ], [ 121.557324, 28.645033 ], [ 121.596128, 28.575156 ], [ 121.634317, 28.562542 ], [ 121.646019, 28.511544 ], [ 121.671273, 28.472621 ], [ 121.692831, 28.407368 ], [ 121.658954, 28.392628 ], [ 121.634317, 28.347868 ], [ 121.660186, 28.355768 ], [ 121.669425, 28.33312 ], [ 121.627541, 28.251966 ], [ 121.580114, 28.240368 ], [ 121.571491, 28.279376 ], [ 121.538846, 28.299401 ], [ 121.488955, 28.301509 ], [ 121.45631, 28.250385 ], [ 121.402107, 28.197127 ], [ 121.373774, 28.133287 ], [ 121.328195, 28.134343 ], [ 121.299862, 28.067297 ], [ 121.261057, 28.034551 ], [ 121.176058, 28.022401 ], [ 121.140949, 28.031382 ], [ 121.121239, 28.12537 ], [ 121.108304, 28.139092 ], [ 121.059029, 28.096338 ], [ 121.015298, 27.981714 ], [ 120.991892, 27.95 ], [ 121.05595, 27.900294 ], [ 121.099681, 27.895005 ], [ 121.162507, 27.90717 ], [ 121.162507, 27.879136 ], [ 121.193304, 27.872259 ], [ 121.192072, 27.822518 ], [ 121.152652, 27.810344 ], [ 121.153268, 27.809815 ], [ 121.149572, 27.801875 ], [ 121.149572, 27.801345 ], [ 121.13479, 27.787051 ], [ 121.134174, 27.787051 ], [ 121.152036, 27.815638 ], [ 121.107688, 27.81352 ], [ 121.070116, 27.834162 ], [ 121.027616, 27.832574 ], [ 120.97403, 27.887071 ], [ 120.942001, 27.896592 ], [ 120.910588, 27.864852 ], [ 120.840371, 27.758986 ], [ 120.797871, 27.779638 ], [ 120.760915, 27.717671 ], [ 120.709176, 27.682699 ], [ 120.685154, 27.622797 ], [ 120.634647, 27.577186 ], [ 120.637111, 27.561271 ], [ 120.703016, 27.478475 ], [ 120.673451, 27.420055 ], [ 120.665444, 27.357884 ], [ 120.580444, 27.321203 ], [ 120.554575, 27.25206 ], [ 120.574901, 27.234501 ], [ 120.545952, 27.156785 ], [ 120.492365, 27.136016 ], [ 120.461568, 27.142407 ], [ 120.404286, 27.204166 ], [ 120.401822, 27.250996 ], [ 120.430155, 27.258976 ], [ 120.343924, 27.363199 ], [ 120.340844, 27.399867 ], [ 120.273091, 27.38924 ], [ 120.26262, 27.432804 ], [ 120.221352, 27.420055 ], [ 120.134504, 27.420055 ], [ 120.136968, 27.402523 ], [ 120.096316, 27.390302 ], [ 120.052584, 27.338747 ], [ 120.026099, 27.344063 ], [ 120.008237, 27.375423 ], [ 119.960194, 27.365857 ], [ 119.938636, 27.329709 ], [ 119.843165, 27.300464 ], [ 119.768636, 27.307909 ], [ 119.782187, 27.330241 ], [ 119.739687, 27.362668 ], [ 119.750774, 27.373829 ], [ 119.711354, 27.403054 ], [ 119.685485, 27.438646 ], [ 119.703347, 27.446613 ], [ 119.70889, 27.514042 ], [ 119.690412, 27.537394 ], [ 119.659615, 27.540578 ], [ 119.675014, 27.574534 ], [ 119.630666, 27.582491 ], [ 119.626354, 27.620676 ], [ 119.644217, 27.663619 ], [ 119.606028, 27.674749 ], [ 119.541971, 27.666799 ], [ 119.501319, 27.649837 ], [ 119.501935, 27.610601 ], [ 119.466826, 27.526249 ], [ 119.438493, 27.508734 ], [ 119.416935, 27.539517 ], [ 119.360269, 27.524657 ], [ 119.334399, 27.480067 ], [ 119.285124, 27.457766 ], [ 119.26911, 27.42218 ], [ 119.224146, 27.416868 ], [ 119.14777, 27.424836 ], [ 119.121284, 27.438115 ], [ 119.129907, 27.475289 ], [ 119.092335, 27.466262 ], [ 119.03998, 27.478475 ], [ 119.020886, 27.498118 ], [ 118.983314, 27.498649 ], [ 118.986393, 27.47582 ], [ 118.955597, 27.4498 ], [ 118.907553, 27.460952 ], [ 118.869365, 27.540047 ], [ 118.909401, 27.568168 ], [ 118.913713, 27.619616 ], [ 118.879836, 27.667859 ], [ 118.873677, 27.733563 ], [ 118.829329, 27.847921 ], [ 118.818242, 27.916689 ], [ 118.753568, 27.947885 ], [ 118.730163, 27.970615 ], [ 118.733858, 28.027684 ], [ 118.719076, 28.063601 ], [ 118.767735, 28.10584 ], [ 118.802228, 28.117453 ], [ 118.805923, 28.154923 ], [ 118.771431, 28.188687 ], [ 118.804075, 28.207675 ], [ 118.802228, 28.240368 ], [ 118.756032, 28.252493 ], [ 118.719692, 28.312047 ], [ 118.699366, 28.309939 ], [ 118.674728, 28.27147 ], [ 118.651322, 28.277267 ], [ 118.595272, 28.258292 ], [ 118.588497, 28.282538 ], [ 118.493026, 28.262509 ], [ 118.490562, 28.238259 ], [ 118.444367, 28.253548 ], [ 118.433896, 28.288335 ] ] ], [ [ [ 122.163408, 29.988137 ], [ 122.118445, 29.986582 ], [ 122.106742, 30.005759 ], [ 122.027902, 29.991247 ], [ 121.978011, 30.059125 ], [ 121.989714, 30.077252 ], [ 121.983554, 30.100554 ], [ 121.934895, 30.161631 ], [ 121.955221, 30.183878 ], [ 122.048844, 30.147141 ], [ 122.095655, 30.158008 ], [ 122.152938, 30.113497 ], [ 122.293988, 30.100554 ], [ 122.288444, 30.073109 ], [ 122.310002, 30.039958 ], [ 122.343879, 30.020269 ], [ 122.341415, 29.976733 ], [ 122.322321, 29.940438 ], [ 122.279205, 29.937326 ], [ 122.239785, 29.962735 ], [ 122.163408, 29.988137 ] ] ], [ [ [ 122.213915, 30.186464 ], [ 122.168336, 30.138343 ], [ 122.143698, 30.163183 ], [ 122.152938, 30.19112 ], [ 122.178807, 30.199396 ], [ 122.213915, 30.186464 ] ] ], [ [ [ 122.229314, 29.711995 ], [ 122.231162, 29.710435 ], [ 122.269966, 29.685482 ], [ 122.210836, 29.700559 ], [ 122.229314, 29.711995 ] ] ], [ [ [ 122.427646, 30.738422 ], [ 122.445509, 30.745109 ], [ 122.475074, 30.714243 ], [ 122.528045, 30.725047 ], [ 122.532972, 30.696748 ], [ 122.427031, 30.697777 ], [ 122.427646, 30.738422 ] ] ], [ [ [ 122.162793, 30.329654 ], [ 122.176343, 30.351863 ], [ 122.191126, 30.329654 ], [ 122.228082, 30.329654 ], [ 122.247176, 30.30124 ], [ 122.231778, 30.234562 ], [ 122.154169, 30.244903 ], [ 122.058083, 30.291938 ], [ 122.162793, 30.329654 ] ] ], [ [ [ 122.317393, 30.249556 ], [ 122.333408, 30.272817 ], [ 122.40732, 30.272817 ], [ 122.417175, 30.238699 ], [ 122.365437, 30.255242 ], [ 122.358661, 30.236113 ], [ 122.277973, 30.242835 ], [ 122.317393, 30.249556 ] ] ], [ [ [ 122.026054, 29.178333 ], [ 122.036525, 29.20759 ], [ 122.075945, 29.176243 ], [ 122.056851, 29.158476 ], [ 122.013119, 29.151681 ], [ 122.026054, 29.178333 ] ] ], [ [ [ 122.372212, 29.893234 ], [ 122.362973, 29.894272 ], [ 122.353734, 29.89946 ], [ 122.338951, 29.911911 ], [ 122.330944, 29.937845 ], [ 122.351886, 29.959105 ], [ 122.398081, 29.9394 ], [ 122.411632, 29.951846 ], [ 122.43319, 29.919173 ], [ 122.433806, 29.883376 ], [ 122.401777, 29.869884 ], [ 122.415944, 29.828877 ], [ 122.386379, 29.834069 ], [ 122.372212, 29.893234 ] ] ], [ [ [ 122.43011, 30.408655 ], [ 122.352502, 30.422074 ], [ 122.318625, 30.407106 ], [ 122.281669, 30.418461 ], [ 122.277973, 30.471603 ], [ 122.37406, 30.461802 ], [ 122.432574, 30.445294 ], [ 122.43011, 30.408655 ] ] ], [ [ [ 121.837577, 28.770484 ], [ 121.861598, 28.814016 ], [ 121.86283, 28.782024 ], [ 121.837577, 28.770484 ] ] ], [ [ [ 122.265038, 29.84549 ], [ 122.319241, 29.829397 ], [ 122.299531, 29.819532 ], [ 122.325401, 29.781621 ], [ 122.310002, 29.766557 ], [ 122.248408, 29.804473 ], [ 122.221307, 29.832512 ], [ 122.265038, 29.84549 ] ] ], [ [ [ 121.790765, 29.082144 ], [ 121.82033, 29.099402 ], [ 121.84312, 29.082144 ], [ 121.832649, 29.050236 ], [ 121.790765, 29.082144 ] ] ], [ [ [ 121.943518, 30.776993 ], [ 121.970004, 30.789333 ], [ 121.987866, 30.753338 ], [ 121.992793, 30.695204 ], [ 122.011271, 30.66947 ], [ 122.075329, 30.647848 ], [ 122.133227, 30.595317 ], [ 122.087032, 30.602014 ], [ 121.997105, 30.658659 ], [ 121.968156, 30.688514 ], [ 121.943518, 30.776993 ] ] ], [ [ [ 121.889315, 28.471569 ], [ 121.881924, 28.502603 ], [ 121.918881, 28.497344 ], [ 121.889315, 28.471569 ] ] ], [ [ [ 122.182503, 29.650642 ], [ 122.138155, 29.662083 ], [ 122.095655, 29.716673 ], [ 122.074097, 29.701599 ], [ 122.047612, 29.719791 ], [ 122.083952, 29.78318 ], [ 122.13138, 29.788893 ], [ 122.146778, 29.749412 ], [ 122.200365, 29.712515 ], [ 122.211452, 29.692241 ], [ 122.182503, 29.650642 ] ] ], [ [ [ 122.461523, 29.944068 ], [ 122.459059, 29.938882 ], [ 122.467067, 29.928509 ], [ 122.462755, 29.927991 ], [ 122.457827, 29.927472 ], [ 122.45598, 29.926435 ], [ 122.452284, 29.935252 ], [ 122.4529, 29.936807 ], [ 122.449204, 29.9394 ], [ 122.450436, 29.940956 ], [ 122.451052, 29.940956 ], [ 122.451668, 29.943031 ], [ 122.460291, 29.947179 ], [ 122.459675, 29.944586 ], [ 122.461523, 29.944068 ] ] ], [ [ [ 122.570544, 30.644244 ], [ 122.546523, 30.651967 ], [ 122.559457, 30.679764 ], [ 122.570544, 30.644244 ] ] ], [ [ [ 121.869605, 28.423685 ], [ 121.889931, 28.45105 ], [ 121.910873, 28.44 ], [ 121.869605, 28.423685 ] ] ], [ [ [ 122.391306, 29.970512 ], [ 122.3679, 29.980361 ], [ 122.378371, 30.023896 ], [ 122.411632, 30.025969 ], [ 122.391306, 29.970512 ] ] ], [ [ [ 122.065474, 30.179739 ], [ 122.025438, 30.161631 ], [ 122.017431, 30.186464 ], [ 122.055619, 30.200431 ], [ 122.065474, 30.179739 ] ] ], [ [ [ 121.850511, 29.977251 ], [ 121.844968, 29.982953 ], [ 121.84004, 30.047211 ], [ 121.848663, 30.101072 ], [ 121.88562, 30.094859 ], [ 121.924424, 30.052391 ], [ 121.933047, 29.994875 ], [ 121.874533, 29.964809 ], [ 121.850511, 29.977251 ] ] ], [ [ [ 121.066421, 27.478475 ], [ 121.067036, 27.478475 ], [ 121.107073, 27.443958 ], [ 121.066421, 27.461483 ], [ 121.066421, 27.478475 ] ] ], [ [ [ 121.952141, 29.187738 ], [ 121.976779, 29.191918 ], [ 121.979243, 29.160043 ], [ 121.952141, 29.187738 ] ] ], [ [ [ 122.038373, 29.759284 ], [ 122.02975, 29.716673 ], [ 122.011271, 29.746294 ], [ 122.038373, 29.759284 ] ] ], [ [ [ 121.957685, 30.287804 ], [ 121.921344, 30.30744 ], [ 121.94167, 30.33327 ], [ 121.989098, 30.339985 ], [ 122.0008, 30.308473 ], [ 121.957685, 30.287804 ] ] ], [ [ [ 121.940438, 30.114533 ], [ 121.962612, 30.106249 ], [ 121.945982, 30.064304 ], [ 121.910257, 30.089163 ], [ 121.940438, 30.114533 ] ] ], [ [ [ 122.155401, 29.970512 ], [ 122.154169, 29.97103 ], [ 122.152322, 29.97103 ], [ 122.163408, 29.988137 ], [ 122.196053, 29.960661 ], [ 122.155401, 29.970512 ] ] ], [ [ [ 122.287828, 29.723949 ], [ 122.251488, 29.731225 ], [ 122.2133, 29.771752 ], [ 122.241633, 29.784738 ], [ 122.258263, 29.753569 ], [ 122.301379, 29.748373 ], [ 122.287828, 29.723949 ] ] ], [ [ [ 121.134174, 27.787051 ], [ 121.13479, 27.787051 ], [ 121.134174, 27.785992 ], [ 121.134174, 27.787051 ] ] ], [ [ [ 122.264423, 30.269716 ], [ 122.300147, 30.271266 ], [ 122.315545, 30.250073 ], [ 122.253952, 30.237147 ], [ 122.264423, 30.269716 ] ] ], [ [ [ 122.282901, 29.860542 ], [ 122.301379, 29.883895 ], [ 122.343263, 29.882857 ], [ 122.343263, 29.860542 ], [ 122.30877, 29.849642 ], [ 122.282901, 29.860542 ] ] ], [ [ [ 122.781196, 30.694175 ], [ 122.757174, 30.713728 ], [ 122.778732, 30.729677 ], [ 122.799674, 30.716301 ], [ 122.781196, 30.694175 ] ] ], [ [ [ 121.098449, 27.937311 ], [ 121.038087, 27.948942 ], [ 121.0695, 27.984357 ], [ 121.120623, 27.986471 ], [ 121.152652, 27.961629 ], [ 121.098449, 27.937311 ] ] ], [ [ [ 121.185913, 27.963215 ], [ 121.17113, 27.978543 ], [ 121.197616, 28.000739 ], [ 121.237652, 27.988056 ], [ 121.185913, 27.963215 ] ] ], [ [ [ 122.454132, 29.956513 ], [ 122.455364, 29.955994 ], [ 122.458443, 29.951846 ], [ 122.459059, 29.950809 ], [ 122.447972, 29.947698 ], [ 122.446741, 29.951327 ], [ 122.445509, 29.952365 ], [ 122.447972, 29.955994 ], [ 122.454132, 29.956513 ] ] ], [ [ [ 122.836014, 30.698806 ], [ 122.807681, 30.714243 ], [ 122.831087, 30.728648 ], [ 122.836014, 30.698806 ] ] ], [ [ [ 122.200365, 29.969475 ], [ 122.239785, 29.960142 ], [ 122.273662, 29.93214 ], [ 122.233626, 29.946661 ], [ 122.200365, 29.969475 ] ] ], [ [ [ 122.029134, 29.954957 ], [ 122.058699, 29.955994 ], [ 122.043916, 29.930584 ], [ 122.029134, 29.954957 ] ] ], [ [ [ 121.044247, 27.979072 ], [ 121.073812, 28.007608 ], [ 121.089826, 27.998625 ], [ 121.044247, 27.979072 ] ] ], [ [ [ 122.471378, 29.927472 ], [ 122.47261, 29.927472 ], [ 122.473226, 29.925397 ], [ 122.470762, 29.925916 ], [ 122.471378, 29.927472 ] ] ], [ [ [ 122.152322, 29.97103 ], [ 122.154169, 29.97103 ], [ 122.155401, 29.970512 ], [ 122.152322, 29.97103 ] ] ] ] } }, +{ "type": "Feature", "properties": { "adcode": "340000", "name": "安徽省", "center": [ 117.283042, 31.86119 ], "centroid": [ 117.226862, 31.849273 ], "childrenNum": 16, "level": "province", "parent": { "adcode": 100000 }, "subFeatureIndex": 11, "acroutes": [ 100000 ] }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 116.599629, 34.014324 ], [ 116.599629, 34.014324 ], [ 116.576223, 34.068873 ], [ 116.576223, 34.068873 ], [ 116.52818, 34.122892 ], [ 116.536187, 34.151127 ], [ 116.565752, 34.16945 ], [ 116.542962, 34.203608 ], [ 116.545426, 34.241711 ], [ 116.582382, 34.266444 ], [ 116.562056, 34.285731 ], [ 116.516477, 34.296114 ], [ 116.456731, 34.268917 ], [ 116.409303, 34.273863 ], [ 116.409303, 34.273863 ], [ 116.372347, 34.26595 ], [ 116.363724, 34.316877 ], [ 116.301514, 34.342082 ], [ 116.255934, 34.376665 ], [ 116.213435, 34.382098 ], [ 116.215898, 34.403333 ], [ 116.178942, 34.430487 ], [ 116.162312, 34.459605 ], [ 116.178326, 34.496112 ], [ 116.204196, 34.508442 ], [ 116.191261, 34.535561 ], [ 116.196804, 34.575977 ], [ 116.247927, 34.551829 ], [ 116.286116, 34.608986 ], [ 116.32492, 34.601104 ], [ 116.334159, 34.620806 ], [ 116.374195, 34.640011 ], [ 116.430245, 34.650843 ], [ 116.432709, 34.630163 ], [ 116.477057, 34.614896 ], [ 116.490607, 34.573513 ], [ 116.594085, 34.511894 ], [ 116.592237, 34.493646 ], [ 116.662454, 34.472927 ], [ 116.722816, 34.472434 ], [ 116.773939, 34.453683 ], [ 116.782563, 34.429993 ], [ 116.828142, 34.389012 ], [ 116.909446, 34.408271 ], [ 116.969192, 34.389012 ], [ 116.960569, 34.363821 ], [ 116.983359, 34.348011 ], [ 116.969192, 34.283753 ], [ 117.051112, 34.221425 ], [ 117.025243, 34.167469 ], [ 117.046801, 34.151622 ], [ 117.123793, 34.128342 ], [ 117.130568, 34.101586 ], [ 117.192162, 34.068873 ], [ 117.257452, 34.065899 ], [ 117.277162, 34.078787 ], [ 117.311654, 34.067882 ], [ 117.357234, 34.088205 ], [ 117.404045, 34.03218 ], [ 117.435458, 34.028212 ], [ 117.514914, 34.060941 ], [ 117.543248, 34.038627 ], [ 117.569117, 33.985051 ], [ 117.612849, 34.000433 ], [ 117.629479, 34.028708 ], [ 117.671363, 33.992494 ], [ 117.672595, 33.934916 ], [ 117.715095, 33.879287 ], [ 117.753899, 33.891211 ], [ 117.759442, 33.874318 ], [ 117.739732, 33.758467 ], [ 117.72495, 33.74951 ], [ 117.750203, 33.710688 ], [ 117.791471, 33.733585 ], [ 117.843826, 33.736074 ], [ 117.901724, 33.720146 ], [ 117.972557, 33.74951 ], [ 118.019985, 33.738562 ], [ 118.065564, 33.76593 ], [ 118.117919, 33.766427 ], [ 118.161035, 33.735576 ], [ 118.16781, 33.663381 ], [ 118.112376, 33.617045 ], [ 118.117919, 33.594615 ], [ 118.107448, 33.475391 ], [ 118.050782, 33.491863 ], [ 118.027376, 33.455421 ], [ 118.016905, 33.402978 ], [ 118.029224, 33.374995 ], [ 117.992883, 33.333005 ], [ 117.974405, 33.279487 ], [ 117.939297, 33.262475 ], [ 117.942376, 33.224936 ], [ 117.977485, 33.226437 ], [ 117.988572, 33.180869 ], [ 118.037231, 33.152314 ], [ 118.038463, 33.134776 ], [ 118.149332, 33.169348 ], [ 118.178281, 33.217926 ], [ 118.217085, 33.191888 ], [ 118.219549, 33.114227 ], [ 118.243571, 33.027967 ], [ 118.244803, 32.998359 ], [ 118.26944, 32.969242 ], [ 118.303933, 32.96874 ], [ 118.291614, 32.946143 ], [ 118.252194, 32.936601 ], [ 118.2331, 32.914498 ], [ 118.250346, 32.848157 ], [ 118.301469, 32.846145 ], [ 118.300237, 32.783275 ], [ 118.334114, 32.761637 ], [ 118.363063, 32.770695 ], [ 118.375382, 32.718849 ], [ 118.411106, 32.715828 ], [ 118.450526, 32.743518 ], [ 118.483787, 32.721367 ], [ 118.560163, 32.729926 ], [ 118.572482, 32.719856 ], [ 118.642699, 32.744525 ], [ 118.707373, 32.72036 ], [ 118.756648, 32.737477 ], [ 118.73817, 32.772708 ], [ 118.743097, 32.853184 ], [ 118.743097, 32.853184 ], [ 118.810235, 32.853687 ], [ 118.821322, 32.920527 ], [ 118.846575, 32.922034 ], [ 118.849039, 32.956689 ], [ 118.89585, 32.957694 ], [ 118.89585, 32.957694 ], [ 118.892771, 32.941121 ], [ 118.934039, 32.93861 ], [ 118.993169, 32.958196 ], [ 119.020886, 32.955685 ], [ 119.054763, 32.8748 ], [ 119.113277, 32.823014 ], [ 119.184726, 32.825529 ], [ 119.211827, 32.708275 ], [ 119.208748, 32.641276 ], [ 119.230921, 32.607001 ], [ 119.22045, 32.576748 ], [ 119.152697, 32.557582 ], [ 119.168096, 32.536394 ], [ 119.142226, 32.499556 ], [ 119.084944, 32.452602 ], [ 119.041212, 32.515201 ], [ 118.975923, 32.505108 ], [ 118.922336, 32.557078 ], [ 118.92172, 32.557078 ], [ 118.922336, 32.557078 ], [ 118.92172, 32.557078 ], [ 118.890923, 32.553042 ], [ 118.908169, 32.59238 ], [ 118.84288, 32.56767 ], [ 118.820706, 32.60448 ], [ 118.784981, 32.582295 ], [ 118.757264, 32.603976 ], [ 118.73509, 32.58885 ], [ 118.719076, 32.614059 ], [ 118.719076, 32.614059 ], [ 118.688895, 32.588346 ], [ 118.658714, 32.594397 ], [ 118.632844, 32.578261 ], [ 118.59712, 32.600951 ], [ 118.568787, 32.585825 ], [ 118.564475, 32.562122 ], [ 118.608823, 32.536899 ], [ 118.592192, 32.481383 ], [ 118.628533, 32.467751 ], [ 118.691359, 32.472295 ], [ 118.685199, 32.403604 ], [ 118.703061, 32.328792 ], [ 118.657482, 32.30148 ], [ 118.674728, 32.250375 ], [ 118.643931, 32.209875 ], [ 118.510888, 32.194176 ], [ 118.49549, 32.165304 ], [ 118.501033, 32.121726 ], [ 118.433896, 32.086746 ], [ 118.394476, 32.076098 ], [ 118.389548, 31.985281 ], [ 118.363679, 31.930443 ], [ 118.472084, 31.879639 ], [ 118.466541, 31.857784 ], [ 118.504729, 31.841516 ], [ 118.481939, 31.778453 ], [ 118.533678, 31.76726 ], [ 118.521975, 31.743343 ], [ 118.5577, 31.73011 ], [ 118.571866, 31.746397 ], [ 118.641467, 31.75861 ], [ 118.653786, 31.73011 ], [ 118.697518, 31.709747 ], [ 118.643315, 31.671555 ], [ 118.643315, 31.649651 ], [ 118.736322, 31.633347 ], [ 118.748025, 31.675629 ], [ 118.773894, 31.682759 ], [ 118.802844, 31.619078 ], [ 118.858894, 31.623665 ], [ 118.881684, 31.564023 ], [ 118.885995, 31.519139 ], [ 118.868133, 31.520669 ], [ 118.857046, 31.506384 ], [ 118.883532, 31.500261 ], [ 118.852119, 31.393553 ], [ 118.824401, 31.375672 ], [ 118.767735, 31.363919 ], [ 118.745561, 31.372606 ], [ 118.720924, 31.322518 ], [ 118.726467, 31.282121 ], [ 118.756648, 31.279564 ], [ 118.794836, 31.229426 ], [ 118.870597, 31.242219 ], [ 118.984546, 31.237102 ], [ 119.014727, 31.241707 ], [ 119.10527, 31.235055 ], [ 119.107118, 31.250917 ], [ 119.158241, 31.294907 ], [ 119.197661, 31.295418 ], [ 119.198277, 31.270357 ], [ 119.266646, 31.250405 ], [ 119.294363, 31.263195 ], [ 119.338095, 31.259103 ], [ 119.350414, 31.301043 ], [ 119.374435, 31.258591 ], [ 119.360269, 31.213049 ], [ 119.391682, 31.174142 ], [ 119.439109, 31.177214 ], [ 119.461283, 31.156219 ], [ 119.532732, 31.159291 ], [ 119.599869, 31.10909 ], [ 119.623891, 31.130096 ], [ 119.649144, 31.104991 ], [ 119.629434, 31.085517 ], [ 119.633746, 31.019379 ], [ 119.580159, 30.967051 ], [ 119.582007, 30.932149 ], [ 119.563529, 30.919315 ], [ 119.557369, 30.874124 ], [ 119.575847, 30.829939 ], [ 119.55429, 30.825828 ], [ 119.527188, 30.77905 ], [ 119.479761, 30.772365 ], [ 119.482841, 30.704467 ], [ 119.444652, 30.650422 ], [ 119.408312, 30.645274 ], [ 119.39045, 30.685941 ], [ 119.343022, 30.664322 ], [ 119.323312, 30.630341 ], [ 119.238929, 30.609225 ], [ 119.265414, 30.574709 ], [ 119.237081, 30.546881 ], [ 119.272189, 30.510281 ], [ 119.326392, 30.532964 ], [ 119.336247, 30.508734 ], [ 119.335015, 30.448389 ], [ 119.36766, 30.38491 ], [ 119.402768, 30.374584 ], [ 119.349182, 30.349281 ], [ 119.326392, 30.372002 ], [ 119.277117, 30.341018 ], [ 119.246936, 30.341018 ], [ 119.236465, 30.297106 ], [ 119.201356, 30.290905 ], [ 119.126828, 30.304856 ], [ 119.091719, 30.323972 ], [ 119.06277, 30.304856 ], [ 118.988857, 30.332237 ], [ 118.954365, 30.360126 ], [ 118.880452, 30.31519 ], [ 118.877988, 30.282637 ], [ 118.905089, 30.216464 ], [ 118.929727, 30.2025 ], [ 118.852735, 30.166805 ], [ 118.852119, 30.149729 ], [ 118.895234, 30.148694 ], [ 118.873677, 30.11505 ], [ 118.878604, 30.064822 ], [ 118.902626, 30.029078 ], [ 118.894619, 29.937845 ], [ 118.838568, 29.934733 ], [ 118.841032, 29.891159 ], [ 118.740634, 29.814859 ], [ 118.744945, 29.73902 ], [ 118.700598, 29.706277 ], [ 118.647011, 29.64336 ], [ 118.61991, 29.654282 ], [ 118.573714, 29.638159 ], [ 118.532446, 29.588731 ], [ 118.500417, 29.57572 ], [ 118.496106, 29.519492 ], [ 118.381541, 29.504909 ], [ 118.347664, 29.474174 ], [ 118.329802, 29.495012 ], [ 118.306396, 29.479384 ], [ 118.316252, 29.422581 ], [ 118.248498, 29.431443 ], [ 118.193064, 29.395472 ], [ 118.136397, 29.418932 ], [ 118.127774, 29.47209 ], [ 118.143788, 29.489803 ], [ 118.095129, 29.534072 ], [ 118.050782, 29.542924 ], [ 118.042774, 29.566351 ], [ 118.00397, 29.578322 ], [ 117.933753, 29.549172 ], [ 117.872775, 29.54761 ], [ 117.795167, 29.570515 ], [ 117.729877, 29.550213 ], [ 117.690457, 29.555939 ], [ 117.678754, 29.595496 ], [ 117.647957, 29.614749 ], [ 117.608537, 29.591333 ], [ 117.543248, 29.588731 ], [ 117.523538, 29.630356 ], [ 117.530313, 29.654282 ], [ 117.490277, 29.660003 ], [ 117.453936, 29.688082 ], [ 117.455168, 29.749412 ], [ 117.408973, 29.802396 ], [ 117.415132, 29.85068 ], [ 117.382487, 29.840818 ], [ 117.359082, 29.812782 ], [ 117.338756, 29.848085 ], [ 117.29256, 29.822647 ], [ 117.25314, 29.834588 ], [ 117.261763, 29.880781 ], [ 117.246365, 29.915023 ], [ 117.2168, 29.926953 ], [ 117.171836, 29.920729 ], [ 117.129952, 29.89946 ], [ 117.127489, 29.86158 ], [ 117.073286, 29.831992 ], [ 117.123177, 29.798761 ], [ 117.136728, 29.775388 ], [ 117.108395, 29.75201 ], [ 117.112706, 29.711995 ], [ 117.041873, 29.680803 ], [ 116.996294, 29.683403 ], [ 116.974736, 29.657403 ], [ 116.939627, 29.648561 ], [ 116.873722, 29.609546 ], [ 116.849084, 29.57624 ], [ 116.780715, 29.569994 ], [ 116.760389, 29.599139 ], [ 116.721585, 29.564789 ], [ 116.716657, 29.590813 ], [ 116.651983, 29.637118 ], [ 116.680317, 29.681323 ], [ 116.704954, 29.688602 ], [ 116.706802, 29.6964 ], [ 116.70557, 29.69692 ], [ 116.698795, 29.707836 ], [ 116.673541, 29.709916 ], [ 116.762237, 29.802396 ], [ 116.780715, 29.792529 ], [ 116.882961, 29.893753 ], [ 116.900207, 29.949253 ], [ 116.868794, 29.980361 ], [ 116.83307, 29.95755 ], [ 116.830606, 30.004723 ], [ 116.802889, 29.99643 ], [ 116.783794, 30.030632 ], [ 116.747454, 30.057053 ], [ 116.720353, 30.053945 ], [ 116.666766, 30.076734 ], [ 116.620571, 30.073109 ], [ 116.585462, 30.045657 ], [ 116.552201, 29.909836 ], [ 116.525716, 29.897385 ], [ 116.467818, 29.896347 ], [ 116.342782, 29.835626 ], [ 116.280572, 29.788893 ], [ 116.250391, 29.785777 ], [ 116.227601, 29.816936 ], [ 116.172783, 29.828358 ], [ 116.13521, 29.819532 ], [ 116.128435, 29.897904 ], [ 116.073616, 29.969993 ], [ 116.091479, 30.036331 ], [ 116.078544, 30.062233 ], [ 116.088399, 30.110391 ], [ 116.055754, 30.180774 ], [ 116.065609, 30.204569 ], [ 115.997856, 30.252657 ], [ 115.985537, 30.290905 ], [ 115.903001, 30.31364 ], [ 115.91532, 30.337919 ], [ 115.885139, 30.379747 ], [ 115.921479, 30.416397 ], [ 115.894994, 30.452517 ], [ 115.910393, 30.519046 ], [ 115.887603, 30.542758 ], [ 115.876516, 30.582438 ], [ 115.848799, 30.602014 ], [ 115.819234, 30.597893 ], [ 115.81369, 30.637035 ], [ 115.762567, 30.685426 ], [ 115.782893, 30.751795 ], [ 115.851262, 30.756938 ], [ 115.863581, 30.815549 ], [ 115.848799, 30.828397 ], [ 115.865429, 30.864364 ], [ 115.932566, 30.889532 ], [ 115.976298, 30.931636 ], [ 116.03974, 30.957813 ], [ 116.071769, 30.956787 ], [ 116.058834, 31.012711 ], [ 116.015102, 31.011685 ], [ 116.006479, 31.034764 ], [ 115.938726, 31.04707 ], [ 115.939958, 31.071678 ], [ 115.887603, 31.10909 ], [ 115.867277, 31.147512 ], [ 115.837712, 31.127022 ], [ 115.797676, 31.128047 ], [ 115.778582, 31.112164 ], [ 115.700973, 31.201276 ], [ 115.655394, 31.211002 ], [ 115.603655, 31.17363 ], [ 115.585793, 31.143926 ], [ 115.540213, 31.194621 ], [ 115.539597, 31.231985 ], [ 115.507568, 31.267799 ], [ 115.473076, 31.265242 ], [ 115.443511, 31.344498 ], [ 115.40717, 31.337854 ], [ 115.372062, 31.349098 ], [ 115.393004, 31.389977 ], [ 115.373909, 31.405813 ], [ 115.389924, 31.450241 ], [ 115.371446, 31.495668 ], [ 115.415793, 31.525771 ], [ 115.439815, 31.588496 ], [ 115.485394, 31.608885 ], [ 115.476771, 31.643028 ], [ 115.495249, 31.673083 ], [ 115.534054, 31.698545 ], [ 115.553764, 31.69549 ], [ 115.676336, 31.778453 ], [ 115.731154, 31.76726 ], [ 115.767495, 31.78761 ], [ 115.808147, 31.770313 ], [ 115.808147, 31.770313 ], [ 115.851878, 31.786593 ], [ 115.886371, 31.776418 ], [ 115.914704, 31.814567 ], [ 115.893762, 31.832365 ], [ 115.894994, 31.8649 ], [ 115.920248, 31.920285 ], [ 115.909161, 31.94314 ], [ 115.928871, 32.003046 ], [ 115.922095, 32.049725 ], [ 115.941805, 32.166318 ], [ 115.912856, 32.227596 ], [ 115.899306, 32.390971 ], [ 115.865429, 32.458662 ], [ 115.883291, 32.487946 ], [ 115.845719, 32.501575 ], [ 115.8759, 32.542448 ], [ 115.910393, 32.567165 ], [ 115.891298, 32.576243 ], [ 115.861117, 32.537403 ], [ 115.789052, 32.468761 ], [ 115.771806, 32.505108 ], [ 115.742241, 32.476335 ], [ 115.704669, 32.495013 ], [ 115.667712, 32.409667 ], [ 115.657857, 32.428864 ], [ 115.626445, 32.40512 ], [ 115.604271, 32.425833 ], [ 115.57101, 32.419266 ], [ 115.522967, 32.441997 ], [ 115.509416, 32.466741 ], [ 115.510648, 32.467751 ], [ 115.510648, 32.468256 ], [ 115.510648, 32.468761 ], [ 115.5088, 32.468761 ], [ 115.497713, 32.492489 ], [ 115.409018, 32.549007 ], [ 115.411482, 32.575235 ], [ 115.304924, 32.553042 ], [ 115.30554, 32.583303 ], [ 115.267352, 32.578261 ], [ 115.24333, 32.593388 ], [ 115.20083, 32.591876 ], [ 115.182968, 32.666973 ], [ 115.179273, 32.726402 ], [ 115.189744, 32.770695 ], [ 115.211301, 32.785791 ], [ 115.189744, 32.812452 ], [ 115.197135, 32.856201 ], [ 115.155867, 32.864747 ], [ 115.139237, 32.897917 ], [ 115.029599, 32.906962 ], [ 115.035143, 32.932582 ], [ 115.009273, 32.940117 ], [ 114.943368, 32.935094 ], [ 114.916266, 32.971251 ], [ 114.883006, 32.990328 ], [ 114.891629, 33.020441 ], [ 114.925506, 33.016928 ], [ 114.913187, 33.083143 ], [ 114.897172, 33.086653 ], [ 114.902716, 33.129764 ], [ 114.932897, 33.153817 ], [ 114.966158, 33.147304 ], [ 114.990795, 33.102195 ], [ 115.041302, 33.086653 ], [ 115.168186, 33.088658 ], [ 115.194671, 33.120743 ], [ 115.245178, 33.135778 ], [ 115.289526, 33.131769 ], [ 115.303692, 33.149809 ], [ 115.300613, 33.204407 ], [ 115.340033, 33.260973 ], [ 115.335105, 33.297997 ], [ 115.361591, 33.298497 ], [ 115.365286, 33.336005 ], [ 115.341881, 33.370997 ], [ 115.313547, 33.376994 ], [ 115.328946, 33.403477 ], [ 115.316627, 33.44893 ], [ 115.345576, 33.449928 ], [ 115.345576, 33.502842 ], [ 115.366518, 33.5233 ], [ 115.394851, 33.506335 ], [ 115.422569, 33.557219 ], [ 115.463837, 33.567193 ], [ 115.561771, 33.563703 ], [ 115.564851, 33.576169 ], [ 115.639995, 33.585143 ], [ 115.601191, 33.658898 ], [ 115.601807, 33.718653 ], [ 115.563003, 33.772895 ], [ 115.576553, 33.787817 ], [ 115.614126, 33.775879 ], [ 115.631988, 33.869846 ], [ 115.547604, 33.874815 ], [ 115.577785, 33.950307 ], [ 115.579017, 33.974133 ], [ 115.60735, 34.030196 ], [ 115.642459, 34.03218 ], [ 115.658473, 34.061437 ], [ 115.705901, 34.059949 ], [ 115.736082, 34.076805 ], [ 115.809378, 34.062428 ], [ 115.846335, 34.028708 ], [ 115.852494, 34.003906 ], [ 115.877132, 34.002913 ], [ 115.876516, 34.028708 ], [ 115.904233, 34.009859 ], [ 115.95782, 34.007875 ], [ 116.00032, 33.965199 ], [ 115.982457, 33.917039 ], [ 116.05945, 33.860902 ], [ 116.055754, 33.804727 ], [ 116.074232, 33.781351 ], [ 116.100102, 33.782843 ], [ 116.132747, 33.751501 ], [ 116.155536, 33.709693 ], [ 116.2005, 33.72612 ], [ 116.263326, 33.730101 ], [ 116.316912, 33.771402 ], [ 116.393905, 33.782843 ], [ 116.408071, 33.805721 ], [ 116.437021, 33.801246 ], [ 116.437637, 33.846489 ], [ 116.486296, 33.869846 ], [ 116.558361, 33.881274 ], [ 116.566984, 33.9081 ], [ 116.631042, 33.887733 ], [ 116.64336, 33.896675 ], [ 116.641512, 33.978103 ], [ 116.599629, 34.014324 ] ] ], [ [ [ 118.868133, 31.520669 ], [ 118.885995, 31.519139 ], [ 118.883532, 31.500261 ], [ 118.857046, 31.506384 ], [ 118.868133, 31.520669 ] ] ], [ [ [ 116.698795, 29.707836 ], [ 116.70557, 29.69692 ], [ 116.706802, 29.6964 ], [ 116.704954, 29.688602 ], [ 116.680317, 29.681323 ], [ 116.653831, 29.694841 ], [ 116.673541, 29.709916 ], [ 116.698795, 29.707836 ] ] ], [ [ [ 115.5088, 32.468761 ], [ 115.510648, 32.468761 ], [ 115.510648, 32.468256 ], [ 115.510648, 32.467751 ], [ 115.509416, 32.466741 ], [ 115.5088, 32.468761 ] ] ] ] } }, +{ "type": "Feature", "properties": { "adcode": "350000", "name": "福建省", "center": [ 119.306239, 26.075302 ], "centroid": [ 118.006365, 26.069889 ], "childrenNum": 9, "level": "province", "parent": { "adcode": 100000 }, "subFeatureIndex": 12, "acroutes": [ 100000 ] }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 119.004872, 24.970009 ], [ 119.007335, 24.963499 ], [ 119.032589, 24.961871 ], [ 119.032589, 24.961328 ], [ 119.014111, 24.941252 ], [ 118.945741, 24.954275 ], [ 118.91864, 24.932569 ], [ 118.932807, 24.906518 ], [ 118.987009, 24.898375 ], [ 118.988857, 24.878831 ], [ 118.933423, 24.870687 ], [ 118.864437, 24.887518 ], [ 118.834256, 24.854397 ], [ 118.807771, 24.870687 ], [ 118.748641, 24.84245 ], [ 118.69875, 24.848967 ], [ 118.702445, 24.865258 ], [ 118.647627, 24.843536 ], [ 118.650707, 24.808774 ], [ 118.786213, 24.77672 ], [ 118.778822, 24.743569 ], [ 118.703677, 24.665278 ], [ 118.670417, 24.679962 ], [ 118.652554, 24.653857 ], [ 118.661178, 24.622306 ], [ 118.687047, 24.63373 ], [ 118.680272, 24.58204 ], [ 118.614366, 24.521617 ], [ 118.558316, 24.51236 ], [ 118.557084, 24.572788 ], [ 118.512736, 24.60816 ], [ 118.444367, 24.614689 ], [ 118.363679, 24.567889 ], [ 118.375382, 24.536317 ], [ 118.242955, 24.51236 ], [ 118.169042, 24.559725 ], [ 118.150564, 24.583673 ], [ 118.121615, 24.570067 ], [ 118.084042, 24.528695 ], [ 118.048934, 24.418122 ], [ 118.088354, 24.408858 ], [ 118.081579, 24.35653 ], [ 118.112376, 24.357075 ], [ 118.158571, 24.269814 ], [ 118.115455, 24.229435 ], [ 118.074803, 24.225615 ], [ 118.019369, 24.197232 ], [ 118.000275, 24.152462 ], [ 117.936217, 24.100029 ], [ 117.927594, 24.039922 ], [ 117.910347, 24.012045 ], [ 117.864768, 24.004938 ], [ 117.807486, 23.947521 ], [ 117.792703, 23.906494 ], [ 117.762522, 23.886796 ], [ 117.691073, 23.888985 ], [ 117.671979, 23.878041 ], [ 117.651653, 23.815093 ], [ 117.660276, 23.789357 ], [ 117.601762, 23.70171 ], [ 117.54448, 23.715956 ], [ 117.501364, 23.70445 ], [ 117.493357, 23.642514 ], [ 117.454552, 23.628259 ], [ 117.463791, 23.584937 ], [ 117.387415, 23.555317 ], [ 117.302415, 23.550379 ], [ 117.291328, 23.571225 ], [ 117.192778, 23.5619 ], [ 117.192778, 23.629356 ], [ 117.147199, 23.654027 ], [ 117.123793, 23.647448 ], [ 117.055424, 23.694038 ], [ 117.048032, 23.758687 ], [ 117.019083, 23.801952 ], [ 117.012308, 23.855054 ], [ 116.981511, 23.855602 ], [ 116.955642, 23.922359 ], [ 116.976583, 23.931659 ], [ 116.981511, 23.999471 ], [ 116.953178, 24.008218 ], [ 116.930388, 24.064514 ], [ 116.9347, 24.126794 ], [ 116.998757, 24.179217 ], [ 116.956257, 24.216883 ], [ 116.933468, 24.220157 ], [ 116.938395, 24.28127 ], [ 116.914374, 24.287817 ], [ 116.919301, 24.321087 ], [ 116.895895, 24.350533 ], [ 116.903903, 24.369614 ], [ 116.839229, 24.442097 ], [ 116.860787, 24.460075 ], [ 116.83307, 24.496568 ], [ 116.796729, 24.502014 ], [ 116.759157, 24.545572 ], [ 116.761005, 24.583128 ], [ 116.815207, 24.654944 ], [ 116.777635, 24.679418 ], [ 116.667382, 24.658752 ], [ 116.623034, 24.64189 ], [ 116.600861, 24.654401 ], [ 116.570679, 24.621762 ], [ 116.530027, 24.604895 ], [ 116.506622, 24.621218 ], [ 116.517709, 24.652225 ], [ 116.485064, 24.720196 ], [ 116.44626, 24.714216 ], [ 116.416079, 24.744113 ], [ 116.419158, 24.767482 ], [ 116.375427, 24.803885 ], [ 116.381586, 24.82507 ], [ 116.417927, 24.840821 ], [ 116.395137, 24.877746 ], [ 116.363724, 24.87123 ], [ 116.345862, 24.828872 ], [ 116.297202, 24.801712 ], [ 116.244232, 24.793563 ], [ 116.251007, 24.82507 ], [ 116.221442, 24.829959 ], [ 116.191877, 24.877203 ], [ 116.153073, 24.846795 ], [ 116.068073, 24.850053 ], [ 116.015102, 24.905975 ], [ 115.985537, 24.899461 ], [ 115.907929, 24.923343 ], [ 115.89253, 24.936911 ], [ 115.870356, 24.959701 ], [ 115.925175, 24.960786 ], [ 115.873436, 25.019911 ], [ 115.928255, 25.050276 ], [ 115.908545, 25.084428 ], [ 115.880212, 25.092016 ], [ 115.888219, 25.128866 ], [ 115.860501, 25.165704 ], [ 115.855574, 25.20957 ], [ 115.930719, 25.236099 ], [ 115.949813, 25.292386 ], [ 115.987385, 25.290221 ], [ 116.008327, 25.319437 ], [ 115.992928, 25.374063 ], [ 116.023109, 25.435691 ], [ 116.005247, 25.490264 ], [ 116.03666, 25.514571 ], [ 116.040356, 25.548052 ], [ 116.063145, 25.56317 ], [ 116.041588, 25.62416 ], [ 116.068689, 25.646282 ], [ 116.067457, 25.703995 ], [ 116.106877, 25.701299 ], [ 116.129667, 25.758985 ], [ 116.18079, 25.778926 ], [ 116.131515, 25.824185 ], [ 116.132131, 25.860273 ], [ 116.17771, 25.894195 ], [ 116.225138, 25.908731 ], [ 116.258398, 25.902809 ], [ 116.303362, 25.924341 ], [ 116.326152, 25.956631 ], [ 116.369883, 25.963088 ], [ 116.360028, 25.991601 ], [ 116.384666, 26.030864 ], [ 116.489375, 26.113649 ], [ 116.476441, 26.172745 ], [ 116.435789, 26.159854 ], [ 116.392057, 26.171133 ], [ 116.400064, 26.202819 ], [ 116.385282, 26.238253 ], [ 116.412999, 26.297822 ], [ 116.437021, 26.308016 ], [ 116.459194, 26.345026 ], [ 116.499846, 26.361651 ], [ 116.519557, 26.410437 ], [ 116.553433, 26.400253 ], [ 116.553433, 26.365404 ], [ 116.601476, 26.372911 ], [ 116.608252, 26.429732 ], [ 116.638433, 26.477418 ], [ 116.610716, 26.476882 ], [ 116.597165, 26.512768 ], [ 116.539267, 26.559349 ], [ 116.553433, 26.575942 ], [ 116.566368, 26.650315 ], [ 116.520172, 26.684543 ], [ 116.515245, 26.720898 ], [ 116.557745, 26.773806 ], [ 116.543578, 26.803723 ], [ 116.548506, 26.84004 ], [ 116.602092, 26.888623 ], [ 116.632889, 26.933984 ], [ 116.679085, 26.978259 ], [ 116.817671, 27.018252 ], [ 116.851548, 27.009188 ], [ 116.910062, 27.034779 ], [ 116.936547, 27.019319 ], [ 116.967344, 27.061962 ], [ 117.05296, 27.100327 ], [ 117.044953, 27.146667 ], [ 117.149662, 27.241419 ], [ 117.171836, 27.29036 ], [ 117.136728, 27.303123 ], [ 117.140423, 27.322798 ], [ 117.104699, 27.330773 ], [ 117.107163, 27.393491 ], [ 117.133032, 27.42218 ], [ 117.110242, 27.458828 ], [ 117.103467, 27.533149 ], [ 117.076982, 27.566046 ], [ 117.054808, 27.5427 ], [ 117.01662, 27.563393 ], [ 117.024627, 27.592569 ], [ 117.003685, 27.625449 ], [ 117.040641, 27.669979 ], [ 117.065279, 27.665739 ], [ 117.094228, 27.627569 ], [ 117.11209, 27.645596 ], [ 117.096076, 27.667329 ], [ 117.114554, 27.692238 ], [ 117.174916, 27.677399 ], [ 117.204481, 27.683759 ], [ 117.205097, 27.714492 ], [ 117.245133, 27.71926 ], [ 117.296256, 27.764282 ], [ 117.303031, 27.833103 ], [ 117.276546, 27.847921 ], [ 117.280242, 27.871201 ], [ 117.334444, 27.8876 ], [ 117.341836, 27.855858 ], [ 117.366473, 27.88231 ], [ 117.407741, 27.893948 ], [ 117.453936, 27.939955 ], [ 117.477958, 27.930966 ], [ 117.52169, 27.982243 ], [ 117.556182, 27.966387 ], [ 117.609769, 27.863265 ], [ 117.649805, 27.851625 ], [ 117.68245, 27.823577 ], [ 117.704624, 27.834162 ], [ 117.740348, 27.800286 ], [ 117.788392, 27.855858 ], [ 117.78716, 27.896063 ], [ 117.856145, 27.94577 ], [ 117.910963, 27.949471 ], [ 117.942992, 27.974315 ], [ 117.965166, 27.962687 ], [ 117.999043, 27.991227 ], [ 118.096977, 27.970615 ], [ 118.094513, 28.003909 ], [ 118.129006, 28.017118 ], [ 118.120999, 28.041946 ], [ 118.153644, 28.062016 ], [ 118.199839, 28.049869 ], [ 118.242339, 28.075746 ], [ 118.356288, 28.091586 ], [ 118.361215, 28.155978 ], [ 118.375382, 28.186577 ], [ 118.339041, 28.193962 ], [ 118.314404, 28.221913 ], [ 118.424041, 28.291497 ], [ 118.433896, 28.288335 ], [ 118.444367, 28.253548 ], [ 118.490562, 28.238259 ], [ 118.493026, 28.262509 ], [ 118.588497, 28.282538 ], [ 118.595272, 28.258292 ], [ 118.651322, 28.277267 ], [ 118.674728, 28.27147 ], [ 118.699366, 28.309939 ], [ 118.719692, 28.312047 ], [ 118.756032, 28.252493 ], [ 118.802228, 28.240368 ], [ 118.804075, 28.207675 ], [ 118.771431, 28.188687 ], [ 118.805923, 28.154923 ], [ 118.802228, 28.117453 ], [ 118.767735, 28.10584 ], [ 118.719076, 28.063601 ], [ 118.733858, 28.027684 ], [ 118.730163, 27.970615 ], [ 118.753568, 27.947885 ], [ 118.818242, 27.916689 ], [ 118.829329, 27.847921 ], [ 118.873677, 27.733563 ], [ 118.879836, 27.667859 ], [ 118.913713, 27.619616 ], [ 118.909401, 27.568168 ], [ 118.869365, 27.540047 ], [ 118.907553, 27.460952 ], [ 118.955597, 27.4498 ], [ 118.986393, 27.47582 ], [ 118.983314, 27.498649 ], [ 119.020886, 27.498118 ], [ 119.03998, 27.478475 ], [ 119.092335, 27.466262 ], [ 119.129907, 27.475289 ], [ 119.121284, 27.438115 ], [ 119.14777, 27.424836 ], [ 119.224146, 27.416868 ], [ 119.26911, 27.42218 ], [ 119.285124, 27.457766 ], [ 119.334399, 27.480067 ], [ 119.360269, 27.524657 ], [ 119.416935, 27.539517 ], [ 119.438493, 27.508734 ], [ 119.466826, 27.526249 ], [ 119.501935, 27.610601 ], [ 119.501319, 27.649837 ], [ 119.541971, 27.666799 ], [ 119.606028, 27.674749 ], [ 119.644217, 27.663619 ], [ 119.626354, 27.620676 ], [ 119.630666, 27.582491 ], [ 119.675014, 27.574534 ], [ 119.659615, 27.540578 ], [ 119.690412, 27.537394 ], [ 119.70889, 27.514042 ], [ 119.703347, 27.446613 ], [ 119.685485, 27.438646 ], [ 119.711354, 27.403054 ], [ 119.750774, 27.373829 ], [ 119.739687, 27.362668 ], [ 119.782187, 27.330241 ], [ 119.768636, 27.307909 ], [ 119.843165, 27.300464 ], [ 119.938636, 27.329709 ], [ 119.960194, 27.365857 ], [ 120.008237, 27.375423 ], [ 120.026099, 27.344063 ], [ 120.052584, 27.338747 ], [ 120.096316, 27.390302 ], [ 120.136968, 27.402523 ], [ 120.134504, 27.420055 ], [ 120.221352, 27.420055 ], [ 120.26262, 27.432804 ], [ 120.273091, 27.38924 ], [ 120.340844, 27.399867 ], [ 120.343924, 27.363199 ], [ 120.430155, 27.258976 ], [ 120.401822, 27.250996 ], [ 120.404286, 27.204166 ], [ 120.461568, 27.142407 ], [ 120.403054, 27.10086 ], [ 120.391967, 27.081146 ], [ 120.282946, 27.089671 ], [ 120.29588, 27.035845 ], [ 120.275554, 27.027315 ], [ 120.279866, 26.987326 ], [ 120.25954, 26.982526 ], [ 120.232439, 26.907303 ], [ 120.1807, 26.920644 ], [ 120.117258, 26.916909 ], [ 120.103707, 26.873143 ], [ 120.037802, 26.86033 ], [ 120.042729, 26.828292 ], [ 120.082765, 26.822417 ], [ 120.103707, 26.794642 ], [ 120.136352, 26.797847 ], [ 120.106787, 26.752966 ], [ 120.151135, 26.750829 ], [ 120.162222, 26.717691 ], [ 120.110483, 26.692563 ], [ 120.1382, 26.638012 ], [ 120.093852, 26.613938 ], [ 120.063671, 26.627848 ], [ 120.007621, 26.595744 ], [ 119.967585, 26.597885 ], [ 119.93802, 26.576478 ], [ 119.947875, 26.56042 ], [ 119.867187, 26.509019 ], [ 119.828383, 26.524013 ], [ 119.851788, 26.595209 ], [ 119.901679, 26.624638 ], [ 119.949107, 26.624638 ], [ 119.972512, 26.654594 ], [ 119.969433, 26.686681 ], [ 119.99407, 26.720363 ], [ 120.061824, 26.768997 ], [ 120.052584, 26.786629 ], [ 119.942947, 26.784492 ], [ 119.938636, 26.747088 ], [ 119.899216, 26.693098 ], [ 119.908455, 26.661547 ], [ 119.873962, 26.642827 ], [ 119.864107, 26.671174 ], [ 119.833926, 26.690959 ], [ 119.711354, 26.686681 ], [ 119.664543, 26.726243 ], [ 119.637441, 26.703256 ], [ 119.619579, 26.649246 ], [ 119.577695, 26.622498 ], [ 119.605412, 26.595744 ], [ 119.670086, 26.618218 ], [ 119.740303, 26.610727 ], [ 119.788346, 26.583435 ], [ 119.83639, 26.454381 ], [ 119.835774, 26.434019 ], [ 119.893672, 26.355752 ], [ 119.946027, 26.374519 ], [ 119.95465, 26.352534 ], [ 119.909687, 26.310161 ], [ 119.862875, 26.307479 ], [ 119.845013, 26.323036 ], [ 119.806825, 26.307479 ], [ 119.802513, 26.268846 ], [ 119.7711, 26.285481 ], [ 119.676246, 26.262943 ], [ 119.664543, 26.202282 ], [ 119.604181, 26.168985 ], [ 119.618963, 26.11956 ], [ 119.654688, 26.090002 ], [ 119.668854, 26.026024 ], [ 119.700267, 26.032477 ], [ 119.723673, 26.011503 ], [ 119.69534, 25.904424 ], [ 119.638057, 25.889888 ], [ 119.628202, 25.87212 ], [ 119.626354, 25.723406 ], [ 119.602949, 25.714779 ], [ 119.602949, 25.68512 ], [ 119.543819, 25.684581 ], [ 119.472986, 25.662466 ], [ 119.478529, 25.631715 ], [ 119.541355, 25.6247 ], [ 119.534579, 25.585303 ], [ 119.586934, 25.59232 ], [ 119.616499, 25.556691 ], [ 119.611572, 25.519972 ], [ 119.634362, 25.475137 ], [ 119.675014, 25.475137 ], [ 119.680557, 25.497827 ], [ 119.715666, 25.51187 ], [ 119.716898, 25.551292 ], [ 119.683637, 25.592859 ], [ 119.700267, 25.616606 ], [ 119.784651, 25.667321 ], [ 119.790194, 25.614447 ], [ 119.843165, 25.597717 ], [ 119.831462, 25.579905 ], [ 119.883817, 25.546432 ], [ 119.861027, 25.531313 ], [ 119.81668, 25.532393 ], [ 119.811136, 25.507009 ], [ 119.83331, 25.48162 ], [ 119.864107, 25.48 ], [ 119.866571, 25.455145 ], [ 119.804977, 25.457847 ], [ 119.764325, 25.433529 ], [ 119.773564, 25.395691 ], [ 119.688564, 25.441095 ], [ 119.682405, 25.445959 ], [ 119.675014, 25.468113 ], [ 119.622659, 25.434069 ], [ 119.670086, 25.435691 ], [ 119.656535, 25.396772 ], [ 119.665159, 25.3719 ], [ 119.649144, 25.342697 ], [ 119.597405, 25.334584 ], [ 119.582623, 25.374063 ], [ 119.59063, 25.398394 ], [ 119.577695, 25.445959 ], [ 119.555521, 25.429205 ], [ 119.578927, 25.400556 ], [ 119.548746, 25.365952 ], [ 119.486536, 25.369737 ], [ 119.507478, 25.396231 ], [ 119.48592, 25.418935 ], [ 119.491464, 25.443257 ], [ 119.463131, 25.448661 ], [ 119.438493, 25.412449 ], [ 119.45266, 25.493505 ], [ 119.400921, 25.493505 ], [ 119.359037, 25.521592 ], [ 119.343638, 25.472436 ], [ 119.353493, 25.411908 ], [ 119.288204, 25.410827 ], [ 119.26295, 25.428124 ], [ 119.275269, 25.476758 ], [ 119.256175, 25.488643 ], [ 119.219834, 25.468654 ], [ 119.232153, 25.442176 ], [ 119.191501, 25.424341 ], [ 119.151465, 25.426503 ], [ 119.14469, 25.388121 ], [ 119.218603, 25.368115 ], [ 119.240776, 25.316733 ], [ 119.247552, 25.333502 ], [ 119.299291, 25.328634 ], [ 119.333167, 25.287516 ], [ 119.380595, 25.250173 ], [ 119.331935, 25.230685 ], [ 119.294979, 25.237182 ], [ 119.314689, 25.190076 ], [ 119.26911, 25.159746 ], [ 119.231537, 25.188993 ], [ 119.190269, 25.175995 ], [ 119.131755, 25.223106 ], [ 119.108349, 25.193867 ], [ 119.137299, 25.15487 ], [ 119.165632, 25.145661 ], [ 119.146538, 25.056782 ], [ 119.119436, 25.012861 ], [ 119.107118, 25.075214 ], [ 119.134219, 25.106107 ], [ 119.075705, 25.099604 ], [ 119.06585, 25.102855 ], [ 119.028893, 25.139702 ], [ 119.032589, 25.17437 ], [ 119.054147, 25.168412 ], [ 119.074473, 25.211195 ], [ 119.055379, 25.219316 ], [ 118.990089, 25.20199 ], [ 118.975307, 25.237723 ], [ 118.996864, 25.266411 ], [ 118.956212, 25.272905 ], [ 118.91556, 25.256668 ], [ 118.940198, 25.21715 ], [ 118.942046, 25.211195 ], [ 118.985162, 25.19495 ], [ 118.985162, 25.168954 ], [ 118.951901, 25.15162 ], [ 118.974691, 25.115319 ], [ 118.892155, 25.092558 ], [ 118.945126, 25.028588 ], [ 118.974691, 25.024792 ], [ 119.016575, 25.058409 ], [ 119.023966, 25.04377 ], [ 118.989473, 24.973807 ], [ 119.004872, 24.970009 ] ] ], [ [ [ 118.412338, 24.514538 ], [ 118.451758, 24.506915 ], [ 118.477012, 24.437738 ], [ 118.457918, 24.412128 ], [ 118.405563, 24.427931 ], [ 118.353208, 24.415398 ], [ 118.329802, 24.382152 ], [ 118.282375, 24.413218 ], [ 118.31194, 24.424661 ], [ 118.298389, 24.477506 ], [ 118.318715, 24.486765 ], [ 118.374766, 24.458986 ], [ 118.412338, 24.514538 ] ] ], [ [ [ 119.471138, 25.197116 ], [ 119.444036, 25.20199 ], [ 119.44342, 25.238806 ], [ 119.473601, 25.259916 ], [ 119.501319, 25.21715 ], [ 119.540739, 25.20199 ], [ 119.566608, 25.210112 ], [ 119.549362, 25.161912 ], [ 119.52534, 25.157579 ], [ 119.507478, 25.183036 ], [ 119.471138, 25.197116 ] ] ], [ [ [ 119.580159, 25.627398 ], [ 119.580775, 25.650059 ], [ 119.611572, 25.669479 ], [ 119.580159, 25.627398 ] ] ], [ [ [ 119.976824, 26.191005 ], [ 119.970665, 26.217852 ], [ 119.998998, 26.235569 ], [ 120.016244, 26.217316 ], [ 119.976824, 26.191005 ] ] ], [ [ [ 118.230636, 24.401228 ], [ 118.233716, 24.445911 ], [ 118.273752, 24.441007 ], [ 118.230636, 24.401228 ] ] ], [ [ [ 119.906607, 26.68989 ], [ 119.950954, 26.692563 ], [ 119.926933, 26.664756 ], [ 119.906607, 26.68989 ] ] ], [ [ [ 118.204151, 24.504737 ], [ 118.19368, 24.463344 ], [ 118.143173, 24.420847 ], [ 118.084042, 24.435559 ], [ 118.068644, 24.463344 ], [ 118.093281, 24.540672 ], [ 118.14502, 24.560814 ], [ 118.191832, 24.536861 ], [ 118.204151, 24.504737 ] ] ], [ [ [ 119.929397, 26.134067 ], [ 119.919542, 26.172208 ], [ 119.960194, 26.146961 ], [ 119.929397, 26.134067 ] ] ], [ [ [ 119.642985, 26.129231 ], [ 119.606028, 26.15287 ], [ 119.62697, 26.173282 ], [ 119.665159, 26.155556 ], [ 119.642985, 26.129231 ] ] ], [ [ [ 120.034106, 26.488667 ], [ 120.035954, 26.515981 ], [ 120.071679, 26.521336 ], [ 120.066751, 26.498308 ], [ 120.034106, 26.488667 ] ] ], [ [ [ 119.662079, 25.646822 ], [ 119.716898, 25.664624 ], [ 119.718745, 25.634952 ], [ 119.673782, 25.632794 ], [ 119.662079, 25.646822 ] ] ], [ [ [ 119.760629, 26.613402 ], [ 119.796354, 26.630523 ], [ 119.818527, 26.616613 ], [ 119.776644, 26.600025 ], [ 119.760629, 26.613402 ] ] ], [ [ [ 120.135736, 26.550784 ], [ 120.117874, 26.568984 ], [ 120.153598, 26.604841 ], [ 120.167149, 26.571661 ], [ 120.135736, 26.550784 ] ] ], [ [ [ 120.360554, 26.916909 ], [ 120.319286, 26.944654 ], [ 120.327909, 26.963858 ], [ 120.363018, 26.967592 ], [ 120.394431, 26.933984 ], [ 120.360554, 26.916909 ] ] ], [ [ [ 119.668238, 26.628383 ], [ 119.651608, 26.657269 ], [ 119.673782, 26.680799 ], [ 119.712586, 26.6685 ], [ 119.748926, 26.681334 ], [ 119.758781, 26.659408 ], [ 119.720593, 26.635873 ], [ 119.668238, 26.628383 ] ] ] ] } }, +{ "type": "Feature", "properties": { "adcode": "360000", "name": "江西省", "center": [ 115.892151, 28.676493 ], "centroid": [ 115.732975, 27.636112 ], "childrenNum": 11, "level": "province", "parent": { "adcode": 100000 }, "subFeatureIndex": 13, "acroutes": [ 100000 ] }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 118.193064, 29.395472 ], [ 118.205382, 29.343839 ], [ 118.166578, 29.314099 ], [ 118.178281, 29.297921 ], [ 118.138861, 29.283828 ], [ 118.077883, 29.290614 ], [ 118.073571, 29.216993 ], [ 118.042159, 29.210202 ], [ 118.027992, 29.167882 ], [ 118.045238, 29.149068 ], [ 118.037847, 29.102017 ], [ 118.076035, 29.074822 ], [ 118.066796, 29.053898 ], [ 118.097593, 28.998952 ], [ 118.115455, 29.009944 ], [ 118.115455, 29.009944 ], [ 118.133933, 28.983771 ], [ 118.165346, 28.986912 ], [ 118.227556, 28.942406 ], [ 118.195527, 28.904167 ], [ 118.270056, 28.918836 ], [ 118.300237, 28.826075 ], [ 118.364295, 28.813491 ], [ 118.403099, 28.702791 ], [ 118.428352, 28.681267 ], [ 118.428352, 28.617193 ], [ 118.428352, 28.617193 ], [ 118.412338, 28.55676 ], [ 118.4302, 28.515225 ], [ 118.414802, 28.497344 ], [ 118.474548, 28.478934 ], [ 118.456686, 28.424738 ], [ 118.432048, 28.402104 ], [ 118.455454, 28.384204 ], [ 118.480091, 28.327325 ], [ 118.433896, 28.288335 ], [ 118.424041, 28.291497 ], [ 118.314404, 28.221913 ], [ 118.339041, 28.193962 ], [ 118.375382, 28.186577 ], [ 118.361215, 28.155978 ], [ 118.356288, 28.091586 ], [ 118.242339, 28.075746 ], [ 118.199839, 28.049869 ], [ 118.153644, 28.062016 ], [ 118.120999, 28.041946 ], [ 118.129006, 28.017118 ], [ 118.094513, 28.003909 ], [ 118.096977, 27.970615 ], [ 117.999043, 27.991227 ], [ 117.965166, 27.962687 ], [ 117.942992, 27.974315 ], [ 117.910963, 27.949471 ], [ 117.856145, 27.94577 ], [ 117.78716, 27.896063 ], [ 117.788392, 27.855858 ], [ 117.740348, 27.800286 ], [ 117.704624, 27.834162 ], [ 117.68245, 27.823577 ], [ 117.649805, 27.851625 ], [ 117.609769, 27.863265 ], [ 117.556182, 27.966387 ], [ 117.52169, 27.982243 ], [ 117.477958, 27.930966 ], [ 117.453936, 27.939955 ], [ 117.407741, 27.893948 ], [ 117.366473, 27.88231 ], [ 117.341836, 27.855858 ], [ 117.334444, 27.8876 ], [ 117.280242, 27.871201 ], [ 117.276546, 27.847921 ], [ 117.303031, 27.833103 ], [ 117.296256, 27.764282 ], [ 117.245133, 27.71926 ], [ 117.205097, 27.714492 ], [ 117.204481, 27.683759 ], [ 117.174916, 27.677399 ], [ 117.114554, 27.692238 ], [ 117.096076, 27.667329 ], [ 117.11209, 27.645596 ], [ 117.094228, 27.627569 ], [ 117.065279, 27.665739 ], [ 117.040641, 27.669979 ], [ 117.003685, 27.625449 ], [ 117.024627, 27.592569 ], [ 117.01662, 27.563393 ], [ 117.054808, 27.5427 ], [ 117.076982, 27.566046 ], [ 117.103467, 27.533149 ], [ 117.110242, 27.458828 ], [ 117.133032, 27.42218 ], [ 117.107163, 27.393491 ], [ 117.104699, 27.330773 ], [ 117.140423, 27.322798 ], [ 117.136728, 27.303123 ], [ 117.171836, 27.29036 ], [ 117.149662, 27.241419 ], [ 117.044953, 27.146667 ], [ 117.05296, 27.100327 ], [ 116.967344, 27.061962 ], [ 116.936547, 27.019319 ], [ 116.910062, 27.034779 ], [ 116.851548, 27.009188 ], [ 116.817671, 27.018252 ], [ 116.679085, 26.978259 ], [ 116.632889, 26.933984 ], [ 116.602092, 26.888623 ], [ 116.548506, 26.84004 ], [ 116.543578, 26.803723 ], [ 116.557745, 26.773806 ], [ 116.515245, 26.720898 ], [ 116.520172, 26.684543 ], [ 116.566368, 26.650315 ], [ 116.553433, 26.575942 ], [ 116.539267, 26.559349 ], [ 116.597165, 26.512768 ], [ 116.610716, 26.476882 ], [ 116.638433, 26.477418 ], [ 116.608252, 26.429732 ], [ 116.601476, 26.372911 ], [ 116.553433, 26.365404 ], [ 116.553433, 26.400253 ], [ 116.519557, 26.410437 ], [ 116.499846, 26.361651 ], [ 116.459194, 26.345026 ], [ 116.437021, 26.308016 ], [ 116.412999, 26.297822 ], [ 116.385282, 26.238253 ], [ 116.400064, 26.202819 ], [ 116.392057, 26.171133 ], [ 116.435789, 26.159854 ], [ 116.476441, 26.172745 ], [ 116.489375, 26.113649 ], [ 116.384666, 26.030864 ], [ 116.360028, 25.991601 ], [ 116.369883, 25.963088 ], [ 116.326152, 25.956631 ], [ 116.303362, 25.924341 ], [ 116.258398, 25.902809 ], [ 116.225138, 25.908731 ], [ 116.17771, 25.894195 ], [ 116.132131, 25.860273 ], [ 116.131515, 25.824185 ], [ 116.18079, 25.778926 ], [ 116.129667, 25.758985 ], [ 116.106877, 25.701299 ], [ 116.067457, 25.703995 ], [ 116.068689, 25.646282 ], [ 116.041588, 25.62416 ], [ 116.063145, 25.56317 ], [ 116.040356, 25.548052 ], [ 116.03666, 25.514571 ], [ 116.005247, 25.490264 ], [ 116.023109, 25.435691 ], [ 115.992928, 25.374063 ], [ 116.008327, 25.319437 ], [ 115.987385, 25.290221 ], [ 115.949813, 25.292386 ], [ 115.930719, 25.236099 ], [ 115.855574, 25.20957 ], [ 115.860501, 25.165704 ], [ 115.888219, 25.128866 ], [ 115.880212, 25.092016 ], [ 115.908545, 25.084428 ], [ 115.928255, 25.050276 ], [ 115.873436, 25.019911 ], [ 115.925175, 24.960786 ], [ 115.870356, 24.959701 ], [ 115.89253, 24.936911 ], [ 115.885139, 24.898918 ], [ 115.907313, 24.879917 ], [ 115.861733, 24.863629 ], [ 115.863581, 24.891318 ], [ 115.824161, 24.909232 ], [ 115.807531, 24.862543 ], [ 115.790284, 24.856027 ], [ 115.764415, 24.791933 ], [ 115.776734, 24.774546 ], [ 115.756408, 24.749004 ], [ 115.769342, 24.708236 ], [ 115.801371, 24.705517 ], [ 115.780429, 24.663103 ], [ 115.797676, 24.628834 ], [ 115.840791, 24.584217 ], [ 115.843871, 24.562446 ], [ 115.785357, 24.567345 ], [ 115.752712, 24.546116 ], [ 115.68927, 24.545027 ], [ 115.671408, 24.604895 ], [ 115.605503, 24.62557 ], [ 115.569778, 24.622306 ], [ 115.555611, 24.683768 ], [ 115.522967, 24.702799 ], [ 115.476771, 24.762591 ], [ 115.412714, 24.79302 ], [ 115.372678, 24.774546 ], [ 115.358511, 24.735416 ], [ 115.306772, 24.758787 ], [ 115.269816, 24.749548 ], [ 115.258729, 24.728894 ], [ 115.1842, 24.711498 ], [ 115.104744, 24.667997 ], [ 115.083802, 24.699537 ], [ 115.057317, 24.703343 ], [ 115.024672, 24.669085 ], [ 115.00373, 24.679418 ], [ 114.940288, 24.650049 ], [ 114.909491, 24.661471 ], [ 114.893477, 24.582584 ], [ 114.868839, 24.562446 ], [ 114.846665, 24.602719 ], [ 114.827571, 24.588026 ], [ 114.781376, 24.613057 ], [ 114.729637, 24.608704 ], [ 114.73826, 24.565168 ], [ 114.704999, 24.525973 ], [ 114.664963, 24.583673 ], [ 114.627391, 24.576598 ], [ 114.589819, 24.537406 ], [ 114.534384, 24.559181 ], [ 114.429058, 24.48622 ], [ 114.403189, 24.497657 ], [ 114.391486, 24.563535 ], [ 114.363769, 24.582584 ], [ 114.300943, 24.578775 ], [ 114.289856, 24.619042 ], [ 114.258443, 24.641346 ], [ 114.19069, 24.656576 ], [ 114.169132, 24.689749 ], [ 114.27261, 24.700624 ], [ 114.281849, 24.724001 ], [ 114.336052, 24.749004 ], [ 114.342211, 24.807145 ], [ 114.378551, 24.861457 ], [ 114.403189, 24.877746 ], [ 114.395798, 24.951019 ], [ 114.454928, 24.977062 ], [ 114.45616, 24.99659 ], [ 114.506051, 24.999844 ], [ 114.532536, 25.022623 ], [ 114.561485, 25.077382 ], [ 114.604601, 25.083886 ], [ 114.640326, 25.074129 ], [ 114.664963, 25.10123 ], [ 114.735796, 25.121822 ], [ 114.73518, 25.155954 ], [ 114.685905, 25.173287 ], [ 114.693912, 25.213902 ], [ 114.73518, 25.225813 ], [ 114.743188, 25.274528 ], [ 114.714238, 25.315651 ], [ 114.63663, 25.324306 ], [ 114.599674, 25.385959 ], [ 114.541159, 25.416773 ], [ 114.477718, 25.37136 ], [ 114.438914, 25.376226 ], [ 114.43029, 25.343779 ], [ 114.382863, 25.317274 ], [ 114.31511, 25.33837 ], [ 114.2954, 25.299961 ], [ 114.260291, 25.291845 ], [ 114.204857, 25.29942 ], [ 114.190074, 25.316733 ], [ 114.115545, 25.302125 ], [ 114.083517, 25.275611 ], [ 114.055799, 25.277775 ], [ 114.039785, 25.250714 ], [ 114.017611, 25.273987 ], [ 114.029314, 25.328093 ], [ 114.050256, 25.36433 ], [ 113.983118, 25.415152 ], [ 114.003444, 25.442716 ], [ 113.94493, 25.441635 ], [ 113.962792, 25.528072 ], [ 113.986198, 25.529153 ], [ 113.983118, 25.599336 ], [ 113.957249, 25.611749 ], [ 113.913517, 25.701299 ], [ 113.920293, 25.741197 ], [ 113.961561, 25.77731 ], [ 113.971416, 25.836036 ], [ 114.028082, 25.893119 ], [ 114.028082, 25.98138 ], [ 114.008372, 26.015806 ], [ 114.044096, 26.076564 ], [ 114.087828, 26.06635 ], [ 114.121089, 26.085702 ], [ 114.10569, 26.097526 ], [ 114.188842, 26.121172 ], [ 114.237501, 26.152333 ], [ 114.216559, 26.203355 ], [ 114.181451, 26.214631 ], [ 114.102611, 26.187783 ], [ 114.088444, 26.168448 ], [ 114.013299, 26.184023 ], [ 113.962792, 26.150722 ], [ 113.949242, 26.192616 ], [ 113.972647, 26.20604 ], [ 113.978807, 26.237716 ], [ 114.029314, 26.266163 ], [ 114.021307, 26.288701 ], [ 114.047792, 26.337518 ], [ 114.030546, 26.376664 ], [ 114.062575, 26.406149 ], [ 114.085364, 26.406149 ], [ 114.090292, 26.455988 ], [ 114.110002, 26.482775 ], [ 114.07243, 26.480096 ], [ 114.10877, 26.56952 ], [ 114.019459, 26.587182 ], [ 113.996669, 26.615543 ], [ 113.912901, 26.613938 ], [ 113.860546, 26.664221 ], [ 113.853771, 26.769532 ], [ 113.835909, 26.806394 ], [ 113.877177, 26.859262 ], [ 113.890112, 26.895562 ], [ 113.927068, 26.948922 ], [ 113.892575, 26.964925 ], [ 113.86301, 27.018252 ], [ 113.824206, 27.036378 ], [ 113.803264, 27.099261 ], [ 113.771851, 27.096598 ], [ 113.779242, 27.137081 ], [ 113.846996, 27.222262 ], [ 113.872865, 27.289828 ], [ 113.854387, 27.30525 ], [ 113.872865, 27.346721 ], [ 113.872865, 27.384988 ], [ 113.72812, 27.350442 ], [ 113.699786, 27.331836 ], [ 113.657902, 27.347253 ], [ 113.616635, 27.345658 ], [ 113.605548, 27.38924 ], [ 113.632033, 27.40518 ], [ 113.59754, 27.428554 ], [ 113.591381, 27.467855 ], [ 113.627105, 27.49971 ], [ 113.583374, 27.524657 ], [ 113.579062, 27.545354 ], [ 113.608627, 27.585143 ], [ 113.607395, 27.625449 ], [ 113.652359, 27.663619 ], [ 113.696707, 27.71979 ], [ 113.69917, 27.740979 ], [ 113.763228, 27.799228 ], [ 113.756453, 27.860091 ], [ 113.72812, 27.874904 ], [ 113.752141, 27.93361 ], [ 113.822974, 27.982243 ], [ 113.845148, 27.971672 ], [ 113.864242, 28.004966 ], [ 113.914133, 27.991227 ], [ 113.936307, 28.018703 ], [ 113.966488, 28.017646 ], [ 113.970184, 28.041418 ], [ 114.025618, 28.031382 ], [ 114.047176, 28.057263 ], [ 114.025002, 28.080499 ], [ 113.992357, 28.161255 ], [ 114.012068, 28.174972 ], [ 114.068734, 28.171806 ], [ 114.107538, 28.182885 ], [ 114.109386, 28.205038 ], [ 114.143879, 28.246694 ], [ 114.182067, 28.249858 ], [ 114.198081, 28.29097 ], [ 114.2529, 28.319423 ], [ 114.252284, 28.395787 ], [ 114.214712, 28.403157 ], [ 114.172212, 28.432632 ], [ 114.217175, 28.466308 ], [ 114.218407, 28.48472 ], [ 114.15435, 28.507337 ], [ 114.138335, 28.533629 ], [ 114.08598, 28.558337 ], [ 114.132176, 28.607211 ], [ 114.122321, 28.623497 ], [ 114.157429, 28.761566 ], [ 114.137719, 28.779926 ], [ 114.153734, 28.829221 ], [ 114.124784, 28.843376 ], [ 114.076741, 28.834464 ], [ 114.056415, 28.872204 ], [ 114.060111, 28.902596 ], [ 114.028082, 28.891069 ], [ 114.005292, 28.917788 ], [ 114.008988, 28.955498 ], [ 113.973879, 28.937692 ], [ 113.955401, 28.978536 ], [ 113.961561, 28.999476 ], [ 113.94185, 29.047097 ], [ 113.952321, 29.092604 ], [ 113.98743, 29.126068 ], [ 114.034857, 29.152204 ], [ 114.063191, 29.204978 ], [ 114.169748, 29.216993 ], [ 114.252284, 29.23475 ], [ 114.259059, 29.343839 ], [ 114.307102, 29.365225 ], [ 114.341595, 29.327665 ], [ 114.376088, 29.322969 ], [ 114.440145, 29.341752 ], [ 114.466015, 29.324013 ], [ 114.519602, 29.325578 ], [ 114.589819, 29.352707 ], [ 114.621847, 29.379828 ], [ 114.67297, 29.395993 ], [ 114.740724, 29.386607 ], [ 114.759818, 29.363139 ], [ 114.784455, 29.386086 ], [ 114.812173, 29.383478 ], [ 114.866375, 29.404335 ], [ 114.895325, 29.397557 ], [ 114.931049, 29.422581 ], [ 114.947063, 29.465317 ], [ 114.935977, 29.486678 ], [ 114.90518, 29.473132 ], [ 114.918114, 29.454374 ], [ 114.888549, 29.436134 ], [ 114.860216, 29.476258 ], [ 114.900868, 29.505951 ], [ 114.940288, 29.493971 ], [ 114.966773, 29.522096 ], [ 114.947679, 29.542924 ], [ 115.00065, 29.572076 ], [ 115.033295, 29.546568 ], [ 115.087498, 29.560104 ], [ 115.086266, 29.525741 ], [ 115.154019, 29.510117 ], [ 115.157099, 29.584568 ], [ 115.120142, 29.597578 ], [ 115.143548, 29.645961 ], [ 115.117679, 29.655843 ], [ 115.113367, 29.684963 ], [ 115.176809, 29.654803 ], [ 115.250722, 29.660003 ], [ 115.28583, 29.618391 ], [ 115.304924, 29.637118 ], [ 115.355431, 29.649602 ], [ 115.412714, 29.688602 ], [ 115.470612, 29.739539 ], [ 115.479235, 29.811224 ], [ 115.51188, 29.840299 ], [ 115.611662, 29.841337 ], [ 115.667712, 29.850161 ], [ 115.706517, 29.837703 ], [ 115.762567, 29.793048 ], [ 115.837096, 29.748373 ], [ 115.909777, 29.723949 ], [ 115.965827, 29.724469 ], [ 116.049595, 29.761881 ], [ 116.087167, 29.795125 ], [ 116.13521, 29.819532 ], [ 116.172783, 29.828358 ], [ 116.227601, 29.816936 ], [ 116.250391, 29.785777 ], [ 116.280572, 29.788893 ], [ 116.342782, 29.835626 ], [ 116.467818, 29.896347 ], [ 116.525716, 29.897385 ], [ 116.552201, 29.909836 ], [ 116.585462, 30.045657 ], [ 116.620571, 30.073109 ], [ 116.666766, 30.076734 ], [ 116.720353, 30.053945 ], [ 116.747454, 30.057053 ], [ 116.783794, 30.030632 ], [ 116.802889, 29.99643 ], [ 116.830606, 30.004723 ], [ 116.83307, 29.95755 ], [ 116.868794, 29.980361 ], [ 116.900207, 29.949253 ], [ 116.882961, 29.893753 ], [ 116.780715, 29.792529 ], [ 116.762237, 29.802396 ], [ 116.673541, 29.709916 ], [ 116.653831, 29.694841 ], [ 116.680317, 29.681323 ], [ 116.651983, 29.637118 ], [ 116.716657, 29.590813 ], [ 116.721585, 29.564789 ], [ 116.760389, 29.599139 ], [ 116.780715, 29.569994 ], [ 116.849084, 29.57624 ], [ 116.873722, 29.609546 ], [ 116.939627, 29.648561 ], [ 116.974736, 29.657403 ], [ 116.996294, 29.683403 ], [ 117.041873, 29.680803 ], [ 117.112706, 29.711995 ], [ 117.108395, 29.75201 ], [ 117.136728, 29.775388 ], [ 117.123177, 29.798761 ], [ 117.073286, 29.831992 ], [ 117.127489, 29.86158 ], [ 117.129952, 29.89946 ], [ 117.171836, 29.920729 ], [ 117.2168, 29.926953 ], [ 117.246365, 29.915023 ], [ 117.261763, 29.880781 ], [ 117.25314, 29.834588 ], [ 117.29256, 29.822647 ], [ 117.338756, 29.848085 ], [ 117.359082, 29.812782 ], [ 117.382487, 29.840818 ], [ 117.415132, 29.85068 ], [ 117.408973, 29.802396 ], [ 117.455168, 29.749412 ], [ 117.453936, 29.688082 ], [ 117.490277, 29.660003 ], [ 117.530313, 29.654282 ], [ 117.523538, 29.630356 ], [ 117.543248, 29.588731 ], [ 117.608537, 29.591333 ], [ 117.647957, 29.614749 ], [ 117.678754, 29.595496 ], [ 117.690457, 29.555939 ], [ 117.729877, 29.550213 ], [ 117.795167, 29.570515 ], [ 117.872775, 29.54761 ], [ 117.933753, 29.549172 ], [ 118.00397, 29.578322 ], [ 118.042774, 29.566351 ], [ 118.050782, 29.542924 ], [ 118.095129, 29.534072 ], [ 118.143788, 29.489803 ], [ 118.127774, 29.47209 ], [ 118.136397, 29.418932 ], [ 118.193064, 29.395472 ] ] ] ] } }, +{ "type": "Feature", "properties": { "adcode": "370000", "name": "山东省", "center": [ 117.000923, 36.675807 ], "centroid": [ 118.187667, 36.376018 ], "childrenNum": 16, "level": "province", "parent": { "adcode": 100000 }, "subFeatureIndex": 14, "acroutes": [ 100000 ] }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 116.374195, 34.640011 ], [ 116.334159, 34.620806 ], [ 116.32492, 34.601104 ], [ 116.286116, 34.608986 ], [ 116.247927, 34.551829 ], [ 116.196804, 34.575977 ], [ 116.156768, 34.5538 ], [ 116.134594, 34.559715 ], [ 116.101334, 34.60603 ], [ 116.037276, 34.593222 ], [ 115.991081, 34.615389 ], [ 115.984305, 34.589281 ], [ 115.838328, 34.5676 ], [ 115.827241, 34.558236 ], [ 115.787821, 34.580905 ], [ 115.697278, 34.594207 ], [ 115.685575, 34.556265 ], [ 115.622749, 34.574499 ], [ 115.553148, 34.568586 ], [ 115.515575, 34.582383 ], [ 115.461373, 34.637057 ], [ 115.433655, 34.725149 ], [ 115.449054, 34.74433 ], [ 115.42688, 34.805285 ], [ 115.317243, 34.859321 ], [ 115.256265, 34.845079 ], [ 115.239019, 34.87798 ], [ 115.251953, 34.906451 ], [ 115.205142, 34.914303 ], [ 115.219309, 34.96042 ], [ 115.157099, 34.957968 ], [ 115.12815, 35.00455 ], [ 115.075179, 35.000628 ], [ 115.028983, 34.9717 ], [ 115.008041, 34.988372 ], [ 114.950759, 34.989843 ], [ 114.923658, 34.968757 ], [ 114.880542, 35.00357 ], [ 114.824492, 35.012393 ], [ 114.852209, 35.041797 ], [ 114.818948, 35.051596 ], [ 114.835578, 35.076578 ], [ 114.883006, 35.098615 ], [ 114.841738, 35.15099 ], [ 114.861448, 35.182301 ], [ 114.932281, 35.198441 ], [ 114.929201, 35.244886 ], [ 114.957534, 35.261014 ], [ 115.04315, 35.376744 ], [ 115.073947, 35.374304 ], [ 115.091809, 35.416259 ], [ 115.117679, 35.400163 ], [ 115.126302, 35.41821 ], [ 115.172497, 35.426501 ], [ 115.237171, 35.423087 ], [ 115.307388, 35.480126 ], [ 115.356047, 35.490359 ], [ 115.34496, 35.55368 ], [ 115.383148, 35.568772 ], [ 115.48601, 35.710306 ], [ 115.52851, 35.733628 ], [ 115.622749, 35.739457 ], [ 115.693582, 35.754028 ], [ 115.696046, 35.788989 ], [ 115.73485, 35.833154 ], [ 115.773654, 35.854014 ], [ 115.81677, 35.844312 ], [ 115.859886, 35.857894 ], [ 115.882675, 35.879718 ], [ 115.873436, 35.918985 ], [ 115.907929, 35.92674 ], [ 115.911624, 35.960171 ], [ 115.984921, 35.974218 ], [ 116.048979, 35.970343 ], [ 116.063145, 36.028927 ], [ 116.099486, 36.112129 ], [ 116.057602, 36.104877 ], [ 115.989849, 36.045381 ], [ 115.89869, 36.026507 ], [ 115.859886, 36.003756 ], [ 115.817386, 36.012954 ], [ 115.779813, 35.993588 ], [ 115.774886, 35.974702 ], [ 115.699125, 35.966468 ], [ 115.648618, 35.922863 ], [ 115.583945, 35.921893 ], [ 115.513112, 35.890385 ], [ 115.505104, 35.899112 ], [ 115.495249, 35.896203 ], [ 115.487858, 35.880688 ], [ 115.460141, 35.867594 ], [ 115.407786, 35.80889 ], [ 115.363438, 35.779765 ], [ 115.335105, 35.796756 ], [ 115.364054, 35.894264 ], [ 115.353583, 35.938854 ], [ 115.362822, 35.971796 ], [ 115.447822, 36.01247 ], [ 115.449054, 36.047317 ], [ 115.484163, 36.125666 ], [ 115.483547, 36.148865 ], [ 115.474923, 36.248352 ], [ 115.466916, 36.258969 ], [ 115.466916, 36.258969 ], [ 115.462605, 36.276339 ], [ 115.417025, 36.292742 ], [ 115.423185, 36.32216 ], [ 115.366518, 36.30914 ], [ 115.368982, 36.342409 ], [ 115.340033, 36.398307 ], [ 115.297533, 36.413239 ], [ 115.317243, 36.454166 ], [ 115.291374, 36.460423 ], [ 115.272895, 36.497476 ], [ 115.33141, 36.550378 ], [ 115.355431, 36.627262 ], [ 115.365902, 36.621979 ], [ 115.420105, 36.686795 ], [ 115.451518, 36.702151 ], [ 115.479851, 36.760187 ], [ 115.524815, 36.763543 ], [ 115.686807, 36.810034 ], [ 115.688654, 36.838777 ], [ 115.71206, 36.883308 ], [ 115.75764, 36.902453 ], [ 115.79706, 36.968945 ], [ 115.776734, 36.992848 ], [ 115.85619, 37.060694 ], [ 115.888219, 37.112254 ], [ 115.879596, 37.150901 ], [ 115.91224, 37.177132 ], [ 115.909777, 37.20669 ], [ 115.969523, 37.239572 ], [ 115.975682, 37.337179 ], [ 116.024341, 37.360015 ], [ 116.085935, 37.373809 ], [ 116.106261, 37.368577 ], [ 116.169087, 37.384271 ], [ 116.193109, 37.365723 ], [ 116.236224, 37.361442 ], [ 116.2855, 37.404241 ], [ 116.226369, 37.428007 ], [ 116.243, 37.447965 ], [ 116.224522, 37.479791 ], [ 116.240536, 37.489764 ], [ 116.240536, 37.489764 ], [ 116.27626, 37.466967 ], [ 116.290427, 37.484065 ], [ 116.278724, 37.524895 ], [ 116.295355, 37.554316 ], [ 116.336007, 37.581355 ], [ 116.36742, 37.566177 ], [ 116.379738, 37.522047 ], [ 116.38097, 37.522522 ], [ 116.379738, 37.522047 ], [ 116.38097, 37.522522 ], [ 116.433941, 37.473142 ], [ 116.448108, 37.503059 ], [ 116.4826, 37.521573 ], [ 116.575607, 37.610754 ], [ 116.604556, 37.624975 ], [ 116.66307, 37.686096 ], [ 116.679085, 37.728708 ], [ 116.724664, 37.744327 ], [ 116.753613, 37.77035 ], [ 116.753613, 37.793054 ], [ 116.804736, 37.848837 ], [ 116.837997, 37.835132 ], [ 116.919301, 37.846002 ], [ 117.027091, 37.832296 ], [ 117.074518, 37.848837 ], [ 117.150278, 37.839385 ], [ 117.185387, 37.849783 ], [ 117.271618, 37.839858 ], [ 117.320278, 37.861596 ], [ 117.400966, 37.844584 ], [ 117.438538, 37.854035 ], [ 117.481038, 37.914967 ], [ 117.513067, 37.94329 ], [ 117.524154, 37.989527 ], [ 117.557414, 38.046105 ], [ 117.557414, 38.046105 ], [ 117.586979, 38.071551 ], [ 117.704624, 38.076262 ], [ 117.746508, 38.12524 ], [ 117.771145, 38.134655 ], [ 117.766834, 38.158658 ], [ 117.789007, 38.180772 ], [ 117.808718, 38.22827 ], [ 117.848754, 38.255062 ], [ 117.895565, 38.301572 ], [ 117.896797, 38.279495 ], [ 118.018753, 38.202409 ], [ 118.045238, 38.214165 ], [ 118.112376, 38.210403 ], [ 118.177665, 38.186417 ], [ 118.217085, 38.146893 ], [ 118.331034, 38.12524 ], [ 118.404331, 38.121003 ], [ 118.431432, 38.106406 ], [ 118.44991, 38.124299 ], [ 118.504729, 38.11394 ], [ 118.534294, 38.063541 ], [ 118.552156, 38.05553 ], [ 118.597736, 38.079088 ], [ 118.607591, 38.129006 ], [ 118.626069, 38.138421 ], [ 118.703677, 38.151129 ], [ 118.811467, 38.157717 ], [ 118.908169, 38.139362 ], [ 118.974075, 38.094162 ], [ 119.001792, 37.99613 ], [ 119.110813, 37.921577 ], [ 119.12806, 37.847892 ], [ 119.16132, 37.81906 ], [ 119.212443, 37.838913 ], [ 119.24016, 37.878131 ], [ 119.291899, 37.869627 ], [ 119.309146, 37.805349 ], [ 119.280197, 37.692726 ], [ 119.262334, 37.660517 ], [ 119.236465, 37.651988 ], [ 119.153313, 37.655305 ], [ 119.023966, 37.642037 ], [ 118.988857, 37.620709 ], [ 118.939582, 37.527268 ], [ 118.942662, 37.497361 ], [ 119.001176, 37.31862 ], [ 119.03998, 37.30434 ], [ 119.054147, 37.254816 ], [ 119.084328, 37.239572 ], [ 119.091103, 37.257674 ], [ 119.12806, 37.254816 ], [ 119.136683, 37.230995 ], [ 119.204436, 37.280058 ], [ 119.190885, 37.25958 ], [ 119.2069, 37.223371 ], [ 119.298675, 37.197156 ], [ 119.301138, 37.139452 ], [ 119.327624, 37.115595 ], [ 119.361501, 37.125616 ], [ 119.428022, 37.125616 ], [ 119.489616, 37.134681 ], [ 119.576463, 37.127524 ], [ 119.678709, 37.158056 ], [ 119.698419, 37.127047 ], [ 119.744615, 37.135158 ], [ 119.83023, 37.225754 ], [ 119.865339, 37.233854 ], [ 119.89244, 37.263866 ], [ 119.883201, 37.311004 ], [ 119.837006, 37.346695 ], [ 119.843781, 37.376662 ], [ 119.926933, 37.386649 ], [ 119.949723, 37.419927 ], [ 120.010085, 37.442263 ], [ 120.064903, 37.448915 ], [ 120.086461, 37.465067 ], [ 120.144359, 37.481691 ], [ 120.222584, 37.532963 ], [ 120.246605, 37.556689 ], [ 120.208417, 37.588469 ], [ 120.215192, 37.621183 ], [ 120.272475, 37.636824 ], [ 120.269395, 37.658622 ], [ 120.22012, 37.671886 ], [ 120.227511, 37.693673 ], [ 120.367945, 37.697935 ], [ 120.454793, 37.757576 ], [ 120.517619, 37.750005 ], [ 120.590915, 37.7642 ], [ 120.634031, 37.796364 ], [ 120.656821, 37.793054 ], [ 120.733197, 37.833714 ], [ 120.839139, 37.82426 ], [ 120.845298, 37.826623 ], [ 120.874863, 37.833241 ], [ 120.940769, 37.819533 ], [ 120.943233, 37.785486 ], [ 120.994356, 37.759468 ], [ 121.037471, 37.718767 ], [ 121.136022, 37.723501 ], [ 121.160043, 37.698882 ], [ 121.142797, 37.661464 ], [ 121.161891, 37.646302 ], [ 121.148956, 37.626397 ], [ 121.17421, 37.597479 ], [ 121.217326, 37.582778 ], [ 121.304789, 37.582778 ], [ 121.358376, 37.597479 ], [ 121.349137, 37.635403 ], [ 121.391021, 37.625449 ], [ 121.435368, 37.592737 ], [ 121.395948, 37.589891 ], [ 121.400876, 37.557638 ], [ 121.460006, 37.522522 ], [ 121.477252, 37.475992 ], [ 121.571491, 37.441313 ], [ 121.575802, 37.460317 ], [ 121.635548, 37.494037 ], [ 121.66573, 37.473617 ], [ 121.772903, 37.466492 ], [ 121.923808, 37.473142 ], [ 121.997721, 37.494512 ], [ 122.017431, 37.531065 ], [ 122.075329, 37.540556 ], [ 122.08888, 37.554316 ], [ 122.150474, 37.557163 ], [ 122.163408, 37.519199 ], [ 122.131996, 37.49926 ], [ 122.166488, 37.438937 ], [ 122.194205, 37.456041 ], [ 122.25272, 37.467917 ], [ 122.287212, 37.445114 ], [ 122.281053, 37.430858 ], [ 122.337103, 37.414223 ], [ 122.41656, 37.414699 ], [ 122.487393, 37.43466 ], [ 122.4954, 37.413748 ], [ 122.553914, 37.407093 ], [ 122.641377, 37.428482 ], [ 122.67587, 37.413273 ], [ 122.701739, 37.418501 ], [ 122.714058, 37.392355 ], [ 122.6925, 37.373809 ], [ 122.650616, 37.388551 ], [ 122.607501, 37.364296 ], [ 122.611196, 37.339558 ], [ 122.573624, 37.296247 ], [ 122.567465, 37.25958 ], [ 122.592718, 37.261485 ], [ 122.624131, 37.190959 ], [ 122.573624, 37.176178 ], [ 122.581015, 37.147562 ], [ 122.533588, 37.153286 ], [ 122.484313, 37.128956 ], [ 122.478769, 37.058784 ], [ 122.467067, 37.037289 ], [ 122.494168, 37.033945 ], [ 122.575472, 37.054485 ], [ 122.583479, 37.037289 ], [ 122.544675, 37.004797 ], [ 122.55761, 36.968467 ], [ 122.532356, 36.901496 ], [ 122.48924, 36.886659 ], [ 122.483081, 36.913938 ], [ 122.434422, 36.914416 ], [ 122.457212, 36.868946 ], [ 122.383915, 36.865595 ], [ 122.378371, 36.844525 ], [ 122.344495, 36.828239 ], [ 122.280437, 36.835904 ], [ 122.275509, 36.83734 ], [ 122.220691, 36.848835 ], [ 122.174495, 36.842609 ], [ 122.188662, 36.866073 ], [ 122.175727, 36.894317 ], [ 122.119677, 36.891924 ], [ 122.141235, 36.938337 ], [ 122.124604, 36.944077 ], [ 122.115981, 36.94025 ], [ 122.093191, 36.913938 ], [ 122.051923, 36.904846 ], [ 122.042684, 36.871819 ], [ 122.008808, 36.96225 ], [ 121.965076, 36.938337 ], [ 121.927504, 36.932597 ], [ 121.767975, 36.874691 ], [ 121.762432, 36.84644 ], [ 121.726092, 36.826323 ], [ 121.6762, 36.819137 ], [ 121.631853, 36.80093 ], [ 121.651563, 36.723739 ], [ 121.556092, 36.764502 ], [ 121.575186, 36.740047 ], [ 121.532071, 36.73621 ], [ 121.485259, 36.786073 ], [ 121.548701, 36.807638 ], [ 121.565331, 36.830635 ], [ 121.506817, 36.803805 ], [ 121.496962, 36.795179 ], [ 121.454462, 36.752515 ], [ 121.3941, 36.738129 ], [ 121.400876, 36.701191 ], [ 121.35776, 36.713186 ], [ 121.31218, 36.702151 ], [ 121.29863, 36.702151 ], [ 121.251818, 36.671436 ], [ 121.161275, 36.651273 ], [ 121.078123, 36.607568 ], [ 121.028848, 36.572971 ], [ 120.955551, 36.575855 ], [ 120.926602, 36.611892 ], [ 120.882255, 36.627262 ], [ 120.847146, 36.618617 ], [ 120.884718, 36.601323 ], [ 120.909972, 36.568645 ], [ 120.962327, 36.562877 ], [ 120.983269, 36.546051 ], [ 120.95432, 36.507578 ], [ 120.965407, 36.466199 ], [ 120.938305, 36.447908 ], [ 120.90874, 36.450315 ], [ 120.919827, 36.419018 ], [ 120.871784, 36.36699 ], [ 120.848994, 36.403124 ], [ 120.858849, 36.424797 ], [ 120.828668, 36.46668 ], [ 120.759683, 36.46283 ], [ 120.694393, 36.390118 ], [ 120.744284, 36.327946 ], [ 120.66298, 36.331803 ], [ 120.653741, 36.282129 ], [ 120.686386, 36.279234 ], [ 120.696857, 36.15563 ], [ 120.712255, 36.126632 ], [ 120.672835, 36.130016 ], [ 120.64327, 36.114547 ], [ 120.615553, 36.120348 ], [ 120.593995, 36.100525 ], [ 120.546568, 36.107778 ], [ 120.546568, 36.091821 ], [ 120.468959, 36.087952 ], [ 120.429539, 36.056994 ], [ 120.370409, 36.053607 ], [ 120.289721, 36.059413 ], [ 120.35809, 36.174956 ], [ 120.362402, 36.196209 ], [ 120.319902, 36.232423 ], [ 120.297112, 36.225664 ], [ 120.310047, 36.185101 ], [ 120.263236, 36.182202 ], [ 120.260772, 36.198624 ], [ 120.224432, 36.19138 ], [ 120.22012, 36.209248 ], [ 120.181316, 36.203936 ], [ 120.140664, 36.173507 ], [ 120.142512, 36.143549 ], [ 120.108635, 36.127599 ], [ 120.116642, 36.102943 ], [ 120.152367, 36.095206 ], [ 120.181316, 36.066669 ], [ 120.239214, 36.062316 ], [ 120.234902, 36.030863 ], [ 120.198562, 35.995525 ], [ 120.257076, 36.025055 ], [ 120.249069, 35.992136 ], [ 120.285409, 36.01247 ], [ 120.289721, 36.017311 ], [ 120.316206, 36.002304 ], [ 120.30512, 35.971796 ], [ 120.265699, 35.966468 ], [ 120.209033, 35.917531 ], [ 120.202258, 35.89184 ], [ 120.169613, 35.888446 ], [ 120.207801, 35.947575 ], [ 120.152983, 35.907353 ], [ 120.125265, 35.906868 ], [ 120.112331, 35.885052 ], [ 120.064287, 35.873414 ], [ 120.032258, 35.812288 ], [ 120.049505, 35.786562 ], [ 120.01378, 35.714193 ], [ 119.958346, 35.760342 ], [ 119.926317, 35.759856 ], [ 119.920157, 35.739943 ], [ 119.950339, 35.729741 ], [ 119.91215, 35.660725 ], [ 119.925085, 35.637382 ], [ 119.868419, 35.60868 ], [ 119.83023, 35.620357 ], [ 119.824071, 35.646136 ], [ 119.792658, 35.615492 ], [ 119.800665, 35.581915 ], [ 119.752622, 35.588729 ], [ 119.75139, 35.617924 ], [ 119.718129, 35.615492 ], [ 119.662079, 35.589215 ], [ 119.663311, 35.562931 ], [ 119.618963, 35.459655 ], [ 119.579543, 35.406504 ], [ 119.590014, 35.37284 ], [ 119.543819, 35.347949 ], [ 119.538275, 35.296678 ], [ 119.493312, 35.318655 ], [ 119.450812, 35.285443 ], [ 119.411392, 35.231689 ], [ 119.397841, 35.137777 ], [ 119.428022, 35.121136 ], [ 119.373819, 35.078538 ], [ 119.354109, 35.080007 ], [ 119.306066, 35.076578 ], [ 119.286972, 35.115261 ], [ 119.250016, 35.124562 ], [ 119.217371, 35.106939 ], [ 119.137915, 35.096167 ], [ 119.114509, 35.055026 ], [ 119.027045, 35.055516 ], [ 118.942662, 35.040817 ], [ 118.928495, 35.051106 ], [ 118.86259, 35.025626 ], [ 118.860742, 34.944233 ], [ 118.805307, 34.87307 ], [ 118.80038, 34.843114 ], [ 118.772047, 34.794474 ], [ 118.739402, 34.792508 ], [ 118.719076, 34.745313 ], [ 118.764039, 34.740396 ], [ 118.783749, 34.723181 ], [ 118.739402, 34.693663 ], [ 118.690127, 34.678408 ], [ 118.664257, 34.693663 ], [ 118.607591, 34.694155 ], [ 118.601431, 34.714327 ], [ 118.545997, 34.705964 ], [ 118.460997, 34.656258 ], [ 118.473932, 34.623269 ], [ 118.439439, 34.626223 ], [ 118.424657, 34.595193 ], [ 118.439439, 34.507949 ], [ 118.416034, 34.473914 ], [ 118.404947, 34.427525 ], [ 118.379693, 34.415183 ], [ 118.290382, 34.424563 ], [ 118.277447, 34.404814 ], [ 118.220165, 34.405802 ], [ 118.217701, 34.379134 ], [ 118.179513, 34.379628 ], [ 118.177665, 34.45319 ], [ 118.132702, 34.483287 ], [ 118.16473, 34.50499 ], [ 118.185056, 34.543942 ], [ 118.079115, 34.569571 ], [ 118.114839, 34.614404 ], [ 118.084042, 34.655766 ], [ 118.053861, 34.650843 ], [ 117.951615, 34.678408 ], [ 117.909732, 34.670533 ], [ 117.902956, 34.644443 ], [ 117.793935, 34.651827 ], [ 117.791471, 34.583368 ], [ 117.801942, 34.518798 ], [ 117.684298, 34.547392 ], [ 117.659044, 34.501044 ], [ 117.609769, 34.490686 ], [ 117.592523, 34.462566 ], [ 117.53832, 34.467006 ], [ 117.465023, 34.484767 ], [ 117.402813, 34.550843 ], [ 117.402813, 34.569571 ], [ 117.362777, 34.589281 ], [ 117.325205, 34.573021 ], [ 117.325205, 34.573021 ], [ 117.32151, 34.566614 ], [ 117.32151, 34.566614 ], [ 117.311654, 34.561686 ], [ 117.311654, 34.561686 ], [ 117.267307, 34.528659 ], [ 117.27285, 34.499565 ], [ 117.252524, 34.48674 ], [ 117.248213, 34.451216 ], [ 117.166293, 34.434435 ], [ 117.139191, 34.526687 ], [ 117.15151, 34.559222 ], [ 117.104083, 34.648874 ], [ 117.073286, 34.639026 ], [ 117.061583, 34.675947 ], [ 117.070206, 34.713835 ], [ 117.022163, 34.759081 ], [ 116.969192, 34.771864 ], [ 116.95133, 34.81069 ], [ 116.979047, 34.815113 ], [ 116.966113, 34.844588 ], [ 116.929156, 34.843114 ], [ 116.922381, 34.894671 ], [ 116.858323, 34.928533 ], [ 116.821983, 34.929515 ], [ 116.809048, 34.968757 ], [ 116.781947, 34.961891 ], [ 116.781331, 34.916757 ], [ 116.677853, 34.939327 ], [ 116.622418, 34.939818 ], [ 116.613795, 34.922645 ], [ 116.557745, 34.908905 ], [ 116.445028, 34.895652 ], [ 116.408071, 34.850972 ], [ 116.403144, 34.756131 ], [ 116.369267, 34.749247 ], [ 116.363724, 34.715311 ], [ 116.392057, 34.710391 ], [ 116.374195, 34.640011 ] ] ], [ [ [ 120.729502, 37.947065 ], [ 120.76461, 37.923937 ], [ 120.76461, 37.895134 ], [ 120.721495, 37.917328 ], [ 120.729502, 37.947065 ] ] ], [ [ [ 120.692545, 37.983867 ], [ 120.724574, 37.987641 ], [ 120.732581, 37.961694 ], [ 120.692545, 37.983867 ] ] ], [ [ [ 120.990044, 36.413239 ], [ 120.950624, 36.414684 ], [ 120.978341, 36.428649 ], [ 120.990044, 36.413239 ] ] ], [ [ [ 120.750444, 38.150188 ], [ 120.742436, 38.199116 ], [ 120.7874, 38.158658 ], [ 120.750444, 38.150188 ] ] ], [ [ [ 120.918595, 38.345236 ], [ 120.895189, 38.36307 ], [ 120.914899, 38.373393 ], [ 120.918595, 38.345236 ] ] ], [ [ [ 120.159142, 35.765198 ], [ 120.172077, 35.785591 ], [ 120.193019, 35.756942 ], [ 120.169613, 35.740428 ], [ 120.159142, 35.765198 ] ] ], [ [ [ 120.62664, 37.94565 ], [ 120.602002, 37.978678 ], [ 120.631567, 37.981037 ], [ 120.62664, 37.94565 ] ] ], [ [ [ 120.802183, 38.284193 ], [ 120.816349, 38.318008 ], [ 120.848378, 38.305799 ], [ 120.802183, 38.284193 ] ] ], [ [ [ 121.489571, 37.577086 ], [ 121.488955, 37.578035 ], [ 121.489571, 37.578509 ], [ 121.489571, 37.577561 ], [ 121.489571, 37.577086 ] ] ], [ [ [ 121.485875, 37.578509 ], [ 121.487723, 37.578509 ], [ 121.487723, 37.578035 ], [ 121.485875, 37.578509 ] ] ], [ [ [ 121.487723, 37.578509 ], [ 121.488339, 37.578509 ], [ 121.488955, 37.578509 ], [ 121.488955, 37.578035 ], [ 121.487723, 37.577561 ], [ 121.487723, 37.578509 ] ] ], [ [ [ 115.495249, 35.896203 ], [ 115.505104, 35.899112 ], [ 115.513112, 35.890385 ], [ 115.487858, 35.880688 ], [ 115.495249, 35.896203 ] ] ] ] } }, +{ "type": "Feature", "properties": { "adcode": "410000", "name": "河南省", "center": [ 113.665412, 34.757975 ], "centroid": [ 113.619748, 33.902617 ], "childrenNum": 18, "level": "province", "parent": { "adcode": 100000 }, "subFeatureIndex": 15, "acroutes": [ 100000 ] }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 115.5088, 32.468761 ], [ 115.509416, 32.466741 ], [ 115.522967, 32.441997 ], [ 115.57101, 32.419266 ], [ 115.604271, 32.425833 ], [ 115.626445, 32.40512 ], [ 115.657857, 32.428864 ], [ 115.667712, 32.409667 ], [ 115.704669, 32.495013 ], [ 115.742241, 32.476335 ], [ 115.771806, 32.505108 ], [ 115.789052, 32.468761 ], [ 115.861117, 32.537403 ], [ 115.891298, 32.576243 ], [ 115.910393, 32.567165 ], [ 115.8759, 32.542448 ], [ 115.845719, 32.501575 ], [ 115.883291, 32.487946 ], [ 115.865429, 32.458662 ], [ 115.899306, 32.390971 ], [ 115.912856, 32.227596 ], [ 115.941805, 32.166318 ], [ 115.922095, 32.049725 ], [ 115.928871, 32.003046 ], [ 115.909161, 31.94314 ], [ 115.920248, 31.920285 ], [ 115.894994, 31.8649 ], [ 115.893762, 31.832365 ], [ 115.914704, 31.814567 ], [ 115.886371, 31.776418 ], [ 115.851878, 31.786593 ], [ 115.808147, 31.770313 ], [ 115.808147, 31.770313 ], [ 115.767495, 31.78761 ], [ 115.731154, 31.76726 ], [ 115.676336, 31.778453 ], [ 115.553764, 31.69549 ], [ 115.534054, 31.698545 ], [ 115.495249, 31.673083 ], [ 115.476771, 31.643028 ], [ 115.485394, 31.608885 ], [ 115.439815, 31.588496 ], [ 115.415793, 31.525771 ], [ 115.371446, 31.495668 ], [ 115.389924, 31.450241 ], [ 115.373909, 31.405813 ], [ 115.338801, 31.40428 ], [ 115.301229, 31.383846 ], [ 115.250722, 31.392021 ], [ 115.252569, 31.421646 ], [ 115.211301, 31.442072 ], [ 115.218077, 31.515057 ], [ 115.235939, 31.555354 ], [ 115.212533, 31.555354 ], [ 115.16449, 31.604808 ], [ 115.12507, 31.599201 ], [ 115.106592, 31.567592 ], [ 115.114599, 31.530362 ], [ 115.096121, 31.508425 ], [ 115.022824, 31.527811 ], [ 114.995107, 31.471171 ], [ 114.962462, 31.494648 ], [ 114.884238, 31.469129 ], [ 114.870071, 31.479337 ], [ 114.830035, 31.45892 ], [ 114.789383, 31.480358 ], [ 114.778912, 31.520669 ], [ 114.696376, 31.525771 ], [ 114.641558, 31.582378 ], [ 114.61692, 31.585437 ], [ 114.572572, 31.553824 ], [ 114.560869, 31.560963 ], [ 114.547935, 31.623665 ], [ 114.57134, 31.660858 ], [ 114.586123, 31.762172 ], [ 114.549783, 31.766751 ], [ 114.530688, 31.742834 ], [ 114.443841, 31.728074 ], [ 114.403189, 31.746906 ], [ 114.350218, 31.755557 ], [ 114.292936, 31.752503 ], [ 114.235654, 31.833382 ], [ 114.191922, 31.852192 ], [ 114.134024, 31.843042 ], [ 114.119241, 31.805922 ], [ 114.089676, 31.781506 ], [ 114.017611, 31.770822 ], [ 113.988662, 31.749959 ], [ 113.952321, 31.793714 ], [ 113.957865, 31.852701 ], [ 113.914749, 31.877098 ], [ 113.893807, 31.847109 ], [ 113.854387, 31.843042 ], [ 113.830981, 31.87913 ], [ 113.832213, 31.918761 ], [ 113.805728, 31.929428 ], [ 113.817431, 31.964467 ], [ 113.757685, 31.98985 ], [ 113.791561, 32.036028 ], [ 113.728735, 32.083197 ], [ 113.722576, 32.12426 ], [ 113.750293, 32.11615 ], [ 113.782322, 32.184553 ], [ 113.752757, 32.215951 ], [ 113.73859, 32.255942 ], [ 113.749061, 32.272642 ], [ 113.758301, 32.27669 ], [ 113.768156, 32.284279 ], [ 113.768772, 32.30148 ], [ 113.753989, 32.328286 ], [ 113.76754, 32.370249 ], [ 113.735511, 32.410677 ], [ 113.700402, 32.420782 ], [ 113.650511, 32.412698 ], [ 113.624642, 32.36115 ], [ 113.511925, 32.316654 ], [ 113.428773, 32.270618 ], [ 113.376418, 32.298445 ], [ 113.353628, 32.294904 ], [ 113.317904, 32.327275 ], [ 113.333918, 32.336377 ], [ 113.2366, 32.407141 ], [ 113.211962, 32.431895 ], [ 113.158992, 32.410677 ], [ 113.155912, 32.380863 ], [ 113.118956, 32.375809 ], [ 113.107869, 32.398551 ], [ 113.078919, 32.394508 ], [ 113.025949, 32.425328 ], [ 113.000695, 32.41674 ], [ 112.992072, 32.378336 ], [ 112.912, 32.390971 ], [ 112.888594, 32.37682 ], [ 112.860877, 32.396024 ], [ 112.776493, 32.358623 ], [ 112.735841, 32.356095 ], [ 112.716747, 32.357612 ], [ 112.645298, 32.368227 ], [ 112.612037, 32.386928 ], [ 112.589248, 32.381369 ], [ 112.545516, 32.404109 ], [ 112.530733, 32.37682 ], [ 112.477147, 32.380863 ], [ 112.448814, 32.34295 ], [ 112.390915, 32.37126 ], [ 112.360118, 32.3657 ], [ 112.328089, 32.321712 ], [ 112.206133, 32.392992 ], [ 112.172873, 32.385412 ], [ 112.150083, 32.411688 ], [ 112.155626, 32.377326 ], [ 112.081098, 32.425833 ], [ 112.063851, 32.474315 ], [ 112.014576, 32.450077 ], [ 111.975772, 32.471791 ], [ 111.948671, 32.51722 ], [ 111.890157, 32.503089 ], [ 111.858128, 32.528826 ], [ 111.808853, 32.536899 ], [ 111.713382, 32.606497 ], [ 111.646245, 32.605993 ], [ 111.640701, 32.634724 ], [ 111.577875, 32.593388 ], [ 111.530448, 32.628172 ], [ 111.513202, 32.674026 ], [ 111.458383, 32.726402 ], [ 111.475629, 32.760127 ], [ 111.41342, 32.757108 ], [ 111.380159, 32.829049 ], [ 111.293311, 32.859217 ], [ 111.276065, 32.903445 ], [ 111.255123, 32.883846 ], [ 111.242804, 32.930573 ], [ 111.273601, 32.971753 ], [ 111.258819, 33.006389 ], [ 111.221862, 33.042517 ], [ 111.152877, 33.039507 ], [ 111.192913, 33.071609 ], [ 111.179363, 33.115229 ], [ 111.146102, 33.12375 ], [ 111.12824, 33.15532 ], [ 111.08882, 33.181871 ], [ 111.045704, 33.169849 ], [ 111.046936, 33.202905 ], [ 110.984726, 33.255469 ], [ 111.025994, 33.330504 ], [ 111.025994, 33.375495 ], [ 110.996429, 33.435946 ], [ 111.02661, 33.467903 ], [ 111.02661, 33.478386 ], [ 111.002588, 33.535772 ], [ 111.00382, 33.578662 ], [ 110.966864, 33.609071 ], [ 110.878784, 33.634486 ], [ 110.823966, 33.685793 ], [ 110.831973, 33.713675 ], [ 110.81719, 33.751003 ], [ 110.782082, 33.796272 ], [ 110.74143, 33.798759 ], [ 110.712481, 33.833564 ], [ 110.66259, 33.85295 ], [ 110.612083, 33.852453 ], [ 110.587445, 33.887733 ], [ 110.628713, 33.910086 ], [ 110.627481, 33.925482 ], [ 110.665669, 33.937895 ], [ 110.671213, 33.966192 ], [ 110.620706, 34.035652 ], [ 110.587445, 34.023252 ], [ 110.591757, 34.101586 ], [ 110.61393, 34.113478 ], [ 110.642264, 34.161032 ], [ 110.621938, 34.177372 ], [ 110.55788, 34.193214 ], [ 110.55172, 34.213012 ], [ 110.507989, 34.217466 ], [ 110.43962, 34.243196 ], [ 110.428533, 34.288203 ], [ 110.451938, 34.292653 ], [ 110.503677, 34.33714 ], [ 110.473496, 34.393457 ], [ 110.403279, 34.433448 ], [ 110.403279, 34.433448 ], [ 110.360779, 34.516825 ], [ 110.372482, 34.544435 ], [ 110.404511, 34.557743 ], [ 110.366939, 34.566614 ], [ 110.379257, 34.600612 ], [ 110.424837, 34.588295 ], [ 110.488279, 34.610956 ], [ 110.533242, 34.583368 ], [ 110.610851, 34.607508 ], [ 110.710017, 34.605045 ], [ 110.749437, 34.65232 ], [ 110.780234, 34.648874 ], [ 110.812263, 34.624746 ], [ 110.870777, 34.636072 ], [ 110.89911, 34.661673 ], [ 110.929907, 34.731543 ], [ 110.976103, 34.706456 ], [ 111.035233, 34.740887 ], [ 111.118385, 34.756623 ], [ 111.148566, 34.807742 ], [ 111.232949, 34.789559 ], [ 111.255123, 34.819535 ], [ 111.29208, 34.806759 ], [ 111.345666, 34.831816 ], [ 111.389398, 34.815113 ], [ 111.439289, 34.838202 ], [ 111.502731, 34.829851 ], [ 111.543999, 34.853428 ], [ 111.570484, 34.843114 ], [ 111.592042, 34.881416 ], [ 111.617911, 34.894671 ], [ 111.646861, 34.938836 ], [ 111.681969, 34.9511 ], [ 111.664107, 34.984449 ], [ 111.739251, 35.00406 ], [ 111.807005, 35.032977 ], [ 111.810084, 35.062374 ], [ 111.933272, 35.083435 ], [ 111.97762, 35.067272 ], [ 112.018888, 35.068742 ], [ 112.039214, 35.045717 ], [ 112.062004, 35.056005 ], [ 112.05646, 35.098615 ], [ 112.066315, 35.153437 ], [ 112.03983, 35.194039 ], [ 112.078634, 35.219467 ], [ 112.058924, 35.280069 ], [ 112.094033, 35.279092 ], [ 112.21722, 35.253195 ], [ 112.242474, 35.234622 ], [ 112.304684, 35.251728 ], [ 112.288053, 35.219956 ], [ 112.36751, 35.219956 ], [ 112.390915, 35.239021 ], [ 112.513487, 35.218489 ], [ 112.637291, 35.225822 ], [ 112.628052, 35.263457 ], [ 112.720443, 35.206265 ], [ 112.772798, 35.207732 ], [ 112.822073, 35.258082 ], [ 112.884283, 35.243909 ], [ 112.934174, 35.262968 ], [ 112.936022, 35.284466 ], [ 112.992072, 35.29619 ], [ 112.985913, 35.33965 ], [ 112.996384, 35.362104 ], [ 113.067217, 35.353806 ], [ 113.126347, 35.332327 ], [ 113.149137, 35.350878 ], [ 113.165151, 35.412845 ], [ 113.188557, 35.412357 ], [ 113.189789, 35.44893 ], [ 113.243375, 35.449418 ], [ 113.304353, 35.426989 ], [ 113.31236, 35.481101 ], [ 113.348085, 35.468429 ], [ 113.391817, 35.506925 ], [ 113.439244, 35.507412 ], [ 113.49899, 35.532254 ], [ 113.513773, 35.57364 ], [ 113.55812, 35.621816 ], [ 113.547649, 35.656835 ], [ 113.578446, 35.633491 ], [ 113.625258, 35.632518 ], [ 113.622794, 35.674825 ], [ 113.592613, 35.691838 ], [ 113.587685, 35.736542 ], [ 113.604932, 35.797727 ], [ 113.582758, 35.818111 ], [ 113.660982, 35.837035 ], [ 113.637576, 35.870019 ], [ 113.654207, 35.931586 ], [ 113.648663, 35.994073 ], [ 113.678844, 35.985841 ], [ 113.694859, 36.026991 ], [ 113.660366, 36.034735 ], [ 113.68562, 36.056026 ], [ 113.671453, 36.115514 ], [ 113.655439, 36.125182 ], [ 113.712721, 36.129533 ], [ 113.705946, 36.148865 ], [ 113.651127, 36.174473 ], [ 113.697939, 36.181719 ], [ 113.681924, 36.216491 ], [ 113.716417, 36.262347 ], [ 113.712105, 36.303353 ], [ 113.736127, 36.324571 ], [ 113.731199, 36.363135 ], [ 113.755221, 36.366026 ], [ 113.813119, 36.332285 ], [ 113.856851, 36.329392 ], [ 113.84946, 36.347711 ], [ 113.882104, 36.353977 ], [ 113.911054, 36.314927 ], [ 113.962792, 36.353977 ], [ 113.981887, 36.31782 ], [ 114.002828, 36.334214 ], [ 114.056415, 36.329392 ], [ 114.04348, 36.303353 ], [ 114.080437, 36.269585 ], [ 114.129096, 36.280199 ], [ 114.175907, 36.264759 ], [ 114.170364, 36.245938 ], [ 114.170364, 36.245938 ], [ 114.203009, 36.245456 ], [ 114.2104, 36.272962 ], [ 114.241197, 36.251247 ], [ 114.257827, 36.263794 ], [ 114.299095, 36.245938 ], [ 114.345291, 36.255591 ], [ 114.356378, 36.230492 ], [ 114.408117, 36.224699 ], [ 114.417356, 36.205868 ], [ 114.466015, 36.197658 ], [ 114.480181, 36.177855 ], [ 114.533152, 36.171575 ], [ 114.586739, 36.141133 ], [ 114.588587, 36.118414 ], [ 114.640326, 36.137266 ], [ 114.720398, 36.140166 ], [ 114.734564, 36.15563 ], [ 114.771521, 36.124699 ], [ 114.857752, 36.127599 ], [ 114.858368, 36.144516 ], [ 114.912571, 36.140649 ], [ 114.926737, 36.089403 ], [ 114.914419, 36.052155 ], [ 114.998186, 36.069572 ], [ 115.04623, 36.112613 ], [ 115.048693, 36.161912 ], [ 115.06286, 36.178338 ], [ 115.104744, 36.172058 ], [ 115.12507, 36.209731 ], [ 115.1842, 36.193312 ], [ 115.201446, 36.210214 ], [ 115.201446, 36.210214 ], [ 115.202678, 36.209248 ], [ 115.202678, 36.209248 ], [ 115.202678, 36.208765 ], [ 115.202678, 36.208765 ], [ 115.242098, 36.19138 ], [ 115.279055, 36.13775 ], [ 115.30246, 36.127599 ], [ 115.312931, 36.088436 ], [ 115.365902, 36.099074 ], [ 115.376989, 36.128083 ], [ 115.450902, 36.152248 ], [ 115.465068, 36.170125 ], [ 115.483547, 36.148865 ], [ 115.484163, 36.125666 ], [ 115.449054, 36.047317 ], [ 115.447822, 36.01247 ], [ 115.362822, 35.971796 ], [ 115.353583, 35.938854 ], [ 115.364054, 35.894264 ], [ 115.335105, 35.796756 ], [ 115.363438, 35.779765 ], [ 115.407786, 35.80889 ], [ 115.460141, 35.867594 ], [ 115.487858, 35.880688 ], [ 115.513112, 35.890385 ], [ 115.583945, 35.921893 ], [ 115.648618, 35.922863 ], [ 115.699125, 35.966468 ], [ 115.774886, 35.974702 ], [ 115.779813, 35.993588 ], [ 115.817386, 36.012954 ], [ 115.859886, 36.003756 ], [ 115.89869, 36.026507 ], [ 115.989849, 36.045381 ], [ 116.057602, 36.104877 ], [ 116.099486, 36.112129 ], [ 116.063145, 36.028927 ], [ 116.048979, 35.970343 ], [ 115.984921, 35.974218 ], [ 115.911624, 35.960171 ], [ 115.907929, 35.92674 ], [ 115.873436, 35.918985 ], [ 115.882675, 35.879718 ], [ 115.859886, 35.857894 ], [ 115.81677, 35.844312 ], [ 115.773654, 35.854014 ], [ 115.73485, 35.833154 ], [ 115.696046, 35.788989 ], [ 115.693582, 35.754028 ], [ 115.622749, 35.739457 ], [ 115.52851, 35.733628 ], [ 115.48601, 35.710306 ], [ 115.383148, 35.568772 ], [ 115.34496, 35.55368 ], [ 115.356047, 35.490359 ], [ 115.307388, 35.480126 ], [ 115.237171, 35.423087 ], [ 115.172497, 35.426501 ], [ 115.126302, 35.41821 ], [ 115.117679, 35.400163 ], [ 115.091809, 35.416259 ], [ 115.073947, 35.374304 ], [ 115.04315, 35.376744 ], [ 114.957534, 35.261014 ], [ 114.929201, 35.244886 ], [ 114.932281, 35.198441 ], [ 114.861448, 35.182301 ], [ 114.841738, 35.15099 ], [ 114.883006, 35.098615 ], [ 114.835578, 35.076578 ], [ 114.818948, 35.051596 ], [ 114.852209, 35.041797 ], [ 114.824492, 35.012393 ], [ 114.880542, 35.00357 ], [ 114.923658, 34.968757 ], [ 114.950759, 34.989843 ], [ 115.008041, 34.988372 ], [ 115.028983, 34.9717 ], [ 115.075179, 35.000628 ], [ 115.12815, 35.00455 ], [ 115.157099, 34.957968 ], [ 115.219309, 34.96042 ], [ 115.205142, 34.914303 ], [ 115.251953, 34.906451 ], [ 115.239019, 34.87798 ], [ 115.256265, 34.845079 ], [ 115.317243, 34.859321 ], [ 115.42688, 34.805285 ], [ 115.449054, 34.74433 ], [ 115.433655, 34.725149 ], [ 115.461373, 34.637057 ], [ 115.515575, 34.582383 ], [ 115.553148, 34.568586 ], [ 115.622749, 34.574499 ], [ 115.685575, 34.556265 ], [ 115.697278, 34.594207 ], [ 115.787821, 34.580905 ], [ 115.827241, 34.558236 ], [ 115.838328, 34.5676 ], [ 115.984305, 34.589281 ], [ 115.991081, 34.615389 ], [ 116.037276, 34.593222 ], [ 116.101334, 34.60603 ], [ 116.134594, 34.559715 ], [ 116.156768, 34.5538 ], [ 116.196804, 34.575977 ], [ 116.191261, 34.535561 ], [ 116.204196, 34.508442 ], [ 116.178326, 34.496112 ], [ 116.162312, 34.459605 ], [ 116.178942, 34.430487 ], [ 116.215898, 34.403333 ], [ 116.213435, 34.382098 ], [ 116.255934, 34.376665 ], [ 116.301514, 34.342082 ], [ 116.363724, 34.316877 ], [ 116.372347, 34.26595 ], [ 116.409303, 34.273863 ], [ 116.409303, 34.273863 ], [ 116.456731, 34.268917 ], [ 116.516477, 34.296114 ], [ 116.562056, 34.285731 ], [ 116.582382, 34.266444 ], [ 116.545426, 34.241711 ], [ 116.542962, 34.203608 ], [ 116.565752, 34.16945 ], [ 116.536187, 34.151127 ], [ 116.52818, 34.122892 ], [ 116.576223, 34.068873 ], [ 116.576223, 34.068873 ], [ 116.599629, 34.014324 ], [ 116.599629, 34.014324 ], [ 116.641512, 33.978103 ], [ 116.64336, 33.896675 ], [ 116.631042, 33.887733 ], [ 116.566984, 33.9081 ], [ 116.558361, 33.881274 ], [ 116.486296, 33.869846 ], [ 116.437637, 33.846489 ], [ 116.437021, 33.801246 ], [ 116.408071, 33.805721 ], [ 116.393905, 33.782843 ], [ 116.316912, 33.771402 ], [ 116.263326, 33.730101 ], [ 116.2005, 33.72612 ], [ 116.155536, 33.709693 ], [ 116.132747, 33.751501 ], [ 116.100102, 33.782843 ], [ 116.074232, 33.781351 ], [ 116.055754, 33.804727 ], [ 116.05945, 33.860902 ], [ 115.982457, 33.917039 ], [ 116.00032, 33.965199 ], [ 115.95782, 34.007875 ], [ 115.904233, 34.009859 ], [ 115.876516, 34.028708 ], [ 115.877132, 34.002913 ], [ 115.852494, 34.003906 ], [ 115.846335, 34.028708 ], [ 115.809378, 34.062428 ], [ 115.736082, 34.076805 ], [ 115.705901, 34.059949 ], [ 115.658473, 34.061437 ], [ 115.642459, 34.03218 ], [ 115.60735, 34.030196 ], [ 115.579017, 33.974133 ], [ 115.577785, 33.950307 ], [ 115.547604, 33.874815 ], [ 115.631988, 33.869846 ], [ 115.614126, 33.775879 ], [ 115.576553, 33.787817 ], [ 115.563003, 33.772895 ], [ 115.601807, 33.718653 ], [ 115.601191, 33.658898 ], [ 115.639995, 33.585143 ], [ 115.564851, 33.576169 ], [ 115.561771, 33.563703 ], [ 115.463837, 33.567193 ], [ 115.422569, 33.557219 ], [ 115.394851, 33.506335 ], [ 115.366518, 33.5233 ], [ 115.345576, 33.502842 ], [ 115.345576, 33.449928 ], [ 115.316627, 33.44893 ], [ 115.328946, 33.403477 ], [ 115.313547, 33.376994 ], [ 115.341881, 33.370997 ], [ 115.365286, 33.336005 ], [ 115.361591, 33.298497 ], [ 115.335105, 33.297997 ], [ 115.340033, 33.260973 ], [ 115.300613, 33.204407 ], [ 115.303692, 33.149809 ], [ 115.289526, 33.131769 ], [ 115.245178, 33.135778 ], [ 115.194671, 33.120743 ], [ 115.168186, 33.088658 ], [ 115.041302, 33.086653 ], [ 114.990795, 33.102195 ], [ 114.966158, 33.147304 ], [ 114.932897, 33.153817 ], [ 114.902716, 33.129764 ], [ 114.897172, 33.086653 ], [ 114.913187, 33.083143 ], [ 114.925506, 33.016928 ], [ 114.891629, 33.020441 ], [ 114.883006, 32.990328 ], [ 114.916266, 32.971251 ], [ 114.943368, 32.935094 ], [ 115.009273, 32.940117 ], [ 115.035143, 32.932582 ], [ 115.029599, 32.906962 ], [ 115.139237, 32.897917 ], [ 115.155867, 32.864747 ], [ 115.197135, 32.856201 ], [ 115.189744, 32.812452 ], [ 115.211301, 32.785791 ], [ 115.189744, 32.770695 ], [ 115.179273, 32.726402 ], [ 115.182968, 32.666973 ], [ 115.20083, 32.591876 ], [ 115.24333, 32.593388 ], [ 115.267352, 32.578261 ], [ 115.30554, 32.583303 ], [ 115.304924, 32.553042 ], [ 115.411482, 32.575235 ], [ 115.409018, 32.549007 ], [ 115.497713, 32.492489 ], [ 115.5088, 32.468761 ] ] ], [ [ [ 113.768156, 32.284279 ], [ 113.758301, 32.27669 ], [ 113.749061, 32.272642 ], [ 113.768772, 32.30148 ], [ 113.768156, 32.284279 ] ] ] ] } }, +{ "type": "Feature", "properties": { "adcode": "420000", "name": "湖北省", "center": [ 114.298572, 30.584355 ], "centroid": [ 112.271286, 30.987521 ], "childrenNum": 17, "level": "province", "parent": { "adcode": 100000 }, "subFeatureIndex": 16, "acroutes": [ 100000 ] }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 111.045704, 33.169849 ], [ 111.08882, 33.181871 ], [ 111.12824, 33.15532 ], [ 111.146102, 33.12375 ], [ 111.179363, 33.115229 ], [ 111.192913, 33.071609 ], [ 111.152877, 33.039507 ], [ 111.221862, 33.042517 ], [ 111.258819, 33.006389 ], [ 111.273601, 32.971753 ], [ 111.242804, 32.930573 ], [ 111.255123, 32.883846 ], [ 111.276065, 32.903445 ], [ 111.293311, 32.859217 ], [ 111.380159, 32.829049 ], [ 111.41342, 32.757108 ], [ 111.475629, 32.760127 ], [ 111.458383, 32.726402 ], [ 111.513202, 32.674026 ], [ 111.530448, 32.628172 ], [ 111.577875, 32.593388 ], [ 111.640701, 32.634724 ], [ 111.646245, 32.605993 ], [ 111.713382, 32.606497 ], [ 111.808853, 32.536899 ], [ 111.858128, 32.528826 ], [ 111.890157, 32.503089 ], [ 111.948671, 32.51722 ], [ 111.975772, 32.471791 ], [ 112.014576, 32.450077 ], [ 112.063851, 32.474315 ], [ 112.081098, 32.425833 ], [ 112.155626, 32.377326 ], [ 112.150083, 32.411688 ], [ 112.172873, 32.385412 ], [ 112.206133, 32.392992 ], [ 112.328089, 32.321712 ], [ 112.360118, 32.3657 ], [ 112.390915, 32.37126 ], [ 112.448814, 32.34295 ], [ 112.477147, 32.380863 ], [ 112.530733, 32.37682 ], [ 112.545516, 32.404109 ], [ 112.589248, 32.381369 ], [ 112.612037, 32.386928 ], [ 112.645298, 32.368227 ], [ 112.716747, 32.357612 ], [ 112.724138, 32.358623 ], [ 112.733993, 32.356601 ], [ 112.735841, 32.356095 ], [ 112.776493, 32.358623 ], [ 112.860877, 32.396024 ], [ 112.888594, 32.37682 ], [ 112.912, 32.390971 ], [ 112.992072, 32.378336 ], [ 113.000695, 32.41674 ], [ 113.025949, 32.425328 ], [ 113.078919, 32.394508 ], [ 113.107869, 32.398551 ], [ 113.118956, 32.375809 ], [ 113.155912, 32.380863 ], [ 113.158992, 32.410677 ], [ 113.211962, 32.431895 ], [ 113.2366, 32.407141 ], [ 113.333918, 32.336377 ], [ 113.317904, 32.327275 ], [ 113.353628, 32.294904 ], [ 113.376418, 32.298445 ], [ 113.428773, 32.270618 ], [ 113.511925, 32.316654 ], [ 113.624642, 32.36115 ], [ 113.650511, 32.412698 ], [ 113.700402, 32.420782 ], [ 113.735511, 32.410677 ], [ 113.76754, 32.370249 ], [ 113.753989, 32.328286 ], [ 113.768772, 32.30148 ], [ 113.749061, 32.272642 ], [ 113.73859, 32.255942 ], [ 113.752757, 32.215951 ], [ 113.782322, 32.184553 ], [ 113.750293, 32.11615 ], [ 113.722576, 32.12426 ], [ 113.728735, 32.083197 ], [ 113.791561, 32.036028 ], [ 113.757685, 31.98985 ], [ 113.817431, 31.964467 ], [ 113.805728, 31.929428 ], [ 113.832213, 31.918761 ], [ 113.830981, 31.87913 ], [ 113.854387, 31.843042 ], [ 113.893807, 31.847109 ], [ 113.914749, 31.877098 ], [ 113.957865, 31.852701 ], [ 113.952321, 31.793714 ], [ 113.988662, 31.749959 ], [ 114.017611, 31.770822 ], [ 114.089676, 31.781506 ], [ 114.119241, 31.805922 ], [ 114.134024, 31.843042 ], [ 114.191922, 31.852192 ], [ 114.235654, 31.833382 ], [ 114.292936, 31.752503 ], [ 114.350218, 31.755557 ], [ 114.403189, 31.746906 ], [ 114.443841, 31.728074 ], [ 114.530688, 31.742834 ], [ 114.549783, 31.766751 ], [ 114.586123, 31.762172 ], [ 114.57134, 31.660858 ], [ 114.547935, 31.623665 ], [ 114.560869, 31.560963 ], [ 114.572572, 31.553824 ], [ 114.61692, 31.585437 ], [ 114.641558, 31.582378 ], [ 114.696376, 31.525771 ], [ 114.778912, 31.520669 ], [ 114.789383, 31.480358 ], [ 114.830035, 31.45892 ], [ 114.870071, 31.479337 ], [ 114.884238, 31.469129 ], [ 114.962462, 31.494648 ], [ 114.995107, 31.471171 ], [ 115.022824, 31.527811 ], [ 115.096121, 31.508425 ], [ 115.114599, 31.530362 ], [ 115.106592, 31.567592 ], [ 115.12507, 31.599201 ], [ 115.16449, 31.604808 ], [ 115.212533, 31.555354 ], [ 115.235939, 31.555354 ], [ 115.218077, 31.515057 ], [ 115.211301, 31.442072 ], [ 115.252569, 31.421646 ], [ 115.250722, 31.392021 ], [ 115.301229, 31.383846 ], [ 115.338801, 31.40428 ], [ 115.373909, 31.405813 ], [ 115.393004, 31.389977 ], [ 115.372062, 31.349098 ], [ 115.40717, 31.337854 ], [ 115.443511, 31.344498 ], [ 115.473076, 31.265242 ], [ 115.507568, 31.267799 ], [ 115.539597, 31.231985 ], [ 115.540213, 31.194621 ], [ 115.585793, 31.143926 ], [ 115.603655, 31.17363 ], [ 115.655394, 31.211002 ], [ 115.700973, 31.201276 ], [ 115.778582, 31.112164 ], [ 115.797676, 31.128047 ], [ 115.837712, 31.127022 ], [ 115.867277, 31.147512 ], [ 115.887603, 31.10909 ], [ 115.939958, 31.071678 ], [ 115.938726, 31.04707 ], [ 116.006479, 31.034764 ], [ 116.015102, 31.011685 ], [ 116.058834, 31.012711 ], [ 116.071769, 30.956787 ], [ 116.03974, 30.957813 ], [ 115.976298, 30.931636 ], [ 115.932566, 30.889532 ], [ 115.865429, 30.864364 ], [ 115.848799, 30.828397 ], [ 115.863581, 30.815549 ], [ 115.851262, 30.756938 ], [ 115.782893, 30.751795 ], [ 115.762567, 30.685426 ], [ 115.81369, 30.637035 ], [ 115.819234, 30.597893 ], [ 115.848799, 30.602014 ], [ 115.876516, 30.582438 ], [ 115.887603, 30.542758 ], [ 115.910393, 30.519046 ], [ 115.894994, 30.452517 ], [ 115.921479, 30.416397 ], [ 115.885139, 30.379747 ], [ 115.91532, 30.337919 ], [ 115.903001, 30.31364 ], [ 115.985537, 30.290905 ], [ 115.997856, 30.252657 ], [ 116.065609, 30.204569 ], [ 116.055754, 30.180774 ], [ 116.088399, 30.110391 ], [ 116.078544, 30.062233 ], [ 116.091479, 30.036331 ], [ 116.073616, 29.969993 ], [ 116.128435, 29.897904 ], [ 116.13521, 29.819532 ], [ 116.087167, 29.795125 ], [ 116.049595, 29.761881 ], [ 115.965827, 29.724469 ], [ 115.909777, 29.723949 ], [ 115.837096, 29.748373 ], [ 115.762567, 29.793048 ], [ 115.706517, 29.837703 ], [ 115.667712, 29.850161 ], [ 115.611662, 29.841337 ], [ 115.51188, 29.840299 ], [ 115.479235, 29.811224 ], [ 115.470612, 29.739539 ], [ 115.412714, 29.688602 ], [ 115.355431, 29.649602 ], [ 115.304924, 29.637118 ], [ 115.28583, 29.618391 ], [ 115.250722, 29.660003 ], [ 115.176809, 29.654803 ], [ 115.113367, 29.684963 ], [ 115.117679, 29.655843 ], [ 115.143548, 29.645961 ], [ 115.120142, 29.597578 ], [ 115.157099, 29.584568 ], [ 115.154019, 29.510117 ], [ 115.086266, 29.525741 ], [ 115.087498, 29.560104 ], [ 115.033295, 29.546568 ], [ 115.00065, 29.572076 ], [ 114.947679, 29.542924 ], [ 114.966773, 29.522096 ], [ 114.940288, 29.493971 ], [ 114.900868, 29.505951 ], [ 114.860216, 29.476258 ], [ 114.888549, 29.436134 ], [ 114.918114, 29.454374 ], [ 114.90518, 29.473132 ], [ 114.935977, 29.486678 ], [ 114.947063, 29.465317 ], [ 114.931049, 29.422581 ], [ 114.895325, 29.397557 ], [ 114.866375, 29.404335 ], [ 114.812173, 29.383478 ], [ 114.784455, 29.386086 ], [ 114.759818, 29.363139 ], [ 114.740724, 29.386607 ], [ 114.67297, 29.395993 ], [ 114.621847, 29.379828 ], [ 114.589819, 29.352707 ], [ 114.519602, 29.325578 ], [ 114.466015, 29.324013 ], [ 114.440145, 29.341752 ], [ 114.376088, 29.322969 ], [ 114.341595, 29.327665 ], [ 114.307102, 29.365225 ], [ 114.259059, 29.343839 ], [ 114.252284, 29.23475 ], [ 114.169748, 29.216993 ], [ 114.063191, 29.204978 ], [ 114.034857, 29.152204 ], [ 113.98743, 29.126068 ], [ 113.952321, 29.092604 ], [ 113.94185, 29.047097 ], [ 113.898119, 29.029307 ], [ 113.876561, 29.038202 ], [ 113.882104, 29.065407 ], [ 113.852539, 29.058606 ], [ 113.816199, 29.105154 ], [ 113.775547, 29.095219 ], [ 113.749677, 29.060699 ], [ 113.722576, 29.104631 ], [ 113.696091, 29.077437 ], [ 113.690547, 29.114566 ], [ 113.66283, 29.16945 ], [ 113.691779, 29.19662 ], [ 113.693011, 29.226394 ], [ 113.651743, 29.225872 ], [ 113.609859, 29.25146 ], [ 113.632033, 29.316186 ], [ 113.660982, 29.333405 ], [ 113.674533, 29.388172 ], [ 113.731199, 29.393907 ], [ 113.755221, 29.446557 ], [ 113.677613, 29.513763 ], [ 113.630801, 29.523137 ], [ 113.710257, 29.555419 ], [ 113.73859, 29.579363 ], [ 113.704098, 29.634518 ], [ 113.680692, 29.64336 ], [ 113.663446, 29.684443 ], [ 113.606164, 29.666764 ], [ 113.547033, 29.675603 ], [ 113.540258, 29.699519 ], [ 113.558736, 29.727067 ], [ 113.550729, 29.768115 ], [ 113.575367, 29.809147 ], [ 113.571671, 29.849123 ], [ 113.37765, 29.703158 ], [ 113.277252, 29.594976 ], [ 113.222433, 29.543965 ], [ 113.181781, 29.485636 ], [ 113.145441, 29.449163 ], [ 113.099861, 29.459585 ], [ 113.078304, 29.438218 ], [ 113.057362, 29.522616 ], [ 113.034572, 29.523658 ], [ 112.950188, 29.473132 ], [ 112.912, 29.606944 ], [ 112.915696, 29.620992 ], [ 113.005007, 29.693801 ], [ 113.025949, 29.772791 ], [ 112.974826, 29.732784 ], [ 112.944645, 29.682883 ], [ 112.926782, 29.692241 ], [ 112.923703, 29.766557 ], [ 112.929246, 29.77383 ], [ 112.902145, 29.79149 ], [ 112.894138, 29.783699 ], [ 112.861493, 29.78318 ], [ 112.79374, 29.735902 ], [ 112.788812, 29.681323 ], [ 112.733378, 29.645441 ], [ 112.714283, 29.648561 ], [ 112.693957, 29.601741 ], [ 112.650842, 29.592374 ], [ 112.640371, 29.607985 ], [ 112.572001, 29.624113 ], [ 112.54182, 29.60122 ], [ 112.499321, 29.629316 ], [ 112.439574, 29.633997 ], [ 112.424792, 29.598619 ], [ 112.368741, 29.541362 ], [ 112.333017, 29.545007 ], [ 112.291133, 29.517409 ], [ 112.281278, 29.536676 ], [ 112.303452, 29.585609 ], [ 112.233851, 29.61631 ], [ 112.244322, 29.659483 ], [ 112.202438, 29.633997 ], [ 112.178416, 29.656883 ], [ 112.111279, 29.659483 ], [ 112.089721, 29.685482 ], [ 112.065699, 29.681323 ], [ 112.07617, 29.743696 ], [ 112.008417, 29.778505 ], [ 111.95483, 29.796683 ], [ 111.965917, 29.832512 ], [ 111.925881, 29.836665 ], [ 111.899396, 29.855871 ], [ 111.899396, 29.855871 ], [ 111.861207, 29.856909 ], [ 111.8107, 29.901017 ], [ 111.75773, 29.92021 ], [ 111.723853, 29.909317 ], [ 111.723853, 29.909317 ], [ 111.705375, 29.890121 ], [ 111.669034, 29.888565 ], [ 111.669034, 29.888565 ], [ 111.553854, 29.894272 ], [ 111.527368, 29.925916 ], [ 111.475629, 29.918654 ], [ 111.436825, 29.930065 ], [ 111.394325, 29.912948 ], [ 111.382623, 29.95029 ], [ 111.342587, 29.944586 ], [ 111.3315, 29.970512 ], [ 111.266826, 30.01146 ], [ 111.242188, 30.040476 ], [ 111.031537, 30.048765 ], [ 110.929907, 30.063268 ], [ 110.924364, 30.111426 ], [ 110.851067, 30.126439 ], [ 110.746973, 30.112979 ], [ 110.756212, 30.054463 ], [ 110.712481, 30.033223 ], [ 110.650887, 30.07777 ], [ 110.600996, 30.054463 ], [ 110.531394, 30.061197 ], [ 110.497518, 30.055499 ], [ 110.491358, 30.019751 ], [ 110.557264, 29.988137 ], [ 110.517228, 29.961179 ], [ 110.49875, 29.91243 ], [ 110.538786, 29.895828 ], [ 110.549873, 29.848085 ], [ 110.60038, 29.839779 ], [ 110.642879, 29.775907 ], [ 110.562807, 29.712515 ], [ 110.507373, 29.692241 ], [ 110.467337, 29.713034 ], [ 110.447011, 29.664684 ], [ 110.372482, 29.633477 ], [ 110.339221, 29.668324 ], [ 110.302265, 29.661563 ], [ 110.289946, 29.6964 ], [ 110.219729, 29.746814 ], [ 110.160599, 29.753569 ], [ 110.113788, 29.789932 ], [ 110.02386, 29.769674 ], [ 109.941325, 29.774349 ], [ 109.908064, 29.763959 ], [ 109.869876, 29.774869 ], [ 109.779333, 29.757725 ], [ 109.755311, 29.733304 ], [ 109.760238, 29.689122 ], [ 109.714659, 29.673524 ], [ 109.701108, 29.636078 ], [ 109.717739, 29.615269 ], [ 109.664768, 29.599659 ], [ 109.651833, 29.625674 ], [ 109.578536, 29.629836 ], [ 109.558826, 29.606944 ], [ 109.516326, 29.626194 ], [ 109.488609, 29.553336 ], [ 109.467051, 29.560104 ], [ 109.458428, 29.513242 ], [ 109.433791, 29.530948 ], [ 109.436254, 29.488761 ], [ 109.415928, 29.497617 ], [ 109.418392, 29.453332 ], [ 109.368501, 29.413719 ], [ 109.391291, 29.372005 ], [ 109.343863, 29.369398 ], [ 109.352487, 29.284872 ], [ 109.312451, 29.25146 ], [ 109.257632, 29.222738 ], [ 109.275494, 29.202366 ], [ 109.261328, 29.161089 ], [ 109.274262, 29.121885 ], [ 109.232378, 29.119271 ], [ 109.215748, 29.145409 ], [ 109.162777, 29.180946 ], [ 109.139372, 29.168927 ], [ 109.110422, 29.21647 ], [ 109.141835, 29.270256 ], [ 109.106727, 29.288526 ], [ 109.11227, 29.361053 ], [ 109.060531, 29.403292 ], [ 109.034662, 29.360531 ], [ 108.999553, 29.36366 ], [ 108.983539, 29.332883 ], [ 108.919481, 29.3261 ], [ 108.934264, 29.399643 ], [ 108.927488, 29.435612 ], [ 108.884373, 29.440824 ], [ 108.866511, 29.470527 ], [ 108.888684, 29.502305 ], [ 108.878213, 29.539279 ], [ 108.913322, 29.574679 ], [ 108.901003, 29.604863 ], [ 108.870206, 29.596537 ], [ 108.888068, 29.628795 ], [ 108.844337, 29.658443 ], [ 108.781511, 29.635558 ], [ 108.797525, 29.660003 ], [ 108.786438, 29.691721 ], [ 108.752562, 29.649082 ], [ 108.690968, 29.689642 ], [ 108.676801, 29.749412 ], [ 108.680497, 29.800319 ], [ 108.658939, 29.854833 ], [ 108.601041, 29.863656 ], [ 108.556077, 29.818493 ], [ 108.52528, 29.770713 ], [ 108.548686, 29.749412 ], [ 108.504954, 29.728626 ], [ 108.504338, 29.707836 ], [ 108.460606, 29.741098 ], [ 108.437201, 29.741098 ], [ 108.442744, 29.778505 ], [ 108.422418, 29.772791 ], [ 108.424266, 29.815897 ], [ 108.371295, 29.841337 ], [ 108.433505, 29.880262 ], [ 108.467998, 29.864175 ], [ 108.516041, 29.885451 ], [ 108.517889, 29.9394 ], [ 108.536367, 29.983472 ], [ 108.532055, 30.051873 ], [ 108.513577, 30.057571 ], [ 108.546222, 30.104178 ], [ 108.56778, 30.157491 ], [ 108.551766, 30.1637 ], [ 108.581947, 30.255759 ], [ 108.54499, 30.269716 ], [ 108.524048, 30.309506 ], [ 108.501258, 30.314673 ], [ 108.460606, 30.35961 ], [ 108.431041, 30.354446 ], [ 108.402092, 30.376649 ], [ 108.430425, 30.416397 ], [ 108.411331, 30.438586 ], [ 108.42673, 30.492233 ], [ 108.472925, 30.487076 ], [ 108.512961, 30.501515 ], [ 108.556077, 30.487592 ], [ 108.56778, 30.468508 ], [ 108.6497, 30.53915 ], [ 108.642925, 30.578831 ], [ 108.688504, 30.58759 ], [ 108.698975, 30.54482 ], [ 108.743939, 30.494812 ], [ 108.789518, 30.513374 ], [ 108.808612, 30.491202 ], [ 108.838793, 30.503062 ], [ 108.893612, 30.565434 ], [ 108.971836, 30.627766 ], [ 109.006329, 30.626736 ], [ 109.042669, 30.655571 ], [ 109.071002, 30.640125 ], [ 109.111654, 30.646303 ], [ 109.106111, 30.61077 ], [ 109.09256, 30.578831 ], [ 109.103647, 30.565949 ], [ 109.143683, 30.521108 ], [ 109.191726, 30.545851 ], [ 109.191726, 30.545851 ], [ 109.245313, 30.580892 ], [ 109.299516, 30.630341 ], [ 109.314298, 30.599953 ], [ 109.36111, 30.551004 ], [ 109.337088, 30.521623 ], [ 109.35495, 30.487076 ], [ 109.418392, 30.559766 ], [ 109.435638, 30.595832 ], [ 109.535421, 30.664837 ], [ 109.543428, 30.63961 ], [ 109.574225, 30.646818 ], [ 109.590855, 30.69366 ], [ 109.625348, 30.702923 ], [ 109.661072, 30.738936 ], [ 109.656761, 30.760538 ], [ 109.701724, 30.783677 ], [ 109.780564, 30.848437 ], [ 109.828608, 30.864364 ], [ 109.894513, 30.899803 ], [ 109.943788, 30.878746 ], [ 110.008462, 30.883369 ], [ 110.019549, 30.829425 ], [ 110.048498, 30.800642 ], [ 110.082375, 30.799614 ], [ 110.151976, 30.911613 ], [ 110.153824, 30.953708 ], [ 110.172918, 30.978853 ], [ 110.140889, 30.987062 ], [ 110.140273, 31.030661 ], [ 110.120563, 31.0322 ], [ 110.119947, 31.088592 ], [ 110.147048, 31.116776 ], [ 110.180309, 31.121899 ], [ 110.200019, 31.158779 ], [ 110.180309, 31.179774 ], [ 110.155671, 31.279564 ], [ 110.161831, 31.314338 ], [ 110.118715, 31.409899 ], [ 110.054042, 31.410921 ], [ 110.036795, 31.436966 ], [ 109.98752, 31.474744 ], [ 109.94502, 31.47066 ], [ 109.969658, 31.508935 ], [ 109.894513, 31.519139 ], [ 109.837847, 31.555354 ], [ 109.727594, 31.548214 ], [ 109.745456, 31.598182 ], [ 109.76455, 31.602769 ], [ 109.737449, 31.628761 ], [ 109.731289, 31.700582 ], [ 109.683246, 31.719929 ], [ 109.622268, 31.711783 ], [ 109.585928, 31.726546 ], [ 109.592087, 31.789136 ], [ 109.633971, 31.804396 ], [ 109.633971, 31.824738 ], [ 109.60379, 31.885737 ], [ 109.584696, 31.900472 ], [ 109.62042, 31.928412 ], [ 109.631507, 31.962436 ], [ 109.590855, 32.012688 ], [ 109.590855, 32.047696 ], [ 109.621652, 32.106519 ], [ 109.58716, 32.161251 ], [ 109.604406, 32.199241 ], [ 109.592703, 32.219495 ], [ 109.550203, 32.225065 ], [ 109.528645, 32.270112 ], [ 109.495385, 32.300468 ], [ 109.513247, 32.342444 ], [ 109.502776, 32.38895 ], [ 109.529877, 32.405625 ], [ 109.526797, 32.43341 ], [ 109.575457, 32.506622 ], [ 109.637051, 32.540935 ], [ 109.619804, 32.56767 ], [ 109.631507, 32.599943 ], [ 109.726978, 32.608513 ], [ 109.746072, 32.594901 ], [ 109.816905, 32.577252 ], [ 109.910528, 32.592884 ], [ 109.97089, 32.577756 ], [ 110.017701, 32.546989 ], [ 110.084223, 32.580782 ], [ 110.090382, 32.617083 ], [ 110.124259, 32.616579 ], [ 110.153824, 32.593388 ], [ 110.206179, 32.633212 ], [ 110.156903, 32.683093 ], [ 110.159367, 32.767173 ], [ 110.127338, 32.77774 ], [ 110.142121, 32.802895 ], [ 110.105164, 32.832569 ], [ 110.051578, 32.851676 ], [ 109.988752, 32.886359 ], [ 109.927158, 32.887364 ], [ 109.907448, 32.903947 ], [ 109.856941, 32.910479 ], [ 109.847702, 32.893395 ], [ 109.789804, 32.882339 ], [ 109.76455, 32.909474 ], [ 109.785492, 32.987316 ], [ 109.794731, 33.067095 ], [ 109.704188, 33.101694 ], [ 109.688174, 33.116733 ], [ 109.576073, 33.110216 ], [ 109.522486, 33.138785 ], [ 109.468283, 33.140288 ], [ 109.438718, 33.152314 ], [ 109.498464, 33.207412 ], [ 109.514479, 33.237951 ], [ 109.60687, 33.235949 ], [ 109.619804, 33.275484 ], [ 109.649985, 33.251465 ], [ 109.693101, 33.254468 ], [ 109.732521, 33.231443 ], [ 109.813209, 33.236449 ], [ 109.852013, 33.247961 ], [ 109.916687, 33.229942 ], [ 109.973353, 33.203907 ], [ 109.999223, 33.212419 ], [ 110.031252, 33.191888 ], [ 110.164911, 33.209415 ], [ 110.218497, 33.163336 ], [ 110.285635, 33.171352 ], [ 110.33799, 33.160331 ], [ 110.372482, 33.186379 ], [ 110.398352, 33.176862 ], [ 110.398352, 33.176862 ], [ 110.471032, 33.171352 ], [ 110.54125, 33.255469 ], [ 110.57759, 33.250464 ], [ 110.59422, 33.168346 ], [ 110.623785, 33.143796 ], [ 110.650887, 33.157324 ], [ 110.702626, 33.097182 ], [ 110.753133, 33.15031 ], [ 110.824582, 33.158327 ], [ 110.828893, 33.201403 ], [ 110.865234, 33.213921 ], [ 110.9219, 33.203907 ], [ 110.960704, 33.253967 ], [ 110.984726, 33.255469 ], [ 111.046936, 33.202905 ], [ 111.035849, 33.187881 ], [ 111.034001, 33.177864 ], [ 111.045704, 33.169849 ] ] ], [ [ [ 109.106111, 30.570587 ], [ 109.09872, 30.579346 ], [ 109.101183, 30.579346 ], [ 109.106111, 30.570587 ] ] ], [ [ [ 111.046936, 33.202905 ], [ 111.045704, 33.169849 ], [ 111.034001, 33.177864 ], [ 111.035849, 33.187881 ], [ 111.046936, 33.202905 ] ] ], [ [ [ 112.716747, 32.357612 ], [ 112.735841, 32.356095 ], [ 112.733993, 32.356601 ], [ 112.724138, 32.358623 ], [ 112.716747, 32.357612 ] ] ], [ [ [ 112.902145, 29.79149 ], [ 112.929246, 29.77383 ], [ 112.923703, 29.766557 ], [ 112.894138, 29.783699 ], [ 112.902145, 29.79149 ] ] ] ] } }, +{ "type": "Feature", "properties": { "adcode": "430000", "name": "湖南省", "center": [ 112.982279, 28.19409 ], "centroid": [ 111.711649, 27.629221 ], "childrenNum": 14, "level": "province", "parent": { "adcode": 100000 }, "subFeatureIndex": 17, "acroutes": [ 100000 ] }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 109.48245, 26.029788 ], [ 109.452885, 26.055598 ], [ 109.449805, 26.101826 ], [ 109.502776, 26.096451 ], [ 109.513863, 26.128157 ], [ 109.47629, 26.148035 ], [ 109.439334, 26.238789 ], [ 109.467051, 26.313917 ], [ 109.442414, 26.289774 ], [ 109.369733, 26.277432 ], [ 109.351255, 26.264016 ], [ 109.325385, 26.29031 ], [ 109.285965, 26.295676 ], [ 109.271183, 26.327863 ], [ 109.29582, 26.350389 ], [ 109.319842, 26.418477 ], [ 109.38082, 26.454381 ], [ 109.362342, 26.472061 ], [ 109.385747, 26.493487 ], [ 109.381436, 26.518659 ], [ 109.407305, 26.533116 ], [ 109.390675, 26.598955 ], [ 109.35495, 26.658873 ], [ 109.334008, 26.646036 ], [ 109.306291, 26.661012 ], [ 109.283501, 26.698445 ], [ 109.35495, 26.693098 ], [ 109.407305, 26.719829 ], [ 109.447957, 26.759913 ], [ 109.486761, 26.759913 ], [ 109.52187, 26.749226 ], [ 109.528645, 26.743881 ], [ 109.568065, 26.726243 ], [ 109.597015, 26.756173 ], [ 109.554515, 26.73533 ], [ 109.528645, 26.743881 ], [ 109.522486, 26.749226 ], [ 109.497232, 26.815474 ], [ 109.513247, 26.84004 ], [ 109.509551, 26.877947 ], [ 109.486761, 26.895562 ], [ 109.452885, 26.861932 ], [ 109.436254, 26.892359 ], [ 109.555131, 26.946788 ], [ 109.520022, 27.058764 ], [ 109.497848, 27.079548 ], [ 109.486761, 27.053968 ], [ 109.454733, 27.069423 ], [ 109.472595, 27.134951 ], [ 109.441182, 27.117907 ], [ 109.415312, 27.154123 ], [ 109.358646, 27.153058 ], [ 109.33524, 27.139212 ], [ 109.264407, 27.131755 ], [ 109.239154, 27.14933 ], [ 109.21698, 27.114711 ], [ 109.165857, 27.066758 ], [ 109.101183, 27.06889 ], [ 109.128901, 27.122701 ], [ 109.032814, 27.104056 ], [ 109.007561, 27.08008 ], [ 108.940423, 27.044907 ], [ 108.942887, 27.017186 ], [ 108.942887, 27.017186 ], [ 108.877597, 27.01612 ], [ 108.79075, 27.084343 ], [ 108.878829, 27.106187 ], [ 108.926873, 27.160512 ], [ 108.907778, 27.204699 ], [ 108.963213, 27.235565 ], [ 108.983539, 27.26802 ], [ 109.053756, 27.293551 ], [ 109.044517, 27.331304 ], [ 109.103647, 27.336621 ], [ 109.142451, 27.418461 ], [ 109.141835, 27.448207 ], [ 109.167089, 27.41793 ], [ 109.202197, 27.450331 ], [ 109.245313, 27.41793 ], [ 109.300132, 27.423774 ], [ 109.303211, 27.47582 ], [ 109.404841, 27.55066 ], [ 109.461508, 27.567637 ], [ 109.451037, 27.586204 ], [ 109.470131, 27.62863 ], [ 109.45658, 27.673689 ], [ 109.470747, 27.680049 ], [ 109.414081, 27.725087 ], [ 109.366653, 27.721909 ], [ 109.37774, 27.736741 ], [ 109.332777, 27.782815 ], [ 109.346943, 27.838396 ], [ 109.32169, 27.868027 ], [ 109.30198, 27.956343 ], [ 109.319842, 27.988585 ], [ 109.362342, 28.007608 ], [ 109.378972, 28.034551 ], [ 109.335856, 28.063073 ], [ 109.298284, 28.036136 ], [ 109.314298, 28.103729 ], [ 109.33832, 28.141731 ], [ 109.340168, 28.19027 ], [ 109.367885, 28.254602 ], [ 109.388211, 28.268307 ], [ 109.33524, 28.293605 ], [ 109.317994, 28.277795 ], [ 109.275494, 28.313101 ], [ 109.268719, 28.33786 ], [ 109.289045, 28.373673 ], [ 109.264407, 28.392628 ], [ 109.260712, 28.46473 ], [ 109.274262, 28.494714 ], [ 109.273646, 28.53836 ], [ 109.319842, 28.579886 ], [ 109.306907, 28.62087 ], [ 109.252089, 28.606685 ], [ 109.235458, 28.61982 ], [ 109.201581, 28.597753 ], [ 109.192958, 28.636104 ], [ 109.271183, 28.671816 ], [ 109.252704, 28.691767 ], [ 109.294588, 28.722211 ], [ 109.2989, 28.7474 ], [ 109.241002, 28.776779 ], [ 109.246545, 28.80143 ], [ 109.235458, 28.882161 ], [ 109.261328, 28.952356 ], [ 109.292741, 28.987436 ], [ 109.294588, 29.015177 ], [ 109.319842, 29.042388 ], [ 109.312451, 29.066453 ], [ 109.240386, 29.086328 ], [ 109.232378, 29.119271 ], [ 109.274262, 29.121885 ], [ 109.261328, 29.161089 ], [ 109.275494, 29.202366 ], [ 109.257632, 29.222738 ], [ 109.312451, 29.25146 ], [ 109.352487, 29.284872 ], [ 109.343863, 29.369398 ], [ 109.391291, 29.372005 ], [ 109.368501, 29.413719 ], [ 109.418392, 29.453332 ], [ 109.415928, 29.497617 ], [ 109.436254, 29.488761 ], [ 109.433791, 29.530948 ], [ 109.458428, 29.513242 ], [ 109.467051, 29.560104 ], [ 109.488609, 29.553336 ], [ 109.516326, 29.626194 ], [ 109.558826, 29.606944 ], [ 109.578536, 29.629836 ], [ 109.651833, 29.625674 ], [ 109.664768, 29.599659 ], [ 109.717739, 29.615269 ], [ 109.701108, 29.636078 ], [ 109.714659, 29.673524 ], [ 109.760238, 29.689122 ], [ 109.755311, 29.733304 ], [ 109.779333, 29.757725 ], [ 109.869876, 29.774869 ], [ 109.908064, 29.763959 ], [ 109.941325, 29.774349 ], [ 110.02386, 29.769674 ], [ 110.113788, 29.789932 ], [ 110.160599, 29.753569 ], [ 110.219729, 29.746814 ], [ 110.289946, 29.6964 ], [ 110.302265, 29.661563 ], [ 110.339221, 29.668324 ], [ 110.372482, 29.633477 ], [ 110.447011, 29.664684 ], [ 110.467337, 29.713034 ], [ 110.507373, 29.692241 ], [ 110.562807, 29.712515 ], [ 110.642879, 29.775907 ], [ 110.60038, 29.839779 ], [ 110.549873, 29.848085 ], [ 110.538786, 29.895828 ], [ 110.49875, 29.91243 ], [ 110.517228, 29.961179 ], [ 110.557264, 29.988137 ], [ 110.491358, 30.019751 ], [ 110.497518, 30.055499 ], [ 110.531394, 30.061197 ], [ 110.600996, 30.054463 ], [ 110.650887, 30.07777 ], [ 110.712481, 30.033223 ], [ 110.756212, 30.054463 ], [ 110.746973, 30.112979 ], [ 110.851067, 30.126439 ], [ 110.924364, 30.111426 ], [ 110.929907, 30.063268 ], [ 111.031537, 30.048765 ], [ 111.242188, 30.040476 ], [ 111.266826, 30.01146 ], [ 111.3315, 29.970512 ], [ 111.342587, 29.944586 ], [ 111.382623, 29.95029 ], [ 111.394325, 29.912948 ], [ 111.436825, 29.930065 ], [ 111.475629, 29.918654 ], [ 111.527368, 29.925916 ], [ 111.553854, 29.894272 ], [ 111.669034, 29.888565 ], [ 111.669034, 29.888565 ], [ 111.705375, 29.890121 ], [ 111.723853, 29.909317 ], [ 111.723853, 29.909317 ], [ 111.75773, 29.92021 ], [ 111.8107, 29.901017 ], [ 111.861207, 29.856909 ], [ 111.899396, 29.855871 ], [ 111.899396, 29.855871 ], [ 111.925881, 29.836665 ], [ 111.965917, 29.832512 ], [ 111.95483, 29.796683 ], [ 112.008417, 29.778505 ], [ 112.07617, 29.743696 ], [ 112.065699, 29.681323 ], [ 112.089721, 29.685482 ], [ 112.111279, 29.659483 ], [ 112.178416, 29.656883 ], [ 112.202438, 29.633997 ], [ 112.244322, 29.659483 ], [ 112.233851, 29.61631 ], [ 112.303452, 29.585609 ], [ 112.281278, 29.536676 ], [ 112.291133, 29.517409 ], [ 112.333017, 29.545007 ], [ 112.368741, 29.541362 ], [ 112.424792, 29.598619 ], [ 112.439574, 29.633997 ], [ 112.499321, 29.629316 ], [ 112.54182, 29.60122 ], [ 112.572001, 29.624113 ], [ 112.640371, 29.607985 ], [ 112.650842, 29.592374 ], [ 112.693957, 29.601741 ], [ 112.714283, 29.648561 ], [ 112.733378, 29.645441 ], [ 112.788812, 29.681323 ], [ 112.79374, 29.735902 ], [ 112.861493, 29.78318 ], [ 112.894138, 29.783699 ], [ 112.923703, 29.766557 ], [ 112.926782, 29.692241 ], [ 112.944645, 29.682883 ], [ 112.974826, 29.732784 ], [ 113.025949, 29.772791 ], [ 113.005007, 29.693801 ], [ 112.915696, 29.620992 ], [ 112.912, 29.606944 ], [ 112.950188, 29.473132 ], [ 113.034572, 29.523658 ], [ 113.057362, 29.522616 ], [ 113.078304, 29.438218 ], [ 113.099861, 29.459585 ], [ 113.145441, 29.449163 ], [ 113.181781, 29.485636 ], [ 113.222433, 29.543965 ], [ 113.277252, 29.594976 ], [ 113.37765, 29.703158 ], [ 113.571671, 29.849123 ], [ 113.575367, 29.809147 ], [ 113.550729, 29.768115 ], [ 113.558736, 29.727067 ], [ 113.540258, 29.699519 ], [ 113.547033, 29.675603 ], [ 113.606164, 29.666764 ], [ 113.663446, 29.684443 ], [ 113.680692, 29.64336 ], [ 113.704098, 29.634518 ], [ 113.73859, 29.579363 ], [ 113.710257, 29.555419 ], [ 113.630801, 29.523137 ], [ 113.677613, 29.513763 ], [ 113.755221, 29.446557 ], [ 113.731199, 29.393907 ], [ 113.674533, 29.388172 ], [ 113.660982, 29.333405 ], [ 113.632033, 29.316186 ], [ 113.609859, 29.25146 ], [ 113.651743, 29.225872 ], [ 113.693011, 29.226394 ], [ 113.691779, 29.19662 ], [ 113.66283, 29.16945 ], [ 113.690547, 29.114566 ], [ 113.696091, 29.077437 ], [ 113.722576, 29.104631 ], [ 113.749677, 29.060699 ], [ 113.775547, 29.095219 ], [ 113.816199, 29.105154 ], [ 113.852539, 29.058606 ], [ 113.882104, 29.065407 ], [ 113.876561, 29.038202 ], [ 113.898119, 29.029307 ], [ 113.94185, 29.047097 ], [ 113.961561, 28.999476 ], [ 113.955401, 28.978536 ], [ 113.973879, 28.937692 ], [ 114.008988, 28.955498 ], [ 114.005292, 28.917788 ], [ 114.028082, 28.891069 ], [ 114.060111, 28.902596 ], [ 114.056415, 28.872204 ], [ 114.076741, 28.834464 ], [ 114.124784, 28.843376 ], [ 114.153734, 28.829221 ], [ 114.137719, 28.779926 ], [ 114.157429, 28.761566 ], [ 114.122321, 28.623497 ], [ 114.132176, 28.607211 ], [ 114.08598, 28.558337 ], [ 114.138335, 28.533629 ], [ 114.15435, 28.507337 ], [ 114.218407, 28.48472 ], [ 114.217175, 28.466308 ], [ 114.172212, 28.432632 ], [ 114.214712, 28.403157 ], [ 114.252284, 28.395787 ], [ 114.2529, 28.319423 ], [ 114.198081, 28.29097 ], [ 114.182067, 28.249858 ], [ 114.143879, 28.246694 ], [ 114.109386, 28.205038 ], [ 114.107538, 28.182885 ], [ 114.068734, 28.171806 ], [ 114.012068, 28.174972 ], [ 113.992357, 28.161255 ], [ 114.025002, 28.080499 ], [ 114.047176, 28.057263 ], [ 114.025618, 28.031382 ], [ 113.970184, 28.041418 ], [ 113.966488, 28.017646 ], [ 113.936307, 28.018703 ], [ 113.914133, 27.991227 ], [ 113.864242, 28.004966 ], [ 113.845148, 27.971672 ], [ 113.822974, 27.982243 ], [ 113.752141, 27.93361 ], [ 113.72812, 27.874904 ], [ 113.756453, 27.860091 ], [ 113.763228, 27.799228 ], [ 113.69917, 27.740979 ], [ 113.696707, 27.71979 ], [ 113.652359, 27.663619 ], [ 113.607395, 27.625449 ], [ 113.608627, 27.585143 ], [ 113.579062, 27.545354 ], [ 113.583374, 27.524657 ], [ 113.627105, 27.49971 ], [ 113.591381, 27.467855 ], [ 113.59754, 27.428554 ], [ 113.632033, 27.40518 ], [ 113.605548, 27.38924 ], [ 113.616635, 27.345658 ], [ 113.657902, 27.347253 ], [ 113.699786, 27.331836 ], [ 113.72812, 27.350442 ], [ 113.872865, 27.384988 ], [ 113.872865, 27.346721 ], [ 113.854387, 27.30525 ], [ 113.872865, 27.289828 ], [ 113.846996, 27.222262 ], [ 113.779242, 27.137081 ], [ 113.771851, 27.096598 ], [ 113.803264, 27.099261 ], [ 113.824206, 27.036378 ], [ 113.86301, 27.018252 ], [ 113.892575, 26.964925 ], [ 113.927068, 26.948922 ], [ 113.890112, 26.895562 ], [ 113.877177, 26.859262 ], [ 113.835909, 26.806394 ], [ 113.853771, 26.769532 ], [ 113.860546, 26.664221 ], [ 113.912901, 26.613938 ], [ 113.996669, 26.615543 ], [ 114.019459, 26.587182 ], [ 114.10877, 26.56952 ], [ 114.07243, 26.480096 ], [ 114.110002, 26.482775 ], [ 114.090292, 26.455988 ], [ 114.085364, 26.406149 ], [ 114.062575, 26.406149 ], [ 114.030546, 26.376664 ], [ 114.047792, 26.337518 ], [ 114.021307, 26.288701 ], [ 114.029314, 26.266163 ], [ 113.978807, 26.237716 ], [ 113.972647, 26.20604 ], [ 113.949242, 26.192616 ], [ 113.962792, 26.150722 ], [ 114.013299, 26.184023 ], [ 114.088444, 26.168448 ], [ 114.102611, 26.187783 ], [ 114.181451, 26.214631 ], [ 114.216559, 26.203355 ], [ 114.237501, 26.152333 ], [ 114.188842, 26.121172 ], [ 114.10569, 26.097526 ], [ 114.121089, 26.085702 ], [ 114.087828, 26.06635 ], [ 114.044096, 26.076564 ], [ 114.008372, 26.015806 ], [ 114.028082, 25.98138 ], [ 114.028082, 25.893119 ], [ 113.971416, 25.836036 ], [ 113.961561, 25.77731 ], [ 113.920293, 25.741197 ], [ 113.913517, 25.701299 ], [ 113.957249, 25.611749 ], [ 113.983118, 25.599336 ], [ 113.986198, 25.529153 ], [ 113.962792, 25.528072 ], [ 113.94493, 25.441635 ], [ 113.887032, 25.436772 ], [ 113.877177, 25.380552 ], [ 113.839605, 25.363248 ], [ 113.814967, 25.328634 ], [ 113.76446, 25.333502 ], [ 113.753373, 25.362707 ], [ 113.686852, 25.351891 ], [ 113.680076, 25.334584 ], [ 113.611707, 25.327552 ], [ 113.584606, 25.306453 ], [ 113.579062, 25.34432 ], [ 113.535946, 25.368656 ], [ 113.479896, 25.375145 ], [ 113.449715, 25.359463 ], [ 113.407215, 25.401637 ], [ 113.373338, 25.402719 ], [ 113.341926, 25.448661 ], [ 113.314208, 25.442716 ], [ 113.311129, 25.490264 ], [ 113.248919, 25.514031 ], [ 113.226129, 25.50971 ], [ 113.176854, 25.471355 ], [ 113.11834, 25.44704 ], [ 113.130658, 25.427043 ], [ 113.096782, 25.412449 ], [ 113.078304, 25.382174 ], [ 113.013014, 25.352432 ], [ 112.969898, 25.350269 ], [ 112.93479, 25.325929 ], [ 112.924319, 25.296714 ], [ 112.891058, 25.339993 ], [ 112.854718, 25.337829 ], [ 112.867036, 25.249632 ], [ 112.897833, 25.238264 ], [ 112.958195, 25.254503 ], [ 112.992688, 25.247467 ], [ 113.034572, 25.198199 ], [ 112.97421, 25.168412 ], [ 112.96805, 25.141869 ], [ 113.018557, 25.083344 ], [ 112.979137, 25.03401 ], [ 113.009934, 24.977604 ], [ 113.011782, 24.946136 ], [ 112.984681, 24.921172 ], [ 112.904609, 24.921715 ], [ 112.873812, 24.896747 ], [ 112.780805, 24.896747 ], [ 112.778341, 24.947764 ], [ 112.743233, 24.959701 ], [ 112.742001, 24.99876 ], [ 112.714899, 25.025876 ], [ 112.712436, 25.083344 ], [ 112.660081, 25.132658 ], [ 112.628052, 25.140785 ], [ 112.562762, 25.124531 ], [ 112.458053, 25.152162 ], [ 112.44327, 25.185744 ], [ 112.414937, 25.14241 ], [ 112.365046, 25.191701 ], [ 112.315771, 25.175453 ], [ 112.302836, 25.157037 ], [ 112.256025, 25.159204 ], [ 112.246785, 25.185202 ], [ 112.19751, 25.187368 ], [ 112.174105, 25.128866 ], [ 112.177184, 25.106649 ], [ 112.151931, 25.055698 ], [ 112.155626, 25.026419 ], [ 112.12175, 24.989538 ], [ 112.119902, 24.963499 ], [ 112.175337, 24.927685 ], [ 112.167329, 24.859828 ], [ 112.149467, 24.837019 ], [ 112.124214, 24.841364 ], [ 112.03367, 24.771286 ], [ 112.024431, 24.740308 ], [ 111.951135, 24.769655 ], [ 111.929577, 24.75607 ], [ 111.875374, 24.756613 ], [ 111.868599, 24.771829 ], [ 111.814396, 24.770199 ], [ 111.783599, 24.785957 ], [ 111.708455, 24.788673 ], [ 111.666571, 24.760961 ], [ 111.637621, 24.715303 ], [ 111.641933, 24.684856 ], [ 111.588962, 24.690837 ], [ 111.570484, 24.64461 ], [ 111.526752, 24.637538 ], [ 111.499035, 24.667997 ], [ 111.451608, 24.665822 ], [ 111.431282, 24.687574 ], [ 111.461463, 24.728894 ], [ 111.479325, 24.797366 ], [ 111.449144, 24.857113 ], [ 111.447296, 24.892947 ], [ 111.470086, 24.92877 ], [ 111.434977, 24.951562 ], [ 111.43313, 24.979774 ], [ 111.460231, 24.992793 ], [ 111.467622, 25.02208 ], [ 111.416499, 25.047566 ], [ 111.435593, 25.093642 ], [ 111.375231, 25.128324 ], [ 111.36784, 25.108817 ], [ 111.321645, 25.105023 ], [ 111.274833, 25.151078 ], [ 111.221862, 25.106649 ], [ 111.200921, 25.074672 ], [ 111.139943, 25.042144 ], [ 111.101754, 25.035095 ], [ 111.100522, 24.945593 ], [ 111.009363, 24.921172 ], [ 110.968711, 24.975434 ], [ 110.951465, 25.04377 ], [ 110.98411, 25.101772 ], [ 110.998892, 25.161371 ], [ 111.112841, 25.21715 ], [ 111.103602, 25.285351 ], [ 111.138711, 25.303748 ], [ 111.184906, 25.367034 ], [ 111.210776, 25.363248 ], [ 111.257587, 25.395691 ], [ 111.26313, 25.42326 ], [ 111.300087, 25.44812 ], [ 111.32842, 25.521592 ], [ 111.324724, 25.564249 ], [ 111.343202, 25.602574 ], [ 111.309942, 25.645203 ], [ 111.30871, 25.720171 ], [ 111.399869, 25.744431 ], [ 111.442369, 25.77192 ], [ 111.43313, 25.84627 ], [ 111.4861, 25.859196 ], [ 111.460231, 25.885042 ], [ 111.383239, 25.881812 ], [ 111.376463, 25.906039 ], [ 111.346282, 25.906577 ], [ 111.297007, 25.874274 ], [ 111.29208, 25.854349 ], [ 111.251428, 25.864581 ], [ 111.230486, 25.916267 ], [ 111.189834, 25.953402 ], [ 111.235413, 26.048071 ], [ 111.267442, 26.058824 ], [ 111.244652, 26.078177 ], [ 111.26621, 26.095914 ], [ 111.258203, 26.151796 ], [ 111.274833, 26.183486 ], [ 111.271754, 26.217316 ], [ 111.293311, 26.222148 ], [ 111.277913, 26.272066 ], [ 111.228022, 26.261333 ], [ 111.204616, 26.276359 ], [ 111.208928, 26.30426 ], [ 111.090667, 26.308016 ], [ 111.008132, 26.336982 ], [ 111.008747, 26.35897 ], [ 110.974255, 26.385778 ], [ 110.94469, 26.373447 ], [ 110.944074, 26.326791 ], [ 110.926212, 26.320354 ], [ 110.939762, 26.286554 ], [ 110.836284, 26.255966 ], [ 110.759292, 26.248451 ], [ 110.73835, 26.271529 ], [ 110.742046, 26.313917 ], [ 110.711249, 26.29192 ], [ 110.673676, 26.317135 ], [ 110.643495, 26.308552 ], [ 110.612083, 26.333764 ], [ 110.584365, 26.296749 ], [ 110.552952, 26.283335 ], [ 110.546793, 26.233421 ], [ 110.495054, 26.166299 ], [ 110.477808, 26.179727 ], [ 110.437772, 26.153945 ], [ 110.373098, 26.088927 ], [ 110.325671, 25.975462 ], [ 110.257301, 25.961473 ], [ 110.24991, 26.010965 ], [ 110.181541, 26.060437 ], [ 110.168606, 26.028713 ], [ 110.100853, 26.020108 ], [ 110.065128, 26.050221 ], [ 110.100853, 26.132455 ], [ 110.099005, 26.168985 ], [ 110.03002, 26.166299 ], [ 109.970274, 26.195301 ], [ 109.904368, 26.135679 ], [ 109.898825, 26.095377 ], [ 109.864332, 26.027637 ], [ 109.814441, 26.041081 ], [ 109.782412, 25.996981 ], [ 109.806434, 25.973848 ], [ 109.826144, 25.911422 ], [ 109.811361, 25.877504 ], [ 109.779333, 25.866196 ], [ 109.768246, 25.890427 ], [ 109.685094, 25.880197 ], [ 109.67955, 25.921649 ], [ 109.693717, 25.959321 ], [ 109.710963, 25.954478 ], [ 109.730057, 25.989988 ], [ 109.649369, 26.016882 ], [ 109.635203, 26.047533 ], [ 109.588391, 26.019571 ], [ 109.560058, 26.021184 ], [ 109.513247, 25.998056 ], [ 109.48245, 26.029788 ] ] ], [ [ [ 109.528645, 26.743881 ], [ 109.52187, 26.749226 ], [ 109.522486, 26.749226 ], [ 109.528645, 26.743881 ] ] ] ] } }, +{ "type": "Feature", "properties": { "adcode": "440000", "name": "广东省", "center": [ 113.280637, 23.125178 ], "centroid": [ 113.429915, 23.334652 ], "childrenNum": 21, "level": "province", "parent": { "adcode": 100000 }, "subFeatureIndex": 18, "acroutes": [ 100000 ] }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 109.785492, 21.45673 ], [ 109.788572, 21.490702 ], [ 109.754695, 21.556396 ], [ 109.742992, 21.616497 ], [ 109.778101, 21.670455 ], [ 109.786108, 21.637638 ], [ 109.839695, 21.636525 ], [ 109.888354, 21.652101 ], [ 109.888354, 21.652101 ], [ 109.916071, 21.668787 ], [ 109.940093, 21.769419 ], [ 109.94502, 21.84443 ], [ 109.999839, 21.881643 ], [ 110.050962, 21.857205 ], [ 110.101469, 21.86998 ], [ 110.12857, 21.902744 ], [ 110.196323, 21.899968 ], [ 110.212338, 21.886085 ], [ 110.212338, 21.886085 ], [ 110.224041, 21.882198 ], [ 110.224041, 21.882198 ], [ 110.283787, 21.892194 ], [ 110.290562, 21.917736 ], [ 110.337374, 21.887751 ], [ 110.391576, 21.89386 ], [ 110.378642, 21.939942 ], [ 110.378642, 21.939942 ], [ 110.374946, 21.967695 ], [ 110.374946, 21.967695 ], [ 110.352772, 21.97602 ], [ 110.359547, 22.015973 ], [ 110.35154, 22.097508 ], [ 110.364475, 22.125785 ], [ 110.326287, 22.152393 ], [ 110.34846, 22.195621 ], [ 110.378026, 22.164587 ], [ 110.414366, 22.208365 ], [ 110.456866, 22.189526 ], [ 110.505525, 22.14297 ], [ 110.55788, 22.196175 ], [ 110.602843, 22.18343 ], [ 110.598532, 22.162924 ], [ 110.629329, 22.149068 ], [ 110.678604, 22.172901 ], [ 110.646575, 22.220554 ], [ 110.687843, 22.249914 ], [ 110.725415, 22.29588 ], [ 110.759292, 22.274837 ], [ 110.787009, 22.28259 ], [ 110.749437, 22.329653 ], [ 110.74143, 22.361757 ], [ 110.711249, 22.369506 ], [ 110.712481, 22.440879 ], [ 110.688459, 22.477935 ], [ 110.74143, 22.464109 ], [ 110.740198, 22.498947 ], [ 110.762988, 22.518298 ], [ 110.749437, 22.556991 ], [ 110.778386, 22.585174 ], [ 110.812263, 22.576333 ], [ 110.897878, 22.591805 ], [ 110.896031, 22.613352 ], [ 110.950233, 22.61059 ], [ 110.958856, 22.636553 ], [ 110.997045, 22.631582 ], [ 111.055559, 22.648705 ], [ 111.089435, 22.695643 ], [ 111.058023, 22.729871 ], [ 111.118385, 22.744773 ], [ 111.185522, 22.735942 ], [ 111.218167, 22.748085 ], [ 111.358601, 22.889301 ], [ 111.374615, 22.938361 ], [ 111.362913, 22.967568 ], [ 111.403565, 22.99126 ], [ 111.389398, 23.005583 ], [ 111.433746, 23.036428 ], [ 111.43313, 23.073322 ], [ 111.402333, 23.066165 ], [ 111.377695, 23.082132 ], [ 111.365992, 23.14488 ], [ 111.38447, 23.16744 ], [ 111.388782, 23.210349 ], [ 111.36476, 23.240047 ], [ 111.353058, 23.284582 ], [ 111.376463, 23.30437 ], [ 111.363528, 23.340641 ], [ 111.389398, 23.375804 ], [ 111.383239, 23.399423 ], [ 111.399869, 23.469159 ], [ 111.428818, 23.466414 ], [ 111.479941, 23.532822 ], [ 111.487332, 23.626615 ], [ 111.555702, 23.64087 ], [ 111.615448, 23.639225 ], [ 111.614832, 23.65896 ], [ 111.666571, 23.718696 ], [ 111.621607, 23.725819 ], [ 111.627766, 23.78881 ], [ 111.654868, 23.833159 ], [ 111.683201, 23.822758 ], [ 111.683201, 23.822758 ], [ 111.722621, 23.823305 ], [ 111.8107, 23.80688 ], [ 111.824867, 23.832612 ], [ 111.812548, 23.887343 ], [ 111.845809, 23.904305 ], [ 111.854432, 23.947521 ], [ 111.911714, 23.943693 ], [ 111.940664, 23.987989 ], [ 111.92157, 24.012045 ], [ 111.878454, 24.109862 ], [ 111.886461, 24.163929 ], [ 111.871062, 24.176487 ], [ 111.877222, 24.227252 ], [ 111.912946, 24.221795 ], [ 111.958526, 24.263813 ], [ 111.986243, 24.25672 ], [ 111.990555, 24.279634 ], [ 112.026279, 24.294908 ], [ 112.05954, 24.339628 ], [ 112.057692, 24.387057 ], [ 112.025047, 24.438828 ], [ 111.985011, 24.467701 ], [ 112.009649, 24.503103 ], [ 112.007185, 24.534684 ], [ 111.972077, 24.578775 ], [ 111.936968, 24.595645 ], [ 111.927729, 24.629378 ], [ 111.953598, 24.64733 ], [ 111.939432, 24.686487 ], [ 111.961606, 24.721283 ], [ 112.024431, 24.740308 ], [ 112.03367, 24.771286 ], [ 112.124214, 24.841364 ], [ 112.149467, 24.837019 ], [ 112.167329, 24.859828 ], [ 112.175337, 24.927685 ], [ 112.119902, 24.963499 ], [ 112.12175, 24.989538 ], [ 112.155626, 25.026419 ], [ 112.151931, 25.055698 ], [ 112.177184, 25.106649 ], [ 112.174105, 25.128866 ], [ 112.19751, 25.187368 ], [ 112.246785, 25.185202 ], [ 112.256025, 25.159204 ], [ 112.302836, 25.157037 ], [ 112.315771, 25.175453 ], [ 112.365046, 25.191701 ], [ 112.414937, 25.14241 ], [ 112.44327, 25.185744 ], [ 112.458053, 25.152162 ], [ 112.562762, 25.124531 ], [ 112.628052, 25.140785 ], [ 112.660081, 25.132658 ], [ 112.712436, 25.083344 ], [ 112.714899, 25.025876 ], [ 112.742001, 24.99876 ], [ 112.743233, 24.959701 ], [ 112.778341, 24.947764 ], [ 112.780805, 24.896747 ], [ 112.873812, 24.896747 ], [ 112.904609, 24.921715 ], [ 112.984681, 24.921172 ], [ 113.011782, 24.946136 ], [ 113.009934, 24.977604 ], [ 112.979137, 25.03401 ], [ 113.018557, 25.083344 ], [ 112.96805, 25.141869 ], [ 112.97421, 25.168412 ], [ 113.034572, 25.198199 ], [ 112.992688, 25.247467 ], [ 112.958195, 25.254503 ], [ 112.897833, 25.238264 ], [ 112.867036, 25.249632 ], [ 112.854718, 25.337829 ], [ 112.891058, 25.339993 ], [ 112.924319, 25.296714 ], [ 112.93479, 25.325929 ], [ 112.969898, 25.350269 ], [ 113.013014, 25.352432 ], [ 113.078304, 25.382174 ], [ 113.096782, 25.412449 ], [ 113.130658, 25.427043 ], [ 113.11834, 25.44704 ], [ 113.176854, 25.471355 ], [ 113.226129, 25.50971 ], [ 113.248919, 25.514031 ], [ 113.311129, 25.490264 ], [ 113.314208, 25.442716 ], [ 113.341926, 25.448661 ], [ 113.373338, 25.402719 ], [ 113.407215, 25.401637 ], [ 113.449715, 25.359463 ], [ 113.479896, 25.375145 ], [ 113.535946, 25.368656 ], [ 113.579062, 25.34432 ], [ 113.584606, 25.306453 ], [ 113.611707, 25.327552 ], [ 113.680076, 25.334584 ], [ 113.686852, 25.351891 ], [ 113.753373, 25.362707 ], [ 113.76446, 25.333502 ], [ 113.814967, 25.328634 ], [ 113.839605, 25.363248 ], [ 113.877177, 25.380552 ], [ 113.887032, 25.436772 ], [ 113.94493, 25.441635 ], [ 114.003444, 25.442716 ], [ 113.983118, 25.415152 ], [ 114.050256, 25.36433 ], [ 114.029314, 25.328093 ], [ 114.017611, 25.273987 ], [ 114.039785, 25.250714 ], [ 114.055799, 25.277775 ], [ 114.083517, 25.275611 ], [ 114.115545, 25.302125 ], [ 114.190074, 25.316733 ], [ 114.204857, 25.29942 ], [ 114.260291, 25.291845 ], [ 114.2954, 25.299961 ], [ 114.31511, 25.33837 ], [ 114.382863, 25.317274 ], [ 114.43029, 25.343779 ], [ 114.438914, 25.376226 ], [ 114.477718, 25.37136 ], [ 114.541159, 25.416773 ], [ 114.599674, 25.385959 ], [ 114.63663, 25.324306 ], [ 114.714238, 25.315651 ], [ 114.743188, 25.274528 ], [ 114.73518, 25.225813 ], [ 114.693912, 25.213902 ], [ 114.685905, 25.173287 ], [ 114.73518, 25.155954 ], [ 114.735796, 25.121822 ], [ 114.664963, 25.10123 ], [ 114.640326, 25.074129 ], [ 114.604601, 25.083886 ], [ 114.561485, 25.077382 ], [ 114.532536, 25.022623 ], [ 114.506051, 24.999844 ], [ 114.45616, 24.99659 ], [ 114.454928, 24.977062 ], [ 114.395798, 24.951019 ], [ 114.403189, 24.877746 ], [ 114.378551, 24.861457 ], [ 114.342211, 24.807145 ], [ 114.336052, 24.749004 ], [ 114.281849, 24.724001 ], [ 114.27261, 24.700624 ], [ 114.169132, 24.689749 ], [ 114.19069, 24.656576 ], [ 114.258443, 24.641346 ], [ 114.289856, 24.619042 ], [ 114.300943, 24.578775 ], [ 114.363769, 24.582584 ], [ 114.391486, 24.563535 ], [ 114.403189, 24.497657 ], [ 114.429058, 24.48622 ], [ 114.534384, 24.559181 ], [ 114.589819, 24.537406 ], [ 114.627391, 24.576598 ], [ 114.664963, 24.583673 ], [ 114.704999, 24.525973 ], [ 114.73826, 24.565168 ], [ 114.729637, 24.608704 ], [ 114.781376, 24.613057 ], [ 114.827571, 24.588026 ], [ 114.846665, 24.602719 ], [ 114.868839, 24.562446 ], [ 114.893477, 24.582584 ], [ 114.909491, 24.661471 ], [ 114.940288, 24.650049 ], [ 115.00373, 24.679418 ], [ 115.024672, 24.669085 ], [ 115.057317, 24.703343 ], [ 115.083802, 24.699537 ], [ 115.104744, 24.667997 ], [ 115.1842, 24.711498 ], [ 115.258729, 24.728894 ], [ 115.269816, 24.749548 ], [ 115.306772, 24.758787 ], [ 115.358511, 24.735416 ], [ 115.372678, 24.774546 ], [ 115.412714, 24.79302 ], [ 115.476771, 24.762591 ], [ 115.522967, 24.702799 ], [ 115.555611, 24.683768 ], [ 115.569778, 24.622306 ], [ 115.605503, 24.62557 ], [ 115.671408, 24.604895 ], [ 115.68927, 24.545027 ], [ 115.752712, 24.546116 ], [ 115.785357, 24.567345 ], [ 115.843871, 24.562446 ], [ 115.840791, 24.584217 ], [ 115.797676, 24.628834 ], [ 115.780429, 24.663103 ], [ 115.801371, 24.705517 ], [ 115.769342, 24.708236 ], [ 115.756408, 24.749004 ], [ 115.776734, 24.774546 ], [ 115.764415, 24.791933 ], [ 115.790284, 24.856027 ], [ 115.807531, 24.862543 ], [ 115.824161, 24.909232 ], [ 115.863581, 24.891318 ], [ 115.861733, 24.863629 ], [ 115.907313, 24.879917 ], [ 115.885139, 24.898918 ], [ 115.89253, 24.936911 ], [ 115.907929, 24.923343 ], [ 115.985537, 24.899461 ], [ 116.015102, 24.905975 ], [ 116.068073, 24.850053 ], [ 116.153073, 24.846795 ], [ 116.191877, 24.877203 ], [ 116.221442, 24.829959 ], [ 116.251007, 24.82507 ], [ 116.244232, 24.793563 ], [ 116.297202, 24.801712 ], [ 116.345862, 24.828872 ], [ 116.363724, 24.87123 ], [ 116.395137, 24.877746 ], [ 116.417927, 24.840821 ], [ 116.381586, 24.82507 ], [ 116.375427, 24.803885 ], [ 116.419158, 24.767482 ], [ 116.416079, 24.744113 ], [ 116.44626, 24.714216 ], [ 116.485064, 24.720196 ], [ 116.517709, 24.652225 ], [ 116.506622, 24.621218 ], [ 116.530027, 24.604895 ], [ 116.570679, 24.621762 ], [ 116.600861, 24.654401 ], [ 116.623034, 24.64189 ], [ 116.667382, 24.658752 ], [ 116.777635, 24.679418 ], [ 116.815207, 24.654944 ], [ 116.761005, 24.583128 ], [ 116.759157, 24.545572 ], [ 116.796729, 24.502014 ], [ 116.83307, 24.496568 ], [ 116.860787, 24.460075 ], [ 116.839229, 24.442097 ], [ 116.903903, 24.369614 ], [ 116.895895, 24.350533 ], [ 116.919301, 24.321087 ], [ 116.914374, 24.287817 ], [ 116.938395, 24.28127 ], [ 116.933468, 24.220157 ], [ 116.956257, 24.216883 ], [ 116.998757, 24.179217 ], [ 116.9347, 24.126794 ], [ 116.930388, 24.064514 ], [ 116.953178, 24.008218 ], [ 116.981511, 23.999471 ], [ 116.976583, 23.931659 ], [ 116.955642, 23.922359 ], [ 116.981511, 23.855602 ], [ 117.012308, 23.855054 ], [ 117.019083, 23.801952 ], [ 117.048032, 23.758687 ], [ 117.055424, 23.694038 ], [ 117.123793, 23.647448 ], [ 117.147199, 23.654027 ], [ 117.192778, 23.629356 ], [ 117.192778, 23.5619 ], [ 117.085605, 23.536663 ], [ 117.044953, 23.539955 ], [ 117.01046, 23.502641 ], [ 116.963649, 23.507031 ], [ 116.92854, 23.530079 ], [ 116.888504, 23.501543 ], [ 116.895895, 23.476295 ], [ 116.874953, 23.447748 ], [ 116.874338, 23.447199 ], [ 116.871258, 23.416449 ], [ 116.871874, 23.4159 ], [ 116.782563, 23.313714 ], [ 116.798577, 23.244996 ], [ 116.821367, 23.240597 ], [ 116.806584, 23.200998 ], [ 116.74499, 23.215299 ], [ 116.701259, 23.198248 ], [ 116.665534, 23.158086 ], [ 116.566368, 23.134424 ], [ 116.550969, 23.109656 ], [ 116.566368, 23.088738 ], [ 116.557129, 23.056253 ], [ 116.576839, 23.014397 ], [ 116.542346, 22.995667 ], [ 116.50539, 22.930645 ], [ 116.449955, 22.936707 ], [ 116.382818, 22.91907 ], [ 116.317528, 22.95269 ], [ 116.226985, 22.91466 ], [ 116.191261, 22.874965 ], [ 116.104413, 22.816505 ], [ 116.05637, 22.844635 ], [ 115.99724, 22.826985 ], [ 115.965211, 22.800506 ], [ 115.931334, 22.802713 ], [ 115.883291, 22.78561 ], [ 115.829089, 22.734838 ], [ 115.796444, 22.739254 ], [ 115.788437, 22.809885 ], [ 115.760103, 22.834707 ], [ 115.696046, 22.84298 ], [ 115.654162, 22.865591 ], [ 115.583945, 22.82864 ], [ 115.570394, 22.786713 ], [ 115.541445, 22.755259 ], [ 115.609198, 22.753052 ], [ 115.565467, 22.684048 ], [ 115.575322, 22.650914 ], [ 115.471844, 22.697852 ], [ 115.430576, 22.684048 ], [ 115.381301, 22.684048 ], [ 115.349272, 22.712206 ], [ 115.338185, 22.776781 ], [ 115.319091, 22.783402 ], [ 115.230396, 22.776781 ], [ 115.236555, 22.82533 ], [ 115.190359, 22.818711 ], [ 115.190975, 22.77347 ], [ 115.154635, 22.80161 ], [ 115.061628, 22.783402 ], [ 115.053621, 22.747533 ], [ 115.02344, 22.726007 ], [ 115.039454, 22.713862 ], [ 114.945216, 22.645391 ], [ 114.927969, 22.621639 ], [ 114.922426, 22.549253 ], [ 114.88547, 22.538751 ], [ 114.866375, 22.591805 ], [ 114.746267, 22.581859 ], [ 114.743803, 22.632687 ], [ 114.728405, 22.651466 ], [ 114.73518, 22.724351 ], [ 114.749963, 22.764089 ], [ 114.709927, 22.787817 ], [ 114.689601, 22.7674 ], [ 114.601521, 22.730975 ], [ 114.591666, 22.690122 ], [ 114.567029, 22.685705 ], [ 114.51529, 22.655332 ], [ 114.579964, 22.661407 ], [ 114.603369, 22.638763 ], [ 114.559022, 22.583517 ], [ 114.568261, 22.560859 ], [ 114.614456, 22.545384 ], [ 114.628623, 22.513875 ], [ 114.611377, 22.481806 ], [ 114.549167, 22.465769 ], [ 114.506667, 22.438667 ], [ 114.476486, 22.459132 ], [ 114.472174, 22.522168 ], [ 114.427211, 22.589042 ], [ 114.381631, 22.60175 ], [ 114.321885, 22.587385 ], [ 114.294784, 22.563623 ], [ 114.232574, 22.539857 ], [ 114.222719, 22.553122 ], [ 114.166052, 22.559201 ], [ 114.156813, 22.543726 ], [ 114.095219, 22.534329 ], [ 114.082285, 22.512216 ], [ 114.031778, 22.503923 ], [ 113.976343, 22.510558 ], [ 113.954785, 22.491206 ], [ 113.952937, 22.486783 ], [ 113.893807, 22.442539 ], [ 113.869786, 22.459685 ], [ 113.856851, 22.539857 ], [ 113.803264, 22.593463 ], [ 113.773083, 22.643182 ], [ 113.751525, 22.715518 ], [ 113.733663, 22.736494 ], [ 113.678228, 22.726007 ], [ 113.717033, 22.645391 ], [ 113.740438, 22.534329 ], [ 113.691779, 22.514981 ], [ 113.668373, 22.4807 ], [ 113.631417, 22.475723 ], [ 113.573519, 22.41156 ], [ 113.608627, 22.408793 ], [ 113.624642, 22.443092 ], [ 113.66591, 22.438667 ], [ 113.669605, 22.416539 ], [ 113.627721, 22.349027 ], [ 113.604932, 22.339617 ], [ 113.617866, 22.315259 ], [ 113.595693, 22.304186 ], [ 113.594461, 22.228864 ], [ 113.558736, 22.212244 ], [ 113.53841, 22.209473 ], [ 113.534715, 22.174009 ], [ 113.554425, 22.142416 ], [ 113.554425, 22.107489 ], [ 113.567359, 22.075327 ], [ 113.527939, 22.073663 ], [ 113.45957, 22.043711 ], [ 113.442324, 22.009315 ], [ 113.330223, 21.96159 ], [ 113.319752, 21.909407 ], [ 113.266781, 21.871646 ], [ 113.235368, 21.887751 ], [ 113.1516, 21.979905 ], [ 113.142977, 22.012089 ], [ 113.091854, 22.065344 ], [ 113.086927, 22.12634 ], [ 113.045659, 22.088636 ], [ 113.032108, 22.04593 ], [ 113.053666, 22.012089 ], [ 113.047507, 21.956595 ], [ 112.989608, 21.869424 ], [ 112.929862, 21.838875 ], [ 112.893522, 21.84443 ], [ 112.841167, 21.920512 ], [ 112.792508, 21.921067 ], [ 112.68595, 21.810541 ], [ 112.647146, 21.758302 ], [ 112.535661, 21.753856 ], [ 112.497473, 21.785535 ], [ 112.445734, 21.803317 ], [ 112.427256, 21.789981 ], [ 112.415553, 21.734956 ], [ 112.353343, 21.707157 ], [ 112.238778, 21.702153 ], [ 112.236315, 21.727173 ], [ 112.196894, 21.736624 ], [ 112.192583, 21.789425 ], [ 112.136532, 21.793871 ], [ 112.036134, 21.761637 ], [ 111.956062, 21.710494 ], [ 111.954214, 21.667674 ], [ 111.997946, 21.657107 ], [ 112.026895, 21.633744 ], [ 111.972692, 21.603144 ], [ 111.941896, 21.607039 ], [ 111.887693, 21.578659 ], [ 111.810084, 21.555283 ], [ 111.832258, 21.578659 ], [ 111.794686, 21.61149 ], [ 111.736788, 21.609821 ], [ 111.693672, 21.590345 ], [ 111.677658, 21.529677 ], [ 111.650556, 21.512418 ], [ 111.609904, 21.530234 ], [ 111.560629, 21.50518 ], [ 111.521825, 21.517429 ], [ 111.494724, 21.501282 ], [ 111.444217, 21.514088 ], [ 111.382623, 21.495714 ], [ 111.353058, 21.464528 ], [ 111.28592, 21.41885 ], [ 111.258819, 21.412165 ], [ 111.253275, 21.452831 ], [ 111.276065, 21.443362 ], [ 111.28284, 21.485691 ], [ 111.171355, 21.458401 ], [ 111.103602, 21.455616 ], [ 111.034617, 21.438906 ], [ 110.929291, 21.375945 ], [ 110.888639, 21.367585 ], [ 110.796248, 21.37483 ], [ 110.768531, 21.364799 ], [ 110.713097, 21.3124 ], [ 110.65951, 21.239902 ], [ 110.626249, 21.215915 ], [ 110.534474, 21.204198 ], [ 110.501213, 21.217588 ], [ 110.451322, 21.186343 ], [ 110.422373, 21.190807 ], [ 110.39096, 21.124949 ], [ 110.296722, 21.093684 ], [ 110.24991, 21.045098 ], [ 110.241903, 21.016051 ], [ 110.208642, 21.050684 ], [ 110.204947, 21.003202 ], [ 110.180925, 20.98197 ], [ 110.184005, 20.891979 ], [ 110.209874, 20.860106 ], [ 110.269004, 20.839972 ], [ 110.327519, 20.847802 ], [ 110.393424, 20.816479 ], [ 110.407591, 20.731987 ], [ 110.392192, 20.682724 ], [ 110.411286, 20.670966 ], [ 110.466105, 20.680485 ], [ 110.487047, 20.640167 ], [ 110.499982, 20.572386 ], [ 110.550489, 20.47262 ], [ 110.54125, 20.42047 ], [ 110.491358, 20.373912 ], [ 110.452554, 20.311064 ], [ 110.425453, 20.291419 ], [ 110.384185, 20.293103 ], [ 110.349076, 20.258859 ], [ 110.296722, 20.249314 ], [ 110.220345, 20.25156 ], [ 110.168606, 20.219553 ], [ 110.118099, 20.219553 ], [ 110.082375, 20.258859 ], [ 109.993679, 20.254368 ], [ 109.929006, 20.211691 ], [ 109.909296, 20.236961 ], [ 109.916071, 20.316677 ], [ 109.861252, 20.376717 ], [ 109.864948, 20.40196 ], [ 109.895745, 20.42776 ], [ 109.888354, 20.475423 ], [ 109.839695, 20.489439 ], [ 109.811977, 20.541566 ], [ 109.813825, 20.574627 ], [ 109.793499, 20.615522 ], [ 109.74484, 20.621124 ], [ 109.730057, 20.719673 ], [ 109.711579, 20.774519 ], [ 109.664768, 20.862343 ], [ 109.655529, 20.929435 ], [ 109.674007, 21.067997 ], [ 109.674623, 21.136671 ], [ 109.763934, 21.226514 ], [ 109.757775, 21.346963 ], [ 109.770709, 21.359783 ], [ 109.868644, 21.365913 ], [ 109.904368, 21.429992 ], [ 109.894513, 21.442248 ], [ 109.819369, 21.445033 ], [ 109.785492, 21.45673 ] ] ], [ [ [ 117.145351, 23.455983 ], [ 117.142887, 23.400522 ], [ 117.124409, 23.389537 ], [ 117.081909, 23.409309 ], [ 117.050496, 23.400522 ], [ 117.027091, 23.41535 ], [ 116.946402, 23.42194 ], [ 116.944555, 23.440061 ], [ 116.982743, 23.460924 ], [ 117.022779, 23.436767 ], [ 117.058503, 23.47355 ], [ 117.093612, 23.459277 ], [ 117.129336, 23.483431 ], [ 117.145351, 23.455983 ] ] ], [ [ [ 112.853486, 21.740515 ], [ 112.83316, 21.736624 ], [ 112.804826, 21.686583 ], [ 112.821457, 21.655994 ], [ 112.798667, 21.610933 ], [ 112.817145, 21.590345 ], [ 112.775261, 21.564189 ], [ 112.730914, 21.613715 ], [ 112.780189, 21.671568 ], [ 112.734609, 21.666562 ], [ 112.70566, 21.679354 ], [ 112.724138, 21.719945 ], [ 112.782653, 21.739959 ], [ 112.840551, 21.776644 ], [ 112.876275, 21.772753 ], [ 112.853486, 21.740515 ] ] ], [ [ [ 112.530733, 21.583667 ], [ 112.535045, 21.628737 ], [ 112.57077, 21.645982 ], [ 112.560299, 21.666562 ], [ 112.592327, 21.693256 ], [ 112.663776, 21.714386 ], [ 112.66624, 21.683803 ], [ 112.639139, 21.67268 ], [ 112.665624, 21.642644 ], [ 112.621277, 21.606482 ], [ 112.571385, 21.619835 ], [ 112.563378, 21.591458 ], [ 112.530733, 21.583667 ] ] ], [ [ [ 114.231342, 22.016528 ], [ 114.239965, 22.03539 ], [ 114.302791, 22.050368 ], [ 114.311414, 22.041493 ], [ 114.231342, 22.016528 ] ] ], [ [ [ 112.435263, 21.663781 ], [ 112.458669, 21.68992 ], [ 112.456205, 21.648763 ], [ 112.435263, 21.663781 ] ] ], [ [ [ 110.435308, 21.182995 ], [ 110.445163, 21.184669 ], [ 110.499366, 21.213125 ], [ 110.525235, 21.190249 ], [ 110.589293, 21.194713 ], [ 110.632409, 21.210893 ], [ 110.582517, 21.094801 ], [ 110.544945, 21.083633 ], [ 110.508605, 21.140579 ], [ 110.434076, 21.168485 ], [ 110.435308, 21.182995 ] ] ], [ [ [ 110.517844, 21.079166 ], [ 110.560344, 21.061295 ], [ 110.539402, 20.987557 ], [ 110.535706, 20.922727 ], [ 110.511684, 20.916578 ], [ 110.47288, 20.983087 ], [ 110.407591, 20.990351 ], [ 110.347845, 20.984763 ], [ 110.309656, 20.963529 ], [ 110.201251, 20.938378 ], [ 110.211106, 20.986999 ], [ 110.27578, 21.033369 ], [ 110.305961, 21.0881 ], [ 110.352772, 21.079724 ], [ 110.398352, 21.096476 ], [ 110.459946, 21.062971 ], [ 110.517844, 21.079166 ] ] ], [ [ [ 113.765076, 21.962145 ], [ 113.74167, 21.991559 ], [ 113.774315, 21.998218 ], [ 113.765076, 21.962145 ] ] ], [ [ [ 113.723192, 21.922177 ], [ 113.71888, 21.951599 ], [ 113.742902, 21.950489 ], [ 113.723192, 21.922177 ] ] ], [ [ [ 113.142977, 21.831653 ], [ 113.136818, 21.868869 ], [ 113.167615, 21.876644 ], [ 113.203955, 21.861093 ], [ 113.162071, 21.853873 ], [ 113.142977, 21.831653 ] ] ], [ [ [ 113.819894, 22.396068 ], [ 113.786634, 22.413773 ], [ 113.813735, 22.419858 ], [ 113.819894, 22.396068 ] ] ], [ [ [ 114.190074, 21.986564 ], [ 114.180835, 22.00987 ], [ 114.229494, 21.995443 ], [ 114.190074, 21.986564 ] ] ], [ [ [ 114.153734, 21.97491 ], [ 114.124169, 21.985455 ], [ 114.171596, 22.000437 ], [ 114.153734, 21.97491 ] ] ], [ [ [ 116.769628, 20.771721 ], [ 116.820135, 20.780674 ], [ 116.88604, 20.775638 ], [ 116.925461, 20.726949 ], [ 116.934084, 20.676565 ], [ 116.905135, 20.619443 ], [ 116.862635, 20.588633 ], [ 116.796113, 20.582471 ], [ 116.749302, 20.600958 ], [ 116.849084, 20.628405 ], [ 116.889736, 20.683284 ], [ 116.87249, 20.738143 ], [ 116.761005, 20.750456 ], [ 116.769628, 20.771721 ] ] ], [ [ [ 113.025333, 21.847762 ], [ 113.007471, 21.869424 ], [ 113.045659, 21.882753 ], [ 113.025333, 21.847762 ] ] ], [ [ [ 110.405127, 20.678245 ], [ 110.414366, 20.710157 ], [ 110.437772, 20.677685 ], [ 110.405127, 20.678245 ] ] ], [ [ [ 110.644727, 20.935584 ], [ 110.646575, 20.917137 ], [ 110.611467, 20.860106 ], [ 110.562807, 20.861224 ], [ 110.548641, 20.908752 ], [ 110.584365, 20.948998 ], [ 110.644727, 20.935584 ] ] ], [ [ [ 110.556648, 20.32734 ], [ 110.586213, 20.381205 ], [ 110.593604, 20.360447 ], [ 110.556648, 20.32734 ] ] ], [ [ [ 115.943037, 21.097592 ], [ 115.965211, 21.123832 ], [ 116.024341, 21.12439 ], [ 116.044051, 21.110434 ], [ 116.067457, 21.04063 ], [ 116.040356, 21.02052 ], [ 115.989233, 21.035603 ], [ 115.953508, 21.064088 ], [ 115.943037, 21.097592 ] ] ], [ [ [ 115.926407, 20.981411 ], [ 115.954124, 20.99985 ], [ 116.000936, 20.948439 ], [ 115.999088, 20.922727 ], [ 115.970139, 20.919373 ], [ 115.939342, 20.945644 ], [ 115.926407, 20.981411 ] ] ], [ [ [ 115.834632, 22.722695 ], [ 115.835248, 22.722695 ], [ 115.834632, 22.722143 ], [ 115.834632, 22.722695 ] ] ], [ [ [ 115.834632, 22.723247 ], [ 115.835248, 22.722695 ], [ 115.834632, 22.722695 ], [ 115.834632, 22.723247 ] ] ] ] } }, +{ "type": "Feature", "properties": { "adcode": "450000", "name": "广西壮族自治区", "center": [ 108.320004, 22.82402 ], "centroid": [ 108.7944, 23.833381 ], "childrenNum": 14, "level": "province", "parent": { "adcode": 100000 }, "subFeatureIndex": 19, "acroutes": [ 100000 ] }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 112.024431, 24.740308 ], [ 111.961606, 24.721283 ], [ 111.939432, 24.686487 ], [ 111.953598, 24.64733 ], [ 111.927729, 24.629378 ], [ 111.936968, 24.595645 ], [ 111.972077, 24.578775 ], [ 112.007185, 24.534684 ], [ 112.009649, 24.503103 ], [ 111.985011, 24.467701 ], [ 112.025047, 24.438828 ], [ 112.057692, 24.387057 ], [ 112.05954, 24.339628 ], [ 112.026279, 24.294908 ], [ 111.990555, 24.279634 ], [ 111.986243, 24.25672 ], [ 111.958526, 24.263813 ], [ 111.912946, 24.221795 ], [ 111.877222, 24.227252 ], [ 111.871062, 24.176487 ], [ 111.886461, 24.163929 ], [ 111.878454, 24.109862 ], [ 111.92157, 24.012045 ], [ 111.940664, 23.987989 ], [ 111.911714, 23.943693 ], [ 111.854432, 23.947521 ], [ 111.845809, 23.904305 ], [ 111.812548, 23.887343 ], [ 111.824867, 23.832612 ], [ 111.8107, 23.80688 ], [ 111.722621, 23.823305 ], [ 111.683201, 23.822758 ], [ 111.683201, 23.822758 ], [ 111.654868, 23.833159 ], [ 111.627766, 23.78881 ], [ 111.621607, 23.725819 ], [ 111.666571, 23.718696 ], [ 111.614832, 23.65896 ], [ 111.615448, 23.639225 ], [ 111.555702, 23.64087 ], [ 111.487332, 23.626615 ], [ 111.479941, 23.532822 ], [ 111.428818, 23.466414 ], [ 111.399869, 23.469159 ], [ 111.383239, 23.399423 ], [ 111.389398, 23.375804 ], [ 111.363528, 23.340641 ], [ 111.376463, 23.30437 ], [ 111.353058, 23.284582 ], [ 111.36476, 23.240047 ], [ 111.388782, 23.210349 ], [ 111.38447, 23.16744 ], [ 111.365992, 23.14488 ], [ 111.377695, 23.082132 ], [ 111.402333, 23.066165 ], [ 111.43313, 23.073322 ], [ 111.433746, 23.036428 ], [ 111.389398, 23.005583 ], [ 111.403565, 22.99126 ], [ 111.362913, 22.967568 ], [ 111.374615, 22.938361 ], [ 111.358601, 22.889301 ], [ 111.218167, 22.748085 ], [ 111.185522, 22.735942 ], [ 111.118385, 22.744773 ], [ 111.058023, 22.729871 ], [ 111.089435, 22.695643 ], [ 111.055559, 22.648705 ], [ 110.997045, 22.631582 ], [ 110.958856, 22.636553 ], [ 110.950233, 22.61059 ], [ 110.896031, 22.613352 ], [ 110.897878, 22.591805 ], [ 110.812263, 22.576333 ], [ 110.778386, 22.585174 ], [ 110.749437, 22.556991 ], [ 110.762988, 22.518298 ], [ 110.740198, 22.498947 ], [ 110.74143, 22.464109 ], [ 110.688459, 22.477935 ], [ 110.712481, 22.440879 ], [ 110.711249, 22.369506 ], [ 110.74143, 22.361757 ], [ 110.749437, 22.329653 ], [ 110.787009, 22.28259 ], [ 110.759292, 22.274837 ], [ 110.725415, 22.29588 ], [ 110.687843, 22.249914 ], [ 110.646575, 22.220554 ], [ 110.678604, 22.172901 ], [ 110.629329, 22.149068 ], [ 110.598532, 22.162924 ], [ 110.602843, 22.18343 ], [ 110.55788, 22.196175 ], [ 110.505525, 22.14297 ], [ 110.456866, 22.189526 ], [ 110.414366, 22.208365 ], [ 110.378026, 22.164587 ], [ 110.34846, 22.195621 ], [ 110.326287, 22.152393 ], [ 110.364475, 22.125785 ], [ 110.35154, 22.097508 ], [ 110.359547, 22.015973 ], [ 110.352772, 21.97602 ], [ 110.374946, 21.967695 ], [ 110.374946, 21.967695 ], [ 110.378642, 21.939942 ], [ 110.378642, 21.939942 ], [ 110.391576, 21.89386 ], [ 110.337374, 21.887751 ], [ 110.290562, 21.917736 ], [ 110.283787, 21.892194 ], [ 110.224041, 21.882198 ], [ 110.224041, 21.882198 ], [ 110.212338, 21.886085 ], [ 110.212338, 21.886085 ], [ 110.196323, 21.899968 ], [ 110.12857, 21.902744 ], [ 110.101469, 21.86998 ], [ 110.050962, 21.857205 ], [ 109.999839, 21.881643 ], [ 109.94502, 21.84443 ], [ 109.940093, 21.769419 ], [ 109.916071, 21.668787 ], [ 109.888354, 21.652101 ], [ 109.888354, 21.652101 ], [ 109.839695, 21.636525 ], [ 109.786108, 21.637638 ], [ 109.778101, 21.670455 ], [ 109.742992, 21.616497 ], [ 109.754695, 21.556396 ], [ 109.788572, 21.490702 ], [ 109.785492, 21.45673 ], [ 109.704188, 21.462857 ], [ 109.654913, 21.493487 ], [ 109.612413, 21.556953 ], [ 109.604406, 21.523553 ], [ 109.576689, 21.493487 ], [ 109.540964, 21.466199 ], [ 109.529877, 21.437234 ], [ 109.484914, 21.453388 ], [ 109.41716, 21.438906 ], [ 109.245929, 21.425536 ], [ 109.186183, 21.390991 ], [ 109.138756, 21.388762 ], [ 109.095024, 21.419407 ], [ 109.046365, 21.424421 ], [ 109.039589, 21.457844 ], [ 109.074698, 21.489589 ], [ 109.142451, 21.511861 ], [ 109.138756, 21.567528 ], [ 109.110422, 21.568085 ], [ 109.09872, 21.571424 ], [ 109.093792, 21.579215 ], [ 108.937959, 21.589789 ], [ 108.881293, 21.627068 ], [ 108.83325, 21.610933 ], [ 108.801837, 21.626512 ], [ 108.745786, 21.602587 ], [ 108.710062, 21.646538 ], [ 108.705134, 21.622061 ], [ 108.678033, 21.659331 ], [ 108.658939, 21.643757 ], [ 108.626294, 21.67991 ], [ 108.591802, 21.677129 ], [ 108.492635, 21.554727 ], [ 108.397781, 21.533017 ], [ 108.330027, 21.540254 ], [ 108.230245, 21.491259 ], [ 108.210535, 21.505737 ], [ 108.249955, 21.561406 ], [ 108.241332, 21.599805 ], [ 108.205608, 21.597579 ], [ 108.156332, 21.55083 ], [ 108.193905, 21.519656 ], [ 108.108289, 21.508521 ], [ 108.041768, 21.544151 ], [ 107.958, 21.534131 ], [ 107.929051, 21.585893 ], [ 107.893942, 21.596466 ], [ 107.892095, 21.622617 ], [ 107.863761, 21.650988 ], [ 107.837892, 21.640419 ], [ 107.807711, 21.655438 ], [ 107.712856, 21.616497 ], [ 107.603219, 21.597579 ], [ 107.584741, 21.614828 ], [ 107.547168, 21.58645 ], [ 107.486806, 21.59591 ], [ 107.500973, 21.613715 ], [ 107.477567, 21.659888 ], [ 107.431372, 21.642088 ], [ 107.388256, 21.594241 ], [ 107.363619, 21.602031 ], [ 107.356843, 21.667674 ], [ 107.310648, 21.733844 ], [ 107.271844, 21.727173 ], [ 107.242279, 21.703265 ], [ 107.199163, 21.718833 ], [ 107.194851, 21.736624 ], [ 107.148656, 21.758858 ], [ 107.093837, 21.803317 ], [ 107.018077, 21.81943 ], [ 107.018693, 21.859427 ], [ 107.058729, 21.887196 ], [ 107.05996, 21.914959 ], [ 106.999598, 21.947714 ], [ 106.974345, 21.923288 ], [ 106.935541, 21.933836 ], [ 106.926302, 21.967695 ], [ 106.859164, 21.986009 ], [ 106.802498, 21.98157 ], [ 106.790179, 22.004876 ], [ 106.73844, 22.008205 ], [ 106.698404, 21.959925 ], [ 106.683006, 21.999882 ], [ 106.706411, 22.021521 ], [ 106.71565, 22.089745 ], [ 106.691629, 22.13521 ], [ 106.706411, 22.160707 ], [ 106.673151, 22.182322 ], [ 106.7021, 22.207257 ], [ 106.688549, 22.260438 ], [ 106.670071, 22.283144 ], [ 106.663296, 22.33076 ], [ 106.562897, 22.345706 ], [ 106.588767, 22.374486 ], [ 106.560434, 22.455813 ], [ 106.588151, 22.472958 ], [ 106.585071, 22.517192 ], [ 106.61402, 22.602303 ], [ 106.652825, 22.57357 ], [ 106.711955, 22.575228 ], [ 106.756302, 22.68957 ], [ 106.780324, 22.708894 ], [ 106.768621, 22.739254 ], [ 106.820976, 22.768504 ], [ 106.838838, 22.803265 ], [ 106.813585, 22.817608 ], [ 106.808657, 22.817608 ], [ 106.804346, 22.816505 ], [ 106.801882, 22.815401 ], [ 106.776012, 22.813746 ], [ 106.709491, 22.866142 ], [ 106.716882, 22.881582 ], [ 106.674998, 22.891506 ], [ 106.657136, 22.863385 ], [ 106.631267, 22.88103 ], [ 106.606013, 22.925684 ], [ 106.562282, 22.923479 ], [ 106.525941, 22.946628 ], [ 106.504383, 22.91025 ], [ 106.41384, 22.877171 ], [ 106.37134, 22.878273 ], [ 106.366413, 22.857871 ], [ 106.286957, 22.867245 ], [ 106.258007, 22.889852 ], [ 106.270326, 22.907494 ], [ 106.206885, 22.978588 ], [ 106.153914, 22.988505 ], [ 106.106486, 22.980792 ], [ 106.08616, 22.996218 ], [ 106.019639, 22.990709 ], [ 105.994385, 22.93781 ], [ 105.959277, 22.948832 ], [ 105.893987, 22.936707 ], [ 105.879205, 22.916865 ], [ 105.839169, 22.987403 ], [ 105.805908, 22.994565 ], [ 105.780039, 23.022659 ], [ 105.74185, 23.030921 ], [ 105.724604, 23.06231 ], [ 105.648844, 23.078828 ], [ 105.625438, 23.064513 ], [ 105.574931, 23.066165 ], [ 105.558916, 23.177893 ], [ 105.542902, 23.184495 ], [ 105.526272, 23.234548 ], [ 105.560148, 23.257093 ], [ 105.593409, 23.312614 ], [ 105.649459, 23.346136 ], [ 105.699966, 23.327453 ], [ 105.694423, 23.363168 ], [ 105.637757, 23.404366 ], [ 105.699966, 23.40162 ], [ 105.758481, 23.459826 ], [ 105.805908, 23.467512 ], [ 105.815763, 23.507031 ], [ 105.852103, 23.526786 ], [ 105.89214, 23.52514 ], [ 105.913081, 23.499348 ], [ 105.935871, 23.508678 ], [ 105.986378, 23.489469 ], [ 105.999929, 23.447748 ], [ 106.039965, 23.484529 ], [ 106.071994, 23.495506 ], [ 106.08616, 23.524043 ], [ 106.141595, 23.569579 ], [ 106.120653, 23.605229 ], [ 106.149602, 23.665538 ], [ 106.157609, 23.724175 ], [ 106.136667, 23.795381 ], [ 106.192102, 23.824947 ], [ 106.173008, 23.861622 ], [ 106.192718, 23.879135 ], [ 106.157609, 23.891174 ], [ 106.128044, 23.956819 ], [ 106.091088, 23.998924 ], [ 106.096631, 24.018058 ], [ 106.053516, 24.051399 ], [ 106.04982, 24.089649 ], [ 106.011632, 24.099482 ], [ 105.998081, 24.120786 ], [ 105.963589, 24.110954 ], [ 105.919241, 24.122425 ], [ 105.901995, 24.099482 ], [ 105.908154, 24.069432 ], [ 105.89214, 24.040468 ], [ 105.859495, 24.056864 ], [ 105.841633, 24.03063 ], [ 105.796669, 24.023524 ], [ 105.802212, 24.051945 ], [ 105.765256, 24.073804 ], [ 105.739387, 24.059596 ], [ 105.704278, 24.0667 ], [ 105.649459, 24.032816 ], [ 105.628518, 24.126794 ], [ 105.594641, 24.137718 ], [ 105.533663, 24.130071 ], [ 105.493011, 24.016965 ], [ 105.406163, 24.043748 ], [ 105.395692, 24.065607 ], [ 105.334099, 24.094566 ], [ 105.320548, 24.116416 ], [ 105.273121, 24.092927 ], [ 105.292831, 24.074896 ], [ 105.260186, 24.061236 ], [ 105.20044, 24.105491 ], [ 105.182577, 24.167205 ], [ 105.229389, 24.165567 ], [ 105.24294, 24.208695 ], [ 105.215222, 24.214699 ], [ 105.164715, 24.288362 ], [ 105.196744, 24.326541 ], [ 105.188121, 24.347261 ], [ 105.138846, 24.376701 ], [ 105.111744, 24.37234 ], [ 105.106817, 24.414853 ], [ 105.042759, 24.442097 ], [ 104.979933, 24.412673 ], [ 104.930042, 24.411038 ], [ 104.914028, 24.426296 ], [ 104.83642, 24.446456 ], [ 104.784681, 24.443732 ], [ 104.765587, 24.45953 ], [ 104.74834, 24.435559 ], [ 104.715695, 24.441552 ], [ 104.703377, 24.419757 ], [ 104.721239, 24.340173 ], [ 104.70892, 24.321087 ], [ 104.641783, 24.367979 ], [ 104.610986, 24.377246 ], [ 104.63008, 24.397958 ], [ 104.616529, 24.421937 ], [ 104.575877, 24.424661 ], [ 104.550008, 24.518894 ], [ 104.520443, 24.535228 ], [ 104.489646, 24.653313 ], [ 104.529682, 24.731611 ], [ 104.595587, 24.709323 ], [ 104.628848, 24.660927 ], [ 104.703377, 24.645698 ], [ 104.729246, 24.617953 ], [ 104.771746, 24.659839 ], [ 104.841963, 24.676155 ], [ 104.865985, 24.730524 ], [ 104.899245, 24.752809 ], [ 105.03352, 24.787586 ], [ 105.026745, 24.815836 ], [ 105.039064, 24.872859 ], [ 105.077868, 24.918459 ], [ 105.082179, 24.915745 ], [ 105.096346, 24.928228 ], [ 105.09573, 24.92877 ], [ 105.131454, 24.959701 ], [ 105.157324, 24.958616 ], [ 105.178266, 24.985199 ], [ 105.212758, 24.995505 ], [ 105.251563, 24.967296 ], [ 105.267577, 24.929313 ], [ 105.334099, 24.9266 ], [ 105.365511, 24.943423 ], [ 105.428337, 24.930941 ], [ 105.457286, 24.87123 ], [ 105.493011, 24.833217 ], [ 105.497322, 24.809318 ], [ 105.573083, 24.797366 ], [ 105.607576, 24.803885 ], [ 105.617431, 24.78161 ], [ 105.70551, 24.768569 ], [ 105.767104, 24.719109 ], [ 105.827466, 24.702799 ], [ 105.863806, 24.729437 ], [ 105.942031, 24.725088 ], [ 105.961741, 24.677786 ], [ 106.024566, 24.633186 ], [ 106.047356, 24.684312 ], [ 106.113878, 24.714216 ], [ 106.150218, 24.762591 ], [ 106.173008, 24.760417 ], [ 106.206269, 24.851139 ], [ 106.197645, 24.885889 ], [ 106.145291, 24.954275 ], [ 106.191486, 24.95319 ], [ 106.215508, 24.981944 ], [ 106.253696, 24.971094 ], [ 106.304819, 24.973807 ], [ 106.332536, 24.988454 ], [ 106.442173, 25.019369 ], [ 106.450181, 25.033468 ], [ 106.519782, 25.054072 ], [ 106.551195, 25.082802 ], [ 106.590615, 25.08768 ], [ 106.63989, 25.132658 ], [ 106.644817, 25.164621 ], [ 106.691013, 25.179245 ], [ 106.732281, 25.162454 ], [ 106.764926, 25.183036 ], [ 106.787715, 25.17112 ], [ 106.853005, 25.186827 ], [ 106.888113, 25.181953 ], [ 106.904128, 25.231768 ], [ 106.933077, 25.250714 ], [ 106.975577, 25.232851 ], [ 107.013765, 25.275611 ], [ 107.012533, 25.352973 ], [ 106.987896, 25.358922 ], [ 106.963874, 25.437852 ], [ 106.996519, 25.442716 ], [ 107.015613, 25.495666 ], [ 107.066736, 25.50917 ], [ 107.064272, 25.559391 ], [ 107.185612, 25.578825 ], [ 107.205322, 25.607971 ], [ 107.228728, 25.604733 ], [ 107.232423, 25.556691 ], [ 107.263836, 25.543193 ], [ 107.336517, 25.461089 ], [ 107.308184, 25.432988 ], [ 107.318039, 25.401637 ], [ 107.358691, 25.393528 ], [ 107.375937, 25.411908 ], [ 107.420901, 25.392987 ], [ 107.409198, 25.347024 ], [ 107.432604, 25.289139 ], [ 107.481263, 25.299961 ], [ 107.489886, 25.276693 ], [ 107.472024, 25.213902 ], [ 107.512676, 25.209029 ], [ 107.576734, 25.256668 ], [ 107.599523, 25.250714 ], [ 107.632168, 25.310241 ], [ 107.659885, 25.316192 ], [ 107.661733, 25.258833 ], [ 107.696226, 25.219858 ], [ 107.700537, 25.194408 ], [ 107.741805, 25.24043 ], [ 107.762131, 25.229061 ], [ 107.760283, 25.188451 ], [ 107.789233, 25.15487 ], [ 107.762747, 25.125073 ], [ 107.839124, 25.115861 ], [ 107.872384, 25.141327 ], [ 107.928435, 25.155954 ], [ 108.001732, 25.196574 ], [ 108.080572, 25.193867 ], [ 108.115065, 25.210112 ], [ 108.143398, 25.269658 ], [ 108.152021, 25.324306 ], [ 108.142782, 25.390825 ], [ 108.193289, 25.405421 ], [ 108.162492, 25.444878 ], [ 108.192673, 25.458928 ], [ 108.251803, 25.430286 ], [ 108.241332, 25.46217 ], [ 108.280752, 25.48 ], [ 108.308469, 25.525912 ], [ 108.348506, 25.536173 ], [ 108.359592, 25.513491 ], [ 108.400244, 25.491344 ], [ 108.418723, 25.443257 ], [ 108.471693, 25.458928 ], [ 108.585642, 25.365952 ], [ 108.589338, 25.335125 ], [ 108.625062, 25.308076 ], [ 108.62999, 25.335666 ], [ 108.600425, 25.432448 ], [ 108.6072, 25.491885 ], [ 108.634917, 25.520512 ], [ 108.68912, 25.533473 ], [ 108.658323, 25.550212 ], [ 108.660787, 25.584763 ], [ 108.68604, 25.587462 ], [ 108.68912, 25.623081 ], [ 108.724844, 25.634952 ], [ 108.783975, 25.628477 ], [ 108.799989, 25.576666 ], [ 108.781511, 25.554531 ], [ 108.814772, 25.526992 ], [ 108.826474, 25.550212 ], [ 108.890532, 25.556151 ], [ 108.8893, 25.543193 ], [ 108.949046, 25.557231 ], [ 109.024807, 25.51241 ], [ 109.088249, 25.550752 ], [ 109.051908, 25.566949 ], [ 109.030966, 25.629556 ], [ 109.075314, 25.693749 ], [ 109.07901, 25.72071 ], [ 109.043285, 25.738502 ], [ 109.007561, 25.734728 ], [ 108.953974, 25.686738 ], [ 108.953974, 25.686738 ], [ 108.900387, 25.682423 ], [ 108.896076, 25.71424 ], [ 108.940423, 25.740119 ], [ 108.963829, 25.732572 ], [ 108.999553, 25.765453 ], [ 108.989698, 25.778926 ], [ 109.048213, 25.790781 ], [ 109.077778, 25.776771 ], [ 109.095024, 25.80533 ], [ 109.143683, 25.795092 ], [ 109.13198, 25.762758 ], [ 109.147995, 25.741736 ], [ 109.206509, 25.788087 ], [ 109.207125, 25.740119 ], [ 109.296436, 25.71424 ], [ 109.340168, 25.731493 ], [ 109.327849, 25.76168 ], [ 109.339552, 25.83442 ], [ 109.359262, 25.836036 ], [ 109.396834, 25.900117 ], [ 109.435022, 25.93349 ], [ 109.408537, 25.967392 ], [ 109.462124, 25.995367 ], [ 109.48245, 26.029788 ], [ 109.513247, 25.998056 ], [ 109.560058, 26.021184 ], [ 109.588391, 26.019571 ], [ 109.635203, 26.047533 ], [ 109.649369, 26.016882 ], [ 109.730057, 25.989988 ], [ 109.710963, 25.954478 ], [ 109.693717, 25.959321 ], [ 109.67955, 25.921649 ], [ 109.685094, 25.880197 ], [ 109.768246, 25.890427 ], [ 109.779333, 25.866196 ], [ 109.811361, 25.877504 ], [ 109.826144, 25.911422 ], [ 109.806434, 25.973848 ], [ 109.782412, 25.996981 ], [ 109.814441, 26.041081 ], [ 109.864332, 26.027637 ], [ 109.898825, 26.095377 ], [ 109.904368, 26.135679 ], [ 109.970274, 26.195301 ], [ 110.03002, 26.166299 ], [ 110.099005, 26.168985 ], [ 110.100853, 26.132455 ], [ 110.065128, 26.050221 ], [ 110.100853, 26.020108 ], [ 110.168606, 26.028713 ], [ 110.181541, 26.060437 ], [ 110.24991, 26.010965 ], [ 110.257301, 25.961473 ], [ 110.325671, 25.975462 ], [ 110.373098, 26.088927 ], [ 110.437772, 26.153945 ], [ 110.477808, 26.179727 ], [ 110.495054, 26.166299 ], [ 110.546793, 26.233421 ], [ 110.552952, 26.283335 ], [ 110.584365, 26.296749 ], [ 110.612083, 26.333764 ], [ 110.643495, 26.308552 ], [ 110.673676, 26.317135 ], [ 110.711249, 26.29192 ], [ 110.742046, 26.313917 ], [ 110.73835, 26.271529 ], [ 110.759292, 26.248451 ], [ 110.836284, 26.255966 ], [ 110.939762, 26.286554 ], [ 110.926212, 26.320354 ], [ 110.944074, 26.326791 ], [ 110.94469, 26.373447 ], [ 110.974255, 26.385778 ], [ 111.008747, 26.35897 ], [ 111.008132, 26.336982 ], [ 111.090667, 26.308016 ], [ 111.208928, 26.30426 ], [ 111.204616, 26.276359 ], [ 111.228022, 26.261333 ], [ 111.277913, 26.272066 ], [ 111.293311, 26.222148 ], [ 111.271754, 26.217316 ], [ 111.274833, 26.183486 ], [ 111.258203, 26.151796 ], [ 111.26621, 26.095914 ], [ 111.244652, 26.078177 ], [ 111.267442, 26.058824 ], [ 111.235413, 26.048071 ], [ 111.189834, 25.953402 ], [ 111.230486, 25.916267 ], [ 111.251428, 25.864581 ], [ 111.29208, 25.854349 ], [ 111.297007, 25.874274 ], [ 111.346282, 25.906577 ], [ 111.376463, 25.906039 ], [ 111.383239, 25.881812 ], [ 111.460231, 25.885042 ], [ 111.4861, 25.859196 ], [ 111.43313, 25.84627 ], [ 111.442369, 25.77192 ], [ 111.399869, 25.744431 ], [ 111.30871, 25.720171 ], [ 111.309942, 25.645203 ], [ 111.343202, 25.602574 ], [ 111.324724, 25.564249 ], [ 111.32842, 25.521592 ], [ 111.300087, 25.44812 ], [ 111.26313, 25.42326 ], [ 111.257587, 25.395691 ], [ 111.210776, 25.363248 ], [ 111.184906, 25.367034 ], [ 111.138711, 25.303748 ], [ 111.103602, 25.285351 ], [ 111.112841, 25.21715 ], [ 110.998892, 25.161371 ], [ 110.98411, 25.101772 ], [ 110.951465, 25.04377 ], [ 110.968711, 24.975434 ], [ 111.009363, 24.921172 ], [ 111.100522, 24.945593 ], [ 111.101754, 25.035095 ], [ 111.139943, 25.042144 ], [ 111.200921, 25.074672 ], [ 111.221862, 25.106649 ], [ 111.274833, 25.151078 ], [ 111.321645, 25.105023 ], [ 111.36784, 25.108817 ], [ 111.375231, 25.128324 ], [ 111.435593, 25.093642 ], [ 111.416499, 25.047566 ], [ 111.467622, 25.02208 ], [ 111.460231, 24.992793 ], [ 111.43313, 24.979774 ], [ 111.434977, 24.951562 ], [ 111.470086, 24.92877 ], [ 111.447296, 24.892947 ], [ 111.449144, 24.857113 ], [ 111.479325, 24.797366 ], [ 111.461463, 24.728894 ], [ 111.431282, 24.687574 ], [ 111.451608, 24.665822 ], [ 111.499035, 24.667997 ], [ 111.526752, 24.637538 ], [ 111.570484, 24.64461 ], [ 111.588962, 24.690837 ], [ 111.641933, 24.684856 ], [ 111.637621, 24.715303 ], [ 111.666571, 24.760961 ], [ 111.708455, 24.788673 ], [ 111.783599, 24.785957 ], [ 111.814396, 24.770199 ], [ 111.868599, 24.771829 ], [ 111.875374, 24.756613 ], [ 111.929577, 24.75607 ], [ 111.951135, 24.769655 ], [ 112.024431, 24.740308 ] ] ], [ [ [ 105.096346, 24.928228 ], [ 105.082179, 24.915745 ], [ 105.077868, 24.918459 ], [ 105.09573, 24.92877 ], [ 105.096346, 24.928228 ] ] ], [ [ [ 109.088249, 21.014934 ], [ 109.088865, 21.031134 ], [ 109.09256, 21.057386 ], [ 109.138756, 21.067439 ], [ 109.144299, 21.041189 ], [ 109.117814, 21.017727 ], [ 109.11227, 21.02499 ], [ 109.088249, 21.014934 ] ] ] ] } }, +{ "type": "Feature", "properties": { "adcode": "460000", "name": "海南省", "center": [ 110.33119, 20.031971 ], "centroid": [ 109.754859, 19.189767 ], "childrenNum": 19, "level": "province", "parent": { "adcode": 100000 }, "subFeatureIndex": 20, "acroutes": [ 100000 ] }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 110.106396, 20.026812 ], [ 110.144585, 20.074598 ], [ 110.243135, 20.077408 ], [ 110.28933, 20.056047 ], [ 110.318279, 20.108882 ], [ 110.387265, 20.113378 ], [ 110.495054, 20.077408 ], [ 110.526467, 20.07516 ], [ 110.562191, 20.110006 ], [ 110.655814, 20.134169 ], [ 110.687843, 20.163947 ], [ 110.717408, 20.148778 ], [ 110.744509, 20.074036 ], [ 110.778386, 20.068415 ], [ 110.808567, 20.035808 ], [ 110.871393, 20.01163 ], [ 110.940994, 20.028499 ], [ 110.966248, 20.018377 ], [ 111.013675, 19.850159 ], [ 111.043856, 19.763448 ], [ 111.071573, 19.628784 ], [ 111.061718, 19.612436 ], [ 111.008747, 19.60398 ], [ 110.920668, 19.552668 ], [ 110.888023, 19.518827 ], [ 110.844292, 19.449996 ], [ 110.787009, 19.399765 ], [ 110.729727, 19.378878 ], [ 110.706321, 19.320153 ], [ 110.676756, 19.286264 ], [ 110.619474, 19.152334 ], [ 110.585597, 18.88075 ], [ 110.590525, 18.838841 ], [ 110.578206, 18.784458 ], [ 110.499366, 18.751592 ], [ 110.499366, 18.651824 ], [ 110.367555, 18.631977 ], [ 110.329366, 18.642185 ], [ 110.246215, 18.609859 ], [ 110.214186, 18.578662 ], [ 110.116867, 18.506602 ], [ 110.090382, 18.399309 ], [ 110.070672, 18.376025 ], [ 110.022629, 18.360121 ], [ 109.919767, 18.375457 ], [ 109.785492, 18.339672 ], [ 109.749767, 18.193618 ], [ 109.726362, 18.177698 ], [ 109.661688, 18.175424 ], [ 109.584696, 18.143579 ], [ 109.527413, 18.169169 ], [ 109.467051, 18.173718 ], [ 109.441182, 18.199303 ], [ 109.355566, 18.215221 ], [ 109.287813, 18.264671 ], [ 109.17448, 18.260125 ], [ 109.138756, 18.268081 ], [ 109.108575, 18.323766 ], [ 109.006329, 18.323198 ], [ 108.944735, 18.314107 ], [ 108.905315, 18.389087 ], [ 108.881293, 18.416344 ], [ 108.776583, 18.441894 ], [ 108.68912, 18.447571 ], [ 108.644772, 18.486738 ], [ 108.641077, 18.565614 ], [ 108.663866, 18.67337 ], [ 108.65278, 18.740258 ], [ 108.593033, 18.809386 ], [ 108.595497, 18.872256 ], [ 108.637997, 18.924346 ], [ 108.630606, 19.003017 ], [ 108.598577, 19.055633 ], [ 108.591186, 19.141592 ], [ 108.609048, 19.276661 ], [ 108.644772, 19.349518 ], [ 108.694047, 19.387346 ], [ 108.765496, 19.400894 ], [ 108.806148, 19.450561 ], [ 108.855424, 19.469182 ], [ 108.92872, 19.524468 ], [ 108.993394, 19.587065 ], [ 109.048829, 19.619764 ], [ 109.093792, 19.68965 ], [ 109.147379, 19.704863 ], [ 109.169553, 19.736411 ], [ 109.159082, 19.79048 ], [ 109.231147, 19.863105 ], [ 109.255784, 19.867045 ], [ 109.25948, 19.898561 ], [ 109.300748, 19.917693 ], [ 109.349407, 19.898561 ], [ 109.411001, 19.895184 ], [ 109.498464, 19.873236 ], [ 109.526797, 19.943573 ], [ 109.585312, 19.98801 ], [ 109.657993, 20.01163 ], [ 109.712195, 20.017253 ], [ 109.76147, 19.981261 ], [ 109.814441, 19.993072 ], [ 109.855093, 19.984073 ], [ 109.898825, 19.994196 ], [ 109.965346, 19.993634 ], [ 109.997375, 19.980136 ], [ 110.042339, 19.991384 ], [ 110.106396, 20.026812 ] ] ], [ [ [ 112.203848648399557, 3.87222818584552 ], [ 112.219068, 3.908969 ], [ 112.260336, 3.917925 ], [ 112.292871092971765, 3.856691249764521 ], [ 112.239961526858096, 3.836535224578359 ], [ 112.203848648399557, 3.87222818584552 ] ] ], [ [ [ 113.266165, 8.125929 ], [ 113.293882, 8.176284 ], [ 113.353628, 8.237887 ], [ 113.354244, 8.304217 ], [ 113.386273, 8.289412 ], [ 113.386273, 8.238479 ], [ 113.349933, 8.172137 ], [ 113.288955, 8.119412 ], [ 113.343157, 8.193463 ], [ 113.311129, 8.177469 ], [ 113.266165, 8.125929 ] ] ], [ [ [ 111.463311, 17.077491 ], [ 111.452224, 17.092936 ], [ 111.542151, 17.11982 ], [ 111.559397, 17.087788 ], [ 111.4861, 17.058039 ], [ 111.536607, 17.104949 ], [ 111.463311, 17.077491 ] ] ], [ [ [ 111.99733, 3.848065 ], [ 112.007327402834477, 3.874747688993791 ], [ 112.033782185891312, 3.88524561877825 ], [ 112.057717465799882, 3.882306198438601 ], [ 112.073707, 3.865979 ], [ 112.064467, 3.830152 ], [ 112.040500860953372, 3.814279613435307 ], [ 112.015192, 3.823583 ], [ 111.99733, 3.848065 ] ] ], [ [ [ 117.69258625690604, 15.174719308985452 ], [ 117.715095, 15.222561 ], [ 117.72659954940768, 15.237286970500829 ], [ 117.748355, 15.230068 ], [ 117.782848, 15.187333 ], [ 117.839977191079839, 15.157922621330318 ], [ 117.845856031759141, 15.138186513335535 ], [ 117.841656859845358, 15.124749163211428 ], [ 117.832838598826413, 15.152043780651022 ], [ 117.777409529564466, 15.172619723028561 ], [ 117.74466, 15.217941 ], [ 117.720638, 15.195418 ], [ 117.72495, 15.131302 ], [ 117.827812, 15.111659 ], [ 117.826959758147112, 15.099974048920105 ], [ 117.726798, 15.105303 ], [ 117.70980286175255, 15.108372392747672 ], [ 117.69258625690604, 15.174719308985452 ] ] ], [ [ [ 112.241858, 3.942404 ], [ 112.243320864389119, 3.968809139862543 ], [ 112.254177, 3.97942 ], [ 112.270195564637334, 3.986445661900434 ], [ 112.290771507014881, 3.980566821221137 ], [ 112.292365, 3.946583 ], [ 112.265156558340792, 3.932696261404004 ], [ 112.241858, 3.942404 ] ] ], [ [ [ 111.734324, 16.19732 ], [ 111.790374, 16.220307 ], [ 111.789758, 16.250186 ], [ 111.716462, 16.249036 ], [ 111.782367, 16.273741 ], [ 111.813164, 16.261676 ], [ 111.81686, 16.224329 ], [ 111.779903, 16.19732 ], [ 111.734324, 16.19732 ] ] ], [ [ [ 113.896887, 7.607204 ], [ 113.921524, 7.639235 ], [ 114.029314, 7.670078 ], [ 114.095219, 7.721082 ], [ 114.211632, 7.786904 ], [ 114.268298, 7.870501 ], [ 114.414892, 7.952895 ], [ 114.47279, 7.968898 ], [ 114.511594, 7.966527 ], [ 114.540543, 7.945783 ], [ 114.555326, 7.891249 ], [ 114.540543, 7.862201 ], [ 114.464167, 7.814771 ], [ 114.419819, 7.765557 ], [ 114.407501, 7.683126 ], [ 114.368696, 7.638642 ], [ 114.289856, 7.617288 ], [ 114.157429, 7.561525 ], [ 114.058879, 7.537794 ], [ 113.98743, 7.536014 ], [ 113.919677, 7.566865 ], [ 113.896887, 7.607204 ] ] ], [ [ [ 111.649324, 16.255931 ], [ 111.681353, 16.262251 ], [ 111.598817, 16.198469 ], [ 111.606825, 16.177779 ], [ 111.690592, 16.211112 ], [ 111.611136, 16.156511 ], [ 111.56802, 16.162834 ], [ 111.577875, 16.208239 ], [ 111.649324, 16.255931 ] ] ], [ [ [ 113.976959, 8.872888 ], [ 113.989894, 8.878801 ], [ 114.041017, 8.843913 ], [ 114.060111, 8.816119 ], [ 114.035473, 8.783591 ], [ 114.013299, 8.836817 ], [ 113.976959, 8.872888 ] ] ], [ [ [ 113.956017, 8.840365 ], [ 113.977575, 8.841548 ], [ 114.012068, 8.798376 ], [ 113.975111, 8.793054 ], [ 113.956017, 8.840365 ] ] ], [ [ [ 112.216604, 8.866383 ], [ 112.180264, 8.862244 ], [ 112.206133, 8.88767 ], [ 112.216604, 8.866383 ] ] ], [ [ [ 111.739251, 16.452898 ], [ 111.765737, 16.495366 ], [ 111.759577, 16.545857 ], [ 111.786679, 16.520039 ], [ 111.766969, 16.470116 ], [ 111.739251, 16.452898 ] ] ], [ [ [ 111.97454, 16.323715 ], [ 112.002874, 16.350707 ], [ 112.047221, 16.360469 ], [ 112.074938, 16.349558 ], [ 112.07617, 16.323715 ], [ 112.002258, 16.306484 ], [ 111.97454, 16.323715 ] ] ], [ [ [ 113.792177, 7.373422 ], [ 113.829134, 7.383511 ], [ 113.828518, 7.362145 ], [ 113.792177, 7.373422 ] ] ], [ [ [ 114.194386, 8.764664 ], [ 114.222103, 8.784773 ], [ 114.248588, 8.724442 ], [ 114.201161, 8.727991 ], [ 114.194386, 8.764664 ] ] ], [ [ [ 112.232619, 16.996239 ], [ 112.266496, 16.993949 ], [ 112.292981, 16.96762 ], [ 112.222764, 16.960751 ], [ 112.207981, 16.987081 ], [ 112.232619, 16.996239 ] ] ], [ [ [ 114.617536, 9.965688 ], [ 114.685905, 9.979245 ], [ 114.672355, 9.927963 ], [ 114.642173, 9.917351 ], [ 114.617536, 9.965688 ] ] ], [ [ [ 115.837712, 9.709775 ], [ 115.870972, 9.778785 ], [ 115.901153, 9.795888 ], [ 115.925791, 9.781734 ], [ 115.901153, 9.67084 ], [ 115.867277, 9.650191 ], [ 115.861117, 9.694438 ], [ 115.837712, 9.709775 ] ] ], [ [ [ 114.689601, 10.345648 ], [ 114.717318, 10.380381 ], [ 114.747499, 10.37214 ], [ 114.725941, 10.319154 ], [ 114.702536, 10.312677 ], [ 114.689601, 10.345648 ] ] ], [ [ [ 113.769387, 7.636862 ], [ 113.831597, 7.644573 ], [ 113.814967, 7.603051 ], [ 113.773699, 7.601865 ], [ 113.769387, 7.636862 ] ] ], [ [ [ 109.463972, 7.344339 ], [ 109.536037, 7.448792 ], [ 109.653065, 7.559745 ], [ 109.72205, 7.575763 ], [ 109.816289, 7.572797 ], [ 109.904984, 7.55144 ], [ 109.948716, 7.522962 ], [ 109.938861, 7.504569 ], [ 109.791651, 7.524742 ], [ 109.709115, 7.511095 ], [ 109.654297, 7.479648 ], [ 109.571761, 7.373422 ], [ 109.513247, 7.320002 ], [ 109.463972, 7.315254 ], [ 109.463972, 7.344339 ] ] ], [ [ [ 116.273181, 8.879392 ], [ 116.305826, 8.917233 ], [ 116.332311, 8.901269 ], [ 116.294123, 8.858105 ], [ 116.273181, 8.879392 ] ] ], [ [ [ 112.476531, 16.001247 ], [ 112.448814, 16.005274 ], [ 112.462364, 16.043813 ], [ 112.588016, 16.070844 ], [ 112.612037, 16.039212 ], [ 112.570154, 16.011027 ], [ 112.476531, 16.001247 ] ] ], [ [ [ 112.537509, 8.846278 ], [ 112.598487, 8.859288 ], [ 112.639755, 8.818484 ], [ 112.57077, 8.815527 ], [ 112.537509, 8.846278 ] ] ], [ [ [ 114.469095, 10.836261 ], [ 114.55471, 10.900911 ], [ 114.587355, 10.909138 ], [ 114.593514, 10.856245 ], [ 114.565181, 10.836261 ], [ 114.513442, 10.848605 ], [ 114.475254, 10.814512 ], [ 114.469095, 10.836261 ] ] ], [ [ [ 112.409393, 16.294996 ], [ 112.509176, 16.317397 ], [ 112.536893, 16.312228 ], [ 112.531349, 16.285805 ], [ 112.475915, 16.288677 ], [ 112.411241, 16.2634 ], [ 112.383524, 16.265698 ], [ 112.409393, 16.294996 ] ] ], [ [ [ 112.349031, 16.912088 ], [ 112.30222, 16.963041 ], [ 112.334249, 16.962469 ], [ 112.360734, 16.925257 ], [ 112.349031, 16.912088 ] ] ], [ [ [ 111.500267, 16.45175 ], [ 111.538455, 16.461507 ], [ 111.545847, 16.43453 ], [ 111.49534, 16.4374 ], [ 111.500267, 16.45175 ] ] ], [ [ [ 115.500177, 9.897897 ], [ 115.518039, 9.933857 ], [ 115.581481, 9.917351 ], [ 115.585177, 9.896128 ], [ 115.54822, 9.869007 ], [ 115.500177, 9.897897 ] ] ], [ [ [ 116.48876, 10.395686 ], [ 116.526332, 10.426883 ], [ 116.542346, 10.41982 ], [ 116.514629, 10.34918 ], [ 116.637817, 10.365076 ], [ 116.644592, 10.335051 ], [ 116.566368, 10.304434 ], [ 116.511549, 10.297957 ], [ 116.467202, 10.309144 ], [ 116.461658, 10.34918 ], [ 116.48876, 10.395686 ] ] ], [ [ [ 114.669891, 8.210048 ], [ 114.726557, 8.21064 ], [ 114.74134, 8.189316 ], [ 114.691449, 8.18517 ], [ 114.669891, 8.210048 ] ] ], [ [ [ 114.507899, 8.120004 ], [ 114.595978, 8.15792 ], [ 114.624311, 8.149626 ], [ 114.595978, 8.120596 ], [ 114.530073, 8.103415 ], [ 114.507899, 8.120004 ] ] ], [ [ [ 115.16757, 8.386523 ], [ 115.202678, 8.395403 ], [ 115.299381, 8.370537 ], [ 115.315395, 8.356326 ], [ 115.285214, 8.314876 ], [ 115.235939, 8.321982 ], [ 115.18112, 8.345668 ], [ 115.16757, 8.386523 ] ] ], [ [ [ 113.895039, 8.00505 ], [ 113.940003, 8.018088 ], [ 113.969568, 7.974825 ], [ 113.9708, 7.944597 ], [ 113.904894, 7.963564 ], [ 113.895039, 8.00505 ] ] ], [ [ [ 115.436119, 9.393447 ], [ 115.456445, 9.417064 ], [ 115.469996, 9.3592 ], [ 115.450286, 9.345028 ], [ 115.436119, 9.393447 ] ] ], [ [ [ 113.638192, 8.976942 ], [ 113.644968, 8.989355 ], [ 113.719496, 9.020092 ], [ 113.730583, 9.004133 ], [ 113.654823, 8.962163 ], [ 113.638192, 8.976942 ] ] ], [ [ [ 116.457347, 9.174326 ], [ 116.500462, 9.164282 ], [ 116.477057, 9.137103 ], [ 116.457347, 9.174326 ] ] ], [ [ [ 114.910723, 10.863298 ], [ 114.934129, 10.902674 ], [ 114.959998, 10.902087 ], [ 114.931049, 10.841551 ], [ 114.910723, 10.863298 ] ] ], [ [ [ 113.939387, 8.875253 ], [ 113.916597, 8.837999 ], [ 113.893807, 8.862836 ], [ 113.912285, 8.888853 ], [ 113.939387, 8.875253 ] ] ], [ [ [ 114.696992, 11.004322 ], [ 114.710543, 11.039567 ], [ 114.766593, 11.110045 ], [ 114.799854, 11.10476 ], [ 114.793079, 11.07657 ], [ 114.710543, 11.001972 ], [ 114.696992, 11.004322 ] ] ], [ [ [ 111.572948, 16.470116 ], [ 111.592658, 16.490775 ], [ 111.614216, 16.44027 ], [ 111.578491, 16.447158 ], [ 111.572948, 16.470116 ] ] ], [ [ [ 114.62, 11.432264 ], [ 114.621232, 11.518479 ], [ 114.661884, 11.522584 ], [ 114.652644, 11.436957 ], [ 114.62, 11.432264 ] ] ], [ [ [ 109.936397, 7.848566 ], [ 109.953027, 7.888878 ], [ 110.0331, 7.944597 ], [ 110.078063, 7.949339 ], [ 110.082991, 7.896584 ], [ 110.050346, 7.846194 ], [ 109.988136, 7.8124 ], [ 109.936397, 7.823665 ], [ 109.936397, 7.848566 ] ] ], [ [ [ 116.727128, 11.501473 ], [ 116.738215, 11.514961 ], [ 116.772092, 11.445755 ], [ 116.765316, 11.430504 ], [ 116.727128, 11.501473 ] ] ], [ [ [ 111.761425, 16.061642 ], [ 111.829795, 16.070844 ], [ 111.828563, 16.049565 ], [ 111.791606, 16.028859 ], [ 111.761425, 16.061642 ] ] ], [ [ [ 113.845764, 10.018733 ], [ 113.856851, 10.12185 ], [ 113.872249, 10.123029 ], [ 113.865474, 10.00341 ], [ 113.845764, 10.018733 ] ] ], [ [ [ 111.690592, 16.587731 ], [ 111.717078, 16.59404 ], [ 111.724469, 16.560198 ], [ 111.690592, 16.587731 ] ] ], [ [ [ 112.507328, 16.466098 ], [ 112.499321, 16.493645 ], [ 112.575081, 16.537251 ], [ 112.586784, 16.525777 ], [ 112.507328, 16.466098 ] ] ], [ [ [ 114.791847, 8.160882 ], [ 114.818332, 8.141332 ], [ 114.812173, 8.110524 ], [ 114.777064, 8.114079 ], [ 114.791847, 8.160882 ] ] ], [ [ [ 116.557129, 9.745167 ], [ 116.593469, 9.723932 ], [ 116.566368, 9.718623 ], [ 116.557129, 9.745167 ] ] ], [ [ [ 116.832454, 10.476908 ], [ 116.868794, 10.495739 ], [ 116.855243, 10.468669 ], [ 116.832454, 10.476908 ] ] ], [ [ [ 114.703151, 16.170307 ], [ 114.704383, 16.199044 ], [ 114.802934, 16.215135 ], [ 114.816484, 16.198469 ], [ 114.703151, 16.170307 ] ] ], [ [ [ 115.28275, 10.191951 ], [ 115.28891, 10.211388 ], [ 115.333257, 10.200198 ], [ 115.288294, 10.172513 ], [ 115.28275, 10.191951 ] ] ], [ [ [ 115.97753, 9.321997 ], [ 115.999088, 9.293649 ], [ 115.976298, 9.268252 ], [ 115.943037, 9.269433 ], [ 115.926407, 9.311366 ], [ 115.97753, 9.321997 ] ] ], [ [ [ 113.660366, 9.231039 ], [ 113.697323, 9.225722 ], [ 113.676997, 9.202683 ], [ 113.660366, 9.231039 ] ] ], [ [ [ 114.665579, 7.590001 ], [ 114.703767, 7.614915 ], [ 114.72163, 7.59178 ], [ 114.671739, 7.563898 ], [ 114.665579, 7.590001 ] ] ], [ [ [ 117.770529, 10.773361 ], [ 117.775457, 10.809222 ], [ 117.801942, 10.839788 ], [ 117.831507, 10.838612 ], [ 117.835819, 10.803931 ], [ 117.798862, 10.753371 ], [ 117.770529, 10.773361 ] ] ], [ [ [ 114.242429, 10.242014 ], [ 114.265219, 10.275581 ], [ 114.312646, 10.300901 ], [ 114.326197, 10.284414 ], [ 114.263371, 10.239658 ], [ 114.242429, 10.242014 ] ] ], [ [ [ 114.688985, 11.469217 ], [ 114.720398, 11.49209 ], [ 114.737644, 11.463938 ], [ 114.722246, 11.429331 ], [ 114.688985, 11.469217 ] ] ], [ [ [ 116.638433, 10.503977 ], [ 116.699411, 10.517511 ], [ 116.70865, 10.492797 ], [ 116.653215, 10.491031 ], [ 116.638433, 10.503977 ] ] ], [ [ [ 110.459946, 8.116449 ], [ 110.461793, 8.128298 ], [ 110.568351, 8.17273 ], [ 110.599764, 8.156735 ], [ 110.554184, 8.093935 ], [ 110.471032, 8.072012 ], [ 110.459946, 8.116449 ] ] ], [ [ [ 111.463311, 8.52504 ], [ 111.509506, 8.550489 ], [ 111.497187, 8.523857 ], [ 111.463311, 8.52504 ] ] ], [ [ [ 114.493116, 10.717504 ], [ 114.539312, 10.793349 ], [ 114.562717, 10.778064 ], [ 114.513442, 10.722208 ], [ 114.493116, 10.717504 ] ] ], [ [ [ 113.221817, 8.073789 ], [ 113.269861, 8.120004 ], [ 113.283411, 8.111117 ], [ 113.235984, 8.068456 ], [ 113.221817, 8.073789 ] ] ], [ [ [ 115.258113, 8.509652 ], [ 115.296301, 8.510836 ], [ 115.271048, 8.477098 ], [ 115.258113, 8.509652 ] ] ], [ [ [ 111.539071, 7.54432 ], [ 111.566788, 7.606017 ], [ 111.612368, 7.592374 ], [ 111.583419, 7.543134 ], [ 111.542767, 7.524742 ], [ 111.539071, 7.54432 ] ] ], [ [ [ 117.258068, 10.320331 ], [ 117.274698, 10.358011 ], [ 117.299952, 10.343293 ], [ 117.299336, 10.313855 ], [ 117.258068, 10.320331 ] ] ], [ [ [ 114.074893, 10.929118 ], [ 114.096451, 10.947921 ], [ 114.110002, 10.918541 ], [ 114.064422, 10.904437 ], [ 114.074893, 10.929118 ] ] ], [ [ [ 114.212864, 16.040937 ], [ 114.268914, 16.059342 ], [ 114.306487, 16.057616 ], [ 114.31203, 16.034611 ], [ 114.212864, 16.040937 ] ] ], [ [ [ 110.609003, 8.010976 ], [ 110.622553, 8.041199 ], [ 110.641648, 8.031125 ], [ 110.642879, 7.989049 ], [ 110.609003, 8.010976 ] ] ], [ [ [ 115.509416, 8.490712 ], [ 115.514344, 8.519122 ], [ 115.558691, 8.523265 ], [ 115.569162, 8.49012 ], [ 115.55438, 8.461115 ], [ 115.521735, 8.460523 ], [ 115.509416, 8.490712 ] ] ], [ [ [ 111.657947, 8.672974 ], [ 111.697368, 8.67889 ], [ 111.717694, 8.6499 ], [ 111.665955, 8.622683 ], [ 111.657947, 8.672974 ] ] ], [ [ [ 110.460561, 7.799948 ], [ 110.485199, 7.827815 ], [ 110.511684, 7.805878 ], [ 110.487663, 7.783346 ], [ 110.460561, 7.799948 ] ] ], [ [ [ 112.345952, 8.926101 ], [ 112.384756, 8.946793 ], [ 112.392763, 8.919598 ], [ 112.345952, 8.926101 ] ] ], [ [ [ 116.469665, 9.810041 ], [ 116.490607, 9.821246 ], [ 116.50847, 9.79117 ], [ 116.47952, 9.785272 ], [ 116.469665, 9.810041 ] ] ], [ [ [ 111.925265, 8.070827 ], [ 111.95483, 8.106377 ], [ 112.013344, 8.093342 ], [ 112.018888, 8.065494 ], [ 111.994866, 8.047125 ], [ 111.949287, 8.05068 ], [ 111.925265, 8.070827 ] ] ], [ [ [ 114.457392, 15.599305 ], [ 114.491884, 15.59354 ], [ 114.466631, 15.576823 ], [ 114.457392, 15.599305 ] ] ], [ [ [ 114.985252, 11.078332 ], [ 115.021592, 11.085967 ], [ 115.013585, 11.063062 ], [ 114.985252, 11.078332 ] ] ], [ [ [ 114.10569, 16.004124 ], [ 114.132176, 16.007575 ], [ 114.110618, 15.978235 ], [ 114.10569, 16.004124 ] ] ], [ [ [ 116.045283, 10.095338 ], [ 116.070537, 10.12892 ], [ 116.09579, 10.09357 ], [ 116.067457, 10.065876 ], [ 116.045283, 10.095338 ] ] ], [ [ [ 117.266691, 10.69163 ], [ 117.293176, 10.735144 ], [ 117.369553, 10.7422 ], [ 117.418212, 10.702803 ], [ 117.404661, 10.671047 ], [ 117.348611, 10.672811 ], [ 117.266691, 10.69163 ] ] ], [ [ [ 114.854057, 7.244611 ], [ 114.869455, 7.198895 ], [ 114.819564, 7.192957 ], [ 114.854057, 7.244611 ] ] ], [ [ [ 112.823305, 8.910729 ], [ 112.873196, 8.908364 ], [ 112.859645, 8.889444 ], [ 112.823305, 8.910729 ] ] ], [ [ [ 111.670266, 7.651098 ], [ 111.691208, 7.711593 ], [ 111.726317, 7.729977 ], [ 111.749722, 7.703884 ], [ 111.707223, 7.648725 ], [ 111.670266, 7.651098 ] ] ], [ [ [ 112.207981, 8.835634 ], [ 112.241242, 8.852783 ], [ 112.235699, 8.827355 ], [ 112.207981, 8.835634 ] ] ], [ [ [ 112.527654, 5.79444 ], [ 112.562146, 5.820637 ], [ 112.562762, 5.75931 ], [ 112.531965, 5.766455 ], [ 112.527654, 5.79444 ] ] ], [ [ [ 114.599058, 8.846278 ], [ 114.61692, 8.881166 ], [ 114.665579, 8.900087 ], [ 114.68221, 8.881166 ], [ 114.645869, 8.844504 ], [ 114.599058, 8.846278 ] ] ], [ [ [ 114.868223, 7.983715 ], [ 114.883006, 8.011569 ], [ 114.914419, 8.00742 ], [ 114.907643, 7.951117 ], [ 114.868223, 7.983715 ] ] ], [ [ [ 112.945261, 8.410204 ], [ 112.949572, 8.432701 ], [ 112.985297, 8.429149 ], [ 112.945261, 8.410204 ] ] ], [ [ [ 113.600004, 6.961929 ], [ 113.62341, 6.942325 ], [ 113.580294, 6.920344 ], [ 113.600004, 6.961929 ] ] ], [ [ [ 117.347995, 10.090624 ], [ 117.373864, 10.106532 ], [ 117.385567, 10.063519 ], [ 117.354154, 10.06293 ], [ 117.347995, 10.090624 ] ] ], [ [ [ 112.993304, 19.472003 ], [ 112.980369, 19.496263 ], [ 112.993304, 19.52616 ], [ 113.029028, 19.52898 ], [ 113.048123, 19.506417 ], [ 113.038883, 19.480466 ], [ 112.993304, 19.472003 ] ] ], [ [ [ 114.448153, 16.034035 ], [ 114.465399, 16.067393 ], [ 114.521449, 16.056466 ], [ 114.485109, 16.034611 ], [ 114.448153, 16.034035 ] ] ], [ [ [ 113.832213, 19.158552 ], [ 113.799568, 19.19925 ], [ 113.80696, 19.222986 ], [ 113.875945, 19.237113 ], [ 113.920293, 19.223551 ], [ 113.914749, 19.172119 ], [ 113.874097, 19.151203 ], [ 113.832213, 19.158552 ] ] ], [ [ [ 112.650842, 5.106941 ], [ 112.678559, 5.121247 ], [ 112.719211, 5.075944 ], [ 112.682871, 5.048522 ], [ 112.655769, 5.055676 ], [ 112.650842, 5.106941 ] ] ], [ [ [ 111.638853, 7.907254 ], [ 111.651788, 7.932743 ], [ 111.713382, 7.927408 ], [ 111.712766, 7.887099 ], [ 111.665339, 7.887099 ], [ 111.638853, 7.907254 ] ] ], [ [ [ 112.244322, 8.874662 ], [ 112.288669, 8.885896 ], [ 112.281278, 8.855148 ], [ 112.244322, 8.874662 ] ] ], [ [ [ 112.89229, 7.844416 ], [ 112.93171, 7.867537 ], [ 112.929862, 7.827815 ], [ 112.89229, 7.844416 ] ] ], [ [ [ 112.583088, 5.56159 ], [ 112.616349, 5.568737 ], [ 112.642834, 5.489512 ], [ 112.614501, 5.465683 ], [ 112.606494, 5.51751 ], [ 112.583088, 5.56159 ] ] ], [ [ [ 116.695099, 16.345538 ], [ 116.717889, 16.373676 ], [ 116.747454, 16.360469 ], [ 116.738831, 16.303612 ], [ 116.708034, 16.299591 ], [ 116.695099, 16.345538 ] ] ], [ [ [ 112.523342, 5.656289 ], [ 112.528886, 5.687257 ], [ 112.56153, 5.677133 ], [ 112.565842, 5.63068 ], [ 112.5449, 5.616386 ], [ 112.523342, 5.656289 ] ] ], [ [ [ 112.907072, 4.993079 ], [ 112.910768, 5.038388 ], [ 112.952652, 5.047926 ], [ 112.943413, 4.991887 ], [ 112.907072, 4.993079 ] ] ], [ [ [ 115.361591, 13.948985 ], [ 115.377605, 13.968732 ], [ 115.423185, 13.977443 ], [ 115.438583, 13.943757 ], [ 115.397315, 13.92517 ], [ 115.361591, 13.948985 ] ] ], [ [ [ 113.860546, 15.477068 ], [ 113.890112, 15.490909 ], [ 113.893807, 15.463802 ], [ 113.860546, 15.477068 ] ] ], [ [ [ 113.596924, 10.240836 ], [ 113.638192, 10.243192 ], [ 113.617866, 10.22199 ], [ 113.596924, 10.240836 ] ] ], [ [ [ 112.557219, 5.109326 ], [ 112.601567, 5.120055 ], [ 112.610806, 5.091443 ], [ 112.568922, 5.071771 ], [ 112.557219, 5.109326 ] ] ], [ [ [ 112.350263, 5.621747 ], [ 112.385372, 5.643187 ], [ 112.385988, 5.615791 ], [ 112.350263, 5.621747 ] ] ], [ [ [ 112.226459, 16.759147 ], [ 112.211061, 16.795819 ], [ 112.262184, 16.778057 ], [ 112.254177, 16.751698 ], [ 112.226459, 16.759147 ] ] ], [ [ [ 112.233851, 15.69612 ], [ 112.20367, 15.71398 ], [ 112.240626, 15.741055 ], [ 112.25972, 15.734718 ], [ 112.233851, 15.69612 ] ] ], [ [ [ 112.612037, 5.367973 ], [ 112.62374, 5.401935 ], [ 112.690878, 5.406702 ], [ 112.685334, 5.371548 ], [ 112.640371, 5.347715 ], [ 112.612037, 5.367973 ] ] ], [ [ [ 112.472219, 5.73966 ], [ 112.498089, 5.775387 ], [ 112.496857, 5.736683 ], [ 112.472219, 5.73966 ] ] ], [ [ [ 113.217506, 6.306249 ], [ 113.243991, 6.325878 ], [ 113.230441, 6.285429 ], [ 113.217506, 6.306249 ] ] ], [ [ [ 116.152457, 9.579384 ], [ 116.187565, 9.595317 ], [ 116.189413, 9.565221 ], [ 116.152457, 9.579384 ] ] ], [ [ [ 114.948911, 7.508722 ], [ 115.013585, 7.525928 ], [ 115.012353, 7.484988 ], [ 114.960614, 7.484988 ], [ 114.948911, 7.508722 ] ] ], [ [ [ 111.553854, 7.807656 ], [ 111.603745, 7.861608 ], [ 111.619759, 7.840265 ], [ 111.585267, 7.771487 ], [ 111.553854, 7.807656 ] ] ], [ [ [ 113.938771, 15.8355 ], [ 113.9708, 15.83953 ], [ 113.973263, 15.805558 ], [ 113.938771, 15.8355 ] ] ], [ [ [ 114.926122, 16.036911 ], [ 114.910723, 16.001823 ], [ 114.895325, 16.036336 ], [ 114.926122, 16.036911 ] ] ], [ [ [ 116.749302, 9.056736 ], [ 116.740679, 9.028367 ], [ 116.70865, 9.024229 ], [ 116.699411, 9.049053 ], [ 116.749302, 9.056736 ] ] ], [ [ [ 112.64653, 16.385733 ], [ 112.660081, 16.426494 ], [ 112.681639, 16.400661 ], [ 112.64653, 16.385733 ] ] ], [ [ [ 111.203384, 19.92557 ], [ 111.204, 19.926132 ], [ 111.204, 19.92557 ], [ 111.203384, 19.925007 ], [ 111.203384, 19.92557 ] ] ], [ [ [ 115.758256, 10.461018 ], [ 115.801987, 10.463372 ], [ 115.776118, 10.434534 ], [ 115.758256, 10.461018 ] ] ], [ [ [ 112.671784, 16.331755 ], [ 112.677943, 16.35932 ], [ 112.701349, 16.331755 ], [ 112.671784, 16.331755 ] ] ], [ [ [ 115.782277, 10.541046 ], [ 115.805067, 10.524571 ], [ 115.795212, 10.499858 ], [ 115.782277, 10.541046 ] ] ], [ [ [ 112.512255, 9.544566 ], [ 112.567074, 9.554008 ], [ 112.568922, 9.516826 ], [ 112.50856, 9.525679 ], [ 112.512255, 9.544566 ] ] ], [ [ [ 117.21372, 10.735144 ], [ 117.206945, 10.707507 ], [ 117.187235, 10.741612 ], [ 117.21372, 10.735144 ] ] ], [ [ [ 114.610145, 15.649447 ], [ 114.610761, 15.615444 ], [ 114.581195, 15.625242 ], [ 114.610145, 15.649447 ] ] ], [ [ [ 117.299336, 11.077745 ], [ 117.304263, 11.027232 ], [ 117.284553, 11.02547 ], [ 117.264227, 11.063062 ], [ 117.299336, 11.077745 ] ] ], [ [ [ 117.691073, 11.048965 ], [ 117.690457, 11.016658 ], [ 117.655965, 11.024882 ], [ 117.653501, 11.046029 ], [ 117.691073, 11.048965 ] ] ], [ [ [ 114.166668, 9.38459 ], [ 114.194386, 9.391676 ], [ 114.195617, 9.350933 ], [ 114.175291, 9.342075 ], [ 114.166668, 9.38459 ] ] ], [ [ [ 114.714854, 9.736909 ], [ 114.704999, 9.700337 ], [ 114.680978, 9.707416 ], [ 114.693296, 9.741038 ], [ 114.714854, 9.736909 ] ] ], [ [ [ 112.554139, 5.97839 ], [ 112.575697, 5.971247 ], [ 112.553523, 5.942676 ], [ 112.554139, 5.97839 ] ] ] ] } }, +{ "type": "Feature", "properties": { "adcode": "500000", "name": "重庆市", "center": [ 106.504962, 29.533155 ], "centroid": [ 107.883899, 30.067297 ], "childrenNum": 38, "level": "province", "parent": { "adcode": 100000 }, "subFeatureIndex": 21, "acroutes": [ 100000 ] }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 106.37442, 28.525742 ], [ 106.33192, 28.55308 ], [ 106.346703, 28.583565 ], [ 106.304203, 28.64976 ], [ 106.305435, 28.704365 ], [ 106.27279, 28.741103 ], [ 106.267863, 28.779402 ], [ 106.245689, 28.817686 ], [ 106.264783, 28.845997 ], [ 106.206885, 28.904691 ], [ 106.173008, 28.920407 ], [ 106.14837, 28.901548 ], [ 106.101559, 28.898928 ], [ 106.070762, 28.919884 ], [ 106.049204, 28.906263 ], [ 106.040581, 28.955498 ], [ 106.001161, 28.973824 ], [ 105.969132, 28.965971 ], [ 105.910002, 28.920407 ], [ 105.852719, 28.927217 ], [ 105.830546, 28.944501 ], [ 105.797285, 28.936121 ], [ 105.801596, 28.958116 ], [ 105.762176, 28.9911 ], [ 105.766488, 29.013607 ], [ 105.74185, 29.039249 ], [ 105.757865, 29.069068 ], [ 105.728916, 29.1062 ], [ 105.752321, 29.129727 ], [ 105.728916, 29.134432 ], [ 105.703662, 29.176766 ], [ 105.712285, 29.219082 ], [ 105.695039, 29.287482 ], [ 105.647612, 29.253027 ], [ 105.631597, 29.280174 ], [ 105.557684, 29.278608 ], [ 105.521344, 29.264513 ], [ 105.513337, 29.283306 ], [ 105.459134, 29.288526 ], [ 105.465294, 29.322969 ], [ 105.42033, 29.31149 ], [ 105.418482, 29.352185 ], [ 105.441888, 29.400686 ], [ 105.426489, 29.419454 ], [ 105.372903, 29.421018 ], [ 105.387069, 29.455416 ], [ 105.387069, 29.455416 ], [ 105.334099, 29.441345 ], [ 105.337794, 29.459064 ], [ 105.305149, 29.53199 ], [ 105.296526, 29.571035 ], [ 105.332867, 29.592374 ], [ 105.347649, 29.621512 ], [ 105.38091, 29.628275 ], [ 105.419714, 29.688082 ], [ 105.476996, 29.674564 ], [ 105.481924, 29.718232 ], [ 105.529351, 29.707836 ], [ 105.574931, 29.744216 ], [ 105.582938, 29.819013 ], [ 105.610655, 29.837184 ], [ 105.707974, 29.840818 ], [ 105.738771, 29.891159 ], [ 105.717213, 29.893753 ], [ 105.70243, 29.924879 ], [ 105.730763, 29.95755 ], [ 105.723372, 29.975177 ], [ 105.753553, 30.018196 ], [ 105.719677, 30.042548 ], [ 105.687032, 30.038922 ], [ 105.676561, 30.06793 ], [ 105.638988, 30.076216 ], [ 105.642068, 30.101072 ], [ 105.582938, 30.12385 ], [ 105.582938, 30.127474 ], [ 105.580474, 30.129544 ], [ 105.574315, 30.130579 ], [ 105.596489, 30.159043 ], [ 105.536127, 30.152834 ], [ 105.550909, 30.179222 ], [ 105.56138, 30.183878 ], [ 105.642684, 30.186464 ], [ 105.662394, 30.210258 ], [ 105.619894, 30.234045 ], [ 105.624822, 30.275918 ], [ 105.670401, 30.254208 ], [ 105.720292, 30.252657 ], [ 105.720292, 30.252657 ], [ 105.714749, 30.322939 ], [ 105.754785, 30.342567 ], [ 105.760329, 30.384393 ], [ 105.792357, 30.427234 ], [ 105.825618, 30.436006 ], [ 105.84656, 30.410203 ], [ 105.900763, 30.405042 ], [ 105.943263, 30.372002 ], [ 106.031958, 30.373551 ], [ 106.07261, 30.333786 ], [ 106.132972, 30.30279 ], [ 106.132356, 30.323972 ], [ 106.168696, 30.303823 ], [ 106.180399, 30.233011 ], [ 106.232754, 30.185947 ], [ 106.260471, 30.19681 ], [ 106.264167, 30.20974 ], [ 106.296196, 30.205603 ], [ 106.306667, 30.238182 ], [ 106.334384, 30.225772 ], [ 106.349167, 30.24542 ], [ 106.401521, 30.242318 ], [ 106.428623, 30.254725 ], [ 106.43971, 30.308473 ], [ 106.49884, 30.295556 ], [ 106.545035, 30.296589 ], [ 106.560434, 30.31519 ], [ 106.611557, 30.292455 ], [ 106.642354, 30.246454 ], [ 106.612789, 30.235596 ], [ 106.612789, 30.235596 ], [ 106.612173, 30.235596 ], [ 106.612173, 30.235596 ], [ 106.611557, 30.235596 ], [ 106.612173, 30.235596 ], [ 106.611557, 30.235596 ], [ 106.631883, 30.186464 ], [ 106.677462, 30.156974 ], [ 106.672535, 30.122297 ], [ 106.700252, 30.111944 ], [ 106.699636, 30.074145 ], [ 106.724274, 30.058607 ], [ 106.732281, 30.027005 ], [ 106.785252, 30.01716 ], [ 106.825904, 30.03115 ], [ 106.825904, 30.03115 ], [ 106.83699, 30.049801 ], [ 106.862244, 30.033223 ], [ 106.913367, 30.025451 ], [ 106.94478, 30.037367 ], [ 106.976193, 30.083467 ], [ 106.981736, 30.08502 ], [ 107.02054, 30.036849 ], [ 107.053801, 30.043584 ], [ 107.054417, 30.040994 ], [ 107.055649, 30.040476 ], [ 107.058113, 30.043066 ], [ 107.084598, 30.063786 ], [ 107.080286, 30.094341 ], [ 107.103076, 30.090198 ], [ 107.221337, 30.213878 ], [ 107.257677, 30.267131 ], [ 107.288474, 30.337402 ], [ 107.338981, 30.386459 ], [ 107.368546, 30.468508 ], [ 107.408582, 30.521623 ], [ 107.443075, 30.53348 ], [ 107.427676, 30.547397 ], [ 107.485575, 30.598408 ], [ 107.516987, 30.644759 ], [ 107.477567, 30.664837 ], [ 107.458473, 30.704981 ], [ 107.424597, 30.74048 ], [ 107.454162, 30.771851 ], [ 107.454162, 30.771851 ], [ 107.498509, 30.809381 ], [ 107.483111, 30.838675 ], [ 107.515756, 30.854603 ], [ 107.57735, 30.847924 ], [ 107.645103, 30.821202 ], [ 107.693146, 30.875665 ], [ 107.739957, 30.884396 ], [ 107.760899, 30.862823 ], [ 107.763979, 30.817091 ], [ 107.788001, 30.81966 ], [ 107.851443, 30.792931 ], [ 107.956152, 30.882855 ], [ 107.994956, 30.908533 ], [ 107.948145, 30.918802 ], [ 107.942602, 30.989114 ], [ 107.983254, 30.983983 ], [ 108.00358, 31.025533 ], [ 108.060246, 31.052197 ], [ 108.026985, 31.061938 ], [ 108.009123, 31.109602 ], [ 108.025753, 31.116263 ], [ 108.089811, 31.204859 ], [ 108.07626, 31.231985 ], [ 108.031297, 31.217144 ], [ 108.038688, 31.252964 ], [ 108.095354, 31.268311 ], [ 108.185898, 31.336831 ], [ 108.153869, 31.371073 ], [ 108.216079, 31.41041 ], [ 108.224086, 31.464024 ], [ 108.193289, 31.467598 ], [ 108.191441, 31.492096 ], [ 108.233941, 31.506894 ], [ 108.254883, 31.49873 ], [ 108.344194, 31.512506 ], [ 108.34789, 31.545664 ], [ 108.386078, 31.544134 ], [ 108.390389, 31.591555 ], [ 108.442744, 31.633856 ], [ 108.468614, 31.636404 ], [ 108.519121, 31.665952 ], [ 108.546838, 31.665442 ], [ 108.514809, 31.693963 ], [ 108.50557, 31.734182 ], [ 108.535135, 31.757592 ], [ 108.462454, 31.780488 ], [ 108.455063, 31.814059 ], [ 108.429194, 31.809482 ], [ 108.391005, 31.829822 ], [ 108.386078, 31.854226 ], [ 108.343578, 31.860834 ], [ 108.259194, 31.967006 ], [ 108.307238, 31.997463 ], [ 108.351585, 31.971575 ], [ 108.370063, 31.988835 ], [ 108.329411, 32.020299 ], [ 108.362056, 32.035521 ], [ 108.344194, 32.067477 ], [ 108.372527, 32.077112 ], [ 108.42981, 32.061391 ], [ 108.452599, 32.090296 ], [ 108.399628, 32.147065 ], [ 108.379303, 32.153652 ], [ 108.379303, 32.153652 ], [ 108.379918, 32.154158 ], [ 108.379918, 32.154158 ], [ 108.370063, 32.172397 ], [ 108.399013, 32.194176 ], [ 108.480317, 32.182527 ], [ 108.509882, 32.201266 ], [ 108.543758, 32.177969 ], [ 108.585026, 32.17189 ], [ 108.676801, 32.10297 ], [ 108.734084, 32.106519 ], [ 108.75133, 32.076098 ], [ 108.78767, 32.04871 ], [ 108.837561, 32.039072 ], [ 108.902235, 31.984774 ], [ 108.986619, 31.980205 ], [ 109.085785, 31.929428 ], [ 109.123357, 31.892851 ], [ 109.191111, 31.85575 ], [ 109.195422, 31.817618 ], [ 109.27611, 31.79931 ], [ 109.279806, 31.776418 ], [ 109.253936, 31.759628 ], [ 109.282885, 31.743343 ], [ 109.281654, 31.716874 ], [ 109.381436, 31.705165 ], [ 109.446109, 31.722983 ], [ 109.502776, 31.716365 ], [ 109.549587, 31.73011 ], [ 109.585928, 31.726546 ], [ 109.622268, 31.711783 ], [ 109.683246, 31.719929 ], [ 109.731289, 31.700582 ], [ 109.737449, 31.628761 ], [ 109.76455, 31.602769 ], [ 109.745456, 31.598182 ], [ 109.727594, 31.548214 ], [ 109.837847, 31.555354 ], [ 109.894513, 31.519139 ], [ 109.969658, 31.508935 ], [ 109.94502, 31.47066 ], [ 109.98752, 31.474744 ], [ 110.036795, 31.436966 ], [ 110.054042, 31.410921 ], [ 110.118715, 31.409899 ], [ 110.161831, 31.314338 ], [ 110.155671, 31.279564 ], [ 110.180309, 31.179774 ], [ 110.200019, 31.158779 ], [ 110.180309, 31.121899 ], [ 110.147048, 31.116776 ], [ 110.119947, 31.088592 ], [ 110.120563, 31.0322 ], [ 110.140273, 31.030661 ], [ 110.140889, 30.987062 ], [ 110.172918, 30.978853 ], [ 110.153824, 30.953708 ], [ 110.151976, 30.911613 ], [ 110.082375, 30.799614 ], [ 110.048498, 30.800642 ], [ 110.019549, 30.829425 ], [ 110.008462, 30.883369 ], [ 109.943788, 30.878746 ], [ 109.894513, 30.899803 ], [ 109.828608, 30.864364 ], [ 109.780564, 30.848437 ], [ 109.701724, 30.783677 ], [ 109.656761, 30.760538 ], [ 109.661072, 30.738936 ], [ 109.625348, 30.702923 ], [ 109.590855, 30.69366 ], [ 109.574225, 30.646818 ], [ 109.543428, 30.63961 ], [ 109.535421, 30.664837 ], [ 109.435638, 30.595832 ], [ 109.418392, 30.559766 ], [ 109.35495, 30.487076 ], [ 109.337088, 30.521623 ], [ 109.36111, 30.551004 ], [ 109.314298, 30.599953 ], [ 109.299516, 30.630341 ], [ 109.245313, 30.580892 ], [ 109.191726, 30.545851 ], [ 109.191726, 30.545851 ], [ 109.143683, 30.521108 ], [ 109.103647, 30.565949 ], [ 109.106111, 30.570587 ], [ 109.101183, 30.579346 ], [ 109.102415, 30.580377 ], [ 109.105495, 30.585529 ], [ 109.106111, 30.61077 ], [ 109.111654, 30.646303 ], [ 109.071002, 30.640125 ], [ 109.042669, 30.655571 ], [ 109.006329, 30.626736 ], [ 108.971836, 30.627766 ], [ 108.893612, 30.565434 ], [ 108.838793, 30.503062 ], [ 108.808612, 30.491202 ], [ 108.789518, 30.513374 ], [ 108.743939, 30.494812 ], [ 108.698975, 30.54482 ], [ 108.688504, 30.58759 ], [ 108.642925, 30.578831 ], [ 108.6497, 30.53915 ], [ 108.56778, 30.468508 ], [ 108.556077, 30.487592 ], [ 108.512961, 30.501515 ], [ 108.472925, 30.487076 ], [ 108.42673, 30.492233 ], [ 108.411331, 30.438586 ], [ 108.430425, 30.416397 ], [ 108.402092, 30.376649 ], [ 108.431041, 30.354446 ], [ 108.460606, 30.35961 ], [ 108.501258, 30.314673 ], [ 108.524048, 30.309506 ], [ 108.54499, 30.269716 ], [ 108.581947, 30.255759 ], [ 108.551766, 30.1637 ], [ 108.56778, 30.157491 ], [ 108.546222, 30.104178 ], [ 108.513577, 30.057571 ], [ 108.532055, 30.051873 ], [ 108.536367, 29.983472 ], [ 108.517889, 29.9394 ], [ 108.516041, 29.885451 ], [ 108.467998, 29.864175 ], [ 108.433505, 29.880262 ], [ 108.371295, 29.841337 ], [ 108.424266, 29.815897 ], [ 108.422418, 29.772791 ], [ 108.442744, 29.778505 ], [ 108.437201, 29.741098 ], [ 108.460606, 29.741098 ], [ 108.504338, 29.707836 ], [ 108.504954, 29.728626 ], [ 108.548686, 29.749412 ], [ 108.52528, 29.770713 ], [ 108.556077, 29.818493 ], [ 108.601041, 29.863656 ], [ 108.658939, 29.854833 ], [ 108.680497, 29.800319 ], [ 108.676801, 29.749412 ], [ 108.690968, 29.689642 ], [ 108.752562, 29.649082 ], [ 108.786438, 29.691721 ], [ 108.797525, 29.660003 ], [ 108.781511, 29.635558 ], [ 108.844337, 29.658443 ], [ 108.888068, 29.628795 ], [ 108.870206, 29.596537 ], [ 108.901003, 29.604863 ], [ 108.913322, 29.574679 ], [ 108.878213, 29.539279 ], [ 108.888684, 29.502305 ], [ 108.866511, 29.470527 ], [ 108.884373, 29.440824 ], [ 108.927488, 29.435612 ], [ 108.934264, 29.399643 ], [ 108.919481, 29.3261 ], [ 108.983539, 29.332883 ], [ 108.999553, 29.36366 ], [ 109.034662, 29.360531 ], [ 109.060531, 29.403292 ], [ 109.11227, 29.361053 ], [ 109.106727, 29.288526 ], [ 109.141835, 29.270256 ], [ 109.110422, 29.21647 ], [ 109.139372, 29.168927 ], [ 109.162777, 29.180946 ], [ 109.215748, 29.145409 ], [ 109.232378, 29.119271 ], [ 109.240386, 29.086328 ], [ 109.312451, 29.066453 ], [ 109.319842, 29.042388 ], [ 109.294588, 29.015177 ], [ 109.292741, 28.987436 ], [ 109.261328, 28.952356 ], [ 109.235458, 28.882161 ], [ 109.246545, 28.80143 ], [ 109.241002, 28.776779 ], [ 109.2989, 28.7474 ], [ 109.294588, 28.722211 ], [ 109.252704, 28.691767 ], [ 109.271183, 28.671816 ], [ 109.192958, 28.636104 ], [ 109.201581, 28.597753 ], [ 109.235458, 28.61982 ], [ 109.252089, 28.606685 ], [ 109.306907, 28.62087 ], [ 109.319842, 28.579886 ], [ 109.273646, 28.53836 ], [ 109.274262, 28.494714 ], [ 109.23361, 28.474726 ], [ 109.191726, 28.471043 ], [ 109.153538, 28.417369 ], [ 109.152306, 28.349975 ], [ 109.117198, 28.277795 ], [ 109.081473, 28.247749 ], [ 109.101799, 28.202401 ], [ 109.086401, 28.184467 ], [ 109.026655, 28.220331 ], [ 109.005713, 28.162837 ], [ 108.929952, 28.19027 ], [ 108.923793, 28.217167 ], [ 108.89546, 28.219804 ], [ 108.855424, 28.199764 ], [ 108.821547, 28.245113 ], [ 108.772888, 28.212949 ], [ 108.738395, 28.228241 ], [ 108.726692, 28.282011 ], [ 108.761801, 28.304143 ], [ 108.783359, 28.380518 ], [ 108.759953, 28.389995 ], [ 108.780279, 28.42579 ], [ 108.746402, 28.45105 ], [ 108.709446, 28.501026 ], [ 108.700207, 28.48209 ], [ 108.657091, 28.47683 ], [ 108.640461, 28.456838 ], [ 108.688504, 28.422106 ], [ 108.697127, 28.401051 ], [ 108.656475, 28.359981 ], [ 108.667562, 28.334173 ], [ 108.611512, 28.324691 ], [ 108.580099, 28.343128 ], [ 108.576403, 28.38631 ], [ 108.609048, 28.407368 ], [ 108.609664, 28.43579 ], [ 108.586874, 28.463678 ], [ 108.573939, 28.531 ], [ 108.610896, 28.539412 ], [ 108.604736, 28.590922 ], [ 108.636149, 28.621396 ], [ 108.575787, 28.659738 ], [ 108.50249, 28.63768 ], [ 108.501258, 28.626649 ], [ 108.439049, 28.634003 ], [ 108.332491, 28.679166 ], [ 108.347274, 28.736381 ], [ 108.385462, 28.772058 ], [ 108.386078, 28.803003 ], [ 108.352817, 28.815589 ], [ 108.346658, 28.859625 ], [ 108.357745, 28.893165 ], [ 108.345426, 28.943453 ], [ 108.319556, 28.961258 ], [ 108.297999, 29.045527 ], [ 108.306622, 29.079006 ], [ 108.277673, 29.091558 ], [ 108.256115, 29.040295 ], [ 108.193289, 29.072207 ], [ 108.150173, 29.053375 ], [ 108.070717, 29.086328 ], [ 108.026369, 29.039772 ], [ 107.925971, 29.032446 ], [ 107.908725, 29.007327 ], [ 107.882855, 29.00628 ], [ 107.867457, 28.960211 ], [ 107.810175, 28.984295 ], [ 107.823725, 29.034016 ], [ 107.784921, 29.048143 ], [ 107.810791, 29.139137 ], [ 107.749197, 29.199754 ], [ 107.700537, 29.141228 ], [ 107.659885, 29.162656 ], [ 107.605683, 29.164747 ], [ 107.589052, 29.150113 ], [ 107.570574, 29.218037 ], [ 107.486806, 29.174153 ], [ 107.441227, 29.203934 ], [ 107.401807, 29.184603 ], [ 107.408582, 29.138091 ], [ 107.427676, 29.128682 ], [ 107.412278, 29.094696 ], [ 107.369778, 29.091558 ], [ 107.395647, 29.041341 ], [ 107.364235, 29.00942 ], [ 107.396879, 28.993718 ], [ 107.412894, 28.960211 ], [ 107.441227, 28.943977 ], [ 107.41351, 28.911502 ], [ 107.383945, 28.848618 ], [ 107.339597, 28.845997 ], [ 107.327894, 28.810869 ], [ 107.261373, 28.792514 ], [ 107.24659, 28.76209 ], [ 107.219489, 28.772582 ], [ 107.210866, 28.817686 ], [ 107.227496, 28.836037 ], [ 107.194851, 28.838134 ], [ 107.206554, 28.868535 ], [ 107.14188, 28.887925 ], [ 107.016229, 28.882685 ], [ 107.019308, 28.861722 ], [ 106.983584, 28.851239 ], [ 106.988512, 28.776254 ], [ 106.951555, 28.766812 ], [ 106.923222, 28.809821 ], [ 106.872099, 28.777304 ], [ 106.845614, 28.780975 ], [ 106.824056, 28.756319 ], [ 106.86594, 28.690192 ], [ 106.889345, 28.695966 ], [ 106.866556, 28.624548 ], [ 106.830831, 28.623497 ], [ 106.807425, 28.589346 ], [ 106.784636, 28.626649 ], [ 106.756918, 28.607211 ], [ 106.77786, 28.563068 ], [ 106.73844, 28.554657 ], [ 106.726121, 28.51838 ], [ 106.747063, 28.467361 ], [ 106.708259, 28.450524 ], [ 106.697788, 28.47683 ], [ 106.632499, 28.503655 ], [ 106.564745, 28.485247 ], [ 106.567825, 28.523638 ], [ 106.615252, 28.549401 ], [ 106.606629, 28.593024 ], [ 106.63681, 28.622972 ], [ 106.618332, 28.645033 ], [ 106.651593, 28.649235 ], [ 106.617716, 28.66709 ], [ 106.6171, 28.691242 ], [ 106.587535, 28.691767 ], [ 106.56105, 28.719062 ], [ 106.561666, 28.756319 ], [ 106.474202, 28.832891 ], [ 106.45326, 28.817162 ], [ 106.461883, 28.761041 ], [ 106.492064, 28.742153 ], [ 106.528405, 28.677591 ], [ 106.502535, 28.661313 ], [ 106.49268, 28.591448 ], [ 106.466811, 28.586193 ], [ 106.504999, 28.544669 ], [ 106.477282, 28.530474 ], [ 106.403369, 28.569901 ], [ 106.37442, 28.525742 ] ] ], [ [ [ 109.105495, 30.585529 ], [ 109.102415, 30.580377 ], [ 109.101183, 30.579346 ], [ 109.09872, 30.579346 ], [ 109.09256, 30.578831 ], [ 109.106111, 30.61077 ], [ 109.105495, 30.585529 ] ] ], [ [ [ 105.582938, 30.12385 ], [ 105.574315, 30.130579 ], [ 105.580474, 30.129544 ], [ 105.582938, 30.127474 ], [ 105.582938, 30.12385 ] ] ], [ [ [ 109.09872, 30.579346 ], [ 109.106111, 30.570587 ], [ 109.103647, 30.565949 ], [ 109.09256, 30.578831 ], [ 109.09872, 30.579346 ] ] ], [ [ [ 107.058113, 30.043066 ], [ 107.055649, 30.040476 ], [ 107.054417, 30.040994 ], [ 107.053801, 30.043584 ], [ 107.058113, 30.043066 ] ] ] ] } }, +{ "type": "Feature", "properties": { "adcode": "510000", "name": "四川省", "center": [ 104.065735, 30.659462 ], "centroid": [ 102.693453, 30.674545 ], "childrenNum": 21, "level": "province", "parent": { "adcode": 100000 }, "subFeatureIndex": 22, "acroutes": [ 100000 ] }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 101.167885, 27.198311 ], [ 101.167885, 27.198311 ], [ 101.119226, 27.208957 ], [ 101.071798, 27.194585 ], [ 101.042233, 27.22173 ], [ 101.026219, 27.270679 ], [ 101.021907, 27.332899 ], [ 100.95169, 27.426961 ], [ 100.936908, 27.469448 ], [ 100.901183, 27.453517 ], [ 100.91227, 27.521473 ], [ 100.854988, 27.623858 ], [ 100.827886, 27.615904 ], [ 100.848212, 27.672099 ], [ 100.782307, 27.691708 ], [ 100.775532, 27.743098 ], [ 100.757053, 27.770107 ], [ 100.707162, 27.800816 ], [ 100.719481, 27.858503 ], [ 100.681293, 27.923035 ], [ 100.634482, 27.915631 ], [ 100.609228, 27.859033 ], [ 100.54517, 27.809286 ], [ 100.511294, 27.827811 ], [ 100.504518, 27.852154 ], [ 100.442924, 27.86644 ], [ 100.412127, 27.816167 ], [ 100.350534, 27.755809 ], [ 100.327744, 27.72032 ], [ 100.311729, 27.724028 ], [ 100.304954, 27.788639 ], [ 100.28586, 27.80611 ], [ 100.30865, 27.830457 ], [ 100.30865, 27.861149 ], [ 100.210715, 27.87702 ], [ 100.170063, 27.907699 ], [ 100.196549, 27.936254 ], [ 100.120788, 28.018703 ], [ 100.088759, 28.029269 ], [ 100.05673, 28.097922 ], [ 100.021006, 28.147008 ], [ 100.033325, 28.184467 ], [ 100.062274, 28.193962 ], [ 100.091223, 28.181302 ], [ 100.102926, 28.201873 ], [ 100.153433, 28.208202 ], [ 100.188541, 28.252493 ], [ 100.147274, 28.288862 ], [ 100.176223, 28.325218 ], [ 100.136803, 28.349975 ], [ 100.057346, 28.368934 ], [ 100.073977, 28.426317 ], [ 99.990209, 28.47683 ], [ 99.985281, 28.529422 ], [ 99.91876, 28.599329 ], [ 99.875644, 28.611939 ], [ 99.873181, 28.631902 ], [ 99.834376, 28.628225 ], [ 99.834992, 28.660788 ], [ 99.79434, 28.699116 ], [ 99.755536, 28.701216 ], [ 99.722275, 28.757369 ], [ 99.717964, 28.846521 ], [ 99.676696, 28.810345 ], [ 99.625573, 28.81454 ], [ 99.609559, 28.784122 ], [ 99.614486, 28.740054 ], [ 99.553508, 28.710664 ], [ 99.53195, 28.677591 ], [ 99.540573, 28.623497 ], [ 99.504233, 28.619294 ], [ 99.466045, 28.579886 ], [ 99.463581, 28.549401 ], [ 99.403219, 28.546246 ], [ 99.396444, 28.491032 ], [ 99.426625, 28.454207 ], [ 99.404451, 28.44421 ], [ 99.437095, 28.398419 ], [ 99.392748, 28.318369 ], [ 99.412458, 28.295186 ], [ 99.374886, 28.18183 ], [ 99.306516, 28.227714 ], [ 99.28927, 28.286227 ], [ 99.237531, 28.317842 ], [ 99.229524, 28.350502 ], [ 99.200575, 28.365774 ], [ 99.16485, 28.425264 ], [ 99.187024, 28.44 ], [ 99.191952, 28.494714 ], [ 99.170394, 28.566221 ], [ 99.183944, 28.58882 ], [ 99.147604, 28.640831 ], [ 99.126662, 28.698066 ], [ 99.134053, 28.734806 ], [ 99.114343, 28.765763 ], [ 99.103872, 28.841803 ], [ 99.123582, 28.890021 ], [ 99.132206, 28.94869 ], [ 99.113727, 29.07273 ], [ 99.118039, 29.100971 ], [ 99.105104, 29.162656 ], [ 99.113727, 29.221171 ], [ 99.114343, 29.243628 ], [ 99.075539, 29.316186 ], [ 99.058909, 29.417368 ], [ 99.066916, 29.421018 ], [ 99.044742, 29.520013 ], [ 99.052133, 29.563748 ], [ 99.014561, 29.607464 ], [ 98.992387, 29.677163 ], [ 99.018873, 29.792009 ], [ 99.0238, 29.846009 ], [ 99.068148, 29.931621 ], [ 99.055213, 29.958587 ], [ 99.036735, 30.053945 ], [ 99.044742, 30.079842 ], [ 98.989308, 30.151799 ], [ 98.9813, 30.182843 ], [ 98.993003, 30.215429 ], [ 98.970829, 30.260928 ], [ 98.986844, 30.280569 ], [ 98.967134, 30.33482 ], [ 98.965286, 30.449937 ], [ 98.932025, 30.521623 ], [ 98.926482, 30.569556 ], [ 98.939417, 30.598923 ], [ 98.92217, 30.609225 ], [ 98.907388, 30.698292 ], [ 98.963438, 30.728134 ], [ 98.957895, 30.765166 ], [ 98.904924, 30.782649 ], [ 98.850105, 30.849465 ], [ 98.797135, 30.87926 ], [ 98.774345, 30.908019 ], [ 98.797135, 30.948575 ], [ 98.806374, 30.995783 ], [ 98.774961, 31.031174 ], [ 98.736772, 31.049121 ], [ 98.712135, 31.082954 ], [ 98.710287, 31.1178 ], [ 98.675179, 31.15417 ], [ 98.602498, 31.192062 ], [ 98.62344, 31.221238 ], [ 98.60373, 31.257568 ], [ 98.616048, 31.3036 ], [ 98.643766, 31.338876 ], [ 98.691809, 31.333253 ], [ 98.773113, 31.249382 ], [ 98.805758, 31.279052 ], [ 98.810685, 31.306668 ], [ 98.887062, 31.37465 ], [ 98.84333, 31.416028 ], [ 98.844562, 31.429817 ], [ 98.714599, 31.508935 ], [ 98.696736, 31.538523 ], [ 98.651157, 31.57881 ], [ 98.619128, 31.591555 ], [ 98.553839, 31.660349 ], [ 98.545831, 31.717383 ], [ 98.516882, 31.717383 ], [ 98.508875, 31.751995 ], [ 98.461448, 31.800327 ], [ 98.414636, 31.832365 ], [ 98.426339, 31.856767 ], [ 98.399238, 31.895899 ], [ 98.432498, 31.922825 ], [ 98.434962, 32.007613 ], [ 98.402933, 32.026896 ], [ 98.404781, 32.045159 ], [ 98.357354, 32.087253 ], [ 98.303151, 32.121726 ], [ 98.260035, 32.208862 ], [ 98.218768, 32.234683 ], [ 98.23047, 32.262521 ], [ 98.208913, 32.318171 ], [ 98.218768, 32.342444 ], [ 98.125145, 32.401077 ], [ 98.107283, 32.391476 ], [ 98.079565, 32.415224 ], [ 97.940363, 32.482393 ], [ 97.880001, 32.486431 ], [ 97.863986, 32.499051 ], [ 97.80732, 32.50006 ], [ 97.795617, 32.521257 ], [ 97.730944, 32.527312 ], [ 97.700763, 32.53488 ], [ 97.616995, 32.586329 ], [ 97.607756, 32.614059 ], [ 97.543698, 32.62162 ], [ 97.535075, 32.638252 ], [ 97.48272, 32.654377 ], [ 97.42359, 32.70475 ], [ 97.429133, 32.714318 ], [ 97.386018, 32.77925 ], [ 97.392793, 32.828546 ], [ 97.376163, 32.886359 ], [ 97.347829, 32.895907 ], [ 97.375547, 32.956689 ], [ 97.438372, 32.976271 ], [ 97.523988, 32.988822 ], [ 97.499966, 33.011408 ], [ 97.542466, 33.035995 ], [ 97.517213, 33.097683 ], [ 97.487032, 33.107209 ], [ 97.498119, 33.137783 ], [ 97.487648, 33.168346 ], [ 97.548626, 33.203907 ], [ 97.607756, 33.263976 ], [ 97.622538, 33.337005 ], [ 97.676125, 33.341004 ], [ 97.754349, 33.409972 ], [ 97.674893, 33.432949 ], [ 97.625618, 33.461412 ], [ 97.552321, 33.465906 ], [ 97.511669, 33.520805 ], [ 97.523372, 33.577166 ], [ 97.450075, 33.582152 ], [ 97.415583, 33.605582 ], [ 97.435293, 33.682307 ], [ 97.418046, 33.728608 ], [ 97.422974, 33.754984 ], [ 97.406344, 33.795278 ], [ 97.373083, 33.817655 ], [ 97.371851, 33.842015 ], [ 97.398336, 33.848477 ], [ 97.395257, 33.889224 ], [ 97.460546, 33.887236 ], [ 97.503662, 33.912073 ], [ 97.52214, 33.903133 ], [ 97.601596, 33.929951 ], [ 97.629314, 33.919523 ], [ 97.660111, 33.956264 ], [ 97.652719, 33.998448 ], [ 97.70261, 34.036644 ], [ 97.665654, 34.126855 ], [ 97.766668, 34.158555 ], [ 97.789458, 34.182818 ], [ 97.789458, 34.182818 ], [ 97.796849, 34.199154 ], [ 97.796849, 34.199154 ], [ 97.898479, 34.209548 ], [ 97.95453, 34.190739 ], [ 98.051848, 34.11546 ], [ 98.098043, 34.122892 ], [ 98.157174, 34.107532 ], [ 98.206449, 34.08424 ], [ 98.258188, 34.083249 ], [ 98.344419, 34.094648 ], [ 98.392462, 34.089196 ], [ 98.396774, 34.053008 ], [ 98.428187, 34.029204 ], [ 98.440506, 33.981577 ], [ 98.415252, 33.956761 ], [ 98.425723, 33.913066 ], [ 98.407245, 33.867362 ], [ 98.434962, 33.843009 ], [ 98.463295, 33.848477 ], [ 98.492861, 33.796272 ], [ 98.494092, 33.768915 ], [ 98.51873, 33.77389 ], [ 98.537824, 33.74752 ], [ 98.582788, 33.731595 ], [ 98.610505, 33.682805 ], [ 98.6567, 33.64744 ], [ 98.61728, 33.637476 ], [ 98.622824, 33.610067 ], [ 98.652389, 33.595114 ], [ 98.648077, 33.548741 ], [ 98.678258, 33.522801 ], [ 98.725686, 33.503341 ], [ 98.742316, 33.477887 ], [ 98.736157, 33.406975 ], [ 98.779888, 33.370497 ], [ 98.759562, 33.276985 ], [ 98.802062, 33.270481 ], [ 98.804526, 33.219428 ], [ 98.858728, 33.150811 ], [ 98.92217, 33.118738 ], [ 98.967134, 33.115229 ], [ 98.971445, 33.098185 ], [ 99.014561, 33.081137 ], [ 99.024416, 33.094675 ], [ 99.090322, 33.079131 ], [ 99.124814, 33.046028 ], [ 99.196263, 33.035493 ], [ 99.214741, 32.991332 ], [ 99.235067, 32.982296 ], [ 99.24677, 32.924043 ], [ 99.268944, 32.878318 ], [ 99.353944, 32.885354 ], [ 99.376118, 32.899927 ], [ 99.45311, 32.862233 ], [ 99.558436, 32.839106 ], [ 99.589233, 32.789312 ], [ 99.640355, 32.790822 ], [ 99.646515, 32.774721 ], [ 99.705029, 32.76516 ], [ 99.717964, 32.732443 ], [ 99.760464, 32.769689 ], [ 99.766623, 32.826032 ], [ 99.791877, 32.883344 ], [ 99.764159, 32.924545 ], [ 99.788181, 32.956689 ], [ 99.805427, 32.940619 ], [ 99.851007, 32.941623 ], [ 99.877492, 32.993339 ], [ 99.877492, 33.045527 ], [ 99.947709, 32.986814 ], [ 99.956332, 32.948152 ], [ 100.038252, 32.929066 ], [ 100.029629, 32.895907 ], [ 100.064738, 32.895907 ], [ 100.123252, 32.837095 ], [ 100.117093, 32.802392 ], [ 100.139266, 32.724388 ], [ 100.088143, 32.668988 ], [ 100.109701, 32.640268 ], [ 100.189773, 32.630692 ], [ 100.208252, 32.606497 ], [ 100.229809, 32.650346 ], [ 100.231041, 32.696189 ], [ 100.258759, 32.742511 ], [ 100.339447, 32.719353 ], [ 100.399193, 32.756101 ], [ 100.378251, 32.698707 ], [ 100.420135, 32.73194 ], [ 100.450932, 32.694678 ], [ 100.470026, 32.694678 ], [ 100.516837, 32.632204 ], [ 100.54517, 32.569687 ], [ 100.603069, 32.553547 ], [ 100.645568, 32.526303 ], [ 100.657887, 32.546484 ], [ 100.661583, 32.616075 ], [ 100.673286, 32.628172 ], [ 100.710242, 32.610026 ], [ 100.71209, 32.645307 ], [ 100.690532, 32.678056 ], [ 100.77122, 32.643795 ], [ 100.834046, 32.648835 ], [ 100.887633, 32.632708 ], [ 100.93198, 32.600447 ], [ 100.956618, 32.621116 ], [ 100.99727, 32.627668 ], [ 101.030531, 32.660424 ], [ 101.077342, 32.68259 ], [ 101.124769, 32.658408 ], [ 101.157414, 32.661431 ], [ 101.22332, 32.725898 ], [ 101.237486, 32.825026 ], [ 101.223935, 32.855698 ], [ 101.178356, 32.892892 ], [ 101.124153, 32.909976 ], [ 101.134624, 32.95217 ], [ 101.129081, 32.989324 ], [ 101.183899, 32.984304 ], [ 101.171581, 33.009902 ], [ 101.184515, 33.041514 ], [ 101.146327, 33.056563 ], [ 101.143863, 33.086151 ], [ 101.169733, 33.10019 ], [ 101.11553, 33.194893 ], [ 101.124769, 33.221431 ], [ 101.156798, 33.236449 ], [ 101.182668, 33.26948 ], [ 101.217776, 33.256469 ], [ 101.297232, 33.262475 ], [ 101.381616, 33.153316 ], [ 101.393935, 33.157826 ], [ 101.386543, 33.207412 ], [ 101.403174, 33.225436 ], [ 101.487557, 33.226938 ], [ 101.515275, 33.192889 ], [ 101.557775, 33.167344 ], [ 101.633535, 33.101193 ], [ 101.661252, 33.135778 ], [ 101.653861, 33.162835 ], [ 101.709912, 33.21292 ], [ 101.735781, 33.279987 ], [ 101.677883, 33.297497 ], [ 101.64955, 33.323004 ], [ 101.663716, 33.383991 ], [ 101.695745, 33.433948 ], [ 101.769042, 33.45592 ], [ 101.777665, 33.533776 ], [ 101.769042, 33.538765 ], [ 101.783208, 33.556721 ], [ 101.831252, 33.554726 ], [ 101.844186, 33.602591 ], [ 101.884222, 33.578163 ], [ 101.907012, 33.539264 ], [ 101.906396, 33.48188 ], [ 101.946432, 33.442937 ], [ 101.915635, 33.425957 ], [ 101.887302, 33.383991 ], [ 101.877447, 33.314502 ], [ 101.769658, 33.26898 ], [ 101.770274, 33.248962 ], [ 101.83002, 33.213921 ], [ 101.841723, 33.184876 ], [ 101.825708, 33.119239 ], [ 101.865744, 33.103198 ], [ 101.887302, 33.135778 ], [ 101.921795, 33.153817 ], [ 101.935345, 33.186879 ], [ 101.99386, 33.1999 ], [ 102.054838, 33.189884 ], [ 102.08933, 33.204908 ], [ 102.08933, 33.227439 ], [ 102.117047, 33.288492 ], [ 102.144765, 33.273983 ], [ 102.160163, 33.242956 ], [ 102.200815, 33.223434 ], [ 102.217446, 33.247961 ], [ 102.192192, 33.337005 ], [ 102.218062, 33.349503 ], [ 102.258098, 33.409472 ], [ 102.296286, 33.413969 ], [ 102.310452, 33.397982 ], [ 102.368967, 33.41247 ], [ 102.392988, 33.404477 ], [ 102.447807, 33.454922 ], [ 102.462589, 33.449429 ], [ 102.461358, 33.501345 ], [ 102.446575, 33.53228 ], [ 102.477988, 33.543254 ], [ 102.440416, 33.574673 ], [ 102.346793, 33.605582 ], [ 102.31538, 33.665374 ], [ 102.342481, 33.725622 ], [ 102.284583, 33.719151 ], [ 102.324619, 33.754486 ], [ 102.296286, 33.783838 ], [ 102.243315, 33.786823 ], [ 102.261177, 33.821136 ], [ 102.25317, 33.861399 ], [ 102.136142, 33.965199 ], [ 102.16817, 33.983066 ], [ 102.226069, 33.963214 ], [ 102.248858, 33.98654 ], [ 102.287047, 33.977607 ], [ 102.315996, 33.993983 ], [ 102.345561, 33.969666 ], [ 102.392372, 33.971651 ], [ 102.406539, 34.033172 ], [ 102.437336, 34.087214 ], [ 102.471213, 34.072839 ], [ 102.511865, 34.086222 ], [ 102.615958, 34.099604 ], [ 102.649219, 34.080275 ], [ 102.655994, 34.113478 ], [ 102.598712, 34.14766 ], [ 102.651067, 34.165983 ], [ 102.664002, 34.192719 ], [ 102.694799, 34.198659 ], [ 102.728675, 34.235774 ], [ 102.779798, 34.236764 ], [ 102.798276, 34.272874 ], [ 102.856791, 34.270895 ], [ 102.85987, 34.301058 ], [ 102.911609, 34.312923 ], [ 102.949181, 34.292159 ], [ 102.977515, 34.252595 ], [ 102.973203, 34.205588 ], [ 103.005848, 34.184798 ], [ 103.052043, 34.195194 ], [ 103.100087, 34.181828 ], [ 103.124108, 34.162022 ], [ 103.121644, 34.112487 ], [ 103.178927, 34.079779 ], [ 103.129652, 34.065899 ], [ 103.119797, 34.03466 ], [ 103.147514, 34.036644 ], [ 103.157369, 33.998944 ], [ 103.120413, 33.953286 ], [ 103.1315, 33.931937 ], [ 103.16476, 33.929454 ], [ 103.181391, 33.900649 ], [ 103.153673, 33.819147 ], [ 103.165376, 33.805721 ], [ 103.228202, 33.79478 ], [ 103.24976, 33.814175 ], [ 103.284868, 33.80224 ], [ 103.278709, 33.774387 ], [ 103.35447, 33.743539 ], [ 103.434542, 33.752993 ], [ 103.464723, 33.80224 ], [ 103.518309, 33.807213 ], [ 103.545411, 33.719649 ], [ 103.520157, 33.678323 ], [ 103.552186, 33.671351 ], [ 103.563889, 33.699735 ], [ 103.593454, 33.716164 ], [ 103.645809, 33.708697 ], [ 103.667983, 33.685793 ], [ 103.690772, 33.69376 ], [ 103.778236, 33.658898 ], [ 103.861388, 33.682307 ], [ 103.980264, 33.670852 ], [ 104.046169, 33.686291 ], [ 104.103452, 33.663381 ], [ 104.176749, 33.5996 ], [ 104.155191, 33.542755 ], [ 104.180444, 33.472895 ], [ 104.213089, 33.446932 ], [ 104.22048, 33.404477 ], [ 104.272219, 33.391486 ], [ 104.292545, 33.336505 ], [ 104.373849, 33.345004 ], [ 104.420045, 33.327004 ], [ 104.386168, 33.298497 ], [ 104.333813, 33.315502 ], [ 104.303632, 33.304499 ], [ 104.323958, 33.26898 ], [ 104.32827, 33.223934 ], [ 104.351059, 33.158828 ], [ 104.378161, 33.109214 ], [ 104.337509, 33.038002 ], [ 104.391711, 33.035493 ], [ 104.426204, 33.010906 ], [ 104.383704, 32.994343 ], [ 104.378161, 32.953174 ], [ 104.345516, 32.940117 ], [ 104.288234, 32.942628 ], [ 104.277147, 32.90244 ], [ 104.294393, 32.835586 ], [ 104.363994, 32.822511 ], [ 104.458849, 32.748551 ], [ 104.51182, 32.753585 ], [ 104.526602, 32.728416 ], [ 104.582653, 32.722374 ], [ 104.592508, 32.695685 ], [ 104.643015, 32.661935 ], [ 104.696601, 32.673522 ], [ 104.739717, 32.635228 ], [ 104.795768, 32.643292 ], [ 104.820405, 32.662943 ], [ 104.845659, 32.653873 ], [ 104.881999, 32.600951 ], [ 104.925115, 32.607505 ], [ 105.026745, 32.650346 ], [ 105.0791, 32.637244 ], [ 105.111128, 32.593893 ], [ 105.185041, 32.617587 ], [ 105.215222, 32.63674 ], [ 105.219534, 32.666469 ], [ 105.263265, 32.652362 ], [ 105.297758, 32.656897 ], [ 105.347033, 32.68259 ], [ 105.368591, 32.712807 ], [ 105.448663, 32.732946 ], [ 105.454207, 32.767173 ], [ 105.427721, 32.784281 ], [ 105.396308, 32.85067 ], [ 105.396308, 32.85067 ], [ 105.38091, 32.876307 ], [ 105.408011, 32.885857 ], [ 105.414171, 32.922034 ], [ 105.467757, 32.930071 ], [ 105.49917, 32.911986 ], [ 105.495475, 32.873292 ], [ 105.524424, 32.847654 ], [ 105.534279, 32.790822 ], [ 105.555221, 32.794343 ], [ 105.563844, 32.724891 ], [ 105.585402, 32.728919 ], [ 105.596489, 32.69921 ], [ 105.677793, 32.726402 ], [ 105.719061, 32.759624 ], [ 105.768952, 32.767676 ], [ 105.779423, 32.750061 ], [ 105.822538, 32.770192 ], [ 105.825002, 32.824523 ], [ 105.849024, 32.817985 ], [ 105.893371, 32.838603 ], [ 105.93156, 32.826032 ], [ 105.969132, 32.849162 ], [ 106.011632, 32.829552 ], [ 106.044277, 32.864747 ], [ 106.071378, 32.828546 ], [ 106.093552, 32.82402 ], [ 106.07261, 32.76365 ], [ 106.071378, 32.758114 ], [ 106.120037, 32.719856 ], [ 106.17424, 32.6977 ], [ 106.254928, 32.693671 ], [ 106.267863, 32.673522 ], [ 106.301123, 32.680071 ], [ 106.347935, 32.671003 ], [ 106.389203, 32.62666 ], [ 106.421231, 32.616579 ], [ 106.451412, 32.65992 ], [ 106.498224, 32.649338 ], [ 106.517934, 32.668485 ], [ 106.585687, 32.68813 ], [ 106.626955, 32.682086 ], [ 106.670071, 32.694678 ], [ 106.733513, 32.739491 ], [ 106.783404, 32.735967 ], [ 106.793259, 32.712807 ], [ 106.82344, 32.705254 ], [ 106.854853, 32.724388 ], [ 106.903512, 32.721367 ], [ 106.912751, 32.704247 ], [ 107.012533, 32.721367 ], [ 107.066736, 32.708779 ], [ 107.05996, 32.686115 ], [ 107.098765, 32.649338 ], [ 107.108004, 32.600951 ], [ 107.080286, 32.542448 ], [ 107.127098, 32.482393 ], [ 107.189924, 32.468256 ], [ 107.212097, 32.428864 ], [ 107.263836, 32.403099 ], [ 107.287858, 32.457147 ], [ 107.313727, 32.489965 ], [ 107.356843, 32.506622 ], [ 107.382097, 32.54043 ], [ 107.436299, 32.529835 ], [ 107.438763, 32.465732 ], [ 107.460937, 32.453612 ], [ 107.456625, 32.41775 ], [ 107.489886, 32.425328 ], [ 107.527458, 32.38238 ], [ 107.598291, 32.411688 ], [ 107.648183, 32.413709 ], [ 107.680827, 32.397035 ], [ 107.707929, 32.331826 ], [ 107.753508, 32.338399 ], [ 107.812022, 32.247844 ], [ 107.864377, 32.201266 ], [ 107.890247, 32.214432 ], [ 107.924739, 32.197215 ], [ 107.979558, 32.146051 ], [ 108.024521, 32.177462 ], [ 108.018362, 32.2119 ], [ 108.086731, 32.233165 ], [ 108.143398, 32.219495 ], [ 108.156948, 32.239239 ], [ 108.179738, 32.221521 ], [ 108.240716, 32.274666 ], [ 108.310933, 32.232152 ], [ 108.389773, 32.263533 ], [ 108.414411, 32.252399 ], [ 108.469846, 32.270618 ], [ 108.507418, 32.245819 ], [ 108.509882, 32.201266 ], [ 108.480317, 32.182527 ], [ 108.399013, 32.194176 ], [ 108.370063, 32.172397 ], [ 108.379918, 32.154158 ], [ 108.379918, 32.154158 ], [ 108.379303, 32.153652 ], [ 108.379303, 32.153652 ], [ 108.399628, 32.147065 ], [ 108.452599, 32.090296 ], [ 108.42981, 32.061391 ], [ 108.372527, 32.077112 ], [ 108.344194, 32.067477 ], [ 108.362056, 32.035521 ], [ 108.329411, 32.020299 ], [ 108.370063, 31.988835 ], [ 108.351585, 31.971575 ], [ 108.307238, 31.997463 ], [ 108.259194, 31.967006 ], [ 108.343578, 31.860834 ], [ 108.386078, 31.854226 ], [ 108.391005, 31.829822 ], [ 108.429194, 31.809482 ], [ 108.455063, 31.814059 ], [ 108.462454, 31.780488 ], [ 108.535135, 31.757592 ], [ 108.50557, 31.734182 ], [ 108.514809, 31.693963 ], [ 108.546838, 31.665442 ], [ 108.519121, 31.665952 ], [ 108.468614, 31.636404 ], [ 108.442744, 31.633856 ], [ 108.390389, 31.591555 ], [ 108.386078, 31.544134 ], [ 108.34789, 31.545664 ], [ 108.344194, 31.512506 ], [ 108.254883, 31.49873 ], [ 108.233941, 31.506894 ], [ 108.191441, 31.492096 ], [ 108.193289, 31.467598 ], [ 108.224086, 31.464024 ], [ 108.216079, 31.41041 ], [ 108.153869, 31.371073 ], [ 108.185898, 31.336831 ], [ 108.095354, 31.268311 ], [ 108.038688, 31.252964 ], [ 108.031297, 31.217144 ], [ 108.07626, 31.231985 ], [ 108.089811, 31.204859 ], [ 108.025753, 31.116263 ], [ 108.009123, 31.109602 ], [ 108.026985, 31.061938 ], [ 108.060246, 31.052197 ], [ 108.00358, 31.025533 ], [ 107.983254, 30.983983 ], [ 107.942602, 30.989114 ], [ 107.948145, 30.918802 ], [ 107.994956, 30.908533 ], [ 107.956152, 30.882855 ], [ 107.851443, 30.792931 ], [ 107.788001, 30.81966 ], [ 107.763979, 30.817091 ], [ 107.760899, 30.862823 ], [ 107.739957, 30.884396 ], [ 107.693146, 30.875665 ], [ 107.645103, 30.821202 ], [ 107.57735, 30.847924 ], [ 107.515756, 30.854603 ], [ 107.483111, 30.838675 ], [ 107.498509, 30.809381 ], [ 107.454162, 30.771851 ], [ 107.454162, 30.771851 ], [ 107.424597, 30.74048 ], [ 107.458473, 30.704981 ], [ 107.477567, 30.664837 ], [ 107.516987, 30.644759 ], [ 107.485575, 30.598408 ], [ 107.427676, 30.547397 ], [ 107.443075, 30.53348 ], [ 107.408582, 30.521623 ], [ 107.368546, 30.468508 ], [ 107.338981, 30.386459 ], [ 107.288474, 30.337402 ], [ 107.257677, 30.267131 ], [ 107.221337, 30.213878 ], [ 107.103076, 30.090198 ], [ 107.080286, 30.094341 ], [ 107.084598, 30.063786 ], [ 107.058113, 30.043066 ], [ 107.053801, 30.043584 ], [ 107.02054, 30.036849 ], [ 106.981736, 30.08502 ], [ 106.980504, 30.087609 ], [ 106.979888, 30.088127 ], [ 106.978656, 30.087609 ], [ 106.977425, 30.087609 ], [ 106.976809, 30.088127 ], [ 106.975577, 30.088127 ], [ 106.976193, 30.083467 ], [ 106.94478, 30.037367 ], [ 106.913367, 30.025451 ], [ 106.862244, 30.033223 ], [ 106.83699, 30.049801 ], [ 106.825904, 30.03115 ], [ 106.825904, 30.03115 ], [ 106.785252, 30.01716 ], [ 106.732281, 30.027005 ], [ 106.724274, 30.058607 ], [ 106.699636, 30.074145 ], [ 106.700252, 30.111944 ], [ 106.672535, 30.122297 ], [ 106.677462, 30.156974 ], [ 106.631883, 30.186464 ], [ 106.611557, 30.235596 ], [ 106.612173, 30.235596 ], [ 106.611557, 30.235596 ], [ 106.612173, 30.235596 ], [ 106.612173, 30.235596 ], [ 106.612789, 30.235596 ], [ 106.612789, 30.235596 ], [ 106.642354, 30.246454 ], [ 106.611557, 30.292455 ], [ 106.560434, 30.31519 ], [ 106.545035, 30.296589 ], [ 106.49884, 30.295556 ], [ 106.43971, 30.308473 ], [ 106.428623, 30.254725 ], [ 106.401521, 30.242318 ], [ 106.349167, 30.24542 ], [ 106.334384, 30.225772 ], [ 106.306667, 30.238182 ], [ 106.296196, 30.205603 ], [ 106.264167, 30.20974 ], [ 106.260471, 30.207672 ], [ 106.260471, 30.204051 ], [ 106.260471, 30.19681 ], [ 106.232754, 30.185947 ], [ 106.180399, 30.233011 ], [ 106.168696, 30.303823 ], [ 106.132356, 30.323972 ], [ 106.132972, 30.30279 ], [ 106.07261, 30.333786 ], [ 106.031958, 30.373551 ], [ 105.943263, 30.372002 ], [ 105.900763, 30.405042 ], [ 105.84656, 30.410203 ], [ 105.825618, 30.436006 ], [ 105.792357, 30.427234 ], [ 105.760329, 30.384393 ], [ 105.754785, 30.342567 ], [ 105.714749, 30.322939 ], [ 105.720292, 30.252657 ], [ 105.720292, 30.252657 ], [ 105.670401, 30.254208 ], [ 105.624822, 30.275918 ], [ 105.619894, 30.234045 ], [ 105.662394, 30.210258 ], [ 105.642684, 30.186464 ], [ 105.56138, 30.183878 ], [ 105.558916, 30.18543 ], [ 105.556453, 30.187499 ], [ 105.550909, 30.179222 ], [ 105.536127, 30.152834 ], [ 105.596489, 30.159043 ], [ 105.574315, 30.130579 ], [ 105.582938, 30.12385 ], [ 105.642068, 30.101072 ], [ 105.638988, 30.076216 ], [ 105.676561, 30.06793 ], [ 105.687032, 30.038922 ], [ 105.719677, 30.042548 ], [ 105.753553, 30.018196 ], [ 105.723372, 29.975177 ], [ 105.730763, 29.95755 ], [ 105.70243, 29.924879 ], [ 105.717213, 29.893753 ], [ 105.738771, 29.891159 ], [ 105.707974, 29.840818 ], [ 105.610655, 29.837184 ], [ 105.582938, 29.819013 ], [ 105.574931, 29.744216 ], [ 105.529351, 29.707836 ], [ 105.481924, 29.718232 ], [ 105.476996, 29.674564 ], [ 105.419714, 29.688082 ], [ 105.38091, 29.628275 ], [ 105.347649, 29.621512 ], [ 105.332867, 29.592374 ], [ 105.296526, 29.571035 ], [ 105.305149, 29.53199 ], [ 105.337794, 29.459064 ], [ 105.334099, 29.441345 ], [ 105.387069, 29.455416 ], [ 105.387069, 29.455416 ], [ 105.372903, 29.421018 ], [ 105.426489, 29.419454 ], [ 105.441888, 29.400686 ], [ 105.418482, 29.352185 ], [ 105.42033, 29.31149 ], [ 105.465294, 29.322969 ], [ 105.459134, 29.288526 ], [ 105.513337, 29.283306 ], [ 105.521344, 29.264513 ], [ 105.557684, 29.278608 ], [ 105.631597, 29.280174 ], [ 105.647612, 29.253027 ], [ 105.695039, 29.287482 ], [ 105.712285, 29.219082 ], [ 105.703662, 29.176766 ], [ 105.728916, 29.134432 ], [ 105.752321, 29.129727 ], [ 105.728916, 29.1062 ], [ 105.757865, 29.069068 ], [ 105.74185, 29.039249 ], [ 105.766488, 29.013607 ], [ 105.762176, 28.9911 ], [ 105.801596, 28.958116 ], [ 105.797285, 28.936121 ], [ 105.830546, 28.944501 ], [ 105.852719, 28.927217 ], [ 105.910002, 28.920407 ], [ 105.969132, 28.965971 ], [ 106.001161, 28.973824 ], [ 106.040581, 28.955498 ], [ 106.049204, 28.906263 ], [ 106.070762, 28.919884 ], [ 106.101559, 28.898928 ], [ 106.14837, 28.901548 ], [ 106.173008, 28.920407 ], [ 106.206885, 28.904691 ], [ 106.264783, 28.845997 ], [ 106.245689, 28.817686 ], [ 106.267863, 28.779402 ], [ 106.27279, 28.741103 ], [ 106.305435, 28.704365 ], [ 106.304203, 28.64976 ], [ 106.346703, 28.583565 ], [ 106.33192, 28.55308 ], [ 106.37442, 28.525742 ], [ 106.379348, 28.479986 ], [ 106.349167, 28.473674 ], [ 106.304819, 28.505233 ], [ 106.2925, 28.537309 ], [ 106.254928, 28.539412 ], [ 106.184711, 28.58882 ], [ 106.17116, 28.629275 ], [ 106.14837, 28.642932 ], [ 106.103407, 28.636104 ], [ 106.085544, 28.681792 ], [ 106.030726, 28.694917 ], [ 106.001161, 28.743727 ], [ 105.966668, 28.761041 ], [ 105.937719, 28.686517 ], [ 105.889676, 28.670765 ], [ 105.884748, 28.595126 ], [ 105.808372, 28.599855 ], [ 105.78435, 28.610889 ], [ 105.757249, 28.590397 ], [ 105.74493, 28.616668 ], [ 105.712901, 28.586718 ], [ 105.693191, 28.58882 ], [ 105.68272, 28.534154 ], [ 105.62359, 28.517854 ], [ 105.612503, 28.438947 ], [ 105.643916, 28.431053 ], [ 105.655003, 28.362615 ], [ 105.639604, 28.324164 ], [ 105.68888, 28.284119 ], [ 105.730147, 28.271997 ], [ 105.737539, 28.30309 ], [ 105.76464, 28.308359 ], [ 105.76464, 28.308359 ], [ 105.78743, 28.335753 ], [ 105.824386, 28.306251 ], [ 105.848408, 28.255656 ], [ 105.889676, 28.237732 ], [ 105.860727, 28.159672 ], [ 105.895219, 28.119565 ], [ 105.943878, 28.143314 ], [ 105.975907, 28.107952 ], [ 106.093552, 28.162837 ], [ 106.145291, 28.162837 ], [ 106.206885, 28.134343 ], [ 106.266631, 28.066769 ], [ 106.246305, 28.011835 ], [ 106.286341, 28.007079 ], [ 106.328225, 27.952643 ], [ 106.307899, 27.936782 ], [ 106.304819, 27.899237 ], [ 106.325145, 27.898708 ], [ 106.337464, 27.859033 ], [ 106.306667, 27.808756 ], [ 106.242609, 27.767459 ], [ 106.193334, 27.75422 ], [ 106.120653, 27.779638 ], [ 106.063987, 27.776991 ], [ 106.023335, 27.746805 ], [ 105.985146, 27.749983 ], [ 105.92848, 27.729855 ], [ 105.922937, 27.746805 ], [ 105.868118, 27.732504 ], [ 105.848408, 27.707074 ], [ 105.76772, 27.7182 ], [ 105.722756, 27.706015 ], [ 105.720292, 27.683759 ], [ 105.664242, 27.683759 ], [ 105.62359, 27.666269 ], [ 105.605112, 27.715552 ], [ 105.560148, 27.71979 ], [ 105.508409, 27.769048 ], [ 105.44004, 27.775402 ], [ 105.353809, 27.748924 ], [ 105.308229, 27.704955 ], [ 105.290367, 27.712373 ], [ 105.293447, 27.770637 ], [ 105.273736, 27.794992 ], [ 105.313157, 27.810874 ], [ 105.25957, 27.827811 ], [ 105.233084, 27.895534 ], [ 105.284823, 27.935725 ], [ 105.270657, 27.99704 ], [ 105.247867, 28.009193 ], [ 105.218302, 27.990698 ], [ 105.186273, 27.995454 ], [ 105.167795, 28.021345 ], [ 105.186889, 28.054623 ], [ 105.168411, 28.071522 ], [ 105.119752, 28.07205 ], [ 105.061853, 28.096866 ], [ 105.002107, 28.064129 ], [ 104.980549, 28.063073 ], [ 104.975006, 28.020816 ], [ 104.903557, 27.962158 ], [ 104.918339, 27.938897 ], [ 104.888158, 27.914574 ], [ 104.842579, 27.900294 ], [ 104.796999, 27.901352 ], [ 104.761891, 27.884426 ], [ 104.743413, 27.901881 ], [ 104.676275, 27.880723 ], [ 104.63316, 27.850567 ], [ 104.607906, 27.857974 ], [ 104.573413, 27.840512 ], [ 104.52537, 27.889187 ], [ 104.508124, 27.878078 ], [ 104.44961, 27.927794 ], [ 104.40095, 27.952114 ], [ 104.362762, 28.012891 ], [ 104.30856, 28.036136 ], [ 104.304248, 28.050926 ], [ 104.373233, 28.051454 ], [ 104.40095, 28.091586 ], [ 104.448994, 28.113758 ], [ 104.444682, 28.16231 ], [ 104.406494, 28.173389 ], [ 104.402182, 28.202928 ], [ 104.442834, 28.211366 ], [ 104.462544, 28.241422 ], [ 104.44961, 28.269889 ], [ 104.420045, 28.269889 ], [ 104.392943, 28.291497 ], [ 104.384936, 28.329959 ], [ 104.343052, 28.334173 ], [ 104.314103, 28.306778 ], [ 104.282074, 28.343128 ], [ 104.254357, 28.403683 ], [ 104.267908, 28.499448 ], [ 104.260516, 28.536257 ], [ 104.323342, 28.540989 ], [ 104.355987, 28.555183 ], [ 104.375697, 28.5946 ], [ 104.417581, 28.598279 ], [ 104.425588, 28.626649 ], [ 104.372617, 28.649235 ], [ 104.314719, 28.615617 ], [ 104.277147, 28.631902 ], [ 104.252509, 28.660788 ], [ 104.230951, 28.635579 ], [ 104.170589, 28.642932 ], [ 104.117618, 28.634003 ], [ 104.09606, 28.603533 ], [ 104.05972, 28.6277 ], [ 103.953779, 28.600906 ], [ 103.910047, 28.631377 ], [ 103.887873, 28.61982 ], [ 103.850917, 28.66709 ], [ 103.833054, 28.605109 ], [ 103.838598, 28.587244 ], [ 103.802873, 28.563068 ], [ 103.781931, 28.525216 ], [ 103.829975, 28.459995 ], [ 103.828743, 28.44 ], [ 103.860156, 28.383677 ], [ 103.85338, 28.356822 ], [ 103.877402, 28.316262 ], [ 103.828743, 28.285173 ], [ 103.770845, 28.233514 ], [ 103.740048, 28.23615 ], [ 103.701859, 28.198709 ], [ 103.692004, 28.232459 ], [ 103.643961, 28.260401 ], [ 103.573128, 28.230877 ], [ 103.533092, 28.168641 ], [ 103.470266, 28.122204 ], [ 103.430846, 28.044587 ], [ 103.459179, 28.021345 ], [ 103.486281, 28.033495 ], [ 103.515846, 27.965329 ], [ 103.55465, 27.978543 ], [ 103.502295, 27.910343 ], [ 103.509686, 27.843687 ], [ 103.487512, 27.794992 ], [ 103.461027, 27.779638 ], [ 103.393274, 27.709194 ], [ 103.369868, 27.708664 ], [ 103.349542, 27.678459 ], [ 103.29226, 27.632872 ], [ 103.2861, 27.561802 ], [ 103.232514, 27.56976 ], [ 103.19063, 27.523596 ], [ 103.144434, 27.450331 ], [ 103.141355, 27.420586 ], [ 103.080992, 27.396679 ], [ 103.055739, 27.40943 ], [ 102.989833, 27.367983 ], [ 102.941174, 27.405711 ], [ 102.899906, 27.317481 ], [ 102.883892, 27.299401 ], [ 102.883276, 27.258444 ], [ 102.904218, 27.227584 ], [ 102.913457, 27.133886 ], [ 102.870957, 27.026782 ], [ 102.894979, 27.001724 ], [ 102.896211, 26.91264 ], [ 102.949181, 26.843244 ], [ 102.966428, 26.837904 ], [ 102.991681, 26.775409 ], [ 102.983674, 26.76686 ], [ 103.008312, 26.710741 ], [ 103.005232, 26.679195 ], [ 103.026174, 26.664221 ], [ 103.035413, 26.556673 ], [ 103.052659, 26.555602 ], [ 103.052659, 26.514374 ], [ 103.030485, 26.485989 ], [ 102.989833, 26.482775 ], [ 102.988602, 26.413117 ], [ 102.998457, 26.371839 ], [ 102.975667, 26.340736 ], [ 102.893131, 26.338591 ], [ 102.878964, 26.364332 ], [ 102.833385, 26.306406 ], [ 102.785342, 26.298895 ], [ 102.739762, 26.268846 ], [ 102.709581, 26.210336 ], [ 102.659074, 26.221611 ], [ 102.60056, 26.250598 ], [ 102.638748, 26.307479 ], [ 102.629509, 26.336982 ], [ 102.570995, 26.362723 ], [ 102.542046, 26.338591 ], [ 102.440416, 26.300505 ], [ 102.392372, 26.296749 ], [ 102.349257, 26.244694 ], [ 102.245163, 26.212483 ], [ 102.242699, 26.190468 ], [ 102.174946, 26.146961 ], [ 102.152156, 26.10935 ], [ 102.107808, 26.068501 ], [ 102.080091, 26.065275 ], [ 102.020961, 26.096451 ], [ 101.954439, 26.084627 ], [ 101.929186, 26.105588 ], [ 101.899621, 26.099139 ], [ 101.857737, 26.049146 ], [ 101.835563, 26.04592 ], [ 101.839875, 26.082477 ], [ 101.796759, 26.114723 ], [ 101.807846, 26.156093 ], [ 101.773353, 26.168448 ], [ 101.737013, 26.219463 ], [ 101.690202, 26.241473 ], [ 101.630455, 26.224832 ], [ 101.586108, 26.279579 ], [ 101.597195, 26.303187 ], [ 101.64031, 26.318745 ], [ 101.660636, 26.346635 ], [ 101.635383, 26.357361 ], [ 101.637847, 26.388995 ], [ 101.565782, 26.454381 ], [ 101.530057, 26.467239 ], [ 101.506652, 26.499915 ], [ 101.458608, 26.49563 ], [ 101.422884, 26.53151 ], [ 101.395783, 26.591998 ], [ 101.402558, 26.604841 ], [ 101.461688, 26.606447 ], [ 101.461072, 26.640687 ], [ 101.481398, 26.673313 ], [ 101.453065, 26.692563 ], [ 101.513427, 26.768463 ], [ 101.466, 26.786629 ], [ 101.445674, 26.77434 ], [ 101.458608, 26.731054 ], [ 101.435819, 26.740675 ], [ 101.389623, 26.723036 ], [ 101.387159, 26.753501 ], [ 101.358826, 26.771669 ], [ 101.399478, 26.841642 ], [ 101.365602, 26.883819 ], [ 101.311399, 26.903034 ], [ 101.267667, 26.903034 ], [ 101.264587, 26.955323 ], [ 101.227015, 26.959057 ], [ 101.228863, 26.981992 ], [ 101.136472, 27.023584 ], [ 101.157414, 27.094999 ], [ 101.145095, 27.103523 ], [ 101.170349, 27.175421 ], [ 101.167885, 27.198311 ] ] ], [ [ [ 106.264167, 30.20974 ], [ 106.260471, 30.19681 ], [ 106.260471, 30.204051 ], [ 106.260471, 30.207672 ], [ 106.264167, 30.20974 ] ] ], [ [ [ 106.976809, 30.088127 ], [ 106.977425, 30.087609 ], [ 106.978656, 30.087609 ], [ 106.979888, 30.088127 ], [ 106.980504, 30.087609 ], [ 106.981736, 30.08502 ], [ 106.976193, 30.083467 ], [ 106.975577, 30.088127 ], [ 106.976809, 30.088127 ] ] ], [ [ [ 105.558916, 30.18543 ], [ 105.56138, 30.183878 ], [ 105.550909, 30.179222 ], [ 105.556453, 30.187499 ], [ 105.558916, 30.18543 ] ] ] ] } }, +{ "type": "Feature", "properties": { "adcode": "520000", "name": "贵州省", "center": [ 106.713478, 26.578343 ], "centroid": [ 106.880457, 26.826368 ], "childrenNum": 9, "level": "province", "parent": { "adcode": 100000 }, "subFeatureIndex": 23, "acroutes": [ 100000 ] }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 109.274262, 28.494714 ], [ 109.260712, 28.46473 ], [ 109.264407, 28.392628 ], [ 109.289045, 28.373673 ], [ 109.268719, 28.33786 ], [ 109.275494, 28.313101 ], [ 109.317994, 28.277795 ], [ 109.33524, 28.293605 ], [ 109.388211, 28.268307 ], [ 109.367885, 28.254602 ], [ 109.340168, 28.19027 ], [ 109.33832, 28.141731 ], [ 109.314298, 28.103729 ], [ 109.298284, 28.036136 ], [ 109.335856, 28.063073 ], [ 109.378972, 28.034551 ], [ 109.362342, 28.007608 ], [ 109.319842, 27.988585 ], [ 109.30198, 27.956343 ], [ 109.32169, 27.868027 ], [ 109.346943, 27.838396 ], [ 109.332777, 27.782815 ], [ 109.37774, 27.736741 ], [ 109.366653, 27.721909 ], [ 109.414081, 27.725087 ], [ 109.470747, 27.680049 ], [ 109.45658, 27.673689 ], [ 109.470131, 27.62863 ], [ 109.451037, 27.586204 ], [ 109.461508, 27.567637 ], [ 109.404841, 27.55066 ], [ 109.303211, 27.47582 ], [ 109.300132, 27.423774 ], [ 109.245313, 27.41793 ], [ 109.202197, 27.450331 ], [ 109.167089, 27.41793 ], [ 109.141835, 27.448207 ], [ 109.142451, 27.418461 ], [ 109.103647, 27.336621 ], [ 109.044517, 27.331304 ], [ 109.053756, 27.293551 ], [ 108.983539, 27.26802 ], [ 108.963213, 27.235565 ], [ 108.907778, 27.204699 ], [ 108.926873, 27.160512 ], [ 108.878829, 27.106187 ], [ 108.79075, 27.084343 ], [ 108.877597, 27.01612 ], [ 108.942887, 27.017186 ], [ 108.942887, 27.017186 ], [ 108.940423, 27.044907 ], [ 109.007561, 27.08008 ], [ 109.032814, 27.104056 ], [ 109.128901, 27.122701 ], [ 109.101183, 27.06889 ], [ 109.165857, 27.066758 ], [ 109.21698, 27.114711 ], [ 109.239154, 27.14933 ], [ 109.264407, 27.131755 ], [ 109.33524, 27.139212 ], [ 109.358646, 27.153058 ], [ 109.415312, 27.154123 ], [ 109.441182, 27.117907 ], [ 109.472595, 27.134951 ], [ 109.454733, 27.069423 ], [ 109.486761, 27.053968 ], [ 109.497848, 27.079548 ], [ 109.520022, 27.058764 ], [ 109.555131, 26.946788 ], [ 109.436254, 26.892359 ], [ 109.452885, 26.861932 ], [ 109.467051, 26.83203 ], [ 109.47629, 26.829894 ], [ 109.486761, 26.759913 ], [ 109.447957, 26.759913 ], [ 109.407305, 26.719829 ], [ 109.35495, 26.693098 ], [ 109.283501, 26.698445 ], [ 109.306291, 26.661012 ], [ 109.334008, 26.646036 ], [ 109.35495, 26.658873 ], [ 109.390675, 26.598955 ], [ 109.407305, 26.533116 ], [ 109.381436, 26.518659 ], [ 109.385747, 26.493487 ], [ 109.362342, 26.472061 ], [ 109.38082, 26.454381 ], [ 109.319842, 26.418477 ], [ 109.29582, 26.350389 ], [ 109.271183, 26.327863 ], [ 109.285965, 26.295676 ], [ 109.325385, 26.29031 ], [ 109.351255, 26.264016 ], [ 109.369733, 26.277432 ], [ 109.442414, 26.289774 ], [ 109.467051, 26.313917 ], [ 109.439334, 26.238789 ], [ 109.47629, 26.148035 ], [ 109.513863, 26.128157 ], [ 109.502776, 26.096451 ], [ 109.449805, 26.101826 ], [ 109.452885, 26.055598 ], [ 109.48245, 26.029788 ], [ 109.462124, 25.995367 ], [ 109.408537, 25.967392 ], [ 109.435022, 25.93349 ], [ 109.396834, 25.900117 ], [ 109.359262, 25.836036 ], [ 109.339552, 25.83442 ], [ 109.327849, 25.76168 ], [ 109.340168, 25.731493 ], [ 109.296436, 25.71424 ], [ 109.207125, 25.740119 ], [ 109.206509, 25.788087 ], [ 109.147995, 25.741736 ], [ 109.13198, 25.762758 ], [ 109.143683, 25.795092 ], [ 109.095024, 25.80533 ], [ 109.077778, 25.776771 ], [ 109.048213, 25.790781 ], [ 108.989698, 25.778926 ], [ 108.999553, 25.765453 ], [ 108.963829, 25.732572 ], [ 108.940423, 25.740119 ], [ 108.896076, 25.71424 ], [ 108.900387, 25.682423 ], [ 108.953974, 25.686738 ], [ 108.953974, 25.686738 ], [ 109.007561, 25.734728 ], [ 109.043285, 25.738502 ], [ 109.07901, 25.72071 ], [ 109.075314, 25.693749 ], [ 109.030966, 25.629556 ], [ 109.051908, 25.566949 ], [ 109.088249, 25.550752 ], [ 109.024807, 25.51241 ], [ 108.949046, 25.557231 ], [ 108.8893, 25.543193 ], [ 108.890532, 25.556151 ], [ 108.826474, 25.550212 ], [ 108.814772, 25.526992 ], [ 108.781511, 25.554531 ], [ 108.799989, 25.576666 ], [ 108.783975, 25.628477 ], [ 108.724844, 25.634952 ], [ 108.68912, 25.623081 ], [ 108.68604, 25.587462 ], [ 108.660787, 25.584763 ], [ 108.658323, 25.550212 ], [ 108.68912, 25.533473 ], [ 108.634917, 25.520512 ], [ 108.6072, 25.491885 ], [ 108.600425, 25.432448 ], [ 108.62999, 25.335666 ], [ 108.625062, 25.308076 ], [ 108.589338, 25.335125 ], [ 108.585642, 25.365952 ], [ 108.471693, 25.458928 ], [ 108.418723, 25.443257 ], [ 108.400244, 25.491344 ], [ 108.359592, 25.513491 ], [ 108.348506, 25.536173 ], [ 108.308469, 25.525912 ], [ 108.280752, 25.48 ], [ 108.241332, 25.46217 ], [ 108.251803, 25.430286 ], [ 108.192673, 25.458928 ], [ 108.162492, 25.444878 ], [ 108.193289, 25.405421 ], [ 108.142782, 25.390825 ], [ 108.152021, 25.324306 ], [ 108.143398, 25.269658 ], [ 108.115065, 25.210112 ], [ 108.080572, 25.193867 ], [ 108.001732, 25.196574 ], [ 107.928435, 25.155954 ], [ 107.872384, 25.141327 ], [ 107.839124, 25.115861 ], [ 107.762747, 25.125073 ], [ 107.789233, 25.15487 ], [ 107.760283, 25.188451 ], [ 107.762131, 25.229061 ], [ 107.741805, 25.24043 ], [ 107.700537, 25.194408 ], [ 107.696226, 25.219858 ], [ 107.661733, 25.258833 ], [ 107.659885, 25.316192 ], [ 107.632168, 25.310241 ], [ 107.599523, 25.250714 ], [ 107.576734, 25.256668 ], [ 107.512676, 25.209029 ], [ 107.472024, 25.213902 ], [ 107.489886, 25.276693 ], [ 107.481263, 25.299961 ], [ 107.432604, 25.289139 ], [ 107.409198, 25.347024 ], [ 107.420901, 25.392987 ], [ 107.375937, 25.411908 ], [ 107.358691, 25.393528 ], [ 107.318039, 25.401637 ], [ 107.308184, 25.432988 ], [ 107.336517, 25.461089 ], [ 107.263836, 25.543193 ], [ 107.232423, 25.556691 ], [ 107.228728, 25.604733 ], [ 107.205322, 25.607971 ], [ 107.185612, 25.578825 ], [ 107.064272, 25.559391 ], [ 107.066736, 25.50917 ], [ 107.015613, 25.495666 ], [ 106.996519, 25.442716 ], [ 106.963874, 25.437852 ], [ 106.987896, 25.358922 ], [ 107.012533, 25.352973 ], [ 107.013765, 25.275611 ], [ 106.975577, 25.232851 ], [ 106.933077, 25.250714 ], [ 106.904128, 25.231768 ], [ 106.888113, 25.181953 ], [ 106.853005, 25.186827 ], [ 106.787715, 25.17112 ], [ 106.764926, 25.183036 ], [ 106.732281, 25.162454 ], [ 106.691013, 25.179245 ], [ 106.644817, 25.164621 ], [ 106.63989, 25.132658 ], [ 106.590615, 25.08768 ], [ 106.551195, 25.082802 ], [ 106.519782, 25.054072 ], [ 106.450181, 25.033468 ], [ 106.442173, 25.019369 ], [ 106.332536, 24.988454 ], [ 106.304819, 24.973807 ], [ 106.253696, 24.971094 ], [ 106.215508, 24.981944 ], [ 106.191486, 24.95319 ], [ 106.145291, 24.954275 ], [ 106.197645, 24.885889 ], [ 106.206269, 24.851139 ], [ 106.173008, 24.760417 ], [ 106.150218, 24.762591 ], [ 106.113878, 24.714216 ], [ 106.047356, 24.684312 ], [ 106.024566, 24.633186 ], [ 105.961741, 24.677786 ], [ 105.942031, 24.725088 ], [ 105.863806, 24.729437 ], [ 105.827466, 24.702799 ], [ 105.767104, 24.719109 ], [ 105.70551, 24.768569 ], [ 105.617431, 24.78161 ], [ 105.607576, 24.803885 ], [ 105.573083, 24.797366 ], [ 105.497322, 24.809318 ], [ 105.493011, 24.833217 ], [ 105.457286, 24.87123 ], [ 105.428337, 24.930941 ], [ 105.365511, 24.943423 ], [ 105.334099, 24.9266 ], [ 105.267577, 24.929313 ], [ 105.251563, 24.967296 ], [ 105.212758, 24.995505 ], [ 105.178266, 24.985199 ], [ 105.157324, 24.958616 ], [ 105.131454, 24.959701 ], [ 105.09573, 24.92877 ], [ 105.077868, 24.918459 ], [ 105.039064, 24.872859 ], [ 105.026745, 24.815836 ], [ 105.03352, 24.787586 ], [ 104.899245, 24.752809 ], [ 104.865985, 24.730524 ], [ 104.841963, 24.676155 ], [ 104.771746, 24.659839 ], [ 104.729246, 24.617953 ], [ 104.703377, 24.645698 ], [ 104.628848, 24.660927 ], [ 104.595587, 24.709323 ], [ 104.529682, 24.731611 ], [ 104.542616, 24.75607 ], [ 104.539537, 24.813663 ], [ 104.586964, 24.872859 ], [ 104.635623, 24.903803 ], [ 104.663957, 24.964584 ], [ 104.713232, 24.996048 ], [ 104.684898, 25.054072 ], [ 104.619609, 25.060577 ], [ 104.685514, 25.078466 ], [ 104.695369, 25.122364 ], [ 104.732326, 25.167871 ], [ 104.724319, 25.195491 ], [ 104.753884, 25.214443 ], [ 104.801927, 25.163537 ], [ 104.822869, 25.170037 ], [ 104.806854, 25.224189 ], [ 104.826565, 25.235558 ], [ 104.816094, 25.262622 ], [ 104.736021, 25.268034 ], [ 104.689826, 25.296173 ], [ 104.639935, 25.295632 ], [ 104.646094, 25.356759 ], [ 104.615913, 25.364871 ], [ 104.566638, 25.402719 ], [ 104.543232, 25.400556 ], [ 104.556783, 25.524832 ], [ 104.524138, 25.526992 ], [ 104.483486, 25.494585 ], [ 104.44961, 25.495126 ], [ 104.434827, 25.472436 ], [ 104.418813, 25.499447 ], [ 104.436059, 25.520512 ], [ 104.428668, 25.576126 ], [ 104.389248, 25.595558 ], [ 104.332581, 25.598796 ], [ 104.310407, 25.647901 ], [ 104.328886, 25.760602 ], [ 104.370769, 25.730415 ], [ 104.397871, 25.76168 ], [ 104.42374, 25.841961 ], [ 104.441602, 25.868889 ], [ 104.414501, 25.909807 ], [ 104.438523, 25.92757 ], [ 104.470552, 26.009352 ], [ 104.460081, 26.085702 ], [ 104.499501, 26.070651 ], [ 104.52845, 26.114186 ], [ 104.518595, 26.165762 ], [ 104.548776, 26.226979 ], [ 104.542616, 26.253282 ], [ 104.592508, 26.317672 ], [ 104.659645, 26.335373 ], [ 104.684283, 26.3772 ], [ 104.664572, 26.397572 ], [ 104.665804, 26.434019 ], [ 104.631928, 26.451702 ], [ 104.638703, 26.477954 ], [ 104.598667, 26.520801 ], [ 104.57095, 26.524549 ], [ 104.579573, 26.568449 ], [ 104.556783, 26.590393 ], [ 104.488414, 26.579689 ], [ 104.459465, 26.602701 ], [ 104.468088, 26.644431 ], [ 104.424356, 26.709137 ], [ 104.398487, 26.686147 ], [ 104.353523, 26.620893 ], [ 104.313487, 26.612867 ], [ 104.274683, 26.633733 ], [ 104.268524, 26.617683 ], [ 104.222328, 26.620358 ], [ 104.160734, 26.646571 ], [ 104.121314, 26.638012 ], [ 104.068343, 26.573266 ], [ 104.067727, 26.51491 ], [ 104.008597, 26.511697 ], [ 103.953163, 26.521336 ], [ 103.865699, 26.512232 ], [ 103.819504, 26.529903 ], [ 103.815808, 26.55239 ], [ 103.763453, 26.585041 ], [ 103.748671, 26.623568 ], [ 103.759142, 26.689355 ], [ 103.773308, 26.716621 ], [ 103.725265, 26.742812 ], [ 103.705555, 26.794642 ], [ 103.722185, 26.851253 ], [ 103.779468, 26.87421 ], [ 103.763453, 26.905702 ], [ 103.775156, 26.951056 ], [ 103.753598, 26.963858 ], [ 103.73204, 27.018785 ], [ 103.704939, 27.049171 ], [ 103.675374, 27.051836 ], [ 103.623019, 27.007056 ], [ 103.623635, 27.035312 ], [ 103.601461, 27.061962 ], [ 103.614396, 27.079548 ], [ 103.659975, 27.065692 ], [ 103.652584, 27.092868 ], [ 103.620555, 27.096598 ], [ 103.63349, 27.12057 ], [ 103.696316, 27.126429 ], [ 103.748671, 27.210021 ], [ 103.801641, 27.250464 ], [ 103.80041, 27.26536 ], [ 103.865699, 27.28185 ], [ 103.874322, 27.331304 ], [ 103.903271, 27.347785 ], [ 103.905119, 27.38552 ], [ 103.932221, 27.443958 ], [ 103.956242, 27.425367 ], [ 104.015372, 27.429086 ], [ 104.01722, 27.383926 ], [ 104.084358, 27.330773 ], [ 104.113923, 27.338216 ], [ 104.173053, 27.263232 ], [ 104.210625, 27.297273 ], [ 104.248813, 27.291955 ], [ 104.247582, 27.336621 ], [ 104.295625, 27.37436 ], [ 104.30856, 27.407305 ], [ 104.363378, 27.467855 ], [ 104.467472, 27.414211 ], [ 104.497037, 27.414743 ], [ 104.539537, 27.327583 ], [ 104.570334, 27.331836 ], [ 104.611602, 27.306846 ], [ 104.7545, 27.345658 ], [ 104.77113, 27.317481 ], [ 104.824717, 27.3531 ], [ 104.856746, 27.332368 ], [ 104.851818, 27.299401 ], [ 104.871528, 27.290891 ], [ 104.913412, 27.327051 ], [ 105.01073, 27.379143 ], [ 105.068013, 27.418461 ], [ 105.120984, 27.418461 ], [ 105.184425, 27.392959 ], [ 105.182577, 27.367451 ], [ 105.233084, 27.436522 ], [ 105.234316, 27.489093 ], [ 105.260186, 27.514573 ], [ 105.232469, 27.546945 ], [ 105.25649, 27.582491 ], [ 105.304533, 27.611661 ], [ 105.29591, 27.631811 ], [ 105.308229, 27.704955 ], [ 105.353809, 27.748924 ], [ 105.44004, 27.775402 ], [ 105.508409, 27.769048 ], [ 105.560148, 27.71979 ], [ 105.605112, 27.715552 ], [ 105.62359, 27.666269 ], [ 105.664242, 27.683759 ], [ 105.720292, 27.683759 ], [ 105.722756, 27.706015 ], [ 105.76772, 27.7182 ], [ 105.848408, 27.707074 ], [ 105.868118, 27.732504 ], [ 105.922937, 27.746805 ], [ 105.92848, 27.729855 ], [ 105.985146, 27.749983 ], [ 106.023335, 27.746805 ], [ 106.063987, 27.776991 ], [ 106.120653, 27.779638 ], [ 106.193334, 27.75422 ], [ 106.242609, 27.767459 ], [ 106.306667, 27.808756 ], [ 106.337464, 27.859033 ], [ 106.325145, 27.898708 ], [ 106.304819, 27.899237 ], [ 106.307899, 27.936782 ], [ 106.328225, 27.952643 ], [ 106.286341, 28.007079 ], [ 106.246305, 28.011835 ], [ 106.266631, 28.066769 ], [ 106.206885, 28.134343 ], [ 106.145291, 28.162837 ], [ 106.093552, 28.162837 ], [ 105.975907, 28.107952 ], [ 105.943878, 28.143314 ], [ 105.895219, 28.119565 ], [ 105.860727, 28.159672 ], [ 105.889676, 28.237732 ], [ 105.848408, 28.255656 ], [ 105.824386, 28.306251 ], [ 105.78743, 28.335753 ], [ 105.76464, 28.308359 ], [ 105.76464, 28.308359 ], [ 105.737539, 28.30309 ], [ 105.730147, 28.271997 ], [ 105.68888, 28.284119 ], [ 105.639604, 28.324164 ], [ 105.655003, 28.362615 ], [ 105.643916, 28.431053 ], [ 105.612503, 28.438947 ], [ 105.62359, 28.517854 ], [ 105.68272, 28.534154 ], [ 105.693191, 28.58882 ], [ 105.712901, 28.586718 ], [ 105.74493, 28.616668 ], [ 105.757249, 28.590397 ], [ 105.78435, 28.610889 ], [ 105.808372, 28.599855 ], [ 105.884748, 28.595126 ], [ 105.889676, 28.670765 ], [ 105.937719, 28.686517 ], [ 105.966668, 28.761041 ], [ 106.001161, 28.743727 ], [ 106.030726, 28.694917 ], [ 106.085544, 28.681792 ], [ 106.103407, 28.636104 ], [ 106.14837, 28.642932 ], [ 106.17116, 28.629275 ], [ 106.184711, 28.58882 ], [ 106.254928, 28.539412 ], [ 106.2925, 28.537309 ], [ 106.304819, 28.505233 ], [ 106.349167, 28.473674 ], [ 106.379348, 28.479986 ], [ 106.37442, 28.525742 ], [ 106.403369, 28.569901 ], [ 106.477282, 28.530474 ], [ 106.504999, 28.544669 ], [ 106.466811, 28.586193 ], [ 106.49268, 28.591448 ], [ 106.502535, 28.661313 ], [ 106.528405, 28.677591 ], [ 106.492064, 28.742153 ], [ 106.461883, 28.761041 ], [ 106.45326, 28.817162 ], [ 106.474202, 28.832891 ], [ 106.561666, 28.756319 ], [ 106.56105, 28.719062 ], [ 106.587535, 28.691767 ], [ 106.6171, 28.691242 ], [ 106.617716, 28.66709 ], [ 106.651593, 28.649235 ], [ 106.618332, 28.645033 ], [ 106.63681, 28.622972 ], [ 106.606629, 28.593024 ], [ 106.615252, 28.549401 ], [ 106.567825, 28.523638 ], [ 106.564745, 28.485247 ], [ 106.632499, 28.503655 ], [ 106.697788, 28.47683 ], [ 106.708259, 28.450524 ], [ 106.747063, 28.467361 ], [ 106.726121, 28.51838 ], [ 106.73844, 28.554657 ], [ 106.77786, 28.563068 ], [ 106.756918, 28.607211 ], [ 106.784636, 28.626649 ], [ 106.807425, 28.589346 ], [ 106.830831, 28.623497 ], [ 106.866556, 28.624548 ], [ 106.889345, 28.695966 ], [ 106.86594, 28.690192 ], [ 106.824056, 28.756319 ], [ 106.845614, 28.780975 ], [ 106.872099, 28.777304 ], [ 106.923222, 28.809821 ], [ 106.951555, 28.766812 ], [ 106.988512, 28.776254 ], [ 106.983584, 28.851239 ], [ 107.019308, 28.861722 ], [ 107.016229, 28.882685 ], [ 107.14188, 28.887925 ], [ 107.206554, 28.868535 ], [ 107.194851, 28.838134 ], [ 107.227496, 28.836037 ], [ 107.210866, 28.817686 ], [ 107.219489, 28.772582 ], [ 107.24659, 28.76209 ], [ 107.261373, 28.792514 ], [ 107.327894, 28.810869 ], [ 107.339597, 28.845997 ], [ 107.383945, 28.848618 ], [ 107.41351, 28.911502 ], [ 107.441227, 28.943977 ], [ 107.412894, 28.960211 ], [ 107.396879, 28.993718 ], [ 107.364235, 29.00942 ], [ 107.395647, 29.041341 ], [ 107.369778, 29.091558 ], [ 107.412278, 29.094696 ], [ 107.427676, 29.128682 ], [ 107.408582, 29.138091 ], [ 107.401807, 29.184603 ], [ 107.441227, 29.203934 ], [ 107.486806, 29.174153 ], [ 107.570574, 29.218037 ], [ 107.589052, 29.150113 ], [ 107.605683, 29.164747 ], [ 107.659885, 29.162656 ], [ 107.700537, 29.141228 ], [ 107.749197, 29.199754 ], [ 107.810791, 29.139137 ], [ 107.784921, 29.048143 ], [ 107.823725, 29.034016 ], [ 107.810175, 28.984295 ], [ 107.867457, 28.960211 ], [ 107.882855, 29.00628 ], [ 107.908725, 29.007327 ], [ 107.925971, 29.032446 ], [ 108.026369, 29.039772 ], [ 108.070717, 29.086328 ], [ 108.150173, 29.053375 ], [ 108.193289, 29.072207 ], [ 108.256115, 29.040295 ], [ 108.277673, 29.091558 ], [ 108.306622, 29.079006 ], [ 108.297999, 29.045527 ], [ 108.319556, 28.961258 ], [ 108.345426, 28.943453 ], [ 108.357745, 28.893165 ], [ 108.346658, 28.859625 ], [ 108.352817, 28.815589 ], [ 108.386078, 28.803003 ], [ 108.385462, 28.772058 ], [ 108.347274, 28.736381 ], [ 108.332491, 28.679166 ], [ 108.439049, 28.634003 ], [ 108.501258, 28.626649 ], [ 108.50249, 28.63768 ], [ 108.575787, 28.659738 ], [ 108.636149, 28.621396 ], [ 108.604736, 28.590922 ], [ 108.610896, 28.539412 ], [ 108.573939, 28.531 ], [ 108.586874, 28.463678 ], [ 108.609664, 28.43579 ], [ 108.609048, 28.407368 ], [ 108.576403, 28.38631 ], [ 108.580099, 28.343128 ], [ 108.611512, 28.324691 ], [ 108.667562, 28.334173 ], [ 108.656475, 28.359981 ], [ 108.697127, 28.401051 ], [ 108.688504, 28.422106 ], [ 108.640461, 28.456838 ], [ 108.657091, 28.47683 ], [ 108.700207, 28.48209 ], [ 108.709446, 28.501026 ], [ 108.746402, 28.45105 ], [ 108.780279, 28.42579 ], [ 108.759953, 28.389995 ], [ 108.783359, 28.380518 ], [ 108.761801, 28.304143 ], [ 108.726692, 28.282011 ], [ 108.738395, 28.228241 ], [ 108.772888, 28.212949 ], [ 108.821547, 28.245113 ], [ 108.855424, 28.199764 ], [ 108.89546, 28.219804 ], [ 108.923793, 28.217167 ], [ 108.929952, 28.19027 ], [ 109.005713, 28.162837 ], [ 109.026655, 28.220331 ], [ 109.086401, 28.184467 ], [ 109.101799, 28.202401 ], [ 109.081473, 28.247749 ], [ 109.117198, 28.277795 ], [ 109.152306, 28.349975 ], [ 109.153538, 28.417369 ], [ 109.191726, 28.471043 ], [ 109.23361, 28.474726 ], [ 109.274262, 28.494714 ] ] ], [ [ [ 109.47629, 26.829894 ], [ 109.467051, 26.83203 ], [ 109.452885, 26.861932 ], [ 109.486761, 26.895562 ], [ 109.509551, 26.877947 ], [ 109.513247, 26.84004 ], [ 109.497232, 26.815474 ], [ 109.522486, 26.749226 ], [ 109.52187, 26.749226 ], [ 109.486761, 26.759913 ], [ 109.47629, 26.829894 ] ] ], [ [ [ 109.528645, 26.743881 ], [ 109.554515, 26.73533 ], [ 109.597015, 26.756173 ], [ 109.568065, 26.726243 ], [ 109.528645, 26.743881 ] ] ] ] } }, +{ "type": "Feature", "properties": { "adcode": "530000", "name": "云南省", "center": [ 102.712251, 25.040609 ], "centroid": [ 101.485106, 25.008644 ], "childrenNum": 16, "level": "province", "parent": { "adcode": 100000 }, "subFeatureIndex": 24, "acroutes": [ 100000 ] }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 105.308229, 27.704955 ], [ 105.29591, 27.631811 ], [ 105.304533, 27.611661 ], [ 105.25649, 27.582491 ], [ 105.232469, 27.546945 ], [ 105.260186, 27.514573 ], [ 105.234316, 27.489093 ], [ 105.233084, 27.436522 ], [ 105.182577, 27.367451 ], [ 105.184425, 27.392959 ], [ 105.120984, 27.418461 ], [ 105.068013, 27.418461 ], [ 105.01073, 27.379143 ], [ 104.913412, 27.327051 ], [ 104.871528, 27.290891 ], [ 104.851818, 27.299401 ], [ 104.856746, 27.332368 ], [ 104.824717, 27.3531 ], [ 104.77113, 27.317481 ], [ 104.7545, 27.345658 ], [ 104.611602, 27.306846 ], [ 104.570334, 27.331836 ], [ 104.539537, 27.327583 ], [ 104.497037, 27.414743 ], [ 104.467472, 27.414211 ], [ 104.363378, 27.467855 ], [ 104.30856, 27.407305 ], [ 104.295625, 27.37436 ], [ 104.247582, 27.336621 ], [ 104.248813, 27.291955 ], [ 104.210625, 27.297273 ], [ 104.173053, 27.263232 ], [ 104.113923, 27.338216 ], [ 104.084358, 27.330773 ], [ 104.01722, 27.383926 ], [ 104.015372, 27.429086 ], [ 103.956242, 27.425367 ], [ 103.932221, 27.443958 ], [ 103.905119, 27.38552 ], [ 103.903271, 27.347785 ], [ 103.874322, 27.331304 ], [ 103.865699, 27.28185 ], [ 103.80041, 27.26536 ], [ 103.801641, 27.250464 ], [ 103.748671, 27.210021 ], [ 103.696316, 27.126429 ], [ 103.63349, 27.12057 ], [ 103.620555, 27.096598 ], [ 103.652584, 27.092868 ], [ 103.659975, 27.065692 ], [ 103.614396, 27.079548 ], [ 103.601461, 27.061962 ], [ 103.623635, 27.035312 ], [ 103.623019, 27.007056 ], [ 103.675374, 27.051836 ], [ 103.704939, 27.049171 ], [ 103.73204, 27.018785 ], [ 103.753598, 26.963858 ], [ 103.775156, 26.951056 ], [ 103.763453, 26.905702 ], [ 103.779468, 26.87421 ], [ 103.722185, 26.851253 ], [ 103.705555, 26.794642 ], [ 103.725265, 26.742812 ], [ 103.773308, 26.716621 ], [ 103.759142, 26.689355 ], [ 103.748671, 26.623568 ], [ 103.763453, 26.585041 ], [ 103.815808, 26.55239 ], [ 103.819504, 26.529903 ], [ 103.865699, 26.512232 ], [ 103.953163, 26.521336 ], [ 104.008597, 26.511697 ], [ 104.067727, 26.51491 ], [ 104.068343, 26.573266 ], [ 104.121314, 26.638012 ], [ 104.160734, 26.646571 ], [ 104.222328, 26.620358 ], [ 104.268524, 26.617683 ], [ 104.274683, 26.633733 ], [ 104.313487, 26.612867 ], [ 104.353523, 26.620893 ], [ 104.398487, 26.686147 ], [ 104.424356, 26.709137 ], [ 104.468088, 26.644431 ], [ 104.459465, 26.602701 ], [ 104.488414, 26.579689 ], [ 104.556783, 26.590393 ], [ 104.579573, 26.568449 ], [ 104.57095, 26.524549 ], [ 104.598667, 26.520801 ], [ 104.638703, 26.477954 ], [ 104.631928, 26.451702 ], [ 104.665804, 26.434019 ], [ 104.664572, 26.397572 ], [ 104.684283, 26.3772 ], [ 104.659645, 26.335373 ], [ 104.592508, 26.317672 ], [ 104.542616, 26.253282 ], [ 104.548776, 26.226979 ], [ 104.518595, 26.165762 ], [ 104.52845, 26.114186 ], [ 104.499501, 26.070651 ], [ 104.460081, 26.085702 ], [ 104.470552, 26.009352 ], [ 104.438523, 25.92757 ], [ 104.414501, 25.909807 ], [ 104.441602, 25.868889 ], [ 104.42374, 25.841961 ], [ 104.397871, 25.76168 ], [ 104.370769, 25.730415 ], [ 104.328886, 25.760602 ], [ 104.310407, 25.647901 ], [ 104.332581, 25.598796 ], [ 104.389248, 25.595558 ], [ 104.428668, 25.576126 ], [ 104.436059, 25.520512 ], [ 104.418813, 25.499447 ], [ 104.434827, 25.472436 ], [ 104.44961, 25.495126 ], [ 104.483486, 25.494585 ], [ 104.524138, 25.526992 ], [ 104.556783, 25.524832 ], [ 104.543232, 25.400556 ], [ 104.566638, 25.402719 ], [ 104.615913, 25.364871 ], [ 104.646094, 25.356759 ], [ 104.639935, 25.295632 ], [ 104.689826, 25.296173 ], [ 104.736021, 25.268034 ], [ 104.816094, 25.262622 ], [ 104.826565, 25.235558 ], [ 104.806854, 25.224189 ], [ 104.822869, 25.170037 ], [ 104.801927, 25.163537 ], [ 104.753884, 25.214443 ], [ 104.724319, 25.195491 ], [ 104.732326, 25.167871 ], [ 104.695369, 25.122364 ], [ 104.685514, 25.078466 ], [ 104.619609, 25.060577 ], [ 104.684898, 25.054072 ], [ 104.713232, 24.996048 ], [ 104.663957, 24.964584 ], [ 104.635623, 24.903803 ], [ 104.586964, 24.872859 ], [ 104.539537, 24.813663 ], [ 104.542616, 24.75607 ], [ 104.529682, 24.731611 ], [ 104.489646, 24.653313 ], [ 104.520443, 24.535228 ], [ 104.550008, 24.518894 ], [ 104.575877, 24.424661 ], [ 104.616529, 24.421937 ], [ 104.63008, 24.397958 ], [ 104.610986, 24.377246 ], [ 104.641783, 24.367979 ], [ 104.70892, 24.321087 ], [ 104.721239, 24.340173 ], [ 104.703377, 24.419757 ], [ 104.715695, 24.441552 ], [ 104.74834, 24.435559 ], [ 104.765587, 24.45953 ], [ 104.784681, 24.443732 ], [ 104.83642, 24.446456 ], [ 104.914028, 24.426296 ], [ 104.930042, 24.411038 ], [ 104.979933, 24.412673 ], [ 105.042759, 24.442097 ], [ 105.106817, 24.414853 ], [ 105.111744, 24.37234 ], [ 105.138846, 24.376701 ], [ 105.188121, 24.347261 ], [ 105.196744, 24.326541 ], [ 105.164715, 24.288362 ], [ 105.215222, 24.214699 ], [ 105.24294, 24.208695 ], [ 105.229389, 24.165567 ], [ 105.182577, 24.167205 ], [ 105.20044, 24.105491 ], [ 105.260186, 24.061236 ], [ 105.292831, 24.074896 ], [ 105.273121, 24.092927 ], [ 105.320548, 24.116416 ], [ 105.334099, 24.094566 ], [ 105.395692, 24.065607 ], [ 105.406163, 24.043748 ], [ 105.493011, 24.016965 ], [ 105.533663, 24.130071 ], [ 105.594641, 24.137718 ], [ 105.628518, 24.126794 ], [ 105.649459, 24.032816 ], [ 105.704278, 24.0667 ], [ 105.739387, 24.059596 ], [ 105.765256, 24.073804 ], [ 105.802212, 24.051945 ], [ 105.796669, 24.023524 ], [ 105.841633, 24.03063 ], [ 105.859495, 24.056864 ], [ 105.89214, 24.040468 ], [ 105.908154, 24.069432 ], [ 105.901995, 24.099482 ], [ 105.919241, 24.122425 ], [ 105.963589, 24.110954 ], [ 105.998081, 24.120786 ], [ 106.011632, 24.099482 ], [ 106.04982, 24.089649 ], [ 106.053516, 24.051399 ], [ 106.096631, 24.018058 ], [ 106.091088, 23.998924 ], [ 106.128044, 23.956819 ], [ 106.157609, 23.891174 ], [ 106.192718, 23.879135 ], [ 106.173008, 23.861622 ], [ 106.192102, 23.824947 ], [ 106.136667, 23.795381 ], [ 106.157609, 23.724175 ], [ 106.149602, 23.665538 ], [ 106.120653, 23.605229 ], [ 106.141595, 23.569579 ], [ 106.08616, 23.524043 ], [ 106.071994, 23.495506 ], [ 106.039965, 23.484529 ], [ 105.999929, 23.447748 ], [ 105.986378, 23.489469 ], [ 105.935871, 23.508678 ], [ 105.913081, 23.499348 ], [ 105.89214, 23.52514 ], [ 105.852103, 23.526786 ], [ 105.815763, 23.507031 ], [ 105.805908, 23.467512 ], [ 105.758481, 23.459826 ], [ 105.699966, 23.40162 ], [ 105.637757, 23.404366 ], [ 105.694423, 23.363168 ], [ 105.699966, 23.327453 ], [ 105.649459, 23.346136 ], [ 105.593409, 23.312614 ], [ 105.560148, 23.257093 ], [ 105.526272, 23.234548 ], [ 105.542902, 23.184495 ], [ 105.50225, 23.202648 ], [ 105.445584, 23.292827 ], [ 105.416018, 23.283482 ], [ 105.372903, 23.317561 ], [ 105.353809, 23.362069 ], [ 105.325475, 23.390086 ], [ 105.260186, 23.31811 ], [ 105.238012, 23.26424 ], [ 105.181962, 23.279084 ], [ 105.122215, 23.247745 ], [ 105.093266, 23.260942 ], [ 104.958991, 23.188896 ], [ 104.949136, 23.152033 ], [ 104.912796, 23.175693 ], [ 104.882615, 23.163589 ], [ 104.874608, 23.123417 ], [ 104.804391, 23.110207 ], [ 104.821021, 23.032022 ], [ 104.860441, 22.970874 ], [ 104.846275, 22.926235 ], [ 104.772362, 22.893711 ], [ 104.760659, 22.862282 ], [ 104.732942, 22.852356 ], [ 104.737869, 22.825882 ], [ 104.674428, 22.817056 ], [ 104.596203, 22.846289 ], [ 104.527834, 22.814298 ], [ 104.498885, 22.774574 ], [ 104.422508, 22.734838 ], [ 104.375697, 22.690122 ], [ 104.323342, 22.728767 ], [ 104.272835, 22.73815 ], [ 104.256821, 22.77347 ], [ 104.274067, 22.828088 ], [ 104.261748, 22.841877 ], [ 104.224176, 22.826434 ], [ 104.117618, 22.808781 ], [ 104.089901, 22.768504 ], [ 104.045553, 22.728215 ], [ 104.04309, 22.67687 ], [ 104.022148, 22.593463 ], [ 104.009213, 22.575228 ], [ 104.009213, 22.517745 ], [ 103.964865, 22.502265 ], [ 103.894032, 22.564728 ], [ 103.875554, 22.565833 ], [ 103.863851, 22.584069 ], [ 103.825047, 22.615562 ], [ 103.766533, 22.688465 ], [ 103.669215, 22.766297 ], [ 103.642113, 22.794989 ], [ 103.567585, 22.701164 ], [ 103.580519, 22.66693 ], [ 103.529396, 22.59291 ], [ 103.50907, 22.601198 ], [ 103.457947, 22.658646 ], [ 103.436389, 22.6973 ], [ 103.441317, 22.753052 ], [ 103.375411, 22.794989 ], [ 103.323057, 22.807678 ], [ 103.321209, 22.777885 ], [ 103.288564, 22.732078 ], [ 103.283021, 22.678526 ], [ 103.220195, 22.643734 ], [ 103.195557, 22.648153 ], [ 103.161065, 22.590147 ], [ 103.183238, 22.558649 ], [ 103.119181, 22.518298 ], [ 103.085304, 22.509452 ], [ 103.071753, 22.445304 ], [ 103.030485, 22.441432 ], [ 102.986754, 22.477935 ], [ 102.930703, 22.482359 ], [ 102.892515, 22.533223 ], [ 102.880196, 22.586832 ], [ 102.82353, 22.623296 ], [ 102.80074, 22.620534 ], [ 102.688639, 22.70006 ], [ 102.657226, 22.687913 ], [ 102.607335, 22.730975 ], [ 102.569763, 22.701164 ], [ 102.551285, 22.743669 ], [ 102.498314, 22.777885 ], [ 102.45951, 22.762986 ], [ 102.43672, 22.699508 ], [ 102.384365, 22.679631 ], [ 102.404691, 22.629925 ], [ 102.356648, 22.563623 ], [ 102.322771, 22.554227 ], [ 102.25625, 22.457473 ], [ 102.270416, 22.419858 ], [ 102.179257, 22.430369 ], [ 102.145381, 22.397727 ], [ 102.131214, 22.430922 ], [ 102.046214, 22.458026 ], [ 101.978461, 22.427603 ], [ 101.907628, 22.437007 ], [ 101.901469, 22.384447 ], [ 101.862665, 22.389427 ], [ 101.823244, 22.42705 ], [ 101.824476, 22.45692 ], [ 101.774585, 22.506135 ], [ 101.715455, 22.477935 ], [ 101.672339, 22.47517 ], [ 101.648318, 22.400494 ], [ 101.671723, 22.372826 ], [ 101.625528, 22.28259 ], [ 101.56455, 22.269299 ], [ 101.547304, 22.238282 ], [ 101.596579, 22.161262 ], [ 101.602738, 22.131883 ], [ 101.573789, 22.115251 ], [ 101.626144, 22.005986 ], [ 101.606434, 21.967695 ], [ 101.666796, 21.934391 ], [ 101.701288, 21.938832 ], [ 101.700057, 21.897191 ], [ 101.735165, 21.875534 ], [ 101.740093, 21.845541 ], [ 101.771506, 21.833319 ], [ 101.747484, 21.729953 ], [ 101.76781, 21.716054 ], [ 101.780129, 21.640975 ], [ 101.807846, 21.644313 ], [ 101.828788, 21.617054 ], [ 101.804766, 21.577546 ], [ 101.754875, 21.58478 ], [ 101.755491, 21.538027 ], [ 101.772737, 21.512975 ], [ 101.741324, 21.482906 ], [ 101.749948, 21.409379 ], [ 101.730238, 21.336929 ], [ 101.745636, 21.297345 ], [ 101.791832, 21.285636 ], [ 101.833715, 21.252731 ], [ 101.834331, 21.204756 ], [ 101.794911, 21.208104 ], [ 101.76473, 21.147835 ], [ 101.703136, 21.14616 ], [ 101.672339, 21.194713 ], [ 101.605818, 21.172392 ], [ 101.588572, 21.191365 ], [ 101.601506, 21.233208 ], [ 101.532521, 21.252174 ], [ 101.439514, 21.227072 ], [ 101.387775, 21.225956 ], [ 101.290457, 21.17853 ], [ 101.222088, 21.234324 ], [ 101.246725, 21.275598 ], [ 101.244877, 21.302364 ], [ 101.183899, 21.334699 ], [ 101.142631, 21.409379 ], [ 101.194986, 21.424979 ], [ 101.193138, 21.473996 ], [ 101.225167, 21.499055 ], [ 101.210385, 21.509077 ], [ 101.209153, 21.55751 ], [ 101.146943, 21.560293 ], [ 101.169117, 21.590345 ], [ 101.153102, 21.669343 ], [ 101.116762, 21.691032 ], [ 101.111835, 21.746074 ], [ 101.123537, 21.771642 ], [ 101.089661, 21.773865 ], [ 101.015132, 21.707157 ], [ 100.940603, 21.697149 ], [ 100.870386, 21.67268 ], [ 100.847597, 21.634856 ], [ 100.804481, 21.609821 ], [ 100.789082, 21.570867 ], [ 100.753358, 21.555283 ], [ 100.730568, 21.518542 ], [ 100.691764, 21.510748 ], [ 100.579047, 21.451717 ], [ 100.526692, 21.471211 ], [ 100.48296, 21.458958 ], [ 100.437381, 21.533017 ], [ 100.350534, 21.52912 ], [ 100.298795, 21.477894 ], [ 100.235353, 21.466756 ], [ 100.206404, 21.509634 ], [ 100.180534, 21.514088 ], [ 100.168831, 21.482906 ], [ 100.131259, 21.504066 ], [ 100.123252, 21.565302 ], [ 100.107853, 21.585337 ], [ 100.169447, 21.663225 ], [ 100.131875, 21.699929 ], [ 100.094303, 21.702709 ], [ 100.049339, 21.669899 ], [ 99.991441, 21.703821 ], [ 99.944014, 21.821097 ], [ 99.960028, 21.907186 ], [ 99.982202, 21.919401 ], [ 100.000064, 21.973245 ], [ 99.965571, 22.014309 ], [ 99.972347, 22.053141 ], [ 99.871333, 22.067007 ], [ 99.870101, 22.029288 ], [ 99.762927, 22.068117 ], [ 99.696406, 22.067562 ], [ 99.648979, 22.100835 ], [ 99.581841, 22.103053 ], [ 99.578762, 22.098617 ], [ 99.562747, 22.113034 ], [ 99.516552, 22.099726 ], [ 99.486987, 22.128557 ], [ 99.400139, 22.100281 ], [ 99.35456, 22.095845 ], [ 99.294814, 22.109152 ], [ 99.219669, 22.110816 ], [ 99.156227, 22.159599 ], [ 99.188256, 22.162924 ], [ 99.175321, 22.185647 ], [ 99.207966, 22.232188 ], [ 99.235683, 22.250468 ], [ 99.233836, 22.296434 ], [ 99.278183, 22.34626 ], [ 99.251698, 22.393301 ], [ 99.297277, 22.41156 ], [ 99.382277, 22.493418 ], [ 99.359487, 22.535435 ], [ 99.385973, 22.57136 ], [ 99.339777, 22.708894 ], [ 99.31514, 22.737598 ], [ 99.326842, 22.751396 ], [ 99.385357, 22.761882 ], [ 99.401371, 22.826434 ], [ 99.462965, 22.844635 ], [ 99.43648, 22.913557 ], [ 99.446951, 22.934503 ], [ 99.531334, 22.897019 ], [ 99.563363, 22.925684 ], [ 99.533798, 22.961507 ], [ 99.517168, 23.006685 ], [ 99.528255, 23.065614 ], [ 99.477747, 23.083233 ], [ 99.440791, 23.079379 ], [ 99.380429, 23.099748 ], [ 99.3484, 23.12892 ], [ 99.281879, 23.101399 ], [ 99.255393, 23.077727 ], [ 99.187024, 23.100299 ], [ 99.106336, 23.086536 ], [ 99.048438, 23.11461 ], [ 99.057677, 23.164689 ], [ 99.002242, 23.160287 ], [ 98.906772, 23.185595 ], [ 98.889525, 23.209249 ], [ 98.928946, 23.26589 ], [ 98.936953, 23.309866 ], [ 98.906772, 23.331849 ], [ 98.872895, 23.329651 ], [ 98.920938, 23.360971 ], [ 98.912315, 23.426333 ], [ 98.874743, 23.483431 ], [ 98.826084, 23.470257 ], [ 98.80391, 23.540504 ], [ 98.844562, 23.578904 ], [ 98.882134, 23.595358 ], [ 98.882134, 23.620035 ], [ 98.847026, 23.632097 ], [ 98.835939, 23.683625 ], [ 98.811917, 23.703354 ], [ 98.824236, 23.727462 ], [ 98.784816, 23.781691 ], [ 98.696121, 23.784429 ], [ 98.669019, 23.800857 ], [ 98.701664, 23.834254 ], [ 98.68565, 23.90157 ], [ 98.701048, 23.946427 ], [ 98.673331, 23.960647 ], [ 98.701048, 23.981427 ], [ 98.727533, 23.970491 ], [ 98.773729, 24.022431 ], [ 98.807606, 24.025164 ], [ 98.895069, 24.098936 ], [ 98.876591, 24.15137 ], [ 98.841482, 24.126794 ], [ 98.818692, 24.133348 ], [ 98.71891, 24.127887 ], [ 98.681954, 24.100029 ], [ 98.646229, 24.106038 ], [ 98.593875, 24.08036 ], [ 98.547063, 24.128433 ], [ 98.487933, 24.123517 ], [ 98.48239, 24.122425 ], [ 98.37768, 24.114232 ], [ 98.343187, 24.098936 ], [ 98.219999, 24.113685 ], [ 98.19721, 24.09839 ], [ 98.132536, 24.09238 ], [ 98.125761, 24.092927 ], [ 98.123297, 24.092927 ], [ 98.096196, 24.08637 ], [ 98.091268, 24.085824 ], [ 97.995182, 24.04648 ], [ 97.984095, 24.031177 ], [ 97.902175, 24.014231 ], [ 97.896015, 23.974319 ], [ 97.863371, 23.978693 ], [ 97.8104, 23.943146 ], [ 97.795617, 23.951897 ], [ 97.763588, 23.907041 ], [ 97.72848, 23.895551 ], [ 97.718009, 23.867643 ], [ 97.684132, 23.876946 ], [ 97.647176, 23.840823 ], [ 97.640401, 23.866001 ], [ 97.633009, 23.879682 ], [ 97.5283, 23.926736 ], [ 97.529531, 23.943146 ], [ 97.572647, 23.983068 ], [ 97.628698, 24.004938 ], [ 97.637321, 24.04812 ], [ 97.730944, 24.113685 ], [ 97.753733, 24.168843 ], [ 97.72848, 24.183585 ], [ 97.729712, 24.227252 ], [ 97.767284, 24.258357 ], [ 97.721089, 24.295999 ], [ 97.665038, 24.296544 ], [ 97.662574, 24.339083 ], [ 97.716161, 24.358711 ], [ 97.679821, 24.401228 ], [ 97.669966, 24.452993 ], [ 97.588662, 24.435559 ], [ 97.530147, 24.443187 ], [ 97.554785, 24.490577 ], [ 97.570799, 24.602719 ], [ 97.569567, 24.708236 ], [ 97.547394, 24.739221 ], [ 97.569567, 24.765852 ], [ 97.652103, 24.790846 ], [ 97.680437, 24.827243 ], [ 97.765436, 24.823984 ], [ 97.797465, 24.845709 ], [ 97.785762, 24.876117 ], [ 97.729712, 24.908689 ], [ 97.716777, 24.978147 ], [ 97.727864, 25.042686 ], [ 97.719857, 25.080634 ], [ 97.743262, 25.078466 ], [ 97.796233, 25.155954 ], [ 97.839349, 25.27074 ], [ 97.875689, 25.25721 ], [ 97.904023, 25.216609 ], [ 97.940363, 25.214985 ], [ 98.0075, 25.279399 ], [ 98.006884, 25.298338 ], [ 98.06971, 25.311864 ], [ 98.099891, 25.354055 ], [ 98.101123, 25.388662 ], [ 98.137464, 25.381633 ], [ 98.15779, 25.457307 ], [ 98.131304, 25.51025 ], [ 98.163949, 25.524292 ], [ 98.189818, 25.569108 ], [ 98.170724, 25.620383 ], [ 98.247717, 25.607971 ], [ 98.314854, 25.543193 ], [ 98.326557, 25.566409 ], [ 98.402317, 25.593939 ], [ 98.409709, 25.664084 ], [ 98.457752, 25.682963 ], [ 98.461448, 25.735267 ], [ 98.476846, 25.77731 ], [ 98.529201, 25.840884 ], [ 98.553839, 25.845731 ], [ 98.640686, 25.798864 ], [ 98.677642, 25.816105 ], [ 98.705976, 25.855426 ], [ 98.686881, 25.925955 ], [ 98.637606, 25.971696 ], [ 98.614201, 25.968468 ], [ 98.602498, 26.054523 ], [ 98.575396, 26.118485 ], [ 98.632679, 26.145887 ], [ 98.656084, 26.139977 ], [ 98.661012, 26.087852 ], [ 98.720142, 26.127082 ], [ 98.712751, 26.156093 ], [ 98.735541, 26.185097 ], [ 98.713367, 26.231274 ], [ 98.672715, 26.239863 ], [ 98.681338, 26.308016 ], [ 98.733693, 26.350926 ], [ 98.750323, 26.424372 ], [ 98.741084, 26.432947 ], [ 98.757098, 26.491881 ], [ 98.753403, 26.559349 ], [ 98.773113, 26.578083 ], [ 98.781736, 26.620893 ], [ 98.762642, 26.660478 ], [ 98.770033, 26.690424 ], [ 98.746012, 26.696841 ], [ 98.762026, 26.798916 ], [ 98.730613, 26.851253 ], [ 98.757098, 26.877947 ], [ 98.732461, 27.002257 ], [ 98.762642, 27.018252 ], [ 98.765722, 27.05077 ], [ 98.712751, 27.075817 ], [ 98.713983, 27.139744 ], [ 98.696121, 27.211086 ], [ 98.723222, 27.221198 ], [ 98.717062, 27.271211 ], [ 98.734925, 27.287168 ], [ 98.741084, 27.330241 ], [ 98.706591, 27.362136 ], [ 98.702896, 27.412618 ], [ 98.686881, 27.425367 ], [ 98.704128, 27.463607 ], [ 98.685034, 27.484315 ], [ 98.706591, 27.553313 ], [ 98.662244, 27.586734 ], [ 98.650541, 27.567637 ], [ 98.583404, 27.571351 ], [ 98.587099, 27.587265 ], [ 98.554454, 27.646126 ], [ 98.53536, 27.620676 ], [ 98.474998, 27.634462 ], [ 98.444201, 27.665209 ], [ 98.430035, 27.653547 ], [ 98.429419, 27.549068 ], [ 98.388767, 27.515104 ], [ 98.337644, 27.508734 ], [ 98.317318, 27.51935 ], [ 98.310542, 27.583552 ], [ 98.283441, 27.654608 ], [ 98.234166, 27.690648 ], [ 98.215688, 27.810874 ], [ 98.169492, 27.851096 ], [ 98.205217, 27.889716 ], [ 98.187355, 27.939426 ], [ 98.143007, 27.948942 ], [ 98.133152, 27.990698 ], [ 98.160253, 28.101089 ], [ 98.139311, 28.142259 ], [ 98.17442, 28.163365 ], [ 98.169492, 28.206093 ], [ 98.21692, 28.212949 ], [ 98.266811, 28.242477 ], [ 98.231702, 28.314681 ], [ 98.207681, 28.330486 ], [ 98.208913, 28.358401 ], [ 98.301303, 28.384204 ], [ 98.317934, 28.324691 ], [ 98.353042, 28.293078 ], [ 98.37768, 28.246167 ], [ 98.370289, 28.18394 ], [ 98.389999, 28.16442 ], [ 98.389383, 28.114814 ], [ 98.428803, 28.104785 ], [ 98.464527, 28.151229 ], [ 98.494092, 28.141203 ], [ 98.559382, 28.182885 ], [ 98.625903, 28.165475 ], [ 98.649925, 28.200291 ], [ 98.712135, 28.229296 ], [ 98.710287, 28.288862 ], [ 98.746628, 28.321003 ], [ 98.740468, 28.348395 ], [ 98.693041, 28.43158 ], [ 98.673947, 28.478934 ], [ 98.625903, 28.489455 ], [ 98.619128, 28.50944 ], [ 98.637606, 28.552029 ], [ 98.594491, 28.667615 ], [ 98.666555, 28.712239 ], [ 98.683802, 28.740054 ], [ 98.652389, 28.817162 ], [ 98.668403, 28.843376 ], [ 98.643766, 28.895261 ], [ 98.6567, 28.910454 ], [ 98.624056, 28.95864 ], [ 98.655469, 28.976966 ], [ 98.70228, 28.9644 ], [ 98.757714, 29.004186 ], [ 98.786048, 28.998952 ], [ 98.821772, 28.920931 ], [ 98.827932, 28.821356 ], [ 98.852569, 28.798283 ], [ 98.912931, 28.800906 ], [ 98.922786, 28.823978 ], [ 98.972677, 28.832367 ], [ 98.973909, 28.864867 ], [ 98.917859, 28.886877 ], [ 98.925866, 28.978536 ], [ 99.013329, 29.036632 ], [ 98.991771, 29.105677 ], [ 98.967134, 29.128159 ], [ 98.960974, 29.165792 ], [ 98.9813, 29.204978 ], [ 99.024416, 29.188783 ], [ 99.037351, 29.20759 ], [ 99.113727, 29.221171 ], [ 99.105104, 29.162656 ], [ 99.118039, 29.100971 ], [ 99.113727, 29.07273 ], [ 99.132206, 28.94869 ], [ 99.123582, 28.890021 ], [ 99.103872, 28.841803 ], [ 99.114343, 28.765763 ], [ 99.134053, 28.734806 ], [ 99.126662, 28.698066 ], [ 99.147604, 28.640831 ], [ 99.183944, 28.58882 ], [ 99.170394, 28.566221 ], [ 99.191952, 28.494714 ], [ 99.187024, 28.44 ], [ 99.16485, 28.425264 ], [ 99.200575, 28.365774 ], [ 99.229524, 28.350502 ], [ 99.237531, 28.317842 ], [ 99.28927, 28.286227 ], [ 99.306516, 28.227714 ], [ 99.374886, 28.18183 ], [ 99.412458, 28.295186 ], [ 99.392748, 28.318369 ], [ 99.437095, 28.398419 ], [ 99.404451, 28.44421 ], [ 99.426625, 28.454207 ], [ 99.396444, 28.491032 ], [ 99.403219, 28.546246 ], [ 99.463581, 28.549401 ], [ 99.466045, 28.579886 ], [ 99.504233, 28.619294 ], [ 99.540573, 28.623497 ], [ 99.53195, 28.677591 ], [ 99.553508, 28.710664 ], [ 99.614486, 28.740054 ], [ 99.609559, 28.784122 ], [ 99.625573, 28.81454 ], [ 99.676696, 28.810345 ], [ 99.717964, 28.846521 ], [ 99.722275, 28.757369 ], [ 99.755536, 28.701216 ], [ 99.79434, 28.699116 ], [ 99.834992, 28.660788 ], [ 99.834376, 28.628225 ], [ 99.873181, 28.631902 ], [ 99.875644, 28.611939 ], [ 99.91876, 28.599329 ], [ 99.985281, 28.529422 ], [ 99.990209, 28.47683 ], [ 100.073977, 28.426317 ], [ 100.057346, 28.368934 ], [ 100.136803, 28.349975 ], [ 100.176223, 28.325218 ], [ 100.147274, 28.288862 ], [ 100.188541, 28.252493 ], [ 100.153433, 28.208202 ], [ 100.102926, 28.201873 ], [ 100.091223, 28.181302 ], [ 100.062274, 28.193962 ], [ 100.033325, 28.184467 ], [ 100.021006, 28.147008 ], [ 100.05673, 28.097922 ], [ 100.088759, 28.029269 ], [ 100.120788, 28.018703 ], [ 100.196549, 27.936254 ], [ 100.170063, 27.907699 ], [ 100.210715, 27.87702 ], [ 100.30865, 27.861149 ], [ 100.30865, 27.830457 ], [ 100.28586, 27.80611 ], [ 100.304954, 27.788639 ], [ 100.311729, 27.724028 ], [ 100.327744, 27.72032 ], [ 100.350534, 27.755809 ], [ 100.412127, 27.816167 ], [ 100.442924, 27.86644 ], [ 100.504518, 27.852154 ], [ 100.511294, 27.827811 ], [ 100.54517, 27.809286 ], [ 100.609228, 27.859033 ], [ 100.634482, 27.915631 ], [ 100.681293, 27.923035 ], [ 100.719481, 27.858503 ], [ 100.707162, 27.800816 ], [ 100.757053, 27.770107 ], [ 100.775532, 27.743098 ], [ 100.782307, 27.691708 ], [ 100.848212, 27.672099 ], [ 100.827886, 27.615904 ], [ 100.854988, 27.623858 ], [ 100.91227, 27.521473 ], [ 100.901183, 27.453517 ], [ 100.936908, 27.469448 ], [ 100.95169, 27.426961 ], [ 101.021907, 27.332899 ], [ 101.026219, 27.270679 ], [ 101.042233, 27.22173 ], [ 101.071798, 27.194585 ], [ 101.119226, 27.208957 ], [ 101.167885, 27.198311 ], [ 101.167885, 27.198311 ], [ 101.170349, 27.175421 ], [ 101.145095, 27.103523 ], [ 101.157414, 27.094999 ], [ 101.136472, 27.023584 ], [ 101.228863, 26.981992 ], [ 101.227015, 26.959057 ], [ 101.264587, 26.955323 ], [ 101.267667, 26.903034 ], [ 101.311399, 26.903034 ], [ 101.365602, 26.883819 ], [ 101.399478, 26.841642 ], [ 101.358826, 26.771669 ], [ 101.387159, 26.753501 ], [ 101.389623, 26.723036 ], [ 101.435819, 26.740675 ], [ 101.458608, 26.731054 ], [ 101.445674, 26.77434 ], [ 101.466, 26.786629 ], [ 101.513427, 26.768463 ], [ 101.453065, 26.692563 ], [ 101.481398, 26.673313 ], [ 101.461072, 26.640687 ], [ 101.461688, 26.606447 ], [ 101.402558, 26.604841 ], [ 101.395783, 26.591998 ], [ 101.422884, 26.53151 ], [ 101.458608, 26.49563 ], [ 101.506652, 26.499915 ], [ 101.530057, 26.467239 ], [ 101.565782, 26.454381 ], [ 101.637847, 26.388995 ], [ 101.635383, 26.357361 ], [ 101.660636, 26.346635 ], [ 101.64031, 26.318745 ], [ 101.597195, 26.303187 ], [ 101.586108, 26.279579 ], [ 101.630455, 26.224832 ], [ 101.690202, 26.241473 ], [ 101.737013, 26.219463 ], [ 101.773353, 26.168448 ], [ 101.807846, 26.156093 ], [ 101.796759, 26.114723 ], [ 101.839875, 26.082477 ], [ 101.835563, 26.04592 ], [ 101.857737, 26.049146 ], [ 101.899621, 26.099139 ], [ 101.929186, 26.105588 ], [ 101.954439, 26.084627 ], [ 102.020961, 26.096451 ], [ 102.080091, 26.065275 ], [ 102.107808, 26.068501 ], [ 102.152156, 26.10935 ], [ 102.174946, 26.146961 ], [ 102.242699, 26.190468 ], [ 102.245163, 26.212483 ], [ 102.349257, 26.244694 ], [ 102.392372, 26.296749 ], [ 102.440416, 26.300505 ], [ 102.542046, 26.338591 ], [ 102.570995, 26.362723 ], [ 102.629509, 26.336982 ], [ 102.638748, 26.307479 ], [ 102.60056, 26.250598 ], [ 102.659074, 26.221611 ], [ 102.709581, 26.210336 ], [ 102.739762, 26.268846 ], [ 102.785342, 26.298895 ], [ 102.833385, 26.306406 ], [ 102.878964, 26.364332 ], [ 102.893131, 26.338591 ], [ 102.975667, 26.340736 ], [ 102.998457, 26.371839 ], [ 102.988602, 26.413117 ], [ 102.989833, 26.482775 ], [ 103.030485, 26.485989 ], [ 103.052659, 26.514374 ], [ 103.052659, 26.555602 ], [ 103.035413, 26.556673 ], [ 103.026174, 26.664221 ], [ 103.005232, 26.679195 ], [ 103.008312, 26.710741 ], [ 102.983674, 26.76686 ], [ 102.991681, 26.775409 ], [ 102.966428, 26.837904 ], [ 102.949181, 26.843244 ], [ 102.896211, 26.91264 ], [ 102.894979, 27.001724 ], [ 102.870957, 27.026782 ], [ 102.913457, 27.133886 ], [ 102.904218, 27.227584 ], [ 102.883276, 27.258444 ], [ 102.883892, 27.299401 ], [ 102.899906, 27.317481 ], [ 102.941174, 27.405711 ], [ 102.989833, 27.367983 ], [ 103.055739, 27.40943 ], [ 103.080992, 27.396679 ], [ 103.141355, 27.420586 ], [ 103.144434, 27.450331 ], [ 103.19063, 27.523596 ], [ 103.232514, 27.56976 ], [ 103.2861, 27.561802 ], [ 103.29226, 27.632872 ], [ 103.349542, 27.678459 ], [ 103.369868, 27.708664 ], [ 103.393274, 27.709194 ], [ 103.461027, 27.779638 ], [ 103.487512, 27.794992 ], [ 103.509686, 27.843687 ], [ 103.502295, 27.910343 ], [ 103.55465, 27.978543 ], [ 103.515846, 27.965329 ], [ 103.486281, 28.033495 ], [ 103.459179, 28.021345 ], [ 103.430846, 28.044587 ], [ 103.470266, 28.122204 ], [ 103.533092, 28.168641 ], [ 103.573128, 28.230877 ], [ 103.643961, 28.260401 ], [ 103.692004, 28.232459 ], [ 103.701859, 28.198709 ], [ 103.740048, 28.23615 ], [ 103.770845, 28.233514 ], [ 103.828743, 28.285173 ], [ 103.877402, 28.316262 ], [ 103.85338, 28.356822 ], [ 103.860156, 28.383677 ], [ 103.828743, 28.44 ], [ 103.829975, 28.459995 ], [ 103.781931, 28.525216 ], [ 103.802873, 28.563068 ], [ 103.838598, 28.587244 ], [ 103.833054, 28.605109 ], [ 103.850917, 28.66709 ], [ 103.887873, 28.61982 ], [ 103.910047, 28.631377 ], [ 103.953779, 28.600906 ], [ 104.05972, 28.6277 ], [ 104.09606, 28.603533 ], [ 104.117618, 28.634003 ], [ 104.170589, 28.642932 ], [ 104.230951, 28.635579 ], [ 104.252509, 28.660788 ], [ 104.277147, 28.631902 ], [ 104.314719, 28.615617 ], [ 104.372617, 28.649235 ], [ 104.425588, 28.626649 ], [ 104.417581, 28.598279 ], [ 104.375697, 28.5946 ], [ 104.355987, 28.555183 ], [ 104.323342, 28.540989 ], [ 104.260516, 28.536257 ], [ 104.267908, 28.499448 ], [ 104.254357, 28.403683 ], [ 104.282074, 28.343128 ], [ 104.314103, 28.306778 ], [ 104.343052, 28.334173 ], [ 104.384936, 28.329959 ], [ 104.392943, 28.291497 ], [ 104.420045, 28.269889 ], [ 104.44961, 28.269889 ], [ 104.462544, 28.241422 ], [ 104.442834, 28.211366 ], [ 104.402182, 28.202928 ], [ 104.406494, 28.173389 ], [ 104.444682, 28.16231 ], [ 104.448994, 28.113758 ], [ 104.40095, 28.091586 ], [ 104.373233, 28.051454 ], [ 104.304248, 28.050926 ], [ 104.30856, 28.036136 ], [ 104.362762, 28.012891 ], [ 104.40095, 27.952114 ], [ 104.44961, 27.927794 ], [ 104.508124, 27.878078 ], [ 104.52537, 27.889187 ], [ 104.573413, 27.840512 ], [ 104.607906, 27.857974 ], [ 104.63316, 27.850567 ], [ 104.676275, 27.880723 ], [ 104.743413, 27.901881 ], [ 104.761891, 27.884426 ], [ 104.796999, 27.901352 ], [ 104.842579, 27.900294 ], [ 104.888158, 27.914574 ], [ 104.918339, 27.938897 ], [ 104.903557, 27.962158 ], [ 104.975006, 28.020816 ], [ 104.980549, 28.063073 ], [ 105.002107, 28.064129 ], [ 105.061853, 28.096866 ], [ 105.119752, 28.07205 ], [ 105.168411, 28.071522 ], [ 105.186889, 28.054623 ], [ 105.167795, 28.021345 ], [ 105.186273, 27.995454 ], [ 105.218302, 27.990698 ], [ 105.247867, 28.009193 ], [ 105.270657, 27.99704 ], [ 105.284823, 27.935725 ], [ 105.233084, 27.895534 ], [ 105.25957, 27.827811 ], [ 105.313157, 27.810874 ], [ 105.273736, 27.794992 ], [ 105.293447, 27.770637 ], [ 105.290367, 27.712373 ], [ 105.308229, 27.704955 ] ] ] ] } }, +{ "type": "Feature", "properties": { "adcode": "540000", "name": "西藏自治区", "center": [ 91.132212, 29.660361 ], "centroid": [ 88.388277, 31.56375 ], "childrenNum": 7, "level": "province", "parent": { "adcode": 100000 }, "subFeatureIndex": 25, "acroutes": [ 100000 ] }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 89.711414, 36.093272 ], [ 89.688624, 36.091337 ], [ 89.605472, 36.038123 ], [ 89.474893, 36.022151 ], [ 89.417611, 36.044897 ], [ 89.404676, 36.016827 ], [ 89.434857, 35.992136 ], [ 89.428082, 35.917531 ], [ 89.489676, 35.903475 ], [ 89.554965, 35.873414 ], [ 89.550654, 35.856924 ], [ 89.62395, 35.859349 ], [ 89.654747, 35.848193 ], [ 89.707718, 35.849163 ], [ 89.778551, 35.861775 ], [ 89.801957, 35.848193 ], [ 89.767464, 35.799183 ], [ 89.782863, 35.773453 ], [ 89.747138, 35.7516 ], [ 89.748986, 35.66267 ], [ 89.726196, 35.648082 ], [ 89.765616, 35.599922 ], [ 89.75145, 35.580942 ], [ 89.71203, 35.581915 ], [ 89.699711, 35.544916 ], [ 89.720037, 35.501566 ], [ 89.740979, 35.507412 ], [ 89.765, 35.482563 ], [ 89.739131, 35.468429 ], [ 89.685544, 35.416259 ], [ 89.658443, 35.425526 ], [ 89.619639, 35.412357 ], [ 89.58761, 35.383575 ], [ 89.497067, 35.361128 ], [ 89.516161, 35.330862 ], [ 89.494603, 35.298632 ], [ 89.531559, 35.276161 ], [ 89.48598, 35.256616 ], [ 89.450255, 35.223867 ], [ 89.46935, 35.214577 ], [ 89.519241, 35.133862 ], [ 89.579603, 35.118688 ], [ 89.593153, 35.104491 ], [ 89.59069, 35.057965 ], [ 89.560509, 34.938836 ], [ 89.578987, 34.895162 ], [ 89.670146, 34.887798 ], [ 89.707102, 34.919701 ], [ 89.747138, 34.903506 ], [ 89.78779, 34.921664 ], [ 89.821051, 34.902033 ], [ 89.814891, 34.86816 ], [ 89.838913, 34.865705 ], [ 89.867862, 34.81069 ], [ 89.825978, 34.796931 ], [ 89.799493, 34.743838 ], [ 89.732356, 34.732035 ], [ 89.72558, 34.660689 ], [ 89.74837, 34.641981 ], [ 89.798877, 34.628686 ], [ 89.777935, 34.574499 ], [ 89.814891, 34.548871 ], [ 89.823515, 34.455657 ], [ 89.819819, 34.420614 ], [ 89.799493, 34.39642 ], [ 89.820435, 34.369255 ], [ 89.858623, 34.359375 ], [ 89.86663, 34.324785 ], [ 89.825362, 34.293642 ], [ 89.838297, 34.263477 ], [ 89.816739, 34.16945 ], [ 89.789638, 34.150632 ], [ 89.760073, 34.152613 ], [ 89.756993, 34.124874 ], [ 89.71203, 34.131809 ], [ 89.655979, 34.097126 ], [ 89.656595, 34.057966 ], [ 89.635037, 34.049537 ], [ 89.684928, 33.990013 ], [ 89.688008, 33.959739 ], [ 89.718805, 33.946832 ], [ 89.73174, 33.921509 ], [ 89.795181, 33.865374 ], [ 89.837065, 33.868853 ], [ 89.899891, 33.80771 ], [ 89.942391, 33.801246 ], [ 89.902355, 33.758467 ], [ 89.907282, 33.741051 ], [ 89.983659, 33.725622 ], [ 89.981195, 33.70322 ], [ 90.008296, 33.687785 ], [ 89.984275, 33.612061 ], [ 90.01076, 33.553728 ], [ 90.083441, 33.525295 ], [ 90.088984, 33.478885 ], [ 90.107463, 33.460913 ], [ 90.22018, 33.437943 ], [ 90.246665, 33.423959 ], [ 90.332896, 33.310501 ], [ 90.363077, 33.279487 ], [ 90.405577, 33.260473 ], [ 90.490577, 33.264977 ], [ 90.562642, 33.229441 ], [ 90.627315, 33.180368 ], [ 90.704308, 33.135778 ], [ 90.740032, 33.142293 ], [ 90.803474, 33.114227 ], [ 90.88293, 33.120241 ], [ 90.902024, 33.083143 ], [ 90.927894, 33.120241 ], [ 91.001807, 33.11573 ], [ 91.037531, 33.098686 ], [ 91.072024, 33.113224 ], [ 91.147784, 33.07211 ], [ 91.161335, 33.108712 ], [ 91.18782, 33.106206 ], [ 91.226624, 33.141792 ], [ 91.261733, 33.141291 ], [ 91.311624, 33.108211 ], [ 91.370138, 33.100691 ], [ 91.436044, 33.066092 ], [ 91.49579, 33.109214 ], [ 91.535826, 33.10019 ], [ 91.55492, 33.060074 ], [ 91.583253, 33.0375 ], [ 91.664557, 33.012913 ], [ 91.685499, 32.989324 ], [ 91.752637, 32.969242 ], [ 91.799448, 32.942126 ], [ 91.839484, 32.948152 ], [ 91.857962, 32.90244 ], [ 91.896766, 32.907967 ], [ 91.955897, 32.8205 ], [ 92.018722, 32.829552 ], [ 92.038432, 32.860725 ], [ 92.101874, 32.860222 ], [ 92.145606, 32.885857 ], [ 92.205352, 32.866255 ], [ 92.227526, 32.821003 ], [ 92.193649, 32.801889 ], [ 92.211511, 32.788306 ], [ 92.198577, 32.754591 ], [ 92.255243, 32.720863 ], [ 92.310062, 32.751571 ], [ 92.343938, 32.738484 ], [ 92.355641, 32.764657 ], [ 92.411076, 32.748048 ], [ 92.459119, 32.76365 ], [ 92.484372, 32.745028 ], [ 92.56814, 32.73194 ], [ 92.574916, 32.741001 ], [ 92.634662, 32.720863 ], [ 92.667922, 32.73194 ], [ 92.686401, 32.76516 ], [ 92.756618, 32.743014 ], [ 92.789262, 32.719856 ], [ 92.822523, 32.729926 ], [ 92.866871, 32.698203 ], [ 92.933392, 32.719353 ], [ 92.964189, 32.714821 ], [ 93.00053, 32.741001 ], [ 93.019624, 32.737477 ], [ 93.023935, 32.703239 ], [ 93.069515, 32.626156 ], [ 93.087993, 32.63674 ], [ 93.159442, 32.644803 ], [ 93.176688, 32.6705 ], [ 93.210565, 32.655385 ], [ 93.239514, 32.662439 ], [ 93.260456, 32.62666 ], [ 93.300492, 32.619604 ], [ 93.308499, 32.580278 ], [ 93.33868, 32.5712 ], [ 93.385492, 32.525294 ], [ 93.411977, 32.558086 ], [ 93.4631, 32.556069 ], [ 93.476651, 32.504603 ], [ 93.501904, 32.503593 ], [ 93.516687, 32.47583 ], [ 93.618933, 32.522771 ], [ 93.651577, 32.571705 ], [ 93.721795, 32.578261 ], [ 93.75136, 32.56313 ], [ 93.820345, 32.549511 ], [ 93.851142, 32.50965 ], [ 93.861613, 32.466237 ], [ 93.90904, 32.463207 ], [ 93.960163, 32.484917 ], [ 93.978641, 32.459672 ], [ 94.03038, 32.448057 ], [ 94.049474, 32.469771 ], [ 94.091974, 32.463207 ], [ 94.137554, 32.433915 ], [ 94.176974, 32.454117 ], [ 94.196684, 32.51621 ], [ 94.250886, 32.51722 ], [ 94.292154, 32.502584 ], [ 94.294002, 32.519743 ], [ 94.350053, 32.533871 ], [ 94.371611, 32.524789 ], [ 94.395016, 32.594397 ], [ 94.435052, 32.562626 ], [ 94.463386, 32.572209 ], [ 94.459074, 32.599439 ], [ 94.522516, 32.595909 ], [ 94.591501, 32.640772 ], [ 94.614291, 32.673522 ], [ 94.638312, 32.645307 ], [ 94.737479, 32.587338 ], [ 94.762116, 32.526303 ], [ 94.78737, 32.522266 ], [ 94.80708, 32.486431 ], [ 94.852043, 32.463712 ], [ 94.889616, 32.472295 ], [ 94.912405, 32.41573 ], [ 94.944434, 32.404109 ], [ 94.988166, 32.422802 ], [ 95.057151, 32.395014 ], [ 95.075013, 32.376315 ], [ 95.075013, 32.376315 ], [ 95.081789, 32.384907 ], [ 95.153853, 32.386423 ], [ 95.218527, 32.397035 ], [ 95.228382, 32.363678 ], [ 95.261643, 32.348006 ], [ 95.193274, 32.332331 ], [ 95.096571, 32.322217 ], [ 95.079325, 32.279726 ], [ 95.10581, 32.258979 ], [ 95.20744, 32.297433 ], [ 95.214216, 32.321712 ], [ 95.241317, 32.3207 ], [ 95.239469, 32.287315 ], [ 95.270266, 32.194683 ], [ 95.270266, 32.194683 ], [ 95.31523, 32.148585 ], [ 95.366968, 32.151118 ], [ 95.367584, 32.178982 ], [ 95.406389, 32.182021 ], [ 95.440265, 32.157705 ], [ 95.454432, 32.061898 ], [ 95.421171, 32.033999 ], [ 95.454432, 32.007613 ], [ 95.395918, 32.001523 ], [ 95.360809, 31.95939 ], [ 95.3682, 31.92892 ], [ 95.408852, 31.918761 ], [ 95.406389, 31.896915 ], [ 95.456896, 31.801853 ], [ 95.480301, 31.795749 ], [ 95.511714, 31.750468 ], [ 95.546823, 31.73978 ], [ 95.580083, 31.76726 ], [ 95.634286, 31.782523 ], [ 95.779648, 31.748941 ], [ 95.823995, 31.68225 ], [ 95.853561, 31.714329 ], [ 95.846169, 31.736218 ], [ 95.89914, 31.81711 ], [ 95.983524, 31.816601 ], [ 95.989067, 31.78761 ], [ 96.064828, 31.720438 ], [ 96.135661, 31.70211 ], [ 96.148595, 31.686324 ], [ 96.156603, 31.602769 ], [ 96.207726, 31.598691 ], [ 96.221892, 31.647613 ], [ 96.245298, 31.657802 ], [ 96.252073, 31.697527 ], [ 96.222508, 31.733164 ], [ 96.231131, 31.749959 ], [ 96.178161, 31.775401 ], [ 96.183088, 31.835924 ], [ 96.202798, 31.841008 ], [ 96.214501, 31.876589 ], [ 96.188632, 31.904028 ], [ 96.220044, 31.905553 ], [ 96.253305, 31.929936 ], [ 96.288414, 31.919777 ], [ 96.389428, 31.919777 ], [ 96.407906, 31.845583 ], [ 96.435623, 31.796258 ], [ 96.468884, 31.769804 ], [ 96.519391, 31.74945 ], [ 96.56805, 31.711783 ], [ 96.615477, 31.737236 ], [ 96.661057, 31.705674 ], [ 96.691854, 31.722474 ], [ 96.722651, 31.686833 ], [ 96.778701, 31.675629 ], [ 96.790404, 31.698545 ], [ 96.840295, 31.720438 ], [ 96.799027, 31.792188 ], [ 96.765767, 31.819144 ], [ 96.760223, 31.860325 ], [ 96.794716, 31.869474 ], [ 96.81073, 31.894375 ], [ 96.776238, 31.935015 ], [ 96.753448, 31.944156 ], [ 96.742977, 32.001016 ], [ 96.722651, 32.013195 ], [ 96.824281, 32.007613 ], [ 96.868629, 31.964975 ], [ 96.863085, 31.996448 ], [ 96.894498, 32.013703 ], [ 96.941925, 31.986297 ], [ 96.965947, 32.008628 ], [ 96.935766, 32.048203 ], [ 97.006599, 32.067984 ], [ 97.028773, 32.04871 ], [ 97.127323, 32.044145 ], [ 97.169823, 32.032984 ], [ 97.188301, 32.055304 ], [ 97.214786, 32.042623 ], [ 97.233881, 32.063927 ], [ 97.201852, 32.090296 ], [ 97.219714, 32.109054 ], [ 97.258518, 32.072041 ], [ 97.308409, 32.076605 ], [ 97.293011, 32.096887 ], [ 97.313953, 32.130342 ], [ 97.271453, 32.139971 ], [ 97.264062, 32.182527 ], [ 97.299786, 32.294904 ], [ 97.32196, 32.303503 ], [ 97.371235, 32.273148 ], [ 97.415583, 32.296421 ], [ 97.424822, 32.322723 ], [ 97.387865, 32.427349 ], [ 97.341054, 32.440987 ], [ 97.388481, 32.501575 ], [ 97.334895, 32.514192 ], [ 97.332431, 32.542448 ], [ 97.3583, 32.563635 ], [ 97.374315, 32.546484 ], [ 97.411887, 32.575235 ], [ 97.448843, 32.586833 ], [ 97.463626, 32.55506 ], [ 97.50243, 32.530844 ], [ 97.540618, 32.536899 ], [ 97.670582, 32.51722 ], [ 97.684132, 32.530339 ], [ 97.730944, 32.527312 ], [ 97.795617, 32.521257 ], [ 97.80732, 32.50006 ], [ 97.863986, 32.499051 ], [ 97.880001, 32.486431 ], [ 97.940363, 32.482393 ], [ 98.079565, 32.415224 ], [ 98.107283, 32.391476 ], [ 98.125145, 32.401077 ], [ 98.218768, 32.342444 ], [ 98.208913, 32.318171 ], [ 98.23047, 32.262521 ], [ 98.218768, 32.234683 ], [ 98.260035, 32.208862 ], [ 98.303151, 32.121726 ], [ 98.357354, 32.087253 ], [ 98.404781, 32.045159 ], [ 98.402933, 32.026896 ], [ 98.434962, 32.007613 ], [ 98.432498, 31.922825 ], [ 98.399238, 31.895899 ], [ 98.426339, 31.856767 ], [ 98.414636, 31.832365 ], [ 98.461448, 31.800327 ], [ 98.508875, 31.751995 ], [ 98.516882, 31.717383 ], [ 98.545831, 31.717383 ], [ 98.553839, 31.660349 ], [ 98.619128, 31.591555 ], [ 98.651157, 31.57881 ], [ 98.696736, 31.538523 ], [ 98.714599, 31.508935 ], [ 98.844562, 31.429817 ], [ 98.84333, 31.416028 ], [ 98.887062, 31.37465 ], [ 98.810685, 31.306668 ], [ 98.805758, 31.279052 ], [ 98.773113, 31.249382 ], [ 98.691809, 31.333253 ], [ 98.643766, 31.338876 ], [ 98.616048, 31.3036 ], [ 98.60373, 31.257568 ], [ 98.62344, 31.221238 ], [ 98.602498, 31.192062 ], [ 98.675179, 31.15417 ], [ 98.710287, 31.1178 ], [ 98.712135, 31.082954 ], [ 98.736772, 31.049121 ], [ 98.774961, 31.031174 ], [ 98.806374, 30.995783 ], [ 98.797135, 30.948575 ], [ 98.774345, 30.908019 ], [ 98.797135, 30.87926 ], [ 98.850105, 30.849465 ], [ 98.904924, 30.782649 ], [ 98.957895, 30.765166 ], [ 98.963438, 30.728134 ], [ 98.907388, 30.698292 ], [ 98.92217, 30.609225 ], [ 98.939417, 30.598923 ], [ 98.926482, 30.569556 ], [ 98.932025, 30.521623 ], [ 98.965286, 30.449937 ], [ 98.967134, 30.33482 ], [ 98.986844, 30.280569 ], [ 98.970829, 30.260928 ], [ 98.993003, 30.215429 ], [ 98.9813, 30.182843 ], [ 98.989308, 30.151799 ], [ 99.044742, 30.079842 ], [ 99.036735, 30.053945 ], [ 99.055213, 29.958587 ], [ 99.068148, 29.931621 ], [ 99.0238, 29.846009 ], [ 99.018873, 29.792009 ], [ 98.992387, 29.677163 ], [ 99.014561, 29.607464 ], [ 99.052133, 29.563748 ], [ 99.044742, 29.520013 ], [ 99.066916, 29.421018 ], [ 99.058909, 29.417368 ], [ 99.075539, 29.316186 ], [ 99.114343, 29.243628 ], [ 99.113727, 29.221171 ], [ 99.037351, 29.20759 ], [ 99.024416, 29.188783 ], [ 98.9813, 29.204978 ], [ 98.960974, 29.165792 ], [ 98.967134, 29.128159 ], [ 98.991771, 29.105677 ], [ 99.013329, 29.036632 ], [ 98.925866, 28.978536 ], [ 98.917859, 28.886877 ], [ 98.973909, 28.864867 ], [ 98.972677, 28.832367 ], [ 98.922786, 28.823978 ], [ 98.912931, 28.800906 ], [ 98.852569, 28.798283 ], [ 98.827932, 28.821356 ], [ 98.821772, 28.920931 ], [ 98.786048, 28.998952 ], [ 98.757714, 29.004186 ], [ 98.70228, 28.9644 ], [ 98.655469, 28.976966 ], [ 98.624056, 28.95864 ], [ 98.6567, 28.910454 ], [ 98.643766, 28.895261 ], [ 98.668403, 28.843376 ], [ 98.652389, 28.817162 ], [ 98.683802, 28.740054 ], [ 98.666555, 28.712239 ], [ 98.594491, 28.667615 ], [ 98.637606, 28.552029 ], [ 98.619128, 28.50944 ], [ 98.625903, 28.489455 ], [ 98.673947, 28.478934 ], [ 98.693041, 28.43158 ], [ 98.740468, 28.348395 ], [ 98.746628, 28.321003 ], [ 98.710287, 28.288862 ], [ 98.712135, 28.229296 ], [ 98.649925, 28.200291 ], [ 98.625903, 28.165475 ], [ 98.559382, 28.182885 ], [ 98.494092, 28.141203 ], [ 98.464527, 28.151229 ], [ 98.428803, 28.104785 ], [ 98.389383, 28.114814 ], [ 98.389999, 28.16442 ], [ 98.370289, 28.18394 ], [ 98.37768, 28.246167 ], [ 98.353042, 28.293078 ], [ 98.317934, 28.324691 ], [ 98.301303, 28.384204 ], [ 98.208913, 28.358401 ], [ 98.207681, 28.330486 ], [ 98.231702, 28.314681 ], [ 98.266811, 28.242477 ], [ 98.21692, 28.212949 ], [ 98.169492, 28.206093 ], [ 98.17442, 28.163365 ], [ 98.139311, 28.142259 ], [ 98.097427, 28.166531 ], [ 98.090036, 28.195544 ], [ 98.056775, 28.202401 ], [ 98.03337, 28.187105 ], [ 98.008116, 28.214003 ], [ 98.020435, 28.253548 ], [ 97.907718, 28.363141 ], [ 97.871378, 28.361561 ], [ 97.842429, 28.326798 ], [ 97.801161, 28.326798 ], [ 97.769748, 28.3742 ], [ 97.738335, 28.396313 ], [ 97.737103, 28.465782 ], [ 97.68598, 28.519958 ], [ 97.634857, 28.532051 ], [ 97.60406, 28.515225 ], [ 97.569567, 28.541515 ], [ 97.521524, 28.495766 ], [ 97.507974, 28.46473 ], [ 97.521524, 28.444736 ], [ 97.499966, 28.428948 ], [ 97.485184, 28.38631 ], [ 97.488879, 28.347341 ], [ 97.518445, 28.327852 ], [ 97.469169, 28.30309 ], [ 97.461162, 28.26778 ], [ 97.422358, 28.297293 ], [ 97.402032, 28.279903 ], [ 97.398336, 28.238786 ], [ 97.349677, 28.235623 ], [ 97.362612, 28.199236 ], [ 97.352757, 28.149646 ], [ 97.326887, 28.132759 ], [ 97.340438, 28.104785 ], [ 97.305945, 28.071522 ], [ 97.320728, 28.054095 ], [ 97.375547, 28.062545 ], [ 97.378626, 28.031382 ], [ 97.413119, 28.01342 ], [ 97.379242, 27.970087 ], [ 97.372467, 27.907699 ], [ 97.386634, 27.882839 ], [ 97.324424, 27.880723 ], [ 97.303482, 27.913516 ], [ 97.253591, 27.891832 ], [ 97.167975, 27.811932 ], [ 97.103301, 27.780697 ], [ 97.097758, 27.740979 ], [ 97.062649, 27.742568 ], [ 97.049099, 27.81405 ], [ 97.008447, 27.807698 ], [ 96.972722, 27.861149 ], [ 96.908049, 27.884426 ], [ 96.849534, 27.874375 ], [ 96.810114, 27.890245 ], [ 96.784245, 27.931495 ], [ 96.711564, 27.9574 ], [ 96.690622, 27.948942 ], [ 96.635188, 27.994926 ], [ 96.623485, 28.024514 ], [ 96.538485, 28.075218 ], [ 96.499681, 28.067297 ], [ 96.46334, 28.143314 ], [ 96.426384, 28.161782 ], [ 96.395587, 28.143842 ], [ 96.398667, 28.118509 ], [ 96.367254, 28.118509 ], [ 96.298269, 28.140148 ], [ 96.275479, 28.228241 ], [ 96.194175, 28.212949 ], [ 96.098088, 28.212421 ], [ 96.074683, 28.193434 ], [ 95.989067, 28.198181 ], [ 95.936096, 28.240368 ], [ 95.907763, 28.241422 ], [ 95.899756, 28.278322 ], [ 95.874502, 28.29782 ], [ 95.832003, 28.295186 ], [ 95.787655, 28.270416 ], [ 95.740228, 28.275159 ], [ 95.674322, 28.254075 ], [ 95.528345, 28.182885 ], [ 95.437802, 28.161782 ], [ 95.39715, 28.142259 ], [ 95.371896, 28.110063 ], [ 95.352802, 28.04089 ], [ 95.32878, 28.017646 ], [ 95.28628, 27.939955 ], [ 95.067006, 27.840512 ], [ 95.015267, 27.82887 ], [ 94.947514, 27.792345 ], [ 94.88592, 27.743098 ], [ 94.836645, 27.728796 ], [ 94.78121, 27.699127 ], [ 94.722696, 27.683759 ], [ 94.660486, 27.650367 ], [ 94.524979, 27.596282 ], [ 94.478168, 27.602116 ], [ 94.443675, 27.585143 ], [ 94.399944, 27.589386 ], [ 94.353132, 27.578778 ], [ 94.277372, 27.58143 ], [ 94.220705, 27.536333 ], [ 94.147409, 27.458297 ], [ 94.056866, 27.375423 ], [ 93.970634, 27.30525 ], [ 93.849294, 27.168499 ], [ 93.841903, 27.045973 ], [ 93.817265, 27.025183 ], [ 93.747048, 27.015587 ], [ 93.625092, 26.955323 ], [ 93.56781, 26.938252 ], [ 93.232739, 26.906769 ], [ 93.111399, 26.880082 ], [ 93.050421, 26.883819 ], [ 92.909371, 26.914241 ], [ 92.802813, 26.895028 ], [ 92.682089, 26.947855 ], [ 92.64698, 26.952656 ], [ 92.549046, 26.941453 ], [ 92.496691, 26.921711 ], [ 92.404916, 26.9025 ], [ 92.28604, 26.892359 ], [ 92.197961, 26.86994 ], [ 92.109265, 26.854991 ], [ 92.124664, 26.960124 ], [ 92.076005, 27.041175 ], [ 92.043976, 27.052902 ], [ 92.02673, 27.108318 ], [ 92.032273, 27.167967 ], [ 92.061222, 27.190327 ], [ 92.071077, 27.237694 ], [ 92.091403, 27.264296 ], [ 92.125896, 27.273339 ], [ 92.064918, 27.391365 ], [ 92.021802, 27.444489 ], [ 92.010715, 27.474758 ], [ 91.946657, 27.464138 ], [ 91.839484, 27.489624 ], [ 91.753868, 27.462545 ], [ 91.71876, 27.467324 ], [ 91.663325, 27.507142 ], [ 91.626985, 27.509265 ], [ 91.585101, 27.540578 ], [ 91.564775, 27.58196 ], [ 91.582637, 27.598933 ], [ 91.562311, 27.627569 ], [ 91.570934, 27.650897 ], [ 91.622673, 27.692238 ], [ 91.642383, 27.7664 ], [ 91.610355, 27.819343 ], [ 91.544449, 27.820401 ], [ 91.561079, 27.855329 ], [ 91.618978, 27.856916 ], [ 91.611586, 27.891303 ], [ 91.552456, 27.90717 ], [ 91.486551, 27.937311 ], [ 91.490246, 27.971672 ], [ 91.464993, 28.002852 ], [ 91.309776, 28.057791 ], [ 91.251878, 27.970615 ], [ 91.216153, 27.989113 ], [ 91.162567, 27.968501 ], [ 91.147784, 27.927794 ], [ 91.155175, 27.894476 ], [ 91.113292, 27.846333 ], [ 91.025828, 27.857445 ], [ 90.96485, 27.900294 ], [ 90.976553, 27.935725 ], [ 90.96177, 27.9537 ], [ 90.896481, 27.946299 ], [ 90.853365, 27.969029 ], [ 90.806554, 28.015005 ], [ 90.802242, 28.040362 ], [ 90.741264, 28.053038 ], [ 90.701844, 28.076274 ], [ 90.591591, 28.021345 ], [ 90.569417, 28.044059 ], [ 90.513983, 28.062016 ], [ 90.47949, 28.044587 ], [ 90.43699, 28.063073 ], [ 90.384019, 28.06096 ], [ 90.367389, 28.088946 ], [ 90.297172, 28.153868 ], [ 90.231882, 28.144897 ], [ 90.189999, 28.161782 ], [ 90.166593, 28.187632 ], [ 90.124709, 28.190797 ], [ 90.103151, 28.141731 ], [ 90.07297, 28.155451 ], [ 90.03355, 28.136981 ], [ 90.017536, 28.162837 ], [ 89.976268, 28.189215 ], [ 89.901739, 28.18183 ], [ 89.869094, 28.221386 ], [ 89.789638, 28.240895 ], [ 89.779167, 28.197127 ], [ 89.720037, 28.170224 ], [ 89.605472, 28.161782 ], [ 89.541414, 28.088418 ], [ 89.511233, 28.086307 ], [ 89.461958, 28.03191 ], [ 89.44348, 27.968501 ], [ 89.375727, 27.875962 ], [ 89.295655, 27.84845 ], [ 89.238988, 27.796581 ], [ 89.184786, 27.673689 ], [ 89.131815, 27.633402 ], [ 89.128735, 27.611131 ], [ 89.163228, 27.574534 ], [ 89.109025, 27.537925 ], [ 89.095474, 27.471572 ], [ 89.132431, 27.441302 ], [ 89.182938, 27.373829 ], [ 89.152757, 27.319076 ], [ 89.077612, 27.287168 ], [ 89.067757, 27.240354 ], [ 88.984605, 27.208957 ], [ 88.942105, 27.261636 ], [ 88.911924, 27.272807 ], [ 88.920548, 27.325456 ], [ 88.901453, 27.327583 ], [ 88.867577, 27.3818 ], [ 88.838012, 27.37808 ], [ 88.809063, 27.405711 ], [ 88.783193, 27.467324 ], [ 88.797976, 27.521473 ], [ 88.770874, 27.563924 ], [ 88.813374, 27.606889 ], [ 88.816454, 27.641354 ], [ 88.852178, 27.671039 ], [ 88.850331, 27.710783 ], [ 88.870657, 27.743098 ], [ 88.863265, 27.811932 ], [ 88.888519, 27.846863 ], [ 88.864497, 27.921448 ], [ 88.846635, 27.921448 ], [ 88.842939, 28.006023 ], [ 88.812142, 28.018175 ], [ 88.764099, 28.068353 ], [ 88.67602, 28.068353 ], [ 88.645223, 28.111119 ], [ 88.620585, 28.091586 ], [ 88.565151, 28.083139 ], [ 88.554064, 28.027684 ], [ 88.498013, 28.04089 ], [ 88.469064, 28.009721 ], [ 88.43334, 28.002852 ], [ 88.401311, 27.976958 ], [ 88.357579, 27.986471 ], [ 88.254101, 27.939426 ], [ 88.242398, 27.967444 ], [ 88.203594, 27.943127 ], [ 88.156783, 27.957929 ], [ 88.120442, 27.915103 ], [ 88.137689, 27.878607 ], [ 88.111819, 27.864852 ], [ 88.090877, 27.885484 ], [ 88.037291, 27.901881 ], [ 87.982472, 27.884426 ], [ 87.930733, 27.909285 ], [ 87.826639, 27.927794 ], [ 87.782292, 27.890774 ], [ 87.77798, 27.860091 ], [ 87.727473, 27.802933 ], [ 87.668343, 27.809815 ], [ 87.670191, 27.832045 ], [ 87.598126, 27.814579 ], [ 87.58088, 27.859562 ], [ 87.45954, 27.820931 ], [ 87.418272, 27.825694 ], [ 87.421967, 27.856916 ], [ 87.364069, 27.824106 ], [ 87.317258, 27.826753 ], [ 87.280917, 27.845275 ], [ 87.249504, 27.839454 ], [ 87.227946, 27.812991 ], [ 87.173744, 27.818284 ], [ 87.118309, 27.840512 ], [ 87.080737, 27.910872 ], [ 87.035157, 27.946299 ], [ 86.935375, 27.955286 ], [ 86.926752, 27.985942 ], [ 86.885484, 27.995983 ], [ 86.864542, 28.022401 ], [ 86.827586, 28.012363 ], [ 86.756753, 28.032967 ], [ 86.768456, 28.06941 ], [ 86.74813, 28.089474 ], [ 86.700086, 28.101617 ], [ 86.662514, 28.092114 ], [ 86.647732, 28.06941 ], [ 86.611391, 28.069938 ], [ 86.60092, 28.097922 ], [ 86.568891, 28.103201 ], [ 86.55842, 28.047757 ], [ 86.537478, 28.044587 ], [ 86.513457, 27.996511 ], [ 86.514689, 27.954757 ], [ 86.475884, 27.944713 ], [ 86.450015, 27.908757 ], [ 86.414906, 27.904526 ], [ 86.393349, 27.926736 ], [ 86.308965, 27.950528 ], [ 86.27324, 27.976958 ], [ 86.231972, 27.974315 ], [ 86.206103, 28.084195 ], [ 86.223965, 28.092642 ], [ 86.19132, 28.167058 ], [ 86.140198, 28.114814 ], [ 86.128495, 28.086835 ], [ 86.086611, 28.090002 ], [ 86.082915, 28.018175 ], [ 86.125415, 27.923035 ], [ 86.053966, 27.900823 ], [ 86.002227, 27.90717 ], [ 85.949256, 27.937311 ], [ 85.980053, 27.984357 ], [ 85.901213, 28.053566 ], [ 85.898749, 28.101617 ], [ 85.871648, 28.124843 ], [ 85.854402, 28.172334 ], [ 85.791576, 28.195544 ], [ 85.753388, 28.227714 ], [ 85.720743, 28.372093 ], [ 85.682555, 28.375779 ], [ 85.650526, 28.283592 ], [ 85.601251, 28.254075 ], [ 85.602483, 28.295712 ], [ 85.520563, 28.326798 ], [ 85.458969, 28.332593 ], [ 85.415853, 28.321003 ], [ 85.379512, 28.274105 ], [ 85.349947, 28.298347 ], [ 85.272339, 28.282538 ], [ 85.209513, 28.338914 ], [ 85.179948, 28.324164 ], [ 85.113427, 28.344708 ], [ 85.129441, 28.377885 ], [ 85.108499, 28.461047 ], [ 85.160238, 28.49261 ], [ 85.189803, 28.544669 ], [ 85.18426, 28.587244 ], [ 85.195963, 28.624022 ], [ 85.155926, 28.643983 ], [ 85.126361, 28.676016 ], [ 85.05676, 28.674441 ], [ 84.995782, 28.611414 ], [ 84.981616, 28.586193 ], [ 84.896616, 28.587244 ], [ 84.857196, 28.567798 ], [ 84.773428, 28.610363 ], [ 84.698284, 28.633478 ], [ 84.699515, 28.671816 ], [ 84.669334, 28.680742 ], [ 84.650856, 28.714338 ], [ 84.620059, 28.732182 ], [ 84.557233, 28.74635 ], [ 84.483321, 28.735331 ], [ 84.445133, 28.764189 ], [ 84.434046, 28.823978 ], [ 84.404481, 28.828173 ], [ 84.408176, 28.85386 ], [ 84.340423, 28.866963 ], [ 84.330568, 28.859101 ], [ 84.268358, 28.895261 ], [ 84.234481, 28.889497 ], [ 84.228322, 28.949738 ], [ 84.248648, 29.030353 ], [ 84.224626, 29.049189 ], [ 84.194445, 29.045004 ], [ 84.192597, 29.084236 ], [ 84.20738, 29.118749 ], [ 84.176583, 29.133909 ], [ 84.17104, 29.19453 ], [ 84.197525, 29.210202 ], [ 84.203068, 29.239972 ], [ 84.130388, 29.239972 ], [ 84.116837, 29.286438 ], [ 84.052163, 29.296877 ], [ 84.002272, 29.291658 ], [ 83.986874, 29.325057 ], [ 83.949301, 29.312533 ], [ 83.911729, 29.323491 ], [ 83.851367, 29.294789 ], [ 83.82057, 29.294267 ], [ 83.800244, 29.249372 ], [ 83.727563, 29.244672 ], [ 83.667201, 29.200277 ], [ 83.656114, 29.16736 ], [ 83.596368, 29.174153 ], [ 83.57789, 29.203934 ], [ 83.548941, 29.201322 ], [ 83.492274, 29.280174 ], [ 83.463941, 29.285916 ], [ 83.450391, 29.332883 ], [ 83.423289, 29.361053 ], [ 83.415898, 29.420496 ], [ 83.383253, 29.42206 ], [ 83.325355, 29.502826 ], [ 83.27608, 29.505951 ], [ 83.266841, 29.571035 ], [ 83.217565, 29.60018 ], [ 83.164595, 29.595496 ], [ 83.159667, 29.61735 ], [ 83.12887, 29.623593 ], [ 83.088834, 29.604863 ], [ 83.011226, 29.667804 ], [ 82.966878, 29.658963 ], [ 82.9484, 29.704718 ], [ 82.885574, 29.689122 ], [ 82.830756, 29.687562 ], [ 82.816589, 29.717192 ], [ 82.774089, 29.726548 ], [ 82.757459, 29.761881 ], [ 82.691553, 29.766037 ], [ 82.737749, 29.80655 ], [ 82.703872, 29.847566 ], [ 82.6238, 29.834588 ], [ 82.64351, 29.868846 ], [ 82.609017, 29.886489 ], [ 82.560974, 29.955476 ], [ 82.498148, 29.947698 ], [ 82.474743, 29.973622 ], [ 82.431011, 29.989692 ], [ 82.412533, 30.011978 ], [ 82.368185, 30.014051 ], [ 82.333693, 30.045138 ], [ 82.311519, 30.035813 ], [ 82.246845, 30.071555 ], [ 82.17786, 30.06793 ], [ 82.183403, 30.12178 ], [ 82.207425, 30.143519 ], [ 82.188947, 30.18543 ], [ 82.142135, 30.200948 ], [ 82.114418, 30.226806 ], [ 82.11873, 30.279019 ], [ 82.132896, 30.30434 ], [ 82.104563, 30.346182 ], [ 82.060215, 30.332237 ], [ 82.022027, 30.339468 ], [ 81.99123, 30.322939 ], [ 81.954274, 30.355995 ], [ 81.939491, 30.344633 ], [ 81.872354, 30.373035 ], [ 81.759021, 30.385426 ], [ 81.723913, 30.407623 ], [ 81.63029, 30.446842 ], [ 81.613044, 30.412784 ], [ 81.566232, 30.428782 ], [ 81.555761, 30.369421 ], [ 81.494783, 30.381296 ], [ 81.454131, 30.412268 ], [ 81.418407, 30.420525 ], [ 81.406704, 30.40401 ], [ 81.432573, 30.379231 ], [ 81.406088, 30.369421 ], [ 81.399929, 30.319323 ], [ 81.427646, 30.305373 ], [ 81.406088, 30.291938 ], [ 81.419023, 30.270232 ], [ 81.397465, 30.240767 ], [ 81.393769, 30.199396 ], [ 81.335871, 30.149729 ], [ 81.269349, 30.153351 ], [ 81.293371, 30.094859 ], [ 81.2829, 30.061197 ], [ 81.247792, 30.032705 ], [ 81.256415, 30.011978 ], [ 81.225618, 30.005759 ], [ 81.131995, 30.016124 ], [ 81.09627, 30.052909 ], [ 81.110437, 30.085538 ], [ 81.085799, 30.100554 ], [ 81.082104, 30.151281 ], [ 81.038372, 30.205086 ], [ 81.034677, 30.246971 ], [ 80.996488, 30.267648 ], [ 80.933662, 30.266614 ], [ 80.910873, 30.30279 ], [ 80.81725, 30.321389 ], [ 80.719316, 30.414848 ], [ 80.692214, 30.416913 ], [ 80.633084, 30.458707 ], [ 80.585041, 30.463866 ], [ 80.549316, 30.448905 ], [ 80.504969, 30.483466 ], [ 80.446454, 30.495327 ], [ 80.43044, 30.515952 ], [ 80.357759, 30.520592 ], [ 80.322035, 30.564403 ], [ 80.261673, 30.566465 ], [ 80.214245, 30.586044 ], [ 80.143412, 30.55822 ], [ 80.04363, 30.603559 ], [ 80.014065, 30.661748 ], [ 79.970333, 30.685941 ], [ 79.955551, 30.738422 ], [ 79.961094, 30.771337 ], [ 79.900732, 30.7991 ], [ 79.913051, 30.833022 ], [ 79.890877, 30.855116 ], [ 79.835443, 30.851006 ], [ 79.75845, 30.936769 ], [ 79.729501, 30.941389 ], [ 79.668523, 30.980392 ], [ 79.660516, 30.956787 ], [ 79.59769, 30.925989 ], [ 79.550879, 30.957813 ], [ 79.505915, 31.027584 ], [ 79.427075, 31.018353 ], [ 79.424611, 31.061425 ], [ 79.404901, 31.071678 ], [ 79.35809, 31.031174 ], [ 79.316206, 31.01784 ], [ 79.33222, 30.969103 ], [ 79.227511, 30.949088 ], [ 79.205953, 31.0004 ], [ 79.181931, 31.015788 ], [ 79.096931, 30.992192 ], [ 79.059359, 31.028097 ], [ 79.010084, 31.043994 ], [ 78.97436, 31.115751 ], [ 78.997765, 31.158779 ], [ 78.930628, 31.220726 ], [ 78.923852, 31.246824 ], [ 78.884432, 31.277006 ], [ 78.865338, 31.312804 ], [ 78.859179, 31.289281 ], [ 78.795121, 31.301043 ], [ 78.755085, 31.355742 ], [ 78.760013, 31.392531 ], [ 78.792041, 31.435944 ], [ 78.755701, 31.478316 ], [ 78.729832, 31.478316 ], [ 78.740303, 31.532912 ], [ 78.779723, 31.545154 ], [ 78.833925, 31.584927 ], [ 78.845628, 31.609905 ], [ 78.806824, 31.64099 ], [ 78.798817, 31.675629 ], [ 78.763092, 31.668499 ], [ 78.706426, 31.778453 ], [ 78.654687, 31.819144 ], [ 78.665158, 31.851684 ], [ 78.739687, 31.885228 ], [ 78.768636, 31.92638 ], [ 78.762476, 31.947203 ], [ 78.705194, 31.988835 ], [ 78.60726, 32.023851 ], [ 78.609107, 32.052768 ], [ 78.527188, 32.11463 ], [ 78.509941, 32.147065 ], [ 78.469905, 32.127808 ], [ 78.429869, 32.194683 ], [ 78.430485, 32.212407 ], [ 78.475449, 32.236708 ], [ 78.508709, 32.297939 ], [ 78.480992, 32.329297 ], [ 78.483456, 32.357106 ], [ 78.458818, 32.379853 ], [ 78.472985, 32.435431 ], [ 78.426174, 32.502584 ], [ 78.395377, 32.530339 ], [ 78.424942, 32.565652 ], [ 78.500086, 32.580782 ], [ 78.518564, 32.605993 ], [ 78.577695, 32.615067 ], [ 78.588782, 32.637748 ], [ 78.628202, 32.630188 ], [ 78.675013, 32.658408 ], [ 78.6861, 32.680071 ], [ 78.741534, 32.703743 ], [ 78.74215, 32.654881 ], [ 78.781571, 32.608009 ], [ 78.760629, 32.563635 ], [ 78.782186, 32.480373 ], [ 78.81052, 32.436441 ], [ 78.87273, 32.40512 ], [ 78.904142, 32.374798 ], [ 78.970664, 32.331826 ], [ 79.005772, 32.375304 ], [ 79.067982, 32.380863 ], [ 79.103091, 32.369744 ], [ 79.124649, 32.416235 ], [ 79.135736, 32.472295 ], [ 79.180083, 32.492994 ], [ 79.190554, 32.511669 ], [ 79.252148, 32.516715 ], [ 79.272474, 32.561113 ], [ 79.308199, 32.596918 ], [ 79.299575, 32.637244 ], [ 79.27309, 32.678056 ], [ 79.301423, 32.728919 ], [ 79.275554, 32.778746 ], [ 79.225047, 32.784281 ], [ 79.237982, 32.846145 ], [ 79.227511, 32.89038 ], [ 79.255844, 32.942628 ], [ 79.204721, 32.964724 ], [ 79.162837, 33.01191 ], [ 79.139431, 33.117735 ], [ 79.162221, 33.165841 ], [ 79.152366, 33.184375 ], [ 79.10925, 33.200401 ], [ 79.072294, 33.22844 ], [ 79.083997, 33.245459 ], [ 79.041497, 33.268479 ], [ 79.022403, 33.323504 ], [ 78.9682, 33.334505 ], [ 78.949722, 33.376495 ], [ 78.896751, 33.41247 ], [ 78.84994, 33.419963 ], [ 78.816679, 33.480882 ], [ 78.74215, 33.55323 ], [ 78.755085, 33.623025 ], [ 78.713201, 33.623025 ], [ 78.684868, 33.654415 ], [ 78.692259, 33.676331 ], [ 78.779723, 33.73259 ], [ 78.758165, 33.790802 ], [ 78.766172, 33.823124 ], [ 78.756317, 33.8773 ], [ 78.762476, 33.90959 ], [ 78.734143, 33.918529 ], [ 78.744614, 33.980585 ], [ 78.736607, 33.999937 ], [ 78.656535, 34.030196 ], [ 78.661462, 34.086718 ], [ 78.737223, 34.089692 ], [ 78.801897, 34.137258 ], [ 78.828998, 34.125369 ], [ 78.878273, 34.163012 ], [ 78.910302, 34.143202 ], [ 78.9257, 34.155584 ], [ 78.941099, 34.212022 ], [ 78.958345, 34.230827 ], [ 78.981751, 34.31836 ], [ 79.019939, 34.313417 ], [ 79.039649, 34.33467 ], [ 79.048888, 34.348506 ], [ 79.0107, 34.399877 ], [ 79.039033, 34.421601 ], [ 79.072294, 34.412714 ], [ 79.161605, 34.441345 ], [ 79.179467, 34.422588 ], [ 79.241677, 34.415183 ], [ 79.274322, 34.435916 ], [ 79.326677, 34.44332 ], [ 79.363017, 34.428018 ], [ 79.435082, 34.447761 ], [ 79.504683, 34.45467 ], [ 79.545335, 34.476381 ], [ 79.58106, 34.456151 ], [ 79.675914, 34.451216 ], [ 79.699936, 34.477861 ], [ 79.735661, 34.471447 ], [ 79.801566, 34.478847 ], [ 79.861312, 34.528166 ], [ 79.84345, 34.55725 ], [ 79.88595, 34.642965 ], [ 79.866856, 34.671517 ], [ 79.906892, 34.683821 ], [ 79.898268, 34.732035 ], [ 79.947544, 34.821008 ], [ 79.926602, 34.849499 ], [ 79.961094, 34.862759 ], [ 79.996819, 34.856375 ], [ 80.003594, 34.895162 ], [ 80.034391, 34.902033 ], [ 80.041782, 34.943252 ], [ 80.02392, 34.971209 ], [ 80.04363, 35.022196 ], [ 80.031311, 35.034447 ], [ 80.078123, 35.076578 ], [ 80.118159, 35.066293 ], [ 80.23026, 35.147565 ], [ 80.223484, 35.177409 ], [ 80.257977, 35.203331 ], [ 80.362687, 35.20871 ], [ 80.267832, 35.295701 ], [ 80.286926, 35.35283 ], [ 80.321419, 35.38699 ], [ 80.375006, 35.387966 ], [ 80.432904, 35.449418 ], [ 80.444607, 35.417235 ], [ 80.514824, 35.391869 ], [ 80.532686, 35.404553 ], [ 80.56841, 35.391381 ], [ 80.599823, 35.409431 ], [ 80.65649, 35.393821 ], [ 80.690982, 35.364544 ], [ 80.689135, 35.339162 ], [ 80.759968, 35.334768 ], [ 80.844351, 35.345508 ], [ 80.894242, 35.324027 ], [ 80.924423, 35.330862 ], [ 80.963844, 35.310842 ], [ 81.026053, 35.31133 ], [ 81.002648, 35.334768 ], [ 81.030981, 35.337209 ], [ 81.031597, 35.380648 ], [ 81.054387, 35.402602 ], [ 81.09935, 35.40748 ], [ 81.103662, 35.386015 ], [ 81.142466, 35.365032 ], [ 81.191741, 35.36552 ], [ 81.219458, 35.319144 ], [ 81.26627, 35.322562 ], [ 81.285364, 35.345508 ], [ 81.314313, 35.337209 ], [ 81.363588, 35.354783 ], [ 81.385762, 35.335256 ], [ 81.441196, 35.333303 ], [ 81.447972, 35.318167 ], [ 81.504638, 35.279092 ], [ 81.513261, 35.23511 ], [ 81.68634, 35.235599 ], [ 81.736847, 35.26248 ], [ 81.804601, 35.270786 ], [ 81.853876, 35.25857 ], [ 81.927789, 35.271275 ], [ 81.955506, 35.307423 ], [ 81.99123, 35.30547 ], [ 82.030034, 35.321585 ], [ 82.05344, 35.35039 ], [ 82.029419, 35.426013 ], [ 82.034346, 35.451855 ], [ 82.071302, 35.450393 ], [ 82.086701, 35.467454 ], [ 82.164925, 35.495719 ], [ 82.189563, 35.513258 ], [ 82.234526, 35.520565 ], [ 82.263475, 35.547837 ], [ 82.2992, 35.544916 ], [ 82.328149, 35.559523 ], [ 82.350323, 35.611113 ], [ 82.336156, 35.651486 ], [ 82.392823, 35.656349 ], [ 82.424852, 35.712736 ], [ 82.468583, 35.717595 ], [ 82.501844, 35.701073 ], [ 82.546192, 35.708362 ], [ 82.628727, 35.692324 ], [ 82.652133, 35.67288 ], [ 82.731589, 35.637868 ], [ 82.780249, 35.666073 ], [ 82.795031, 35.688436 ], [ 82.873871, 35.688922 ], [ 82.894813, 35.673852 ], [ 82.967494, 35.667532 ], [ 82.956407, 35.636409 ], [ 82.981661, 35.599922 ], [ 82.971806, 35.548324 ], [ 82.998907, 35.484512 ], [ 83.067892, 35.46258 ], [ 83.088834, 35.425526 ], [ 83.127022, 35.398699 ], [ 83.178145, 35.38943 ], [ 83.251442, 35.417722 ], [ 83.280391, 35.401138 ], [ 83.333978, 35.397236 ], [ 83.405427, 35.380648 ], [ 83.449159, 35.382111 ], [ 83.502745, 35.360639 ], [ 83.540318, 35.364056 ], [ 83.54155, 35.341603 ], [ 83.599448, 35.351366 ], [ 83.622238, 35.335256 ], [ 83.677672, 35.361128 ], [ 83.785462, 35.36308 ], [ 83.79778, 35.354783 ], [ 83.885244, 35.367472 ], [ 83.906186, 35.40309 ], [ 84.005968, 35.422599 ], [ 84.077417, 35.400163 ], [ 84.095895, 35.362592 ], [ 84.140859, 35.379184 ], [ 84.160569, 35.359663 ], [ 84.200605, 35.381135 ], [ 84.274517, 35.404065 ], [ 84.333032, 35.413821 ], [ 84.424191, 35.466479 ], [ 84.45314, 35.473303 ], [ 84.475929, 35.516181 ], [ 84.448828, 35.550272 ], [ 84.513502, 35.564391 ], [ 84.570168, 35.588242 ], [ 84.628067, 35.595055 ], [ 84.704443, 35.616951 ], [ 84.729081, 35.613546 ], [ 84.798066, 35.647595 ], [ 84.920022, 35.696213 ], [ 84.973608, 35.709334 ], [ 84.99455, 35.737028 ], [ 85.053065, 35.752086 ], [ 85.146071, 35.742371 ], [ 85.271107, 35.788989 ], [ 85.341324, 35.753543 ], [ 85.373969, 35.700101 ], [ 85.518715, 35.680658 ], [ 85.566142, 35.6403 ], [ 85.612953, 35.651486 ], [ 85.65299, 35.731199 ], [ 85.691178, 35.751114 ], [ 85.811286, 35.778794 ], [ 85.835308, 35.771996 ], [ 85.903677, 35.78462 ], [ 85.949256, 35.778794 ], [ 86.035488, 35.846738 ], [ 86.05335, 35.842857 ], [ 86.090306, 35.876809 ], [ 86.093386, 35.906868 ], [ 86.129111, 35.941761 ], [ 86.150668, 36.00424 ], [ 86.173458, 36.008113 ], [ 86.199944, 36.047801 ], [ 86.182081, 36.064734 ], [ 86.187625, 36.130983 ], [ 86.248603, 36.141616 ], [ 86.2794, 36.170608 ], [ 86.35824, 36.168676 ], [ 86.392733, 36.206834 ], [ 86.454943, 36.221319 ], [ 86.515305, 36.205385 ], [ 86.531935, 36.227113 ], [ 86.599072, 36.222285 ], [ 86.69947, 36.24449 ], [ 86.746282, 36.291777 ], [ 86.836209, 36.291294 ], [ 86.86331, 36.299977 ], [ 86.887332, 36.262829 ], [ 86.931064, 36.265242 ], [ 86.943998, 36.284058 ], [ 86.996353, 36.308658 ], [ 87.051788, 36.2966 ], [ 87.08628, 36.310587 ], [ 87.149106, 36.297565 ], [ 87.161425, 36.325535 ], [ 87.193454, 36.349158 ], [ 87.292004, 36.358797 ], [ 87.348055, 36.393008 ], [ 87.363453, 36.420463 ], [ 87.386859, 36.412757 ], [ 87.426895, 36.42576 ], [ 87.460155, 36.409868 ], [ 87.470626, 36.354459 ], [ 87.570409, 36.342409 ], [ 87.6203, 36.360243 ], [ 87.731785, 36.384818 ], [ 87.767509, 36.3747 ], [ 87.826023, 36.391563 ], [ 87.838342, 36.383855 ], [ 87.919646, 36.39349 ], [ 87.95845, 36.408423 ], [ 87.983088, 36.437797 ], [ 88.006494, 36.430575 ], [ 88.092109, 36.43539 ], [ 88.134609, 36.427205 ], [ 88.182652, 36.452721 ], [ 88.222688, 36.447426 ], [ 88.241782, 36.468605 ], [ 88.282434, 36.470049 ], [ 88.366202, 36.458016 ], [ 88.356963, 36.477268 ], [ 88.41055, 36.473418 ], [ 88.470912, 36.48208 ], [ 88.498629, 36.446463 ], [ 88.573158, 36.461386 ], [ 88.618121, 36.428168 ], [ 88.623665, 36.389636 ], [ 88.690186, 36.367954 ], [ 88.766563, 36.292259 ], [ 88.783809, 36.291777 ], [ 88.802903, 36.33807 ], [ 88.838628, 36.353496 ], [ 88.870657, 36.348193 ], [ 88.926091, 36.36458 ], [ 88.964279, 36.318785 ], [ 89.013554, 36.315409 ], [ 89.054822, 36.291777 ], [ 89.10225, 36.281164 ], [ 89.126887, 36.254626 ], [ 89.198952, 36.260417 ], [ 89.232213, 36.295636 ], [ 89.292575, 36.231457 ], [ 89.335075, 36.23725 ], [ 89.375727, 36.228078 ], [ 89.490291, 36.151281 ], [ 89.594385, 36.126632 ], [ 89.614711, 36.109712 ], [ 89.711414, 36.093272 ] ] ] ] } }, +{ "type": "Feature", "properties": { "adcode": "610000", "name": "陕西省", "center": [ 108.948024, 34.263161 ], "centroid": [ 108.887304, 35.263625 ], "childrenNum": 10, "level": "province", "parent": { "adcode": 100000 }, "subFeatureIndex": 26, "acroutes": [ 100000 ] }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 110.398352, 33.176862 ], [ 110.398352, 33.176862 ], [ 110.372482, 33.186379 ], [ 110.33799, 33.160331 ], [ 110.285635, 33.171352 ], [ 110.218497, 33.163336 ], [ 110.164911, 33.209415 ], [ 110.031252, 33.191888 ], [ 109.999223, 33.212419 ], [ 109.973353, 33.203907 ], [ 109.916687, 33.229942 ], [ 109.852013, 33.247961 ], [ 109.813209, 33.236449 ], [ 109.732521, 33.231443 ], [ 109.693101, 33.254468 ], [ 109.649985, 33.251465 ], [ 109.619804, 33.275484 ], [ 109.60687, 33.235949 ], [ 109.514479, 33.237951 ], [ 109.498464, 33.207412 ], [ 109.438718, 33.152314 ], [ 109.468283, 33.140288 ], [ 109.522486, 33.138785 ], [ 109.576073, 33.110216 ], [ 109.688174, 33.116733 ], [ 109.704188, 33.101694 ], [ 109.794731, 33.067095 ], [ 109.785492, 32.987316 ], [ 109.76455, 32.909474 ], [ 109.789804, 32.882339 ], [ 109.847702, 32.893395 ], [ 109.856941, 32.910479 ], [ 109.907448, 32.903947 ], [ 109.927158, 32.887364 ], [ 109.988752, 32.886359 ], [ 110.051578, 32.851676 ], [ 110.105164, 32.832569 ], [ 110.142121, 32.802895 ], [ 110.127338, 32.77774 ], [ 110.159367, 32.767173 ], [ 110.156903, 32.683093 ], [ 110.206179, 32.633212 ], [ 110.153824, 32.593388 ], [ 110.124259, 32.616579 ], [ 110.090382, 32.617083 ], [ 110.084223, 32.580782 ], [ 110.017701, 32.546989 ], [ 109.97089, 32.577756 ], [ 109.910528, 32.592884 ], [ 109.816905, 32.577252 ], [ 109.746072, 32.594901 ], [ 109.726978, 32.608513 ], [ 109.631507, 32.599943 ], [ 109.619804, 32.56767 ], [ 109.637051, 32.540935 ], [ 109.575457, 32.506622 ], [ 109.526797, 32.43341 ], [ 109.529877, 32.405625 ], [ 109.502776, 32.38895 ], [ 109.513247, 32.342444 ], [ 109.495385, 32.300468 ], [ 109.528645, 32.270112 ], [ 109.550203, 32.225065 ], [ 109.592703, 32.219495 ], [ 109.604406, 32.199241 ], [ 109.58716, 32.161251 ], [ 109.621652, 32.106519 ], [ 109.590855, 32.047696 ], [ 109.590855, 32.012688 ], [ 109.631507, 31.962436 ], [ 109.62042, 31.928412 ], [ 109.584696, 31.900472 ], [ 109.60379, 31.885737 ], [ 109.633971, 31.824738 ], [ 109.633971, 31.804396 ], [ 109.592087, 31.789136 ], [ 109.585928, 31.726546 ], [ 109.549587, 31.73011 ], [ 109.502776, 31.716365 ], [ 109.446109, 31.722983 ], [ 109.381436, 31.705165 ], [ 109.281654, 31.716874 ], [ 109.282885, 31.743343 ], [ 109.253936, 31.759628 ], [ 109.279806, 31.776418 ], [ 109.27611, 31.79931 ], [ 109.195422, 31.817618 ], [ 109.191111, 31.85575 ], [ 109.123357, 31.892851 ], [ 109.085785, 31.929428 ], [ 108.986619, 31.980205 ], [ 108.902235, 31.984774 ], [ 108.837561, 32.039072 ], [ 108.78767, 32.04871 ], [ 108.75133, 32.076098 ], [ 108.734084, 32.106519 ], [ 108.676801, 32.10297 ], [ 108.585026, 32.17189 ], [ 108.543758, 32.177969 ], [ 108.509882, 32.201266 ], [ 108.507418, 32.245819 ], [ 108.469846, 32.270618 ], [ 108.414411, 32.252399 ], [ 108.389773, 32.263533 ], [ 108.310933, 32.232152 ], [ 108.240716, 32.274666 ], [ 108.179738, 32.221521 ], [ 108.156948, 32.239239 ], [ 108.143398, 32.219495 ], [ 108.086731, 32.233165 ], [ 108.018362, 32.2119 ], [ 108.024521, 32.177462 ], [ 107.979558, 32.146051 ], [ 107.924739, 32.197215 ], [ 107.890247, 32.214432 ], [ 107.864377, 32.201266 ], [ 107.812022, 32.247844 ], [ 107.753508, 32.338399 ], [ 107.707929, 32.331826 ], [ 107.680827, 32.397035 ], [ 107.648183, 32.413709 ], [ 107.598291, 32.411688 ], [ 107.527458, 32.38238 ], [ 107.489886, 32.425328 ], [ 107.456625, 32.41775 ], [ 107.460937, 32.453612 ], [ 107.438763, 32.465732 ], [ 107.436299, 32.529835 ], [ 107.382097, 32.54043 ], [ 107.356843, 32.506622 ], [ 107.313727, 32.489965 ], [ 107.287858, 32.457147 ], [ 107.263836, 32.403099 ], [ 107.212097, 32.428864 ], [ 107.189924, 32.468256 ], [ 107.127098, 32.482393 ], [ 107.080286, 32.542448 ], [ 107.108004, 32.600951 ], [ 107.098765, 32.649338 ], [ 107.05996, 32.686115 ], [ 107.066736, 32.708779 ], [ 107.012533, 32.721367 ], [ 106.912751, 32.704247 ], [ 106.903512, 32.721367 ], [ 106.854853, 32.724388 ], [ 106.82344, 32.705254 ], [ 106.793259, 32.712807 ], [ 106.783404, 32.735967 ], [ 106.733513, 32.739491 ], [ 106.670071, 32.694678 ], [ 106.626955, 32.682086 ], [ 106.585687, 32.68813 ], [ 106.517934, 32.668485 ], [ 106.498224, 32.649338 ], [ 106.451412, 32.65992 ], [ 106.421231, 32.616579 ], [ 106.389203, 32.62666 ], [ 106.347935, 32.671003 ], [ 106.301123, 32.680071 ], [ 106.267863, 32.673522 ], [ 106.254928, 32.693671 ], [ 106.17424, 32.6977 ], [ 106.120037, 32.719856 ], [ 106.071378, 32.758114 ], [ 106.076305, 32.759121 ], [ 106.076921, 32.76365 ], [ 106.07261, 32.76365 ], [ 106.093552, 32.82402 ], [ 106.071378, 32.828546 ], [ 106.044277, 32.864747 ], [ 106.011632, 32.829552 ], [ 105.969132, 32.849162 ], [ 105.93156, 32.826032 ], [ 105.893371, 32.838603 ], [ 105.849024, 32.817985 ], [ 105.825002, 32.824523 ], [ 105.822538, 32.770192 ], [ 105.779423, 32.750061 ], [ 105.768952, 32.767676 ], [ 105.719061, 32.759624 ], [ 105.677793, 32.726402 ], [ 105.596489, 32.69921 ], [ 105.585402, 32.728919 ], [ 105.563844, 32.724891 ], [ 105.555221, 32.794343 ], [ 105.534279, 32.790822 ], [ 105.524424, 32.847654 ], [ 105.495475, 32.873292 ], [ 105.49917, 32.911986 ], [ 105.528119, 32.919019 ], [ 105.565692, 32.906962 ], [ 105.590329, 32.87681 ], [ 105.638373, 32.879323 ], [ 105.656851, 32.895405 ], [ 105.735691, 32.905454 ], [ 105.82685, 32.950663 ], [ 105.861959, 32.939112 ], [ 105.917393, 32.993841 ], [ 105.926632, 33.042517 ], [ 105.914929, 33.066092 ], [ 105.934639, 33.112221 ], [ 105.923552, 33.147805 ], [ 105.897067, 33.146803 ], [ 105.93156, 33.178365 ], [ 105.968516, 33.154318 ], [ 105.965436, 33.204407 ], [ 105.917393, 33.237951 ], [ 105.862574, 33.234447 ], [ 105.799133, 33.258471 ], [ 105.791741, 33.278486 ], [ 105.752937, 33.291994 ], [ 105.755401, 33.329004 ], [ 105.709822, 33.382991 ], [ 105.827466, 33.379993 ], [ 105.837937, 33.410971 ], [ 105.831162, 33.451926 ], [ 105.842248, 33.489866 ], [ 105.871198, 33.511325 ], [ 105.902611, 33.556222 ], [ 105.940183, 33.570684 ], [ 105.971596, 33.613058 ], [ 106.047356, 33.610067 ], [ 106.086776, 33.617045 ], [ 106.117573, 33.602591 ], [ 106.108334, 33.569686 ], [ 106.187174, 33.546746 ], [ 106.237681, 33.564201 ], [ 106.303587, 33.604585 ], [ 106.35163, 33.587137 ], [ 106.384891, 33.612061 ], [ 106.447101, 33.613058 ], [ 106.456956, 33.532779 ], [ 106.540108, 33.512822 ], [ 106.58076, 33.576169 ], [ 106.575832, 33.631497 ], [ 106.534564, 33.695254 ], [ 106.482825, 33.707203 ], [ 106.488369, 33.757969 ], [ 106.461883, 33.789807 ], [ 106.491448, 33.834559 ], [ 106.475434, 33.875809 ], [ 106.428007, 33.866368 ], [ 106.41076, 33.909093 ], [ 106.474202, 33.970659 ], [ 106.471738, 34.024244 ], [ 106.505615, 34.056479 ], [ 106.501919, 34.105055 ], [ 106.560434, 34.109514 ], [ 106.585071, 34.149641 ], [ 106.55797, 34.229837 ], [ 106.5321, 34.254079 ], [ 106.496376, 34.238248 ], [ 106.526557, 34.292159 ], [ 106.577064, 34.280786 ], [ 106.589383, 34.253584 ], [ 106.63373, 34.260014 ], [ 106.652825, 34.24369 ], [ 106.68239, 34.256057 ], [ 106.705179, 34.299575 ], [ 106.691013, 34.337635 ], [ 106.717498, 34.369255 ], [ 106.638042, 34.391481 ], [ 106.610941, 34.454177 ], [ 106.558586, 34.48822 ], [ 106.513622, 34.498085 ], [ 106.514238, 34.511894 ], [ 106.455108, 34.531617 ], [ 106.334384, 34.517811 ], [ 106.341159, 34.568093 ], [ 106.314058, 34.578934 ], [ 106.419384, 34.643458 ], [ 106.471122, 34.634102 ], [ 106.442173, 34.675455 ], [ 106.456956, 34.703996 ], [ 106.487137, 34.715311 ], [ 106.505615, 34.746789 ], [ 106.539492, 34.745805 ], [ 106.575216, 34.769897 ], [ 106.550579, 34.82936 ], [ 106.556122, 34.861285 ], [ 106.527789, 34.876507 ], [ 106.493296, 34.941289 ], [ 106.484673, 34.983959 ], [ 106.494528, 35.006021 ], [ 106.494528, 35.006021 ], [ 106.52163, 35.027587 ], [ 106.541956, 35.083925 ], [ 106.577064, 35.089312 ], [ 106.615252, 35.071191 ], [ 106.706411, 35.081966 ], [ 106.710723, 35.100574 ], [ 106.838222, 35.080007 ], [ 106.901664, 35.094698 ], [ 106.950323, 35.066782 ], [ 106.990975, 35.068252 ], [ 107.012533, 35.029547 ], [ 107.08275, 35.024156 ], [ 107.089526, 34.976604 ], [ 107.119707, 34.950119 ], [ 107.162206, 34.944233 ], [ 107.189308, 34.893198 ], [ 107.252749, 34.880925 ], [ 107.286626, 34.931968 ], [ 107.350068, 34.93393 ], [ 107.369162, 34.917738 ], [ 107.400575, 34.932949 ], [ 107.455394, 34.916757 ], [ 107.523763, 34.909886 ], [ 107.564415, 34.968757 ], [ 107.619849, 34.964834 ], [ 107.638943, 34.935402 ], [ 107.675284, 34.9511 ], [ 107.741805, 34.953553 ], [ 107.842203, 34.979056 ], [ 107.863145, 34.999158 ], [ 107.846515, 35.024646 ], [ 107.814486, 35.024646 ], [ 107.773218, 35.060904 ], [ 107.773218, 35.060904 ], [ 107.769523, 35.064333 ], [ 107.769523, 35.064333 ], [ 107.727639, 35.120157 ], [ 107.715936, 35.168114 ], [ 107.686371, 35.218 ], [ 107.652494, 35.244886 ], [ 107.667277, 35.257104 ], [ 107.737494, 35.267366 ], [ 107.745501, 35.311819 ], [ 107.841587, 35.276649 ], [ 107.867457, 35.256127 ], [ 107.960464, 35.263457 ], [ 107.949993, 35.245375 ], [ 108.049159, 35.253683 ], [ 108.094739, 35.280069 ], [ 108.174811, 35.304981 ], [ 108.221622, 35.296678 ], [ 108.239484, 35.256127 ], [ 108.296767, 35.267855 ], [ 108.345426, 35.300586 ], [ 108.36144, 35.279581 ], [ 108.48894, 35.275184 ], [ 108.547454, 35.304981 ], [ 108.583178, 35.294724 ], [ 108.614591, 35.328909 ], [ 108.61028, 35.355271 ], [ 108.631222, 35.418698 ], [ 108.605968, 35.503028 ], [ 108.625678, 35.537124 ], [ 108.618287, 35.557088 ], [ 108.539447, 35.605761 ], [ 108.517889, 35.699615 ], [ 108.533903, 35.746257 ], [ 108.527744, 35.82442 ], [ 108.499411, 35.872444 ], [ 108.518505, 35.905414 ], [ 108.562852, 35.921409 ], [ 108.593649, 35.950967 ], [ 108.652164, 35.94806 ], [ 108.659555, 35.990683 ], [ 108.688504, 36.021183 ], [ 108.682345, 36.062316 ], [ 108.712526, 36.138716 ], [ 108.646004, 36.254143 ], [ 108.641693, 36.359279 ], [ 108.651548, 36.384818 ], [ 108.618903, 36.433946 ], [ 108.562852, 36.43876 ], [ 108.510498, 36.47438 ], [ 108.514809, 36.445501 ], [ 108.495099, 36.422389 ], [ 108.460606, 36.422871 ], [ 108.408252, 36.45946 ], [ 108.391621, 36.505654 ], [ 108.365136, 36.519603 ], [ 108.340498, 36.559032 ], [ 108.262274, 36.549417 ], [ 108.245644, 36.571048 ], [ 108.210535, 36.577296 ], [ 108.204992, 36.606607 ], [ 108.204992, 36.606607 ], [ 108.222854, 36.631105 ], [ 108.1976, 36.630144 ], [ 108.163724, 36.563839 ], [ 108.092891, 36.587388 ], [ 108.079956, 36.614294 ], [ 108.060862, 36.592194 ], [ 108.001732, 36.639269 ], [ 108.02329, 36.647912 ], [ 108.006659, 36.683435 ], [ 107.938906, 36.655594 ], [ 107.940754, 36.694953 ], [ 107.914268, 36.720861 ], [ 107.907493, 36.750118 ], [ 107.866841, 36.766899 ], [ 107.768291, 36.792783 ], [ 107.742421, 36.811951 ], [ 107.722095, 36.802367 ], [ 107.670356, 36.83303 ], [ 107.642023, 36.819137 ], [ 107.5909, 36.836382 ], [ 107.540393, 36.828718 ], [ 107.533618, 36.867031 ], [ 107.478183, 36.908196 ], [ 107.365466, 36.905324 ], [ 107.336517, 36.925899 ], [ 107.310032, 36.912502 ], [ 107.291554, 36.979463 ], [ 107.291554, 36.979463 ], [ 107.288474, 37.008143 ], [ 107.288474, 37.008143 ], [ 107.28601, 37.054963 ], [ 107.268764, 37.099367 ], [ 107.281083, 37.127047 ], [ 107.306952, 37.100799 ], [ 107.334669, 37.138975 ], [ 107.336517, 37.165687 ], [ 107.317423, 37.200017 ], [ 107.270612, 37.229089 ], [ 107.309416, 37.239095 ], [ 107.273075, 37.29101 ], [ 107.257677, 37.337179 ], [ 107.282931, 37.437036 ], [ 107.284162, 37.481691 ], [ 107.345756, 37.518725 ], [ 107.369162, 37.58752 ], [ 107.330358, 37.584201 ], [ 107.311264, 37.609806 ], [ 107.361155, 37.613125 ], [ 107.422133, 37.665254 ], [ 107.389488, 37.671413 ], [ 107.387024, 37.691305 ], [ 107.425828, 37.684201 ], [ 107.484959, 37.706458 ], [ 107.499125, 37.765619 ], [ 107.57119, 37.776499 ], [ 107.599523, 37.791162 ], [ 107.620465, 37.776026 ], [ 107.646335, 37.805349 ], [ 107.659269, 37.844112 ], [ 107.65003, 37.86443 ], [ 107.684523, 37.888522 ], [ 107.732566, 37.84931 ], [ 107.842819, 37.828987 ], [ 107.884703, 37.808186 ], [ 107.982022, 37.787378 ], [ 107.993109, 37.735335 ], [ 108.025753, 37.696041 ], [ 108.012819, 37.66857 ], [ 108.025137, 37.649619 ], [ 108.055318, 37.652462 ], [ 108.134159, 37.622131 ], [ 108.193905, 37.638246 ], [ 108.205608, 37.655779 ], [ 108.24626, 37.665728 ], [ 108.293071, 37.656726 ], [ 108.301078, 37.640616 ], [ 108.422418, 37.648672 ], [ 108.485244, 37.678044 ], [ 108.532671, 37.690832 ], [ 108.628142, 37.651988 ], [ 108.699591, 37.669518 ], [ 108.720533, 37.683728 ], [ 108.777815, 37.683728 ], [ 108.791982, 37.700303 ], [ 108.784591, 37.764673 ], [ 108.799989, 37.784068 ], [ 108.791982, 37.872934 ], [ 108.798141, 37.93385 ], [ 108.82709, 37.989056 ], [ 108.797525, 38.04799 ], [ 108.830786, 38.049875 ], [ 108.883141, 38.01405 ], [ 108.893612, 37.978207 ], [ 108.93488, 37.922521 ], [ 108.9743, 37.931962 ], [ 108.982923, 37.964053 ], [ 109.018648, 37.971602 ], [ 109.037742, 38.021593 ], [ 109.06977, 38.023008 ], [ 109.050676, 38.055059 ], [ 109.069155, 38.091336 ], [ 108.964445, 38.154894 ], [ 108.938575, 38.207582 ], [ 108.976148, 38.245192 ], [ 108.961981, 38.26493 ], [ 109.007561, 38.359316 ], [ 109.051292, 38.385122 ], [ 109.054372, 38.433892 ], [ 109.128901, 38.480288 ], [ 109.175712, 38.518694 ], [ 109.196654, 38.552867 ], [ 109.276726, 38.623035 ], [ 109.331545, 38.597783 ], [ 109.367269, 38.627711 ], [ 109.329081, 38.66043 ], [ 109.338936, 38.701542 ], [ 109.404226, 38.720689 ], [ 109.444262, 38.782763 ], [ 109.511399, 38.833595 ], [ 109.549587, 38.805618 ], [ 109.624116, 38.85457 ], [ 109.672159, 38.928167 ], [ 109.685094, 38.968195 ], [ 109.665384, 38.981687 ], [ 109.72513, 39.018429 ], [ 109.762086, 39.057476 ], [ 109.793499, 39.074204 ], [ 109.851397, 39.122971 ], [ 109.890818, 39.103932 ], [ 109.92223, 39.107183 ], [ 109.893897, 39.141075 ], [ 109.961035, 39.191651 ], [ 109.871723, 39.243581 ], [ 109.90252, 39.271848 ], [ 109.962267, 39.212056 ], [ 110.041107, 39.21623 ], [ 110.109476, 39.249606 ], [ 110.217881, 39.281113 ], [ 110.184005, 39.355192 ], [ 110.161831, 39.387115 ], [ 110.136577, 39.39174 ], [ 110.12549, 39.432891 ], [ 110.152592, 39.45415 ], [ 110.243751, 39.423645 ], [ 110.257917, 39.407001 ], [ 110.385417, 39.310291 ], [ 110.429764, 39.341308 ], [ 110.434692, 39.381101 ], [ 110.482735, 39.360745 ], [ 110.524003, 39.382952 ], [ 110.559728, 39.351027 ], [ 110.566503, 39.320014 ], [ 110.596684, 39.282966 ], [ 110.626249, 39.266751 ], [ 110.702626, 39.273701 ], [ 110.731575, 39.30705 ], [ 110.73835, 39.348713 ], [ 110.782698, 39.38804 ], [ 110.869545, 39.494341 ], [ 110.891103, 39.509118 ], [ 110.958856, 39.519275 ], [ 111.017371, 39.552045 ], [ 111.101138, 39.559428 ], [ 111.136863, 39.587106 ], [ 111.154725, 39.569116 ], [ 111.148566, 39.531277 ], [ 111.10545, 39.497573 ], [ 111.10545, 39.472631 ], [ 111.058639, 39.447681 ], [ 111.064182, 39.400989 ], [ 111.098059, 39.401914 ], [ 111.087588, 39.376013 ], [ 111.125776, 39.366297 ], [ 111.159037, 39.362596 ], [ 111.155341, 39.338531 ], [ 111.186138, 39.35149 ], [ 111.179363, 39.326959 ], [ 111.202152, 39.305197 ], [ 111.247732, 39.302419 ], [ 111.213239, 39.257021 ], [ 111.219399, 39.244044 ], [ 111.163348, 39.152678 ], [ 111.173819, 39.135041 ], [ 111.147334, 39.100681 ], [ 111.138095, 39.064447 ], [ 111.094363, 39.030053 ], [ 111.038313, 39.020289 ], [ 110.998276, 38.998433 ], [ 110.980414, 38.970056 ], [ 111.009979, 38.932823 ], [ 111.016755, 38.889981 ], [ 110.995813, 38.868084 ], [ 111.009363, 38.847579 ], [ 110.965016, 38.755699 ], [ 110.915125, 38.704345 ], [ 110.916357, 38.673981 ], [ 110.880632, 38.626776 ], [ 110.898494, 38.587024 ], [ 110.920052, 38.581878 ], [ 110.907733, 38.521035 ], [ 110.870777, 38.510265 ], [ 110.874473, 38.453579 ], [ 110.840596, 38.439986 ], [ 110.796864, 38.453579 ], [ 110.77777, 38.440924 ], [ 110.746973, 38.366355 ], [ 110.701394, 38.353215 ], [ 110.661358, 38.308617 ], [ 110.601612, 38.308147 ], [ 110.57759, 38.297345 ], [ 110.565887, 38.215105 ], [ 110.528315, 38.211814 ], [ 110.509221, 38.192061 ], [ 110.519692, 38.130889 ], [ 110.501829, 38.097929 ], [ 110.507989, 38.013107 ], [ 110.528315, 37.990471 ], [ 110.522771, 37.955088 ], [ 110.59422, 37.922049 ], [ 110.680452, 37.790216 ], [ 110.735886, 37.77035 ], [ 110.750669, 37.736281 ], [ 110.716792, 37.728708 ], [ 110.706321, 37.705511 ], [ 110.775306, 37.680886 ], [ 110.793169, 37.650567 ], [ 110.763604, 37.639668 ], [ 110.771611, 37.594634 ], [ 110.795017, 37.558586 ], [ 110.770995, 37.538184 ], [ 110.759292, 37.474567 ], [ 110.740198, 37.44939 ], [ 110.644111, 37.435135 ], [ 110.630561, 37.372858 ], [ 110.641648, 37.360015 ], [ 110.695234, 37.34955 ], [ 110.678604, 37.317668 ], [ 110.690307, 37.287201 ], [ 110.660126, 37.281011 ], [ 110.651503, 37.256722 ], [ 110.590525, 37.187145 ], [ 110.53509, 37.138021 ], [ 110.535706, 37.115118 ], [ 110.49567, 37.086956 ], [ 110.460561, 37.044932 ], [ 110.417446, 37.027257 ], [ 110.426685, 37.008621 ], [ 110.382953, 37.022001 ], [ 110.381721, 37.002408 ], [ 110.424221, 36.963685 ], [ 110.408823, 36.892403 ], [ 110.376178, 36.882351 ], [ 110.424221, 36.855539 ], [ 110.406975, 36.824886 ], [ 110.423605, 36.818179 ], [ 110.407591, 36.776007 ], [ 110.447011, 36.737649 ], [ 110.438388, 36.685835 ], [ 110.402663, 36.697352 ], [ 110.394656, 36.676716 ], [ 110.426685, 36.657514 ], [ 110.447627, 36.621018 ], [ 110.496902, 36.582102 ], [ 110.488895, 36.556628 ], [ 110.503677, 36.488335 ], [ 110.47288, 36.453203 ], [ 110.489511, 36.430094 ], [ 110.487047, 36.393972 ], [ 110.459946, 36.327946 ], [ 110.474112, 36.306729 ], [ 110.474112, 36.248352 ], [ 110.45625, 36.22663 ], [ 110.447011, 36.164328 ], [ 110.467953, 36.074893 ], [ 110.491974, 36.034735 ], [ 110.49259, 35.994073 ], [ 110.516612, 35.971796 ], [ 110.502445, 35.947575 ], [ 110.516612, 35.918501 ], [ 110.511684, 35.879718 ], [ 110.549257, 35.877778 ], [ 110.550489, 35.838005 ], [ 110.571431, 35.800639 ], [ 110.57759, 35.701559 ], [ 110.609619, 35.632031 ], [ 110.567735, 35.539559 ], [ 110.531394, 35.511309 ], [ 110.477808, 35.413821 ], [ 110.45009, 35.327933 ], [ 110.374946, 35.251728 ], [ 110.369402, 35.158329 ], [ 110.325671, 35.014844 ], [ 110.272084, 34.942761 ], [ 110.257301, 34.934912 ], [ 110.259149, 34.884853 ], [ 110.233896, 34.83722 ], [ 110.232664, 34.80332 ], [ 110.259149, 34.737937 ], [ 110.231432, 34.701044 ], [ 110.23636, 34.670533 ], [ 110.29549, 34.610956 ], [ 110.379257, 34.600612 ], [ 110.366939, 34.566614 ], [ 110.404511, 34.557743 ], [ 110.372482, 34.544435 ], [ 110.360779, 34.516825 ], [ 110.403279, 34.433448 ], [ 110.403279, 34.433448 ], [ 110.473496, 34.393457 ], [ 110.503677, 34.33714 ], [ 110.451938, 34.292653 ], [ 110.428533, 34.288203 ], [ 110.43962, 34.243196 ], [ 110.507989, 34.217466 ], [ 110.55172, 34.213012 ], [ 110.55788, 34.193214 ], [ 110.621938, 34.177372 ], [ 110.642264, 34.161032 ], [ 110.61393, 34.113478 ], [ 110.591757, 34.101586 ], [ 110.587445, 34.023252 ], [ 110.620706, 34.035652 ], [ 110.671213, 33.966192 ], [ 110.665669, 33.937895 ], [ 110.627481, 33.925482 ], [ 110.628713, 33.910086 ], [ 110.587445, 33.887733 ], [ 110.612083, 33.852453 ], [ 110.66259, 33.85295 ], [ 110.712481, 33.833564 ], [ 110.74143, 33.798759 ], [ 110.782082, 33.796272 ], [ 110.81719, 33.751003 ], [ 110.831973, 33.713675 ], [ 110.823966, 33.685793 ], [ 110.878784, 33.634486 ], [ 110.966864, 33.609071 ], [ 111.00382, 33.578662 ], [ 111.002588, 33.535772 ], [ 111.02661, 33.478386 ], [ 111.021682, 33.476389 ], [ 111.021066, 33.471397 ], [ 111.02661, 33.467903 ], [ 110.996429, 33.435946 ], [ 111.025994, 33.375495 ], [ 111.025994, 33.330504 ], [ 110.984726, 33.255469 ], [ 110.960704, 33.253967 ], [ 110.9219, 33.203907 ], [ 110.865234, 33.213921 ], [ 110.828893, 33.201403 ], [ 110.824582, 33.158327 ], [ 110.753133, 33.15031 ], [ 110.702626, 33.097182 ], [ 110.650887, 33.157324 ], [ 110.623785, 33.143796 ], [ 110.59422, 33.168346 ], [ 110.57759, 33.250464 ], [ 110.54125, 33.255469 ], [ 110.471032, 33.171352 ], [ 110.398352, 33.176862 ] ] ], [ [ [ 111.02661, 33.478386 ], [ 111.02661, 33.467903 ], [ 111.021066, 33.471397 ], [ 111.021682, 33.476389 ], [ 111.02661, 33.478386 ] ] ], [ [ [ 106.076921, 32.76365 ], [ 106.076305, 32.759121 ], [ 106.071378, 32.758114 ], [ 106.07261, 32.76365 ], [ 106.076921, 32.76365 ] ] ] ] } }, +{ "type": "Feature", "properties": { "adcode": "620000", "name": "甘肃省", "center": [ 103.823557, 36.058039 ], "childrenNum": 14, "level": "province", "parent": { "adcode": 100000 }, "subFeatureIndex": 27, "acroutes": [ 100000 ] }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 106.506231, 35.737514 ], [ 106.566593, 35.738971 ], [ 106.595542, 35.727312 ], [ 106.620796, 35.743829 ], [ 106.633115, 35.714679 ], [ 106.66268, 35.70739 ], [ 106.674998, 35.728284 ], [ 106.750759, 35.689408 ], [ 106.750759, 35.725369 ], [ 106.806193, 35.70982 ], [ 106.819128, 35.7448 ], [ 106.867171, 35.738485 ], [ 106.868403, 35.771996 ], [ 106.897353, 35.759856 ], [ 106.927534, 35.810346 ], [ 106.849925, 35.887476 ], [ 106.912751, 35.93207 ], [ 106.940468, 35.931101 ], [ 106.93862, 35.952905 ], [ 106.90228, 35.943699 ], [ 106.94786, 35.988262 ], [ 106.928149, 36.011502 ], [ 106.940468, 36.064734 ], [ 106.957715, 36.091337 ], [ 106.925686, 36.115997 ], [ 106.930613, 36.138716 ], [ 106.873947, 36.178338 ], [ 106.873947, 36.178338 ], [ 106.858548, 36.206834 ], [ 106.858548, 36.206834 ], [ 106.833295, 36.229044 ], [ 106.808657, 36.21118 ], [ 106.772933, 36.212628 ], [ 106.735976, 36.23725 ], [ 106.698404, 36.244008 ], [ 106.685469, 36.273445 ], [ 106.647897, 36.259451 ], [ 106.559202, 36.292259 ], [ 106.54134, 36.25366 ], [ 106.504383, 36.266207 ], [ 106.470507, 36.306246 ], [ 106.497608, 36.31348 ], [ 106.510543, 36.379037 ], [ 106.492064, 36.422389 ], [ 106.523477, 36.468605 ], [ 106.494528, 36.494589 ], [ 106.455724, 36.496995 ], [ 106.39721, 36.548455 ], [ 106.37134, 36.549417 ], [ 106.363949, 36.577296 ], [ 106.392282, 36.556628 ], [ 106.397826, 36.576816 ], [ 106.444637, 36.557109 ], [ 106.465579, 36.583063 ], [ 106.444637, 36.624861 ], [ 106.491448, 36.628703 ], [ 106.490833, 36.685835 ], [ 106.530869, 36.690154 ], [ 106.519782, 36.708868 ], [ 106.519782, 36.708868 ], [ 106.514238, 36.715584 ], [ 106.59431, 36.750118 ], [ 106.644817, 36.72278 ], [ 106.627571, 36.752995 ], [ 106.657752, 36.820575 ], [ 106.637426, 36.867031 ], [ 106.637426, 36.867031 ], [ 106.626955, 36.892403 ], [ 106.609709, 36.878521 ], [ 106.609709, 36.878521 ], [ 106.601702, 36.918244 ], [ 106.549347, 36.941685 ], [ 106.540108, 36.984244 ], [ 106.595542, 36.94025 ], [ 106.594926, 36.967988 ], [ 106.64297, 36.962729 ], [ 106.646665, 37.000496 ], [ 106.666991, 37.016745 ], [ 106.645433, 37.064992 ], [ 106.605397, 37.127524 ], [ 106.6171, 37.135158 ], [ 106.673151, 37.1113 ], [ 106.687933, 37.12991 ], [ 106.728585, 37.121321 ], [ 106.750143, 37.09889 ], [ 106.772933, 37.120367 ], [ 106.776012, 37.158056 ], [ 106.818512, 37.141838 ], [ 106.891193, 37.098413 ], [ 106.912135, 37.110345 ], [ 106.905976, 37.151378 ], [ 106.998367, 37.106527 ], [ 107.031011, 37.108436 ], [ 107.030395, 37.140883 ], [ 107.095685, 37.115595 ], [ 107.133873, 37.134681 ], [ 107.181916, 37.143269 ], [ 107.234887, 37.096503 ], [ 107.268764, 37.099367 ], [ 107.28601, 37.054963 ], [ 107.288474, 37.008143 ], [ 107.288474, 37.008143 ], [ 107.291554, 36.979463 ], [ 107.291554, 36.979463 ], [ 107.310032, 36.912502 ], [ 107.336517, 36.925899 ], [ 107.365466, 36.905324 ], [ 107.478183, 36.908196 ], [ 107.533618, 36.867031 ], [ 107.540393, 36.828718 ], [ 107.5909, 36.836382 ], [ 107.642023, 36.819137 ], [ 107.670356, 36.83303 ], [ 107.722095, 36.802367 ], [ 107.742421, 36.811951 ], [ 107.768291, 36.792783 ], [ 107.866841, 36.766899 ], [ 107.907493, 36.750118 ], [ 107.914268, 36.720861 ], [ 107.940754, 36.694953 ], [ 107.938906, 36.655594 ], [ 108.006659, 36.683435 ], [ 108.02329, 36.647912 ], [ 108.001732, 36.639269 ], [ 108.060862, 36.592194 ], [ 108.079956, 36.614294 ], [ 108.092891, 36.587388 ], [ 108.163724, 36.563839 ], [ 108.1976, 36.630144 ], [ 108.222854, 36.631105 ], [ 108.204992, 36.606607 ], [ 108.204992, 36.606607 ], [ 108.210535, 36.577296 ], [ 108.245644, 36.571048 ], [ 108.262274, 36.549417 ], [ 108.340498, 36.559032 ], [ 108.365136, 36.519603 ], [ 108.391621, 36.505654 ], [ 108.408252, 36.45946 ], [ 108.460606, 36.422871 ], [ 108.495099, 36.422389 ], [ 108.514809, 36.445501 ], [ 108.510498, 36.47438 ], [ 108.562852, 36.43876 ], [ 108.618903, 36.433946 ], [ 108.651548, 36.384818 ], [ 108.641693, 36.359279 ], [ 108.646004, 36.254143 ], [ 108.712526, 36.138716 ], [ 108.682345, 36.062316 ], [ 108.688504, 36.021183 ], [ 108.659555, 35.990683 ], [ 108.652164, 35.94806 ], [ 108.593649, 35.950967 ], [ 108.562852, 35.921409 ], [ 108.518505, 35.905414 ], [ 108.499411, 35.872444 ], [ 108.527744, 35.82442 ], [ 108.533903, 35.746257 ], [ 108.517889, 35.699615 ], [ 108.539447, 35.605761 ], [ 108.618287, 35.557088 ], [ 108.625678, 35.537124 ], [ 108.605968, 35.503028 ], [ 108.631222, 35.418698 ], [ 108.61028, 35.355271 ], [ 108.614591, 35.328909 ], [ 108.583178, 35.294724 ], [ 108.547454, 35.304981 ], [ 108.48894, 35.275184 ], [ 108.36144, 35.279581 ], [ 108.345426, 35.300586 ], [ 108.296767, 35.267855 ], [ 108.239484, 35.256127 ], [ 108.221622, 35.296678 ], [ 108.174811, 35.304981 ], [ 108.094739, 35.280069 ], [ 108.049159, 35.253683 ], [ 107.949993, 35.245375 ], [ 107.960464, 35.263457 ], [ 107.867457, 35.256127 ], [ 107.841587, 35.276649 ], [ 107.745501, 35.311819 ], [ 107.737494, 35.267366 ], [ 107.667277, 35.257104 ], [ 107.652494, 35.244886 ], [ 107.686371, 35.218 ], [ 107.715936, 35.168114 ], [ 107.727639, 35.120157 ], [ 107.769523, 35.064333 ], [ 107.769523, 35.064333 ], [ 107.773218, 35.060904 ], [ 107.773218, 35.060904 ], [ 107.814486, 35.024646 ], [ 107.846515, 35.024646 ], [ 107.863145, 34.999158 ], [ 107.842203, 34.979056 ], [ 107.741805, 34.953553 ], [ 107.675284, 34.9511 ], [ 107.638943, 34.935402 ], [ 107.619849, 34.964834 ], [ 107.564415, 34.968757 ], [ 107.523763, 34.909886 ], [ 107.455394, 34.916757 ], [ 107.400575, 34.932949 ], [ 107.369162, 34.917738 ], [ 107.350068, 34.93393 ], [ 107.286626, 34.931968 ], [ 107.252749, 34.880925 ], [ 107.189308, 34.893198 ], [ 107.162206, 34.944233 ], [ 107.119707, 34.950119 ], [ 107.089526, 34.976604 ], [ 107.08275, 35.024156 ], [ 107.012533, 35.029547 ], [ 106.990975, 35.068252 ], [ 106.950323, 35.066782 ], [ 106.901664, 35.094698 ], [ 106.838222, 35.080007 ], [ 106.710723, 35.100574 ], [ 106.706411, 35.081966 ], [ 106.615252, 35.071191 ], [ 106.577064, 35.089312 ], [ 106.541956, 35.083925 ], [ 106.52163, 35.027587 ], [ 106.494528, 35.006021 ], [ 106.494528, 35.006021 ], [ 106.484673, 34.983959 ], [ 106.493296, 34.941289 ], [ 106.527789, 34.876507 ], [ 106.556122, 34.861285 ], [ 106.550579, 34.82936 ], [ 106.575216, 34.769897 ], [ 106.539492, 34.745805 ], [ 106.505615, 34.746789 ], [ 106.487137, 34.715311 ], [ 106.456956, 34.703996 ], [ 106.442173, 34.675455 ], [ 106.471122, 34.634102 ], [ 106.419384, 34.643458 ], [ 106.314058, 34.578934 ], [ 106.341159, 34.568093 ], [ 106.334384, 34.517811 ], [ 106.455108, 34.531617 ], [ 106.514238, 34.511894 ], [ 106.513622, 34.498085 ], [ 106.558586, 34.48822 ], [ 106.610941, 34.454177 ], [ 106.638042, 34.391481 ], [ 106.717498, 34.369255 ], [ 106.691013, 34.337635 ], [ 106.705179, 34.299575 ], [ 106.68239, 34.256057 ], [ 106.652825, 34.24369 ], [ 106.63373, 34.260014 ], [ 106.589383, 34.253584 ], [ 106.577064, 34.280786 ], [ 106.526557, 34.292159 ], [ 106.496376, 34.238248 ], [ 106.5321, 34.254079 ], [ 106.55797, 34.229837 ], [ 106.585071, 34.149641 ], [ 106.560434, 34.109514 ], [ 106.501919, 34.105055 ], [ 106.505615, 34.056479 ], [ 106.471738, 34.024244 ], [ 106.474202, 33.970659 ], [ 106.41076, 33.909093 ], [ 106.428007, 33.866368 ], [ 106.475434, 33.875809 ], [ 106.491448, 33.834559 ], [ 106.461883, 33.789807 ], [ 106.488369, 33.757969 ], [ 106.482825, 33.707203 ], [ 106.534564, 33.695254 ], [ 106.575832, 33.631497 ], [ 106.58076, 33.576169 ], [ 106.540108, 33.512822 ], [ 106.456956, 33.532779 ], [ 106.447101, 33.613058 ], [ 106.384891, 33.612061 ], [ 106.35163, 33.587137 ], [ 106.303587, 33.604585 ], [ 106.237681, 33.564201 ], [ 106.187174, 33.546746 ], [ 106.108334, 33.569686 ], [ 106.117573, 33.602591 ], [ 106.086776, 33.617045 ], [ 106.047356, 33.610067 ], [ 105.971596, 33.613058 ], [ 105.940183, 33.570684 ], [ 105.902611, 33.556222 ], [ 105.871198, 33.511325 ], [ 105.842248, 33.489866 ], [ 105.831162, 33.451926 ], [ 105.837937, 33.410971 ], [ 105.827466, 33.379993 ], [ 105.709822, 33.382991 ], [ 105.755401, 33.329004 ], [ 105.752937, 33.291994 ], [ 105.791741, 33.278486 ], [ 105.799133, 33.258471 ], [ 105.862574, 33.234447 ], [ 105.917393, 33.237951 ], [ 105.965436, 33.204407 ], [ 105.968516, 33.154318 ], [ 105.93156, 33.178365 ], [ 105.897067, 33.146803 ], [ 105.923552, 33.147805 ], [ 105.934639, 33.112221 ], [ 105.914929, 33.066092 ], [ 105.926632, 33.042517 ], [ 105.917393, 32.993841 ], [ 105.861959, 32.939112 ], [ 105.82685, 32.950663 ], [ 105.735691, 32.905454 ], [ 105.656851, 32.895405 ], [ 105.638373, 32.879323 ], [ 105.590329, 32.87681 ], [ 105.565692, 32.906962 ], [ 105.528119, 32.919019 ], [ 105.49917, 32.911986 ], [ 105.467757, 32.930071 ], [ 105.414171, 32.922034 ], [ 105.408011, 32.885857 ], [ 105.38091, 32.876307 ], [ 105.396308, 32.85067 ], [ 105.396308, 32.85067 ], [ 105.427721, 32.784281 ], [ 105.454207, 32.767173 ], [ 105.448663, 32.732946 ], [ 105.368591, 32.712807 ], [ 105.347033, 32.68259 ], [ 105.297758, 32.656897 ], [ 105.263265, 32.652362 ], [ 105.219534, 32.666469 ], [ 105.215222, 32.63674 ], [ 105.185041, 32.617587 ], [ 105.111128, 32.593893 ], [ 105.0791, 32.637244 ], [ 105.026745, 32.650346 ], [ 104.925115, 32.607505 ], [ 104.881999, 32.600951 ], [ 104.845659, 32.653873 ], [ 104.820405, 32.662943 ], [ 104.795768, 32.643292 ], [ 104.739717, 32.635228 ], [ 104.696601, 32.673522 ], [ 104.643015, 32.661935 ], [ 104.592508, 32.695685 ], [ 104.582653, 32.722374 ], [ 104.526602, 32.728416 ], [ 104.51182, 32.753585 ], [ 104.458849, 32.748551 ], [ 104.363994, 32.822511 ], [ 104.294393, 32.835586 ], [ 104.277147, 32.90244 ], [ 104.288234, 32.942628 ], [ 104.345516, 32.940117 ], [ 104.378161, 32.953174 ], [ 104.383704, 32.994343 ], [ 104.426204, 33.010906 ], [ 104.391711, 33.035493 ], [ 104.337509, 33.038002 ], [ 104.378161, 33.109214 ], [ 104.351059, 33.158828 ], [ 104.32827, 33.223934 ], [ 104.323958, 33.26898 ], [ 104.303632, 33.304499 ], [ 104.333813, 33.315502 ], [ 104.386168, 33.298497 ], [ 104.420045, 33.327004 ], [ 104.373849, 33.345004 ], [ 104.292545, 33.336505 ], [ 104.272219, 33.391486 ], [ 104.22048, 33.404477 ], [ 104.213089, 33.446932 ], [ 104.180444, 33.472895 ], [ 104.155191, 33.542755 ], [ 104.176749, 33.5996 ], [ 104.103452, 33.663381 ], [ 104.046169, 33.686291 ], [ 103.980264, 33.670852 ], [ 103.861388, 33.682307 ], [ 103.778236, 33.658898 ], [ 103.690772, 33.69376 ], [ 103.667983, 33.685793 ], [ 103.645809, 33.708697 ], [ 103.593454, 33.716164 ], [ 103.563889, 33.699735 ], [ 103.552186, 33.671351 ], [ 103.520157, 33.678323 ], [ 103.545411, 33.719649 ], [ 103.518309, 33.807213 ], [ 103.464723, 33.80224 ], [ 103.434542, 33.752993 ], [ 103.35447, 33.743539 ], [ 103.278709, 33.774387 ], [ 103.284868, 33.80224 ], [ 103.24976, 33.814175 ], [ 103.228202, 33.79478 ], [ 103.165376, 33.805721 ], [ 103.153673, 33.819147 ], [ 103.181391, 33.900649 ], [ 103.16476, 33.929454 ], [ 103.1315, 33.931937 ], [ 103.120413, 33.953286 ], [ 103.157369, 33.998944 ], [ 103.147514, 34.036644 ], [ 103.119797, 34.03466 ], [ 103.129652, 34.065899 ], [ 103.178927, 34.079779 ], [ 103.121644, 34.112487 ], [ 103.124108, 34.162022 ], [ 103.100087, 34.181828 ], [ 103.052043, 34.195194 ], [ 103.005848, 34.184798 ], [ 102.973203, 34.205588 ], [ 102.977515, 34.252595 ], [ 102.949181, 34.292159 ], [ 102.911609, 34.312923 ], [ 102.85987, 34.301058 ], [ 102.856791, 34.270895 ], [ 102.798276, 34.272874 ], [ 102.779798, 34.236764 ], [ 102.728675, 34.235774 ], [ 102.694799, 34.198659 ], [ 102.664002, 34.192719 ], [ 102.651067, 34.165983 ], [ 102.598712, 34.14766 ], [ 102.655994, 34.113478 ], [ 102.649219, 34.080275 ], [ 102.615958, 34.099604 ], [ 102.511865, 34.086222 ], [ 102.471213, 34.072839 ], [ 102.437336, 34.087214 ], [ 102.406539, 34.033172 ], [ 102.392372, 33.971651 ], [ 102.345561, 33.969666 ], [ 102.315996, 33.993983 ], [ 102.287047, 33.977607 ], [ 102.248858, 33.98654 ], [ 102.226069, 33.963214 ], [ 102.16817, 33.983066 ], [ 102.136142, 33.965199 ], [ 102.25317, 33.861399 ], [ 102.261177, 33.821136 ], [ 102.243315, 33.786823 ], [ 102.296286, 33.783838 ], [ 102.324619, 33.754486 ], [ 102.284583, 33.719151 ], [ 102.342481, 33.725622 ], [ 102.31538, 33.665374 ], [ 102.346793, 33.605582 ], [ 102.440416, 33.574673 ], [ 102.477988, 33.543254 ], [ 102.446575, 33.53228 ], [ 102.461358, 33.501345 ], [ 102.462589, 33.449429 ], [ 102.447807, 33.454922 ], [ 102.392988, 33.404477 ], [ 102.368967, 33.41247 ], [ 102.310452, 33.397982 ], [ 102.296286, 33.413969 ], [ 102.258098, 33.409472 ], [ 102.218062, 33.349503 ], [ 102.192192, 33.337005 ], [ 102.217446, 33.247961 ], [ 102.200815, 33.223434 ], [ 102.160163, 33.242956 ], [ 102.144765, 33.273983 ], [ 102.117047, 33.288492 ], [ 102.08933, 33.227439 ], [ 102.08933, 33.204908 ], [ 102.054838, 33.189884 ], [ 101.99386, 33.1999 ], [ 101.935345, 33.186879 ], [ 101.921795, 33.153817 ], [ 101.887302, 33.135778 ], [ 101.865744, 33.103198 ], [ 101.825708, 33.119239 ], [ 101.841723, 33.184876 ], [ 101.83002, 33.213921 ], [ 101.770274, 33.248962 ], [ 101.769658, 33.26898 ], [ 101.877447, 33.314502 ], [ 101.887302, 33.383991 ], [ 101.915635, 33.425957 ], [ 101.946432, 33.442937 ], [ 101.906396, 33.48188 ], [ 101.907012, 33.539264 ], [ 101.884222, 33.578163 ], [ 101.844186, 33.602591 ], [ 101.831252, 33.554726 ], [ 101.783208, 33.556721 ], [ 101.769042, 33.538765 ], [ 101.748716, 33.505337 ], [ 101.718535, 33.494857 ], [ 101.622448, 33.502343 ], [ 101.611977, 33.565199 ], [ 101.616905, 33.598603 ], [ 101.585492, 33.645448 ], [ 101.58426, 33.674339 ], [ 101.501724, 33.702723 ], [ 101.428427, 33.680315 ], [ 101.424732, 33.655411 ], [ 101.385312, 33.644949 ], [ 101.302776, 33.657902 ], [ 101.23687, 33.685793 ], [ 101.217776, 33.669856 ], [ 101.166653, 33.659894 ], [ 101.177124, 33.685295 ], [ 101.162957, 33.719649 ], [ 101.186363, 33.741051 ], [ 101.190675, 33.791796 ], [ 101.153102, 33.823124 ], [ 101.153718, 33.8445 ], [ 101.054552, 33.863386 ], [ 101.023139, 33.896178 ], [ 100.994806, 33.891707 ], [ 100.965857, 33.946832 ], [ 100.927669, 33.975126 ], [ 100.93506, 33.990013 ], [ 100.880857, 34.036644 ], [ 100.870386, 34.083744 ], [ 100.848828, 34.089692 ], [ 100.806329, 34.155584 ], [ 100.764445, 34.178857 ], [ 100.809408, 34.247153 ], [ 100.798321, 34.260014 ], [ 100.821727, 34.317371 ], [ 100.868538, 34.332693 ], [ 100.895024, 34.375183 ], [ 100.951074, 34.38358 ], [ 100.986799, 34.374689 ], [ 101.054552, 34.322808 ], [ 101.098284, 34.329233 ], [ 101.178356, 34.320831 ], [ 101.193754, 34.336646 ], [ 101.235022, 34.325279 ], [ 101.228863, 34.298586 ], [ 101.268899, 34.278808 ], [ 101.325565, 34.268423 ], [ 101.327413, 34.24468 ], [ 101.369913, 34.248143 ], [ 101.417956, 34.227858 ], [ 101.482014, 34.218951 ], [ 101.492485, 34.195689 ], [ 101.53868, 34.212022 ], [ 101.6206, 34.178857 ], [ 101.674187, 34.110506 ], [ 101.703136, 34.119424 ], [ 101.718535, 34.083249 ], [ 101.736397, 34.080275 ], [ 101.764114, 34.122892 ], [ 101.788136, 34.131809 ], [ 101.836795, 34.124378 ], [ 101.851578, 34.153108 ], [ 101.874367, 34.130323 ], [ 101.897773, 34.133791 ], [ 101.955055, 34.109514 ], [ 101.965526, 34.167469 ], [ 102.003099, 34.162022 ], [ 102.030816, 34.190739 ], [ 102.01357, 34.218456 ], [ 102.062229, 34.227858 ], [ 102.067772, 34.293642 ], [ 102.149692, 34.271885 ], [ 102.186649, 34.352952 ], [ 102.237156, 34.34307 ], [ 102.237156, 34.34307 ], [ 102.259329, 34.355917 ], [ 102.205743, 34.407777 ], [ 102.169402, 34.457631 ], [ 102.155852, 34.507456 ], [ 102.139837, 34.50351 ], [ 102.093026, 34.536547 ], [ 102.001867, 34.538519 ], [ 101.97415, 34.548871 ], [ 101.956287, 34.582876 ], [ 101.934729, 34.58731 ], [ 101.919947, 34.621791 ], [ 101.917483, 34.705964 ], [ 101.923027, 34.835746 ], [ 101.916867, 34.873561 ], [ 101.985852, 34.90007 ], [ 102.068388, 34.887798 ], [ 102.048062, 34.910868 ], [ 102.094874, 34.986901 ], [ 102.133678, 35.014844 ], [ 102.157699, 35.010923 ], [ 102.176178, 35.032977 ], [ 102.211286, 35.034937 ], [ 102.218062, 35.057475 ], [ 102.252554, 35.048657 ], [ 102.29567, 35.071681 ], [ 102.310452, 35.128967 ], [ 102.346793, 35.164201 ], [ 102.404075, 35.179366 ], [ 102.365887, 35.235599 ], [ 102.370199, 35.263946 ], [ 102.3123, 35.282512 ], [ 102.280887, 35.303028 ], [ 102.311684, 35.31426 ], [ 102.317844, 35.343067 ], [ 102.287663, 35.36552 ], [ 102.293822, 35.424063 ], [ 102.314764, 35.434303 ], [ 102.408387, 35.409431 ], [ 102.447807, 35.437229 ], [ 102.437952, 35.455268 ], [ 102.49893, 35.545403 ], [ 102.503241, 35.585322 ], [ 102.531575, 35.580455 ], [ 102.570995, 35.548324 ], [ 102.695414, 35.528358 ], [ 102.743458, 35.494745 ], [ 102.782878, 35.527871 ], [ 102.729291, 35.523487 ], [ 102.746537, 35.545403 ], [ 102.808747, 35.560496 ], [ 102.763168, 35.612086 ], [ 102.7644, 35.653431 ], [ 102.744074, 35.657807 ], [ 102.707733, 35.70496 ], [ 102.686175, 35.771996 ], [ 102.715125, 35.815685 ], [ 102.739146, 35.821023 ], [ 102.787189, 35.862745 ], [ 102.81737, 35.850133 ], [ 102.914073, 35.845282 ], [ 102.94487, 35.829757 ], [ 102.954725, 35.858864 ], [ 102.942406, 35.92674 ], [ 102.971971, 35.995525 ], [ 102.951645, 36.021667 ], [ 102.968276, 36.044414 ], [ 102.932551, 36.048285 ], [ 102.882044, 36.082632 ], [ 102.941174, 36.104877 ], [ 102.948566, 36.150798 ], [ 102.965812, 36.151765 ], [ 102.986754, 36.193312 ], [ 103.048964, 36.199107 ], [ 103.066826, 36.216974 ], [ 103.021246, 36.232906 ], [ 103.024942, 36.256556 ], [ 102.922696, 36.298047 ], [ 102.896827, 36.331803 ], [ 102.845704, 36.331803 ], [ 102.836465, 36.344819 ], [ 102.838928, 36.345783 ], [ 102.831537, 36.365544 ], [ 102.829689, 36.365544 ], [ 102.771791, 36.47438 ], [ 102.793349, 36.497957 ], [ 102.753313, 36.525855 ], [ 102.734219, 36.562396 ], [ 102.761936, 36.568645 ], [ 102.714509, 36.599401 ], [ 102.724364, 36.613813 ], [ 102.684328, 36.619097 ], [ 102.630741, 36.650793 ], [ 102.601176, 36.710307 ], [ 102.612879, 36.738129 ], [ 102.639364, 36.732853 ], [ 102.692335, 36.775528 ], [ 102.720052, 36.767858 ], [ 102.639364, 36.852666 ], [ 102.587009, 36.869904 ], [ 102.56114, 36.91968 ], [ 102.526031, 36.928291 ], [ 102.499546, 36.954599 ], [ 102.450271, 36.968467 ], [ 102.506321, 37.019134 ], [ 102.488459, 37.078362 ], [ 102.583314, 37.104618 ], [ 102.642444, 37.099845 ], [ 102.599944, 37.174748 ], [ 102.578386, 37.17284 ], [ 102.533422, 37.217176 ], [ 102.490307, 37.223371 ], [ 102.457662, 37.248147 ], [ 102.45335, 37.271487 ], [ 102.419474, 37.294343 ], [ 102.428097, 37.308624 ], [ 102.368351, 37.327662 ], [ 102.29875, 37.370004 ], [ 102.299981, 37.391404 ], [ 102.19712, 37.420403 ], [ 102.176794, 37.458892 ], [ 102.125055, 37.48549 ], [ 102.103497, 37.482641 ], [ 102.131214, 37.54625 ], [ 102.102265, 37.582304 ], [ 102.035128, 37.627819 ], [ 102.048678, 37.651515 ], [ 102.036359, 37.685149 ], [ 101.998787, 37.724921 ], [ 101.946432, 37.728235 ], [ 101.873135, 37.686569 ], [ 101.854657, 37.664781 ], [ 101.815853, 37.654357 ], [ 101.791832, 37.696041 ], [ 101.659405, 37.733441 ], [ 101.670491, 37.754264 ], [ 101.598427, 37.827569 ], [ 101.551615, 37.835604 ], [ 101.459224, 37.86632 ], [ 101.382848, 37.822369 ], [ 101.362522, 37.791162 ], [ 101.276906, 37.83655 ], [ 101.202994, 37.84742 ], [ 101.159262, 37.86821 ], [ 101.152486, 37.891356 ], [ 101.114298, 37.92016 ], [ 101.103211, 37.946593 ], [ 101.077342, 37.941874 ], [ 100.964009, 38.011221 ], [ 100.91843, 37.999432 ], [ 100.895024, 38.013107 ], [ 100.888864, 38.056001 ], [ 100.922125, 38.084741 ], [ 100.91843, 38.129006 ], [ 100.93814, 38.16007 ], [ 100.913502, 38.17889 ], [ 100.860531, 38.148305 ], [ 100.825423, 38.158658 ], [ 100.752126, 38.238612 ], [ 100.71517, 38.253652 ], [ 100.619083, 38.26587 ], [ 100.595061, 38.242372 ], [ 100.545786, 38.247072 ], [ 100.516837, 38.272448 ], [ 100.474953, 38.288891 ], [ 100.459555, 38.2654 ], [ 100.432453, 38.275267 ], [ 100.424446, 38.307208 ], [ 100.396729, 38.293118 ], [ 100.318505, 38.329276 ], [ 100.331439, 38.337257 ], [ 100.301874, 38.388405 ], [ 100.259374, 38.366355 ], [ 100.24028, 38.441861 ], [ 100.163288, 38.461546 ], [ 100.113397, 38.497151 ], [ 100.086911, 38.492936 ], [ 100.064122, 38.518694 ], [ 100.025933, 38.507923 ], [ 100.001296, 38.467169 ], [ 100.022238, 38.432017 ], [ 100.093071, 38.407166 ], [ 100.136803, 38.33444 ], [ 100.163904, 38.328337 ], [ 100.159592, 38.291239 ], [ 100.182998, 38.222158 ], [ 100.126332, 38.231561 ], [ 100.117093, 38.253652 ], [ 100.071513, 38.284663 ], [ 100.049955, 38.283254 ], [ 100.001912, 38.315191 ], [ 99.960028, 38.320825 ], [ 99.826985, 38.370109 ], [ 99.758, 38.410449 ], [ 99.727203, 38.415607 ], [ 99.65945, 38.449361 ], [ 99.63974, 38.474666 ], [ 99.585537, 38.498556 ], [ 99.52887, 38.546314 ], [ 99.501769, 38.612281 ], [ 99.450646, 38.60433 ], [ 99.412458, 38.665571 ], [ 99.375502, 38.684727 ], [ 99.361951, 38.718354 ], [ 99.291118, 38.765966 ], [ 99.222133, 38.788827 ], [ 99.141445, 38.852706 ], [ 99.068764, 38.896968 ], [ 99.071843, 38.921184 ], [ 99.107568, 38.951907 ], [ 99.054597, 38.97657 ], [ 98.951735, 38.987735 ], [ 98.903076, 39.012384 ], [ 98.886446, 39.040744 ], [ 98.818076, 39.064911 ], [ 98.816845, 39.085818 ], [ 98.743548, 39.086747 ], [ 98.730613, 39.057011 ], [ 98.70536, 39.043533 ], [ 98.661628, 38.993782 ], [ 98.612353, 38.977035 ], [ 98.624056, 38.959353 ], [ 98.584635, 38.93003 ], [ 98.526737, 38.95563 ], [ 98.457752, 38.952838 ], [ 98.428187, 38.976104 ], [ 98.432498, 38.996107 ], [ 98.401086, 39.001688 ], [ 98.383839, 39.029588 ], [ 98.316702, 39.040744 ], [ 98.280977, 39.027263 ], [ 98.287753, 38.992386 ], [ 98.276666, 38.963541 ], [ 98.235398, 38.918855 ], [ 98.242173, 38.880664 ], [ 98.167645, 38.840121 ], [ 98.091884, 38.786495 ], [ 98.068478, 38.816344 ], [ 98.029058, 38.834061 ], [ 98.009348, 38.85923 ], [ 97.875689, 38.898365 ], [ 97.828878, 38.93003 ], [ 97.701379, 38.963076 ], [ 97.679205, 39.010524 ], [ 97.58127, 39.052364 ], [ 97.504894, 39.076527 ], [ 97.458698, 39.117863 ], [ 97.401416, 39.146645 ], [ 97.371235, 39.140611 ], [ 97.347213, 39.167528 ], [ 97.315185, 39.164744 ], [ 97.220946, 39.193042 ], [ 97.14149, 39.199999 ], [ 97.060186, 39.19768 ], [ 97.017686, 39.208347 ], [ 96.962251, 39.198144 ], [ 97.012142, 39.142004 ], [ 96.969643, 39.097895 ], [ 96.95794, 39.041674 ], [ 96.965331, 39.017034 ], [ 96.938846, 38.95563 ], [ 96.940693, 38.90768 ], [ 96.983809, 38.869016 ], [ 96.993664, 38.834993 ], [ 96.987505, 38.793025 ], [ 97.00044, 38.7613 ], [ 97.023229, 38.755699 ], [ 97.009063, 38.702477 ], [ 97.057722, 38.67258 ], [ 97.047251, 38.653888 ], [ 97.055874, 38.594508 ], [ 96.961019, 38.558015 ], [ 96.876636, 38.580475 ], [ 96.847071, 38.599186 ], [ 96.7941, 38.608072 ], [ 96.808882, 38.582346 ], [ 96.767614, 38.552399 ], [ 96.800259, 38.52759 ], [ 96.780549, 38.504177 ], [ 96.706637, 38.505582 ], [ 96.6666, 38.483567 ], [ 96.707868, 38.459203 ], [ 96.698013, 38.422172 ], [ 96.626564, 38.356031 ], [ 96.638883, 38.307208 ], [ 96.655514, 38.295936 ], [ 96.665369, 38.23015 ], [ 96.46334, 38.277616 ], [ 96.378341, 38.277146 ], [ 96.335841, 38.246132 ], [ 96.301964, 38.183124 ], [ 96.313051, 38.161952 ], [ 96.264392, 38.145952 ], [ 96.252689, 38.167599 ], [ 96.221892, 38.149246 ], [ 96.109175, 38.187358 ], [ 96.06606, 38.173245 ], [ 96.006929, 38.207582 ], [ 95.93856, 38.237202 ], [ 95.932401, 38.259291 ], [ 95.89606, 38.2903 ], [ 95.852945, 38.287481 ], [ 95.83693, 38.344298 ], [ 95.775952, 38.356031 ], [ 95.723597, 38.378554 ], [ 95.703887, 38.400131 ], [ 95.671858, 38.388405 ], [ 95.608417, 38.339134 ], [ 95.585011, 38.343359 ], [ 95.51849, 38.294997 ], [ 95.487693, 38.314721 ], [ 95.455664, 38.291709 ], [ 95.440881, 38.310965 ], [ 95.408236, 38.300163 ], [ 95.315846, 38.318947 ], [ 95.259179, 38.302981 ], [ 95.229614, 38.330685 ], [ 95.209904, 38.327868 ], [ 95.185266, 38.379492 ], [ 95.140919, 38.392158 ], [ 95.122441, 38.417014 ], [ 95.072549, 38.402476 ], [ 95.045448, 38.418889 ], [ 94.973999, 38.430142 ], [ 94.884072, 38.414669 ], [ 94.861282, 38.393565 ], [ 94.812623, 38.385591 ], [ 94.672805, 38.386998 ], [ 94.582878, 38.36917 ], [ 94.56132, 38.351807 ], [ 94.527443, 38.365416 ], [ 94.527443, 38.425922 ], [ 94.511429, 38.445142 ], [ 94.370379, 38.7627 ], [ 94.281067, 38.7599 ], [ 93.973098, 38.724891 ], [ 93.95154, 38.715086 ], [ 93.885018, 38.720689 ], [ 93.800019, 38.750566 ], [ 93.773533, 38.771099 ], [ 93.756287, 38.807484 ], [ 93.769838, 38.821007 ], [ 93.884403, 38.826136 ], [ 93.884403, 38.867618 ], [ 93.834511, 38.867618 ], [ 93.729186, 38.924443 ], [ 93.453245, 38.915596 ], [ 93.274007, 38.896036 ], [ 93.237666, 38.916062 ], [ 93.179152, 38.923977 ], [ 93.198246, 39.045857 ], [ 93.165601, 39.090928 ], [ 93.131725, 39.108112 ], [ 93.142196, 39.160567 ], [ 93.115094, 39.17959 ], [ 93.043029, 39.146645 ], [ 92.978356, 39.143396 ], [ 92.938936, 39.169848 ], [ 92.889045, 39.160103 ], [ 92.866871, 39.138754 ], [ 92.765857, 39.136898 ], [ 92.659299, 39.109969 ], [ 92.545966, 39.111362 ], [ 92.489916, 39.099753 ], [ 92.459119, 39.063982 ], [ 92.459119, 39.042604 ], [ 92.41046, 39.03842 ], [ 92.366728, 39.059335 ], [ 92.366112, 39.096037 ], [ 92.343938, 39.146181 ], [ 92.339011, 39.236628 ], [ 92.378431, 39.258411 ], [ 92.52564, 39.368611 ], [ 92.639589, 39.514196 ], [ 92.687632, 39.657174 ], [ 92.745531, 39.868331 ], [ 92.796654, 40.153897 ], [ 92.906907, 40.310609 ], [ 92.920458, 40.391792 ], [ 92.928465, 40.572504 ], [ 93.506216, 40.648376 ], [ 93.760599, 40.664721 ], [ 93.820961, 40.793519 ], [ 93.809874, 40.879548 ], [ 93.908424, 40.983539 ], [ 94.01067, 41.114875 ], [ 94.184365, 41.268444 ], [ 94.534219, 41.505966 ], [ 94.750413, 41.538227 ], [ 94.809543, 41.619256 ], [ 94.861898, 41.668451 ], [ 94.969072, 41.718948 ], [ 95.011572, 41.726541 ], [ 95.110738, 41.768513 ], [ 95.135991, 41.772976 ], [ 95.16494, 41.735474 ], [ 95.199433, 41.719395 ], [ 95.194505, 41.694821 ], [ 95.247476, 41.61344 ], [ 95.299831, 41.565994 ], [ 95.335556, 41.644305 ], [ 95.39407, 41.693481 ], [ 95.445193, 41.719841 ], [ 95.57146, 41.796181 ], [ 95.65646, 41.826067 ], [ 95.759322, 41.835878 ], [ 95.801206, 41.848361 ], [ 95.855408, 41.849699 ], [ 95.998306, 41.906289 ], [ 96.054973, 41.936124 ], [ 96.117183, 41.985966 ], [ 96.137509, 42.019765 ], [ 96.13874, 42.05399 ], [ 96.077147, 42.149457 ], [ 96.178161, 42.21775 ], [ 96.040806, 42.326688 ], [ 96.042038, 42.352787 ], [ 96.06606, 42.414674 ], [ 95.978596, 42.436762 ], [ 96.0174, 42.482239 ], [ 96.02356, 42.542675 ], [ 96.072219, 42.569566 ], [ 96.103632, 42.604375 ], [ 96.166458, 42.623314 ], [ 96.386348, 42.727592 ], [ 96.742361, 42.75704 ], [ 96.968411, 42.756161 ], [ 97.172903, 42.795257 ], [ 97.371235, 42.457076 ], [ 97.500582, 42.243894 ], [ 97.653335, 41.986856 ], [ 97.84674, 41.656379 ], [ 97.613915, 41.477276 ], [ 97.629314, 41.440498 ], [ 97.903407, 41.168057 ], [ 97.971776, 41.09774 ], [ 98.142391, 41.001607 ], [ 98.184891, 40.988056 ], [ 98.25018, 40.93925 ], [ 98.333332, 40.918903 ], [ 98.344419, 40.568413 ], [ 98.627751, 40.677884 ], [ 98.569853, 40.746836 ], [ 98.668403, 40.773128 ], [ 98.689345, 40.691952 ], [ 98.72199, 40.657911 ], [ 98.762642, 40.639748 ], [ 98.802678, 40.607043 ], [ 98.80699, 40.660181 ], [ 98.790975, 40.705564 ], [ 98.984996, 40.782644 ], [ 99.041662, 40.693767 ], [ 99.102025, 40.676522 ], [ 99.12543, 40.715091 ], [ 99.172858, 40.747289 ], [ 99.174705, 40.858278 ], [ 99.565827, 40.846961 ], [ 99.673, 40.93292 ], [ 99.985897, 40.909858 ], [ 100.057346, 40.908049 ], [ 100.107853, 40.875475 ], [ 100.224882, 40.727337 ], [ 100.237201, 40.716905 ], [ 100.242744, 40.618855 ], [ 100.169447, 40.541131 ], [ 100.169447, 40.277743 ], [ 100.007455, 40.20008 ], [ 99.955716, 40.150695 ], [ 99.927383, 40.063727 ], [ 99.841152, 40.013326 ], [ 99.751225, 40.006909 ], [ 99.714268, 39.972061 ], [ 99.533182, 39.891753 ], [ 99.491298, 39.884406 ], [ 99.459885, 39.898181 ], [ 99.440791, 39.885783 ], [ 99.469124, 39.875221 ], [ 99.672384, 39.888079 ], [ 99.822058, 39.860063 ], [ 99.904593, 39.785601 ], [ 99.958796, 39.769504 ], [ 100.040716, 39.757083 ], [ 100.128179, 39.702312 ], [ 100.250135, 39.685274 ], [ 100.314193, 39.606935 ], [ 100.301258, 39.572345 ], [ 100.326512, 39.509118 ], [ 100.44354, 39.485565 ], [ 100.500823, 39.481408 ], [ 100.498975, 39.400527 ], [ 100.606764, 39.387577 ], [ 100.707778, 39.404689 ], [ 100.842053, 39.405614 ], [ 100.842669, 39.199999 ], [ 100.864227, 39.106719 ], [ 100.829118, 39.075133 ], [ 100.835278, 39.025869 ], [ 100.875314, 39.002619 ], [ 100.901799, 39.030053 ], [ 100.961545, 39.005874 ], [ 100.969553, 38.946788 ], [ 101.117378, 38.975174 ], [ 101.228863, 39.020754 ], [ 101.198682, 38.943064 ], [ 101.237486, 38.907214 ], [ 101.24303, 38.860628 ], [ 101.33542, 38.847113 ], [ 101.34158, 38.822406 ], [ 101.307087, 38.80282 ], [ 101.331109, 38.777164 ], [ 101.412413, 38.764099 ], [ 101.562702, 38.713218 ], [ 101.601506, 38.65529 ], [ 101.672955, 38.6908 ], [ 101.777049, 38.66043 ], [ 101.873751, 38.733761 ], [ 101.941505, 38.808883 ], [ 102.075164, 38.891378 ], [ 102.045599, 38.904885 ], [ 101.955055, 38.985874 ], [ 101.926106, 39.000758 ], [ 101.833715, 39.08907 ], [ 101.902701, 39.111827 ], [ 102.012338, 39.127149 ], [ 102.050526, 39.141075 ], [ 102.276576, 39.188868 ], [ 102.3548, 39.231993 ], [ 102.45335, 39.255167 ], [ 102.579002, 39.183301 ], [ 102.616574, 39.171703 ], [ 102.883892, 39.120649 ], [ 103.007696, 39.099753 ], [ 103.133347, 39.192579 ], [ 103.188166, 39.215302 ], [ 103.259615, 39.263971 ], [ 103.344615, 39.331588 ], [ 103.428998, 39.353341 ], [ 103.595302, 39.386652 ], [ 103.728961, 39.430117 ], [ 103.85338, 39.461543 ], [ 103.955626, 39.456923 ], [ 104.089901, 39.419947 ], [ 104.073271, 39.351953 ], [ 104.047401, 39.297788 ], [ 104.171205, 39.160567 ], [ 104.207546, 39.083495 ], [ 104.190915, 39.042139 ], [ 104.196459, 38.9882 ], [ 104.173053, 38.94446 ], [ 104.044322, 38.895105 ], [ 104.011677, 38.85923 ], [ 103.85954, 38.64454 ], [ 103.416063, 38.404821 ], [ 103.465339, 38.353215 ], [ 103.507838, 38.280905 ], [ 103.53494, 38.156776 ], [ 103.368636, 38.08898 ], [ 103.362477, 38.037621 ], [ 103.40744, 37.860651 ], [ 103.627947, 37.797783 ], [ 103.683381, 37.777919 ], [ 103.841062, 37.64725 ], [ 103.874938, 37.604117 ], [ 103.935916, 37.572818 ], [ 104.089285, 37.465067 ], [ 104.183524, 37.406618 ], [ 104.237727, 37.411847 ], [ 104.287002, 37.428007 ], [ 104.298705, 37.414223 ], [ 104.365226, 37.418026 ], [ 104.437907, 37.445589 ], [ 104.448994, 37.42468 ], [ 104.499501, 37.421353 ], [ 104.521059, 37.43466 ], [ 104.679971, 37.408044 ], [ 104.662109, 37.367626 ], [ 104.713848, 37.329566 ], [ 104.673812, 37.317668 ], [ 104.651022, 37.290534 ], [ 104.624536, 37.298627 ], [ 104.600515, 37.242907 ], [ 104.638087, 37.201923 ], [ 104.717543, 37.208597 ], [ 104.776673, 37.246718 ], [ 104.85613, 37.211933 ], [ 104.864753, 37.17284 ], [ 104.888158, 37.15901 ], [ 104.914644, 37.097935 ], [ 104.954064, 37.077407 ], [ 104.95468, 37.040156 ], [ 105.004571, 37.035378 ], [ 105.03968, 37.007187 ], [ 105.05939, 37.022956 ], [ 105.128991, 36.996194 ], [ 105.165331, 36.99476 ], [ 105.185657, 36.942164 ], [ 105.178882, 36.892403 ], [ 105.244787, 36.894796 ], [ 105.279896, 36.86751 ], [ 105.303302, 36.820575 ], [ 105.334714, 36.80093 ], [ 105.340874, 36.764502 ], [ 105.319932, 36.742924 ], [ 105.275584, 36.752515 ], [ 105.272505, 36.739567 ], [ 105.218302, 36.730455 ], [ 105.201056, 36.700711 ], [ 105.225693, 36.664716 ], [ 105.22015, 36.631105 ], [ 105.261418, 36.602764 ], [ 105.2762, 36.563358 ], [ 105.252179, 36.553263 ], [ 105.281744, 36.522489 ], [ 105.322396, 36.535954 ], [ 105.362432, 36.496514 ], [ 105.363048, 36.443093 ], [ 105.398156, 36.430575 ], [ 105.401236, 36.369881 ], [ 105.425873, 36.330357 ], [ 105.455439, 36.321678 ], [ 105.476381, 36.293224 ], [ 105.45975, 36.268137 ], [ 105.460366, 36.223733 ], [ 105.478844, 36.213111 ], [ 105.515185, 36.147415 ], [ 105.491163, 36.101009 ], [ 105.430801, 36.10391 ], [ 105.406163, 36.074409 ], [ 105.343954, 36.033767 ], [ 105.324859, 35.941761 ], [ 105.350113, 35.875839 ], [ 105.39754, 35.857409 ], [ 105.371055, 35.844312 ], [ 105.38091, 35.792873 ], [ 105.408627, 35.822479 ], [ 105.428953, 35.819082 ], [ 105.432033, 35.787533 ], [ 105.457286, 35.771511 ], [ 105.481924, 35.727312 ], [ 105.595873, 35.715651 ], [ 105.667322, 35.749657 ], [ 105.70243, 35.733142 ], [ 105.759097, 35.724883 ], [ 105.740618, 35.698643 ], [ 105.723988, 35.725854 ], [ 105.690727, 35.698643 ], [ 105.722756, 35.673366 ], [ 105.713517, 35.650513 ], [ 105.759097, 35.634464 ], [ 105.762176, 35.602841 ], [ 105.800365, 35.564878 ], [ 105.816379, 35.575101 ], [ 105.847176, 35.490359 ], [ 105.868734, 35.540046 ], [ 105.900147, 35.54735 ], [ 106.017175, 35.519103 ], [ 106.023335, 35.49377 ], [ 106.047356, 35.498155 ], [ 106.048588, 35.488898 ], [ 105.897683, 35.451368 ], [ 105.894603, 35.413821 ], [ 106.002393, 35.438692 ], [ 106.034422, 35.469404 ], [ 106.054132, 35.45478 ], [ 106.071994, 35.463555 ], [ 106.06953, 35.458193 ], [ 106.071378, 35.449418 ], [ 106.073226, 35.447468 ], [ 106.067682, 35.436254 ], [ 106.073226, 35.420649 ], [ 106.083081, 35.421624 ], [ 106.113262, 35.361616 ], [ 106.129892, 35.393333 ], [ 106.173008, 35.437716 ], [ 106.196414, 35.409919 ], [ 106.237681, 35.409431 ], [ 106.241377, 35.358687 ], [ 106.319601, 35.265411 ], [ 106.363333, 35.238532 ], [ 106.368261, 35.273718 ], [ 106.415688, 35.276161 ], [ 106.472354, 35.310842 ], [ 106.501304, 35.364056 ], [ 106.503767, 35.415284 ], [ 106.483441, 35.450393 ], [ 106.490217, 35.480613 ], [ 106.465579, 35.481101 ], [ 106.440941, 35.52641 ], [ 106.460036, 35.578995 ], [ 106.47913, 35.575101 ], [ 106.460036, 35.643705 ], [ 106.434782, 35.688436 ], [ 106.49268, 35.732656 ], [ 106.498224, 35.732656 ], [ 106.504383, 35.736057 ], [ 106.506231, 35.737514 ] ] ], [ [ [ 106.047356, 35.498155 ], [ 106.078769, 35.509848 ], [ 106.071994, 35.463555 ], [ 106.054132, 35.45478 ], [ 106.048588, 35.488898 ], [ 106.047356, 35.498155 ] ] ], [ [ [ 102.831537, 36.365544 ], [ 102.838928, 36.345783 ], [ 102.836465, 36.344819 ], [ 102.829689, 36.365544 ], [ 102.831537, 36.365544 ] ] ], [ [ [ 106.073226, 35.447468 ], [ 106.083081, 35.421624 ], [ 106.073226, 35.420649 ], [ 106.067682, 35.436254 ], [ 106.073226, 35.447468 ] ] ], [ [ [ 106.504383, 35.736057 ], [ 106.498224, 35.732656 ], [ 106.49268, 35.732656 ], [ 106.506231, 35.737514 ], [ 106.504383, 35.736057 ] ] ] ] } }, +{ "type": "Feature", "properties": { "adcode": "630000", "name": "青海省", "center": [ 101.778916, 36.623178 ], "centroid": [ 96.043533, 35.726403 ], "childrenNum": 8, "level": "province", "parent": { "adcode": 100000 }, "subFeatureIndex": 28, "acroutes": [ 100000 ] }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 102.829689, 36.365544 ], [ 102.836465, 36.344819 ], [ 102.845704, 36.331803 ], [ 102.896827, 36.331803 ], [ 102.922696, 36.298047 ], [ 103.024942, 36.256556 ], [ 103.021246, 36.232906 ], [ 103.066826, 36.216974 ], [ 103.048964, 36.199107 ], [ 102.986754, 36.193312 ], [ 102.965812, 36.151765 ], [ 102.948566, 36.150798 ], [ 102.941174, 36.104877 ], [ 102.882044, 36.082632 ], [ 102.932551, 36.048285 ], [ 102.968276, 36.044414 ], [ 102.951645, 36.021667 ], [ 102.971971, 35.995525 ], [ 102.942406, 35.92674 ], [ 102.954725, 35.858864 ], [ 102.94487, 35.829757 ], [ 102.914073, 35.845282 ], [ 102.81737, 35.850133 ], [ 102.787189, 35.862745 ], [ 102.739146, 35.821023 ], [ 102.715125, 35.815685 ], [ 102.686175, 35.771996 ], [ 102.707733, 35.70496 ], [ 102.744074, 35.657807 ], [ 102.7644, 35.653431 ], [ 102.763168, 35.612086 ], [ 102.808747, 35.560496 ], [ 102.746537, 35.545403 ], [ 102.729291, 35.523487 ], [ 102.782878, 35.527871 ], [ 102.743458, 35.494745 ], [ 102.695414, 35.528358 ], [ 102.570995, 35.548324 ], [ 102.531575, 35.580455 ], [ 102.503241, 35.585322 ], [ 102.49893, 35.545403 ], [ 102.437952, 35.455268 ], [ 102.447807, 35.437229 ], [ 102.408387, 35.409431 ], [ 102.314764, 35.434303 ], [ 102.293822, 35.424063 ], [ 102.287663, 35.36552 ], [ 102.317844, 35.343067 ], [ 102.311684, 35.31426 ], [ 102.280887, 35.303028 ], [ 102.3123, 35.282512 ], [ 102.370199, 35.263946 ], [ 102.365887, 35.235599 ], [ 102.404075, 35.179366 ], [ 102.346793, 35.164201 ], [ 102.310452, 35.128967 ], [ 102.29567, 35.071681 ], [ 102.252554, 35.048657 ], [ 102.218062, 35.057475 ], [ 102.211286, 35.034937 ], [ 102.176178, 35.032977 ], [ 102.157699, 35.010923 ], [ 102.133678, 35.014844 ], [ 102.094874, 34.986901 ], [ 102.048062, 34.910868 ], [ 102.068388, 34.887798 ], [ 101.985852, 34.90007 ], [ 101.916867, 34.873561 ], [ 101.923027, 34.835746 ], [ 101.917483, 34.705964 ], [ 101.919947, 34.621791 ], [ 101.934729, 34.58731 ], [ 101.956287, 34.582876 ], [ 101.97415, 34.548871 ], [ 102.001867, 34.538519 ], [ 102.093026, 34.536547 ], [ 102.139837, 34.50351 ], [ 102.155852, 34.507456 ], [ 102.169402, 34.457631 ], [ 102.205743, 34.407777 ], [ 102.259329, 34.355917 ], [ 102.237156, 34.34307 ], [ 102.237156, 34.34307 ], [ 102.186649, 34.352952 ], [ 102.149692, 34.271885 ], [ 102.067772, 34.293642 ], [ 102.062229, 34.227858 ], [ 102.01357, 34.218456 ], [ 102.030816, 34.190739 ], [ 102.003099, 34.162022 ], [ 101.965526, 34.167469 ], [ 101.955055, 34.109514 ], [ 101.897773, 34.133791 ], [ 101.874367, 34.130323 ], [ 101.851578, 34.153108 ], [ 101.836795, 34.124378 ], [ 101.788136, 34.131809 ], [ 101.764114, 34.122892 ], [ 101.736397, 34.080275 ], [ 101.718535, 34.083249 ], [ 101.703136, 34.119424 ], [ 101.674187, 34.110506 ], [ 101.6206, 34.178857 ], [ 101.53868, 34.212022 ], [ 101.492485, 34.195689 ], [ 101.482014, 34.218951 ], [ 101.417956, 34.227858 ], [ 101.369913, 34.248143 ], [ 101.327413, 34.24468 ], [ 101.325565, 34.268423 ], [ 101.268899, 34.278808 ], [ 101.228863, 34.298586 ], [ 101.235022, 34.325279 ], [ 101.193754, 34.336646 ], [ 101.178356, 34.320831 ], [ 101.098284, 34.329233 ], [ 101.054552, 34.322808 ], [ 100.986799, 34.374689 ], [ 100.951074, 34.38358 ], [ 100.895024, 34.375183 ], [ 100.868538, 34.332693 ], [ 100.821727, 34.317371 ], [ 100.798321, 34.260014 ], [ 100.809408, 34.247153 ], [ 100.764445, 34.178857 ], [ 100.806329, 34.155584 ], [ 100.848828, 34.089692 ], [ 100.870386, 34.083744 ], [ 100.880857, 34.036644 ], [ 100.93506, 33.990013 ], [ 100.927669, 33.975126 ], [ 100.965857, 33.946832 ], [ 100.994806, 33.891707 ], [ 101.023139, 33.896178 ], [ 101.054552, 33.863386 ], [ 101.153718, 33.8445 ], [ 101.153102, 33.823124 ], [ 101.190675, 33.791796 ], [ 101.186363, 33.741051 ], [ 101.162957, 33.719649 ], [ 101.177124, 33.685295 ], [ 101.166653, 33.659894 ], [ 101.217776, 33.669856 ], [ 101.23687, 33.685793 ], [ 101.302776, 33.657902 ], [ 101.385312, 33.644949 ], [ 101.424732, 33.655411 ], [ 101.428427, 33.680315 ], [ 101.501724, 33.702723 ], [ 101.58426, 33.674339 ], [ 101.585492, 33.645448 ], [ 101.616905, 33.598603 ], [ 101.611977, 33.565199 ], [ 101.622448, 33.502343 ], [ 101.718535, 33.494857 ], [ 101.748716, 33.505337 ], [ 101.769042, 33.538765 ], [ 101.777665, 33.533776 ], [ 101.769042, 33.45592 ], [ 101.695745, 33.433948 ], [ 101.663716, 33.383991 ], [ 101.64955, 33.323004 ], [ 101.677883, 33.297497 ], [ 101.735781, 33.279987 ], [ 101.709912, 33.21292 ], [ 101.653861, 33.162835 ], [ 101.661252, 33.135778 ], [ 101.633535, 33.101193 ], [ 101.557775, 33.167344 ], [ 101.515275, 33.192889 ], [ 101.487557, 33.226938 ], [ 101.403174, 33.225436 ], [ 101.386543, 33.207412 ], [ 101.393935, 33.157826 ], [ 101.381616, 33.153316 ], [ 101.297232, 33.262475 ], [ 101.217776, 33.256469 ], [ 101.182668, 33.26948 ], [ 101.156798, 33.236449 ], [ 101.124769, 33.221431 ], [ 101.11553, 33.194893 ], [ 101.169733, 33.10019 ], [ 101.143863, 33.086151 ], [ 101.146327, 33.056563 ], [ 101.184515, 33.041514 ], [ 101.171581, 33.009902 ], [ 101.183899, 32.984304 ], [ 101.129081, 32.989324 ], [ 101.134624, 32.95217 ], [ 101.124153, 32.909976 ], [ 101.178356, 32.892892 ], [ 101.223935, 32.855698 ], [ 101.237486, 32.825026 ], [ 101.22332, 32.725898 ], [ 101.157414, 32.661431 ], [ 101.124769, 32.658408 ], [ 101.077342, 32.68259 ], [ 101.030531, 32.660424 ], [ 100.99727, 32.627668 ], [ 100.956618, 32.621116 ], [ 100.93198, 32.600447 ], [ 100.887633, 32.632708 ], [ 100.834046, 32.648835 ], [ 100.77122, 32.643795 ], [ 100.690532, 32.678056 ], [ 100.71209, 32.645307 ], [ 100.710242, 32.610026 ], [ 100.673286, 32.628172 ], [ 100.661583, 32.616075 ], [ 100.657887, 32.546484 ], [ 100.645568, 32.526303 ], [ 100.603069, 32.553547 ], [ 100.54517, 32.569687 ], [ 100.516837, 32.632204 ], [ 100.470026, 32.694678 ], [ 100.450932, 32.694678 ], [ 100.420135, 32.73194 ], [ 100.378251, 32.698707 ], [ 100.399193, 32.756101 ], [ 100.339447, 32.719353 ], [ 100.258759, 32.742511 ], [ 100.231041, 32.696189 ], [ 100.229809, 32.650346 ], [ 100.208252, 32.606497 ], [ 100.189773, 32.630692 ], [ 100.109701, 32.640268 ], [ 100.088143, 32.668988 ], [ 100.139266, 32.724388 ], [ 100.117093, 32.802392 ], [ 100.123252, 32.837095 ], [ 100.064738, 32.895907 ], [ 100.029629, 32.895907 ], [ 100.038252, 32.929066 ], [ 99.956332, 32.948152 ], [ 99.947709, 32.986814 ], [ 99.877492, 33.045527 ], [ 99.877492, 32.993339 ], [ 99.851007, 32.941623 ], [ 99.805427, 32.940619 ], [ 99.788181, 32.956689 ], [ 99.764159, 32.924545 ], [ 99.791877, 32.883344 ], [ 99.766623, 32.826032 ], [ 99.760464, 32.769689 ], [ 99.717964, 32.732443 ], [ 99.705029, 32.76516 ], [ 99.646515, 32.774721 ], [ 99.640355, 32.790822 ], [ 99.589233, 32.789312 ], [ 99.558436, 32.839106 ], [ 99.45311, 32.862233 ], [ 99.376118, 32.899927 ], [ 99.353944, 32.885354 ], [ 99.268944, 32.878318 ], [ 99.24677, 32.924043 ], [ 99.235067, 32.982296 ], [ 99.214741, 32.991332 ], [ 99.196263, 33.035493 ], [ 99.124814, 33.046028 ], [ 99.090322, 33.079131 ], [ 99.024416, 33.094675 ], [ 99.014561, 33.081137 ], [ 98.971445, 33.098185 ], [ 98.967134, 33.115229 ], [ 98.92217, 33.118738 ], [ 98.858728, 33.150811 ], [ 98.804526, 33.219428 ], [ 98.802062, 33.270481 ], [ 98.759562, 33.276985 ], [ 98.779888, 33.370497 ], [ 98.736157, 33.406975 ], [ 98.742316, 33.477887 ], [ 98.725686, 33.503341 ], [ 98.678258, 33.522801 ], [ 98.648077, 33.548741 ], [ 98.652389, 33.595114 ], [ 98.622824, 33.610067 ], [ 98.61728, 33.637476 ], [ 98.6567, 33.64744 ], [ 98.610505, 33.682805 ], [ 98.582788, 33.731595 ], [ 98.537824, 33.74752 ], [ 98.51873, 33.77389 ], [ 98.494092, 33.768915 ], [ 98.492861, 33.796272 ], [ 98.463295, 33.848477 ], [ 98.434962, 33.843009 ], [ 98.407245, 33.867362 ], [ 98.425723, 33.913066 ], [ 98.415252, 33.956761 ], [ 98.440506, 33.981577 ], [ 98.428187, 34.029204 ], [ 98.396774, 34.053008 ], [ 98.392462, 34.089196 ], [ 98.344419, 34.094648 ], [ 98.258188, 34.083249 ], [ 98.206449, 34.08424 ], [ 98.157174, 34.107532 ], [ 98.098043, 34.122892 ], [ 98.051848, 34.11546 ], [ 97.95453, 34.190739 ], [ 97.898479, 34.209548 ], [ 97.796849, 34.199154 ], [ 97.796849, 34.199154 ], [ 97.789458, 34.182818 ], [ 97.789458, 34.182818 ], [ 97.766668, 34.158555 ], [ 97.665654, 34.126855 ], [ 97.70261, 34.036644 ], [ 97.652719, 33.998448 ], [ 97.660111, 33.956264 ], [ 97.629314, 33.919523 ], [ 97.601596, 33.929951 ], [ 97.52214, 33.903133 ], [ 97.503662, 33.912073 ], [ 97.460546, 33.887236 ], [ 97.395257, 33.889224 ], [ 97.398336, 33.848477 ], [ 97.371851, 33.842015 ], [ 97.373083, 33.817655 ], [ 97.406344, 33.795278 ], [ 97.422974, 33.754984 ], [ 97.418046, 33.728608 ], [ 97.435293, 33.682307 ], [ 97.415583, 33.605582 ], [ 97.450075, 33.582152 ], [ 97.523372, 33.577166 ], [ 97.511669, 33.520805 ], [ 97.552321, 33.465906 ], [ 97.625618, 33.461412 ], [ 97.674893, 33.432949 ], [ 97.754349, 33.409972 ], [ 97.676125, 33.341004 ], [ 97.622538, 33.337005 ], [ 97.607756, 33.263976 ], [ 97.548626, 33.203907 ], [ 97.487648, 33.168346 ], [ 97.498119, 33.137783 ], [ 97.487032, 33.107209 ], [ 97.517213, 33.097683 ], [ 97.542466, 33.035995 ], [ 97.499966, 33.011408 ], [ 97.523988, 32.988822 ], [ 97.438372, 32.976271 ], [ 97.375547, 32.956689 ], [ 97.347829, 32.895907 ], [ 97.376163, 32.886359 ], [ 97.392793, 32.828546 ], [ 97.386018, 32.77925 ], [ 97.429133, 32.714318 ], [ 97.42359, 32.70475 ], [ 97.48272, 32.654377 ], [ 97.535075, 32.638252 ], [ 97.543698, 32.62162 ], [ 97.607756, 32.614059 ], [ 97.616995, 32.586329 ], [ 97.700763, 32.53488 ], [ 97.730944, 32.527312 ], [ 97.684132, 32.530339 ], [ 97.670582, 32.51722 ], [ 97.540618, 32.536899 ], [ 97.50243, 32.530844 ], [ 97.463626, 32.55506 ], [ 97.448843, 32.586833 ], [ 97.411887, 32.575235 ], [ 97.374315, 32.546484 ], [ 97.3583, 32.563635 ], [ 97.332431, 32.542448 ], [ 97.334895, 32.514192 ], [ 97.388481, 32.501575 ], [ 97.341054, 32.440987 ], [ 97.387865, 32.427349 ], [ 97.424822, 32.322723 ], [ 97.415583, 32.296421 ], [ 97.371235, 32.273148 ], [ 97.32196, 32.303503 ], [ 97.299786, 32.294904 ], [ 97.264062, 32.182527 ], [ 97.271453, 32.139971 ], [ 97.313953, 32.130342 ], [ 97.293011, 32.096887 ], [ 97.308409, 32.076605 ], [ 97.258518, 32.072041 ], [ 97.219714, 32.109054 ], [ 97.201852, 32.090296 ], [ 97.233881, 32.063927 ], [ 97.214786, 32.042623 ], [ 97.188301, 32.055304 ], [ 97.169823, 32.032984 ], [ 97.127323, 32.044145 ], [ 97.028773, 32.04871 ], [ 97.006599, 32.067984 ], [ 96.935766, 32.048203 ], [ 96.965947, 32.008628 ], [ 96.941925, 31.986297 ], [ 96.894498, 32.013703 ], [ 96.863085, 31.996448 ], [ 96.868629, 31.964975 ], [ 96.824281, 32.007613 ], [ 96.722651, 32.013195 ], [ 96.742977, 32.001016 ], [ 96.753448, 31.944156 ], [ 96.776238, 31.935015 ], [ 96.81073, 31.894375 ], [ 96.794716, 31.869474 ], [ 96.760223, 31.860325 ], [ 96.765767, 31.819144 ], [ 96.799027, 31.792188 ], [ 96.840295, 31.720438 ], [ 96.790404, 31.698545 ], [ 96.778701, 31.675629 ], [ 96.722651, 31.686833 ], [ 96.691854, 31.722474 ], [ 96.661057, 31.705674 ], [ 96.615477, 31.737236 ], [ 96.56805, 31.711783 ], [ 96.519391, 31.74945 ], [ 96.468884, 31.769804 ], [ 96.435623, 31.796258 ], [ 96.407906, 31.845583 ], [ 96.389428, 31.919777 ], [ 96.288414, 31.919777 ], [ 96.253305, 31.929936 ], [ 96.220044, 31.905553 ], [ 96.188632, 31.904028 ], [ 96.214501, 31.876589 ], [ 96.202798, 31.841008 ], [ 96.183088, 31.835924 ], [ 96.178161, 31.775401 ], [ 96.231131, 31.749959 ], [ 96.222508, 31.733164 ], [ 96.252073, 31.697527 ], [ 96.245298, 31.657802 ], [ 96.221892, 31.647613 ], [ 96.207726, 31.598691 ], [ 96.156603, 31.602769 ], [ 96.148595, 31.686324 ], [ 96.135661, 31.70211 ], [ 96.064828, 31.720438 ], [ 95.989067, 31.78761 ], [ 95.983524, 31.816601 ], [ 95.89914, 31.81711 ], [ 95.846169, 31.736218 ], [ 95.853561, 31.714329 ], [ 95.823995, 31.68225 ], [ 95.779648, 31.748941 ], [ 95.634286, 31.782523 ], [ 95.580083, 31.76726 ], [ 95.546823, 31.73978 ], [ 95.511714, 31.750468 ], [ 95.480301, 31.795749 ], [ 95.456896, 31.801853 ], [ 95.406389, 31.896915 ], [ 95.408852, 31.918761 ], [ 95.3682, 31.92892 ], [ 95.360809, 31.95939 ], [ 95.395918, 32.001523 ], [ 95.454432, 32.007613 ], [ 95.421171, 32.033999 ], [ 95.454432, 32.061898 ], [ 95.440265, 32.157705 ], [ 95.406389, 32.182021 ], [ 95.367584, 32.178982 ], [ 95.366968, 32.151118 ], [ 95.31523, 32.148585 ], [ 95.270266, 32.194683 ], [ 95.270266, 32.194683 ], [ 95.239469, 32.287315 ], [ 95.241317, 32.3207 ], [ 95.214216, 32.321712 ], [ 95.20744, 32.297433 ], [ 95.10581, 32.258979 ], [ 95.079325, 32.279726 ], [ 95.096571, 32.322217 ], [ 95.193274, 32.332331 ], [ 95.261643, 32.348006 ], [ 95.228382, 32.363678 ], [ 95.218527, 32.397035 ], [ 95.153853, 32.386423 ], [ 95.081789, 32.384907 ], [ 95.075013, 32.376315 ], [ 95.075013, 32.376315 ], [ 95.057151, 32.395014 ], [ 94.988166, 32.422802 ], [ 94.944434, 32.404109 ], [ 94.912405, 32.41573 ], [ 94.889616, 32.472295 ], [ 94.852043, 32.463712 ], [ 94.80708, 32.486431 ], [ 94.78737, 32.522266 ], [ 94.762116, 32.526303 ], [ 94.737479, 32.587338 ], [ 94.638312, 32.645307 ], [ 94.614291, 32.673522 ], [ 94.591501, 32.640772 ], [ 94.522516, 32.595909 ], [ 94.459074, 32.599439 ], [ 94.463386, 32.572209 ], [ 94.435052, 32.562626 ], [ 94.395016, 32.594397 ], [ 94.371611, 32.524789 ], [ 94.350053, 32.533871 ], [ 94.294002, 32.519743 ], [ 94.292154, 32.502584 ], [ 94.250886, 32.51722 ], [ 94.196684, 32.51621 ], [ 94.176974, 32.454117 ], [ 94.137554, 32.433915 ], [ 94.091974, 32.463207 ], [ 94.049474, 32.469771 ], [ 94.03038, 32.448057 ], [ 93.978641, 32.459672 ], [ 93.960163, 32.484917 ], [ 93.90904, 32.463207 ], [ 93.861613, 32.466237 ], [ 93.851142, 32.50965 ], [ 93.820345, 32.549511 ], [ 93.75136, 32.56313 ], [ 93.721795, 32.578261 ], [ 93.651577, 32.571705 ], [ 93.618933, 32.522771 ], [ 93.516687, 32.47583 ], [ 93.501904, 32.503593 ], [ 93.476651, 32.504603 ], [ 93.4631, 32.556069 ], [ 93.411977, 32.558086 ], [ 93.385492, 32.525294 ], [ 93.33868, 32.5712 ], [ 93.308499, 32.580278 ], [ 93.300492, 32.619604 ], [ 93.260456, 32.62666 ], [ 93.239514, 32.662439 ], [ 93.210565, 32.655385 ], [ 93.176688, 32.6705 ], [ 93.159442, 32.644803 ], [ 93.087993, 32.63674 ], [ 93.069515, 32.626156 ], [ 93.023935, 32.703239 ], [ 93.019624, 32.737477 ], [ 93.00053, 32.741001 ], [ 92.964189, 32.714821 ], [ 92.933392, 32.719353 ], [ 92.866871, 32.698203 ], [ 92.822523, 32.729926 ], [ 92.789262, 32.719856 ], [ 92.756618, 32.743014 ], [ 92.686401, 32.76516 ], [ 92.667922, 32.73194 ], [ 92.634662, 32.720863 ], [ 92.574916, 32.741001 ], [ 92.56814, 32.73194 ], [ 92.484372, 32.745028 ], [ 92.459119, 32.76365 ], [ 92.411076, 32.748048 ], [ 92.355641, 32.764657 ], [ 92.343938, 32.738484 ], [ 92.310062, 32.751571 ], [ 92.255243, 32.720863 ], [ 92.198577, 32.754591 ], [ 92.211511, 32.788306 ], [ 92.193649, 32.801889 ], [ 92.227526, 32.821003 ], [ 92.205352, 32.866255 ], [ 92.145606, 32.885857 ], [ 92.101874, 32.860222 ], [ 92.038432, 32.860725 ], [ 92.018722, 32.829552 ], [ 91.955897, 32.8205 ], [ 91.896766, 32.907967 ], [ 91.857962, 32.90244 ], [ 91.839484, 32.948152 ], [ 91.799448, 32.942126 ], [ 91.752637, 32.969242 ], [ 91.685499, 32.989324 ], [ 91.664557, 33.012913 ], [ 91.583253, 33.0375 ], [ 91.55492, 33.060074 ], [ 91.535826, 33.10019 ], [ 91.49579, 33.109214 ], [ 91.436044, 33.066092 ], [ 91.370138, 33.100691 ], [ 91.311624, 33.108211 ], [ 91.261733, 33.141291 ], [ 91.226624, 33.141792 ], [ 91.18782, 33.106206 ], [ 91.161335, 33.108712 ], [ 91.147784, 33.07211 ], [ 91.072024, 33.113224 ], [ 91.037531, 33.098686 ], [ 91.001807, 33.11573 ], [ 90.927894, 33.120241 ], [ 90.902024, 33.083143 ], [ 90.88293, 33.120241 ], [ 90.803474, 33.114227 ], [ 90.740032, 33.142293 ], [ 90.704308, 33.135778 ], [ 90.627315, 33.180368 ], [ 90.562642, 33.229441 ], [ 90.490577, 33.264977 ], [ 90.405577, 33.260473 ], [ 90.363077, 33.279487 ], [ 90.332896, 33.310501 ], [ 90.246665, 33.423959 ], [ 90.22018, 33.437943 ], [ 90.107463, 33.460913 ], [ 90.088984, 33.478885 ], [ 90.083441, 33.525295 ], [ 90.01076, 33.553728 ], [ 89.984275, 33.612061 ], [ 90.008296, 33.687785 ], [ 89.981195, 33.70322 ], [ 89.983659, 33.725622 ], [ 89.907282, 33.741051 ], [ 89.902355, 33.758467 ], [ 89.942391, 33.801246 ], [ 89.899891, 33.80771 ], [ 89.837065, 33.868853 ], [ 89.795181, 33.865374 ], [ 89.73174, 33.921509 ], [ 89.718805, 33.946832 ], [ 89.688008, 33.959739 ], [ 89.684928, 33.990013 ], [ 89.635037, 34.049537 ], [ 89.656595, 34.057966 ], [ 89.655979, 34.097126 ], [ 89.71203, 34.131809 ], [ 89.756993, 34.124874 ], [ 89.760073, 34.152613 ], [ 89.789638, 34.150632 ], [ 89.816739, 34.16945 ], [ 89.838297, 34.263477 ], [ 89.825362, 34.293642 ], [ 89.86663, 34.324785 ], [ 89.858623, 34.359375 ], [ 89.820435, 34.369255 ], [ 89.799493, 34.39642 ], [ 89.819819, 34.420614 ], [ 89.823515, 34.455657 ], [ 89.814891, 34.548871 ], [ 89.777935, 34.574499 ], [ 89.798877, 34.628686 ], [ 89.74837, 34.641981 ], [ 89.72558, 34.660689 ], [ 89.732356, 34.732035 ], [ 89.799493, 34.743838 ], [ 89.825978, 34.796931 ], [ 89.867862, 34.81069 ], [ 89.838913, 34.865705 ], [ 89.814891, 34.86816 ], [ 89.821051, 34.902033 ], [ 89.78779, 34.921664 ], [ 89.747138, 34.903506 ], [ 89.707102, 34.919701 ], [ 89.670146, 34.887798 ], [ 89.578987, 34.895162 ], [ 89.560509, 34.938836 ], [ 89.59069, 35.057965 ], [ 89.593153, 35.104491 ], [ 89.579603, 35.118688 ], [ 89.519241, 35.133862 ], [ 89.46935, 35.214577 ], [ 89.450255, 35.223867 ], [ 89.48598, 35.256616 ], [ 89.531559, 35.276161 ], [ 89.494603, 35.298632 ], [ 89.516161, 35.330862 ], [ 89.497067, 35.361128 ], [ 89.58761, 35.383575 ], [ 89.619639, 35.412357 ], [ 89.658443, 35.425526 ], [ 89.685544, 35.416259 ], [ 89.739131, 35.468429 ], [ 89.765, 35.482563 ], [ 89.740979, 35.507412 ], [ 89.720037, 35.501566 ], [ 89.699711, 35.544916 ], [ 89.71203, 35.581915 ], [ 89.75145, 35.580942 ], [ 89.765616, 35.599922 ], [ 89.726196, 35.648082 ], [ 89.748986, 35.66267 ], [ 89.747138, 35.7516 ], [ 89.782863, 35.773453 ], [ 89.767464, 35.799183 ], [ 89.801957, 35.848193 ], [ 89.778551, 35.861775 ], [ 89.707718, 35.849163 ], [ 89.654747, 35.848193 ], [ 89.62395, 35.859349 ], [ 89.550654, 35.856924 ], [ 89.554965, 35.873414 ], [ 89.489676, 35.903475 ], [ 89.428082, 35.917531 ], [ 89.434857, 35.992136 ], [ 89.404676, 36.016827 ], [ 89.417611, 36.044897 ], [ 89.474893, 36.022151 ], [ 89.605472, 36.038123 ], [ 89.688624, 36.091337 ], [ 89.711414, 36.093272 ], [ 89.766848, 36.073925 ], [ 89.819819, 36.080697 ], [ 89.914058, 36.079246 ], [ 89.941159, 36.067637 ], [ 89.944855, 36.140649 ], [ 89.997825, 36.168193 ], [ 90.019999, 36.213594 ], [ 90.028006, 36.258486 ], [ 90.003369, 36.278752 ], [ 90.043405, 36.276822 ], [ 90.058188, 36.255591 ], [ 90.145651, 36.239181 ], [ 90.130252, 36.2078 ], [ 90.198006, 36.187516 ], [ 90.23681, 36.160462 ], [ 90.325505, 36.159496 ], [ 90.424055, 36.133883 ], [ 90.478258, 36.13195 ], [ 90.534925, 36.147899 ], [ 90.613149, 36.126632 ], [ 90.659344, 36.13485 ], [ 90.776373, 36.086501 ], [ 90.815793, 36.035703 ], [ 90.850285, 36.016827 ], [ 90.922966, 36.028927 ], [ 90.979017, 36.106811 ], [ 91.081263, 36.088436 ], [ 91.124994, 36.115514 ], [ 91.09235, 36.163844 ], [ 91.096045, 36.219871 ], [ 91.051698, 36.238215 ], [ 91.07264, 36.299012 ], [ 91.026444, 36.323607 ], [ 91.051698, 36.433946 ], [ 91.028292, 36.443093 ], [ 91.039995, 36.474861 ], [ 91.035683, 36.529703 ], [ 91.011662, 36.539801 ], [ 90.905104, 36.560474 ], [ 90.831191, 36.55807 ], [ 90.810865, 36.585466 ], [ 90.741264, 36.585947 ], [ 90.72217, 36.620058 ], [ 90.730793, 36.655594 ], [ 90.706156, 36.658955 ], [ 90.720938, 36.708868 ], [ 90.754815, 36.721341 ], [ 90.727098, 36.755872 ], [ 90.732025, 36.825844 ], [ 90.758511, 36.825844 ], [ 90.853981, 36.915373 ], [ 90.924198, 36.921115 ], [ 90.983944, 36.913459 ], [ 91.036915, 36.929727 ], [ 91.051698, 36.96751 ], [ 91.126842, 36.978507 ], [ 91.133618, 37.007665 ], [ 91.181045, 37.025345 ], [ 91.216153, 37.010054 ], [ 91.303617, 37.012444 ], [ 91.291298, 37.042544 ], [ 91.303617, 37.083136 ], [ 91.286371, 37.105095 ], [ 91.280211, 37.163779 ], [ 91.1909, 37.205737 ], [ 91.194596, 37.273868 ], [ 91.134849, 37.324331 ], [ 91.136081, 37.355734 ], [ 91.113292, 37.387124 ], [ 91.099741, 37.447965 ], [ 91.073256, 37.475992 ], [ 91.019669, 37.493088 ], [ 90.958075, 37.477891 ], [ 90.911879, 37.519674 ], [ 90.865684, 37.53059 ], [ 90.882314, 37.575664 ], [ 90.854597, 37.604117 ], [ 90.820104, 37.613599 ], [ 90.777605, 37.648672 ], [ 90.643946, 37.696988 ], [ 90.586663, 37.703144 ], [ 90.579272, 37.720661 ], [ 90.519526, 37.730601 ], [ 90.516446, 38.207111 ], [ 90.531229, 38.319886 ], [ 90.401882, 38.311434 ], [ 90.361846, 38.300163 ], [ 90.352607, 38.233441 ], [ 90.280542, 38.238142 ], [ 90.137644, 38.340543 ], [ 90.179528, 38.396848 ], [ 90.129636, 38.400131 ], [ 90.111774, 38.418889 ], [ 90.111774, 38.477945 ], [ 90.130868, 38.494341 ], [ 90.248513, 38.491531 ], [ 90.315034, 38.501835 ], [ 90.353222, 38.482162 ], [ 90.427135, 38.493873 ], [ 90.465323, 38.521971 ], [ 90.463476, 38.556611 ], [ 90.525685, 38.561291 ], [ 90.560794, 38.593573 ], [ 90.608837, 38.594508 ], [ 90.606374, 38.610878 ], [ 90.645794, 38.635191 ], [ 90.619308, 38.664636 ], [ 90.65996, 38.674449 ], [ 90.724634, 38.658094 ], [ 90.899561, 38.679588 ], [ 90.970394, 38.697806 ], [ 90.992567, 38.695003 ], [ 91.188436, 38.73096 ], [ 91.242639, 38.752433 ], [ 91.298689, 38.746365 ], [ 91.446515, 38.813546 ], [ 91.501333, 38.815411 ], [ 91.681188, 38.852706 ], [ 91.694738, 38.86622 ], [ 91.806223, 38.872744 ], [ 91.87952, 38.884391 ], [ 91.880752, 38.899297 ], [ 91.966368, 38.930961 ], [ 92.10865, 38.963541 ], [ 92.173323, 38.960749 ], [ 92.197961, 38.983548 ], [ 92.263866, 39.002153 ], [ 92.380279, 38.999828 ], [ 92.416003, 39.010524 ], [ 92.41046, 39.03842 ], [ 92.459119, 39.042604 ], [ 92.459119, 39.063982 ], [ 92.489916, 39.099753 ], [ 92.545966, 39.111362 ], [ 92.659299, 39.109969 ], [ 92.765857, 39.136898 ], [ 92.866871, 39.138754 ], [ 92.889045, 39.160103 ], [ 92.938936, 39.169848 ], [ 92.978356, 39.143396 ], [ 93.043029, 39.146645 ], [ 93.115094, 39.17959 ], [ 93.142196, 39.160567 ], [ 93.131725, 39.108112 ], [ 93.165601, 39.090928 ], [ 93.198246, 39.045857 ], [ 93.179152, 38.923977 ], [ 93.237666, 38.916062 ], [ 93.274007, 38.896036 ], [ 93.453245, 38.915596 ], [ 93.729186, 38.924443 ], [ 93.834511, 38.867618 ], [ 93.884403, 38.867618 ], [ 93.884403, 38.826136 ], [ 93.769838, 38.821007 ], [ 93.756287, 38.807484 ], [ 93.773533, 38.771099 ], [ 93.800019, 38.750566 ], [ 93.885018, 38.720689 ], [ 93.95154, 38.715086 ], [ 93.973098, 38.724891 ], [ 94.281067, 38.7599 ], [ 94.370379, 38.7627 ], [ 94.511429, 38.445142 ], [ 94.527443, 38.425922 ], [ 94.527443, 38.365416 ], [ 94.56132, 38.351807 ], [ 94.582878, 38.36917 ], [ 94.672805, 38.386998 ], [ 94.812623, 38.385591 ], [ 94.861282, 38.393565 ], [ 94.884072, 38.414669 ], [ 94.973999, 38.430142 ], [ 95.045448, 38.418889 ], [ 95.072549, 38.402476 ], [ 95.122441, 38.417014 ], [ 95.140919, 38.392158 ], [ 95.185266, 38.379492 ], [ 95.209904, 38.327868 ], [ 95.229614, 38.330685 ], [ 95.259179, 38.302981 ], [ 95.315846, 38.318947 ], [ 95.408236, 38.300163 ], [ 95.440881, 38.310965 ], [ 95.455664, 38.291709 ], [ 95.487693, 38.314721 ], [ 95.51849, 38.294997 ], [ 95.585011, 38.343359 ], [ 95.608417, 38.339134 ], [ 95.671858, 38.388405 ], [ 95.703887, 38.400131 ], [ 95.723597, 38.378554 ], [ 95.775952, 38.356031 ], [ 95.83693, 38.344298 ], [ 95.852945, 38.287481 ], [ 95.89606, 38.2903 ], [ 95.932401, 38.259291 ], [ 95.93856, 38.237202 ], [ 96.006929, 38.207582 ], [ 96.06606, 38.173245 ], [ 96.109175, 38.187358 ], [ 96.221892, 38.149246 ], [ 96.252689, 38.167599 ], [ 96.264392, 38.145952 ], [ 96.313051, 38.161952 ], [ 96.301964, 38.183124 ], [ 96.335841, 38.246132 ], [ 96.378341, 38.277146 ], [ 96.46334, 38.277616 ], [ 96.665369, 38.23015 ], [ 96.655514, 38.295936 ], [ 96.638883, 38.307208 ], [ 96.626564, 38.356031 ], [ 96.698013, 38.422172 ], [ 96.707868, 38.459203 ], [ 96.6666, 38.483567 ], [ 96.706637, 38.505582 ], [ 96.780549, 38.504177 ], [ 96.800259, 38.52759 ], [ 96.767614, 38.552399 ], [ 96.808882, 38.582346 ], [ 96.7941, 38.608072 ], [ 96.847071, 38.599186 ], [ 96.876636, 38.580475 ], [ 96.961019, 38.558015 ], [ 97.055874, 38.594508 ], [ 97.047251, 38.653888 ], [ 97.057722, 38.67258 ], [ 97.009063, 38.702477 ], [ 97.023229, 38.755699 ], [ 97.00044, 38.7613 ], [ 96.987505, 38.793025 ], [ 96.993664, 38.834993 ], [ 96.983809, 38.869016 ], [ 96.940693, 38.90768 ], [ 96.938846, 38.95563 ], [ 96.965331, 39.017034 ], [ 96.95794, 39.041674 ], [ 96.969643, 39.097895 ], [ 97.012142, 39.142004 ], [ 96.962251, 39.198144 ], [ 97.017686, 39.208347 ], [ 97.060186, 39.19768 ], [ 97.14149, 39.199999 ], [ 97.220946, 39.193042 ], [ 97.315185, 39.164744 ], [ 97.347213, 39.167528 ], [ 97.371235, 39.140611 ], [ 97.401416, 39.146645 ], [ 97.458698, 39.117863 ], [ 97.504894, 39.076527 ], [ 97.58127, 39.052364 ], [ 97.679205, 39.010524 ], [ 97.701379, 38.963076 ], [ 97.828878, 38.93003 ], [ 97.875689, 38.898365 ], [ 98.009348, 38.85923 ], [ 98.029058, 38.834061 ], [ 98.068478, 38.816344 ], [ 98.091884, 38.786495 ], [ 98.167645, 38.840121 ], [ 98.242173, 38.880664 ], [ 98.235398, 38.918855 ], [ 98.276666, 38.963541 ], [ 98.287753, 38.992386 ], [ 98.280977, 39.027263 ], [ 98.316702, 39.040744 ], [ 98.383839, 39.029588 ], [ 98.401086, 39.001688 ], [ 98.432498, 38.996107 ], [ 98.428187, 38.976104 ], [ 98.457752, 38.952838 ], [ 98.526737, 38.95563 ], [ 98.584635, 38.93003 ], [ 98.624056, 38.959353 ], [ 98.612353, 38.977035 ], [ 98.661628, 38.993782 ], [ 98.70536, 39.043533 ], [ 98.730613, 39.057011 ], [ 98.743548, 39.086747 ], [ 98.816845, 39.085818 ], [ 98.818076, 39.064911 ], [ 98.886446, 39.040744 ], [ 98.903076, 39.012384 ], [ 98.951735, 38.987735 ], [ 99.054597, 38.97657 ], [ 99.107568, 38.951907 ], [ 99.071843, 38.921184 ], [ 99.068764, 38.896968 ], [ 99.141445, 38.852706 ], [ 99.222133, 38.788827 ], [ 99.291118, 38.765966 ], [ 99.361951, 38.718354 ], [ 99.375502, 38.684727 ], [ 99.412458, 38.665571 ], [ 99.450646, 38.60433 ], [ 99.501769, 38.612281 ], [ 99.52887, 38.546314 ], [ 99.585537, 38.498556 ], [ 99.63974, 38.474666 ], [ 99.65945, 38.449361 ], [ 99.727203, 38.415607 ], [ 99.758, 38.410449 ], [ 99.826985, 38.370109 ], [ 99.960028, 38.320825 ], [ 100.001912, 38.315191 ], [ 100.049955, 38.283254 ], [ 100.071513, 38.284663 ], [ 100.117093, 38.253652 ], [ 100.126332, 38.231561 ], [ 100.182998, 38.222158 ], [ 100.159592, 38.291239 ], [ 100.163904, 38.328337 ], [ 100.136803, 38.33444 ], [ 100.093071, 38.407166 ], [ 100.022238, 38.432017 ], [ 100.001296, 38.467169 ], [ 100.025933, 38.507923 ], [ 100.064122, 38.518694 ], [ 100.086911, 38.492936 ], [ 100.113397, 38.497151 ], [ 100.163288, 38.461546 ], [ 100.24028, 38.441861 ], [ 100.259374, 38.366355 ], [ 100.301874, 38.388405 ], [ 100.331439, 38.337257 ], [ 100.318505, 38.329276 ], [ 100.396729, 38.293118 ], [ 100.424446, 38.307208 ], [ 100.432453, 38.275267 ], [ 100.459555, 38.2654 ], [ 100.474953, 38.288891 ], [ 100.516837, 38.272448 ], [ 100.545786, 38.247072 ], [ 100.595061, 38.242372 ], [ 100.619083, 38.26587 ], [ 100.71517, 38.253652 ], [ 100.752126, 38.238612 ], [ 100.825423, 38.158658 ], [ 100.860531, 38.148305 ], [ 100.913502, 38.17889 ], [ 100.93814, 38.16007 ], [ 100.91843, 38.129006 ], [ 100.922125, 38.084741 ], [ 100.888864, 38.056001 ], [ 100.895024, 38.013107 ], [ 100.91843, 37.999432 ], [ 100.964009, 38.011221 ], [ 101.077342, 37.941874 ], [ 101.103211, 37.946593 ], [ 101.114298, 37.92016 ], [ 101.152486, 37.891356 ], [ 101.159262, 37.86821 ], [ 101.202994, 37.84742 ], [ 101.276906, 37.83655 ], [ 101.362522, 37.791162 ], [ 101.382848, 37.822369 ], [ 101.459224, 37.86632 ], [ 101.551615, 37.835604 ], [ 101.598427, 37.827569 ], [ 101.670491, 37.754264 ], [ 101.659405, 37.733441 ], [ 101.791832, 37.696041 ], [ 101.815853, 37.654357 ], [ 101.854657, 37.664781 ], [ 101.873135, 37.686569 ], [ 101.946432, 37.728235 ], [ 101.998787, 37.724921 ], [ 102.036359, 37.685149 ], [ 102.048678, 37.651515 ], [ 102.035128, 37.627819 ], [ 102.102265, 37.582304 ], [ 102.131214, 37.54625 ], [ 102.103497, 37.482641 ], [ 102.125055, 37.48549 ], [ 102.176794, 37.458892 ], [ 102.19712, 37.420403 ], [ 102.299981, 37.391404 ], [ 102.29875, 37.370004 ], [ 102.368351, 37.327662 ], [ 102.428097, 37.308624 ], [ 102.419474, 37.294343 ], [ 102.45335, 37.271487 ], [ 102.457662, 37.248147 ], [ 102.490307, 37.223371 ], [ 102.533422, 37.217176 ], [ 102.578386, 37.17284 ], [ 102.599944, 37.174748 ], [ 102.642444, 37.099845 ], [ 102.583314, 37.104618 ], [ 102.488459, 37.078362 ], [ 102.506321, 37.019134 ], [ 102.450271, 36.968467 ], [ 102.499546, 36.954599 ], [ 102.526031, 36.928291 ], [ 102.56114, 36.91968 ], [ 102.587009, 36.869904 ], [ 102.639364, 36.852666 ], [ 102.720052, 36.767858 ], [ 102.692335, 36.775528 ], [ 102.639364, 36.732853 ], [ 102.612879, 36.738129 ], [ 102.601176, 36.710307 ], [ 102.630741, 36.650793 ], [ 102.684328, 36.619097 ], [ 102.724364, 36.613813 ], [ 102.714509, 36.599401 ], [ 102.761936, 36.568645 ], [ 102.734219, 36.562396 ], [ 102.753313, 36.525855 ], [ 102.793349, 36.497957 ], [ 102.771791, 36.47438 ], [ 102.829689, 36.365544 ] ] ] ] } }, +{ "type": "Feature", "properties": { "adcode": "640000", "name": "宁夏回族自治区", "center": [ 106.278179, 38.46637 ], "centroid": [ 106.169867, 37.291331 ], "childrenNum": 5, "level": "province", "parent": { "adcode": 100000 }, "subFeatureIndex": 29, "acroutes": [ 100000 ] }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 107.268764, 37.099367 ], [ 107.234887, 37.096503 ], [ 107.181916, 37.143269 ], [ 107.133873, 37.134681 ], [ 107.095685, 37.115595 ], [ 107.030395, 37.140883 ], [ 107.031011, 37.108436 ], [ 106.998367, 37.106527 ], [ 106.905976, 37.151378 ], [ 106.912135, 37.110345 ], [ 106.891193, 37.098413 ], [ 106.818512, 37.141838 ], [ 106.776012, 37.158056 ], [ 106.772933, 37.120367 ], [ 106.750143, 37.09889 ], [ 106.728585, 37.121321 ], [ 106.687933, 37.12991 ], [ 106.673151, 37.1113 ], [ 106.6171, 37.135158 ], [ 106.605397, 37.127524 ], [ 106.645433, 37.064992 ], [ 106.666991, 37.016745 ], [ 106.646665, 37.000496 ], [ 106.64297, 36.962729 ], [ 106.594926, 36.967988 ], [ 106.595542, 36.94025 ], [ 106.540108, 36.984244 ], [ 106.549347, 36.941685 ], [ 106.601702, 36.918244 ], [ 106.609709, 36.878521 ], [ 106.609709, 36.878521 ], [ 106.626955, 36.892403 ], [ 106.637426, 36.867031 ], [ 106.637426, 36.867031 ], [ 106.657752, 36.820575 ], [ 106.627571, 36.752995 ], [ 106.644817, 36.72278 ], [ 106.59431, 36.750118 ], [ 106.514238, 36.715584 ], [ 106.519782, 36.708868 ], [ 106.519782, 36.708868 ], [ 106.530869, 36.690154 ], [ 106.490833, 36.685835 ], [ 106.491448, 36.628703 ], [ 106.444637, 36.624861 ], [ 106.465579, 36.583063 ], [ 106.444637, 36.557109 ], [ 106.397826, 36.576816 ], [ 106.392282, 36.556628 ], [ 106.363949, 36.577296 ], [ 106.37134, 36.549417 ], [ 106.39721, 36.548455 ], [ 106.455724, 36.496995 ], [ 106.494528, 36.494589 ], [ 106.523477, 36.468605 ], [ 106.492064, 36.422389 ], [ 106.510543, 36.379037 ], [ 106.497608, 36.31348 ], [ 106.470507, 36.306246 ], [ 106.504383, 36.266207 ], [ 106.54134, 36.25366 ], [ 106.559202, 36.292259 ], [ 106.647897, 36.259451 ], [ 106.685469, 36.273445 ], [ 106.698404, 36.244008 ], [ 106.735976, 36.23725 ], [ 106.772933, 36.212628 ], [ 106.808657, 36.21118 ], [ 106.833295, 36.229044 ], [ 106.858548, 36.206834 ], [ 106.858548, 36.206834 ], [ 106.873947, 36.178338 ], [ 106.873947, 36.178338 ], [ 106.930613, 36.138716 ], [ 106.925686, 36.115997 ], [ 106.957715, 36.091337 ], [ 106.940468, 36.064734 ], [ 106.928149, 36.011502 ], [ 106.94786, 35.988262 ], [ 106.90228, 35.943699 ], [ 106.93862, 35.952905 ], [ 106.940468, 35.931101 ], [ 106.912751, 35.93207 ], [ 106.849925, 35.887476 ], [ 106.927534, 35.810346 ], [ 106.897353, 35.759856 ], [ 106.868403, 35.771996 ], [ 106.867171, 35.738485 ], [ 106.819128, 35.7448 ], [ 106.806193, 35.70982 ], [ 106.750759, 35.725369 ], [ 106.750759, 35.689408 ], [ 106.674998, 35.728284 ], [ 106.66268, 35.70739 ], [ 106.633115, 35.714679 ], [ 106.620796, 35.743829 ], [ 106.595542, 35.727312 ], [ 106.566593, 35.738971 ], [ 106.506231, 35.737514 ], [ 106.49268, 35.732656 ], [ 106.434782, 35.688436 ], [ 106.460036, 35.643705 ], [ 106.47913, 35.575101 ], [ 106.460036, 35.578995 ], [ 106.440941, 35.52641 ], [ 106.465579, 35.481101 ], [ 106.490217, 35.480613 ], [ 106.483441, 35.450393 ], [ 106.503767, 35.415284 ], [ 106.501304, 35.364056 ], [ 106.472354, 35.310842 ], [ 106.415688, 35.276161 ], [ 106.368261, 35.273718 ], [ 106.363333, 35.238532 ], [ 106.319601, 35.265411 ], [ 106.241377, 35.358687 ], [ 106.237681, 35.409431 ], [ 106.196414, 35.409919 ], [ 106.173008, 35.437716 ], [ 106.129892, 35.393333 ], [ 106.113262, 35.361616 ], [ 106.083081, 35.421624 ], [ 106.073226, 35.447468 ], [ 106.071378, 35.449418 ], [ 106.073226, 35.450393 ], [ 106.073842, 35.45478 ], [ 106.06953, 35.458193 ], [ 106.071994, 35.463555 ], [ 106.078769, 35.509848 ], [ 106.047356, 35.498155 ], [ 106.023335, 35.49377 ], [ 106.017175, 35.519103 ], [ 105.900147, 35.54735 ], [ 105.868734, 35.540046 ], [ 105.847176, 35.490359 ], [ 105.816379, 35.575101 ], [ 105.800365, 35.564878 ], [ 105.762176, 35.602841 ], [ 105.759097, 35.634464 ], [ 105.713517, 35.650513 ], [ 105.722756, 35.673366 ], [ 105.690727, 35.698643 ], [ 105.723988, 35.725854 ], [ 105.740618, 35.698643 ], [ 105.759097, 35.724883 ], [ 105.70243, 35.733142 ], [ 105.667322, 35.749657 ], [ 105.595873, 35.715651 ], [ 105.481924, 35.727312 ], [ 105.457286, 35.771511 ], [ 105.432033, 35.787533 ], [ 105.428953, 35.819082 ], [ 105.408627, 35.822479 ], [ 105.38091, 35.792873 ], [ 105.371055, 35.844312 ], [ 105.39754, 35.857409 ], [ 105.350113, 35.875839 ], [ 105.324859, 35.941761 ], [ 105.343954, 36.033767 ], [ 105.406163, 36.074409 ], [ 105.430801, 36.10391 ], [ 105.491163, 36.101009 ], [ 105.515185, 36.147415 ], [ 105.478844, 36.213111 ], [ 105.460366, 36.223733 ], [ 105.45975, 36.268137 ], [ 105.476381, 36.293224 ], [ 105.455439, 36.321678 ], [ 105.425873, 36.330357 ], [ 105.401236, 36.369881 ], [ 105.398156, 36.430575 ], [ 105.363048, 36.443093 ], [ 105.362432, 36.496514 ], [ 105.322396, 36.535954 ], [ 105.281744, 36.522489 ], [ 105.252179, 36.553263 ], [ 105.2762, 36.563358 ], [ 105.261418, 36.602764 ], [ 105.22015, 36.631105 ], [ 105.225693, 36.664716 ], [ 105.201056, 36.700711 ], [ 105.218302, 36.730455 ], [ 105.272505, 36.739567 ], [ 105.275584, 36.752515 ], [ 105.319932, 36.742924 ], [ 105.340874, 36.764502 ], [ 105.334714, 36.80093 ], [ 105.303302, 36.820575 ], [ 105.279896, 36.86751 ], [ 105.244787, 36.894796 ], [ 105.178882, 36.892403 ], [ 105.185657, 36.942164 ], [ 105.165331, 36.99476 ], [ 105.128991, 36.996194 ], [ 105.05939, 37.022956 ], [ 105.03968, 37.007187 ], [ 105.004571, 37.035378 ], [ 104.95468, 37.040156 ], [ 104.954064, 37.077407 ], [ 104.914644, 37.097935 ], [ 104.888158, 37.15901 ], [ 104.864753, 37.17284 ], [ 104.85613, 37.211933 ], [ 104.776673, 37.246718 ], [ 104.717543, 37.208597 ], [ 104.638087, 37.201923 ], [ 104.600515, 37.242907 ], [ 104.624536, 37.298627 ], [ 104.651022, 37.290534 ], [ 104.673812, 37.317668 ], [ 104.713848, 37.329566 ], [ 104.662109, 37.367626 ], [ 104.679971, 37.408044 ], [ 104.521059, 37.43466 ], [ 104.499501, 37.421353 ], [ 104.448994, 37.42468 ], [ 104.437907, 37.445589 ], [ 104.365226, 37.418026 ], [ 104.298705, 37.414223 ], [ 104.287002, 37.428007 ], [ 104.322726, 37.44844 ], [ 104.407726, 37.464592 ], [ 104.419429, 37.511604 ], [ 104.433595, 37.515402 ], [ 104.623305, 37.522522 ], [ 104.805007, 37.539133 ], [ 104.866601, 37.566651 ], [ 105.027977, 37.580881 ], [ 105.111128, 37.633981 ], [ 105.187505, 37.657674 ], [ 105.221998, 37.677097 ], [ 105.315004, 37.702197 ], [ 105.4037, 37.710246 ], [ 105.467141, 37.695094 ], [ 105.598952, 37.699356 ], [ 105.616199, 37.722555 ], [ 105.622358, 37.777919 ], [ 105.677177, 37.771769 ], [ 105.760944, 37.799674 ], [ 105.80406, 37.862068 ], [ 105.799749, 37.939986 ], [ 105.840401, 38.004147 ], [ 105.780655, 38.084741 ], [ 105.76772, 38.121474 ], [ 105.775111, 38.186887 ], [ 105.802828, 38.220277 ], [ 105.842248, 38.240962 ], [ 105.86627, 38.296406 ], [ 105.821307, 38.366824 ], [ 105.835473, 38.387467 ], [ 105.827466, 38.432486 ], [ 105.850872, 38.443736 ], [ 105.836705, 38.476071 ], [ 105.863806, 38.53508 ], [ 105.856415, 38.569714 ], [ 105.874277, 38.593105 ], [ 105.852719, 38.641735 ], [ 105.894603, 38.696405 ], [ 105.88598, 38.716953 ], [ 105.908154, 38.737496 ], [ 105.909386, 38.791159 ], [ 105.992538, 38.857366 ], [ 105.97098, 38.909077 ], [ 106.021487, 38.953769 ], [ 106.060907, 38.96866 ], [ 106.087392, 39.006339 ], [ 106.078153, 39.026333 ], [ 106.096631, 39.084889 ], [ 106.145907, 39.153142 ], [ 106.170544, 39.163352 ], [ 106.192718, 39.142932 ], [ 106.251232, 39.131327 ], [ 106.285109, 39.146181 ], [ 106.29558, 39.167992 ], [ 106.280181, 39.262118 ], [ 106.402753, 39.291767 ], [ 106.511774, 39.272311 ], [ 106.525325, 39.308439 ], [ 106.556122, 39.322329 ], [ 106.602318, 39.37555 ], [ 106.643586, 39.357969 ], [ 106.683622, 39.357506 ], [ 106.751375, 39.381564 ], [ 106.781556, 39.371849 ], [ 106.806809, 39.318625 ], [ 106.806193, 39.277407 ], [ 106.790795, 39.241263 ], [ 106.795723, 39.214375 ], [ 106.825288, 39.19397 ], [ 106.859164, 39.107648 ], [ 106.878874, 39.091392 ], [ 106.933693, 39.076527 ], [ 106.96757, 39.054688 ], [ 106.971881, 39.026333 ], [ 106.954019, 38.941202 ], [ 106.837606, 38.847579 ], [ 106.756302, 38.748699 ], [ 106.709491, 38.718821 ], [ 106.66268, 38.601524 ], [ 106.647897, 38.470917 ], [ 106.599854, 38.389812 ], [ 106.482209, 38.319417 ], [ 106.555506, 38.263521 ], [ 106.627571, 38.232501 ], [ 106.654672, 38.22921 ], [ 106.737824, 38.197706 ], [ 106.779092, 38.171833 ], [ 106.858548, 38.156306 ], [ 106.942316, 38.132302 ], [ 107.010069, 38.120532 ], [ 107.051337, 38.122886 ], [ 107.071047, 38.138892 ], [ 107.119091, 38.134185 ], [ 107.138801, 38.161011 ], [ 107.19054, 38.153953 ], [ 107.240431, 38.111586 ], [ 107.33159, 38.086625 ], [ 107.3938, 38.014993 ], [ 107.440611, 37.995659 ], [ 107.411662, 37.948009 ], [ 107.448618, 37.933378 ], [ 107.49235, 37.944706 ], [ 107.560719, 37.893717 ], [ 107.65003, 37.86443 ], [ 107.659269, 37.844112 ], [ 107.646335, 37.805349 ], [ 107.620465, 37.776026 ], [ 107.599523, 37.791162 ], [ 107.57119, 37.776499 ], [ 107.499125, 37.765619 ], [ 107.484959, 37.706458 ], [ 107.425828, 37.684201 ], [ 107.387024, 37.691305 ], [ 107.389488, 37.671413 ], [ 107.422133, 37.665254 ], [ 107.361155, 37.613125 ], [ 107.311264, 37.609806 ], [ 107.330358, 37.584201 ], [ 107.369162, 37.58752 ], [ 107.345756, 37.518725 ], [ 107.284162, 37.481691 ], [ 107.282931, 37.437036 ], [ 107.257677, 37.337179 ], [ 107.273075, 37.29101 ], [ 107.309416, 37.239095 ], [ 107.270612, 37.229089 ], [ 107.317423, 37.200017 ], [ 107.336517, 37.165687 ], [ 107.334669, 37.138975 ], [ 107.306952, 37.100799 ], [ 107.281083, 37.127047 ], [ 107.268764, 37.099367 ] ] ], [ [ [ 106.048588, 35.488898 ], [ 106.054132, 35.45478 ], [ 106.034422, 35.469404 ], [ 106.002393, 35.438692 ], [ 105.894603, 35.413821 ], [ 105.897683, 35.451368 ], [ 106.048588, 35.488898 ] ] ], [ [ [ 106.073842, 35.45478 ], [ 106.073226, 35.450393 ], [ 106.071378, 35.449418 ], [ 106.06953, 35.458193 ], [ 106.073842, 35.45478 ] ] ] ] } }, +{ "type": "Feature", "properties": { "adcode": "650000", "name": "新疆维吾尔自治区", "center": [ 87.617733, 43.792818 ], "centroid": [ 85.294711, 41.371801 ], "childrenNum": 24, "level": "province", "parent": { "adcode": 100000 }, "subFeatureIndex": 30, "acroutes": [ 100000 ] }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 96.386348, 42.727592 ], [ 96.166458, 42.623314 ], [ 96.103632, 42.604375 ], [ 96.072219, 42.569566 ], [ 96.02356, 42.542675 ], [ 96.0174, 42.482239 ], [ 95.978596, 42.436762 ], [ 96.06606, 42.414674 ], [ 96.042038, 42.352787 ], [ 96.040806, 42.326688 ], [ 96.178161, 42.21775 ], [ 96.077147, 42.149457 ], [ 96.13874, 42.05399 ], [ 96.137509, 42.019765 ], [ 96.117183, 41.985966 ], [ 96.054973, 41.936124 ], [ 95.998306, 41.906289 ], [ 95.855408, 41.849699 ], [ 95.801206, 41.848361 ], [ 95.759322, 41.835878 ], [ 95.65646, 41.826067 ], [ 95.57146, 41.796181 ], [ 95.445193, 41.719841 ], [ 95.39407, 41.693481 ], [ 95.335556, 41.644305 ], [ 95.299831, 41.565994 ], [ 95.247476, 41.61344 ], [ 95.194505, 41.694821 ], [ 95.199433, 41.719395 ], [ 95.16494, 41.735474 ], [ 95.135991, 41.772976 ], [ 95.110738, 41.768513 ], [ 95.011572, 41.726541 ], [ 94.969072, 41.718948 ], [ 94.861898, 41.668451 ], [ 94.809543, 41.619256 ], [ 94.750413, 41.538227 ], [ 94.534219, 41.505966 ], [ 94.184365, 41.268444 ], [ 94.01067, 41.114875 ], [ 93.908424, 40.983539 ], [ 93.809874, 40.879548 ], [ 93.820961, 40.793519 ], [ 93.760599, 40.664721 ], [ 93.506216, 40.648376 ], [ 92.928465, 40.572504 ], [ 92.920458, 40.391792 ], [ 92.906907, 40.310609 ], [ 92.796654, 40.153897 ], [ 92.745531, 39.868331 ], [ 92.687632, 39.657174 ], [ 92.639589, 39.514196 ], [ 92.52564, 39.368611 ], [ 92.378431, 39.258411 ], [ 92.339011, 39.236628 ], [ 92.343938, 39.146181 ], [ 92.366112, 39.096037 ], [ 92.366728, 39.059335 ], [ 92.41046, 39.03842 ], [ 92.416003, 39.010524 ], [ 92.380279, 38.999828 ], [ 92.263866, 39.002153 ], [ 92.197961, 38.983548 ], [ 92.173323, 38.960749 ], [ 92.10865, 38.963541 ], [ 91.966368, 38.930961 ], [ 91.880752, 38.899297 ], [ 91.87952, 38.884391 ], [ 91.806223, 38.872744 ], [ 91.694738, 38.86622 ], [ 91.681188, 38.852706 ], [ 91.501333, 38.815411 ], [ 91.446515, 38.813546 ], [ 91.298689, 38.746365 ], [ 91.242639, 38.752433 ], [ 91.188436, 38.73096 ], [ 90.992567, 38.695003 ], [ 90.970394, 38.697806 ], [ 90.899561, 38.679588 ], [ 90.724634, 38.658094 ], [ 90.65996, 38.674449 ], [ 90.619308, 38.664636 ], [ 90.645794, 38.635191 ], [ 90.606374, 38.610878 ], [ 90.608837, 38.594508 ], [ 90.560794, 38.593573 ], [ 90.525685, 38.561291 ], [ 90.463476, 38.556611 ], [ 90.465323, 38.521971 ], [ 90.427135, 38.493873 ], [ 90.353222, 38.482162 ], [ 90.315034, 38.501835 ], [ 90.248513, 38.491531 ], [ 90.130868, 38.494341 ], [ 90.111774, 38.477945 ], [ 90.111774, 38.418889 ], [ 90.129636, 38.400131 ], [ 90.179528, 38.396848 ], [ 90.137644, 38.340543 ], [ 90.280542, 38.238142 ], [ 90.352607, 38.233441 ], [ 90.361846, 38.300163 ], [ 90.401882, 38.311434 ], [ 90.531229, 38.319886 ], [ 90.516446, 38.207111 ], [ 90.519526, 37.730601 ], [ 90.579272, 37.720661 ], [ 90.586663, 37.703144 ], [ 90.643946, 37.696988 ], [ 90.777605, 37.648672 ], [ 90.820104, 37.613599 ], [ 90.854597, 37.604117 ], [ 90.882314, 37.575664 ], [ 90.865684, 37.53059 ], [ 90.911879, 37.519674 ], [ 90.958075, 37.477891 ], [ 91.019669, 37.493088 ], [ 91.073256, 37.475992 ], [ 91.099741, 37.447965 ], [ 91.113292, 37.387124 ], [ 91.136081, 37.355734 ], [ 91.134849, 37.324331 ], [ 91.194596, 37.273868 ], [ 91.1909, 37.205737 ], [ 91.280211, 37.163779 ], [ 91.286371, 37.105095 ], [ 91.303617, 37.083136 ], [ 91.291298, 37.042544 ], [ 91.303617, 37.012444 ], [ 91.216153, 37.010054 ], [ 91.181045, 37.025345 ], [ 91.133618, 37.007665 ], [ 91.126842, 36.978507 ], [ 91.051698, 36.96751 ], [ 91.036915, 36.929727 ], [ 90.983944, 36.913459 ], [ 90.924198, 36.921115 ], [ 90.853981, 36.915373 ], [ 90.758511, 36.825844 ], [ 90.732025, 36.825844 ], [ 90.727098, 36.755872 ], [ 90.754815, 36.721341 ], [ 90.720938, 36.708868 ], [ 90.706156, 36.658955 ], [ 90.730793, 36.655594 ], [ 90.72217, 36.620058 ], [ 90.741264, 36.585947 ], [ 90.810865, 36.585466 ], [ 90.831191, 36.55807 ], [ 90.905104, 36.560474 ], [ 91.011662, 36.539801 ], [ 91.035683, 36.529703 ], [ 91.039995, 36.474861 ], [ 91.028292, 36.443093 ], [ 91.051698, 36.433946 ], [ 91.026444, 36.323607 ], [ 91.07264, 36.299012 ], [ 91.051698, 36.238215 ], [ 91.096045, 36.219871 ], [ 91.09235, 36.163844 ], [ 91.124994, 36.115514 ], [ 91.081263, 36.088436 ], [ 90.979017, 36.106811 ], [ 90.922966, 36.028927 ], [ 90.850285, 36.016827 ], [ 90.815793, 36.035703 ], [ 90.776373, 36.086501 ], [ 90.659344, 36.13485 ], [ 90.613149, 36.126632 ], [ 90.534925, 36.147899 ], [ 90.478258, 36.13195 ], [ 90.424055, 36.133883 ], [ 90.325505, 36.159496 ], [ 90.23681, 36.160462 ], [ 90.198006, 36.187516 ], [ 90.130252, 36.2078 ], [ 90.145651, 36.239181 ], [ 90.058188, 36.255591 ], [ 90.043405, 36.276822 ], [ 90.003369, 36.278752 ], [ 90.028006, 36.258486 ], [ 90.019999, 36.213594 ], [ 89.997825, 36.168193 ], [ 89.944855, 36.140649 ], [ 89.941159, 36.067637 ], [ 89.914058, 36.079246 ], [ 89.819819, 36.080697 ], [ 89.766848, 36.073925 ], [ 89.711414, 36.093272 ], [ 89.614711, 36.109712 ], [ 89.594385, 36.126632 ], [ 89.490291, 36.151281 ], [ 89.375727, 36.228078 ], [ 89.335075, 36.23725 ], [ 89.292575, 36.231457 ], [ 89.232213, 36.295636 ], [ 89.198952, 36.260417 ], [ 89.126887, 36.254626 ], [ 89.10225, 36.281164 ], [ 89.054822, 36.291777 ], [ 89.013554, 36.315409 ], [ 88.964279, 36.318785 ], [ 88.926091, 36.36458 ], [ 88.870657, 36.348193 ], [ 88.838628, 36.353496 ], [ 88.802903, 36.33807 ], [ 88.783809, 36.291777 ], [ 88.766563, 36.292259 ], [ 88.690186, 36.367954 ], [ 88.623665, 36.389636 ], [ 88.618121, 36.428168 ], [ 88.573158, 36.461386 ], [ 88.498629, 36.446463 ], [ 88.470912, 36.48208 ], [ 88.41055, 36.473418 ], [ 88.356963, 36.477268 ], [ 88.366202, 36.458016 ], [ 88.282434, 36.470049 ], [ 88.241782, 36.468605 ], [ 88.222688, 36.447426 ], [ 88.182652, 36.452721 ], [ 88.134609, 36.427205 ], [ 88.092109, 36.43539 ], [ 88.006494, 36.430575 ], [ 87.983088, 36.437797 ], [ 87.95845, 36.408423 ], [ 87.919646, 36.39349 ], [ 87.838342, 36.383855 ], [ 87.826023, 36.391563 ], [ 87.767509, 36.3747 ], [ 87.731785, 36.384818 ], [ 87.6203, 36.360243 ], [ 87.570409, 36.342409 ], [ 87.470626, 36.354459 ], [ 87.460155, 36.409868 ], [ 87.426895, 36.42576 ], [ 87.386859, 36.412757 ], [ 87.363453, 36.420463 ], [ 87.348055, 36.393008 ], [ 87.292004, 36.358797 ], [ 87.193454, 36.349158 ], [ 87.161425, 36.325535 ], [ 87.149106, 36.297565 ], [ 87.08628, 36.310587 ], [ 87.051788, 36.2966 ], [ 86.996353, 36.308658 ], [ 86.943998, 36.284058 ], [ 86.931064, 36.265242 ], [ 86.887332, 36.262829 ], [ 86.86331, 36.299977 ], [ 86.836209, 36.291294 ], [ 86.746282, 36.291777 ], [ 86.69947, 36.24449 ], [ 86.599072, 36.222285 ], [ 86.531935, 36.227113 ], [ 86.515305, 36.205385 ], [ 86.454943, 36.221319 ], [ 86.392733, 36.206834 ], [ 86.35824, 36.168676 ], [ 86.2794, 36.170608 ], [ 86.248603, 36.141616 ], [ 86.187625, 36.130983 ], [ 86.182081, 36.064734 ], [ 86.199944, 36.047801 ], [ 86.173458, 36.008113 ], [ 86.150668, 36.00424 ], [ 86.129111, 35.941761 ], [ 86.093386, 35.906868 ], [ 86.090306, 35.876809 ], [ 86.05335, 35.842857 ], [ 86.035488, 35.846738 ], [ 85.949256, 35.778794 ], [ 85.903677, 35.78462 ], [ 85.835308, 35.771996 ], [ 85.811286, 35.778794 ], [ 85.691178, 35.751114 ], [ 85.65299, 35.731199 ], [ 85.612953, 35.651486 ], [ 85.566142, 35.6403 ], [ 85.518715, 35.680658 ], [ 85.373969, 35.700101 ], [ 85.341324, 35.753543 ], [ 85.271107, 35.788989 ], [ 85.146071, 35.742371 ], [ 85.053065, 35.752086 ], [ 84.99455, 35.737028 ], [ 84.973608, 35.709334 ], [ 84.920022, 35.696213 ], [ 84.798066, 35.647595 ], [ 84.729081, 35.613546 ], [ 84.704443, 35.616951 ], [ 84.628067, 35.595055 ], [ 84.570168, 35.588242 ], [ 84.513502, 35.564391 ], [ 84.448828, 35.550272 ], [ 84.475929, 35.516181 ], [ 84.45314, 35.473303 ], [ 84.424191, 35.466479 ], [ 84.333032, 35.413821 ], [ 84.274517, 35.404065 ], [ 84.200605, 35.381135 ], [ 84.160569, 35.359663 ], [ 84.140859, 35.379184 ], [ 84.095895, 35.362592 ], [ 84.077417, 35.400163 ], [ 84.005968, 35.422599 ], [ 83.906186, 35.40309 ], [ 83.885244, 35.367472 ], [ 83.79778, 35.354783 ], [ 83.785462, 35.36308 ], [ 83.677672, 35.361128 ], [ 83.622238, 35.335256 ], [ 83.599448, 35.351366 ], [ 83.54155, 35.341603 ], [ 83.540318, 35.364056 ], [ 83.502745, 35.360639 ], [ 83.449159, 35.382111 ], [ 83.405427, 35.380648 ], [ 83.333978, 35.397236 ], [ 83.280391, 35.401138 ], [ 83.251442, 35.417722 ], [ 83.178145, 35.38943 ], [ 83.127022, 35.398699 ], [ 83.088834, 35.425526 ], [ 83.067892, 35.46258 ], [ 82.998907, 35.484512 ], [ 82.971806, 35.548324 ], [ 82.981661, 35.599922 ], [ 82.956407, 35.636409 ], [ 82.967494, 35.667532 ], [ 82.894813, 35.673852 ], [ 82.873871, 35.688922 ], [ 82.795031, 35.688436 ], [ 82.780249, 35.666073 ], [ 82.731589, 35.637868 ], [ 82.652133, 35.67288 ], [ 82.628727, 35.692324 ], [ 82.546192, 35.708362 ], [ 82.501844, 35.701073 ], [ 82.468583, 35.717595 ], [ 82.424852, 35.712736 ], [ 82.392823, 35.656349 ], [ 82.336156, 35.651486 ], [ 82.350323, 35.611113 ], [ 82.328149, 35.559523 ], [ 82.2992, 35.544916 ], [ 82.263475, 35.547837 ], [ 82.234526, 35.520565 ], [ 82.189563, 35.513258 ], [ 82.164925, 35.495719 ], [ 82.086701, 35.467454 ], [ 82.071302, 35.450393 ], [ 82.034346, 35.451855 ], [ 82.029419, 35.426013 ], [ 82.05344, 35.35039 ], [ 82.030034, 35.321585 ], [ 81.99123, 35.30547 ], [ 81.955506, 35.307423 ], [ 81.927789, 35.271275 ], [ 81.853876, 35.25857 ], [ 81.804601, 35.270786 ], [ 81.736847, 35.26248 ], [ 81.68634, 35.235599 ], [ 81.513261, 35.23511 ], [ 81.504638, 35.279092 ], [ 81.447972, 35.318167 ], [ 81.441196, 35.333303 ], [ 81.385762, 35.335256 ], [ 81.363588, 35.354783 ], [ 81.314313, 35.337209 ], [ 81.285364, 35.345508 ], [ 81.26627, 35.322562 ], [ 81.219458, 35.319144 ], [ 81.191741, 35.36552 ], [ 81.142466, 35.365032 ], [ 81.103662, 35.386015 ], [ 81.09935, 35.40748 ], [ 81.054387, 35.402602 ], [ 81.031597, 35.380648 ], [ 81.030981, 35.337209 ], [ 81.002648, 35.334768 ], [ 81.026053, 35.31133 ], [ 80.963844, 35.310842 ], [ 80.924423, 35.330862 ], [ 80.894242, 35.324027 ], [ 80.844351, 35.345508 ], [ 80.759968, 35.334768 ], [ 80.689135, 35.339162 ], [ 80.690982, 35.364544 ], [ 80.65649, 35.393821 ], [ 80.599823, 35.409431 ], [ 80.56841, 35.391381 ], [ 80.532686, 35.404553 ], [ 80.514824, 35.391869 ], [ 80.444607, 35.417235 ], [ 80.432904, 35.449418 ], [ 80.375006, 35.387966 ], [ 80.321419, 35.38699 ], [ 80.286926, 35.35283 ], [ 80.267832, 35.295701 ], [ 80.362687, 35.20871 ], [ 80.257977, 35.203331 ], [ 80.223484, 35.177409 ], [ 80.23026, 35.147565 ], [ 80.118159, 35.066293 ], [ 80.078123, 35.076578 ], [ 80.031311, 35.034447 ], [ 80.04363, 35.022196 ], [ 80.02392, 34.971209 ], [ 80.041782, 34.943252 ], [ 80.034391, 34.902033 ], [ 80.003594, 34.895162 ], [ 79.996819, 34.856375 ], [ 79.961094, 34.862759 ], [ 79.926602, 34.849499 ], [ 79.947544, 34.821008 ], [ 79.898268, 34.732035 ], [ 79.906892, 34.683821 ], [ 79.866856, 34.671517 ], [ 79.88595, 34.642965 ], [ 79.84345, 34.55725 ], [ 79.861312, 34.528166 ], [ 79.801566, 34.478847 ], [ 79.735661, 34.471447 ], [ 79.699936, 34.477861 ], [ 79.675914, 34.451216 ], [ 79.58106, 34.456151 ], [ 79.545335, 34.476381 ], [ 79.504683, 34.45467 ], [ 79.435082, 34.447761 ], [ 79.363017, 34.428018 ], [ 79.326677, 34.44332 ], [ 79.274322, 34.435916 ], [ 79.241677, 34.415183 ], [ 79.179467, 34.422588 ], [ 79.161605, 34.441345 ], [ 79.072294, 34.412714 ], [ 79.039033, 34.421601 ], [ 79.0107, 34.399877 ], [ 79.048888, 34.348506 ], [ 79.039649, 34.33467 ], [ 78.973128, 34.362833 ], [ 78.958961, 34.386049 ], [ 78.899831, 34.354929 ], [ 78.878273, 34.391481 ], [ 78.809288, 34.432955 ], [ 78.742766, 34.45467 ], [ 78.758781, 34.481807 ], [ 78.715049, 34.502031 ], [ 78.708274, 34.522249 ], [ 78.634977, 34.538026 ], [ 78.58139, 34.505483 ], [ 78.562912, 34.51288 ], [ 78.559832, 34.55725 ], [ 78.542586, 34.574499 ], [ 78.492695, 34.578441 ], [ 78.436029, 34.543942 ], [ 78.427405, 34.594207 ], [ 78.397224, 34.605538 ], [ 78.346101, 34.60406 ], [ 78.280812, 34.623269 ], [ 78.265413, 34.651335 ], [ 78.267261, 34.705472 ], [ 78.213059, 34.717771 ], [ 78.21429, 34.760556 ], [ 78.230921, 34.776288 ], [ 78.237696, 34.882398 ], [ 78.206283, 34.891726 ], [ 78.182262, 34.936874 ], [ 78.201972, 34.974642 ], [ 78.160704, 34.990823 ], [ 78.123131, 35.036897 ], [ 78.150849, 35.069721 ], [ 78.124979, 35.108407 ], [ 78.078784, 35.100084 ], [ 78.062769, 35.114772 ], [ 78.060306, 35.180344 ], [ 78.01719, 35.228267 ], [ 78.020885, 35.315237 ], [ 78.013494, 35.366008 ], [ 78.046755, 35.384063 ], [ 78.107117, 35.437229 ], [ 78.113892, 35.466967 ], [ 78.140378, 35.494745 ], [ 78.048603, 35.491334 ], [ 78.029509, 35.469404 ], [ 78.009799, 35.491821 ], [ 77.951284, 35.478664 ], [ 77.917408, 35.490847 ], [ 77.914944, 35.465017 ], [ 77.870596, 35.495232 ], [ 77.85643, 35.487436 ], [ 77.816394, 35.518616 ], [ 77.797299, 35.491334 ], [ 77.757879, 35.497181 ], [ 77.735706, 35.461605 ], [ 77.690742, 35.448443 ], [ 77.657481, 35.477689 ], [ 77.639619, 35.45478 ], [ 77.590344, 35.460143 ], [ 77.578025, 35.47574 ], [ 77.518895, 35.482075 ], [ 77.451758, 35.46063 ], [ 77.396939, 35.467942 ], [ 77.355055, 35.494257 ], [ 77.331649, 35.530793 ], [ 77.307628, 35.540533 ], [ 77.195527, 35.519103 ], [ 77.093281, 35.569746 ], [ 77.072339, 35.591162 ], [ 76.99781, 35.611113 ], [ 76.967013, 35.591649 ], [ 76.906651, 35.615005 ], [ 76.848753, 35.668018 ], [ 76.769297, 35.653917 ], [ 76.69292, 35.747714 ], [ 76.593754, 35.771996 ], [ 76.566037, 35.819082 ], [ 76.587595, 35.840431 ], [ 76.579587, 35.866625 ], [ 76.59745, 35.895718 ], [ 76.55803, 35.923347 ], [ 76.51553, 35.881173 ], [ 76.471798, 35.886021 ], [ 76.431762, 35.851589 ], [ 76.369552, 35.86323 ], [ 76.365857, 35.82442 ], [ 76.298719, 35.841401 ], [ 76.228502, 35.837035 ], [ 76.221727, 35.823449 ], [ 76.160133, 35.82442 ], [ 76.146582, 35.839946 ], [ 76.16506, 35.908807 ], [ 76.117017, 35.975186 ], [ 76.097307, 36.022635 ], [ 76.044336, 36.026991 ], [ 76.028322, 36.016827 ], [ 75.982742, 36.031347 ], [ 75.949482, 36.070056 ], [ 75.936547, 36.13485 ], [ 75.96796, 36.159013 ], [ 76.016619, 36.165294 ], [ 76.011691, 36.229044 ], [ 76.060967, 36.225182 ], [ 76.055423, 36.252695 ], [ 75.998757, 36.312034 ], [ 75.991365, 36.35205 ], [ 76.035097, 36.409386 ], [ 75.991981, 36.505654 ], [ 75.924228, 36.566242 ], [ 75.947018, 36.590752 ], [ 75.871257, 36.666636 ], [ 75.8072, 36.707908 ], [ 75.724048, 36.750597 ], [ 75.634121, 36.771693 ], [ 75.588541, 36.762584 ], [ 75.537418, 36.773131 ], [ 75.536802, 36.729975 ], [ 75.504773, 36.743404 ], [ 75.458578, 36.720861 ], [ 75.425933, 36.778883 ], [ 75.434556, 36.83303 ], [ 75.430245, 36.873255 ], [ 75.396368, 36.904367 ], [ 75.413614, 36.954599 ], [ 75.345861, 36.960816 ], [ 75.288579, 36.974682 ], [ 75.244847, 36.963207 ], [ 75.16847, 36.991892 ], [ 75.172166, 37.013877 ], [ 75.063145, 37.006231 ], [ 75.032348, 37.016745 ], [ 75.005862, 36.99476 ], [ 74.927638, 36.978029 ], [ 74.938725, 36.94312 ], [ 74.893762, 36.939772 ], [ 74.86974, 36.990458 ], [ 74.84387, 37.0134 ], [ 74.84695, 37.056873 ], [ 74.806914, 37.054485 ], [ 74.792747, 37.027257 ], [ 74.739161, 37.028212 ], [ 74.70898, 37.084569 ], [ 74.632603, 37.066425 ], [ 74.617205, 37.043499 ], [ 74.56793, 37.032512 ], [ 74.530357, 37.082182 ], [ 74.498944, 37.072155 ], [ 74.496481, 37.116072 ], [ 74.465068, 37.147085 ], [ 74.487858, 37.161871 ], [ 74.477387, 37.19954 ], [ 74.511263, 37.240048 ], [ 74.54514, 37.2491 ], [ 74.578401, 37.231472 ], [ 74.598727, 37.258151 ], [ 74.642458, 37.261485 ], [ 74.665864, 37.23576 ], [ 74.727458, 37.282916 ], [ 74.753943, 37.281011 ], [ 74.800139, 37.248147 ], [ 74.816153, 37.216699 ], [ 74.911008, 37.233378 ], [ 74.927022, 37.277678 ], [ 75.018181, 37.293867 ], [ 75.078543, 37.318144 ], [ 75.125971, 37.322427 ], [ 75.140137, 37.355258 ], [ 75.125971, 37.388075 ], [ 75.153072, 37.414223 ], [ 75.129666, 37.459367 ], [ 75.090862, 37.486915 ], [ 75.078543, 37.511129 ], [ 75.035428, 37.500685 ], [ 75.002167, 37.511604 ], [ 75.000935, 37.53059 ], [ 74.940573, 37.559061 ], [ 74.891914, 37.668097 ], [ 74.920863, 37.684675 ], [ 74.923327, 37.717347 ], [ 74.949196, 37.725395 ], [ 75.006478, 37.770823 ], [ 74.989848, 37.797783 ], [ 74.917167, 37.845057 ], [ 74.936877, 37.876241 ], [ 74.919015, 37.908357 ], [ 74.911008, 37.966884 ], [ 74.92579, 38.01735 ], [ 74.879595, 38.021122 ], [ 74.821697, 38.10311 ], [ 74.80445, 38.167128 ], [ 74.816769, 38.215576 ], [ 74.793363, 38.271039 ], [ 74.806914, 38.285602 ], [ 74.789668, 38.324581 ], [ 74.834015, 38.361193 ], [ 74.868508, 38.403883 ], [ 74.862965, 38.484035 ], [ 74.821697, 38.491062 ], [ 74.78474, 38.538357 ], [ 74.717603, 38.542102 ], [ 74.639995, 38.599653 ], [ 74.613509, 38.593105 ], [ 74.546988, 38.607604 ], [ 74.506336, 38.637528 ], [ 74.455829, 38.632853 ], [ 74.421952, 38.647812 ], [ 74.353583, 38.655757 ], [ 74.229779, 38.656224 ], [ 74.147859, 38.676785 ], [ 74.11275, 38.611345 ], [ 74.088113, 38.610878 ], [ 74.068403, 38.585621 ], [ 74.090577, 38.542102 ], [ 74.034526, 38.541634 ], [ 74.011736, 38.52478 ], [ 73.926121, 38.536016 ], [ 73.89902, 38.579071 ], [ 73.852208, 38.584217 ], [ 73.799237, 38.610878 ], [ 73.809092, 38.634256 ], [ 73.757353, 38.719755 ], [ 73.769056, 38.775765 ], [ 73.729636, 38.837324 ], [ 73.699455, 38.857832 ], [ 73.70931, 38.893241 ], [ 73.742571, 38.933754 ], [ 73.767824, 38.941202 ], [ 73.826339, 38.916993 ], [ 73.846665, 38.962145 ], [ 73.839889, 39.008199 ], [ 73.820179, 39.041674 ], [ 73.780143, 39.026798 ], [ 73.743187, 39.029588 ], [ 73.720397, 39.071881 ], [ 73.719781, 39.108112 ], [ 73.688368, 39.154999 ], [ 73.657571, 39.166136 ], [ 73.639709, 39.220402 ], [ 73.623079, 39.235237 ], [ 73.580579, 39.237555 ], [ 73.564564, 39.266288 ], [ 73.542391, 39.269531 ], [ 73.554709, 39.295935 ], [ 73.554094, 39.350102 ], [ 73.502355, 39.383877 ], [ 73.592898, 39.412087 ], [ 73.61076, 39.465702 ], [ 73.6471, 39.474479 ], [ 73.745651, 39.462005 ], [ 73.836194, 39.472169 ], [ 73.868223, 39.482794 ], [ 73.893476, 39.528046 ], [ 73.883621, 39.540969 ], [ 73.914418, 39.564041 ], [ 73.916266, 39.586644 ], [ 73.953838, 39.600018 ], [ 73.924273, 39.722108 ], [ 73.905795, 39.741899 ], [ 73.841737, 39.756163 ], [ 73.845433, 39.831115 ], [ 73.907027, 39.873843 ], [ 73.910722, 39.934443 ], [ 73.980324, 40.004617 ], [ 73.943367, 40.016076 ], [ 74.008041, 40.050901 ], [ 74.023439, 40.085251 ], [ 74.113366, 40.086624 ], [ 74.126301, 40.104479 ], [ 74.26304, 40.125074 ], [ 74.280902, 40.09807 ], [ 74.316626, 40.106767 ], [ 74.356662, 40.089371 ], [ 74.433039, 40.13148 ], [ 74.485394, 40.182251 ], [ 74.534669, 40.207851 ], [ 74.577169, 40.260391 ], [ 74.618437, 40.27957 ], [ 74.673255, 40.278656 ], [ 74.697893, 40.310153 ], [ 74.700357, 40.346195 ], [ 74.824776, 40.344371 ], [ 74.862965, 40.32658 ], [ 74.908544, 40.338897 ], [ 74.795211, 40.443278 ], [ 74.814921, 40.461039 ], [ 74.819233, 40.505647 ], [ 74.844486, 40.521117 ], [ 74.891914, 40.507467 ], [ 74.963363, 40.464681 ], [ 74.995392, 40.455119 ], [ 75.021877, 40.466958 ], [ 75.051442, 40.449654 ], [ 75.102565, 40.44009 ], [ 75.13521, 40.463315 ], [ 75.206659, 40.447833 ], [ 75.242383, 40.448743 ], [ 75.268869, 40.483802 ], [ 75.292274, 40.483802 ], [ 75.355716, 40.537947 ], [ 75.432093, 40.563412 ], [ 75.467817, 40.599773 ], [ 75.550353, 40.64883 ], [ 75.599628, 40.659727 ], [ 75.636584, 40.624306 ], [ 75.627345, 40.605226 ], [ 75.631041, 40.548862 ], [ 75.646439, 40.516567 ], [ 75.733287, 40.474242 ], [ 75.717272, 40.443278 ], [ 75.686475, 40.418223 ], [ 75.669845, 40.363982 ], [ 75.688323, 40.343915 ], [ 75.709265, 40.280939 ], [ 75.739446, 40.299199 ], [ 75.785642, 40.301025 ], [ 75.831221, 40.327492 ], [ 75.84046, 40.312434 ], [ 75.890351, 40.30924 ], [ 75.921764, 40.291439 ], [ 75.932235, 40.339353 ], [ 75.986438, 40.381763 ], [ 76.026474, 40.355317 ], [ 76.048648, 40.357141 ], [ 76.048648, 40.388601 ], [ 76.081293, 40.39635 ], [ 76.144118, 40.393615 ], [ 76.176147, 40.381307 ], [ 76.22419, 40.401819 ], [ 76.279625, 40.439179 ], [ 76.283321, 40.415034 ], [ 76.327668, 40.391336 ], [ 76.333212, 40.343459 ], [ 76.381871, 40.39088 ], [ 76.390494, 40.37766 ], [ 76.442233, 40.391336 ], [ 76.470566, 40.422779 ], [ 76.508754, 40.429613 ], [ 76.539551, 40.464226 ], [ 76.543247, 40.513837 ], [ 76.556798, 40.542495 ], [ 76.601145, 40.578868 ], [ 76.611, 40.601591 ], [ 76.657196, 40.620218 ], [ 76.654732, 40.652917 ], [ 76.676906, 40.696036 ], [ 76.646725, 40.73686 ], [ 76.646725, 40.759983 ], [ 76.693536, 40.779472 ], [ 76.731724, 40.818887 ], [ 76.741579, 40.912119 ], [ 76.761905, 40.954167 ], [ 76.817956, 40.975406 ], [ 76.85368, 40.97631 ], [ 76.885709, 41.027347 ], [ 76.940528, 41.028701 ], [ 77.002122, 41.073381 ], [ 77.023064, 41.059394 ], [ 77.091433, 41.062553 ], [ 77.108063, 41.038181 ], [ 77.169041, 41.009285 ], [ 77.236795, 41.027798 ], [ 77.296541, 41.004769 ], [ 77.363062, 41.04089 ], [ 77.415417, 41.038633 ], [ 77.473931, 41.022832 ], [ 77.476395, 40.999349 ], [ 77.540453, 41.006575 ], [ 77.591576, 40.992122 ], [ 77.597119, 41.005221 ], [ 77.654402, 41.016059 ], [ 77.684583, 41.00793 ], [ 77.737553, 41.032313 ], [ 77.780669, 41.022832 ], [ 77.796068, 41.049014 ], [ 77.829328, 41.059394 ], [ 77.807155, 41.091876 ], [ 77.814546, 41.13426 ], [ 77.836104, 41.153189 ], [ 77.905089, 41.185174 ], [ 77.972842, 41.173013 ], [ 78.094798, 41.224347 ], [ 78.129291, 41.228398 ], [ 78.136682, 41.279239 ], [ 78.165015, 41.340825 ], [ 78.149617, 41.368228 ], [ 78.163783, 41.383497 ], [ 78.235232, 41.399211 ], [ 78.324544, 41.384395 ], [ 78.338094, 41.397415 ], [ 78.385522, 41.394721 ], [ 78.391681, 41.408189 ], [ 78.454507, 41.412228 ], [ 78.527188, 41.440947 ], [ 78.580774, 41.481759 ], [ 78.650375, 41.467411 ], [ 78.675629, 41.50238 ], [ 78.707042, 41.522098 ], [ 78.696571, 41.54181 ], [ 78.739071, 41.555695 ], [ 78.825302, 41.560173 ], [ 78.86657, 41.593749 ], [ 78.891824, 41.597777 ], [ 78.957729, 41.65146 ], [ 78.99407, 41.664427 ], [ 79.021787, 41.657273 ], [ 79.043345, 41.681414 ], [ 79.10925, 41.697503 ], [ 79.138199, 41.722968 ], [ 79.21704, 41.725648 ], [ 79.271858, 41.767174 ], [ 79.276786, 41.78101 ], [ 79.326061, 41.809565 ], [ 79.356242, 41.795735 ], [ 79.415372, 41.836769 ], [ 79.457256, 41.847915 ], [ 79.500988, 41.835432 ], [ 79.550879, 41.834094 ], [ 79.616784, 41.856385 ], [ 79.640806, 41.884907 ], [ 79.724574, 41.896935 ], [ 79.776313, 41.89248 ], [ 79.822508, 41.963275 ], [ 79.854537, 41.984186 ], [ 79.852689, 42.015319 ], [ 79.923522, 42.042436 ], [ 80.089826, 42.047325 ], [ 80.14218, 42.03488 ], [ 80.193303, 42.081535 ], [ 80.16805, 42.096635 ], [ 80.139717, 42.151232 ], [ 80.163738, 42.152563 ], [ 80.168666, 42.200462 ], [ 80.233339, 42.210215 ], [ 80.28631, 42.233261 ], [ 80.29247, 42.259842 ], [ 80.272144, 42.281984 ], [ 80.283847, 42.320493 ], [ 80.229028, 42.358536 ], [ 80.239499, 42.389927 ], [ 80.206238, 42.431462 ], [ 80.225948, 42.485769 ], [ 80.265368, 42.502097 ], [ 80.221637, 42.533415 ], [ 80.180985, 42.590718 ], [ 80.163738, 42.629919 ], [ 80.179753, 42.670415 ], [ 80.228412, 42.692852 ], [ 80.225948, 42.713083 ], [ 80.259209, 42.790865 ], [ 80.262289, 42.828623 ], [ 80.280151, 42.838278 ], [ 80.338049, 42.831695 ], [ 80.407034, 42.834767 ], [ 80.450766, 42.861971 ], [ 80.503737, 42.882146 ], [ 80.602903, 42.894424 ], [ 80.5912, 42.923354 ], [ 80.487106, 42.948766 ], [ 80.397795, 42.996933 ], [ 80.378701, 43.031502 ], [ 80.416889, 43.05687 ], [ 80.482795, 43.06955 ], [ 80.556092, 43.104515 ], [ 80.593048, 43.133347 ], [ 80.650946, 43.147321 ], [ 80.706997, 43.143828 ], [ 80.73225, 43.131163 ], [ 80.752576, 43.148194 ], [ 80.79446, 43.137277 ], [ 80.804315, 43.178314 ], [ 80.789533, 43.201876 ], [ 80.788917, 43.242433 ], [ 80.769207, 43.265535 ], [ 80.777214, 43.308227 ], [ 80.69283, 43.32042 ], [ 80.686055, 43.333916 ], [ 80.735946, 43.389609 ], [ 80.746417, 43.439167 ], [ 80.761199, 43.446554 ], [ 80.75504, 43.494329 ], [ 80.522215, 43.816473 ], [ 80.511128, 43.906657 ], [ 80.475404, 43.938124 ], [ 80.485259, 43.95579 ], [ 80.457541, 43.981203 ], [ 80.458773, 44.047054 ], [ 80.449534, 44.078017 ], [ 80.3941, 44.127009 ], [ 80.407034, 44.149772 ], [ 80.400875, 44.198704 ], [ 80.413194, 44.264741 ], [ 80.399027, 44.30587 ], [ 80.383013, 44.401297 ], [ 80.350368, 44.484615 ], [ 80.411962, 44.605321 ], [ 80.400259, 44.628751 ], [ 80.313412, 44.704938 ], [ 80.238883, 44.7228 ], [ 80.200695, 44.756808 ], [ 80.178521, 44.796741 ], [ 80.18776, 44.825612 ], [ 80.169898, 44.84471 ], [ 80.115695, 44.815424 ], [ 80.087978, 44.817122 ], [ 79.999283, 44.793768 ], [ 79.991891, 44.830281 ], [ 79.953703, 44.849377 ], [ 79.969102, 44.877797 ], [ 79.887798, 44.90917 ], [ 79.944464, 44.937985 ], [ 79.951855, 44.957892 ], [ 79.98142, 44.964244 ], [ 80.056565, 45.011227 ], [ 80.060876, 45.026033 ], [ 80.111999, 45.052675 ], [ 80.136021, 45.041259 ], [ 80.144644, 45.059017 ], [ 80.195767, 45.030686 ], [ 80.24381, 45.031532 ], [ 80.291854, 45.06578 ], [ 80.328194, 45.070007 ], [ 80.358375, 45.040836 ], [ 80.404571, 45.049293 ], [ 80.443991, 45.077614 ], [ 80.445839, 45.097895 ], [ 80.493882, 45.127037 ], [ 80.519135, 45.108878 ], [ 80.599207, 45.105921 ], [ 80.686055, 45.129148 ], [ 80.731634, 45.156164 ], [ 80.816634, 45.152788 ], [ 80.862214, 45.127037 ], [ 80.897938, 45.127459 ], [ 80.93551, 45.160384 ], [ 80.966307, 45.168402 ], [ 81.024821, 45.162916 ], [ 81.080872, 45.182745 ], [ 81.111669, 45.218168 ], [ 81.170183, 45.211001 ], [ 81.175111, 45.227863 ], [ 81.236705, 45.247248 ], [ 81.284748, 45.23882 ], [ 81.327864, 45.260729 ], [ 81.382066, 45.257781 ], [ 81.398697, 45.275471 ], [ 81.437501, 45.28263 ], [ 81.462754, 45.264099 ], [ 81.52866, 45.285999 ], [ 81.536667, 45.304101 ], [ 81.575471, 45.30789 ], [ 81.582863, 45.336503 ], [ 81.645072, 45.359216 ], [ 81.677101, 45.35459 ], [ 81.78797, 45.3836 ], [ 81.832318, 45.319673 ], [ 81.879745, 45.284314 ], [ 81.921013, 45.233342 ], [ 81.993078, 45.237978 ], [ 82.052824, 45.255674 ], [ 82.09594, 45.249776 ], [ 82.091012, 45.222383 ], [ 82.109491, 45.211422 ], [ 82.206809, 45.236713 ], [ 82.294272, 45.247669 ], [ 82.344779, 45.219011 ], [ 82.487061, 45.181058 ], [ 82.562822, 45.204676 ], [ 82.58746, 45.224069 ], [ 82.60101, 45.346178 ], [ 82.546808, 45.426038 ], [ 82.448257, 45.461309 ], [ 82.281954, 45.53891 ], [ 82.266555, 45.620172 ], [ 82.288729, 45.655321 ], [ 82.289961, 45.71636 ], [ 82.340468, 45.772742 ], [ 82.349707, 45.822811 ], [ 82.336156, 45.882418 ], [ 82.342932, 45.935303 ], [ 82.401446, 45.972333 ], [ 82.461808, 45.97982 ], [ 82.518474, 46.153798 ], [ 82.609017, 46.294985 ], [ 82.726662, 46.494756 ], [ 82.774089, 46.600124 ], [ 82.788872, 46.677784 ], [ 82.829524, 46.772551 ], [ 82.878183, 46.797138 ], [ 82.876335, 46.823762 ], [ 82.923762, 46.932169 ], [ 82.937929, 47.014248 ], [ 82.993364, 47.065229 ], [ 83.031552, 47.168265 ], [ 83.02724, 47.21544 ], [ 83.108544, 47.221944 ], [ 83.15474, 47.236168 ], [ 83.17445, 47.218286 ], [ 83.207094, 47.213814 ], [ 83.221877, 47.186977 ], [ 83.257602, 47.173147 ], [ 83.306261, 47.179656 ], [ 83.324739, 47.167858 ], [ 83.370318, 47.178436 ], [ 83.418978, 47.119012 ], [ 83.463325, 47.132042 ], [ 83.53847, 47.083977 ], [ 83.566803, 47.080717 ], [ 83.576042, 47.059114 ], [ 83.700462, 47.032199 ], [ 83.69923, 47.015472 ], [ 83.766367, 47.026896 ], [ 83.88586, 46.982003 ], [ 83.932671, 46.970161 ], [ 83.951765, 46.98731 ], [ 84.002888, 46.990576 ], [ 84.038613, 46.973428 ], [ 84.086656, 46.965261 ], [ 84.150098, 46.977512 ], [ 84.195061, 47.003638 ], [ 84.2893, 46.994658 ], [ 84.336727, 47.00527 ], [ 84.37122, 46.993434 ], [ 84.425422, 47.008943 ], [ 84.506726, 46.97302 ], [ 84.563393, 46.991801 ], [ 84.668718, 46.995067 ], [ 84.699515, 47.008535 ], [ 84.748175, 47.009759 ], [ 84.781435, 46.979962 ], [ 84.849189, 46.957092 ], [ 84.867051, 46.927673 ], [ 84.934188, 46.863878 ], [ 84.95513, 46.861013 ], [ 84.979768, 46.883106 ], [ 84.987159, 46.918272 ], [ 85.082014, 46.939933 ], [ 85.102956, 46.968936 ], [ 85.175637, 46.997924 ], [ 85.213825, 47.041172 ], [ 85.276651, 47.068898 ], [ 85.325926, 47.044842 ], [ 85.355491, 47.054629 ], [ 85.441106, 47.063191 ], [ 85.545816, 47.057891 ], [ 85.547048, 47.096609 ], [ 85.582772, 47.142626 ], [ 85.641903, 47.18413 ], [ 85.682555, 47.222757 ], [ 85.682555, 47.249982 ], [ 85.701033, 47.28856 ], [ 85.675779, 47.321837 ], [ 85.701649, 47.384275 ], [ 85.685018, 47.428829 ], [ 85.614801, 47.498015 ], [ 85.617881, 47.550552 ], [ 85.547048, 48.008205 ], [ 85.531649, 48.046227 ], [ 85.551975, 48.081423 ], [ 85.55136, 48.127781 ], [ 85.576613, 48.15853 ], [ 85.587084, 48.191654 ], [ 85.622193, 48.202824 ], [ 85.633895, 48.232731 ], [ 85.678243, 48.266205 ], [ 85.695489, 48.302445 ], [ 85.695489, 48.335078 ], [ 85.758315, 48.403064 ], [ 85.791576, 48.418954 ], [ 85.916612, 48.438015 ], [ 86.053966, 48.441192 ], [ 86.225813, 48.432456 ], [ 86.270161, 48.452307 ], [ 86.305269, 48.491984 ], [ 86.38103, 48.49357 ], [ 86.416138, 48.481671 ], [ 86.579978, 48.538763 ], [ 86.594761, 48.576789 ], [ 86.635413, 48.612016 ], [ 86.640956, 48.629027 ], [ 86.693311, 48.64366 ], [ 86.70255, 48.666195 ], [ 86.771535, 48.717156 ], [ 86.780774, 48.731369 ], [ 86.754289, 48.78463 ], [ 86.770303, 48.810255 ], [ 86.818963, 48.831139 ], [ 86.821426, 48.850439 ], [ 86.782006, 48.887049 ], [ 86.757985, 48.894919 ], [ 86.730267, 48.959797 ], [ 86.732115, 48.994757 ], [ 86.772151, 49.02773 ], [ 86.836209, 49.051269 ], [ 86.84976, 49.066563 ], [ 86.854071, 49.109284 ], [ 86.887948, 49.132001 ], [ 86.953853, 49.131218 ], [ 87.000049, 49.142572 ], [ 87.088128, 49.133567 ], [ 87.112766, 49.15549 ], [ 87.211932, 49.140615 ], [ 87.239033, 49.114376 ], [ 87.304939, 49.112418 ], [ 87.388707, 49.097921 ], [ 87.43675, 49.075188 ], [ 87.511894, 49.10184 ], [ 87.49588, 49.132001 ], [ 87.517438, 49.145704 ], [ 87.563017, 49.142572 ], [ 87.602437, 49.152359 ], [ 87.67635, 49.15549 ], [ 87.700372, 49.175839 ], [ 87.762582, 49.172709 ], [ 87.793379, 49.18249 ], [ 87.821096, 49.173883 ], [ 87.82048, 49.148445 ], [ 87.845733, 49.146096 ], [ 87.867291, 49.108892 ], [ 87.844502, 49.090084 ], [ 87.858052, 49.07362 ], [ 87.835263, 49.054406 ], [ 87.883306, 49.023806 ], [ 87.883922, 48.993971 ], [ 87.911639, 48.979833 ], [ 87.871603, 48.963726 ], [ 87.87653, 48.949186 ], [ 87.814321, 48.945256 ], [ 87.793995, 48.927565 ], [ 87.760118, 48.925992 ], [ 87.742256, 48.881146 ], [ 87.78106, 48.872094 ], [ 87.792147, 48.849258 ], [ 87.829103, 48.825623 ], [ 87.803234, 48.824835 ], [ 87.826639, 48.800795 ], [ 87.872219, 48.799612 ], [ 87.93874, 48.757809 ], [ 87.96153, 48.773588 ], [ 88.029283, 48.750313 ], [ 88.064392, 48.712813 ], [ 88.090877, 48.71992 ], [ 88.089645, 48.69504 ], [ 88.02682, 48.65315 ], [ 88.010805, 48.618742 ], [ 87.96153, 48.599353 ], [ 87.973233, 48.575997 ], [ 88.041602, 48.548272 ], [ 88.10874, 48.545895 ], [ 88.130297, 48.521721 ], [ 88.151855, 48.526478 ], [ 88.196819, 48.493967 ], [ 88.229464, 48.498329 ], [ 88.318159, 48.478497 ], [ 88.363123, 48.460641 ], [ 88.360659, 48.433251 ], [ 88.438267, 48.393528 ], [ 88.462289, 48.392335 ], [ 88.503557, 48.412996 ], [ 88.523267, 48.403461 ], [ 88.535586, 48.368884 ], [ 88.573158, 48.369679 ], [ 88.573774, 48.351785 ], [ 88.605803, 48.337863 ], [ 88.575006, 48.277757 ], [ 88.594716, 48.259831 ], [ 88.601491, 48.221567 ], [ 88.638447, 48.183674 ], [ 88.668628, 48.171303 ], [ 88.700657, 48.180881 ], [ 88.721599, 48.160526 ], [ 88.79736, 48.133772 ], [ 88.824461, 48.107005 ], [ 88.939026, 48.115396 ], [ 88.953808, 48.090618 ], [ 89.027105, 48.051028 ], [ 89.044967, 48.009806 ], [ 89.078228, 47.98698 ], [ 89.156452, 47.996992 ], [ 89.231597, 47.98017 ], [ 89.282104, 47.994189 ], [ 89.308589, 48.021816 ], [ 89.359712, 48.026219 ], [ 89.38127, 48.046227 ], [ 89.498299, 48.02822 ], [ 89.569132, 48.037825 ], [ 89.599313, 48.015811 ], [ 89.595617, 47.973359 ], [ 89.645508, 47.947711 ], [ 89.651052, 47.913627 ], [ 89.735435, 47.89758 ], [ 89.761921, 47.835751 ], [ 89.86971, 47.834144 ], [ 89.957789, 47.842982 ], [ 89.960253, 47.885942 ], [ 90.040941, 47.874704 ], [ 90.066195, 47.883534 ], [ 90.086521, 47.86547 ], [ 90.070506, 47.820483 ], [ 90.07605, 47.777469 ], [ 90.13518, 47.723147 ], [ 90.180144, 47.72516 ], [ 90.216484, 47.70543 ], [ 90.331665, 47.681663 ], [ 90.384635, 47.644179 ], [ 90.346447, 47.637324 ], [ 90.376012, 47.603036 ], [ 90.398186, 47.547724 ], [ 90.468403, 47.497611 ], [ 90.474562, 47.462422 ], [ 90.459164, 47.43895 ], [ 90.468403, 47.404937 ], [ 90.507823, 47.400076 ], [ 90.526301, 47.379007 ], [ 90.488113, 47.317374 ], [ 90.521374, 47.2845 ], [ 90.56141, 47.206903 ], [ 90.579888, 47.198364 ], [ 90.653801, 47.111681 ], [ 90.691989, 47.080717 ], [ 90.767134, 46.992617 ], [ 90.830575, 46.995883 ], [ 90.901408, 46.960768 ], [ 90.92235, 46.938707 ], [ 90.929742, 46.893331 ], [ 90.958075, 46.879425 ], [ 90.942676, 46.82581 ], [ 90.992567, 46.790583 ], [ 90.992567, 46.769682 ], [ 91.019053, 46.766402 ], [ 91.054161, 46.717598 ], [ 91.036299, 46.670393 ], [ 91.017821, 46.58244 ], [ 91.068328, 46.579149 ], [ 91.079415, 46.558989 ], [ 91.060937, 46.516999 ], [ 91.038147, 46.500936 ], [ 91.025828, 46.444057 ], [ 90.996263, 46.419309 ], [ 90.983328, 46.374734 ], [ 90.900177, 46.31235 ], [ 90.955611, 46.233752 ], [ 90.94822, 46.219262 ], [ 90.98456, 46.160431 ], [ 91.021517, 46.121038 ], [ 91.014741, 46.06667 ], [ 91.028292, 46.023054 ], [ 90.890937, 45.921566 ], [ 90.799778, 45.834905 ], [ 90.714779, 45.728895 ], [ 90.676591, 45.582488 ], [ 90.671047, 45.487747 ], [ 90.723402, 45.464667 ], [ 90.772677, 45.432338 ], [ 90.773909, 45.405874 ], [ 90.813329, 45.32851 ], [ 90.804706, 45.29484 ], [ 90.831807, 45.300313 ], [ 90.877387, 45.280946 ], [ 90.897713, 45.249776 ], [ 90.866916, 45.209314 ], [ 90.881698, 45.192025 ], [ 90.96177, 45.201303 ], [ 91.007966, 45.218589 ], [ 91.050466, 45.208892 ], [ 91.129922, 45.21606 ], [ 91.17119, 45.199616 ], [ 91.195827, 45.159118 ], [ 91.230936, 45.153632 ], [ 91.242023, 45.13717 ], [ 91.33503, 45.129571 ], [ 91.37753, 45.11099 ], [ 91.429268, 45.156586 ], [ 91.448978, 45.156586 ], [ 91.500101, 45.103809 ], [ 91.561695, 45.075501 ], [ 91.694738, 45.065357 ], [ 91.803144, 45.082685 ], [ 91.885679, 45.078882 ], [ 92.056911, 45.086911 ], [ 92.100026, 45.081417 ], [ 92.240461, 45.015881 ], [ 92.315605, 45.028994 ], [ 92.348866, 45.014188 ], [ 92.414155, 45.018419 ], [ 92.501003, 45.001072 ], [ 92.547814, 45.018419 ], [ 92.683937, 45.02561 ], [ 92.779407, 45.050561 ], [ 92.847777, 45.038721 ], [ 92.884117, 45.046756 ], [ 92.922921, 45.03703 ], [ 92.932776, 45.017573 ], [ 93.002377, 45.009958 ], [ 93.062124, 45.018419 ], [ 93.100312, 45.007419 ], [ 93.174225, 45.015458 ], [ 93.252449, 44.991761 ], [ 93.314043, 44.980333 ], [ 93.314659, 44.995147 ], [ 93.376869, 44.985412 ], [ 93.434767, 44.955351 ], [ 93.509296, 44.968055 ], [ 93.613389, 44.926546 ], [ 93.716251, 44.894334 ], [ 93.723642, 44.865498 ], [ 94.066105, 44.732154 ], [ 94.152336, 44.684944 ], [ 94.215162, 44.667921 ], [ 94.227481, 44.645785 ], [ 94.279836, 44.603617 ], [ 94.329727, 44.582734 ], [ 94.359292, 44.515775 ], [ 94.390705, 44.521749 ], [ 94.470777, 44.509373 ], [ 94.557008, 44.462408 ], [ 94.606283, 44.448311 ], [ 94.673421, 44.397021 ], [ 94.722696, 44.34055 ], [ 94.768275, 44.34055 ], [ 94.826174, 44.320001 ], [ 94.945666, 44.292592 ], [ 94.998637, 44.253169 ], [ 95.1286, 44.269884 ], [ 95.238853, 44.277169 ], [ 95.41378, 44.298589 ], [ 95.43041, 44.281882 ], [ 95.4107, 44.245024 ], [ 95.376208, 44.227444 ], [ 95.355882, 44.166087 ], [ 95.35157, 44.090054 ], [ 95.326932, 44.028554 ], [ 95.377439, 44.025972 ], [ 95.426099, 44.009618 ], [ 95.527113, 44.007466 ], [ 95.623199, 43.855756 ], [ 95.645373, 43.787966 ], [ 95.705735, 43.67077 ], [ 95.735916, 43.597569 ], [ 95.857872, 43.417436 ], [ 95.880046, 43.28035 ], [ 95.921314, 43.229789 ], [ 96.363558, 42.900562 ], [ 96.386348, 42.727592 ] ] ] ] } }, +{ "type": "Feature", "properties": { "adcode": "710000", "name": "台湾省", "center": [ 121.509062, 25.044332 ], "centroid": [ 120.971485, 23.749452 ], "childrenNum": 0, "level": "province", "parent": { "adcode": 100000 }, "subFeatureIndex": 31, "acroutes": [ 100000 ] }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 120.443706, 22.441432 ], [ 120.297112, 22.531565 ], [ 120.274323, 22.560307 ], [ 120.20041, 22.721039 ], [ 120.149287, 22.896468 ], [ 120.133272, 23.000625 ], [ 120.029795, 23.048544 ], [ 120.018708, 23.073322 ], [ 120.081534, 23.291728 ], [ 120.108019, 23.341191 ], [ 120.12157, 23.504836 ], [ 120.095084, 23.58768 ], [ 120.102476, 23.701162 ], [ 120.175156, 23.807427 ], [ 120.245989, 23.840276 ], [ 120.278018, 23.92783 ], [ 120.316206, 23.984708 ], [ 120.391967, 24.118055 ], [ 120.451713, 24.182493 ], [ 120.470807, 24.242533 ], [ 120.520698, 24.311816 ], [ 120.546568, 24.370159 ], [ 120.589068, 24.43229 ], [ 120.642654, 24.490033 ], [ 120.68885, 24.600542 ], [ 120.762147, 24.658208 ], [ 120.82374, 24.688118 ], [ 120.89211, 24.767482 ], [ 120.914899, 24.864715 ], [ 120.961095, 24.940167 ], [ 121.009754, 24.993878 ], [ 121.024537, 25.040517 ], [ 121.102145, 25.075214 ], [ 121.132942, 25.078466 ], [ 121.209318, 25.12724 ], [ 121.319572, 25.140785 ], [ 121.371926, 25.159746 ], [ 121.413194, 25.238806 ], [ 121.444607, 25.27074 ], [ 121.53515, 25.307535 ], [ 121.585041, 25.309159 ], [ 121.62323, 25.29455 ], [ 121.655259, 25.242054 ], [ 121.700222, 25.226896 ], [ 121.707613, 25.191701 ], [ 121.745186, 25.161912 ], [ 121.782142, 25.160287 ], [ 121.841888, 25.135367 ], [ 121.917033, 25.138076 ], [ 121.947214, 25.031841 ], [ 121.98109, 25.030757 ], [ 122.012503, 25.001471 ], [ 121.933047, 24.938539 ], [ 121.844968, 24.836476 ], [ 121.841272, 24.734329 ], [ 121.86283, 24.671261 ], [ 121.892395, 24.617953 ], [ 121.88562, 24.529784 ], [ 121.867758, 24.47914 ], [ 121.82649, 24.423572 ], [ 121.809243, 24.339083 ], [ 121.689135, 24.174303 ], [ 121.678048, 24.133895 ], [ 121.643556, 24.097843 ], [ 121.63986, 24.064514 ], [ 121.65957, 24.007125 ], [ 121.621382, 23.920718 ], [ 121.587505, 23.760878 ], [ 121.522832, 23.538858 ], [ 121.5216, 23.483431 ], [ 121.497578, 23.419744 ], [ 121.479716, 23.322507 ], [ 121.440296, 23.271937 ], [ 121.415042, 23.196047 ], [ 121.430441, 23.137175 ], [ 121.409499, 23.1025 ], [ 121.370695, 23.084334 ], [ 121.35468, 23.00999 ], [ 121.324499, 22.945526 ], [ 121.276456, 22.877171 ], [ 121.237652, 22.836362 ], [ 121.21055, 22.770711 ], [ 121.170514, 22.723247 ], [ 121.078739, 22.669691 ], [ 121.03316, 22.650914 ], [ 121.014682, 22.584069 ], [ 120.981421, 22.528248 ], [ 120.914899, 22.302525 ], [ 120.903197, 22.12634 ], [ 120.912436, 22.086418 ], [ 120.907508, 22.033171 ], [ 120.86624, 21.984345 ], [ 120.873016, 21.897191 ], [ 120.854537, 21.883309 ], [ 120.781857, 21.923843 ], [ 120.743052, 21.915515 ], [ 120.701784, 21.927174 ], [ 120.667908, 21.983235 ], [ 120.651277, 22.033171 ], [ 120.661748, 22.067007 ], [ 120.659285, 22.154056 ], [ 120.640806, 22.241605 ], [ 120.569973, 22.361757 ], [ 120.517619, 22.408793 ], [ 120.443706, 22.441432 ] ] ], [ [ [ 124.541855565478286, 25.891845867343921 ], [ 124.530097884119826, 25.910742140955961 ], [ 124.518340202761223, 25.930898166142125 ], [ 124.541015731095655, 25.946015185031744 ], [ 124.566804, 25.941563 ], [ 124.584666, 25.908731 ], [ 124.568730265726629, 25.884707275090506 ], [ 124.541855565478286, 25.891845867343921 ] ] ], [ [ [ 123.445178, 25.726102 ], [ 123.438733103727387, 25.753273194189074 ], [ 123.468967141506624, 25.783087314776932 ], [ 123.513478363792743, 25.768810130270065 ], [ 123.510958860644465, 25.71464081258226 ], [ 123.468547224315259, 25.703722965606424 ], [ 123.445178, 25.726102 ] ] ], [ [ [ 119.646064, 23.550928 ], [ 119.609108, 23.503738 ], [ 119.578927, 23.502641 ], [ 119.562297, 23.530627 ], [ 119.566608, 23.584937 ], [ 119.601717, 23.575613 ], [ 119.61034, 23.604132 ], [ 119.678093, 23.600294 ], [ 119.691028, 23.547087 ], [ 119.646064, 23.550928 ] ] ], [ [ [ 123.652470954139019, 25.910742140955957 ], [ 123.675986316856211, 25.947274936605876 ], [ 123.705800437444026, 25.935517255247277 ], [ 123.71503861565435, 25.912421809721465 ], [ 123.696562259233758, 25.878828434411201 ], [ 123.66968755898553, 25.88680686104739 ], [ 123.652470954139019, 25.910742140955957 ] ] ], [ [ [ 119.506246, 23.625518 ], [ 119.52534, 23.62497 ], [ 119.519181, 23.559705 ], [ 119.47237, 23.556962 ], [ 119.506246, 23.577259 ], [ 119.506246, 23.625518 ] ] ], [ [ [ 119.497623, 23.38679 ], [ 119.516717, 23.349982 ], [ 119.495159, 23.349982 ], [ 119.497623, 23.38679 ] ] ], [ [ [ 119.557369, 23.666634 ], [ 119.586318, 23.675952 ], [ 119.615268, 23.661153 ], [ 119.608492, 23.620035 ], [ 119.557369, 23.666634 ] ] ], [ [ [ 122.066706, 25.6247 ], [ 122.092575, 25.639268 ], [ 122.087032, 25.61067 ], [ 122.066706, 25.6247 ] ] ], [ [ [ 121.468013, 22.67687 ], [ 121.514824, 22.676318 ], [ 121.513592, 22.631582 ], [ 121.474788, 22.643734 ], [ 121.468013, 22.67687 ] ] ], [ [ [ 121.510513, 22.086972 ], [ 121.575802, 22.0842 ], [ 121.575186, 22.037055 ], [ 121.604752, 22.022631 ], [ 121.594281, 21.995443 ], [ 121.533918, 22.022076 ], [ 121.507433, 22.048704 ], [ 121.510513, 22.086972 ] ] ], [ [ [ 122.097503, 25.499987 ], [ 122.122141, 25.495666 ], [ 122.110438, 25.465952 ], [ 122.097503, 25.499987 ] ] ], [ [ [ 119.421247, 23.216949 ], [ 119.453275, 23.216399 ], [ 119.436029, 23.186146 ], [ 119.421247, 23.216949 ] ] ], [ [ [ 120.355011, 22.327439 ], [ 120.383344, 22.355669 ], [ 120.395663, 22.342385 ], [ 120.355011, 22.327439 ] ] ] ] } }, +{ "type": "Feature", "properties": { "adcode": "810000", "name": "香港特别行政区", "center": [ 114.173355, 22.320048 ], "centroid": [ 114.134391, 22.37737 ], "childrenNum": 18, "level": "province", "parent": { "adcode": 100000 }, "subFeatureIndex": 32, "acroutes": [ 100000 ] }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 114.031778, 22.503923 ], [ 114.082285, 22.512216 ], [ 114.095219, 22.534329 ], [ 114.156813, 22.543726 ], [ 114.166052, 22.559201 ], [ 114.222719, 22.553122 ], [ 114.232574, 22.539857 ], [ 114.232574, 22.528801 ], [ 114.260291, 22.547595 ], [ 114.263371, 22.541515 ], [ 114.263987, 22.541515 ], [ 114.28924, 22.52272 ], [ 114.309566, 22.497288 ], [ 114.340979, 22.50337 ], [ 114.2529, 22.445304 ], [ 114.23319, 22.466875 ], [ 114.205473, 22.449729 ], [ 114.220255, 22.427603 ], [ 114.278769, 22.435901 ], [ 114.325581, 22.479041 ], [ 114.376088, 22.436454 ], [ 114.406269, 22.433688 ], [ 114.406269, 22.432582 ], [ 114.385327, 22.41156 ], [ 114.394566, 22.361757 ], [ 114.356994, 22.340171 ], [ 114.323733, 22.384447 ], [ 114.323733, 22.385001 ], [ 114.323117, 22.385554 ], [ 114.322501, 22.385554 ], [ 114.283081, 22.386661 ], [ 114.278153, 22.328546 ], [ 114.315726, 22.299756 ], [ 114.315726, 22.299203 ], [ 114.313262, 22.264315 ], [ 114.284929, 22.263761 ], [ 114.262139, 22.294773 ], [ 114.248588, 22.274837 ], [ 114.265835, 22.200608 ], [ 114.203009, 22.206703 ], [ 114.200545, 22.232188 ], [ 114.164821, 22.226648 ], [ 114.120473, 22.272068 ], [ 114.145726, 22.300864 ], [ 114.121089, 22.320795 ], [ 114.069966, 22.326885 ], [ 114.034857, 22.300864 ], [ 114.029314, 22.262653 ], [ 114.004676, 22.239389 ], [ 114.026234, 22.229418 ], [ 113.996669, 22.206149 ], [ 113.981271, 22.229972 ], [ 113.935691, 22.205041 ], [ 113.899351, 22.215568 ], [ 113.852539, 22.191188 ], [ 113.8433, 22.229418 ], [ 113.889496, 22.271514 ], [ 113.898119, 22.308615 ], [ 113.969568, 22.321349 ], [ 113.955401, 22.298649 ], [ 114.026234, 22.34792 ], [ 113.980039, 22.366185 ], [ 113.941235, 22.355116 ], [ 113.920293, 22.367845 ], [ 113.918445, 22.418199 ], [ 113.977575, 22.45692 ], [ 114.000981, 22.491206 ], [ 114.031778, 22.503923 ] ] ], [ [ [ 114.142647, 22.213906 ], [ 114.166668, 22.205041 ], [ 114.154965, 22.177888 ], [ 114.120473, 22.177888 ], [ 114.123553, 22.238836 ], [ 114.142647, 22.213906 ] ] ], [ [ [ 114.305871, 22.372273 ], [ 114.305255, 22.372826 ], [ 114.332972, 22.353455 ], [ 114.313878, 22.340724 ], [ 114.305871, 22.372273 ] ] ], [ [ [ 114.320037, 22.381127 ], [ 114.320037, 22.38168 ], [ 114.319421, 22.382234 ], [ 114.322501, 22.385554 ], [ 114.323117, 22.385554 ], [ 114.323733, 22.385001 ], [ 114.323733, 22.384447 ], [ 114.320037, 22.381127 ] ] ], [ [ [ 114.305871, 22.369506 ], [ 114.305255, 22.372826 ], [ 114.305871, 22.372273 ], [ 114.305871, 22.369506 ] ] ], [ [ [ 114.315726, 22.299203 ], [ 114.315726, 22.299756 ], [ 114.316342, 22.30031 ], [ 114.316958, 22.298649 ], [ 114.315726, 22.299203 ] ] ], [ [ [ 114.319421, 22.382234 ], [ 114.320037, 22.38168 ], [ 114.320037, 22.381127 ], [ 114.319421, 22.382234 ] ] ], [ [ [ 114.372392, 22.32301 ], [ 114.372392, 22.323564 ], [ 114.373008, 22.323564 ], [ 114.372392, 22.32301 ] ] ], [ [ [ 114.323733, 22.297541 ], [ 114.323733, 22.298095 ], [ 114.324349, 22.297541 ], [ 114.323733, 22.297541 ] ] ] ] } }, +{ "type": "Feature", "properties": { "adcode": "820000", "name": "澳门特别行政区", "center": [ 113.54909, 22.198951 ], "centroid": [ 113.566988, 22.159307 ], "childrenNum": 8, "level": "province", "parent": { "adcode": 100000 }, "subFeatureIndex": 33, "acroutes": [ 100000 ] }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 113.554425, 22.107489 ], [ 113.554425, 22.142416 ], [ 113.534715, 22.174009 ], [ 113.53841, 22.209473 ], [ 113.558736, 22.212244 ], [ 113.575983, 22.194513 ], [ 113.6037, 22.132438 ], [ 113.554425, 22.107489 ] ] ], [ [ [ 113.586453, 22.201162 ], [ 113.575983, 22.194513 ], [ 113.575983, 22.201162 ], [ 113.586453, 22.201162 ] ] ] ] } }, +{ "type": "Feature", "properties": { "adcode": "100000", "name": "", "adchar": "JD" }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 122.51865306, 23.46078502 ], [ 122.51742454, 23.45790762 ], [ 122.51536697, 23.45555069 ], [ 122.51268178, 23.45394494 ], [ 122.50963181, 23.45324755 ], [ 122.5065156, 23.45352678 ], [ 122.5036382, 23.45475531 ], [ 122.50128127, 23.45681287 ], [ 122.49967552, 23.45949807 ], [ 122.49897813, 23.46254804 ], [ 122.49925737, 23.46566424 ], [ 122.77921829, 24.57855302 ], [ 122.78044682, 24.58143041 ], [ 122.78250438, 24.58378734 ], [ 122.78518957, 24.5853931 ], [ 122.78823955, 24.58609049 ], [ 122.79135575, 24.58581125 ], [ 122.79423315, 24.58458272 ], [ 122.79659008, 24.58252516 ], [ 122.79819583, 24.57983997 ], [ 122.79889322, 24.57678999 ], [ 122.79861399, 24.57367379 ], [ 122.51865306, 23.46078502 ] ] ], [ [ [ 121.17202617, 20.8054593 ], [ 121.16966862, 20.80340244 ], [ 121.16679085, 20.80217478 ], [ 121.16367457, 20.80189649 ], [ 121.1606248, 20.8025948 ], [ 121.1579401, 20.80420136 ], [ 121.15588324, 20.80655891 ], [ 121.15465558, 20.80943668 ], [ 121.15437729, 20.81255297 ], [ 121.1550756, 20.81560273 ], [ 121.15668216, 20.81828744 ], [ 121.89404403, 21.70026162 ], [ 121.89640158, 21.70231847 ], [ 121.89927934, 21.70354613 ], [ 121.90239563, 21.70382443 ], [ 121.9054454, 21.70312611 ], [ 121.9081301, 21.70151955 ], [ 121.91018696, 21.699162 ], [ 121.91141462, 21.69628423 ], [ 121.91169291, 21.69316794 ], [ 121.9109946, 21.69011818 ], [ 121.90938804, 21.68743347 ], [ 121.17202617, 20.8054593 ] ] ], [ [ [ 119.47366172, 18.00707291 ], [ 119.47175735, 18.00459056 ], [ 119.46917909, 18.0028182 ], [ 119.46617933, 18.0019293 ], [ 119.4630517, 18.00201089 ], [ 119.46010237, 18.00305497 ], [ 119.45762002, 18.00495935 ], [ 119.45584765, 18.00753761 ], [ 119.45495876, 18.01053737 ], [ 119.45504035, 18.01366499 ], [ 119.45608443, 18.01661433 ], [ 120.00812005, 19.0335793 ], [ 120.01002443, 19.03606165 ], [ 120.01260269, 19.03783401 ], [ 120.01560245, 19.03872291 ], [ 120.01873007, 19.03864132 ], [ 120.02167941, 19.03759723 ], [ 120.02416175, 19.03569286 ], [ 120.02593412, 19.0331146 ], [ 120.02682302, 19.03011484 ], [ 120.02674143, 19.02698721 ], [ 120.02569734, 19.02403788 ], [ 119.47366172, 18.00707291 ] ] ], [ [ [ 119.0726757, 15.04098494 ], [ 119.0726746, 15.04083704 ], [ 119.07218171, 15.00751424 ], [ 119.07164663, 15.00443165 ], [ 119.07018516, 15.00166528 ], [ 119.06794036, 14.99948592 ], [ 119.06513198, 14.99810691 ], [ 119.06203491, 14.99766324 ], [ 119.05895232, 14.99819832 ], [ 119.05618595, 14.99965979 ], [ 119.05400659, 15.00190458 ], [ 119.05262758, 15.00471297 ], [ 119.0521839, 15.00781004 ], [ 119.0526757, 15.04105889 ], [ 119.0526757, 16.04388528 ], [ 119.05316513, 16.04697545 ], [ 119.05458553, 16.04976313 ], [ 119.05679784, 16.05197545 ], [ 119.05958553, 16.05339584 ], [ 119.0626757, 16.05388528 ], [ 119.06576587, 16.05339584 ], [ 119.06855355, 16.05197545 ], [ 119.07076587, 16.04976313 ], [ 119.07218626, 16.04697545 ], [ 119.0726757, 16.04388528 ], [ 119.0726757, 15.04098494 ] ] ], [ [ [ 118.68646749, 11.18959191 ], [ 118.85557939, 11.6136711 ], [ 118.9698053, 11.99151854 ], [ 118.97116801, 11.99433487 ], [ 118.97333431, 11.99659227 ], [ 118.97609216, 11.99806975 ], [ 118.9791716, 11.99862269 ], [ 118.98227119, 11.99819697 ], [ 118.98508753, 11.99683427 ], [ 118.98734492, 11.99466796 ], [ 118.9888224, 11.99191011 ], [ 118.98937534, 11.98883067 ], [ 118.98894963, 11.98573108 ], [ 118.87459939, 11.60747236 ], [ 118.87431591, 11.606662 ], [ 118.70476212, 11.18147468 ], [ 118.70409227, 11.18010771 ], [ 118.54242469, 10.9053354 ], [ 118.54043581, 10.90292022 ], [ 118.53779795, 10.90123786 ], [ 118.53476931, 10.90045298 ], [ 118.53164636, 10.90064241 ], [ 118.5287348, 10.90178762 ], [ 118.52631962, 10.9037765 ], [ 118.52463726, 10.90641436 ], [ 118.52385237, 10.909443 ], [ 118.52404181, 10.91256595 ], [ 118.52518702, 10.91547751 ], [ 118.68646749, 11.18959191 ] ] ], [ [ [ 115.54466883, 7.14672265 ], [ 115.54229721, 7.14468204 ], [ 115.53941108, 7.14347417 ], [ 115.53629295, 7.14321728 ], [ 115.53324806, 7.14393652 ], [ 115.53057445, 7.14556148 ], [ 115.52853383, 7.1479331 ], [ 115.52732596, 7.15081924 ], [ 115.52706908, 7.15393736 ], [ 115.52778832, 7.15698226 ], [ 115.52941328, 7.15965587 ], [ 116.23523025, 7.99221221 ], [ 116.23760187, 7.99425282 ], [ 116.240488, 7.99546069 ], [ 116.24360613, 7.99571758 ], [ 116.24665102, 7.99499834 ], [ 116.24932463, 7.99337338 ], [ 116.25136525, 7.99100176 ], [ 116.25257312, 7.98811563 ], [ 116.25283001, 7.9849975 ], [ 116.25211077, 7.98195261 ], [ 116.2504858, 7.979279 ], [ 115.54466883, 7.14672265 ] ] ], [ [ [ 112.30705249, 3.53487257 ], [ 112.51501594, 3.59753306 ], [ 112.84361424, 3.7506962 ], [ 112.84662187, 3.75155809 ], [ 112.84974864, 3.7514484 ], [ 112.85268847, 3.75037785 ], [ 112.8551536, 3.74845124 ], [ 112.85690272, 3.74585715 ], [ 112.85776462, 3.74284952 ], [ 112.85765492, 3.73972276 ], [ 112.85658437, 3.73678292 ], [ 112.85465776, 3.7343178 ], [ 112.85206367, 3.73256867 ], [ 112.52281386, 3.57910186 ], [ 112.52147408, 3.5785908 ], [ 112.31248917, 3.51562254 ], [ 112.31181658, 3.51544515 ], [ 111.79132585, 3.39736822 ], [ 111.78820398, 3.39716187 ], [ 111.78517113, 3.39793033 ], [ 111.78252419, 3.39959839 ], [ 111.78052226, 3.40200275 ], [ 111.77936129, 3.40490807 ], [ 111.77915495, 3.40802995 ], [ 111.77992341, 3.41106279 ], [ 111.78159146, 3.41370973 ], [ 111.78399583, 3.41571167 ], [ 111.78690114, 3.41687263 ], [ 112.30705249, 3.53487257 ] ] ], [ [ [ 108.26055972, 6.08912451 ], [ 108.26004031, 6.09098419 ], [ 108.23638164, 6.22427602 ], [ 108.23630689, 6.22476797 ], [ 108.19687578, 6.53630242 ], [ 108.19679674, 6.53760583 ], [ 108.1987683, 6.95072469 ], [ 108.19897125, 6.95268198 ], [ 108.22460147, 7.07791743 ], [ 108.22570055, 7.08084671 ], [ 108.22765103, 7.083293 ], [ 108.230262, 7.08501682 ], [ 108.23327786, 7.08584944 ], [ 108.23640341, 7.08570936 ], [ 108.2393327, 7.08461028 ], [ 108.24177899, 7.0826598 ], [ 108.24350281, 7.08004883 ], [ 108.24433543, 7.07703297 ], [ 108.24419535, 7.07390742 ], [ 108.21876335, 6.94964057 ], [ 108.21679964, 6.53816468 ], [ 108.25611734, 6.22752625 ], [ 108.279563, 6.09543449 ], [ 108.30878645, 6.01987736 ], [ 108.30944469, 6.0168187 ], [ 108.30912553, 6.01370633 ], [ 108.30786022, 6.01084492 ], [ 108.30577262, 6.00851455 ], [ 108.30306706, 6.00694335 ], [ 108.3000084, 6.00628511 ], [ 108.29689603, 6.00660426 ], [ 108.29403462, 6.00786957 ], [ 108.29170425, 6.00995718 ], [ 108.29013305, 6.01266273 ], [ 108.26055972, 6.08912451 ] ] ], [ [ [ 110.12822847, 11.36894451 ], [ 110.18898148, 11.48996382 ], [ 110.23982347, 11.61066468 ], [ 110.28485499, 11.78705054 ], [ 110.3083549, 11.94803461 ], [ 110.3142445, 12.14195265 ], [ 110.312278, 12.23998238 ], [ 110.31270536, 12.24308175 ], [ 110.31406956, 12.24589736 ], [ 110.31623706, 12.2481536 ], [ 110.3189957, 12.24962962 ], [ 110.32207543, 12.25018094 ], [ 110.32517479, 12.24975358 ], [ 110.3279904, 12.24838938 ], [ 110.33024665, 12.24622187 ], [ 110.33172267, 12.24346324 ], [ 110.33227398, 12.24038351 ], [ 110.33424553, 12.14210167 ], [ 110.33424294, 12.14159753 ], [ 110.32832827, 11.94685414 ], [ 110.32822801, 11.94571326 ], [ 110.30456934, 11.78364161 ], [ 110.30436343, 11.7826124 ], [ 110.25901765, 11.60499559 ], [ 110.25854422, 11.60358735 ], [ 110.20728377, 11.48189306 ], [ 110.20700505, 11.48128846 ], [ 110.14588682, 11.35954163 ], [ 110.14541497, 11.35870461 ], [ 110.07246741, 11.24270688 ], [ 110.07040803, 11.24035153 ], [ 110.0677216, 11.23874785 ], [ 110.06467109, 11.23805281 ], [ 110.0615551, 11.23833444 ], [ 110.05867865, 11.23956519 ], [ 110.05632331, 11.24162456 ], [ 110.05471962, 11.24431099 ], [ 110.05402458, 11.2473615 ], [ 110.05430621, 11.25047749 ], [ 110.05553696, 11.25335394 ], [ 110.12822847, 11.36894451 ] ] ], [ [ [ 109.82951587, 15.22896754 ], [ 109.77065019, 15.44468789 ], [ 109.67264555, 15.66561455 ], [ 109.57455994, 15.82609887 ], [ 109.51574449, 15.91095759 ], [ 109.29314007, 16.19491896 ], [ 109.29161878, 16.19765288 ], [ 109.29101677, 16.20072311 ], [ 109.29139298, 16.2038291 ], [ 109.29271057, 16.20666681 ], [ 109.29484059, 16.20895848 ], [ 109.29757451, 16.21047978 ], [ 109.30064474, 16.21108179 ], [ 109.30375073, 16.21070558 ], [ 109.30658844, 16.20938798 ], [ 109.30888011, 16.20725797 ], [ 109.53166592, 15.92306523 ], [ 109.53201478, 15.92259221 ], [ 109.59116145, 15.8372556 ], [ 109.59147511, 15.83677407 ], [ 109.6900529, 15.67548445 ], [ 109.69066131, 15.67432448 ], [ 109.7892391, 15.45210582 ], [ 109.78974541, 15.45068337 ], [ 109.84889209, 15.23393326 ], [ 109.84903675, 15.23333003 ], [ 109.8648092, 15.15722425 ], [ 109.86495704, 15.15409906 ], [ 109.86413191, 15.15108113 ], [ 109.86241457, 15.1484659 ], [ 109.85997314, 15.14650935 ], [ 109.85704658, 15.145403 ], [ 109.85392139, 15.14525516 ], [ 109.85090347, 15.14608029 ], [ 109.84828823, 15.14779763 ], [ 109.84633168, 15.15023907 ], [ 109.84522534, 15.15316562 ], [ 109.82951587, 15.22896754 ] ] ] ] } } +] +} \ No newline at end of file diff --git a/js_sdk/u-charts/package.json b/js_sdk/u-charts/package.json new file mode 100644 index 0000000..84193a3 --- /dev/null +++ b/js_sdk/u-charts/package.json @@ -0,0 +1,13 @@ +{ + "id": "u-charts", + "name": "uCharts高性能跨全端图表", + "version": "1.9.6.20210214", + "description": "支持H5、PC、APP、小程序(微信/支付宝/百度/头条/QQ/360)Vue、Taro", + "keywords": [ + "echarts", + "canvas2d", + "F2", + "图表", + "跨全端" + ] +} \ No newline at end of file diff --git a/js_sdk/u-charts/readme.md b/js_sdk/u-charts/readme.md new file mode 100644 index 0000000..fb4e036 --- /dev/null +++ b/js_sdk/u-charts/readme.md @@ -0,0 +1,6 @@ +# uCharts JSSDK说明 +1、如不使用uCharts组件,可直接引用u-charts.js,打包编译后会`自动压缩`,压缩后体积约为`90kb`。 +2、如果90kb的体积仍需压缩,请手动删除u-charts.js内您不需要的图表类型,如k线图candle。 +3、config.js为uCharts组件的用户配置文件,升级前请`自行备份config.js`文件,以免被强制覆盖。 +4、demodata.json为标准数据格式,仅供演示使用。 +5、mapdata.json为地图数据格式,遵循geoJson地图数据交换格式参考:http://datav.aliyun.com/tools/atlas/ \ No newline at end of file diff --git a/js_sdk/u-charts/u-charts.js b/js_sdk/u-charts/u-charts.js new file mode 100644 index 0000000..5bc52e9 --- /dev/null +++ b/js_sdk/u-charts/u-charts.js @@ -0,0 +1,5687 @@ +/* + * uCharts v1.9.6.20210214 + * uni-app平台高性能跨全端图表,支持H5、APP、小程序(微信/支付宝/百度/头条/QQ/360) + * Copyright (c) 2021 QIUN秋云 https://www.ucharts.cn All rights reserved. + * Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) + * + * uCharts官方网站 + * https://www.uCharts.cn + * + * 开源地址: + * https://gitee.com/uCharts/uCharts + * + * uni-app插件市场地址: + * http://ext.dcloud.net.cn/plugin?id=271 + * + */ + +'use strict'; + +var config = { + yAxisWidth: 15, + yAxisSplit: 5, + xAxisHeight: 22, + xAxisLineHeight: 22, + legendHeight: 15, + yAxisTitleWidth: 15, + padding: [10, 10, 10, 10], + pixelRatio: 1, + rotate: false, + columePadding: 3, + fontSize: 13, + //dataPointShape: ['diamond', 'circle', 'triangle', 'rect'], + dataPointShape: ['circle', 'circle', 'circle', 'circle'], + colors: ['#1890ff', '#2fc25b', '#facc14', '#f04864', '#8543e0', '#90ed7d'], + pieChartLinePadding: 15, + pieChartTextPadding: 5, + xAxisTextPadding: 3, + titleColor: '#333333', + titleFontSize: 20, + subtitleColor: '#999999', + subtitleFontSize: 15, + toolTipPadding: 3, + toolTipBackground: '#000000', + toolTipOpacity: 0.7, + toolTipLineHeight: 20, + radarLabelTextMargin: 15, + gaugeLabelTextMargin: 15 +}; + +let assign = function (target, ...varArgs) { + if (target == null) { + throw new TypeError('Cannot convert undefined or null to object'); + } + if (!varArgs || varArgs.length <= 0) { + return target; + } + // 深度合并对象 + function deepAssign(obj1, obj2) { + for (let key in obj2) { + obj1[key] = obj1[key] && obj1[key].toString() === "[object Object]" ? + deepAssign(obj1[key], obj2[key]) : obj1[key] = obj2[key]; + } + return obj1; + } + + varArgs.forEach(val => { + target = deepAssign(target, val); + }); + return target; +}; + +var util = { + toFixed: function toFixed(num, limit) { + limit = limit || 2; + if (this.isFloat(num)) { + num = num.toFixed(limit); + } + return num; + }, + isFloat: function isFloat(num) { + return num % 1 !== 0; + }, + approximatelyEqual: function approximatelyEqual(num1, num2) { + return Math.abs(num1 - num2) < 1e-10; + }, + isSameSign: function isSameSign(num1, num2) { + return Math.abs(num1) === num1 && Math.abs(num2) === num2 || Math.abs(num1) !== num1 && Math.abs(num2) !== num2; + }, + isSameXCoordinateArea: function isSameXCoordinateArea(p1, p2) { + return this.isSameSign(p1.x, p2.x); + }, + isCollision: function isCollision(obj1, obj2) { + obj1.end = {}; + obj1.end.x = obj1.start.x + obj1.width; + obj1.end.y = obj1.start.y - obj1.height; + obj2.end = {}; + obj2.end.x = obj2.start.x + obj2.width; + obj2.end.y = obj2.start.y - obj2.height; + var flag = obj2.start.x > obj1.end.x || obj2.end.x < obj1.start.x || obj2.end.y > obj1.start.y || obj2.start.y < obj1.end.y; + return !flag; + } +}; + +//兼容H5点击事件 +function getH5Offset(e) { + e.mp = { + changedTouches: [] + }; + e.mp.changedTouches.push({ + x: e.offsetX, + y: e.offsetY + }); + return e; +} + +// hex 转 rgba +function hexToRgb(hexValue, opc) { + var rgx = /^#?([a-f\d])([a-f\d])([a-f\d])$/i; + var hex = hexValue.replace(rgx, function(m, r, g, b) { + return r + r + g + g + b + b; + }); + var rgb = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex); + var r = parseInt(rgb[1], 16); + var g = parseInt(rgb[2], 16); + var b = parseInt(rgb[3], 16); + return 'rgba(' + r + ',' + g + ',' + b + ',' + opc + ')'; +} + +function findRange(num, type, limit) { + if (isNaN(num)) { + throw new Error('[uCharts] unvalid series data!'); + } + limit = limit || 10; + type = type ? type : 'upper'; + var multiple = 1; + while (limit < 1) { + limit *= 10; + multiple *= 10; + } + if (type === 'upper') { + num = Math.ceil(num * multiple); + } else { + num = Math.floor(num * multiple); + } + while (num % limit !== 0) { + if (type === 'upper') { + num++; + } else { + num--; + } + } + return num / multiple; +} + +function calCandleMA(dayArr, nameArr, colorArr, kdata) { + let seriesTemp = []; + for (let k = 0; k < dayArr.length; k++) { + let seriesItem = { + data: [], + name: nameArr[k], + color: colorArr[k] + }; + for (let i = 0, len = kdata.length; i < len; i++) { + if (i < dayArr[k]) { + seriesItem.data.push(null); + continue; + } + let sum = 0; + for (let j = 0; j < dayArr[k]; j++) { + sum += kdata[i - j][1]; + } + seriesItem.data.push(+(sum / dayArr[k]).toFixed(3)); + } + seriesTemp.push(seriesItem); + } + return seriesTemp; +} + +function calValidDistance(self,distance, chartData, config, opts) { + var dataChartAreaWidth = opts.width - opts.area[1] - opts.area[3]; + var dataChartWidth = chartData.eachSpacing * (opts.chartData.xAxisData.xAxisPoints.length-1); + var validDistance = distance; + if (distance >= 0) { + validDistance = 0; + self.event.trigger('scrollLeft'); + } else if (Math.abs(distance) >= dataChartWidth - dataChartAreaWidth) { + validDistance = dataChartAreaWidth - dataChartWidth; + self.event.trigger('scrollRight'); + } + return validDistance; +} + +function isInAngleRange(angle, startAngle, endAngle) { + function adjust(angle) { + while (angle < 0) { + angle += 2 * Math.PI; + } + while (angle > 2 * Math.PI) { + angle -= 2 * Math.PI; + } + return angle; + } + angle = adjust(angle); + startAngle = adjust(startAngle); + endAngle = adjust(endAngle); + if (startAngle > endAngle) { + endAngle += 2 * Math.PI; + if (angle < startAngle) { + angle += 2 * Math.PI; + } + } + return angle >= startAngle && angle <= endAngle; +} + +function calRotateTranslate(x, y, h) { + var xv = x; + var yv = h - y; + var transX = xv + (h - yv - xv) / Math.sqrt(2); + transX *= -1; + var transY = (h - yv) * (Math.sqrt(2) - 1) - (h - yv - xv) / Math.sqrt(2); + return { + transX: transX, + transY: transY + }; +} + +function createCurveControlPoints(points, i) { + + function isNotMiddlePoint(points, i) { + if (points[i - 1] && points[i + 1]) { + return points[i].y >= Math.max(points[i - 1].y, points[i + 1].y) || points[i].y <= Math.min(points[i - 1].y,points[i + 1].y); + } else { + return false; + } + } + function isNotMiddlePointX(points, i) { + if (points[i - 1] && points[i + 1]) { + return points[i].x >= Math.max(points[i - 1].x, points[i + 1].x) || points[i].x <= Math.min(points[i - 1].x,points[i + 1].x); + } else { + return false; + } + } + var a = 0.2; + var b = 0.2; + var pAx = null; + var pAy = null; + var pBx = null; + var pBy = null; + if (i < 1) { + pAx = points[0].x + (points[1].x - points[0].x) * a; + pAy = points[0].y + (points[1].y - points[0].y) * a; + } else { + pAx = points[i].x + (points[i + 1].x - points[i - 1].x) * a; + pAy = points[i].y + (points[i + 1].y - points[i - 1].y) * a; + } + + if (i > points.length - 3) { + var last = points.length - 1; + pBx = points[last].x - (points[last].x - points[last - 1].x) * b; + pBy = points[last].y - (points[last].y - points[last - 1].y) * b; + } else { + pBx = points[i + 1].x - (points[i + 2].x - points[i].x) * b; + pBy = points[i + 1].y - (points[i + 2].y - points[i].y) * b; + } + if (isNotMiddlePoint(points, i + 1)) { + pBy = points[i + 1].y; + } + if (isNotMiddlePoint(points, i)) { + pAy = points[i].y; + } + if (isNotMiddlePointX(points, i + 1)) { + pBx = points[i + 1].x; + } + if (isNotMiddlePointX(points, i)) { + pAx = points[i].x; + } + if (pAy >= Math.max(points[i].y, points[i + 1].y) || pAy <= Math.min(points[i].y, points[i + 1].y)) { + pAy = points[i].y; + } + if (pBy >= Math.max(points[i].y, points[i + 1].y) || pBy <= Math.min(points[i].y, points[i + 1].y)) { + pBy = points[i + 1].y; + } + if (pAx >= Math.max(points[i].x, points[i + 1].x) || pAx <= Math.min(points[i].x, points[i + 1].x)) { + pAx = points[i].x; + } + if (pBx >= Math.max(points[i].x, points[i + 1].x) || pBx <= Math.min(points[i].x, points[i + 1].x)) { + pBx = points[i + 1].x; + } + return { + ctrA: { + x: pAx, + y: pAy + }, + ctrB: { + x: pBx, + y: pBy + } + }; +} + +function convertCoordinateOrigin(x, y, center) { + return { + x: center.x + x, + y: center.y - y + }; +} + +function avoidCollision(obj, target) { + if (target) { + // is collision test + while (util.isCollision(obj, target)) { + if (obj.start.x > 0) { + obj.start.y--; + } else if (obj.start.x < 0) { + obj.start.y++; + } else { + if (obj.start.y > 0) { + obj.start.y++; + } else { + obj.start.y--; + } + } + } + } + return obj; +} + +function fillSeries(series, opts, config) { + var index = 0; + return series.map(function(item) { + if (!item.color) { + item.color = config.colors[index]; + index = (index + 1) % config.colors.length; + } + if (!item.index) { + item.index = 0; + } + if (!item.type) { + item.type = opts.type; + } + if (typeof item.show == "undefined") { + item.show = true; + } + if (!item.type) { + item.type = opts.type; + } + if (!item.pointShape) { + item.pointShape = "circle"; + } + if (!item.legendShape) { + switch (item.type) { + case 'line': + item.legendShape = "line"; + break; + case 'column': + item.legendShape = "rect"; + break; + case 'area': + item.legendShape = "triangle"; + break; + default: + item.legendShape = "circle"; + } + } + return item; + }); +} + +function getDataRange(minData, maxData) { + var limit = 0; + var range = maxData - minData; + if (range >= 10000) { + limit = 1000; + } else if (range >= 1000) { + limit = 100; + } else if (range >= 100) { + limit = 10; + } else if (range >= 10) { + limit = 5; + } else if (range >= 1) { + limit = 1; + } else if (range >= 0.1) { + limit = 0.1; + } else if (range >= 0.01) { + limit = 0.01; + } else if (range >= 0.001) { + limit = 0.001; + } else if (range >= 0.0001) { + limit = 0.0001; + } else if (range >= 0.00001) { + limit = 0.00001; + } else { + limit = 0.000001; + } + return { + minRange: findRange(minData, 'lower', limit), + maxRange: findRange(maxData, 'upper', limit) + }; +} + +function measureText(text) { + var fontSize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : config.fontSize; + text = String(text); + var text = text.split(''); + var width = 0; + for (let i = 0; i < text.length; i++) { + let item = text[i]; + if (/[a-zA-Z]/.test(item)) { + width += 7; + } else if (/[0-9]/.test(item)) { + width += 5.5; + } else if (/\./.test(item)) { + width += 2.7; + } else if (/-/.test(item)) { + width += 3.25; + } else if (/[\u4e00-\u9fa5]/.test(item)) { + width += 10; + } else if (/\(|\)/.test(item)) { + width += 3.73; + } else if (/\s/.test(item)) { + width += 2.5; + } else if (/%/.test(item)) { + width += 8; + } else { + width += 10; + } + } + return width * fontSize / 10; +} + +function dataCombine(series) { + return series.reduce(function(a, b) { + return (a.data ? a.data : a).concat(b.data); + }, []); +} + +function dataCombineStack(series, len) { + var sum = new Array(len); + for (var j = 0; j < sum.length; j++) { + sum[j] = 0; + } + for (var i = 0; i < series.length; i++) { + for (var j = 0; j < sum.length; j++) { + sum[j] += series[i].data[j]; + } + } + return series.reduce(function(a, b) { + return (a.data ? a.data : a).concat(b.data).concat(sum); + }, []); +} + +function getTouches(touches, opts, e) { + let x, y; + if (touches.clientX) { + if (opts.rotate) { + y = opts.height - touches.clientX * opts.pixelRatio; + x = (touches.pageY - e.currentTarget.offsetTop - (opts.height / opts.pixelRatio / 2) * (opts.pixelRatio - 1)) * opts.pixelRatio; + } else { + x = touches.clientX * opts.pixelRatio; + y = (touches.pageY - e.currentTarget.offsetTop - (opts.height / opts.pixelRatio / 2) * (opts.pixelRatio - 1)) * opts.pixelRatio; + } + } else { + if (opts.rotate) { + y = opts.height - touches.x * opts.pixelRatio; + x = touches.y * opts.pixelRatio; + } else { + x = touches.x * opts.pixelRatio; + y = touches.y * opts.pixelRatio; + } + } + return { + x: x, + y: y + } +} + +function getSeriesDataItem(series, index) { + var data = []; + for (let i = 0; i < series.length; i++) { + let item = series[i]; + if (item.data[index] !== null && typeof item.data[index] !== 'undefined' && item.show) { + let seriesItem = {}; + seriesItem.color = item.color; + seriesItem.type = item.type; + seriesItem.style = item.style; + seriesItem.pointShape = item.pointShape; + seriesItem.disableLegend = item.disableLegend; + seriesItem.name = item.name; + seriesItem.show = item.show; + seriesItem.data = item.format ? item.format(item.data[index]) : item.data[index]; + data.push(seriesItem); + } + } + return data; +} + +function getMaxTextListLength(list) { + var lengthList = list.map(function(item) { + return measureText(item); + }); + return Math.max.apply(null, lengthList); +} + +function getRadarCoordinateSeries(length) { + var eachAngle = 2 * Math.PI / length; + var CoordinateSeries = []; + for (var i = 0; i < length; i++) { + CoordinateSeries.push(eachAngle * i); + } + + return CoordinateSeries.map(function(item) { + return -1 * item + Math.PI / 2; + }); +} + +function getToolTipData(seriesData, calPoints, index, categories) { + var option = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {}; + + var textList = seriesData.map(function(item) { + let titleText=[]; + if(categories){ + titleText=categories; + }else{ + titleText=item.data; + } + return { + text: option.format ? option.format(item, titleText[index]) : item.name + ': ' + item.data, + color: item.color + }; + }); + var validCalPoints = []; + var offset = { + x: 0, + y: 0 + }; + for (let i = 0; i < calPoints.length; i++) { + let points = calPoints[i]; + if (typeof points[index] !== 'undefined' && points[index] !== null) { + validCalPoints.push(points[index]); + } + } + for (let i = 0; i < validCalPoints.length; i++) { + let item = validCalPoints[i]; + offset.x = Math.round(item.x); + offset.y += item.y; + } + offset.y /= validCalPoints.length; + return { + textList: textList, + offset: offset + }; +} + +function getMixToolTipData(seriesData, calPoints, index, categories) { + var option = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {}; + var textList = seriesData.map(function(item) { + return { + text: option.format ? option.format(item, categories[index]) : item.name + ': ' + item.data, + color: item.color, + disableLegend: item.disableLegend ? true : false + }; + }); + textList = textList.filter(function(item) { + if (item.disableLegend !== true) { + return item; + } + }); + var validCalPoints = []; + var offset = { + x: 0, + y: 0 + }; + for (let i = 0; i < calPoints.length; i++) { + let points = calPoints[i]; + if (typeof points[index] !== 'undefined' && points[index] !== null) { + validCalPoints.push(points[index]); + } + } + for (let i = 0; i < validCalPoints.length; i++) { + let item = validCalPoints[i]; + offset.x = Math.round(item.x); + offset.y += item.y; + } + offset.y /= validCalPoints.length; + return { + textList: textList, + offset: offset + }; +} + +function getCandleToolTipData(series, seriesData, calPoints, index, categories, extra) { + var option = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : {}; + let upColor = extra.color.upFill; + let downColor = extra.color.downFill; + //颜色顺序为开盘,收盘,最低,最高 + let color = [upColor, upColor, downColor, upColor]; + var textList = []; + let text0 = { + text: categories[index], + color: null + }; + textList.push(text0); + seriesData.map(function(item) { + if (index == 0) { + if(item.data[1] - item.data[0] < 0){ + color[1] = downColor; + }else{ + color[1] = upColor; + } + } else { + if (item.data[0] < series[index - 1][1]) { + color[0] = downColor; + } + if (item.data[1] < item.data[0]) { + color[1] = downColor; + } + if (item.data[2] > series[index - 1][1]) { + color[2] = upColor; + } + if (item.data[3] < series[index - 1][1]) { + color[3] = downColor; + } + } + let text1 = { + text: '开盘:' + item.data[0], + color: color[0] + }; + let text2 = { + text: '收盘:' + item.data[1], + color: color[1] + }; + let text3 = { + text: '最低:' + item.data[2], + color: color[2] + }; + let text4 = { + text: '最高:' + item.data[3], + color: color[3] + }; + textList.push(text1, text2, text3, text4); + }); + var validCalPoints = []; + var offset = { + x: 0, + y: 0 + }; + for (let i = 0; i < calPoints.length; i++) { + let points = calPoints[i]; + if (typeof points[index] !== 'undefined' && points[index] !== null) { + validCalPoints.push(points[index]); + } + } + offset.x = Math.round(validCalPoints[0][0].x); + return { + textList: textList, + offset: offset + }; +} + +function filterSeries(series) { + let tempSeries = []; + for (let i = 0; i < series.length; i++) { + if (series[i].show == true) { + tempSeries.push(series[i]) + } + } + return tempSeries; +} + +function findCurrentIndex(currentPoints, calPoints, opts, config) { + var offset = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0; + var currentIndex = -1; + var spacing = opts.chartData.eachSpacing/2; + let xAxisPoints=[]; + if(calPoints && calPoints.length>0){ + for(let i=1;i<opts.chartData.xAxisPoints.length;i++){ + xAxisPoints.push(opts.chartData.xAxisPoints[i]-spacing) + } + if((opts.type=='line' || opts.type=='area') && opts.xAxis.boundaryGap=='justify'){ + spacing = opts.chartData.eachSpacing/2; + } + if(!opts.categories){ + spacing=0 + } + if (isInExactChartArea(currentPoints, opts, config)) { + xAxisPoints.forEach(function(item, index) { + if (currentPoints.x + offset + spacing > item) { + currentIndex = index; + } + }); + } + } + return currentIndex; +} + +function findLegendIndex(currentPoints, legendData, opts) { + let currentIndex = -1; + if (isInExactLegendArea(currentPoints, legendData.area)) { + let points = legendData.points; + let index = -1; + for (let i = 0, len = points.length; i < len; i++) { + let item = points[i]; + for (let j = 0; j < item.length; j++) { + index += 1; + let area = item[j]['area']; + if (currentPoints.x > area[0] && currentPoints.x < area[2] && currentPoints.y > area[1] && currentPoints.y < area[3]) { + currentIndex = index; + break; + } + } + } + return currentIndex; + } + return currentIndex; +} + +function isInExactLegendArea(currentPoints, area) { + return currentPoints.x > area.start.x && currentPoints.x < area.end.x && currentPoints.y > area.start.y && + currentPoints.y < area.end.y; +} + +function isInExactChartArea(currentPoints, opts, config) { + return currentPoints.x <= opts.width - opts.area[1] + 10 && currentPoints.x >= opts.area[3] -10 && currentPoints.y >= opts.area[0] && currentPoints.y <= opts.height - opts.area[2]; +} + +function findRadarChartCurrentIndex(currentPoints, radarData, count) { + var eachAngleArea = 2 * Math.PI / count; + var currentIndex = -1; + if (isInExactPieChartArea(currentPoints, radarData.center, radarData.radius)) { + var fixAngle = function fixAngle(angle) { + if (angle < 0) { + angle += 2 * Math.PI; + } + if (angle > 2 * Math.PI) { + angle -= 2 * Math.PI; + } + return angle; + }; + + var angle = Math.atan2(radarData.center.y - currentPoints.y, currentPoints.x - radarData.center.x); + angle = -1 * angle; + if (angle < 0) { + angle += 2 * Math.PI; + } + + var angleList = radarData.angleList.map(function(item) { + item = fixAngle(-1 * item); + + return item; + }); + + angleList.forEach(function(item, index) { + var rangeStart = fixAngle(item - eachAngleArea / 2); + var rangeEnd = fixAngle(item + eachAngleArea / 2); + if (rangeEnd < rangeStart) { + rangeEnd += 2 * Math.PI; + } + if (angle >= rangeStart && angle <= rangeEnd || angle + 2 * Math.PI >= rangeStart && angle + 2 * Math.PI <= + rangeEnd) { + currentIndex = index; + } + }); + } + + return currentIndex; +} + +function findFunnelChartCurrentIndex(currentPoints, funnelData) { + var currentIndex = -1; + for (var i = 0, len = funnelData.series.length; i < len; i++) { + var item = funnelData.series[i]; + if (currentPoints.x > item.funnelArea[0] && currentPoints.x < item.funnelArea[2] && currentPoints.y > item.funnelArea[1] && currentPoints.y < item.funnelArea[3]) { + currentIndex = i; + break; + } + } + return currentIndex; +} + +function findWordChartCurrentIndex(currentPoints, wordData) { + var currentIndex = -1; + for (var i = 0, len = wordData.length; i < len; i++) { + var item = wordData[i]; + if (currentPoints.x > item.area[0] && currentPoints.x < item.area[2] && currentPoints.y > item.area[1] && currentPoints.y < item.area[3]) { + currentIndex = i; + break; + } + } + return currentIndex; +} + +function findMapChartCurrentIndex(currentPoints, opts) { + var currentIndex = -1; + var cData=opts.chartData.mapData; + var data=opts.series; + var tmp=pointToCoordinate(currentPoints.y, currentPoints.x,cData.bounds,cData.scale,cData.xoffset,cData.yoffset); + var poi=[tmp.x, tmp.y]; + for (var i = 0, len = data.length; i < len; i++) { + var item = data[i].geometry.coordinates; + if(isPoiWithinPoly(poi,item)){ + currentIndex = i; + break; + } + } + return currentIndex; +} + +function findPieChartCurrentIndex(currentPoints, pieData) { + var currentIndex = -1; + if (isInExactPieChartArea(currentPoints, pieData.center, pieData.radius)) { + var angle = Math.atan2(pieData.center.y - currentPoints.y, currentPoints.x - pieData.center.x); + angle = -angle; + for (var i = 0, len = pieData.series.length; i < len; i++) { + var item = pieData.series[i]; + if (isInAngleRange(angle, item._start_, item._start_ + item._proportion_ * 2 * Math.PI)) { + currentIndex = i; + break; + } + } + } + + return currentIndex; +} + +function isInExactPieChartArea(currentPoints, center, radius) { + return Math.pow(currentPoints.x - center.x, 2) + Math.pow(currentPoints.y - center.y, 2) <= Math.pow(radius, 2); +} + +function splitPoints(points) { + var newPoints = []; + var items = []; + points.forEach(function(item, index) { + if (item !== null) { + items.push(item); + } else { + if (items.length) { + newPoints.push(items); + } + items = []; + } + }); + if (items.length) { + newPoints.push(items); + } + + return newPoints; +} + +function calLegendData(series, opts, config, chartData) { + let legendData = { + area: { + start: { + x: 0, + y: 0 + }, + end: { + x: 0, + y: 0 + }, + width: 0, + height: 0, + wholeWidth: 0, + wholeHeight: 0 + }, + points: [], + widthArr: [], + heightArr: [] + }; + if (opts.legend.show === false) { + chartData.legendData = legendData; + return legendData; + } + + let padding = opts.legend.padding; + let margin = opts.legend.margin; + let fontSize = opts.legend.fontSize; + let shapeWidth = 15 * opts.pixelRatio; + let shapeRight = 5 * opts.pixelRatio; + let lineHeight = Math.max(opts.legend.lineHeight * opts.pixelRatio, fontSize); + if (opts.legend.position == 'top' || opts.legend.position == 'bottom') { + let legendList = []; + let widthCount = 0; + let widthCountArr = []; + let currentRow = []; + for (let i = 0; i < series.length; i++) { + let item = series[i]; + let itemWidth = shapeWidth + shapeRight + measureText(item.name || 'undefined', fontSize) + opts.legend.itemGap; + if (widthCount + itemWidth > opts.width - opts.padding[1] - opts.padding[3]) { + legendList.push(currentRow); + widthCountArr.push(widthCount - opts.legend.itemGap); + widthCount = itemWidth; + currentRow = [item]; + } else { + widthCount += itemWidth; + currentRow.push(item); + } + } + if (currentRow.length) { + legendList.push(currentRow); + widthCountArr.push(widthCount - opts.legend.itemGap); + legendData.widthArr = widthCountArr; + let legendWidth = Math.max.apply(null, widthCountArr); + switch (opts.legend.float) { + case 'left': + legendData.area.start.x = opts.padding[3]; + legendData.area.end.x = opts.padding[3] + 2 * padding; + break; + case 'right': + legendData.area.start.x = opts.width - opts.padding[1] - legendWidth - 2 * padding; + legendData.area.end.x = opts.width - opts.padding[1]; + break; + default: + legendData.area.start.x = (opts.width - legendWidth) / 2 - padding; + legendData.area.end.x = (opts.width + legendWidth) / 2 + padding; + } + legendData.area.width = legendWidth + 2 * padding; + legendData.area.wholeWidth = legendWidth + 2 * padding; + legendData.area.height = legendList.length * lineHeight + 2 * padding; + legendData.area.wholeHeight = legendList.length * lineHeight + 2 * padding + 2 * margin; + legendData.points = legendList; + } + } else { + let len = series.length; + let maxHeight = opts.height - opts.padding[0] - opts.padding[2] - 2 * margin - 2 * padding; + let maxLength = Math.min(Math.floor(maxHeight / lineHeight), len); + legendData.area.height = maxLength * lineHeight + padding * 2; + legendData.area.wholeHeight = maxLength * lineHeight + padding * 2; + switch (opts.legend.float) { + case 'top': + legendData.area.start.y = opts.padding[0] + margin; + legendData.area.end.y = opts.padding[0] + margin + legendData.area.height; + break; + case 'bottom': + legendData.area.start.y = opts.height - opts.padding[2] - margin - legendData.area.height; + legendData.area.end.y = opts.height - opts.padding[2] - margin; + break; + default: + legendData.area.start.y = (opts.height - legendData.area.height) / 2; + legendData.area.end.y = (opts.height + legendData.area.height) / 2; + } + let lineNum = len % maxLength === 0 ? len / maxLength : Math.floor((len / maxLength) + 1); + let currentRow = []; + for (let i = 0; i < lineNum; i++) { + let temp = series.slice(i * maxLength, i * maxLength + maxLength); + currentRow.push(temp); + } + + legendData.points = currentRow; + + if (currentRow.length) { + for (let i = 0; i < currentRow.length; i++) { + let item = currentRow[i]; + let maxWidth = 0; + for (let j = 0; j < item.length; j++) { + let itemWidth = shapeWidth + shapeRight + measureText(item[j].name || 'undefined', fontSize) + opts.legend.itemGap; + if (itemWidth > maxWidth) { + maxWidth = itemWidth; + } + } + legendData.widthArr.push(maxWidth); + legendData.heightArr.push(item.length * lineHeight + padding * 2); + } + let legendWidth = 0 + for (let i = 0; i < legendData.widthArr.length; i++) { + legendWidth += legendData.widthArr[i]; + } + legendData.area.width = legendWidth - opts.legend.itemGap + 2 * padding; + legendData.area.wholeWidth = legendData.area.width + padding; + } + } + + switch (opts.legend.position) { + case 'top': + legendData.area.start.y = opts.padding[0] + margin; + legendData.area.end.y = opts.padding[0] + margin + legendData.area.height; + break; + case 'bottom': + legendData.area.start.y = opts.height - opts.padding[2] - legendData.area.height - margin; + legendData.area.end.y = opts.height - opts.padding[2] - margin; + break; + case 'left': + legendData.area.start.x = opts.padding[3]; + legendData.area.end.x = opts.padding[3] + legendData.area.width; + break; + case 'right': + legendData.area.start.x = opts.width - opts.padding[1] - legendData.area.width; + legendData.area.end.x = opts.width - opts.padding[1]; + break; + } + chartData.legendData = legendData; + return legendData; +} + +function calCategoriesData(categories, opts, config, eachSpacing) { + var result = { + angle: 0, + xAxisHeight: config.xAxisHeight + }; + var categoriesTextLenth = categories.map(function(item) { + return measureText(item,opts.xAxis.fontSize||config.fontSize); + }); + var maxTextLength = Math.max.apply(this, categoriesTextLenth); + + if (opts.xAxis.rotateLabel == true && maxTextLength + 2 * config.xAxisTextPadding > eachSpacing) { + result.angle = 45 * Math.PI / 180; + result.xAxisHeight = 2 * config.xAxisTextPadding + maxTextLength * Math.sin(result.angle); + } + return result; +} + +function getXAxisTextList(series, opts, config) { + var index = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : -1; + var data = dataCombine(series); + var sorted = []; + // remove null from data + data = data.filter(function(item) { + //return item !== null; + if (typeof item === 'object' && item !== null) { + if (item.constructor.toString().indexOf('Array')>-1) { + return item !== null; + } else { + return item.value !== null; + } + } else { + return item !== null; + } + }); + data.map(function(item) { + if (typeof item === 'object') { + if (item.constructor.toString().indexOf('Array')>-1) { + if(opts.type=='candle'){ + item.map(function(subitem) { + sorted.push(subitem); + }) + }else{ + sorted.push(item[0]); + } + } else { + sorted.push(item.value); + } + } else { + sorted.push(item); + } + }) + + var minData = 0; + var maxData = 0; + if (sorted.length > 0) { + minData = Math.min.apply(this, sorted); + maxData = Math.max.apply(this, sorted); + } + //为了兼容v1.9.0之前的项目 + if(index>-1){ + if (typeof opts.xAxis.data[index].min === 'number') { + minData = Math.min(opts.xAxis.data[index].min, minData); + } + if (typeof opts.xAxis.data[index].max === 'number') { + maxData = Math.max(opts.xAxis.data[index].max, maxData); + } + }else{ + if (typeof opts.xAxis.min === 'number') { + minData = Math.min(opts.xAxis.min, minData); + } + if (typeof opts.xAxis.max === 'number') { + maxData = Math.max(opts.xAxis.max, maxData); + } + } + + + if (minData === maxData) { + var rangeSpan = maxData || 10; + maxData += rangeSpan; + } + + //var dataRange = getDataRange(minData, maxData); + var minRange = minData; + var maxRange = maxData; + + var range = []; + var eachRange = (maxRange - minRange) / opts.xAxis.splitNumber; + + for (var i = 0; i <= opts.xAxis.splitNumber; i++) { + range.push(minRange + eachRange * i); + } + return range; +} + +function calXAxisData(series, opts, config){ + var result = { + angle: 0, + xAxisHeight: config.xAxisHeight + }; + + result.ranges = getXAxisTextList(series, opts, config); + result.rangesFormat = result.ranges.map(function(item){ + item = opts.xAxis.format? opts.xAxis.format(item):util.toFixed(item, 2); + return item; + }); + + var xAxisScaleValues = result.ranges.map(function (item) { + // 如果刻度值是浮点数,则保留两位小数 + item = util.toFixed(item, 2); + // 若有自定义格式则调用自定义的格式化函数 + item = opts.xAxis.format ? opts.xAxis.format(Number(item)) : item; + return item; + }); + + result = Object.assign(result,getXAxisPoints(xAxisScaleValues, opts, config)); + // 计算X轴刻度的属性譬如每个刻度的间隔,刻度的起始点\结束点以及总长 + var eachSpacing = result.eachSpacing; + + var textLength = xAxisScaleValues.map(function (item) { + return measureText(item); + }); + + // get max length of categories text + var maxTextLength = Math.max.apply(this, textLength); + + // 如果刻度值文本内容过长,则将其逆时针旋转45° + if (maxTextLength + 2 * config.xAxisTextPadding > eachSpacing) { + result.angle = 45 * Math.PI / 180; + result.xAxisHeight = 2 * config.xAxisTextPadding + maxTextLength * Math.sin(result.angle); + } + + if (opts.xAxis.disabled === true) { + result.xAxisHeight = 0; + } + + return result; +} + +function getRadarDataPoints(angleList, center, radius, series, opts) { + var process = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 1; + + var radarOption = opts.extra.radar || {}; + radarOption.max = radarOption.max || 0; + var maxData = Math.max(radarOption.max, Math.max.apply(null, dataCombine(series))); + + var data = []; + for (let i = 0; i < series.length; i++) { + let each = series[i]; + let listItem = {}; + listItem.color = each.color; + listItem.legendShape = each.legendShape; + listItem.pointShape = each.pointShape; + listItem.data = []; + each.data.forEach(function(item, index) { + let tmp = {}; + tmp.angle = angleList[index]; + + tmp.proportion = item / maxData; + tmp.position = convertCoordinateOrigin(radius * tmp.proportion * process * Math.cos(tmp.angle), radius * tmp.proportion * + process * Math.sin(tmp.angle), center); + listItem.data.push(tmp); + }); + + data.push(listItem); + } + + return data; +} + +function getPieDataPoints(series, radius) { + var process = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1; + + var count = 0; + var _start_ = 0; + for (let i = 0; i < series.length; i++) { + let item = series[i]; + item.data = item.data === null ? 0 : item.data; + count += item.data; + } + for (let i = 0; i < series.length; i++) { + let item = series[i]; + item.data = item.data === null ? 0 : item.data; + if (count === 0) { + item._proportion_ = 1 / series.length * process; + } else { + item._proportion_ = item.data / count * process; + } + item._radius_ = radius; + } + for (let i = 0; i < series.length; i++) { + let item = series[i]; + item._start_ = _start_; + _start_ += 2 * item._proportion_ * Math.PI; + } + + return series; +} + +function getFunnelDataPoints(series, radius) { + var process = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1; + series = series.sort(function(a,b){return parseInt(b.data)-parseInt(a.data);}); + for (let i = 0; i < series.length; i++) { + series[i].radius = series[i].data/series[0].data*radius*process; + series[i]._proportion_ = series[i].data/series[0].data; + } + return series.reverse(); +} + +function getRoseDataPoints(series, type, minRadius, radius) { + var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1; + var count = 0; + var _start_ = 0; + + var dataArr = []; + for (let i = 0; i < series.length; i++) { + let item = series[i]; + item.data = item.data === null ? 0 : item.data; + count += item.data; + dataArr.push(item.data); + } + + var minData = Math.min.apply(null, dataArr); + var maxData = Math.max.apply(null, dataArr); + var radiusLength = radius - minRadius; + + for (let i = 0; i < series.length; i++) { + let item = series[i]; + item.data = item.data === null ? 0 : item.data; + if (count === 0 || type == 'area') { + item._proportion_ = item.data / count * process; + item._rose_proportion_ = 1 / series.length * process; + } else { + item._proportion_ = item.data / count * process; + item._rose_proportion_ = item.data / count * process; + } + item._radius_ = minRadius + radiusLength * ((item.data - minData) / (maxData - minData)); + } + for (let i = 0; i < series.length; i++) { + let item = series[i]; + item._start_ = _start_; + _start_ += 2 * item._rose_proportion_ * Math.PI; + } + + return series; +} + +function getArcbarDataPoints(series, arcbarOption) { + var process = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1; + if (process == 1) { + process = 0.999999; + } + for (let i = 0; i < series.length; i++) { + let item = series[i]; + item.data = item.data === null ? 0 : item.data; + let totalAngle; + if (arcbarOption.type == 'circle') { + totalAngle = 2; + } else { + if (arcbarOption.endAngle < arcbarOption.startAngle) { + totalAngle = 2 + arcbarOption.endAngle - arcbarOption.startAngle; + } else{ + totalAngle = arcbarOption.startAngle - arcbarOption.endAngle; + } + } + item._proportion_ = totalAngle * item.data * process + arcbarOption.startAngle; + if (item._proportion_ >= 2) { + item._proportion_ = item._proportion_ % 2; + } + } + return series; +} + +function getGaugeAxisPoints(categories, startAngle, endAngle) { + let totalAngle = startAngle - endAngle + 1; + let tempStartAngle = startAngle; + for (let i = 0; i < categories.length; i++) { + categories[i].value = categories[i].value === null ? 0 : categories[i].value; + categories[i]._startAngle_ = tempStartAngle; + categories[i]._endAngle_ = totalAngle * categories[i].value + startAngle; + if (categories[i]._endAngle_ >= 2) { + categories[i]._endAngle_ = categories[i]._endAngle_ % 2; + } + tempStartAngle = categories[i]._endAngle_; + } + return categories; +} + +function getGaugeDataPoints(series, categories, gaugeOption) { + let process = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1; + for (let i = 0; i < series.length; i++) { + let item = series[i]; + item.data = item.data === null ? 0 : item.data; + if (gaugeOption.pointer.color == 'auto') { + for (let i = 0; i < categories.length; i++) { + if (item.data <= categories[i].value) { + item.color = categories[i].color; + break; + } + } + } else { + item.color = gaugeOption.pointer.color; + } + let totalAngle = gaugeOption.startAngle - gaugeOption.endAngle + 1; + item._endAngle_ = totalAngle * item.data + gaugeOption.startAngle; + item._oldAngle_ = gaugeOption.oldAngle; + if (gaugeOption.oldAngle < gaugeOption.endAngle) { + item._oldAngle_ += 2; + } + if (item.data >= gaugeOption.oldData) { + item._proportion_ = (item._endAngle_ - item._oldAngle_) * process + gaugeOption.oldAngle; + } else { + item._proportion_ = item._oldAngle_ - (item._oldAngle_ - item._endAngle_) * process; + } + if (item._proportion_ >= 2) { + item._proportion_ = item._proportion_ % 2; + } + } + return series; +} + +function getPieTextMaxLength(series) { + series = getPieDataPoints(series); + let maxLength = 0; + for (let i = 0; i < series.length; i++) { + let item = series[i]; + let text = item.format ? item.format(+item._proportion_.toFixed(2)) : util.toFixed(item._proportion_ * 100) + '%'; + maxLength = Math.max(maxLength, measureText(text)); + } + + return maxLength; +} + +function fixColumeData(points, eachSpacing, columnLen, index, config, opts) { + return points.map(function(item) { + if (item === null) { + return null; + } + item.width = Math.ceil((eachSpacing - 2 * config.columePadding) / columnLen); + + if (opts.extra.column && opts.extra.column.width && +opts.extra.column.width > 0) { + item.width = Math.min(item.width, +opts.extra.column.width); + } + if (item.width <= 0) { + item.width = 1; + } + item.x += (index + 0.5 - columnLen / 2) * item.width; + return item; + }); +} + +function fixColumeMeterData(points, eachSpacing, columnLen, index, config, opts, border) { + return points.map(function(item) { + if (item === null) { + return null; + } + item.width = Math.ceil((eachSpacing - 2 * config.columePadding) / 2); + + if (opts.extra.column && opts.extra.column.width && +opts.extra.column.width > 0) { + item.width = Math.min(item.width, +opts.extra.column.width); + } + + if (index > 0) { + item.width -= 2 * border; + } + return item; + }); +} + +function fixColumeStackData(points, eachSpacing, columnLen, index, config, opts, series) { + + return points.map(function(item, indexn) { + + if (item === null) { + return null; + } + item.width = Math.ceil((eachSpacing - 2 * config.columePadding) / 2); + + if (opts.extra.column && opts.extra.column.width && +opts.extra.column.width > 0) { + item.width = Math.min(item.width, +opts.extra.column.width); + } + return item; + }); +} + +function getXAxisPoints(categories, opts, config) { + var spacingValid = opts.width - opts.area[1] - opts.area[3]; + var dataCount = opts.enableScroll ? Math.min(opts.xAxis.itemCount, categories.length) : categories.length; + if((opts.type=='line' || opts.type=='area') && dataCount>1 && opts.xAxis.boundaryGap=='justify'){ + dataCount -=1; + } + var eachSpacing = spacingValid / dataCount; + + var xAxisPoints = []; + var startX = opts.area[3]; + var endX = opts.width - opts.area[1]; + categories.forEach(function(item, index) { + xAxisPoints.push(startX + index * eachSpacing); + }); + if(opts.xAxis.boundaryGap !=='justify'){ + if (opts.enableScroll === true) { + xAxisPoints.push(startX + categories.length * eachSpacing); + } else { + xAxisPoints.push(endX); + } + } + return { + xAxisPoints: xAxisPoints, + startX: startX, + endX: endX, + eachSpacing: eachSpacing + }; +} + +function getCandleDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config) { + var process = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : 1; + var points = []; + var validHeight = opts.height - opts.area[0] - opts.area[2]; + data.forEach(function(item, index) { + if (item === null) { + points.push(null); + } else { + var cPoints = []; + item.forEach(function(items, indexs) { + var point = {}; + point.x = xAxisPoints[index] + Math.round(eachSpacing / 2); + var value = items.value || items; + var height = validHeight * (value - minRange) / (maxRange - minRange); + height *= process; + point.y = opts.height - Math.round(height) - opts.area[2]; + cPoints.push(point); + }); + points.push(cPoints); + } + }); + + return points; +} + +function getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config) { + var process = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : 1; + var boundaryGap='center'; + if (opts.type == 'line'||opts.type == 'area'){ + boundaryGap=opts.xAxis.boundaryGap; + } + var points = []; + var validHeight = opts.height - opts.area[0] - opts.area[2]; + var validWidth = opts.width - opts.area[1] - opts.area[3]; + data.forEach(function(item, index) { + if (item === null) { + points.push(null); + } else { + var point = {}; + point.color = item.color; + point.x = xAxisPoints[index]; + var value = item; + if (typeof item === 'object' && item !== null) { + if (item.constructor.toString().indexOf('Array')>-1) { + let xranges,xminRange,xmaxRange; + xranges = [].concat(opts.chartData.xAxisData.ranges); + xminRange = xranges.shift(); + xmaxRange = xranges.pop(); + value = item[1]; + point.x = opts.area[3]+ validWidth * (item[0] - xminRange) / (xmaxRange - xminRange); + } else { + value = item.value; + } + } + if(boundaryGap=='center'){ + point.x += Math.round(eachSpacing / 2); + } + var height = validHeight * (value - minRange) / (maxRange - minRange); + height *= process; + point.y = opts.height - Math.round(height) - opts.area[2]; + points.push(point); + } + }); + + return points; +} + +function getStackDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, seriesIndex, stackSeries) { + var process = arguments.length > 9 && arguments[9] !== undefined ? arguments[9] : 1; + var points = []; + var validHeight = opts.height - opts.area[0] - opts.area[2]; + + data.forEach(function(item, index) { + if (item === null) { + points.push(null); + } else { + var point = {}; + point.color = item.color; + point.x = xAxisPoints[index] + Math.round(eachSpacing / 2); + + if (seriesIndex > 0) { + var value = 0; + for (let i = 0; i <= seriesIndex; i++) { + value += stackSeries[i].data[index]; + } + var value0 = value - item; + var height = validHeight * (value - minRange) / (maxRange - minRange); + var height0 = validHeight * (value0 - minRange) / (maxRange - minRange); + } else { + var value = item; + var height = validHeight * (value - minRange) / (maxRange - minRange); + var height0 = 0; + } + var heightc = height0; + height *= process; + heightc *= process; + point.y = opts.height - Math.round(height) - opts.area[2]; + point.y0 = opts.height - Math.round(heightc) - opts.area[2]; + points.push(point); + } + }); + + return points; +} + +function getYAxisTextList(series, opts, config, stack) { + var index = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : -1; + var data; + if (stack == 'stack') { + data = dataCombineStack(series, opts.categories.length); + } else { + data = dataCombine(series); + } + var sorted = []; + // remove null from data + data = data.filter(function(item) { + //return item !== null; + if (typeof item === 'object' && item !== null) { + if (item.constructor.toString().indexOf('Array')>-1) { + return item !== null; + } else { + return item.value !== null; + } + } else { + return item !== null; + } + }); + data.map(function(item) { + if (typeof item === 'object') { + if (item.constructor.toString().indexOf('Array')>-1) { + if(opts.type=='candle'){ + item.map(function(subitem) { + sorted.push(subitem); + }) + }else{ + sorted.push(item[1]); + } + } else { + sorted.push(item.value); + } + } else { + sorted.push(item); + } + }) + + var minData = 0; + var maxData = 0; + if (sorted.length > 0) { + minData = Math.min.apply(this, sorted); + maxData = Math.max.apply(this, sorted); + } + //为了兼容v1.9.0之前的项目 + if(index>-1){ + if (typeof opts.yAxis.data[index].min === 'number') { + minData = Math.min(opts.yAxis.data[index].min, minData); + } + if (typeof opts.yAxis.data[index].max === 'number') { + maxData = Math.max(opts.yAxis.data[index].max, maxData); + } + }else{ + if (typeof opts.yAxis.min === 'number') { + minData = Math.min(opts.yAxis.min, minData); + } + if (typeof opts.yAxis.max === 'number') { + maxData = Math.max(opts.yAxis.max, maxData); + } + } + + + if (minData === maxData) { + var rangeSpan = maxData || 10; + maxData += rangeSpan; + } + + var dataRange = getDataRange(minData, maxData); + var minRange = dataRange.minRange; + var maxRange = dataRange.maxRange; + + var range = []; + var eachRange = (maxRange - minRange) / opts.yAxis.splitNumber; + + for (var i = 0; i <= opts.yAxis.splitNumber; i++) { + range.push(minRange + eachRange * i); + } + return range.reverse(); +} + +function calYAxisData(series, opts, config) { + //堆叠图重算Y轴 + var columnstyle = assign({}, { + type: "" + }, opts.extra.column); + //如果是多Y轴,重新计算 + var YLength = opts.yAxis.data.length; + var newSeries=new Array(YLength); + if(YLength>0){ + for(let i=0;i<YLength;i++){ + newSeries[i]=[]; + for(let j=0;j<series.length;j++){ + if(series[j].index == i){ + newSeries[i].push(series[j]); + } + } + } + var rangesArr =new Array(YLength); + var rangesFormatArr = new Array(YLength); + var yAxisWidthArr =new Array(YLength); + + for(let i=0;i<YLength;i++){ + let yData = opts.yAxis.data[i]; + //如果总开关不显示,强制每个Y轴为不显示 + if(opts.yAxis.disabled == true){ + yData.disabled = true; + } + rangesArr[i]=getYAxisTextList(newSeries[i], opts, config, columnstyle.type,i); + let yAxisFontSizes = yData.fontSize || config.fontSize; + yAxisWidthArr[i] = {position:yData.position?yData.position:'left',width:0}; + rangesFormatArr[i]= rangesArr[i].map(function(items) { + items = util.toFixed(items, 6); + items = yData.format ? yData.format(Number(items)) : items; + yAxisWidthArr[i].width = Math.max(yAxisWidthArr[i].width, measureText(items, yAxisFontSizes) + 5); + return items; + }); + let calibration= yData.calibration? 4*opts.pixelRatio : 0 ; + yAxisWidthArr[i].width += calibration +3*opts.pixelRatio; + if (yData.disabled === true) { + yAxisWidthArr[i].width=0; + } + } + + }else{ + var rangesArr =new Array(1); + var rangesFormatArr = new Array(1); + var yAxisWidthArr =new Array(1); + rangesArr[0] = getYAxisTextList(series, opts, config, columnstyle.type); + yAxisWidthArr[0] = {position:'left',width:0}; + var yAxisFontSize = opts.yAxis.fontSize || config.fontSize; + rangesFormatArr[0] = rangesArr[0].map(function(item) { + item = util.toFixed(item, 6); + item = opts.yAxis.format ? opts.yAxis.format(Number(item)) : item; + yAxisWidthArr[0].width = Math.max(yAxisWidthArr[0].width, measureText(item, yAxisFontSize) + 5); + return item; + }); + yAxisWidthArr[0].width += 3*opts.pixelRatio; + if (opts.yAxis.disabled === true) { + yAxisWidthArr[0] = {position:'left',width:0}; + opts.yAxis.data[0]={disabled:true}; + }else{ + opts.yAxis.data[0]={disabled:false,position:'left',max:opts.yAxis.max,min:opts.yAxis.min,format:opts.yAxis.format}; + } + + } + + return { + rangesFormat: rangesFormatArr, + ranges: rangesArr, + yAxisWidth: yAxisWidthArr + }; + +} + +function calTooltipYAxisData(point, series, opts, config, eachSpacing) { + let ranges = [].concat(opts.chartData.yAxisData.ranges); + let spacingValid = opts.height - opts.area[0] - opts.area[2]; + let minAxis = opts.area[0]; + let items=[]; + for(let i=0;i<ranges.length;i++){ + let maxVal = ranges[i].shift(); + let minVal = ranges[i].pop(); + let item = maxVal - (maxVal - minVal) * (point - minAxis) / spacingValid; + item = opts.yAxis.data[i].format ? opts.yAxis.data[i].format(Number(item)) : item.toFixed(0); + items.push(String(item)) + } + return items; +} + +function calMarkLineData(points, opts) { + let minRange, maxRange; + let spacingValid = opts.height - opts.area[0] - opts.area[2]; + for (let i = 0; i < points.length; i++) { + points[i].yAxisIndex = points[i].yAxisIndex ? points[i].yAxisIndex:0; + let range = [].concat(opts.chartData.yAxisData.ranges[points[i].yAxisIndex]); + minRange = range.pop(); + maxRange = range.shift(); + let height = spacingValid * (points[i].value - minRange) / (maxRange - minRange); + points[i].y = opts.height - Math.round(height) - opts.area[2]; + } + return points; +} + +function contextRotate(context, opts) { + if (opts.rotateLock !== true) { + context.translate(opts.height, 0); + context.rotate(90 * Math.PI / 180); + } else if (opts._rotate_ !== true) { + context.translate(opts.height, 0); + context.rotate(90 * Math.PI / 180); + opts._rotate_ = true; + } +} + +function drawPointShape(points, color, shape, context, opts) { + context.beginPath(); + if(opts.dataPointShapeType == 'hollow'){ + context.setStrokeStyle(color); + context.setFillStyle(opts.background); + context.setLineWidth(2 * opts.pixelRatio); + }else{ + context.setStrokeStyle("#ffffff"); + context.setFillStyle(color); + context.setLineWidth(1 * opts.pixelRatio); + } + if (shape === 'diamond') { + points.forEach(function(item, index) { + if (item !== null) { + context.moveTo(item.x, item.y - 4.5); + context.lineTo(item.x - 4.5, item.y); + context.lineTo(item.x, item.y + 4.5); + context.lineTo(item.x + 4.5, item.y); + context.lineTo(item.x, item.y - 4.5); + } + }); + } else if (shape === 'circle') { + points.forEach(function(item, index) { + if (item !== null) { + context.moveTo(item.x + 2.5 * opts.pixelRatio, item.y); + context.arc(item.x, item.y, 3 * opts.pixelRatio, 0, 2 * Math.PI, false); + } + }); + } else if (shape === 'rect') { + points.forEach(function(item, index) { + if (item !== null) { + context.moveTo(item.x - 3.5, item.y - 3.5); + context.rect(item.x - 3.5, item.y - 3.5, 7, 7); + } + }); + } else if (shape === 'triangle') { + points.forEach(function(item, index) { + if (item !== null) { + context.moveTo(item.x, item.y - 4.5); + context.lineTo(item.x - 4.5, item.y + 4.5); + context.lineTo(item.x + 4.5, item.y + 4.5); + context.lineTo(item.x, item.y - 4.5); + } + }); + } + context.closePath(); + context.fill(); + context.stroke(); +} + +function drawRingTitle(opts, config, context, center) { + var titlefontSize = opts.title.fontSize || config.titleFontSize; + var subtitlefontSize = opts.subtitle.fontSize || config.subtitleFontSize; + var title = opts.title.name || ''; + var subtitle = opts.subtitle.name || ''; + var titleFontColor = opts.title.color || config.titleColor; + var subtitleFontColor = opts.subtitle.color || config.subtitleColor; + var titleHeight = title ? titlefontSize : 0; + var subtitleHeight = subtitle ? subtitlefontSize : 0; + var margin = 5; + + if (subtitle) { + var textWidth = measureText(subtitle, subtitlefontSize); + var startX = center.x - textWidth / 2 + (opts.subtitle.offsetX || 0); + var startY = center.y + subtitlefontSize / 2 + (opts.subtitle.offsetY || 0); + if (title) { + startY += (titleHeight + margin) / 2; + } + context.beginPath(); + context.setFontSize(subtitlefontSize); + context.setFillStyle(subtitleFontColor); + context.fillText(subtitle, startX, startY); + context.closePath(); + context.stroke(); + } + if (title) { + var _textWidth = measureText(title, titlefontSize); + var _startX = center.x - _textWidth / 2 + (opts.title.offsetX || 0); + var _startY = center.y + titlefontSize / 2 + (opts.title.offsetY || 0); + if (subtitle) { + _startY -= (subtitleHeight + margin) / 2; + } + context.beginPath(); + context.setFontSize(titlefontSize); + context.setFillStyle(titleFontColor); + context.fillText(title, _startX, _startY); + context.closePath(); + context.stroke(); + } +} + +function drawPointText(points, series, config, context) { + // 绘制数据文案 + var data = series.data; + points.forEach(function(item, index) { + if (item !== null) { + //var formatVal = series.format ? series.format(data[index]) : data[index]; + context.beginPath(); + context.setFontSize(series.textSize || config.fontSize); + context.setFillStyle(series.textColor || '#666666'); + var value = data[index] + if (typeof data[index] === 'object' && data[index] !== null) { + if (data[index].constructor == Array) { + value = data[index][1]; + }else{ + value = data[index].value + } + } + var formatVal = series.format ? series.format(value) : value; + context.fillText(String(formatVal), item.x - measureText(formatVal, series.textSize || config.fontSize) / 2, item.y -4); + context.closePath(); + context.stroke(); + } + }); + +} + +function drawGaugeLabel(gaugeOption, radius, centerPosition, opts, config, context) { + radius -= gaugeOption.width / 2 + config.gaugeLabelTextMargin; + + let totalAngle = gaugeOption.startAngle - gaugeOption.endAngle + 1; + let splitAngle = totalAngle / gaugeOption.splitLine.splitNumber; + let totalNumber = gaugeOption.endNumber - gaugeOption.startNumber; + let splitNumber = totalNumber / gaugeOption.splitLine.splitNumber; + let nowAngle = gaugeOption.startAngle; + let nowNumber = gaugeOption.startNumber; + for (let i = 0; i < gaugeOption.splitLine.splitNumber + 1; i++) { + var pos = { + x: radius * Math.cos(nowAngle * Math.PI), + y: radius * Math.sin(nowAngle * Math.PI) + }; + var labelText = gaugeOption.labelFormat ? gaugeOption.labelFormat(nowNumber) : nowNumber; + pos.x += centerPosition.x - measureText(labelText) / 2; + pos.y += centerPosition.y; + var startX = pos.x; + var startY = pos.y; + context.beginPath(); + context.setFontSize(config.fontSize); + context.setFillStyle(gaugeOption.labelColor || '#666666'); + context.fillText(labelText, startX, startY + config.fontSize / 2); + context.closePath(); + context.stroke(); + + nowAngle += splitAngle; + if (nowAngle >= 2) { + nowAngle = nowAngle % 2; + } + nowNumber += splitNumber; + } + +} + +function drawRadarLabel(angleList, radius, centerPosition, opts, config, context) { + var radarOption = opts.extra.radar || {}; + radius += config.radarLabelTextMargin; + + angleList.forEach(function(angle, index) { + var pos = { + x: radius * Math.cos(angle), + y: radius * Math.sin(angle) + }; + var posRelativeCanvas = convertCoordinateOrigin(pos.x, pos.y, centerPosition); + var startX = posRelativeCanvas.x; + var startY = posRelativeCanvas.y; + if (util.approximatelyEqual(pos.x, 0)) { + startX -= measureText(opts.categories[index] || '') / 2; + } else if (pos.x < 0) { + startX -= measureText(opts.categories[index] || ''); + } + context.beginPath(); + context.setFontSize(config.fontSize); + context.setFillStyle(radarOption.labelColor || '#666666'); + context.fillText(opts.categories[index] || '', startX, startY + config.fontSize / 2); + context.closePath(); + context.stroke(); + }); + +} + +function drawPieText(series, opts, config, context, radius, center) { + var lineRadius = config.pieChartLinePadding; + var textObjectCollection = []; + var lastTextObject = null; + + var seriesConvert = series.map(function(item) { + var text = item.format ? item.format(+item._proportion_.toFixed(2)) : util.toFixed(item._proportion_.toFixed(4) * 100) +'%'; + if(item._rose_proportion_) item._proportion_=item._rose_proportion_; + var arc = 2 * Math.PI - (item._start_ + 2 * Math.PI * item._proportion_ / 2); + var color = item.color; + var radius = item._radius_; + return { + arc: arc, + text: text, + color: color, + radius: radius, + textColor: item.textColor, + textSize: item.textSize, + }; + }); + for (let i = 0; i < seriesConvert.length; i++) { + let item = seriesConvert[i]; + // line end + let orginX1 = Math.cos(item.arc) * (item.radius + lineRadius); + let orginY1 = Math.sin(item.arc) * (item.radius + lineRadius); + + // line start + let orginX2 = Math.cos(item.arc) * item.radius; + let orginY2 = Math.sin(item.arc) * item.radius; + + // text start + let orginX3 = orginX1 >= 0 ? orginX1 + config.pieChartTextPadding : orginX1 - config.pieChartTextPadding; + let orginY3 = orginY1; + let textWidth = measureText(item.text,item.textSize||config.fontSize); + let startY = orginY3; + + if (lastTextObject && util.isSameXCoordinateArea(lastTextObject.start, { + x: orginX3 + })) { + if (orginX3 > 0) { + startY = Math.min(orginY3, lastTextObject.start.y); + } else if (orginX1 < 0) { + startY = Math.max(orginY3, lastTextObject.start.y); + } else { + if (orginY3 > 0) { + startY = Math.max(orginY3, lastTextObject.start.y); + } else { + startY = Math.min(orginY3, lastTextObject.start.y); + } + } + } + if (orginX3 < 0) { + orginX3 -= textWidth; + } + + let textObject = { + lineStart: { + x: orginX2, + y: orginY2 + }, + lineEnd: { + x: orginX1, + y: orginY1 + }, + start: { + x: orginX3, + y: startY + }, + width: textWidth, + height: config.fontSize, + text: item.text, + color: item.color, + textColor: item.textColor, + textSize: item.textSize + }; + lastTextObject = avoidCollision(textObject, lastTextObject); + textObjectCollection.push(lastTextObject); + } + + for (let i = 0; i < textObjectCollection.length; i++) { + let item = textObjectCollection[i]; + let lineStartPoistion = convertCoordinateOrigin(item.lineStart.x, item.lineStart.y, center); + let lineEndPoistion = convertCoordinateOrigin(item.lineEnd.x, item.lineEnd.y, center); + let textPosition = convertCoordinateOrigin(item.start.x, item.start.y, center); + context.setLineWidth(1 * opts.pixelRatio); + context.setFontSize(config.fontSize); + context.beginPath(); + context.setStrokeStyle(item.color); + context.setFillStyle(item.color); + context.moveTo(lineStartPoistion.x, lineStartPoistion.y); + let curveStartX = item.start.x < 0 ? textPosition.x + item.width : textPosition.x; + let textStartX = item.start.x < 0 ? textPosition.x - 5 : textPosition.x + 5; + context.quadraticCurveTo(lineEndPoistion.x, lineEndPoistion.y, curveStartX, textPosition.y); + context.moveTo(lineStartPoistion.x, lineStartPoistion.y); + context.stroke(); + context.closePath(); + context.beginPath(); + context.moveTo(textPosition.x + item.width, textPosition.y); + context.arc(curveStartX, textPosition.y, 2, 0, 2 * Math.PI); + context.closePath(); + context.fill(); + context.beginPath(); + context.setFontSize(item.textSize || config.fontSize); + context.setFillStyle(item.textColor || '#666666'); + context.fillText(item.text, textStartX, textPosition.y + 3); + context.closePath(); + context.stroke(); + context.closePath(); + } +} + +function drawToolTipSplitLine(offsetX, opts, config, context) { + var toolTipOption = opts.extra.tooltip || {}; + toolTipOption.gridType = toolTipOption.gridType == undefined ? 'solid' : toolTipOption.gridType; + toolTipOption.dashLength = toolTipOption.dashLength == undefined ? 4 : toolTipOption.dashLength; + var startY = opts.area[0]; + var endY = opts.height - opts.area[2]; + + if (toolTipOption.gridType == 'dash') { + context.setLineDash([toolTipOption.dashLength, toolTipOption.dashLength]); + } + context.setStrokeStyle(toolTipOption.gridColor || '#cccccc'); + context.setLineWidth(1 * opts.pixelRatio); + context.beginPath(); + context.moveTo(offsetX, startY); + context.lineTo(offsetX, endY); + context.stroke(); + context.setLineDash([]); + + if (toolTipOption.xAxisLabel) { + let labelText = opts.categories[opts.tooltip.index]; + context.setFontSize(config.fontSize); + let textWidth = measureText(labelText, config.fontSize); + + let textX = offsetX - 0.5 * textWidth; + let textY = endY; + context.beginPath(); + context.setFillStyle(hexToRgb(toolTipOption.labelBgColor || config.toolTipBackground, toolTipOption.labelBgOpacity || config.toolTipOpacity)); + context.setStrokeStyle(toolTipOption.labelBgColor || config.toolTipBackground); + context.setLineWidth(1 * opts.pixelRatio); + context.rect(textX - config.toolTipPadding, textY, textWidth + 2 * config.toolTipPadding, config.fontSize + 2 * config.toolTipPadding); + context.closePath(); + context.stroke(); + context.fill(); + + context.beginPath(); + context.setFontSize(config.fontSize); + context.setFillStyle(toolTipOption.labelFontColor || config.fontColor); + context.fillText(String(labelText), textX, textY + config.toolTipPadding + config.fontSize); + context.closePath(); + context.stroke(); + } +} + +function drawMarkLine(opts, config, context) { + let markLineOption = assign({}, { + type: 'solid', + dashLength: 4, + data: [] + }, opts.extra.markLine); + let startX = opts.area[3]; + let endX = opts.width - opts.area[1]; + let points = calMarkLineData(markLineOption.data, opts); + + for (let i = 0; i < points.length; i++) { + let item = assign({}, { + lineColor: '#DE4A42', + showLabel: false, + labelFontColor: '#666666', + labelBgColor: '#DFE8FF', + labelBgOpacity: 0.8, + yAxisIndex: 0 + }, points[i]); + + if (markLineOption.type == 'dash') { + context.setLineDash([markLineOption.dashLength, markLineOption.dashLength]); + } + context.setStrokeStyle(item.lineColor); + context.setLineWidth(1 * opts.pixelRatio); + context.beginPath(); + context.moveTo(startX, item.y); + context.lineTo(endX, item.y); + context.stroke(); + context.setLineDash([]); + if (item.showLabel) { + let labelText = opts.yAxis.format ? opts.yAxis.format(Number(item.value)) : item.value; + context.setFontSize(config.fontSize); + let textWidth = measureText(labelText, config.fontSize); + let bgStartX = opts.padding[3] + config.yAxisTitleWidth - config.toolTipPadding; + let bgEndX = Math.max(opts.area[3], textWidth + config.toolTipPadding * 2); + let bgWidth = bgEndX - bgStartX; + + let textX = bgStartX + (bgWidth - textWidth) / 2; + let textY = item.y; + context.setFillStyle(hexToRgb(item.labelBgColor, item.labelBgOpacity)); + context.setStrokeStyle(item.labelBgColor); + context.setLineWidth(1 * opts.pixelRatio); + context.beginPath(); + context.rect(bgStartX, textY - 0.5 * config.fontSize - config.toolTipPadding, bgWidth, config.fontSize + 2 * config.toolTipPadding); + context.closePath(); + context.stroke(); + context.fill(); + + context.beginPath(); + context.setFontSize(config.fontSize); + context.setFillStyle(item.labelFontColor); + context.fillText(String(labelText), textX, textY + 0.5 * config.fontSize); + context.stroke(); + } + } +} + +function drawToolTipHorizentalLine(opts, config, context, eachSpacing, xAxisPoints) { + var toolTipOption = assign({}, { + gridType: 'solid', + dashLength: 4 + }, opts.extra.tooltip); + + var startX = opts.area[3]; + var endX = opts.width - opts.area[1]; + + if (toolTipOption.gridType == 'dash') { + context.setLineDash([toolTipOption.dashLength, toolTipOption.dashLength]); + } + context.setStrokeStyle(toolTipOption.gridColor || '#cccccc'); + context.setLineWidth(1 * opts.pixelRatio); + context.beginPath(); + context.moveTo(startX, opts.tooltip.offset.y); + context.lineTo(endX, opts.tooltip.offset.y); + context.stroke(); + context.setLineDash([]); + + if (toolTipOption.yAxisLabel) { + let labelText = calTooltipYAxisData(opts.tooltip.offset.y, opts.series, opts, config, eachSpacing); + let widthArr = opts.chartData.yAxisData.yAxisWidth; + let tStartLeft=opts.area[3]; + let tStartRight=opts.width-opts.area[1]; + for(let i=0;i<labelText.length;i++){ + context.setFontSize(config.fontSize); + let textWidth = measureText(labelText[i], config.fontSize); + let bgStartX,bgEndX,bgWidth; + if(widthArr[i].position == 'left'){ + bgStartX = tStartLeft - widthArr[i].width; + bgEndX = Math.max(bgStartX, bgStartX + textWidth + config.toolTipPadding * 2); + }else{ + bgStartX = tStartRight; + bgEndX = Math.max(bgStartX + widthArr[i].width, bgStartX + textWidth + config.toolTipPadding * 2); + } + bgWidth = bgEndX - bgStartX; + + let textX = bgStartX + (bgWidth - textWidth) / 2; + let textY = opts.tooltip.offset.y; + context.beginPath(); + context.setFillStyle(hexToRgb(toolTipOption.labelBgColor || config.toolTipBackground, toolTipOption.labelBgOpacity || config.toolTipOpacity)); + context.setStrokeStyle(toolTipOption.labelBgColor || config.toolTipBackground); + context.setLineWidth(1 * opts.pixelRatio); + context.rect(bgStartX, textY - 0.5 * config.fontSize - config.toolTipPadding, bgWidth, config.fontSize + 2 * config.toolTipPadding); + context.closePath(); + context.stroke(); + context.fill(); + + context.beginPath(); + context.setFontSize(config.fontSize); + context.setFillStyle(toolTipOption.labelFontColor || config.fontColor); + context.fillText(labelText[i], textX, textY + 0.5 * config.fontSize); + context.closePath(); + context.stroke(); + if(widthArr[i].position == 'left'){ + tStartLeft -=(widthArr[i].width + opts.yAxis.padding); + }else{ + tStartRight +=widthArr[i].width+ opts.yAxis.padding; + } + } + } +} + +function drawToolTipSplitArea(offsetX, opts, config, context, eachSpacing) { + var toolTipOption = assign({}, { + activeBgColor: '#000000', + activeBgOpacity: 0.08 + }, opts.extra.tooltip); + var startY = opts.area[0]; + var endY = opts.height - opts.area[2]; + context.beginPath(); + context.setFillStyle(hexToRgb(toolTipOption.activeBgColor, toolTipOption.activeBgOpacity)); + context.rect(offsetX - eachSpacing / 2, startY, eachSpacing, endY - startY); + context.closePath(); + context.fill(); +} + +function drawToolTip(textList, offset, opts, config, context, eachSpacing, xAxisPoints) { + var toolTipOption = assign({}, { + showBox:true, + bgColor: '#000000', + bgOpacity: 0.7, + fontColor: '#FFFFFF' + }, opts.extra.tooltip); + var legendWidth = 4 * opts.pixelRatio; + var legendMarginRight = 5 * opts.pixelRatio; + var arrowWidth = 8 * opts.pixelRatio; + var isOverRightBorder = false; + if (opts.type == 'line' || opts.type == 'area' || opts.type == 'candle' || opts.type == 'mix') { + drawToolTipSplitLine(opts.tooltip.offset.x, opts, config, context); + } + + offset = assign({ + x: 0, + y: 0 + }, offset); + offset.y -= 8 * opts.pixelRatio; + var textWidth = textList.map(function(item) { + return measureText(item.text, config.fontSize); + }); + var toolTipWidth = legendWidth + legendMarginRight + 4 * config.toolTipPadding + Math.max.apply(null, textWidth); + var toolTipHeight = 2 * config.toolTipPadding + textList.length * config.toolTipLineHeight; + + if(toolTipOption.showBox == false){ return } + // if beyond the right border + if (offset.x - Math.abs(opts._scrollDistance_) + arrowWidth + toolTipWidth > opts.width) { + isOverRightBorder = true; + } + if (toolTipHeight + offset.y > opts.height) { + offset.y = opts.height - toolTipHeight; + } + // draw background rect + context.beginPath(); + context.setFillStyle(hexToRgb(toolTipOption.bgColor || config.toolTipBackground, toolTipOption.bgOpacity || config.toolTipOpacity)); + if (isOverRightBorder) { + context.moveTo(offset.x, offset.y + 10 * opts.pixelRatio); + context.lineTo(offset.x - arrowWidth, offset.y + 10 * opts.pixelRatio - 5 * opts.pixelRatio); + context.lineTo(offset.x - arrowWidth, offset.y); + context.lineTo(offset.x - arrowWidth - Math.round(toolTipWidth), offset.y); + context.lineTo(offset.x - arrowWidth - Math.round(toolTipWidth), offset.y + toolTipHeight); + context.lineTo(offset.x - arrowWidth, offset.y + toolTipHeight); + context.lineTo(offset.x - arrowWidth, offset.y + 10 * opts.pixelRatio + 5 * opts.pixelRatio); + context.lineTo(offset.x, offset.y + 10 * opts.pixelRatio); + } else { + context.moveTo(offset.x, offset.y + 10 * opts.pixelRatio); + context.lineTo(offset.x + arrowWidth, offset.y + 10 * opts.pixelRatio - 5 * opts.pixelRatio); + context.lineTo(offset.x + arrowWidth, offset.y); + context.lineTo(offset.x + arrowWidth + Math.round(toolTipWidth), offset.y); + context.lineTo(offset.x + arrowWidth + Math.round(toolTipWidth), offset.y + toolTipHeight); + context.lineTo(offset.x + arrowWidth, offset.y + toolTipHeight); + context.lineTo(offset.x + arrowWidth, offset.y + 10 * opts.pixelRatio + 5 * opts.pixelRatio); + context.lineTo(offset.x, offset.y + 10 * opts.pixelRatio); + } + + context.closePath(); + context.fill(); + + // draw legend + textList.forEach(function(item, index) { + if (item.color !== null) { + context.beginPath(); + context.setFillStyle(item.color); + var startX = offset.x + arrowWidth + 2 * config.toolTipPadding; + var startY = offset.y + (config.toolTipLineHeight - config.fontSize) / 2 + config.toolTipLineHeight * index + + config.toolTipPadding + 1; + if (isOverRightBorder) { + startX = offset.x - toolTipWidth - arrowWidth + 2 * config.toolTipPadding; + } + context.fillRect(startX, startY, legendWidth, config.fontSize); + context.closePath(); + } + }); + + // draw text list + + textList.forEach(function(item, index) { + var startX = offset.x + arrowWidth + 2 * config.toolTipPadding + legendWidth + legendMarginRight; + if (isOverRightBorder) { + startX = offset.x - toolTipWidth - arrowWidth + 2 * config.toolTipPadding + +legendWidth + legendMarginRight; + } + var startY = offset.y + (config.toolTipLineHeight - config.fontSize) / 2 + config.toolTipLineHeight * index + + config.toolTipPadding; + context.beginPath(); + context.setFontSize(config.fontSize); + context.setFillStyle(toolTipOption.fontColor); + context.fillText(item.text, startX, startY + config.fontSize); + context.closePath(); + context.stroke(); + }); +} + +function drawYAxisTitle(title, opts, config, context) { + var startX = config.xAxisHeight + (opts.height - config.xAxisHeight - measureText(title)) / 2; + context.save(); + context.beginPath(); + context.setFontSize(config.fontSize); + context.setFillStyle(opts.yAxis.titleFontColor || '#333333'); + context.translate(0, opts.height); + context.rotate(-90 * Math.PI / 180); + context.fillText(title, startX, opts.padding[3] + 0.5 * config.fontSize); + context.closePath(); + context.stroke(); + context.restore(); +} + +function drawColumnDataPoints(series, opts, config, context) { + let process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1; + let xAxisData = opts.chartData.xAxisData, + xAxisPoints = xAxisData.xAxisPoints, + eachSpacing = xAxisData.eachSpacing; + let columnOption = assign({}, { + type: 'group', + width: eachSpacing / 2, + meter: { + border: 4, + fillColor: '#FFFFFF' + } + }, opts.extra.column); + + let calPoints = []; + context.save(); + + let leftNum=-2; + let rightNum=xAxisPoints.length+2; + + if (opts._scrollDistance_ && opts._scrollDistance_ !== 0 && opts.enableScroll === true) { + context.translate(opts._scrollDistance_, 0); + leftNum=Math.floor(-opts._scrollDistance_/eachSpacing)-2; + rightNum=leftNum+opts.xAxis.itemCount+4; + } + if (opts.tooltip && opts.tooltip.textList && opts.tooltip.textList.length && process === 1) { + drawToolTipSplitArea(opts.tooltip.offset.x, opts, config, context, eachSpacing); + } + + series.forEach(function(eachSeries, seriesIndex) { + let ranges,minRange,maxRange; + ranges = [].concat(opts.chartData.yAxisData.ranges[eachSeries.index]); + minRange = ranges.pop(); + maxRange = ranges.shift(); + + var data = eachSeries.data; + switch (columnOption.type) { + case 'group': + var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process); + var tooltipPoints = getStackDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, seriesIndex, series, process); + calPoints.push(tooltipPoints); + points = fixColumeData(points, eachSpacing, series.length, seriesIndex, config, opts); + for(let i=0;i<points.length;i++){ + let item=points[i]; + if (item !== null && i>leftNum && i<rightNum) { + context.beginPath(); + context.setStrokeStyle(item.color || eachSeries.color); + context.setLineWidth(1) + context.setFillStyle(item.color || eachSeries.color); + var startX = item.x - item.width / 2; + var height = opts.height - item.y - opts.area[2]; + context.moveTo(startX, item.y); + context.lineTo(startX+item.width-2,item.y); + context.lineTo(startX+item.width-2,opts.height - opts.area[2]); + context.lineTo(startX,opts.height - opts.area[2]); + context.lineTo(startX,item.y); + context.closePath(); + context.stroke(); + context.fill(); + } + }; + break; + case 'stack': + // 绘制堆叠数据图 + var points = getStackDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, seriesIndex, series, process); + calPoints.push(points); + points = fixColumeStackData(points, eachSpacing, series.length, seriesIndex, config, opts, series); + + for(let i=0;i<points.length;i++){ + let item=points[i]; + if (item !== null && i>leftNum && i<rightNum) { + context.beginPath(); + context.setFillStyle(item.color || eachSeries.color); + var startX = item.x - item.width / 2 + 1; + var height = opts.height - item.y - opts.area[2]; + var height0 = opts.height - item.y0 - opts.area[2]; + if (seriesIndex > 0) { + height -= height0; + } + context.moveTo(startX, item.y); + context.fillRect(startX, item.y, item.width - 2, height); + context.closePath(); + context.fill(); + } + }; + break; + case 'meter': + // 绘制温度计数据图 + var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process); + calPoints.push(points); + points = fixColumeMeterData(points, eachSpacing, series.length, seriesIndex, config, opts, columnOption.meter.border); + if (seriesIndex == 0) { + for(let i=0;i<points.length;i++){ + let item=points[i]; + if (item !== null && i>leftNum && i<rightNum) { + //画背景颜色 + context.beginPath(); + context.setFillStyle(columnOption.meter.fillColor); + var startX = item.x - item.width / 2; + var height = opts.height - item.y - opts.area[2]; + context.moveTo(startX, item.y); + context.fillRect(startX, item.y, item.width, height); + context.closePath(); + context.fill(); + //画边框线 + if (columnOption.meter.border > 0) { + context.beginPath(); + context.setStrokeStyle(eachSeries.color); + context.setLineWidth(columnOption.meter.border * opts.pixelRatio); + context.moveTo(startX + columnOption.meter.border * 0.5, item.y + height); + context.lineTo(startX + columnOption.meter.border * 0.5, item.y + columnOption.meter.border * 0.5); + context.lineTo(startX + item.width - columnOption.meter.border * 0.5, item.y + columnOption.meter.border * 0.5); + context.lineTo(startX + item.width - columnOption.meter.border * 0.5, item.y + height); + context.stroke(); + } + } + }; + } else { + for(let i=0;i<points.length;i++){ + let item=points[i]; + if (item !== null && i>leftNum && i<rightNum) { + context.beginPath(); + context.setFillStyle(item.color || eachSeries.color); + var startX = item.x - item.width / 2; + var height = opts.height - item.y - opts.area[2]; + context.moveTo(startX, item.y); + context.fillRect(startX, item.y, item.width, height); + context.closePath(); + context.fill(); + } + }; + } + break; + } + }); + + if (opts.dataLabel !== false && process === 1) { + series.forEach(function(eachSeries, seriesIndex) { + let ranges,minRange,maxRange; + ranges = [].concat(opts.chartData.yAxisData.ranges[eachSeries.index]); + minRange = ranges.pop(); + maxRange = ranges.shift(); + var data = eachSeries.data; + switch (columnOption.type) { + case 'group': + var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process); + points = fixColumeData(points, eachSpacing, series.length, seriesIndex, config, opts); + drawPointText(points, eachSeries, config, context); + break; + case 'stack': + var points = getStackDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, seriesIndex, series, process); + drawPointText(points, eachSeries, config, context); + break; + case 'meter': + var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process); + drawPointText(points, eachSeries, config, context); + break; + } + }); + } + + context.restore(); + + return { + xAxisPoints: xAxisPoints, + calPoints: calPoints, + eachSpacing: eachSpacing + }; +} + +function drawCandleDataPoints(series, seriesMA, opts, config, context) { + var process = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 1; + var candleOption = assign({}, { + color: {}, + average: {} + }, opts.extra.candle); + candleOption.color = assign({}, { + upLine: '#f04864', + upFill: '#f04864', + downLine: '#2fc25b', + downFill: '#2fc25b' + }, candleOption.color); + candleOption.average = assign({}, { + show: false, + name: [], + day: [], + color: config.colors + }, candleOption.average); + opts.extra.candle = candleOption; + + let xAxisData = opts.chartData.xAxisData, + xAxisPoints = xAxisData.xAxisPoints, + eachSpacing = xAxisData.eachSpacing; + + let calPoints = []; + + context.save(); + + let leftNum=-2; + let rightNum=xAxisPoints.length+2; + let leftSpace=0; + let rightSpace=opts.width+eachSpacing; + + if (opts._scrollDistance_ && opts._scrollDistance_ !== 0 && opts.enableScroll === true) { + context.translate(opts._scrollDistance_, 0); + leftNum=Math.floor(-opts._scrollDistance_/eachSpacing)-2; + rightNum=leftNum+opts.xAxis.itemCount+4; + leftSpace=-opts._scrollDistance_-eachSpacing+opts.area[3]; + rightSpace=leftSpace+(opts.xAxis.itemCount+4)*eachSpacing; + } + + //画均线 + if (candleOption.average.show || seriesMA) { //Merge pull request !12 from 邱贵翔 + seriesMA.forEach(function(eachSeries, seriesIndex) { + let ranges,minRange,maxRange; + ranges = [].concat(opts.chartData.yAxisData.ranges[eachSeries.index]); + minRange = ranges.pop(); + maxRange = ranges.shift(); + + var data = eachSeries.data; + var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process); + var splitPointList = splitPoints(points); + + for(let i=0;i<splitPointList.length;i++){ + let points=splitPointList[i]; + context.beginPath(); + context.setStrokeStyle(eachSeries.color); + context.setLineWidth(1); + if (points.length === 1) { + context.moveTo(points[0].x, points[0].y); + context.arc(points[0].x, points[0].y, 1, 0, 2 * Math.PI); + } else { + context.moveTo(points[0].x, points[0].y); + let startPoint=0; + for(let j=0;j<points.length;j++){ + let item=points[j]; + if(startPoint==0 && item.x > leftSpace){ + context.moveTo(item.x, item.y); + startPoint=1; + } + if (j > 0 && item.x > leftSpace && item.x < rightSpace) { + var ctrlPoint = createCurveControlPoints(points, j - 1); + context.bezierCurveTo(ctrlPoint.ctrA.x, ctrlPoint.ctrA.y, ctrlPoint.ctrB.x, ctrlPoint.ctrB.y,item.x, item.y); + } + } + context.moveTo(points[0].x, points[0].y); + } + context.closePath(); + context.stroke(); + } + }); + } + //画K线 + series.forEach(function(eachSeries, seriesIndex) { + let ranges,minRange,maxRange; + ranges = [].concat(opts.chartData.yAxisData.ranges[eachSeries.index]); + minRange = ranges.pop(); + maxRange = ranges.shift(); + var data = eachSeries.data; + var points = getCandleDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process); + calPoints.push(points); + var splitPointList = splitPoints(points); + + for(let i=0;i<splitPointList[0].length;i++){ + if(i>leftNum && i<rightNum){ + let item=splitPointList[0][i]; + context.beginPath(); + //如果上涨 + if (data[i][1] - data[i][0] > 0) { + context.setStrokeStyle(candleOption.color.upLine); + context.setFillStyle(candleOption.color.upFill); + context.setLineWidth(1 * opts.pixelRatio); + context.moveTo(item[3].x, item[3].y); //顶点 + context.lineTo(item[1].x, item[1].y); //收盘中间点 + context.lineTo(item[1].x - eachSpacing / 4, item[1].y); //收盘左侧点 + context.lineTo(item[0].x - eachSpacing / 4, item[0].y); //开盘左侧点 + context.lineTo(item[0].x, item[0].y); //开盘中间点 + context.lineTo(item[2].x, item[2].y); //底点 + context.lineTo(item[0].x, item[0].y); //开盘中间点 + context.lineTo(item[0].x + eachSpacing / 4, item[0].y); //开盘右侧点 + context.lineTo(item[1].x + eachSpacing / 4, item[1].y); //收盘右侧点 + context.lineTo(item[1].x, item[1].y); //收盘中间点 + context.moveTo(item[3].x, item[3].y); //顶点 + } else { + context.setStrokeStyle(candleOption.color.downLine); + context.setFillStyle(candleOption.color.downFill); + context.setLineWidth(1 * opts.pixelRatio); + context.moveTo(item[3].x, item[3].y); //顶点 + context.lineTo(item[0].x, item[0].y); //开盘中间点 + context.lineTo(item[0].x - eachSpacing / 4, item[0].y); //开盘左侧点 + context.lineTo(item[1].x - eachSpacing / 4, item[1].y); //收盘左侧点 + context.lineTo(item[1].x, item[1].y); //收盘中间点 + context.lineTo(item[2].x, item[2].y); //底点 + context.lineTo(item[1].x, item[1].y); //收盘中间点 + context.lineTo(item[1].x + eachSpacing / 4, item[1].y); //收盘右侧点 + context.lineTo(item[0].x + eachSpacing / 4, item[0].y); //开盘右侧点 + context.lineTo(item[0].x, item[0].y); //开盘中间点 + context.moveTo(item[3].x, item[3].y); //顶点 + } + context.closePath(); + context.fill(); + context.stroke(); + } + } + }); + + context.restore(); + + return { + xAxisPoints: xAxisPoints, + calPoints: calPoints, + eachSpacing: eachSpacing + }; +} + +function drawAreaDataPoints(series, opts, config, context) { + var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1; + var areaOption = assign({},{ + type: 'straight', + opacity: 0.2, + addLine: false, + width: 2, + gradient:false + },opts.extra.area); + + let xAxisData = opts.chartData.xAxisData, + xAxisPoints = xAxisData.xAxisPoints, + eachSpacing = xAxisData.eachSpacing; + + let endY = opts.height - opts.area[2]; + let calPoints = []; + + context.save(); + let leftSpace=0; + let rightSpace=opts.width+eachSpacing; + if (opts._scrollDistance_ && opts._scrollDistance_ !== 0 && opts.enableScroll === true) { + context.translate(opts._scrollDistance_, 0); + leftSpace=-opts._scrollDistance_-eachSpacing+opts.area[3]; + rightSpace=leftSpace+(opts.xAxis.itemCount+4)*eachSpacing; + } + + series.forEach(function(eachSeries, seriesIndex) { + let ranges,minRange,maxRange; + ranges = [].concat(opts.chartData.yAxisData.ranges[eachSeries.index]); + minRange = ranges.pop(); + maxRange = ranges.shift(); + let data = eachSeries.data; + let points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process); + calPoints.push(points); + + let splitPointList = splitPoints(points); + for (let i = 0; i < splitPointList.length; i++) { + let points = splitPointList[i]; + // 绘制区域数 + context.beginPath(); + context.setStrokeStyle(hexToRgb(eachSeries.color, areaOption.opacity)); + if(areaOption.gradient){ + let gradient = context.createLinearGradient(0, opts.area[0], 0, opts.height-opts.area[2]); + gradient.addColorStop('0', hexToRgb(eachSeries.color, areaOption.opacity)); + gradient.addColorStop('1.0',hexToRgb("#FFFFFF", 0.1)); + context.setFillStyle(gradient); + }else{ + context.setFillStyle(hexToRgb(eachSeries.color, areaOption.opacity)); + } + context.setLineWidth(areaOption.width * opts.pixelRatio); + if (points.length > 1) { + let firstPoint = points[0]; + let lastPoint = points[points.length - 1]; + context.moveTo(firstPoint.x, firstPoint.y); + let startPoint=0; + if (areaOption.type === 'curve') { + for(let j=0;j<points.length;j++){ + let item=points[j]; + if(startPoint==0 && item.x > leftSpace){ + context.moveTo(item.x, item.y); + startPoint=1; + } + if (j > 0 && item.x > leftSpace && item.x < rightSpace) { + let ctrlPoint = createCurveControlPoints(points, j - 1); + context.bezierCurveTo(ctrlPoint.ctrA.x, ctrlPoint.ctrA.y, ctrlPoint.ctrB.x, ctrlPoint.ctrB.y,item.x, item.y); + } + }; + } else { + for(let j=0;j<points.length;j++){ + let item=points[j]; + if(startPoint==0 && item.x > leftSpace){ + context.moveTo(item.x, item.y); + startPoint=1; + } + if (j > 0 && item.x > leftSpace && item.x < rightSpace) { + context.lineTo(item.x, item.y); + } + }; + } + + context.lineTo(lastPoint.x, endY); + context.lineTo(firstPoint.x, endY); + context.lineTo(firstPoint.x, firstPoint.y); + } else { + let item = points[0]; + context.moveTo(item.x - eachSpacing / 2, item.y); + context.lineTo(item.x + eachSpacing / 2, item.y); + context.lineTo(item.x + eachSpacing / 2, endY); + context.lineTo(item.x - eachSpacing / 2, endY); + context.moveTo(item.x - eachSpacing / 2, item.y); + } + context.closePath(); + context.fill(); + + //画连线 + if (areaOption.addLine) { + if (eachSeries.lineType == 'dash') { + let dashLength = eachSeries.dashLength?eachSeries.dashLength:8; + dashLength *= opts.pixelRatio; + context.setLineDash([dashLength, dashLength]); + } + context.beginPath(); + context.setStrokeStyle(eachSeries.color); + context.setLineWidth(areaOption.width * opts.pixelRatio); + if (points.length === 1) { + context.moveTo(points[0].x, points[0].y); + context.arc(points[0].x, points[0].y, 1, 0, 2 * Math.PI); + } else { + context.moveTo(points[0].x, points[0].y); + let startPoint=0; + if (areaOption.type === 'curve') { + for(let j=0;j<points.length;j++){ + let item=points[j]; + if(startPoint==0 && item.x > leftSpace){ + context.moveTo(item.x, item.y); + startPoint=1; + } + if (j > 0 && item.x > leftSpace && item.x < rightSpace) { + let ctrlPoint = createCurveControlPoints(points, j - 1); + context.bezierCurveTo(ctrlPoint.ctrA.x, ctrlPoint.ctrA.y, ctrlPoint.ctrB.x, ctrlPoint.ctrB.y,item.x,item.y); + } + }; + } else { + for(let j=0;j<points.length;j++){ + let item=points[j]; + if(startPoint==0 && item.x > leftSpace){ + context.moveTo(item.x, item.y); + startPoint=1; + } + if (j > 0 && item.x > leftSpace && item.x < rightSpace) { + context.lineTo(item.x, item.y); + } + }; + } + context.moveTo(points[0].x, points[0].y); + } + context.stroke(); + context.setLineDash([]); + } + } + + //画点 + if (opts.dataPointShape !== false) { + drawPointShape(points, eachSeries.color, eachSeries.pointShape, context, opts); + } + + }); + + if (opts.dataLabel !== false && process === 1) { + series.forEach(function(eachSeries, seriesIndex) { + let ranges,minRange,maxRange; + ranges = [].concat(opts.chartData.yAxisData.ranges[eachSeries.index]); + minRange = ranges.pop(); + maxRange = ranges.shift(); + var data = eachSeries.data; + var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process); + drawPointText(points, eachSeries, config, context); + }); + } + + context.restore(); + + return { + xAxisPoints: xAxisPoints, + calPoints: calPoints, + eachSpacing: eachSpacing + }; +} + +function drawLineDataPoints(series, opts, config, context) { + var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1; + var lineOption = assign({},{ + type: 'straight', + width: 2 + },opts.extra.line); + lineOption.width *=opts.pixelRatio; + + let xAxisData = opts.chartData.xAxisData, + xAxisPoints = xAxisData.xAxisPoints, + eachSpacing = xAxisData.eachSpacing; + var calPoints = []; + + context.save(); + let leftSpace=0; + let rightSpace=opts.width+eachSpacing; + if (opts._scrollDistance_ && opts._scrollDistance_ !== 0 && opts.enableScroll === true) { + context.translate(opts._scrollDistance_, 0); + leftSpace=-opts._scrollDistance_-eachSpacing+opts.area[3]; + rightSpace=leftSpace+(opts.xAxis.itemCount+4)*eachSpacing; + } + + series.forEach(function(eachSeries, seriesIndex) { + let ranges,minRange,maxRange; + ranges = [].concat(opts.chartData.yAxisData.ranges[eachSeries.index]); + minRange = ranges.pop(); + maxRange = ranges.shift(); + var data = eachSeries.data; + var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process); + calPoints.push(points); + var splitPointList = splitPoints(points); + + if (eachSeries.lineType == 'dash') { + let dashLength = eachSeries.dashLength?eachSeries.dashLength:8; + dashLength *= opts.pixelRatio; + context.setLineDash([dashLength, dashLength]); + } + context.beginPath(); + context.setStrokeStyle(eachSeries.color); + context.setLineWidth(lineOption.width); + + splitPointList.forEach(function(points, index) { + + if (points.length === 1) { + context.moveTo(points[0].x, points[0].y); + context.arc(points[0].x, points[0].y, 1, 0, 2 * Math.PI); + } else { + context.moveTo(points[0].x, points[0].y); + let startPoint=0; + if (lineOption.type === 'curve') { + for(let j=0;j<points.length;j++){ + let item=points[j]; + if(startPoint==0 && item.x > leftSpace){ + context.moveTo(item.x, item.y); + startPoint=1; + } + if (j > 0 && item.x > leftSpace && item.x < rightSpace) { + var ctrlPoint = createCurveControlPoints(points, j - 1); + context.bezierCurveTo(ctrlPoint.ctrA.x, ctrlPoint.ctrA.y, ctrlPoint.ctrB.x, ctrlPoint.ctrB.y,item.x, item.y); + } + }; + } + if (lineOption.type === 'straight') { + for(let j=0;j<points.length;j++){ + let item=points[j]; + if(startPoint==0 && item.x > leftSpace){ + context.moveTo(item.x, item.y); + startPoint=1; + } + if (j > 0 && item.x > leftSpace && item.x < rightSpace) { + context.lineTo(item.x, item.y); + } + }; + } + if (lineOption.type === 'step') { + for(let j=0;j<points.length;j++){ + let item=points[j]; + if(startPoint==0 && item.x > leftSpace){ + context.moveTo(item.x, item.y); + startPoint=1; + } + if (j > 0 && item.x > leftSpace && item.x < rightSpace) { + context.lineTo(item.x, points[j-1].y); + context.lineTo(item.x, item.y); + } + }; + } + context.moveTo(points[0].x, points[0].y); + } + + }); + + context.stroke(); + context.setLineDash([]); + + if (opts.dataPointShape !== false) { + drawPointShape(points, eachSeries.color, eachSeries.pointShape, context, opts); + } + }); + + if (opts.dataLabel !== false && process === 1) { + series.forEach(function(eachSeries, seriesIndex) { + let ranges,minRange,maxRange; + ranges = [].concat(opts.chartData.yAxisData.ranges[eachSeries.index]); + minRange = ranges.pop(); + maxRange = ranges.shift(); + var data = eachSeries.data; + var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process); + drawPointText(points, eachSeries, config, context); + }); + } + + context.restore(); + + return { + xAxisPoints: xAxisPoints, + calPoints: calPoints, + eachSpacing: eachSpacing + }; +} + +function drawMixDataPoints(series, opts, config, context) { + let process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1; + + let xAxisData = opts.chartData.xAxisData, + xAxisPoints = xAxisData.xAxisPoints, + eachSpacing = xAxisData.eachSpacing; + + let endY = opts.height - opts.area[2]; + let calPoints = []; + + var columnIndex = 0; + var columnLength = 0; + series.forEach(function(eachSeries, seriesIndex) { + if (eachSeries.type == 'column') { + columnLength += 1; + } + }); + context.save(); + let leftNum=-2; + let rightNum=xAxisPoints.length+2; + let leftSpace=0; + let rightSpace=opts.width+eachSpacing; + if (opts._scrollDistance_ && opts._scrollDistance_ !== 0 && opts.enableScroll === true) { + context.translate(opts._scrollDistance_, 0); + leftNum=Math.floor(-opts._scrollDistance_/eachSpacing)-2; + rightNum=leftNum+opts.xAxis.itemCount+4; + leftSpace=-opts._scrollDistance_-eachSpacing+opts.area[3]; + rightSpace=leftSpace+(opts.xAxis.itemCount+4)*eachSpacing; + } + + series.forEach(function(eachSeries, seriesIndex) { + let ranges,minRange,maxRange; + + ranges = [].concat(opts.chartData.yAxisData.ranges[eachSeries.index]); + minRange = ranges.pop(); + maxRange = ranges.shift(); + + var data = eachSeries.data; + var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process); + calPoints.push(points); + + // 绘制柱状数据图 + if (eachSeries.type == 'column') { + points = fixColumeData(points, eachSpacing, columnLength, columnIndex, config, opts); + for(let i=0;i<points.length;i++){ + let item=points[i]; + if (item !== null && i>leftNum && i<rightNum) { + context.beginPath(); + context.setStrokeStyle(item.color || eachSeries.color); + context.setLineWidth(1) + context.setFillStyle(item.color || eachSeries.color); + var startX = item.x - item.width / 2; + var height = opts.height - item.y - opts.area[2]; + context.moveTo(startX, item.y); + context.moveTo(startX, item.y); + context.lineTo(startX+item.width-2,item.y); + context.lineTo(startX+item.width-2,opts.height - opts.area[2]); + context.lineTo(startX,opts.height - opts.area[2]); + context.lineTo(startX,item.y); + context.closePath(); + context.stroke(); + context.fill(); + context.closePath(); + context.fill(); + } + } + columnIndex += 1; + } + + //绘制区域图数据 + + if (eachSeries.type == 'area') { + let splitPointList = splitPoints(points); + for (let i = 0; i < splitPointList.length; i++) { + let points = splitPointList[i]; + // 绘制区域数据 + context.beginPath(); + context.setStrokeStyle(eachSeries.color); + context.setFillStyle(hexToRgb(eachSeries.color, 0.2)); + context.setLineWidth(2 * opts.pixelRatio); + if (points.length > 1) { + var firstPoint = points[0]; + let lastPoint = points[points.length - 1]; + context.moveTo(firstPoint.x, firstPoint.y); + let startPoint=0; + if (eachSeries.style === 'curve') { + for(let j=0;j<points.length;j++){ + let item=points[j]; + if(startPoint==0 && item.x > leftSpace){ + context.moveTo(item.x, item.y); + startPoint=1; + } + if (j > 0 && item.x > leftSpace && item.x < rightSpace) { + var ctrlPoint = createCurveControlPoints(points, j - 1); + context.bezierCurveTo(ctrlPoint.ctrA.x, ctrlPoint.ctrA.y, ctrlPoint.ctrB.x, ctrlPoint.ctrB.y, item.x, item.y); + } + }; + } else { + for(let j=0;j<points.length;j++){ + let item=points[j]; + if(startPoint==0 && item.x > leftSpace){ + context.moveTo(item.x, item.y); + startPoint=1; + } + if (j > 0 && item.x > leftSpace && item.x < rightSpace) { + context.lineTo(item.x, item.y); + } + }; + } + context.lineTo(lastPoint.x, endY); + context.lineTo(firstPoint.x, endY); + context.lineTo(firstPoint.x, firstPoint.y); + } else { + let item = points[0]; + context.moveTo(item.x - eachSpacing / 2, item.y); + context.lineTo(item.x + eachSpacing / 2, item.y); + context.lineTo(item.x + eachSpacing / 2, endY); + context.lineTo(item.x - eachSpacing / 2, endY); + context.moveTo(item.x - eachSpacing / 2, item.y); + } + context.closePath(); + context.fill(); + } + } + + // 绘制折线数据图 + if (eachSeries.type == 'line') { + var splitPointList = splitPoints(points); + splitPointList.forEach(function(points, index) { + if (eachSeries.lineType == 'dash') { + let dashLength = eachSeries.dashLength?eachSeries.dashLength:8; + dashLength *= opts.pixelRatio; + context.setLineDash([dashLength, dashLength]); + } + context.beginPath(); + context.setStrokeStyle(eachSeries.color); + context.setLineWidth(2 * opts.pixelRatio); + if (points.length === 1) { + context.moveTo(points[0].x, points[0].y); + context.arc(points[0].x, points[0].y, 1, 0, 2 * Math.PI); + } else { + context.moveTo(points[0].x, points[0].y); + let startPoint=0; + if (eachSeries.style == 'curve') { + for(let j=0;j<points.length;j++){ + let item=points[j]; + if(startPoint==0 && item.x > leftSpace){ + context.moveTo(item.x, item.y); + startPoint=1; + } + if (j > 0 && item.x > leftSpace && item.x < rightSpace) { + var ctrlPoint = createCurveControlPoints(points, j - 1); + context.bezierCurveTo(ctrlPoint.ctrA.x, ctrlPoint.ctrA.y, ctrlPoint.ctrB.x, ctrlPoint.ctrB.y,item.x,item.y); + } + } + } else { + for(let j=0;j<points.length;j++){ + let item=points[j]; + if(startPoint==0 && item.x > leftSpace){ + context.moveTo(item.x, item.y); + startPoint=1; + } + if (j > 0 && item.x > leftSpace && item.x < rightSpace) { + context.lineTo(item.x, item.y); + } + } + } + context.moveTo(points[0].x, points[0].y); + } + context.stroke(); + context.setLineDash([]); + }); + } + + // 绘制点数据图 + if (eachSeries.type == 'point') { + eachSeries.addPoint = true; + } + + if (eachSeries.addPoint == true && eachSeries.type !== 'column' ) { + drawPointShape(points, eachSeries.color, eachSeries.pointShape, context, opts); + } + }); + if (opts.dataLabel !== false && process === 1) { + var columnIndex = 0; + series.forEach(function(eachSeries, seriesIndex) { + let ranges,minRange,maxRange; + + ranges = [].concat(opts.chartData.yAxisData.ranges[eachSeries.index]); + minRange = ranges.pop(); + maxRange = ranges.shift(); + + var data = eachSeries.data; + var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process); + if (eachSeries.type !== 'column') { + drawPointText(points, eachSeries, config, context); + } else { + points = fixColumeData(points, eachSpacing, columnLength, columnIndex, config, opts); + drawPointText(points, eachSeries, config, context); + columnIndex += 1; + } + + }); + } + + context.restore(); + + return { + xAxisPoints: xAxisPoints, + calPoints: calPoints, + eachSpacing: eachSpacing, + } +} + +function drawToolTipBridge(opts, config, context, process, eachSpacing, xAxisPoints) { + var toolTipOption = opts.extra.tooltip || {}; + if (toolTipOption.horizentalLine && opts.tooltip && process === 1 && (opts.type == 'line' || opts.type == 'area' || opts.type == 'column' || opts.type == 'candle' || opts.type == 'mix')) { + drawToolTipHorizentalLine(opts, config, context, eachSpacing, xAxisPoints) + } + context.save(); + if (opts._scrollDistance_ && opts._scrollDistance_ !== 0 && opts.enableScroll === true) { + context.translate(opts._scrollDistance_, 0); + } + if (opts.tooltip && opts.tooltip.textList && opts.tooltip.textList.length && process === 1) { + drawToolTip(opts.tooltip.textList, opts.tooltip.offset, opts, config, context, eachSpacing, xAxisPoints); + } + context.restore(); + +} + +function drawXAxis(categories, opts, config, context) { + + let xAxisData = opts.chartData.xAxisData, + xAxisPoints = xAxisData.xAxisPoints, + startX = xAxisData.startX, + endX = xAxisData.endX, + eachSpacing = xAxisData.eachSpacing; + var boundaryGap='center'; + if (opts.type == 'line'||opts.type == 'area'){ + boundaryGap=opts.xAxis.boundaryGap; + } + var startY = opts.height - opts.area[2]; + var endY = opts.area[0]; + + //绘制滚动条 + if (opts.enableScroll && opts.xAxis.scrollShow) { + var scrollY = opts.height - opts.area[2] + config.xAxisHeight; + var scrollScreenWidth = endX - startX; + var scrollTotalWidth = eachSpacing * (xAxisPoints.length - 1); + var scrollWidth = scrollScreenWidth * scrollScreenWidth / scrollTotalWidth; + var scrollLeft = 0; + if (opts._scrollDistance_) { + scrollLeft = -opts._scrollDistance_ * (scrollScreenWidth) / scrollTotalWidth; + } + context.beginPath(); + context.setLineCap('round'); + context.setLineWidth(6 * opts.pixelRatio); + context.setStrokeStyle(opts.xAxis.scrollBackgroundColor || "#EFEBEF"); + context.moveTo(startX, scrollY); + context.lineTo(endX, scrollY); + context.stroke(); + context.closePath(); + context.beginPath(); + context.setLineCap('round'); + context.setLineWidth(6 * opts.pixelRatio); + context.setStrokeStyle(opts.xAxis.scrollColor || "#A6A6A6"); + context.moveTo(startX + scrollLeft, scrollY); + context.lineTo(startX + scrollLeft + scrollWidth, scrollY); + context.stroke(); + context.closePath(); + context.setLineCap('butt'); + } + + context.save(); + + if (opts._scrollDistance_ && opts._scrollDistance_ !== 0) { + context.translate(opts._scrollDistance_, 0); + } + + //绘制X轴刻度线 + if (opts.xAxis.calibration === true) { + context.setStrokeStyle(opts.xAxis.gridColor || "#cccccc"); + context.setLineCap('butt'); + context.setLineWidth(1 * opts.pixelRatio); + xAxisPoints.forEach(function(item, index) { + if (index > 0) { + context.beginPath(); + context.moveTo(item - eachSpacing / 2, startY); + context.lineTo(item - eachSpacing / 2, startY + 3 * opts.pixelRatio); + context.closePath(); + context.stroke(); + } + }); + } + //绘制X轴网格 + if (opts.xAxis.disableGrid !== true) { + context.setStrokeStyle(opts.xAxis.gridColor || "#cccccc"); + context.setLineCap('butt'); + context.setLineWidth(1 * opts.pixelRatio); + if (opts.xAxis.gridType == 'dash') { + context.setLineDash([opts.xAxis.dashLength, opts.xAxis.dashLength]); + } + opts.xAxis.gridEval = opts.xAxis.gridEval || 1; + xAxisPoints.forEach(function(item, index) { + if (index % opts.xAxis.gridEval == 0) { + context.beginPath(); + context.moveTo(item, startY); + context.lineTo(item, endY); + context.stroke(); + } + }); + context.setLineDash([]); + } + + + //绘制X轴文案 + if (opts.xAxis.disabled !== true) { + // 对X轴列表做抽稀处理 + //默认全部显示X轴标签 + let maxXAxisListLength = categories.length; + //如果设置了X轴单屏数量 + if (opts.xAxis.labelCount) { + //如果设置X轴密度 + if (opts.xAxis.itemCount) { + maxXAxisListLength = Math.ceil(categories.length / opts.xAxis.itemCount * opts.xAxis.labelCount); + } else { + maxXAxisListLength = opts.xAxis.labelCount; + } + maxXAxisListLength -= 1; + } + + let ratio = Math.ceil(categories.length / maxXAxisListLength); + + let newCategories = []; + let cgLength = categories.length; + for (let i = 0; i < cgLength; i++) { + if (i % ratio !== 0) { + newCategories.push(""); + } else { + newCategories.push(categories[i]); + } + } + newCategories[cgLength - 1] = categories[cgLength - 1]; + + var xAxisFontSize = opts.xAxis.fontSize || config.fontSize; + if (config._xAxisTextAngle_ === 0) { + newCategories.forEach(function(item, index) { + var offset = - measureText(String(item), xAxisFontSize) / 2; + if(boundaryGap == 'center'){ + offset+=eachSpacing / 2; + } + var scrollHeight=0; + if(opts.xAxis.scrollShow){ + scrollHeight=6*opts.pixelRatio; + } + context.beginPath(); + context.setFontSize(xAxisFontSize); + context.setFillStyle(opts.xAxis.fontColor || '#666666'); + context.fillText(String(item), xAxisPoints[index] + offset, startY + xAxisFontSize + (config.xAxisHeight - scrollHeight - xAxisFontSize) / 2); + context.closePath(); + context.stroke(); + }); + + } else { + newCategories.forEach(function(item, index) { + context.save(); + context.beginPath(); + context.setFontSize(xAxisFontSize); + context.setFillStyle(opts.xAxis.fontColor || '#666666'); + var textWidth = measureText(String(item),xAxisFontSize); + var offset = - textWidth; + if(boundaryGap == 'center'){ + offset+=eachSpacing / 2; + } + var _calRotateTranslate = calRotateTranslate(xAxisPoints[index] + eachSpacing / 2, startY + xAxisFontSize / 2 + 5, opts.height), + transX = _calRotateTranslate.transX, + transY = _calRotateTranslate.transY; + + context.rotate(-1 * config._xAxisTextAngle_); + context.translate(transX, transY); + context.fillText(String(item), xAxisPoints[index] + offset, startY + xAxisFontSize + 5); + context.closePath(); + context.stroke(); + context.restore(); + }); + } + } + context.restore(); + + //绘制X轴轴线 + if(opts.xAxis.axisLine){ + context.beginPath(); + context.setStrokeStyle(opts.xAxis.axisLineColor); + context.setLineWidth(1 * opts.pixelRatio); + context.moveTo(startX,opts.height-opts.area[2]); + context.lineTo(endX,opts.height-opts.area[2]); + context.stroke(); + } +} + +function drawYAxisGrid(categories, opts, config, context) { + if (opts.yAxis.disableGrid === true) { + return; + } + let spacingValid = opts.height - opts.area[0] - opts.area[2]; + let eachSpacing = spacingValid / opts.yAxis.splitNumber; + let startX = opts.area[3]; + let xAxisPoints = opts.chartData.xAxisData.xAxisPoints, + xAxiseachSpacing = opts.chartData.xAxisData.eachSpacing; + let TotalWidth = xAxiseachSpacing * (xAxisPoints.length - 1); + let endX = startX + TotalWidth; + + let points = []; + for (let i = 0; i < opts.yAxis.splitNumber + 1; i++) { + points.push(opts.height - opts.area[2] - eachSpacing * i); + } + + context.save(); + if (opts._scrollDistance_ && opts._scrollDistance_ !== 0) { + context.translate(opts._scrollDistance_, 0); + } + + if (opts.yAxis.gridType == 'dash') { + context.setLineDash([opts.yAxis.dashLength, opts.yAxis.dashLength]); + } + context.setStrokeStyle(opts.yAxis.gridColor); + context.setLineWidth(1 * opts.pixelRatio); + points.forEach(function(item, index) { + context.beginPath(); + context.moveTo(startX, item); + context.lineTo(endX, item); + context.stroke(); + }); + context.setLineDash([]); + + context.restore(); +} + +function drawYAxis(series, opts, config, context) { + if (opts.yAxis.disabled === true) { + return; + } + var spacingValid = opts.height - opts.area[0] - opts.area[2]; + var eachSpacing = spacingValid / opts.yAxis.splitNumber; + var startX = opts.area[3]; + var endX = opts.width - opts.area[1]; + var endY = opts.height - opts.area[2]; + var fillEndY = endY + config.xAxisHeight; + if (opts.xAxis.scrollShow) { + fillEndY -= 3 * opts.pixelRatio; + } + if (opts.xAxis.rotateLabel){ + fillEndY = opts.height - opts.area[2]+3; + } + // set YAxis background + context.beginPath(); + context.setFillStyle(opts.background || '#ffffff'); + if (opts._scrollDistance_ < 0) { + context.fillRect(0, 0, startX, fillEndY); + } + if(opts.enableScroll == true){ + context.fillRect(endX, 0, opts.width, fillEndY); + } + context.closePath(); + context.stroke(); + + var points = []; + for (let i = 0; i <= opts.yAxis.splitNumber; i++) { + points.push(opts.area[0] + eachSpacing * i); + } + + let tStartLeft=opts.area[3]; + let tStartRight=opts.width-opts.area[1]; + + for (let i = 0; i < opts.yAxis.data.length; i++) { + let yData = opts.yAxis.data[i]; + if(yData.disabled !== true){ + let rangesFormat = opts.chartData.yAxisData.rangesFormat[i]; + let yAxisFontSize = yData.fontSize || config.fontSize; + let yAxisWidth = opts.chartData.yAxisData.yAxisWidth[i]; + //画Y轴刻度及文案 + rangesFormat.forEach(function(item, index) { + var pos = points[index] ? points[index] : endY; + context.beginPath(); + context.setFontSize(yAxisFontSize); + context.setLineWidth(1*opts.pixelRatio); + context.setStrokeStyle(yData.axisLineColor||'#cccccc'); + context.setFillStyle(yData.fontColor|| '#666666'); + if(yAxisWidth.position=='left'){ + context.fillText(String(item), tStartLeft - yAxisWidth.width , pos + yAxisFontSize / 2); + //画刻度线 + if(yData.calibration==true){ + context.moveTo(tStartLeft,pos); + context.lineTo(tStartLeft - 3*opts.pixelRatio,pos); + } + }else{ + context.fillText(String(item), tStartRight + 4*opts.pixelRatio, pos + yAxisFontSize / 2); + //画刻度线 + if(yData.calibration==true){ + context.moveTo(tStartRight,pos); + context.lineTo(tStartRight + 3*opts.pixelRatio,pos); + } + } + context.closePath(); + context.stroke(); + }); + //画Y轴轴线 + if (yData.axisLine!==false) { + context.beginPath(); + context.setStrokeStyle(yData.axisLineColor||'#cccccc'); + context.setLineWidth(1 * opts.pixelRatio); + if(yAxisWidth.position=='left'){ + context.moveTo(tStartLeft,opts.height-opts.area[2]); + context.lineTo(tStartLeft,opts.area[0]); + }else{ + context.moveTo(tStartRight,opts.height-opts.area[2]); + context.lineTo(tStartRight,opts.area[0]); + } + context.stroke(); + } + + //画Y轴标题 + if (opts.yAxis.showTitle) { + + let titleFontSize = yData.titleFontSize || config.fontSize; + let title = yData.title; + context.beginPath(); + context.setFontSize(titleFontSize); + context.setFillStyle(yData.titleFontColor || '#666666'); + if(yAxisWidth.position=='left'){ + context.fillText(title, tStartLeft - measureText(title,titleFontSize)/2, opts.area[0]-10*opts.pixelRatio); + }else{ + context.fillText(title,tStartRight - measureText(title,titleFontSize)/2, opts.area[0]-10*opts.pixelRatio); + } + context.closePath(); + context.stroke(); + } + if(yAxisWidth.position=='left'){ + tStartLeft -=(yAxisWidth.width + opts.yAxis.padding); + }else{ + tStartRight +=yAxisWidth.width+ opts.yAxis.padding; + } + } + } +} + +function drawLegend(series, opts, config, context, chartData) { + if (opts.legend.show === false) { + return; + } + let legendData = chartData.legendData; + let legendList = legendData.points; + let legendArea = legendData.area; + let padding = opts.legend.padding; + let fontSize = opts.legend.fontSize; + let shapeWidth = 15 * opts.pixelRatio; + let shapeRight = 5 * opts.pixelRatio; + let itemGap = opts.legend.itemGap; + let lineHeight = Math.max(opts.legend.lineHeight * opts.pixelRatio, fontSize); + + //画背景及边框 + context.beginPath(); + context.setLineWidth(opts.legend.borderWidth); + context.setStrokeStyle(opts.legend.borderColor); + context.setFillStyle(opts.legend.backgroundColor); + context.moveTo(legendArea.start.x, legendArea.start.y); + context.rect(legendArea.start.x, legendArea.start.y, legendArea.width, legendArea.height); + context.closePath(); + context.fill(); + context.stroke(); + + legendList.forEach(function(itemList, listIndex) { + let width = 0; + let height = 0; + width = legendData.widthArr[listIndex]; + height = legendData.heightArr[listIndex]; + let startX = 0; + let startY = 0; + if (opts.legend.position == 'top' || opts.legend.position == 'bottom') { + startX = legendArea.start.x + (legendArea.width - width) / 2; + startY = legendArea.start.y + padding + listIndex * lineHeight; + } else { + if (listIndex == 0) { + width = 0; + } else { + width = legendData.widthArr[listIndex - 1]; + } + startX = legendArea.start.x + padding + width; + startY = legendArea.start.y + padding + (legendArea.height - height) / 2; + } + + context.setFontSize(config.fontSize); + for (let i = 0; i < itemList.length; i++) { + let item = itemList[i]; + item.area = [0, 0, 0, 0]; + item.area[0] = startX; + item.area[1] = startY; + item.area[3] = startY + lineHeight; + context.beginPath(); + context.setLineWidth(1 * opts.pixelRatio); + context.setStrokeStyle(item.show ? item.color : opts.legend.hiddenColor); + context.setFillStyle(item.show ? item.color : opts.legend.hiddenColor); + switch (item.legendShape) { + case 'line': + context.moveTo(startX, startY + 0.5 * lineHeight - 2 * opts.pixelRatio); + context.fillRect(startX, startY + 0.5 * lineHeight - 2 * opts.pixelRatio, 15 * opts.pixelRatio, 4 * opts.pixelRatio); + break; + case 'triangle': + context.moveTo(startX + 7.5 * opts.pixelRatio, startY + 0.5 * lineHeight - 5 * opts.pixelRatio); + context.lineTo(startX + 2.5 * opts.pixelRatio, startY + 0.5 * lineHeight + 5 * opts.pixelRatio); + context.lineTo(startX + 12.5 * opts.pixelRatio, startY + 0.5 * lineHeight + 5 * opts.pixelRatio); + context.lineTo(startX + 7.5 * opts.pixelRatio, startY + 0.5 * lineHeight - 5 * opts.pixelRatio); + break; + case 'diamond': + context.moveTo(startX + 7.5 * opts.pixelRatio, startY + 0.5 * lineHeight - 5 * opts.pixelRatio); + context.lineTo(startX + 2.5 * opts.pixelRatio, startY + 0.5 * lineHeight); + context.lineTo(startX + 7.5 * opts.pixelRatio, startY + 0.5 * lineHeight + 5 * opts.pixelRatio); + context.lineTo(startX + 12.5 * opts.pixelRatio, startY + 0.5 * lineHeight); + context.lineTo(startX + 7.5 * opts.pixelRatio, startY + 0.5 * lineHeight - 5 * opts.pixelRatio); + break; + case 'circle': + context.moveTo(startX + 7.5 * opts.pixelRatio, startY + 0.5 * lineHeight); + context.arc(startX + 7.5 * opts.pixelRatio, startY + 0.5 * lineHeight, 5 * opts.pixelRatio, 0, 2 * Math.PI); + break; + case 'rect': + context.moveTo(startX, startY + 0.5 * lineHeight - 5 * opts.pixelRatio); + context.fillRect(startX, startY + 0.5 * lineHeight - 5 * opts.pixelRatio, 15 * opts.pixelRatio, 10 * opts.pixelRatio); + break; + default: + context.moveTo(startX, startY + 0.5 * lineHeight - 5 * opts.pixelRatio); + context.fillRect(startX, startY + 0.5 * lineHeight - 5 * opts.pixelRatio, 15 * opts.pixelRatio, 10 * opts.pixelRatio); + } + context.closePath(); + context.fill(); + context.stroke(); + + startX += shapeWidth + shapeRight; + let fontTrans = 0.5 * lineHeight + 0.5 * fontSize - 2; + context.beginPath(); + context.setFontSize(fontSize); + context.setFillStyle(item.show ? opts.legend.fontColor : opts.legend.hiddenColor); + context.fillText(item.name, startX, startY + fontTrans); + context.closePath(); + context.stroke(); + if (opts.legend.position == 'top' || opts.legend.position == 'bottom') { + startX += measureText(item.name, fontSize) + itemGap; + item.area[2] = startX; + } else { + item.area[2] = startX + measureText(item.name, fontSize) + itemGap;; + startX -= shapeWidth + shapeRight; + startY += lineHeight; + } + } + }); +} + +function drawPieDataPoints(series, opts, config, context) { + var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1; + var pieOption = assign({}, { + activeOpacity: 0.5, + activeRadius: 10 * opts.pixelRatio, + offsetAngle: 0, + labelWidth: 15 * opts.pixelRatio, + ringWidth: 0, + border:false, + borderWidth:2, + borderColor:'#FFFFFF' + }, opts.extra.pie); + var centerPosition = { + x: opts.area[3] + (opts.width - opts.area[1] - opts.area[3]) / 2, + y: opts.area[0] + (opts.height - opts.area[0] - opts.area[2]) / 2 + }; + if (config.pieChartLinePadding == 0) { + config.pieChartLinePadding = pieOption.activeRadius; + } + + var radius = Math.min((opts.width - opts.area[1] - opts.area[3]) / 2 - config.pieChartLinePadding - config.pieChartTextPadding - config._pieTextMaxLength_, (opts.height - opts.area[0] - opts.area[2]) / 2 - config.pieChartLinePadding - config.pieChartTextPadding); + + series = getPieDataPoints(series, radius, process); + + var activeRadius = pieOption.activeRadius; + + series = series.map(function(eachSeries) { + eachSeries._start_ += (pieOption.offsetAngle) * Math.PI / 180; + return eachSeries; + }); + series.forEach(function(eachSeries, seriesIndex) { + if (opts.tooltip) { + if (opts.tooltip.index == seriesIndex) { + context.beginPath(); + context.setFillStyle(hexToRgb(eachSeries.color, opts.extra.pie.activeOpacity || 0.5)); + context.moveTo(centerPosition.x, centerPosition.y); + context.arc(centerPosition.x, centerPosition.y, eachSeries._radius_ + activeRadius, eachSeries._start_, + eachSeries._start_ + 2 * + eachSeries._proportion_ * Math.PI); + context.closePath(); + context.fill(); + } + } + context.beginPath(); + context.setLineWidth(pieOption.borderWidth * opts.pixelRatio); + context.lineJoin = "round"; + context.setStrokeStyle(pieOption.borderColor); + context.setFillStyle(eachSeries.color); + context.moveTo(centerPosition.x, centerPosition.y); + context.arc(centerPosition.x, centerPosition.y, eachSeries._radius_, eachSeries._start_, eachSeries._start_ + 2 * eachSeries._proportion_ * Math.PI); + context.closePath(); + context.fill(); + if (pieOption.border == true) { + context.stroke(); + } + }); + + if (opts.type === 'ring') { + var innerPieWidth = radius * 0.6; + if (typeof opts.extra.pie.ringWidth === 'number' && opts.extra.pie.ringWidth > 0) { + innerPieWidth = Math.max(0, radius - opts.extra.pie.ringWidth); + } + context.beginPath(); + context.setFillStyle(opts.background || '#ffffff'); + context.moveTo(centerPosition.x, centerPosition.y); + context.arc(centerPosition.x, centerPosition.y, innerPieWidth, 0, 2 * Math.PI); + context.closePath(); + context.fill(); + } + + if (opts.dataLabel !== false && process === 1) { + var valid = false; + for (var i = 0, len = series.length; i < len; i++) { + if (series[i].data > 0) { + valid = true; + break; + } + } + + if (valid) { + drawPieText(series, opts, config, context, radius, centerPosition); + } + } + + if (process === 1 && opts.type === 'ring') { + drawRingTitle(opts, config, context, centerPosition); + } + + return { + center: centerPosition, + radius: radius, + series: series + }; +} + +function drawRoseDataPoints(series, opts, config, context) { + var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1; + var roseOption = assign({}, { + type: 'area', + activeOpacity: 0.5, + activeRadius: 10 * opts.pixelRatio, + offsetAngle: 0, + labelWidth: 15 * opts.pixelRatio, + border:false, + borderWidth:2, + borderColor:'#FFFFFF' + }, opts.extra.rose); + if (config.pieChartLinePadding == 0) { + config.pieChartLinePadding = roseOption.activeRadius; + } + var centerPosition = { + x: opts.area[3] + (opts.width - opts.area[1] - opts.area[3]) / 2, + y: opts.area[0] + (opts.height - opts.area[0] - opts.area[2]) / 2 + }; + var radius = Math.min((opts.width - opts.area[1] - opts.area[3]) / 2 - config.pieChartLinePadding - config.pieChartTextPadding - config._pieTextMaxLength_, (opts.height - opts.area[0] - opts.area[2]) / 2 - config.pieChartLinePadding - config.pieChartTextPadding); + var minRadius = roseOption.minRadius || radius * 0.5; + + series = getRoseDataPoints(series, roseOption.type, minRadius, radius, process); + + var activeRadius = roseOption.activeRadius; + + series = series.map(function(eachSeries) { + eachSeries._start_ += (roseOption.offsetAngle || 0) * Math.PI / 180; + return eachSeries; + }); + + series.forEach(function(eachSeries, seriesIndex) { + if (opts.tooltip) { + if (opts.tooltip.index == seriesIndex) { + context.beginPath(); + context.setFillStyle(hexToRgb(eachSeries.color, roseOption.activeOpacity || 0.5)); + context.moveTo(centerPosition.x, centerPosition.y); + context.arc(centerPosition.x, centerPosition.y, activeRadius + eachSeries._radius_, eachSeries._start_, + eachSeries._start_ + 2 * eachSeries._rose_proportion_ * Math.PI); + context.closePath(); + context.fill(); + } + } + context.beginPath(); + context.setLineWidth(roseOption.borderWidth * opts.pixelRatio); + context.lineJoin = "round"; + context.setStrokeStyle(roseOption.borderColor); + context.setFillStyle(eachSeries.color); + context.moveTo(centerPosition.x, centerPosition.y); + context.arc(centerPosition.x, centerPosition.y, eachSeries._radius_, eachSeries._start_, eachSeries._start_ + 2 * + eachSeries._rose_proportion_ * Math.PI); + context.closePath(); + context.fill(); + if (roseOption.border == true) { + context.stroke(); + } + }); + + if (opts.dataLabel !== false && process === 1) { + var valid = false; + for (var i = 0, len = series.length; i < len; i++) { + if (series[i].data > 0) { + valid = true; + break; + } + } + + if (valid) { + drawPieText(series, opts, config, context, radius, centerPosition); + } + } + + return { + center: centerPosition, + radius: radius, + series: series + }; +} + +function drawArcbarDataPoints(series, opts, config, context) { + var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1; + var arcbarOption = assign({}, { + startAngle: 0.75, + endAngle: 0.25, + type: 'default', + width: 12 * opts.pixelRatio, + gap:2 * opts.pixelRatio + }, opts.extra.arcbar); + + series = getArcbarDataPoints(series, arcbarOption, process); + + var centerPosition; + if(arcbarOption.center){ + centerPosition=arcbarOption.center; + }else{ + centerPosition= { + x: opts.width / 2, + y: opts.height / 2 + }; + } + + var radius; + if(arcbarOption.radius){ + radius=arcbarOption.radius; + }else{ + radius = Math.min(centerPosition.x, centerPosition.y); + radius -= 5 * opts.pixelRatio; + radius -= arcbarOption.width / 2; + } + + for (let i = 0; i < series.length; i++) { + let eachSeries = series[i]; + //背景颜色 + context.setLineWidth(arcbarOption.width); + context.setStrokeStyle(arcbarOption.backgroundColor || '#E9E9E9'); + context.setLineCap('round'); + context.beginPath(); + if (arcbarOption.type == 'default') { + context.arc(centerPosition.x, centerPosition.y, radius-(arcbarOption.width+arcbarOption.gap)*i, arcbarOption.startAngle * Math.PI, arcbarOption.endAngle * Math.PI, false); + } else { + context.arc(centerPosition.x, centerPosition.y, radius-(arcbarOption.width+arcbarOption.gap)*i, 0, 2 * Math.PI, false); + } + context.stroke(); + //进度条 + context.setLineWidth(arcbarOption.width); + context.setStrokeStyle(eachSeries.color); + context.setLineCap('round'); + context.beginPath(); + context.arc(centerPosition.x, centerPosition.y, radius-(arcbarOption.width+arcbarOption.gap)*i, arcbarOption.startAngle * Math.PI, eachSeries._proportion_ * Math.PI, false); + context.stroke(); + } + + drawRingTitle(opts, config, context, centerPosition); + + return { + center: centerPosition, + radius: radius, + series: series + }; +} + +function drawGaugeDataPoints(categories, series, opts, config, context) { + var process = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 1; + var gaugeOption = assign({}, { + type:'default', + startAngle: 0.75, + endAngle: 0.25, + width: 15, + splitLine: { + fixRadius: 0, + splitNumber: 10, + width: 15, + color: '#FFFFFF', + childNumber: 5, + childWidth: 5 + }, + pointer: { + width: 15, + color: 'auto' + } + }, opts.extra.gauge); + + if (gaugeOption.oldAngle == undefined) { + gaugeOption.oldAngle = gaugeOption.startAngle; + } + if (gaugeOption.oldData == undefined) { + gaugeOption.oldData = 0; + } + categories = getGaugeAxisPoints(categories, gaugeOption.startAngle, gaugeOption.endAngle); + + var centerPosition = { + x: opts.width / 2, + y: opts.height / 2 + }; + var radius = Math.min(centerPosition.x, centerPosition.y); + radius -= 5 * opts.pixelRatio; + radius -= gaugeOption.width / 2; + var innerRadius = radius - gaugeOption.width; + var totalAngle=0; + + //判断仪表盘的样式:default百度样式,progress新样式 + if(gaugeOption.type == 'progress'){ + + //## 第一步画中心圆形背景和进度条背景 + //中心圆形背景 + var pieRadius = radius - gaugeOption.width*3; + context.beginPath(); + let gradient = context.createLinearGradient(centerPosition.x, centerPosition.y-pieRadius, centerPosition.x , centerPosition.y+pieRadius); + //配置渐变填充(起点:中心点向上减半径;结束点中心点向下加半径) + gradient.addColorStop('0', hexToRgb(series[0].color, 0.3)); + gradient.addColorStop('1.0',hexToRgb("#FFFFFF", 0.1)); + context.setFillStyle(gradient); + context.arc(centerPosition.x, centerPosition.y, pieRadius, 0, 2*Math.PI, false); + context.fill(); + //画进度条背景 + context.setLineWidth(gaugeOption.width); + context.setStrokeStyle(hexToRgb(series[0].color, 0.3)); + context.setLineCap('round'); + context.beginPath(); + context.arc(centerPosition.x, centerPosition.y, innerRadius , gaugeOption.startAngle * Math.PI, gaugeOption.endAngle *Math.PI, false); + context.stroke(); + + //## 第二步画刻度线 + totalAngle = gaugeOption.startAngle - gaugeOption.endAngle + 1; + let splitAngle = totalAngle / gaugeOption.splitLine.splitNumber; + let childAngle = totalAngle / gaugeOption.splitLine.splitNumber / gaugeOption.splitLine.childNumber; + let startX = -radius - gaugeOption.width * 0.5 - gaugeOption.splitLine.fixRadius; + let endX = -radius - gaugeOption.width - gaugeOption.splitLine.fixRadius + gaugeOption.splitLine.width; + context.save(); + context.translate(centerPosition.x, centerPosition.y); + context.rotate((gaugeOption.startAngle - 1) * Math.PI); + let len = gaugeOption.splitLine.splitNumber * gaugeOption.splitLine.childNumber + 1; + let proc = series[0].data * process; + for (let i = 0; i < len; i++) { + context.beginPath(); + //刻度线随进度变色 + if(proc>(i/len)){ + context.setStrokeStyle(hexToRgb(series[0].color, 1)); + }else{ + context.setStrokeStyle(hexToRgb(series[0].color, 0.3)); + } + context.setLineWidth(3 * opts.pixelRatio); + context.moveTo(startX, 0); + context.lineTo(endX, 0); + context.stroke(); + context.rotate(childAngle * Math.PI); + } + context.restore(); + + //## 第三步画进度条 + series = getArcbarDataPoints(series, gaugeOption, process); + context.setLineWidth(gaugeOption.width); + context.setStrokeStyle(series[0].color); + context.setLineCap('round'); + context.beginPath(); + context.arc(centerPosition.x, centerPosition.y, innerRadius , gaugeOption.startAngle * Math.PI, series[0]._proportion_ *Math.PI, false); + context.stroke(); + + //## 第四步画指针 + let pointerRadius = radius - gaugeOption.width*2.5; + context.save(); + context.translate(centerPosition.x, centerPosition.y); + context.rotate((series[0]._proportion_ - 1) * Math.PI); + context.beginPath(); + context.setLineWidth(gaugeOption.width/3); + let gradient3 = context.createLinearGradient(0, -pointerRadius*0.6, 0 , pointerRadius*0.6); + gradient3.addColorStop('0', hexToRgb('#FFFFFF', 0)); + gradient3.addColorStop('0.5', hexToRgb(series[0].color, 1)); + gradient3.addColorStop('1.0', hexToRgb('#FFFFFF', 0)); + context.setStrokeStyle(gradient3); + context.arc(0, 0, pointerRadius , 0.85* Math.PI, 1.15 * Math.PI, false); + context.stroke(); + context.beginPath(); + context.setLineWidth(1); + context.setStrokeStyle(series[0].color); + context.setFillStyle(series[0].color); + context.moveTo(-pointerRadius-gaugeOption.width/3/2,-4); + context.lineTo(-pointerRadius-gaugeOption.width/3/2-4,0); + context.lineTo(-pointerRadius-gaugeOption.width/3/2,4); + context.lineTo(-pointerRadius-gaugeOption.width/3/2,-4); + context.stroke(); + context.fill(); + context.restore(); + + //default百度样式 + }else{ + //画背景 + context.setLineWidth(gaugeOption.width); + context.setLineCap('butt'); + for (let i = 0; i < categories.length; i++) { + let eachCategories = categories[i]; + context.beginPath(); + context.setStrokeStyle(eachCategories.color); + context.arc(centerPosition.x, centerPosition.y, radius, eachCategories._startAngle_ * Math.PI, eachCategories._endAngle_ *Math.PI, false); + context.stroke(); + } + context.save(); + + //画刻度线 + totalAngle = gaugeOption.startAngle - gaugeOption.endAngle + 1; + let splitAngle = totalAngle / gaugeOption.splitLine.splitNumber; + let childAngle = totalAngle / gaugeOption.splitLine.splitNumber / gaugeOption.splitLine.childNumber; + let startX = -radius - gaugeOption.width * 0.5 - gaugeOption.splitLine.fixRadius; + let endX = -radius - gaugeOption.width * 0.5 - gaugeOption.splitLine.fixRadius + gaugeOption.splitLine.width; + let childendX = -radius - gaugeOption.width * 0.5 - gaugeOption.splitLine.fixRadius + gaugeOption.splitLine.childWidth; + + context.translate(centerPosition.x, centerPosition.y); + context.rotate((gaugeOption.startAngle - 1) * Math.PI); + + for (let i = 0; i < gaugeOption.splitLine.splitNumber + 1; i++) { + context.beginPath(); + context.setStrokeStyle(gaugeOption.splitLine.color); + context.setLineWidth(2 * opts.pixelRatio); + context.moveTo(startX, 0); + context.lineTo(endX, 0); + context.stroke(); + context.rotate(splitAngle * Math.PI); + } + context.restore(); + + context.save(); + context.translate(centerPosition.x, centerPosition.y); + context.rotate((gaugeOption.startAngle - 1) * Math.PI); + + for (let i = 0; i < gaugeOption.splitLine.splitNumber * gaugeOption.splitLine.childNumber + 1; i++) { + context.beginPath(); + context.setStrokeStyle(gaugeOption.splitLine.color); + context.setLineWidth(1 * opts.pixelRatio); + context.moveTo(startX, 0); + context.lineTo(childendX, 0); + context.stroke(); + context.rotate(childAngle * Math.PI); + } + context.restore(); + + //画指针 + series = getGaugeDataPoints(series, categories, gaugeOption, process); + + for (let i = 0; i < series.length; i++) { + let eachSeries = series[i]; + context.save(); + context.translate(centerPosition.x, centerPosition.y); + context.rotate((eachSeries._proportion_ - 1) * Math.PI); + context.beginPath(); + context.setFillStyle(eachSeries.color); + context.moveTo(gaugeOption.pointer.width, 0); + context.lineTo(0, -gaugeOption.pointer.width / 2); + context.lineTo(-innerRadius, 0); + context.lineTo(0, gaugeOption.pointer.width / 2); + context.lineTo(gaugeOption.pointer.width, 0); + context.closePath(); + context.fill(); + context.beginPath(); + context.setFillStyle('#FFFFFF'); + context.arc(0, 0, gaugeOption.pointer.width / 6, 0, 2 * Math.PI, false); + context.fill(); + context.restore(); + } + + if (opts.dataLabel !== false) { + drawGaugeLabel(gaugeOption, radius, centerPosition, opts, config, context); + } + } + + //画仪表盘标题,副标题 + drawRingTitle(opts, config, context, centerPosition); + + if (process === 1 && opts.type === 'gauge') { + opts.extra.gauge.oldAngle = series[0]._proportion_; + opts.extra.gauge.oldData = series[0].data; + } + return { + center: centerPosition, + radius: radius, + innerRadius: innerRadius, + categories: categories, + totalAngle: totalAngle + }; +} + +function drawRadarDataPoints(series, opts, config, context) { + var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1; + var radarOption = assign({},{ + gridColor: '#cccccc', + gridType: 'radar', + labelColor: '#666666', + opacity: 0.2, + gridCount:3 + },opts.extra.radar); + + var coordinateAngle = getRadarCoordinateSeries(opts.categories.length); + + var centerPosition = { + x: opts.area[3] + (opts.width - opts.area[1] - opts.area[3]) / 2, + y: opts.area[0] + (opts.height - opts.area[0] - opts.area[2]) / 2 + }; + + var radius = Math.min(centerPosition.x - (getMaxTextListLength(opts.categories) + config.radarLabelTextMargin),centerPosition.y - config.radarLabelTextMargin); + //TODO逻辑不对 + radius -= opts.padding[1]; + + // 画分割线 + context.beginPath(); + context.setLineWidth(1 * opts.pixelRatio); + context.setStrokeStyle(radarOption.gridColor); + coordinateAngle.forEach(function(angle) { + var pos = convertCoordinateOrigin(radius * Math.cos(angle), radius * Math.sin(angle), centerPosition); + context.moveTo(centerPosition.x, centerPosition.y); + context.lineTo(pos.x, pos.y); + }); + context.stroke(); + context.closePath(); + + // 画背景网格 + var _loop = function _loop(i) { + var startPos = {}; + context.beginPath(); + context.setLineWidth(1 * opts.pixelRatio); + context.setStrokeStyle(radarOption.gridColor); + if(radarOption.gridType=='radar'){ + coordinateAngle.forEach(function(angle, index) { + var pos = convertCoordinateOrigin(radius / radarOption.gridCount * i * Math.cos(angle), radius / radarOption.gridCount * i * Math.sin(angle), centerPosition); + if (index === 0) { + startPos = pos; + context.moveTo(pos.x, pos.y); + } else { + context.lineTo(pos.x, pos.y); + } + }); + context.lineTo(startPos.x, startPos.y); + }else{ + var pos = convertCoordinateOrigin(radius / radarOption.gridCount * i * Math.cos(1.5), radius / radarOption.gridCount * i * Math.sin(1.5), centerPosition); + context.arc(centerPosition.x, centerPosition.y, centerPosition.y - pos.y, 0, 2 * Math.PI, false); + } + context.stroke(); + context.closePath(); + }; + + for (var i = 1; i <= radarOption.gridCount; i++) { + _loop(i); + } + + var radarDataPoints = getRadarDataPoints(coordinateAngle, centerPosition, radius, series, opts, process); + + radarDataPoints.forEach(function(eachSeries, seriesIndex) { + // 绘制区域数据 + context.beginPath(); + context.setFillStyle(hexToRgb(eachSeries.color, radarOption.opacity)); + eachSeries.data.forEach(function(item, index) { + if (index === 0) { + context.moveTo(item.position.x, item.position.y); + } else { + context.lineTo(item.position.x, item.position.y); + } + }); + context.closePath(); + context.fill(); + + if (opts.dataPointShape !== false) { + var points = eachSeries.data.map(function(item) { + return item.position; + }); + drawPointShape(points, eachSeries.color, eachSeries.pointShape, context, opts); + } + }); + // draw label text + drawRadarLabel(coordinateAngle, radius, centerPosition, opts, config, context); + + return { + center: centerPosition, + radius: radius, + angleList: coordinateAngle + }; +} + +function normalInt(min, max, iter) { + iter = iter==0?1:iter; + var arr = []; + for (var i = 0; i < iter; i++) { + arr[i] = Math.random(); + }; + return Math.floor(arr.reduce(function(i,j){return i+j})/iter*(max-min))+min; +}; + +function collisionNew(area,points,width,height){ + var isIn=false; + for(let i=0;i<points.length;i++){ + if(points[i].area){ + if(area[3]<points[i].area[1]||area[0]>points[i].area[2]||area[1]>points[i].area[3]||area[2]<points[i].area[0]){ + if(area[0]<0 || area[1]<0 || area[2]>width || area[3]>height){ + isIn=true; + break; + }else{ + isIn=false; + } + }else{ + isIn=true; + break; + } + } + } + return isIn; +}; + +function getBoundingBox(data) { + var bounds = {}, coords; + bounds.xMin = 180; + bounds.xMax = 0; + bounds.yMin = 90; + bounds.yMax = 0 + for (var i = 0; i < data.length; i++) { + var coorda = data[i].geometry.coordinates + for (var k = 0; k < coorda.length; k++) { + coords = coorda[k]; + if (coords.length == 1) { + coords = coords[0] + } + for (var j = 0; j < coords.length; j++) { + var longitude = coords[j][0]; + var latitude = coords[j][1]; + var point = { + x: longitude, + y: latitude + } + bounds.xMin = bounds.xMin < point.x ? bounds.xMin : point.x; + bounds.xMax = bounds.xMax > point.x ? bounds.xMax : point.x; + bounds.yMin = bounds.yMin < point.y ? bounds.yMin : point.y; + bounds.yMax = bounds.yMax > point.y ? bounds.yMax : point.y; + } + } + } + return bounds; +} + +function coordinateToPoint(latitude, longitude,bounds,scale,xoffset,yoffset) { + return { + x: (longitude - bounds.xMin) * scale+xoffset, + y: (bounds.yMax - latitude) * scale+yoffset + }; +} + +function pointToCoordinate(pointY, pointX,bounds,scale,xoffset,yoffset) { + return { + x: (pointX-xoffset)/scale+bounds.xMin, + y: bounds.yMax - (pointY-yoffset)/scale + }; +} + +function isRayIntersectsSegment(poi,s_poi,e_poi){ + if (s_poi[1]==e_poi[1]){return false;} + if (s_poi[1]>poi[1] && e_poi[1]>poi[1]){return false;} + if (s_poi[1]<poi[1] && e_poi[1]<poi[1]){return false;} + if (s_poi[1]==poi[1] && e_poi[1]>poi[1]){return false;} + if (e_poi[1]==poi[1] && s_poi[1]>poi[1]){return false;} + if (s_poi[0]<poi[0] && e_poi[1]<poi[1]){return false;} + let xseg=e_poi[0]-(e_poi[0]-s_poi[0])*(e_poi[1]-poi[1])/(e_poi[1]-s_poi[1]); + if (xseg<poi[0]){ + return false; + }else{ + return true; + } +} + +function isPoiWithinPoly(poi,poly){ + let sinsc=0; + for (let i=0;i<poly.length;i++){ + let epoly=poly[i][0]; + if (poly.length == 1) { + epoly = poly[i][0] + } + for(let j=0;j<epoly.length-1;j++){ + let s_poi=epoly[j]; + let e_poi=epoly[j+1]; + if (isRayIntersectsSegment(poi,s_poi,e_poi)){ + sinsc+=1; + } + } + } + + if(sinsc%2==1){ + return true; + }else{ + return false; + } +} + + +function drawMapDataPoints(series, opts, config, context) { + var mapOption=assign({},{ + border:true, + borderWidth:1, + borderColor:'#666666', + fillOpacity:0.6, + activeBorderColor:'#f04864', + activeFillColor:'#facc14', + activeFillOpacity:1 + },opts.extra.map); + var coords, point; + var data = series; + var bounds= getBoundingBox(data); + var xScale = opts.width / Math.abs(bounds.xMax - bounds.xMin); + var yScale = opts.height / Math.abs(bounds.yMax - bounds.yMin); + var scale = xScale < yScale ? xScale : yScale; + var xoffset=opts.width/2-Math.abs(bounds.xMax - bounds.xMin)/2*scale; + var yoffset=opts.height/2-Math.abs(bounds.yMax - bounds.yMin)/2*scale; + context.beginPath(); + context.clearRect(0, 0, opts.width, opts.height); + context.setFillStyle(opts.background||'#FFFFFF'); + context.rect(0,0,opts.width,opts.height); + context.fill(); + for (var i = 0; i < data.length; i++) { + context.beginPath(); + context.setLineWidth(mapOption.borderWidth * opts.pixelRatio); + context.setStrokeStyle(mapOption.borderColor); + context.setFillStyle(hexToRgb(series[i].color, mapOption.fillOpacity)); + if (opts.tooltip) { + if (opts.tooltip.index == i ) { + context.setStrokeStyle(mapOption.activeBorderColor); + context.setFillStyle(hexToRgb(mapOption.activeFillColor, mapOption.activeFillOpacity)); + } + } + var coorda = data[i].geometry.coordinates + for (var k = 0; k < coorda.length; k++) { + coords = coorda[k]; + if (coords.length == 1) { + coords = coords[0] + } + for (var j = 0; j < coords.length; j++) { + point = coordinateToPoint(coords[j][1], coords[j][0],bounds,scale,xoffset,yoffset) + if (j === 0) { + context.beginPath(); + context.moveTo(point.x, point.y); + } else { + context.lineTo(point.x, point.y); + } + } + context.fill(); + if(mapOption.border == true){ + context.stroke(); + } + } + if(opts.dataLabel == true){ + var centerPoint = data[i].properties.centroid; + if(centerPoint){ + point = coordinateToPoint(centerPoint[1], centerPoint[0],bounds,scale,xoffset,yoffset); + let fontSize=data[i].textSize||config.fontSize; + let text=data[i].properties.name; + context.beginPath(); + context.setFontSize(fontSize) + context.setFillStyle(data[i].textColor||'#666666') + context.fillText(text, point.x-measureText(text,fontSize)/2, point.y+fontSize/2); + context.closePath(); + context.stroke(); + } + } + } + opts.chartData.mapData={ + bounds:bounds, + scale:scale, + xoffset:xoffset, + yoffset:yoffset + } + drawToolTipBridge(opts, config, context,1); + context.draw(); +} + +function getWordCloudPoint(opts,type){ + let points = opts.series.sort(function(a,b){return parseInt(b.textSize)-parseInt(a.textSize);}); + switch (type) { + case 'normal': + for (let i = 0; i < points.length; i++) { + let text = points[i].name; + let tHeight = points[i].textSize; + let tWidth = measureText(text,tHeight); + let x,y; + let area; + let breaknum=0; + while(true) { + breaknum++; + x = normalInt(-opts.width/2, opts.width/2,5) - tWidth/2; + y = normalInt(-opts.height/2, opts.height/2,5) + tHeight/2; + area=[x-5+opts.width/2,y-5-tHeight+opts.height/2,x+tWidth+5+opts.width/2,y+5+opts.height/2]; + let isCollision = collisionNew(area,points,opts.width,opts.height); + if (!isCollision) break; + if (breaknum==1000){ + area=[-100,-100,-100,-100]; + break; + } + }; + points[i].area=area; + } + break; + case 'vertical': + function Spin(){ + //获取均匀随机值,是否旋转,旋转的概率为(1-0.5) + if (Math.random()>0.7) { + return true; + }else {return false}; + }; + for (let i = 0; i < points.length; i++) { + let text = points[i].name; + let tHeight = points[i].textSize; + let tWidth = measureText(text,tHeight); + let isSpin = Spin(); + let x,y,area,areav; + let breaknum=0; + while(true) { + breaknum++; + let isCollision; + if (isSpin) { + x = normalInt(-opts.width/2, opts.width/2,5) - tWidth/2; + y = normalInt(-opts.height/2, opts.height/2,5)+tHeight/2; + area=[y-5-tWidth+opts.width/2,(-x-5+opts.height/2),y+5+opts.width/2,(-x+tHeight+5+opts.height/2)]; + areav=[opts.width-(opts.width/2-opts.height/2)-(-x+tHeight+5+opts.height/2)-5,(opts.height/2-opts.width/2)+(y-5-tWidth+opts.width/2)-5,opts.width-(opts.width/2-opts.height/2)-(-x+tHeight+5+opts.height/2)+tHeight,(opts.height/2-opts.width/2)+(y-5-tWidth+opts.width/2)+tWidth+5]; + isCollision = collisionNew(areav,points,opts.height,opts.width); + }else{ + x = normalInt(-opts.width/2, opts.width/2,5) - tWidth/2; + y = normalInt(-opts.height/2, opts.height/2,5)+tHeight/2; + area=[x-5+opts.width/2,y-5-tHeight+opts.height/2,x+tWidth+5+opts.width/2,y+5+opts.height/2]; + isCollision = collisionNew(area,points,opts.width,opts.height); + } + if (!isCollision) break; + if (breaknum==1000){ + area=[-1000,-1000,-1000,-1000]; + break; + } + }; + if (isSpin) { + points[i].area=areav; + points[i].areav=area; + }else{ + points[i].area=area; + } + points[i].rotate=isSpin; + }; + break; + } + return points; +} + + +function drawWordCloudDataPoints(series, opts, config, context) { + let process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1; + let wordOption = assign({},{ + type: 'normal', + autoColors: true + },opts.extra.word); + + context.beginPath(); + context.setFillStyle(opts.background||'#FFFFFF'); + context.rect(0,0,opts.width,opts.height); + context.fill(); + context.save(); + let points = opts.chartData.wordCloudData; + context.translate(opts.width/2,opts.height/2); + + for(let i=0;i<points.length;i++){ + context.save(); + if(points[i].rotate){ + context.rotate(90 * Math.PI / 180); + } + let text = points[i].name; + let tHeight = points[i].textSize; + let tWidth = measureText(text,tHeight); + context.beginPath(); + context.setStrokeStyle(points[i].color); + context.setFillStyle(points[i].color); + context.setFontSize(tHeight); + if(points[i].rotate){ + if(points[i].areav[0]>0){ + if (opts.tooltip) { + if (opts.tooltip.index == i) { + context.strokeText(text,(points[i].areav[0]+5-opts.width/2)*process-tWidth*(1-process)/2,(points[i].areav[1]+5+tHeight-opts.height/2)*process); + }else{ + context.fillText(text,(points[i].areav[0]+5-opts.width/2)*process-tWidth*(1-process)/2,(points[i].areav[1]+5+tHeight-opts.height/2)*process); + } + }else{ + context.fillText(text,(points[i].areav[0]+5-opts.width/2)*process-tWidth*(1-process)/2,(points[i].areav[1]+5+tHeight-opts.height/2)*process); + } + } + }else{ + if(points[i].area[0]>0){ + if (opts.tooltip) { + if (opts.tooltip.index == i) { + context.strokeText(text,(points[i].area[0]+5-opts.width/2)*process-tWidth*(1-process)/2,(points[i].area[1]+5+tHeight-opts.height/2)*process); + }else{ + context.fillText(text,(points[i].area[0]+5-opts.width/2)*process-tWidth*(1-process)/2,(points[i].area[1]+5+tHeight-opts.height/2)*process); + } + }else{ + context.fillText(text,(points[i].area[0]+5-opts.width/2)*process-tWidth*(1-process)/2,(points[i].area[1]+5+tHeight-opts.height/2)*process); + } + + } + } + + context.stroke(); + context.restore(); + } + context.restore(); +} + +function drawFunnelDataPoints(series, opts, config, context) { + let process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1; + let funnelOption = assign({},{ + activeWidth:10, + activeOpacity:0.3, + border:false, + borderWidth:2, + borderColor:'#FFFFFF', + fillOpacity:1, + labelAlign:'right' + },opts.extra.funnel); + let eachSpacing = (opts.height - opts.area[0] - opts.area[2])/series.length; + let centerPosition = { + x: opts.area[3] + (opts.width - opts.area[1] - opts.area[3]) / 2, + y: opts.height-opts.area[2] + }; + let activeWidth = funnelOption.activeWidth; + let radius = Math.min((opts.width - opts.area[1] - opts.area[3]) / 2 - activeWidth, (opts.height - opts.area[0] - opts.area[2]) / 2 - activeWidth); + series = getFunnelDataPoints(series, radius, process); + context.save(); + context.translate(centerPosition.x,centerPosition.y); + for(let i=0;i<series.length;i++){ + if(i==0){ + if (opts.tooltip) { + if (opts.tooltip.index == i) { + context.beginPath(); + context.setFillStyle(hexToRgb(series[i].color, funnelOption.activeOpacity)); + context.moveTo(-activeWidth, 0); + context.lineTo(-series[i].radius-activeWidth, -eachSpacing); + context.lineTo(series[i].radius+activeWidth, -eachSpacing); + context.lineTo(activeWidth, 0); + context.lineTo(-activeWidth, 0); + context.closePath(); + context.fill(); + } + } + series[i].funnelArea=[centerPosition.x-series[i].radius,centerPosition.y-eachSpacing,centerPosition.x+series[i].radius,centerPosition.y]; + context.beginPath(); + context.setLineWidth(funnelOption.borderWidth * opts.pixelRatio); + context.setStrokeStyle(funnelOption.borderColor); + context.setFillStyle(hexToRgb(series[i].color, funnelOption.fillOpacity)); + context.moveTo(0, 0); + context.lineTo(-series[i].radius, -eachSpacing); + context.lineTo(series[i].radius, -eachSpacing); + context.lineTo(0, 0); + context.closePath(); + context.fill(); + if(funnelOption.border == true){ + context.stroke(); + } + }else{ + if (opts.tooltip) { + if (opts.tooltip.index == i) { + context.beginPath(); + context.setFillStyle(hexToRgb(series[i].color, funnelOption.activeOpacity)); + context.moveTo(0, 0); + context.lineTo(-series[i-1].radius-activeWidth, 0); + context.lineTo(-series[i].radius-activeWidth, -eachSpacing); + context.lineTo(series[i].radius+activeWidth, -eachSpacing); + context.lineTo(series[i-1].radius+activeWidth, 0); + context.lineTo(0, 0); + context.closePath(); + context.fill(); + } + } + series[i].funnelArea=[centerPosition.x-series[i].radius,centerPosition.y-eachSpacing*(i+1),centerPosition.x+series[i].radius,centerPosition.y-eachSpacing*i]; + context.beginPath(); + context.setLineWidth(funnelOption.borderWidth * opts.pixelRatio); + context.setStrokeStyle(funnelOption.borderColor); + context.setFillStyle(hexToRgb(series[i].color, funnelOption.fillOpacity)); + context.moveTo(0, 0); + context.lineTo(-series[i-1].radius, 0); + context.lineTo(-series[i].radius, -eachSpacing); + context.lineTo(series[i].radius, -eachSpacing); + context.lineTo(series[i-1].radius, 0); + context.lineTo(0, 0); + context.closePath(); + context.fill(); + if(funnelOption.border == true){ + context.stroke(); + } + } + context.translate(0,-eachSpacing) + } + context.restore(); + + if (opts.dataLabel !== false && process === 1) { + drawFunnelText(series, opts, context, eachSpacing, funnelOption.labelAlign, activeWidth, centerPosition); + } + + return { + center: centerPosition, + radius: radius, + series: series + }; +} + +function drawFunnelText(series, opts, context, eachSpacing, labelAlign,activeWidth, centerPosition){ + for(let i=0;i<series.length;i++){ + let item = series[i]; + let startX,endX,startY,fontSize; + let text = item.format ? item.format(+item._proportion_.toFixed(2)) : util.toFixed(item._proportion_ * 100) +'%'; + if(labelAlign == 'right'){ + if(i==0){ + startX=(item.funnelArea[2]+centerPosition.x)/2; + }else{ + startX=(item.funnelArea[2]+series[i-1].funnelArea[2])/2; + } + endX=startX+activeWidth*2; + startY=item.funnelArea[1]+eachSpacing/2; + fontSize = item.textSize || opts.fontSize; + context.setLineWidth(1 * opts.pixelRatio); + context.setStrokeStyle(item.color); + context.setFillStyle(item.color); + context.beginPath(); + context.moveTo(startX,startY ); + context.lineTo(endX,startY); + context.stroke(); + context.closePath(); + context.beginPath(); + context.moveTo(endX, startY); + context.arc(endX, startY, 2, 0, 2 * Math.PI); + context.closePath(); + context.fill(); + context.beginPath(); + context.setFontSize(fontSize); + context.setFillStyle(item.textColor || '#666666'); + context.fillText(text, endX+5, startY + fontSize/2 -2); + context.closePath(); + context.stroke(); + context.closePath(); + }else{ + if(i==0){ + startX=(item.funnelArea[0]+centerPosition.x)/2; + }else{ + startX=(item.funnelArea[0]+series[i-1].funnelArea[0])/2; + } + endX=startX-activeWidth*2; + startY=item.funnelArea[1]+eachSpacing/2; + fontSize = item.textSize || opts.fontSize; + context.setLineWidth(1 * opts.pixelRatio); + context.setStrokeStyle(item.color); + context.setFillStyle(item.color); + context.beginPath(); + context.moveTo(startX,startY ); + context.lineTo(endX,startY); + context.stroke(); + context.closePath(); + context.beginPath(); + context.moveTo(endX, startY); + context.arc(endX, startY, 2, 0, 2 * Math.PI); + context.closePath(); + context.fill(); + context.beginPath(); + context.setFontSize(fontSize); + context.setFillStyle(item.textColor || '#666666'); + context.fillText(text, endX-5-measureText(text), startY + fontSize/2 -2); + context.closePath(); + context.stroke(); + context.closePath(); + } + + } +} + + +function drawCanvas(opts, context) { + context.draw(); +} + +var Timing = { + easeIn: function easeIn(pos) { + return Math.pow(pos, 3); + }, + easeOut: function easeOut(pos) { + return Math.pow(pos - 1, 3) + 1; + }, + easeInOut: function easeInOut(pos) { + if ((pos /= 0.5) < 1) { + return 0.5 * Math.pow(pos, 3); + } else { + return 0.5 * (Math.pow(pos - 2, 3) + 2); + } + }, + linear: function linear(pos) { + return pos; + } +}; + +function Animation(opts) { + this.isStop = false; + opts.duration = typeof opts.duration === 'undefined' ? 1000 : opts.duration; + opts.timing = opts.timing || 'linear'; + var delay = 17; + + function createAnimationFrame() { + if (typeof setTimeout !== 'undefined') { + return function(step, delay) { + setTimeout(function() { + var timeStamp = +new Date(); + step(timeStamp); + }, delay); + }; + } else if (typeof requestAnimationFrame !== 'undefined') { + return requestAnimationFrame; + } else { + return function(step) { + step(null); + }; + } + }; + var animationFrame = createAnimationFrame(); + var startTimeStamp = null; + var _step = function step(timestamp) { + if (timestamp === null || this.isStop === true) { + opts.onProcess && opts.onProcess(1); + opts.onAnimationFinish && opts.onAnimationFinish(); + return; + } + if (startTimeStamp === null) { + startTimeStamp = timestamp; + } + if (timestamp - startTimeStamp < opts.duration) { + var process = (timestamp - startTimeStamp) / opts.duration; + var timingFunction = Timing[opts.timing]; + process = timingFunction(process); + + opts.onProcess && opts.onProcess(process); + animationFrame(_step, delay); + } else { + opts.onProcess && opts.onProcess(1); + opts.onAnimationFinish && opts.onAnimationFinish(); + } + }; + _step = _step.bind(this); + animationFrame(_step, delay); +} + +// stop animation immediately +// and tigger onAnimationFinish +Animation.prototype.stop = function() { + this.isStop = true; +}; + +function drawCharts(type, opts, config, context) { + var _this = this; + var series = opts.series; + var categories = opts.categories; + series = fillSeries(series, opts, config); + var duration = opts.animation ? opts.duration : 0; + _this.animationInstance && _this.animationInstance.stop(); + var seriesMA = null; + if (type == 'candle') { + let average = assign({}, opts.extra.candle.average); + if (average.show) { + seriesMA = calCandleMA(average.day, average.name, average.color, series[0].data); + seriesMA = fillSeries(seriesMA, opts, config); + opts.seriesMA = seriesMA; + } else if (opts.seriesMA) { + seriesMA = opts.seriesMA = fillSeries(opts.seriesMA, opts, config); + } else { + seriesMA = series; + } + } else { + seriesMA = series; + } + + /* 过滤掉show=false的series */ + opts._series_ = series = filterSeries(series); + + //重新计算图表区域 + + opts.area = new Array(4); + //复位绘图区域 + for (let j = 0; j < 4; j++) { + opts.area[j] = opts.padding[j]; + } + + //通过计算三大区域:图例、X轴、Y轴的大小,确定绘图区域 + var _calLegendData = calLegendData(seriesMA, opts, config, opts.chartData), + legendHeight = _calLegendData.area.wholeHeight, + legendWidth = _calLegendData.area.wholeWidth; + + switch (opts.legend.position) { + case 'top': + opts.area[0] += legendHeight; + break; + case 'bottom': + opts.area[2] += legendHeight; + break; + case 'left': + opts.area[3] += legendWidth; + break; + case 'right': + opts.area[1] += legendWidth; + break; + } + + let _calYAxisData = {},yAxisWidth = 0; + if (opts.type === 'line' || opts.type === 'column' || opts.type === 'area' || opts.type === 'mix' || opts.type === 'candle') { + _calYAxisData = calYAxisData(series, opts, config); + yAxisWidth = _calYAxisData.yAxisWidth; + //如果显示Y轴标题 + if(opts.yAxis.showTitle){ + let maxTitleHeight=0; + for(let i=0;i<opts.yAxis.data.length;i++){ + maxTitleHeight = Math.max(maxTitleHeight,opts.yAxis.data[i].titleFontSize?opts.yAxis.data[i].titleFontSize:config.fontSize) + } + opts.area[0] += (maxTitleHeight+6)*opts.pixelRatio; + } + let rightIndex=0,leftIndex=0; + //计算主绘图区域左右位置 + for(let i=0;i<yAxisWidth.length;i++){ + if(yAxisWidth[i].position=='left'){ + if(leftIndex>0){ + opts.area[3] += yAxisWidth[i].width + opts.yAxis.padding; + }else{ + opts.area[3] += yAxisWidth[i].width; + } + leftIndex +=1; + }else{ + if(rightIndex>0){ + opts.area[1] += yAxisWidth[i].width + opts.yAxis.padding; + }else{ + opts.area[1] += yAxisWidth[i].width; + } + rightIndex +=1; + } + } + }else{ + config.yAxisWidth = yAxisWidth; + } + opts.chartData.yAxisData = _calYAxisData; + + if (opts.categories && opts.categories.length) { + opts.chartData.xAxisData = getXAxisPoints(opts.categories, opts, config); + let _calCategoriesData = calCategoriesData(opts.categories, opts, config, opts.chartData.xAxisData.eachSpacing), + xAxisHeight = _calCategoriesData.xAxisHeight, + angle = _calCategoriesData.angle; + config.xAxisHeight = xAxisHeight; + config._xAxisTextAngle_ = angle; + opts.area[2] += xAxisHeight; + opts.chartData.categoriesData = _calCategoriesData; + }else{ + if (opts.type === 'line' || opts.type === 'area' || opts.type === 'points') { + opts.chartData.xAxisData = calXAxisData(series, opts, config); + categories=opts.chartData.xAxisData.rangesFormat; + let _calCategoriesData = calCategoriesData(categories, opts, config, opts.chartData.xAxisData.eachSpacing), + xAxisHeight = _calCategoriesData.xAxisHeight, + angle = _calCategoriesData.angle; + config.xAxisHeight = xAxisHeight; + config._xAxisTextAngle_ = angle; + opts.area[2] += xAxisHeight; + opts.chartData.categoriesData = _calCategoriesData; + }else{ + opts.chartData.xAxisData={ + xAxisPoints: [] + }; + } + } + //计算右对齐偏移距离 + if (opts.enableScroll && opts.xAxis.scrollAlign == 'right' && opts._scrollDistance_ === undefined) { + let offsetLeft = 0, + xAxisPoints = opts.chartData.xAxisData.xAxisPoints, + startX = opts.chartData.xAxisData.startX, + endX = opts.chartData.xAxisData.endX, + eachSpacing = opts.chartData.xAxisData.eachSpacing; + let totalWidth = eachSpacing * (xAxisPoints.length - 1); + let screenWidth = endX - startX; + offsetLeft = screenWidth - totalWidth; + _this.scrollOption = { + currentOffset: offsetLeft, + startTouchX: offsetLeft, + distance: 0, + lastMoveTime: 0 + }; + opts._scrollDistance_ = offsetLeft; + } + + if (type === 'pie' || type === 'ring' || type === 'rose') { + config._pieTextMaxLength_ = opts.dataLabel === false ? 0 : getPieTextMaxLength(seriesMA); + } + + switch (type) { + case 'word': + let wordOption = assign({},{ + type: 'normal', + autoColors: true + },opts.extra.word); + if(opts.updateData==true || opts.updateData==undefined){ + opts.chartData.wordCloudData=getWordCloudPoint(opts,wordOption.type); + } + this.animationInstance = new Animation({ + timing: 'easeInOut', + duration: duration, + onProcess: function(process) { + context.clearRect(0, 0, opts.width, opts.height); + if (opts.rotate) { + contextRotate(context, opts); + } + drawWordCloudDataPoints(series, opts, config, context,process); + drawCanvas(opts, context); + }, + onAnimationFinish: function onAnimationFinish() { + _this.event.trigger('renderComplete'); + } + }); + break; + case 'map': + context.clearRect(0, 0, opts.width, opts.height); + drawMapDataPoints(series, opts, config, context); + break; + case 'funnel': + this.animationInstance = new Animation({ + timing: 'easeInOut', + duration: duration, + onProcess: function(process) { + context.clearRect(0, 0, opts.width, opts.height); + if (opts.rotate) { + contextRotate(context, opts); + } + opts.chartData.funnelData = drawFunnelDataPoints(series, opts, config, context, process); + drawLegend(opts.series, opts, config, context, opts.chartData); + drawToolTipBridge(opts, config, context, process); + drawCanvas(opts, context); + }, + onAnimationFinish: function onAnimationFinish() { + _this.event.trigger('renderComplete'); + } + }); + break; + case 'line': + this.animationInstance = new Animation({ + timing: 'easeIn', + duration: duration, + onProcess: function onProcess(process) { + context.clearRect(0, 0, opts.width, opts.height); + if (opts.rotate) { + contextRotate(context, opts); + } + drawYAxisGrid(categories, opts, config, context); + drawXAxis(categories, opts, config, context); + var _drawLineDataPoints = drawLineDataPoints(series, opts, config, context, process), + xAxisPoints = _drawLineDataPoints.xAxisPoints, + calPoints = _drawLineDataPoints.calPoints, + eachSpacing = _drawLineDataPoints.eachSpacing; + opts.chartData.xAxisPoints = xAxisPoints; + opts.chartData.calPoints = calPoints; + opts.chartData.eachSpacing = eachSpacing; + drawYAxis(series, opts, config, context); + if (opts.enableMarkLine !== false && process === 1) { + drawMarkLine(opts, config, context); + } + drawLegend(opts.series, opts, config, context, opts.chartData); + drawToolTipBridge(opts, config, context, process, eachSpacing, xAxisPoints); + drawCanvas(opts, context); + + }, + onAnimationFinish: function onAnimationFinish() { + _this.event.trigger('renderComplete'); + } + }); + break; + case 'mix': + this.animationInstance = new Animation({ + timing: 'easeIn', + duration: duration, + onProcess: function onProcess(process) { + context.clearRect(0, 0, opts.width, opts.height); + if (opts.rotate) { + contextRotate(context, opts); + } + drawYAxisGrid(categories, opts, config, context); + drawXAxis(categories, opts, config, context); + var _drawMixDataPoints = drawMixDataPoints(series, opts, config, context, process), + xAxisPoints = _drawMixDataPoints.xAxisPoints, + calPoints = _drawMixDataPoints.calPoints, + eachSpacing = _drawMixDataPoints.eachSpacing; + opts.chartData.xAxisPoints = xAxisPoints; + opts.chartData.calPoints = calPoints; + opts.chartData.eachSpacing = eachSpacing; + drawYAxis(series, opts, config, context); + if (opts.enableMarkLine !== false && process === 1) { + drawMarkLine(opts, config, context); + } + drawLegend(opts.series, opts, config, context, opts.chartData); + drawToolTipBridge(opts, config, context, process, eachSpacing, xAxisPoints); + drawCanvas(opts, context); + }, + onAnimationFinish: function onAnimationFinish() { + _this.event.trigger('renderComplete'); + } + }); + break; + case 'column': + this.animationInstance = new Animation({ + timing: 'easeIn', + duration: duration, + onProcess: function onProcess(process) { + context.clearRect(0, 0, opts.width, opts.height); + if (opts.rotate) { + contextRotate(context, opts); + } + drawYAxisGrid(categories, opts, config, context); + drawXAxis(categories, opts, config, context); + var _drawColumnDataPoints = drawColumnDataPoints(series, opts, config, context, process), + xAxisPoints = _drawColumnDataPoints.xAxisPoints, + calPoints = _drawColumnDataPoints.calPoints, + eachSpacing = _drawColumnDataPoints.eachSpacing; + opts.chartData.xAxisPoints = xAxisPoints; + opts.chartData.calPoints = calPoints; + opts.chartData.eachSpacing = eachSpacing; + drawYAxis(series, opts, config, context); + if (opts.enableMarkLine !== false && process === 1) { + drawMarkLine(opts, config, context); + } + drawLegend(opts.series, opts, config, context, opts.chartData); + drawToolTipBridge(opts, config, context, process, eachSpacing, xAxisPoints); + drawCanvas(opts, context); + }, + onAnimationFinish: function onAnimationFinish() { + _this.event.trigger('renderComplete'); + } + }); + break; + case 'area': + this.animationInstance = new Animation({ + timing: 'easeIn', + duration: duration, + onProcess: function onProcess(process) { + context.clearRect(0, 0, opts.width, opts.height); + if (opts.rotate) { + contextRotate(context, opts); + } + drawYAxisGrid(categories, opts, config, context); + drawXAxis(categories, opts, config, context); + var _drawAreaDataPoints = drawAreaDataPoints(series, opts, config, context, process), + xAxisPoints = _drawAreaDataPoints.xAxisPoints, + calPoints = _drawAreaDataPoints.calPoints, + eachSpacing = _drawAreaDataPoints.eachSpacing; + opts.chartData.xAxisPoints = xAxisPoints; + opts.chartData.calPoints = calPoints; + opts.chartData.eachSpacing = eachSpacing; + drawYAxis(series, opts, config, context); + if (opts.enableMarkLine !== false && process === 1) { + drawMarkLine(opts, config, context); + } + drawLegend(opts.series, opts, config, context, opts.chartData); + drawToolTipBridge(opts, config, context, process, eachSpacing, xAxisPoints); + drawCanvas(opts, context); + }, + onAnimationFinish: function onAnimationFinish() { + _this.event.trigger('renderComplete'); + } + }); + break; + case 'ring': + case 'pie': + this.animationInstance = new Animation({ + timing: 'easeInOut', + duration: duration, + onProcess: function onProcess(process) { + context.clearRect(0, 0, opts.width, opts.height); + if (opts.rotate) { + contextRotate(context, opts); + } + opts.chartData.pieData = drawPieDataPoints(series, opts, config, context, process); + drawLegend(opts.series, opts, config, context, opts.chartData); + drawToolTipBridge(opts, config, context, process); + drawCanvas(opts, context); + }, + onAnimationFinish: function onAnimationFinish() { + _this.event.trigger('renderComplete'); + } + }); + break; + case 'rose': + this.animationInstance = new Animation({ + timing: 'easeInOut', + duration: duration, + onProcess: function onProcess(process) { + context.clearRect(0, 0, opts.width, opts.height); + if (opts.rotate) { + contextRotate(context, opts); + } + opts.chartData.pieData = drawRoseDataPoints(series, opts, config, context, process); + drawLegend(opts.series, opts, config, context, opts.chartData); + drawToolTipBridge(opts, config, context, process); + drawCanvas(opts, context); + }, + onAnimationFinish: function onAnimationFinish() { + _this.event.trigger('renderComplete'); + } + }); + break; + case 'radar': + this.animationInstance = new Animation({ + timing: 'easeInOut', + duration: duration, + onProcess: function onProcess(process) { + context.clearRect(0, 0, opts.width, opts.height); + if (opts.rotate) { + contextRotate(context, opts); + } + opts.chartData.radarData = drawRadarDataPoints(series, opts, config, context, process); + drawLegend(opts.series, opts, config, context, opts.chartData); + drawToolTipBridge(opts, config, context, process); + drawCanvas(opts, context); + }, + onAnimationFinish: function onAnimationFinish() { + _this.event.trigger('renderComplete'); + } + }); + break; + case 'arcbar': + this.animationInstance = new Animation({ + timing: 'easeInOut', + duration: duration, + onProcess: function onProcess(process) { + context.clearRect(0, 0, opts.width, opts.height); + if (opts.rotate) { + contextRotate(context, opts); + } + opts.chartData.arcbarData = drawArcbarDataPoints(series, opts, config, context, process); + drawCanvas(opts, context); + }, + onAnimationFinish: function onAnimationFinish() { + _this.event.trigger('renderComplete'); + } + }); + break; + case 'gauge': + this.animationInstance = new Animation({ + timing: 'easeInOut', + duration: duration, + onProcess: function onProcess(process) { + context.clearRect(0, 0, opts.width, opts.height); + if (opts.rotate) { + contextRotate(context, opts); + } + opts.chartData.gaugeData = drawGaugeDataPoints(categories, series, opts, config, context, process); + drawCanvas(opts, context); + }, + onAnimationFinish: function onAnimationFinish() { + _this.event.trigger('renderComplete'); + } + }); + break; + case 'candle': + this.animationInstance = new Animation({ + timing: 'easeIn', + duration: duration, + onProcess: function onProcess(process) { + context.clearRect(0, 0, opts.width, opts.height); + if (opts.rotate) { + contextRotate(context, opts); + } + drawYAxisGrid(categories, opts, config, context); + drawXAxis(categories, opts, config, context); + var _drawCandleDataPoints = drawCandleDataPoints(series, seriesMA, opts, config, context, process), + xAxisPoints = _drawCandleDataPoints.xAxisPoints, + calPoints = _drawCandleDataPoints.calPoints, + eachSpacing = _drawCandleDataPoints.eachSpacing; + opts.chartData.xAxisPoints = xAxisPoints; + opts.chartData.calPoints = calPoints; + opts.chartData.eachSpacing = eachSpacing; + drawYAxis(series, opts, config, context); + if (opts.enableMarkLine !== false && process === 1) { + drawMarkLine(opts, config, context); + } + if (seriesMA) { + drawLegend(seriesMA, opts, config, context, opts.chartData); + } else { + drawLegend(opts.series, opts, config, context, opts.chartData); + } + drawToolTipBridge(opts, config, context, process, eachSpacing, xAxisPoints); + drawCanvas(opts, context); + }, + onAnimationFinish: function onAnimationFinish() { + _this.event.trigger('renderComplete'); + } + }); + break; + } +} + +// simple event implement + +function Event() { + this.events = {}; +} + +Event.prototype.addEventListener = function(type, listener) { + this.events[type] = this.events[type] || []; + this.events[type].push(listener); +}; + +Event.prototype.delEventListener = function(type) { + this.events[type] = []; +}; + +Event.prototype.trigger = function() { + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + var type = args[0]; + var params = args.slice(1); + if (!!this.events[type]) { + this.events[type].forEach(function(listener) { + try { + listener.apply(null, params); + } catch (e) { + console.error(e); + } + }); + } +}; + +var Charts = function Charts(opts) { + opts.pixelRatio = opts.pixelRatio ? opts.pixelRatio : 1; + opts.fontSize = opts.fontSize ? opts.fontSize * opts.pixelRatio : 13 * opts.pixelRatio; + opts.title = assign({}, opts.title); + opts.subtitle = assign({}, opts.subtitle); + opts.duration = opts.duration ? opts.duration : 1000; + opts.yAxis = assign({}, { + data:[], + showTitle:false, + disabled:false, + disableGrid:false, + splitNumber:5, + gridType: 'solid', + dashLength: 4 * opts.pixelRatio, + gridColor:'#cccccc', + padding:10, + fontColor:'#666666' + }, opts.yAxis); + opts.yAxis.dashLength *= opts.pixelRatio; + opts.yAxis.padding *= opts.pixelRatio; + opts.xAxis = assign({}, { + rotateLabel: false, + type: 'calibration', + gridType: 'solid', + dashLength: 4, + scrollAlign: 'left', + boundaryGap:'center', + axisLine:true, + axisLineColor:'#cccccc' + }, opts.xAxis); + opts.xAxis.dashLength *= opts.pixelRatio; + opts.legend = assign({}, { + show: true, + position: 'bottom', + float: 'center', + backgroundColor: 'rgba(0,0,0,0)', + borderColor: 'rgba(0,0,0,0)', + borderWidth: 0, + padding: 5, + margin: 5, + itemGap: 10, + fontSize: opts.fontSize, + lineHeight: opts.fontSize, + fontColor: '#333333', + format: {}, + hiddenColor: '#CECECE' + }, opts.legend); + opts.legend.borderWidth = opts.legend.borderWidth * opts.pixelRatio; + opts.legend.itemGap = opts.legend.itemGap * opts.pixelRatio; + opts.legend.padding = opts.legend.padding * opts.pixelRatio; + opts.legend.margin = opts.legend.margin * opts.pixelRatio; + opts.extra = assign({}, opts.extra); + opts.rotate = opts.rotate ? true : false; + opts.animation = opts.animation ? true : false; + opts.rotate = opts.rotate ? true : false; + opts.canvas2d = opts.canvas2d ? true : false; + + let config$$1 = JSON.parse(JSON.stringify(config)); + config$$1.colors = opts.colors ? opts.colors : config$$1.colors; + config$$1.yAxisTitleWidth = opts.yAxis.disabled !== true && opts.yAxis.title ? config$$1.yAxisTitleWidth : 0; + if (opts.type == 'pie' || opts.type == 'ring') { + config$$1.pieChartLinePadding = opts.dataLabel === false ? 0 : opts.extra.pie.labelWidth * opts.pixelRatio || config$$1.pieChartLinePadding * opts.pixelRatio; + } + if (opts.type == 'rose') { + config$$1.pieChartLinePadding = opts.dataLabel === false ? 0 : opts.extra.rose.labelWidth * opts.pixelRatio || config$$1.pieChartLinePadding * opts.pixelRatio; + } + config$$1.pieChartTextPadding = opts.dataLabel === false ? 0 : config$$1.pieChartTextPadding * opts.pixelRatio; + config$$1.yAxisSplit = opts.yAxis.splitNumber ? opts.yAxis.splitNumber : config.yAxisSplit; + + //屏幕旋转 + config$$1.rotate = opts.rotate; + if (opts.rotate) { + let tempWidth = opts.width; + let tempHeight = opts.height; + opts.width = tempHeight; + opts.height = tempWidth; + } + + //适配高分屏 + opts.padding = opts.padding ? opts.padding : config$$1.padding; + for (let i = 0; i < 4; i++) { + opts.padding[i] *= opts.pixelRatio; + } + config$$1.yAxisWidth = config.yAxisWidth * opts.pixelRatio; + config$$1.xAxisHeight = config.xAxisHeight * opts.pixelRatio; + if (opts.enableScroll && opts.xAxis.scrollShow) { + config$$1.xAxisHeight += 6 * opts.pixelRatio; + } + config$$1.xAxisLineHeight = config.xAxisLineHeight * opts.pixelRatio; + config$$1.fontSize = opts.fontSize; + config$$1.titleFontSize = config.titleFontSize * opts.pixelRatio; + config$$1.subtitleFontSize = config.subtitleFontSize * opts.pixelRatio; + config$$1.toolTipPadding = config.toolTipPadding * opts.pixelRatio; + config$$1.toolTipLineHeight = config.toolTipLineHeight * opts.pixelRatio; + config$$1.columePadding = config.columePadding * opts.pixelRatio; + this.context = opts.context ? opts.context : uni.createCanvasContext(opts.canvasId, opts.$this); + + if(opts.canvas2d){ + this.context.setStrokeStyle = function(e){ return this.strokeStyle=e; } + this.context.setLineWidth = function(e){ return this.lineWidth=e; } + this.context.setLineCap = function(e){ return this.lineCap=e; } + this.context.setFontSize = function(e){ return this.font=e+"px sans-serif"; } + this.context.setFillStyle = function(e){ return this.fillStyle=e; } + this.context.draw = function(){ } + } + /* 兼容原生H5 + this.context = document.getElementById(opts.canvasId).getContext("2d"); + this.context.setStrokeStyle = function(e){ return this.strokeStyle=e; } + this.context.setLineWidth = function(e){ return this.lineWidth=e; } + this.context.setLineCap = function(e){ return this.lineCap=e; } + this.context.setFontSize = function(e){ return this.font=e+"px sans-serif"; } + this.context.setFillStyle = function(e){ return this.fillStyle=e; } + this.context.draw = function(){ } + */ + + opts.chartData = {}; + this.event = new Event(); + this.scrollOption = { + currentOffset: 0, + startTouchX: 0, + distance: 0, + lastMoveTime: 0 + }; + + this.opts = opts; + this.config = config$$1; + + drawCharts.call(this, opts.type, opts, config$$1, this.context); +}; + +Charts.prototype.updateData = function() { + let data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + this.opts = assign({}, this.opts, data); + this.opts.updateData = true; + let scrollPosition = data.scrollPosition || 'current'; + switch (scrollPosition) { + case 'current': + this.opts._scrollDistance_ = this.scrollOption.currentOffset; + break; + case 'left': + this.opts._scrollDistance_ = 0; + this.scrollOption = { + currentOffset: 0, + startTouchX: 0, + distance: 0, + lastMoveTime: 0 + }; + break; + case 'right': + let _calYAxisData = calYAxisData(this.opts.series, this.opts, this.config), + yAxisWidth = _calYAxisData.yAxisWidth; + this.config.yAxisWidth = yAxisWidth; + let offsetLeft = 0; + let _getXAxisPoints0 = getXAxisPoints(this.opts.categories, this.opts, this.config), + xAxisPoints = _getXAxisPoints0.xAxisPoints, + startX = _getXAxisPoints0.startX, + endX = _getXAxisPoints0.endX, + eachSpacing = _getXAxisPoints0.eachSpacing; + let totalWidth = eachSpacing * (xAxisPoints.length - 1); + let screenWidth = endX - startX; + offsetLeft = screenWidth - totalWidth; + this.scrollOption = { + currentOffset: offsetLeft, + startTouchX: offsetLeft, + distance: 0, + lastMoveTime: 0 + }; + this.opts._scrollDistance_ = offsetLeft; + break; + } + drawCharts.call(this, this.opts.type, this.opts, this.config, this.context); +}; + +Charts.prototype.zoom = function() { + var val = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.opts.xAxis.itemCount; + if (this.opts.enableScroll !== true) { + console.log('请启用滚动条后使用!') + return; + } + //当前屏幕中间点 + let centerPoint = Math.round(Math.abs(this.scrollOption.currentOffset) / this.opts.chartData.eachSpacing) + Math.round( + this.opts.xAxis.itemCount / 2); + this.opts.animation = false; + this.opts.xAxis.itemCount = val.itemCount; + //重新计算x轴偏移距离 + let _calYAxisData = calYAxisData(this.opts.series, this.opts, this.config), + yAxisWidth = _calYAxisData.yAxisWidth; + this.config.yAxisWidth = yAxisWidth; + let offsetLeft = 0; + let _getXAxisPoints0 = getXAxisPoints(this.opts.categories, this.opts, this.config), + xAxisPoints = _getXAxisPoints0.xAxisPoints, + startX = _getXAxisPoints0.startX, + endX = _getXAxisPoints0.endX, + eachSpacing = _getXAxisPoints0.eachSpacing; + let centerLeft = eachSpacing * centerPoint; + let screenWidth = endX - startX; + let MaxLeft = screenWidth - eachSpacing * (xAxisPoints.length - 1); + offsetLeft = screenWidth / 2 - centerLeft; + if (offsetLeft > 0) { + offsetLeft = 0; + } + if (offsetLeft < MaxLeft) { + offsetLeft = MaxLeft; + } + this.scrollOption = { + currentOffset: offsetLeft, + startTouchX: offsetLeft, + distance: 0, + lastMoveTime: 0 + }; + this.opts._scrollDistance_ = offsetLeft; + drawCharts.call(this, this.opts.type, this.opts, this.config, this.context); +}; + +Charts.prototype.stopAnimation = function() { + this.animationInstance && this.animationInstance.stop(); +}; + +Charts.prototype.addEventListener = function(type, listener) { + this.event.addEventListener(type, listener); +}; + +Charts.prototype.delEventListener = function(type) { + this.event.delEventListener(type); +}; + +Charts.prototype.getCurrentDataIndex = function(e) { + var touches = null; + if (e.changedTouches) { + touches = e.changedTouches[0]; + } else { + touches = e.mp.changedTouches[0]; + } + if (touches) { + let _touches$ = getTouches(touches, this.opts, e); + if (this.opts.type === 'pie' || this.opts.type === 'ring' || this.opts.type === 'rose') { + return findPieChartCurrentIndex({ + x: _touches$.x, + y: _touches$.y + }, this.opts.chartData.pieData); + } else if (this.opts.type === 'radar') { + return findRadarChartCurrentIndex({ + x: _touches$.x, + y: _touches$.y + }, this.opts.chartData.radarData, this.opts.categories.length); + } else if (this.opts.type === 'funnel') { + return findFunnelChartCurrentIndex({ + x: _touches$.x, + y: _touches$.y + }, this.opts.chartData.funnelData); + } else if (this.opts.type === 'map') { + return findMapChartCurrentIndex({ + x: _touches$.x, + y: _touches$.y + }, this.opts); + }else if (this.opts.type === 'word') { + return findWordChartCurrentIndex({ + x: _touches$.x, + y: _touches$.y + }, this.opts.chartData.wordCloudData); + } else { + return findCurrentIndex({ + x: _touches$.x, + y: _touches$.y + }, this.opts.chartData.calPoints, this.opts, this.config, Math.abs(this.scrollOption.currentOffset)); + } + } + return -1; +}; + +Charts.prototype.getLegendDataIndex = function(e) { + var touches = null; + if (e.changedTouches) { + touches = e.changedTouches[0]; + } else { + touches = e.mp.changedTouches[0]; + } + if (touches) { + let _touches$ = getTouches(touches, this.opts, e); + return findLegendIndex({ + x: _touches$.x, + y: _touches$.y + }, this.opts.chartData.legendData); + } + return -1; +}; + +Charts.prototype.touchLegend = function(e) { + var option = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var touches = null; + if (e.changedTouches) { + touches = e.changedTouches[0]; + } else { + touches = e.mp.changedTouches[0]; + } + if (touches) { + var _touches$ = getTouches(touches, this.opts, e); + var index = this.getLegendDataIndex(e); + if (index >= 0) { + this.opts.series[index].show = !this.opts.series[index].show; + this.opts.animation = option.animation ? true : false; + this.opts._scrollDistance_= this.scrollOption.currentOffset; + drawCharts.call(this, this.opts.type, this.opts, this.config, this.context); + } + } + +}; + +Charts.prototype.showToolTip = function(e) { + var option = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var touches = null; + if (e.changedTouches) { + touches = e.changedTouches[0]; + } else { + touches = e.mp.changedTouches[0]; + } + if (!touches) { + console.log("touchError"); + } + var _touches$ = getTouches(touches, this.opts, e); + var currentOffset = this.scrollOption.currentOffset; + var opts = assign({}, this.opts, { + _scrollDistance_: currentOffset, + animation: false + }); + if (this.opts.type === 'line' || this.opts.type === 'area' || this.opts.type === 'column') { + var index = option.index==undefined? this.getCurrentDataIndex(e):option.index ; + if (index > -1) { + var seriesData = getSeriesDataItem(this.opts.series, index); + if (seriesData.length !== 0) { + var _getToolTipData = getToolTipData(seriesData, this.opts.chartData.calPoints, index, this.opts.categories,option), + textList = _getToolTipData.textList, + offset = _getToolTipData.offset; + offset.y = _touches$.y; + opts.tooltip = { + textList: option.textList?option.textList:textList, + offset: offset, + option: option, + index: index + }; + } + } + drawCharts.call(this, opts.type, opts, this.config, this.context); + } + if (this.opts.type === 'mix') { + var index = option.index==undefined? this.getCurrentDataIndex(e):option.index ; + if (index > -1) { + var currentOffset = this.scrollOption.currentOffset; + var opts = assign({}, this.opts, { + _scrollDistance_: currentOffset, + animation: false + }); + var seriesData = getSeriesDataItem(this.opts.series, index); + if (seriesData.length !== 0) { + var _getMixToolTipData = getMixToolTipData(seriesData, this.opts.chartData.calPoints, index, this.opts.categories,option), + textList = _getMixToolTipData.textList, + offset = _getMixToolTipData.offset; + offset.y = _touches$.y; + opts.tooltip = { + textList: option.textList?option.textList:textList, + offset: offset, + option: option, + index: index + }; + } + } + drawCharts.call(this, opts.type, opts, this.config, this.context); + } + if (this.opts.type === 'candle') { + var index = option.index==undefined? this.getCurrentDataIndex(e):option.index ; + if (index > -1) { + var currentOffset = this.scrollOption.currentOffset; + var opts = assign({}, this.opts, { + _scrollDistance_: currentOffset, + animation: false + }); + var seriesData = getSeriesDataItem(this.opts.series, index); + if (seriesData.length !== 0) { + var _getToolTipData = getCandleToolTipData(this.opts.series[0].data, seriesData, this.opts.chartData.calPoints, + index, this.opts.categories, this.opts.extra.candle, option), + textList = _getToolTipData.textList, + offset = _getToolTipData.offset; + offset.y = _touches$.y; + opts.tooltip = { + textList: option.textList?option.textList:textList, + offset: offset, + option: option, + index: index + }; + } + } + drawCharts.call(this, opts.type, opts, this.config, this.context); + } + if (this.opts.type === 'pie' || this.opts.type === 'ring' || this.opts.type === 'rose'||this.opts.type === 'funnel' ) { + var index = option.index==undefined? this.getCurrentDataIndex(e):option.index ; + if (index > -1) { + var currentOffset = this.scrollOption.currentOffset; + var opts = assign({}, this.opts, { + _scrollDistance_: currentOffset, + animation: false + }); + var seriesData = this.opts._series_[index]; + var textList = [{ + text: option.format ? option.format(seriesData) : seriesData.name + ': ' + seriesData.data, + color: seriesData.color + }]; + var offset = { + x: _touches$.x, + y: _touches$.y + }; + opts.tooltip = { + textList: option.textList?option.textList:textList, + offset: offset, + option: option, + index: index + }; + } + drawCharts.call(this, opts.type, opts, this.config, this.context); + } + if (this.opts.type === 'map'||this.opts.type === 'word') { + var index = option.index==undefined? this.getCurrentDataIndex(e):option.index ; + if (index > -1) { + var currentOffset = this.scrollOption.currentOffset; + var opts = assign({}, this.opts, { + _scrollDistance_: currentOffset, + animation: false + }); + var seriesData = this.opts._series_[index]; + var textList = [{ + text: option.format ? option.format(seriesData) : seriesData.properties.name ,color: seriesData.color + }]; + var offset = { + x: _touches$.x, + y: _touches$.y + }; + opts.tooltip = { + textList: option.textList?option.textList:textList, + offset: offset, + option: option, + index: index + }; + } + opts.updateData = false; + drawCharts.call(this, opts.type, opts, this.config, this.context); + } + if (this.opts.type === 'radar') { + var index = option.index==undefined? this.getCurrentDataIndex(e):option.index ; + if (index > -1) { + var currentOffset = this.scrollOption.currentOffset; + var opts = assign({}, this.opts, { + _scrollDistance_: currentOffset, + animation: false + }); + var seriesData = getSeriesDataItem(this.opts.series, index); + if (seriesData.length !== 0) { + var textList = seriesData.map(function(item) { + return { + text: option.format ? option.format(item) : item.name + ': ' + item.data,color: item.color + }; + }); + var offset = { + x: _touches$.x, + y: _touches$.y + }; + opts.tooltip = { + textList: option.textList?option.textList:textList, + offset: offset, + option: option, + index: index + }; + } + } + drawCharts.call(this, opts.type, opts, this.config, this.context); + } +}; + +Charts.prototype.translate = function(distance) { + this.scrollOption = { + currentOffset: distance, + startTouchX: distance, + distance: 0, + lastMoveTime: 0 + }; + let opts = assign({}, this.opts, { + _scrollDistance_: distance, + animation: false + }); + drawCharts.call(this, this.opts.type, opts, this.config, this.context); +}; + +Charts.prototype.scrollStart = function(e) { + var touches = null; + if (e.changedTouches) { + touches = e.changedTouches[0]; + } else { + touches = e.mp.changedTouches[0]; + } + var _touches$ = getTouches(touches, this.opts, e); + if (touches && this.opts.enableScroll === true) { + this.scrollOption.startTouchX = _touches$.x; + } +}; + +Charts.prototype.scroll = function(e) { + if (this.scrollOption.lastMoveTime === 0) { + this.scrollOption.lastMoveTime = Date.now(); + } + let Limit = this.opts.extra.touchMoveLimit || 20; + let currMoveTime = Date.now(); + let duration = currMoveTime - this.scrollOption.lastMoveTime; + if (duration < Math.floor(1000 / Limit)) return; + this.scrollOption.lastMoveTime = currMoveTime; + var touches = null; + if (e.changedTouches) { + touches = e.changedTouches[0]; + } else { + touches = e.mp.changedTouches[0]; + } + if (touches && this.opts.enableScroll === true) { + var _touches$ = getTouches(touches, this.opts, e); + var _distance; + _distance = _touches$.x - this.scrollOption.startTouchX; + var currentOffset = this.scrollOption.currentOffset; + var validDistance = calValidDistance(this,currentOffset + _distance, this.opts.chartData, this.config, this.opts); + this.scrollOption.distance = _distance = validDistance - currentOffset; + var opts = assign({}, this.opts, { + _scrollDistance_: currentOffset + _distance, + animation: false + }); + drawCharts.call(this, opts.type, opts, this.config, this.context); + return currentOffset + _distance; + } +}; + +Charts.prototype.scrollEnd = function(e) { + if (this.opts.enableScroll === true) { + var _scrollOption = this.scrollOption, + currentOffset = _scrollOption.currentOffset, + distance = _scrollOption.distance; + this.scrollOption.currentOffset = currentOffset + distance; + this.scrollOption.distance = 0; + } +}; +if (typeof module === "object" && typeof module.exports === "object") { + module.exports = Charts; + //export default Charts;//建议使用nodejs的module导出方式,如报错请使用export方式导出 +} diff --git a/js_sdk/u-charts/u-charts.vue b/js_sdk/u-charts/u-charts.vue new file mode 100644 index 0000000..daa8422 --- /dev/null +++ b/js_sdk/u-charts/u-charts.vue @@ -0,0 +1,443 @@ +<template> + <view class="chartsview" :style="{ background: background }"> + <view v-show="mixinDatacomLoading"><view class="uni-icons-spinner-cycle">Loading...</view></view> + <view v-show="mixinDatacomErrorMessage"> + <view class="uni-icons-info-filled">{{ mixinDatacomErrorMessage }}</view> + </view> + <canvas + :id="canvasId" + :canvas-id="canvasId" + :style="{ width: cWidth + 'px', height: cHeight + 'px' }" + :type="canvas2d?'2d':''" + @tap="tap" + @cilck="tap" + @touch="tap" + @touchstart="touchStart" + @touchmove="touchMove" + @touchend="touchEnd" + @mousemove="mouseMove" + @mousedown="mousedown" + @mouseup="mouseup" + @error="error" + v-show="showchart" + /> + </view> +</template> + +<script> +import qiunCharts from '../../js_sdk/u-charts/u-charts.js'; +import config from '../../js_sdk/u-charts/config.js'; +var canvases = {}; +var options = {}; +var chartdom = null; +export default { + mixins: [uniCloud.mixinDatacom], + props: { + type: { + type: String, + default: null + }, + canvasId: { + type: String, + default: "uchartsid" + }, + canvas2d: { + type: Boolean, + default: false + }, + pixelRatio: { + type: Number, + default: 1 + }, + background: { + type: String, + default: 'none' + }, + animation:{ + type: Boolean, + default: true + }, + chartData: { + type: Object, + default() { + return { + categories: [], + series: [] + }; + } + }, + opts: { + type: Object, + default: () => ({}) + }, + inScrollView:{ + type: Boolean, + default: false + }, + show:{ + type: Boolean, + default: false + } + }, + data() { + return { + cWidth: 375, + cHeight: 250, + showchart: false, + defaultOpts: {} + }; + }, + mounted() { + if(this.canvasId=='uchartsid'){ + console.warn("注意:请在uCharts组件传入canvasId,以免单页多图产生图表错乱!") + } + if (this.type && config.type.includes(this.type)) { + this.defaultOpts = Object.assign({},config[this.type]) + this.load() + } else { + this.mixinDatacomLoading = false + this.showchart = false + this.mixinDatacomErrorMessage = '参数错误:props参数中type类型不正确' + } + uni.onWindowResize(res => { + this.init() + }) + }, + watch: { + chartData(val, oldval) { + if (!this.type || !config.type.includes(this.type)) { + this.mixinDatacomLoading = false + this.showchart = false + this.mixinDatacomErrorMessage = '参数错误:props参数中type不正确' + return + } + if (typeof val === 'object') { + if (this.collection != '') { + if (config.categories.includes(this.type) && val.categories.length == 0 ) { + this.mixinDatacomLoading = false + this.showchart = false + this.mixinDatacomErrorMessage = '数据错误:chartData中缺少categories' + } else { + this.mixinDatacomLoading = false + this.mixinDatacomErrorMessage = null + this.$nextTick(function() { + this.init() + }) + } + } else { + this.mixinDatacomLoading = false + this.mixinDatacomErrorMessage = null + this.$nextTick(function() { + this.init() + }); + } + } else { + this.mixinDatacomLoading = false + this.showchart = false + this.mixinDatacomErrorMessage = '参数错误:chartData数据类型错误' + } + }, + show(val, oldval) { + if (val) { + if (this.collection != '') { + if (config.categories.includes(this.type) && this.chartData.categories.length == 0 ) { + this.mixinDatacomLoading = false + this.showchart = false + this.mixinDatacomErrorMessage = '数据错误:chartData中缺少categories' + } else { + this.mixinDatacomLoading = false + this.mixinDatacomErrorMessage = null + this.$nextTick(function() { + this.init() + }) + } + } else { + this.mixinDatacomLoading = false + this.mixinDatacomErrorMessage = null + this.$nextTick(function() { + this.init() + }); + } + } + } + }, + methods: { + load() { + if (this.mixinDatacomLoading == true) { + return + } + this.mixinDatacomLoading = true + if (this.collection != '') { + this.mixinDatacomGet() + .then(res => { + this.mixinDatacomLoading = false + const { data, count } = res.result + this.mixinDatacomResData = data + if (config.categories.includes(this.type) && this.chartData.categories.length == 0) { + this.mixinDatacomLoading = false + this.showchart = false + this.mixinDatacomErrorMessage = '数据错误:chartData中缺少categories' + } else { + this.init() + } + }) + .catch(err => { + if (this.collection == '') { + if (this.chartData.series.length > 0) { + this.mixinDatacomLoading = false + this.init() + } + } else { + this.mixinDatacomLoading = false + this.showchart = false + this.mixinDatacomErrorMessage = '请求错误:' + err + } + }); + }else{ + if (this.chartData.series.length > 0) { + this.mixinDatacomLoading = false + this.init() + } + } + }, + onMixinDatacomPropsChange(needReset, changed) { + if (needReset) { + if(options[this.canvasId] !== undefined){ + options[this.canvasId].context.clearRect(0, 0, options[this.canvasId].width, options[this.canvasId].height) + options[this.canvasId].context.draw() + } + this.showchart = false; + this.load() + } + }, + cloudDataInit() { + let temp = {} + let series=[] + let resdata = this.mixinDatacomResData + let categories = options[this.canvasId].categories + resdata.map(function (item, index) { + if(item.type!=undefined && !temp[item.type]){ + series.push({name:item.type,data:[]}) + temp[item.type] = true; + } + }) + if(series.length==0){ + let seriesname="默认分组" + if(this.chartData.series.length>0){ + seriesname=this.chartData.series[0].name + } + series=[{name:seriesname,data:[]}] + for (let j = 0; j < categories.length; j++) { + let seriesdata = 0; + for (let i = 0; i < resdata.length; i++) { + if(resdata[i].label == categories[j]){ + seriesdata = resdata[i].value + } + } + series[0].data.push(seriesdata) + } + }else{ + for (let k = 0; k < series.length; k++) { + if(categories.length>0){ + for (let j = 0; j < categories.length; j++) { + let seriesdata = 0; + for (let i = 0; i < resdata.length; i++) { + if(series[k].name == resdata[i].type && resdata[i].label == categories[j]){ + seriesdata = resdata[i].value + } + } + series[k].data.push(seriesdata) + } + }else{ + for (let i = 0; i < resdata.length; i++) { + if(series[k].name == resdata[i].type){ + series[k].data.push(resdata[i].type) + } + } + } + } + } + return series; + }, + init() { + chartdom = uni.createSelectorQuery().in(this).select('.chartsview'); + chartdom.boundingClientRect(data => { + if(data.width>0 && data.height>0){ + this.cWidth = data.width + this.cHeight = data.height + options[this.canvasId] = Object.assign(this.defaultOpts, this.opts) + options[this.canvasId].canvasId = this.canvasId + options[this.canvasId].categories = this.chartData.categories + if (this.collection == '') { + options[this.canvasId].series = this.chartData.series + }else{ + options[this.canvasId].series = this.cloudDataInit() + } + options[this.canvasId].background = this.background == 'none' ? '#FFFFFF' : this.background + options[this.canvasId].pixelRatio = this.pixelRatio + options[this.canvasId].animation = this.animation + options[this.canvasId].width = data.width * this.pixelRatio + options[this.canvasId].height = data.height * this.pixelRatio + if(this.canvas2d){ + options[this.canvasId].canvas2d = this.canvas2d + const query = uni.createSelectorQuery().in(this) + query.select('#'+this.canvasId) + .fields({ node: true, size: true }) + .exec((res) => { + const canvas = res[0].node + const ctx = canvas.getContext('2d') + options[this.canvasId].context = ctx + canvas.width = data.width * this.pixelRatio + canvas.height = data.height * this.pixelRatio + canvas._width = data.width * this.pixelRatio + canvas._height = data.height * this.pixelRatio + if(!this.mixinDatacomLoading){ + this.showchart = true + } + this.newChart() + }) + }else{ + options[this.canvasId].context = uni.createCanvasContext(this.canvasId,this) + if(!this.mixinDatacomLoading){ + this.showchart = true + } + this.newChart() + } + }else{ + this.mixinDatacomLoading = false + this.showchart = false + this.mixinDatacomErrorMessage = '布局错误:请尝试props绑定show状态' + } + }).exec(); + }, + newChart() { + canvases[this.canvasId] = new qiunCharts(options[this.canvasId]) + canvases[this.canvasId].addEventListener('renderComplete', () => { + this.$emit("complete",{complete:true,charts:canvases[this.canvasId]}) + }); + canvases[this.canvasId].addEventListener('scrollLeft', () => { + this.$emit("scrollLeft",{scrollLeft:true,charts:canvases[this.canvasId]}) + }); + canvases[this.canvasId].addEventListener('scrollRight', () => { + this.$emit("scrollRight",{scrollRight:true,charts:canvases[this.canvasId]}) + }); + }, + tap(e) { + let currentIndex=null + let legendIndex=null + if(this.inScrollView){ + e.type = 'click' + } + if (e.type == 'click') { + chartdom = uni.createSelectorQuery().in(this).select('.chartsview') + chartdom.boundingClientRect(data => { + e.changedTouches.unshift({ x: e.detail.x - data.left, y: e.detail.y - data.top }) + e.mp.changedTouches.unshift({ x: e.detail.x - data.left, y: e.detail.y - data.top }) + canvases[this.canvasId].touchLegend(e) + canvases[this.canvasId].showToolTip(e, { + format: function(item, category) { + if(category){ + return category + ' ' + item.name + ':' + item.data + }else{ + return item.name + ':' + item.data + } + } + }) + currentIndex=canvases[this.canvasId].getCurrentDataIndex(e) + legendIndex=canvases[this.canvasId].getLegendDataIndex(e) + this.$emit("getIndex",{event:e,currentIndex:currentIndex,legendIndex:legendIndex,charts:canvases[this.canvasId]}) + }).exec(); + } else { + e.changedTouches.unshift({ x: e.detail.x - e.currentTarget.offsetLeft, y: e.detail.y - e.currentTarget.offsetTop }) + e.mp.changedTouches.unshift({ x: e.detail.x - e.currentTarget.offsetLeft, y: e.detail.y - e.currentTarget.offsetTop }) + canvases[this.canvasId].touchLegend(e) + canvases[this.canvasId].showToolTip(e, { + format: function(item, category) { + if(category){ + return category + ' ' + item.name + ':' + item.data + }else{ + return item.name + ':' + item.data + } + } + }); + currentIndex=canvases[this.canvasId].getCurrentDataIndex(e) + legendIndex=canvases[this.canvasId].getLegendDataIndex(e) + this.$emit("getIndex",{event:e,currentIndex:currentIndex,legendIndex:legendIndex,charts:canvases[this.canvasId]}) + } + }, + touchStart(e) { + canvases[this.canvasId].scrollStart(e) + this.$emit("touchStart",{event:e,charts:canvases[this.canvasId]}) + }, + touchMove(e) { + canvases[this.canvasId].scroll(e) + this.$emit("touchMove",{event:e,charts:canvases[this.canvasId]}) + }, + touchEnd(e) { + canvases[this.canvasId].scrollEnd(e) + this.$emit("touchEnd",{event:e,charts:canvases[this.canvasId]}) + }, + mousedown(e){ + if(options[this.canvasId].enableScroll){ + chartdom = uni.createSelectorQuery().in(this).select('.chartsview') + chartdom.boundingClientRect(data => { + e.changedTouches.unshift({ x: e.pageX - data.left, y: e.clientY-data.top }) + e.mp.changedTouches.unshift({ x: e.pageX - data.left, y: e.clientY-data.top }) + canvases[this.canvasId].scrollStart(e) + options[this.canvasId].mousedown=true; + this.$emit("touchStart",{event:e,charts:canvases[this.canvasId]}) + }).exec(); + } + }, + mouseMove(e) { + if (options[this.canvasId].series.length > 0) { + chartdom = uni.createSelectorQuery().in(this).select('.chartsview') + chartdom.boundingClientRect(data => { + e.changedTouches.unshift({ x: e.pageX - data.left, y: e.clientY-data.top }) + e.mp.changedTouches.unshift({ x: e.pageX - data.left, y: e.clientY-data.top }) + if(options[this.canvasId].enableScroll && options[this.canvasId].mousedown){ + canvases[this.canvasId].scroll(e) + this.$emit("touchMove",{event:e,charts:canvases[this.canvasId]}) + }else{ + canvases[this.canvasId].showToolTip(e, { + format: function(item, category) { + if(category){ + return category + ' ' + item.name + ':' + item.data + }else{ + return item.name + ':' + item.data + } + } + }); + } + }).exec() + } + }, + mouseup(e){ + if(options[this.canvasId].enableScroll){ + chartdom = uni.createSelectorQuery().in(this).select('.chartsview') + chartdom.boundingClientRect(data => { + e.changedTouches.unshift({ x: e.pageX - data.left, y: e.clientY-data.top }) + e.mp.changedTouches.unshift({ x: e.pageX - data.left, y: e.clientY-data.top }) + canvases[this.canvasId].scrollEnd(e) + options[this.canvasId].mousedown=false; + this.$emit("touchEnd",{event:e,charts:canvases[this.canvasId]}) + }).exec(); + } + }, + error(e) { + console.log(e) + } + } +}; +</script> + +<style scoped> +.chartsview { + width: 100%; + height: 100%; + display: flex; + flex: 1; + justify-content: center; + align-items: center; +} +</style> diff --git a/main.js b/main.js new file mode 100644 index 0000000..a372cec --- /dev/null +++ b/main.js @@ -0,0 +1,27 @@ +import Vue from 'vue' +import App from './App' +import store from './store' +import './static/font-awesome/font-awesome.css' +import nothing from './util/nothing' +import AppContext from './util/AppContext' +import Env from './util/Env' +import base from './util/base.js' +import './css/uni.css' +import './static/iconfont/iconfont.css' +Vue.config.productionTip = false +Vue.prototype.$store = store +Vue.prototype.$nothing = nothing +Vue.prototype.$AppContext = AppContext +Vue.prototype.$Env = Env +Vue.prototype.$base = base +App.mpType = 'app' +const app = new Vue({ + store, + nothing, + AppContext, + ...App, + mounted() { + AppContext.initialize(this) + } +}) +app.$mount() \ No newline at end of file diff --git a/manifest.json b/manifest.json new file mode 100644 index 0000000..e38462d --- /dev/null +++ b/manifest.json @@ -0,0 +1,118 @@ +{ + "name" : "app_proxy", + "appid" : "__UNI__AB0E0FC", + "description" : "色彩公园代理中心", + "versionName" : "1.0.0", + "versionCode" : "100", + "transformPx" : false, + // 网络超时时间 + "networkTimeout" : { + "request" : 60000, + "connectSocket" : 60000, + "uploadFile" : 60000, + "downloadFile" : 60000 + }, + "app-plus" : { + /* 5+App特有相关 */ + "usingComponents" : true, + "splashscreen" : { + "alwaysShowBeforeRender" : true, + "waiting" : true, + "autoclose" : true, + "delay" : 0 + }, + "modules" : { + "OAuth" : {}, + "Share" : {}, + "Payment" : {} + }, + /* 模块配置 */ + "distribute" : { + /* 应用发布信息 */ + "android" : { + /* android打包配置 */ + "permissions" : [ + "<uses-feature android:name=\"android.hardware.camera\"/>", + "<uses-feature android:name=\"android.hardware.camera.autofocus\"/>", + "<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>", + "<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>", + "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>", + "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>", + "<uses-permission android:name=\"android.permission.CALL_PHONE\"/>", + "<uses-permission android:name=\"android.permission.CAMERA\"/>", + "<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>", + "<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>", + "<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>", + "<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>", + "<uses-permission android:name=\"android.permission.INTERNET\"/>", + "<uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\"/>", + "<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>", + "<uses-permission android:name=\"android.permission.READ_CONTACTS\"/>", + "<uses-permission android:name=\"android.permission.READ_LOGS\"/>", + "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>", + "<uses-permission android:name=\"android.permission.RECORD_AUDIO\"/>", + "<uses-permission android:name=\"android.permission.VIBRATE\"/>", + "<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>", + "<uses-permission android:name=\"android.permission.WRITE_CONTACTS\"/>", + "<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"/>", + "<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>" + ] + }, + "ios" : {}, + /* ios打包配置 */ + "sdkConfigs" : { + "oauth" : { + "weixin" : { + "appid" : "wxd42f41a5f4efd7cb" + } + }, + "maps" : {}, + "share" : { + "weixin" : { + "appid" : "wxd42f41a5f4efd7cb" + } + }, + "push" : {}, + "payment" : { + "weixin" : { + "appid" : "wxd42f41a5f4efd7cb" + } + } + } + } + }, + /* SDK配置 */ + "quickapp" : {}, + /* 快应用特有相关 */ + "mp-weixin" : { + /* 小程序特有相关 */ + "appid" : "wx9cd3934f286f3d71", + "setting" : { + "urlCheck" : false, + "postcss" : false, + "checkSiteMap" : false + }, + "usingComponents" : true, + "permission" : { + "scope.userLocation" : { + "desc" : "获取当前位置" + } + } + }, + "splashscreen" : { + "alwaysShowBeforeRender" : false, + "waiting" : true, + "autoclose" : false, + "delay" : 0 + }, + "h5" : { + "devServer" : { + "port" : 8088 + }, + "title" : "giteebox商城", + "router" : { + "base" : "" + }, + "domain" : "https://mall.onezxkj.com" + } +} diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..757ae1e --- /dev/null +++ b/package-lock.json @@ -0,0 +1,12470 @@ +{ + "name": "shoppingMall", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "shoppingMall", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "browserslist": "^4.12.0", + "build": "^0.1.4", + "caniuse-lite": "^1.0.30001051", + "echarts": "^4.9.0", + "flyio": "^0.6.14", + "font-awesome": "^4.7.0", + "js-base64": "^2.6.4", + "jssha": "^2.3.1", + "jweixin-module": "^1.4.1", + "moment": "^2.24.0", + "mpvue-echarts": "^0.3.2", + "qs": "^6.9.0", + "string-random": "^0.1.3", + "unifly": "^1.0.2", + "vuex": "^3.1.0" + }, + "devDependencies": { + "@types/js-base64": "^3.3.1", + "webpack": "^3.12.0", + "webpack-dev-server": "^2.11.5" + } + }, + "node_modules/@types/js-base64": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@types/js-base64/-/js-base64-3.3.1.tgz", + "integrity": "sha512-Zw33oQNAvDdAN9b0IE5stH0y2MylYvtU7VVTKEJPxhyM2q57CVaNJhtJW258ah24NRtaiA23tptUmVn3dmTKpw==", + "deprecated": "This is a stub types definition. js-base64 provides its own type definitions, so you do not need this installed.", + "dev": true, + "dependencies": { + "js-base64": "*" + } + }, + "node_modules/accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dev": true, + "dependencies": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "5.7.4", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", + "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-dynamic-import": { + "version": "2.0.2", + "resolved": "http://r.cnpmjs.org/acorn-dynamic-import/download/acorn-dynamic-import-2.0.2.tgz", + "integrity": "sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=", + "dev": true, + "dependencies": { + "acorn": "^4.0.3" + } + }, + "node_modules/acorn-dynamic-import/node_modules/acorn": { + "version": "4.0.13", + "resolved": "http://r.cnpmjs.org/acorn/download/acorn-4.0.13.tgz", + "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ajv": { + "version": "6.10.0", + "resolved": "http://registry.npm.taobao.org/ajv/download/ajv-6.10.0.tgz", + "integrity": "sha1-kNDVRDnaWHzX6EO/twRfUL0ivfE=", + "dependencies": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "node_modules/ajv-keywords": { + "version": "3.4.1", + "resolved": "http://r.cnpmjs.org/ajv-keywords/download/ajv-keywords-3.4.1.tgz", + "integrity": "sha1-75FuJxxkrBIXH9g4TqrmsjRYVNo=", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/align-text": { + "version": "0.1.4", + "resolved": "http://r.cnpmjs.org/align-text/download/align-text-0.1.4.tgz", + "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2", + "longest": "^1.0.1", + "repeat-string": "^1.5.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/align-text/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-html": { + "version": "0.0.7", + "resolved": "http://r.cnpmjs.org/ansi-html/download/ansi-html-0.0.7.tgz", + "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", + "dev": true, + "engines": [ + "node >= 0.8.0" + ], + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "http://r.cnpmjs.org/ansi-regex/download/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/anymatch": { + "version": "2.0.0", + "resolved": "http://r.cnpmjs.org/anymatch/download/anymatch-2.0.0.tgz", + "integrity": "sha1-vLJLTzeTTZqnrBe0ra+J58du8us=", + "dev": true, + "dependencies": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "node_modules/anymatch/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "http://r.cnpmjs.org/normalize-path/download/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-diff": { + "version": "4.0.0", + "resolved": "http://r.cnpmjs.org/arr-diff/download/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-flatten": { + "version": "1.1.0", + "resolved": "http://r.cnpmjs.org/arr-flatten/download/arr-flatten-1.1.0.tgz", + "integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-union": { + "version": "3.1.0", + "resolved": "http://r.cnpmjs.org/arr-union/download/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-find-index": { + "version": "1.0.2", + "resolved": "http://r.cnpmjs.org/array-find-index/download/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "dev": true + }, + "node_modules/array-includes": { + "version": "3.0.3", + "resolved": "http://r.cnpmjs.org/array-includes/download/array-includes-3.0.3.tgz", + "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", + "dev": true, + "dependencies": { + "define-properties": "^1.1.2", + "es-abstract": "^1.7.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/array-union": { + "version": "1.0.2", + "resolved": "http://r.cnpmjs.org/array-union/download/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "dependencies": { + "array-uniq": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-uniq": { + "version": "1.0.3", + "resolved": "http://r.cnpmjs.org/array-uniq/download/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-unique": { + "version": "0.3.2", + "resolved": "http://r.cnpmjs.org/array-unique/download/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/asn1": { + "version": "0.2.4", + "resolved": "http://registry.npm.taobao.org/asn1/download/asn1-0.2.4.tgz", + "integrity": "sha1-jSR136tVO7M+d7VOWeiAu4ziMTY=", + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/asn1.js": { + "version": "4.10.1", + "resolved": "http://r.cnpmjs.org/asn1.js/download/asn1.js-4.10.1.tgz", + "integrity": "sha1-ucK/WAXx5kqt7tbfOiv6+1pz9aA=", + "dev": true, + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/assert": { + "version": "1.5.0", + "resolved": "http://r.cnpmjs.org/assert/download/assert-1.5.0.tgz", + "integrity": "sha1-VcEJqvbgrv2z3EtxJAxwv1dLGOs=", + "dev": true, + "dependencies": { + "object-assign": "^4.1.1", + "util": "0.10.3" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/assert-plus/download/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/assert/node_modules/inherits": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/inherits/download/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + }, + "node_modules/assert/node_modules/util": { + "version": "0.10.3", + "resolved": "http://r.cnpmjs.org/util/download/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "dependencies": { + "inherits": "2.0.1" + } + }, + "node_modules/assign-symbols": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/assign-symbols/download/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/async": { + "version": "2.6.3", + "resolved": "http://r.cnpmjs.org/async/download/async-2.6.3.tgz", + "integrity": "sha1-1yYl4jRKNlbjo61Pp0n6gymdgv8=", + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/async-each": { + "version": "1.0.3", + "resolved": "http://r.cnpmjs.org/async-each/download/async-each-1.0.3.tgz", + "integrity": "sha1-tyfb+H12UWAvBvTUrDh/R9kbDL8=", + "dev": true + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "http://registry.npm.taobao.org/asynckit/download/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "node_modules/atob": { + "version": "2.1.2", + "resolved": "http://r.cnpmjs.org/atob/download/atob-2.1.2.tgz", + "integrity": "sha1-bZUX654DDSQ2ZmZR6GvZ9vE1M8k=", + "dev": true, + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "http://registry.npm.taobao.org/aws-sign2/download/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.8.0", + "resolved": "http://registry.npm.taobao.org/aws4/download/aws4-1.8.0.tgz", + "integrity": "sha1-8OAD2cqef1nHpQiUXXsu+aBKVC8=" + }, + "node_modules/balanced-match": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/balanced-match/download/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "node_modules/base": { + "version": "0.11.2", + "resolved": "http://r.cnpmjs.org/base/download/base-0.11.2.tgz", + "integrity": "sha1-e95c7RRbbVUakNuH+DxVi060io8=", + "dev": true, + "dependencies": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/define-property": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/define-property/download/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "http://r.cnpmjs.org/is-descriptor/download/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base64-js": { + "version": "1.3.1", + "resolved": "http://r.cnpmjs.org/base64-js/download/base64-js-1.3.1.tgz", + "integrity": "sha1-WOzoy3XdB+ce0IxzarxfrE2/jfE=", + "dev": true + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "http://r.cnpmjs.org/batch/download/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "dev": true + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/bcrypt-pbkdf/download/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "http://r.cnpmjs.org/big.js/download/big.js-5.2.2.tgz", + "integrity": "sha1-ZfCvOC9Xi83HQr2cKB6cstd2gyg=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "1.13.1", + "resolved": "http://r.cnpmjs.org/binary-extensions/download/binary-extensions-1.13.1.tgz", + "integrity": "sha1-WYr+VHVbKGilMw0q/51Ou1Mgm2U=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npm.taobao.org/bindings/download/bindings-1.5.0.tgz", + "integrity": "sha1-EDU8npRTNLwFEabZCzj7x8nFBN8=", + "dev": true, + "optional": true, + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/bn.js": { + "version": "4.11.8", + "resolved": "http://r.cnpmjs.org/bn.js/download/bn.js-4.11.8.tgz", + "integrity": "sha1-LN4J617jQfSEdGuwMJsyU7GxRC8=", + "dev": true + }, + "node_modules/body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "dev": true, + "dependencies": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/bonjour": { + "version": "3.5.0", + "resolved": "http://r.cnpmjs.org/bonjour/download/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "dev": true, + "dependencies": { + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "2.3.2", + "resolved": "http://r.cnpmjs.org/braces/download/braces-2.3.2.tgz", + "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=", + "dev": true, + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "http://r.cnpmjs.org/brorand/download/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true + }, + "node_modules/browserify-aes": { + "version": "1.2.0", + "resolved": "http://r.cnpmjs.org/browserify-aes/download/browserify-aes-1.2.0.tgz", + "integrity": "sha1-Mmc0ZC9APavDADIJhTu3CtQo70g=", + "dev": true, + "dependencies": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/browserify-cipher": { + "version": "1.0.1", + "resolved": "http://r.cnpmjs.org/browserify-cipher/download/browserify-cipher-1.0.1.tgz", + "integrity": "sha1-jWR0wbhwv9q807z8wZNKEOlPFfA=", + "dev": true, + "dependencies": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "node_modules/browserify-des": { + "version": "1.0.2", + "resolved": "http://r.cnpmjs.org/browserify-des/download/browserify-des-1.0.2.tgz", + "integrity": "sha1-OvTx9Zg5QDVy8cZiBDdfen9wPpw=", + "dev": true, + "dependencies": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/browserify-rsa": { + "version": "4.0.1", + "resolved": "http://r.cnpmjs.org/browserify-rsa/download/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "dev": true, + "dependencies": { + "bn.js": "^4.1.0", + "randombytes": "^2.0.1" + } + }, + "node_modules/browserify-sign": { + "version": "4.0.4", + "resolved": "http://r.cnpmjs.org/browserify-sign/download/browserify-sign-4.0.4.tgz", + "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", + "dev": true, + "dependencies": { + "bn.js": "^4.1.1", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.2", + "elliptic": "^6.0.0", + "inherits": "^2.0.1", + "parse-asn1": "^5.0.0" + } + }, + "node_modules/browserify-zlib": { + "version": "0.2.0", + "resolved": "http://r.cnpmjs.org/browserify-zlib/download/browserify-zlib-0.2.0.tgz", + "integrity": "sha1-KGlFnZqjviRf6P4sofRuLn9U1z8=", + "dev": true, + "dependencies": { + "pako": "~1.0.5" + } + }, + "node_modules/browserslist": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.12.0.tgz", + "integrity": "sha512-UH2GkcEDSI0k/lRkuDSzFl9ZZ87skSy9w2XAn1MsZnL+4c4rqbBd3e82UWHbYDpztABrPBhZsTEeuxVfHppqDg==", + "dependencies": { + "caniuse-lite": "^1.0.30001043", + "electron-to-chromium": "^1.3.413", + "node-releases": "^1.1.53", + "pkg-up": "^2.0.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "funding": { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + }, + "node_modules/buffer": { + "version": "4.9.1", + "resolved": "http://r.cnpmjs.org/buffer/download/buffer-4.9.1.tgz", + "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "deprecated": "This version of 'buffer' is out-of-date. You must update to v4.9.2 or newer", + "dev": true, + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "node_modules/buffer-indexof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", + "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", + "dev": true + }, + "node_modules/buffer-xor": { + "version": "1.0.3", + "resolved": "http://r.cnpmjs.org/buffer-xor/download/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true + }, + "node_modules/build": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/build/-/build-0.1.4.tgz", + "integrity": "sha1-cH/gJv/O3crL/c3zVur9pk8VEEY=", + "dependencies": { + "cssmin": "0.3.x", + "jsmin": "1.x", + "jxLoader": "*", + "moo-server": "*", + "promised-io": "*", + "timespan": "2.x", + "uglify-js": "1.x", + "walker": "1.x", + "winston": "*", + "wrench": "1.3.x" + }, + "engines": { + "node": ">v0.4.12" + } + }, + "node_modules/build/node_modules/uglify-js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-1.3.5.tgz", + "integrity": "sha1-S1v/+Rhu/7qoiOTJ6UvZ/EyUkp0=", + "bin": { + "uglifyjs": "bin/uglifyjs" + } + }, + "node_modules/builtin-status-codes": { + "version": "3.0.0", + "resolved": "http://r.cnpmjs.org/builtin-status-codes/download/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "dev": true + }, + "node_modules/bytes": { + "version": "3.0.0", + "resolved": "http://r.cnpmjs.org/bytes/download/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cache-base": { + "version": "1.0.1", + "resolved": "http://r.cnpmjs.org/cache-base/download/cache-base-1.0.1.tgz", + "integrity": "sha1-Cn9GQWgxyLZi7jb+TnxZ129marI=", + "dev": true, + "dependencies": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/camelcase": { + "version": "2.1.1", + "resolved": "http://r.cnpmjs.org/camelcase/download/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/camelcase-keys": { + "version": "2.1.0", + "resolved": "http://r.cnpmjs.org/camelcase-keys/download/camelcase-keys-2.1.0.tgz", + "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "dev": true, + "dependencies": { + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001051", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001051.tgz", + "integrity": "sha512-sw8UUnTlRevawTMZKN7vpfwSjCBVoiMPlYd8oT2VwNylyPCBdMAUmLGUApnYYTtIm5JXsQegUAY7GPHqgfDzjw==" + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "http://registry.npm.taobao.org/caseless/download/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "node_modules/center-align": { + "version": "0.1.3", + "resolved": "http://r.cnpmjs.org/center-align/download/center-align-0.1.3.tgz", + "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "dev": true, + "dependencies": { + "align-text": "^0.1.3", + "lazy-cache": "^1.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/chokidar": { + "version": "2.1.8", + "resolved": "http://r.cnpmjs.org/chokidar/download/chokidar-2.1.8.tgz", + "integrity": "sha1-gEs6e2qZNYw8XGHnHYco8EHP+Rc=", + "deprecated": "Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies", + "dev": true, + "dependencies": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + }, + "optionalDependencies": { + "fsevents": "^1.2.7" + } + }, + "node_modules/cipher-base": { + "version": "1.0.4", + "resolved": "http://r.cnpmjs.org/cipher-base/download/cipher-base-1.0.4.tgz", + "integrity": "sha1-h2Dk7MJy9MNjUy+SbYdKriwTl94=", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/class-utils": { + "version": "0.3.6", + "resolved": "http://r.cnpmjs.org/class-utils/download/class-utils-0.3.6.tgz", + "integrity": "sha1-+TNprouafOAv1B+q0MqDAzGQxGM=", + "dev": true, + "dependencies": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/define-property": { + "version": "0.2.5", + "resolved": "http://r.cnpmjs.org/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cliui": { + "version": "3.2.0", + "resolved": "http://r.cnpmjs.org/cliui/download/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, + "dependencies": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + } + }, + "node_modules/code-point-at": { + "version": "1.1.0", + "resolved": "http://r.cnpmjs.org/code-point-at/download/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/collection-visit": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/collection-visit/download/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "dependencies": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/color": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/color/-/color-3.0.0.tgz", + "integrity": "sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w==", + "dependencies": { + "color-convert": "^1.9.1", + "color-string": "^1.5.2" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "http://r.cnpmjs.org/color-convert/download/color-convert-1.9.3.tgz", + "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "http://r.cnpmjs.org/color-name/download/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "node_modules/color-string": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", + "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/colornames": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/colornames/-/colornames-1.1.1.tgz", + "integrity": "sha1-+IiQMGhcfE/54qVZ9Qd+t2qBb5Y=" + }, + "node_modules/colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/colorspace": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.2.tgz", + "integrity": "sha512-vt+OoIP2d76xLhjwbBaucYlNSpPsrJWPlBTtwCpQKIu6/CSMutyzX93O/Do0qzpH3YoHEes8YEFXyZ797rEhzQ==", + "dependencies": { + "color": "3.0.x", + "text-hex": "1.0.x" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npm.taobao.org/combined-stream/download/combined-stream-1.0.8.tgz", + "integrity": "sha1-w9RaizT9cwYxoRCoolIGgrMdWn8=", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/component-emitter": { + "version": "1.3.0", + "resolved": "http://r.cnpmjs.org/component-emitter/download/component-emitter-1.3.0.tgz", + "integrity": "sha1-FuQHD7qK4ptnnyIVhT7hgasuq8A=", + "dev": true + }, + "node_modules/compressible": { + "version": "2.0.17", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.17.tgz", + "integrity": "sha512-BGHeLCK1GV7j1bSmQQAi26X+GgWcTjLr/0tzSvMCl3LH1w1IJ4PFSPoV5316b30cneTziC+B1a+3OjoSUcQYmw==", + "dev": true, + "dependencies": { + "mime-db": ">= 1.40.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "http://r.cnpmjs.org/concat-map/download/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "node_modules/connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/console-browserify": { + "version": "1.2.0", + "resolved": "http://r.cnpmjs.org/console-browserify/download/console-browserify-1.2.0.tgz", + "integrity": "sha1-ZwY871fOts9Jk6KrOlWECujEkzY=", + "dev": true + }, + "node_modules/constants-browserify": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/constants-browserify/download/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true + }, + "node_modules/content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "dev": true, + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "http://r.cnpmjs.org/cookie-signature/download/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true + }, + "node_modules/copy-descriptor": { + "version": "0.1.1", + "resolved": "http://r.cnpmjs.org/copy-descriptor/download/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/core-util-is/download/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "node_modules/create-ecdh": { + "version": "4.0.3", + "resolved": "http://r.cnpmjs.org/create-ecdh/download/create-ecdh-4.0.3.tgz", + "integrity": "sha1-yREbbzMEXEaX8UR4f5JUzcd8Rf8=", + "dev": true, + "dependencies": { + "bn.js": "^4.1.0", + "elliptic": "^6.0.0" + } + }, + "node_modules/create-hash": { + "version": "1.2.0", + "resolved": "http://r.cnpmjs.org/create-hash/download/create-hash-1.2.0.tgz", + "integrity": "sha1-iJB4rxGmN1a8+1m9IhmWvjqe8ZY=", + "dev": true, + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "node_modules/create-hmac": { + "version": "1.1.7", + "resolved": "http://r.cnpmjs.org/create-hmac/download/create-hmac-1.1.7.tgz", + "integrity": "sha1-aRcMeLOrlXFHsriwRXLkfq0iQ/8=", + "dev": true, + "dependencies": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "node_modules/crypto-browserify": { + "version": "3.12.0", + "resolved": "http://r.cnpmjs.org/crypto-browserify/download/crypto-browserify-3.12.0.tgz", + "integrity": "sha1-OWz58xN/A+S45TLFj2mCVOAPgOw=", + "dev": true, + "dependencies": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + }, + "engines": { + "node": "*" + } + }, + "node_modules/cssmin": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/cssmin/-/cssmin-0.3.2.tgz", + "integrity": "sha1-3c5MVHtRCuDVlKjx+/iq+OLFwA0=", + "bin": { + "cssmin": "bin/cssmin" + } + }, + "node_modules/currently-unhandled": { + "version": "0.4.1", + "resolved": "http://r.cnpmjs.org/currently-unhandled/download/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "dev": true, + "dependencies": { + "array-find-index": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/d": { + "version": "1.0.1", + "resolved": "http://r.cnpmjs.org/d/download/d-1.0.1.tgz", + "integrity": "sha1-hpgJU3LVjb7jRv/Qxwk/mfj561o=", + "dev": true, + "dependencies": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "http://registry.npm.taobao.org/dashdash/download/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/debug/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "http://r.cnpmjs.org/decamelize/download/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decode-uri-component": { + "version": "0.2.0", + "resolved": "http://r.cnpmjs.org/decode-uri-component/download/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.0.tgz", + "integrity": "sha512-ZbfWJq/wN1Z273o7mUSjILYqehAktR2NVoSrOukDkU9kg2v/Uv89yU4Cvz8seJeAmtN5oqiefKq8FPuXOboqLw==", + "dev": true, + "dependencies": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + } + }, + "node_modules/define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "dependencies": { + "object-keys": "^1.0.12" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/define-property": { + "version": "2.0.2", + "resolved": "http://r.cnpmjs.org/define-property/download/define-property-2.0.2.tgz", + "integrity": "sha1-1Flono1lS6d+AqgX+HENcCyxbp0=", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "http://r.cnpmjs.org/is-descriptor/download/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/del": { + "version": "3.0.0", + "resolved": "http://r.cnpmjs.org/del/download/del-3.0.0.tgz", + "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", + "dev": true, + "dependencies": { + "globby": "^6.1.0", + "is-path-cwd": "^1.0.0", + "is-path-in-cwd": "^1.0.0", + "p-map": "^1.1.1", + "pify": "^3.0.0", + "rimraf": "^2.2.8" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/del/node_modules/pify": { + "version": "3.0.0", + "resolved": "http://r.cnpmjs.org/pify/download/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/delayed-stream/download/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "1.1.2", + "resolved": "http://r.cnpmjs.org/depd/download/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/des.js": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/des.js/download/des.js-1.0.0.tgz", + "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/destroy": { + "version": "1.0.4", + "resolved": "http://r.cnpmjs.org/destroy/download/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "node_modules/detect-node": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", + "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==", + "dev": true + }, + "node_modules/diagnostics": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/diagnostics/-/diagnostics-1.1.1.tgz", + "integrity": "sha512-8wn1PmdunLJ9Tqbx+Fx/ZEuHfJf4NKSN2ZBj7SJC/OWRWha843+WsTjqMe1B5E3p28jqBlp+mJ2fPVxPyNgYKQ==", + "dependencies": { + "colorspace": "1.1.x", + "enabled": "1.0.x", + "kuler": "1.0.x" + } + }, + "node_modules/diffie-hellman": { + "version": "5.0.3", + "resolved": "http://r.cnpmjs.org/diffie-hellman/download/diffie-hellman-5.0.3.tgz", + "integrity": "sha1-QOjumPVaIUlgcUaSHGPhrl89KHU=", + "dev": true, + "dependencies": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "node_modules/dns-equal": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/dns-equal/download/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", + "dev": true + }, + "node_modules/dns-packet": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", + "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", + "dev": true, + "dependencies": { + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/dns-txt": { + "version": "2.0.2", + "resolved": "http://r.cnpmjs.org/dns-txt/download/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "dev": true, + "dependencies": { + "buffer-indexof": "^1.0.0" + } + }, + "node_modules/domain-browser": { + "version": "1.2.0", + "resolved": "http://r.cnpmjs.org/domain-browser/download/domain-browser-1.2.0.tgz", + "integrity": "sha1-PTH1AZGmdJ3RN1p/Ui6CPULlTto=", + "dev": true, + "engines": { + "node": ">=0.4", + "npm": ">=1.2" + } + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "http://registry.npm.taobao.org/ecc-jsbn/download/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/echarts": { + "version": "4.9.0", + "resolved": "https://registry.npm.taobao.org/echarts/download/echarts-4.9.0.tgz?cache=0&sync_timestamp=1612592564808&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fecharts%2Fdownload%2Fecharts-4.9.0.tgz", + "integrity": "sha1-qbm6oD8Doqcx5jQMVb77V6nhNH0=", + "dependencies": { + "zrender": "4.3.2" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "http://r.cnpmjs.org/ee-first/download/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "node_modules/electron-to-chromium": { + "version": "1.3.427", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.427.tgz", + "integrity": "sha512-/rG5G7Opcw68/Yrb4qYkz07h3bESVRJjUl4X/FrKLXzoUJleKm6D7K7rTTz8V5LUWnd+BbTOyxJX2XprRqHD8A==" + }, + "node_modules/elliptic": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", + "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", + "dev": true, + "dependencies": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + } + }, + "node_modules/emojis-list": { + "version": "2.1.0", + "resolved": "http://r.cnpmjs.org/emojis-list/download/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/enabled": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/enabled/-/enabled-1.0.2.tgz", + "integrity": "sha1-ll9lE9LC0cX0ZStkouM5ZGf8L5M=", + "dependencies": { + "env-variable": "0.0.x" + } + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "http://r.cnpmjs.org/encodeurl/download/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/enhanced-resolve": { + "version": "3.4.1", + "resolved": "http://r.cnpmjs.org/enhanced-resolve/download/enhanced-resolve-3.4.1.tgz", + "integrity": "sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24=", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.4.0", + "object-assign": "^4.0.1", + "tapable": "^0.2.7" + }, + "engines": { + "node": ">=4.3.0 <5.0.0 || >=5.10" + } + }, + "node_modules/enhanced-resolve/node_modules/tapable": { + "version": "0.2.9", + "resolved": "http://r.cnpmjs.org/tapable/download/tapable-0.2.9.tgz", + "integrity": "sha1-ry2LvJsE907hevK02QSPgHrNGKg=", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/env-variable": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/env-variable/-/env-variable-0.0.5.tgz", + "integrity": "sha512-zoB603vQReOFvTg5xMl9I1P2PnHsHQQKTEowsKKD7nseUfJq6UWzK+4YtlWUO1nhiQUxe6XMkk+JleSZD1NZFA==" + }, + "node_modules/errno": { + "version": "0.1.7", + "resolved": "http://r.cnpmjs.org/errno/download/errno-0.1.7.tgz", + "integrity": "sha1-RoTXF3mtOa8Xfj8AeZb3xnyFJhg=", + "dev": true, + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "http://r.cnpmjs.org/error-ex/download/error-ex-1.3.2.tgz", + "integrity": "sha1-tKxAZIEH/c3PriQvQovqihTU8b8=", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.16.0.tgz", + "integrity": "sha512-xdQnfykZ9JMEiasTAJZJdMWCQ1Vm00NBw79/AWi7ELfZuuPCSOMDZbT9mkOfSctVtfhb+sAAzrm+j//GjjLHLg==", + "dev": true, + "dependencies": { + "es-to-primitive": "^1.2.0", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.0", + "is-callable": "^1.1.4", + "is-regex": "^1.0.4", + "object-inspect": "^1.6.0", + "object-keys": "^1.1.1", + "string.prototype.trimleft": "^2.1.0", + "string.prototype.trimright": "^2.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", + "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es5-ext": { + "version": "0.10.52", + "resolved": "http://r.cnpmjs.org/es5-ext/download/es5-ext-0.10.52.tgz", + "integrity": "sha1-uyF3fpGaBCY3Nt7RIKnWZfEOpj8=", + "dev": true, + "dependencies": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.2", + "next-tick": "~1.0.0" + } + }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "http://r.cnpmjs.org/es6-iterator/download/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-map": { + "version": "0.1.5", + "resolved": "http://r.cnpmjs.org/es6-map/download/es6-map-0.1.5.tgz", + "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", + "es6-set": "~0.1.5", + "es6-symbol": "~3.1.1", + "event-emitter": "~0.3.5" + } + }, + "node_modules/es6-set": { + "version": "0.1.5", + "resolved": "http://r.cnpmjs.org/es6-set/download/es6-set-0.1.5.tgz", + "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", + "es6-symbol": "3.1.1", + "event-emitter": "~0.3.5" + } + }, + "node_modules/es6-set/node_modules/es6-symbol": { + "version": "3.1.1", + "resolved": "http://r.cnpmjs.org/es6-symbol/download/es6-symbol-3.1.1.tgz", + "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "node_modules/es6-symbol": { + "version": "3.1.3", + "resolved": "http://r.cnpmjs.org/es6-symbol/download/es6-symbol-3.1.3.tgz", + "integrity": "sha1-utXTwbzawoJp9MszHkMceKxwXRg=", + "dev": true, + "dependencies": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "node_modules/es6-weak-map": { + "version": "2.0.3", + "resolved": "http://r.cnpmjs.org/es6-weak-map/download/es6-weak-map-2.0.3.tgz", + "integrity": "sha1-ttofFswswNm+Q+a9v8Xn383zHVM=", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "http://r.cnpmjs.org/escape-html/download/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "node_modules/escope": { + "version": "3.6.0", + "resolved": "http://r.cnpmjs.org/escope/download/escope-3.6.0.tgz", + "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", + "dev": true, + "dependencies": { + "es6-map": "^0.1.3", + "es6-weak-map": "^2.0.1", + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.2.1", + "resolved": "http://r.cnpmjs.org/esrecurse/download/esrecurse-4.2.1.tgz", + "integrity": "sha1-AHo7n9vCs7uH5IeeoZyS/b05Qs8=", + "dev": true, + "dependencies": { + "estraverse": "^4.1.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "http://r.cnpmjs.org/estraverse/download/estraverse-4.3.0.tgz", + "integrity": "sha1-OYrT88WiSUi+dyXoPRGn3ijNvR0=", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "http://r.cnpmjs.org/etag/download/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/event-emitter": { + "version": "0.3.5", + "resolved": "http://r.cnpmjs.org/event-emitter/download/event-emitter-0.3.5.tgz", + "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", + "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==", + "dev": true + }, + "node_modules/events": { + "version": "3.0.0", + "resolved": "http://r.cnpmjs.org/events/download/events-3.0.0.tgz", + "integrity": "sha1-mgoN+vYok9krh1uPJpjKQRSXPog=", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/eventsource": { + "version": "0.1.6", + "resolved": "http://r.cnpmjs.org/eventsource/download/eventsource-0.1.6.tgz", + "integrity": "sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI=", + "dev": true, + "dependencies": { + "original": ">=0.0.5" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/evp_bytestokey": { + "version": "1.0.3", + "resolved": "http://r.cnpmjs.org/evp_bytestokey/download/evp_bytestokey-1.0.3.tgz", + "integrity": "sha1-f8vbGY3HGVlDLv4ThCaE4FJaywI=", + "dev": true, + "dependencies": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/expand-brackets": { + "version": "2.1.4", + "resolved": "http://r.cnpmjs.org/expand-brackets/download/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "dependencies": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/debug": { + "version": "2.6.9", + "resolved": "http://r.cnpmjs.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/expand-brackets/node_modules/define-property": { + "version": "0.2.5", + "resolved": "http://r.cnpmjs.org/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "dev": true, + "dependencies": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "http://r.cnpmjs.org/array-flatten/download/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/ext": { + "version": "1.1.2", + "resolved": "http://r.cnpmjs.org/ext/download/ext-1.1.2.tgz", + "integrity": "sha1-0dIWyDZBu0y3aEYisGPP9EoZzjU=", + "dev": true, + "dependencies": { + "type": "^2.0.0" + } + }, + "node_modules/ext/node_modules/type": { + "version": "2.0.0", + "resolved": "http://r.cnpmjs.org/type/download/type-2.0.0.tgz", + "integrity": "sha1-Xxb/bvLrRPJgSU2uJxAzspwJqcM=", + "dev": true + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "http://registry.npm.taobao.org/extend/download/extend-3.0.2.tgz", + "integrity": "sha1-+LETa0Bx+9jrFAr/hYsQGewpFfo=" + }, + "node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "http://r.cnpmjs.org/extend-shallow/download/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extend-shallow/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "http://r.cnpmjs.org/is-extendable/download/is-extendable-1.0.1.tgz", + "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob": { + "version": "2.0.4", + "resolved": "http://r.cnpmjs.org/extglob/download/extglob-2.0.4.tgz", + "integrity": "sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM=", + "dev": true, + "dependencies": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/define-property": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/define-property/download/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "http://r.cnpmjs.org/is-descriptor/download/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "http://registry.npm.taobao.org/extsprintf/download/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "engines": [ + "node >=0.6.0" + ] + }, + "node_modules/fast-deep-equal": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/fast-json-stable-stringify/download/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" + }, + "node_modules/fast-safe-stringify": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", + "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==" + }, + "node_modules/faye-websocket": { + "version": "0.10.0", + "resolved": "http://r.cnpmjs.org/faye-websocket/download/faye-websocket-0.10.0.tgz", + "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", + "dev": true, + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/fecha": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-2.3.3.tgz", + "integrity": "sha512-lUGBnIamTAwk4znq5BcqsDaxSmZ9nDVJaij6NvRt/Tg4R69gERA+otPKbS86ROw9nxVMw2/mp1fnaiWqbs6Sdg==" + }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/file-uri-to-path/download/file-uri-to-path-1.0.0.tgz", + "integrity": "sha1-VTp7hEb/b2hDWcRF8eN6BdrMM90=", + "dev": true, + "optional": true + }, + "node_modules/fill-range": { + "version": "4.0.0", + "resolved": "http://r.cnpmjs.org/fill-range/download/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/flyio": { + "version": "0.6.14", + "resolved": "http://registry.npm.taobao.org/flyio/download/flyio-0.6.14.tgz", + "integrity": "sha1-xdg+t6m0/ByRWkY9LqbfznVcLW8=", + "dependencies": { + "request": "^2.85.0" + } + }, + "node_modules/follow-redirects": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.0.tgz", + "integrity": "sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + } + }, + "node_modules/font-awesome": { + "version": "4.7.0", + "resolved": "https://registry.npm.taobao.org/font-awesome/download/font-awesome-4.7.0.tgz", + "integrity": "sha1-j6jPBBGhoxr9B7BtKQK7n8gVoTM=", + "engines": { + "node": ">=0.10.3" + } + }, + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "http://r.cnpmjs.org/for-in/download/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "http://registry.npm.taobao.org/forever-agent/download/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "2.3.3", + "resolved": "http://registry.npm.taobao.org/form-data/download/form-data-2.3.3.tgz", + "integrity": "sha1-3M5SwF9kTymManq5Nr1yTO/786Y=", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/forwarded": { + "version": "0.1.2", + "resolved": "http://r.cnpmjs.org/forwarded/download/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fragment-cache": { + "version": "0.2.1", + "resolved": "http://r.cnpmjs.org/fragment-cache/download/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "dependencies": { + "map-cache": "^0.2.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "http://r.cnpmjs.org/fresh/download/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/fs.realpath/download/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "node_modules/fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npm.taobao.org/fsevents/download/fsevents-1.2.13.tgz", + "integrity": "sha1-8yXLBFVZJCi88Rs4M3DvcOO/zDg=", + "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/get-caller-file": { + "version": "1.0.3", + "resolved": "http://r.cnpmjs.org/get-caller-file/download/get-caller-file-1.0.3.tgz", + "integrity": "sha1-+Xj6TJDR3+f/LWvtoqUV5xO9z0o=", + "dev": true + }, + "node_modules/get-stdin": { + "version": "4.0.1", + "resolved": "http://r.cnpmjs.org/get-stdin/download/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/get-value": { + "version": "2.0.6", + "resolved": "http://r.cnpmjs.org/get-value/download/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "http://registry.npm.taobao.org/getpass/download/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/glob": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.5.tgz", + "integrity": "sha512-J9dlskqUXK1OeTOYBEn5s8aMukWMwWfs+rPTn/jn50Ux4MNXVhubL1wu/j2t+H4NVI+cXEcCaYellqaPVGXNqQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "http://r.cnpmjs.org/glob-parent/download/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/glob-parent/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "http://r.cnpmjs.org/is-glob/download/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/globby": { + "version": "6.1.0", + "resolved": "http://r.cnpmjs.org/globby/download/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "dev": true, + "dependencies": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.3", + "resolved": "http://r.cnpmjs.org/graceful-fs/download/graceful-fs-4.2.3.tgz", + "integrity": "sha1-ShL/G2A3bvCYYsIJPt2Qgyi+hCM=", + "dev": true + }, + "node_modules/handle-thing": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.0.tgz", + "integrity": "sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ==", + "dev": true + }, + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/har-schema/download/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.3", + "resolved": "http://registry.npm.taobao.org/har-validator/download/har-validator-5.1.3.tgz", + "integrity": "sha1-HvievT5JllV2de7ZiTEQ3DUPoIA=", + "deprecated": "this library is no longer supported", + "dependencies": { + "ajv": "^6.5.5", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "2.0.0", + "resolved": "http://r.cnpmjs.org/has-flag/download/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-symbols": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/has-symbols/download/has-symbols-1.0.0.tgz", + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/has-value": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/has-value/download/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "dependencies": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/has-values/download/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/kind-of": { + "version": "4.0.0", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hash-base": { + "version": "3.0.4", + "resolved": "http://r.cnpmjs.org/hash-base/download/hash-base-3.0.4.tgz", + "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "http://r.cnpmjs.org/hmac-drbg/download/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dev": true, + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/hosted-git-info": { + "version": "2.8.5", + "resolved": "http://r.cnpmjs.org/hosted-git-info/download/hosted-git-info-2.8.5.tgz", + "integrity": "sha1-dZz88sTRVq3lmwst+r3cQqa5xww=", + "dev": true + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "http://r.cnpmjs.org/hpack.js/download/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/html-entities": { + "version": "1.2.1", + "resolved": "http://r.cnpmjs.org/html-entities/download/html-entities-1.2.1.tgz", + "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=", + "dev": true, + "engines": [ + "node >= 0.4.0" + ] + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "http://r.cnpmjs.org/http-deceiver/download/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", + "dev": true + }, + "node_modules/http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-errors/node_modules/inherits": { + "version": "2.0.3", + "resolved": "http://r.cnpmjs.org/inherits/download/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "node_modules/http-parser-js": { + "version": "0.4.10", + "resolved": "http://r.cnpmjs.org/http-parser-js/download/http-parser-js-0.4.10.tgz", + "integrity": "sha1-ksnBN0w1CF912zWexWzCV8u5P6Q=", + "dev": true + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-middleware": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", + "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", + "dev": true, + "dependencies": { + "http-proxy": "^1.17.0", + "is-glob": "^4.0.0", + "lodash": "^4.17.11", + "micromatch": "^3.1.10" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/http-signature/download/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/https-browserify": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/https-browserify/download/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "dev": true + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.1.13", + "resolved": "http://r.cnpmjs.org/ieee754/download/ieee754-1.1.13.tgz", + "integrity": "sha1-7BaFWOlaoYH9h9N/VcMrvLZwi4Q=", + "dev": true + }, + "node_modules/import-local": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-1.0.0.tgz", + "integrity": "sha512-vAaZHieK9qjGo58agRBg+bhHX3hoTZU/Oa3GESWLz7t1U62fk63aHuDJJEteXoDeTCcPmUT+z38gkHPZkkmpmQ==", + "dev": true, + "dependencies": { + "pkg-dir": "^2.0.0", + "resolve-cwd": "^2.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/import-local/node_modules/find-up": { + "version": "2.1.0", + "resolved": "http://r.cnpmjs.org/find-up/download/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/import-local/node_modules/locate-path": { + "version": "2.0.0", + "resolved": "http://r.cnpmjs.org/locate-path/download/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/import-local/node_modules/p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/import-local/node_modules/p-locate": { + "version": "2.0.0", + "resolved": "http://r.cnpmjs.org/p-locate/download/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/import-local/node_modules/p-try": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/p-try/download/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/import-local/node_modules/pkg-dir": { + "version": "2.0.0", + "resolved": "http://r.cnpmjs.org/pkg-dir/download/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, + "dependencies": { + "find-up": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/indent-string": { + "version": "2.1.0", + "resolved": "http://r.cnpmjs.org/indent-string/download/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "dev": true, + "dependencies": { + "repeating": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "http://r.cnpmjs.org/inflight/download/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "http://r.cnpmjs.org/inherits/download/inherits-2.0.4.tgz", + "integrity": "sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w=" + }, + "node_modules/internal-ip": { + "version": "1.2.0", + "resolved": "http://r.cnpmjs.org/internal-ip/download/internal-ip-1.2.0.tgz", + "integrity": "sha1-rp+/k7mEh4eF1QqN4bNWlWBYz1w=", + "dev": true, + "dependencies": { + "meow": "^3.3.0" + }, + "bin": { + "internal-ip": "cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/interpret": { + "version": "1.2.0", + "resolved": "http://r.cnpmjs.org/interpret/download/interpret-1.2.0.tgz", + "integrity": "sha1-1QYaYiS+WOgIOYX1AU2EQ1lXYpY=", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/invert-kv": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/invert-kv/download/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ip": { + "version": "1.1.5", + "resolved": "http://r.cnpmjs.org/ip/download/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, + "node_modules/ipaddr.js": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz", + "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "http://r.cnpmjs.org/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-arguments": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", + "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "http://r.cnpmjs.org/is-arrayish/download/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "node_modules/is-binary-path": { + "version": "1.0.1", + "resolved": "http://r.cnpmjs.org/is-binary-path/download/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "dependencies": { + "binary-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "http://r.cnpmjs.org/is-buffer/download/is-buffer-1.1.6.tgz", + "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=", + "dev": true + }, + "node_modules/is-callable": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "http://r.cnpmjs.org/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-date-object": { + "version": "1.0.1", + "resolved": "http://r.cnpmjs.org/is-date-object/download/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "http://r.cnpmjs.org/is-descriptor/download/is-descriptor-0.1.6.tgz", + "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-descriptor/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-5.1.0.tgz", + "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "http://r.cnpmjs.org/is-extendable/download/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "http://r.cnpmjs.org/is-extglob/download/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finite": { + "version": "1.0.2", + "resolved": "http://r.cnpmjs.org/is-finite/download/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "dev": true, + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/is-fullwidth-code-point/download/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.1", + "resolved": "http://r.cnpmjs.org/is-glob/download/is-glob-4.0.1.tgz", + "integrity": "sha1-dWfb6fL14kZ7x3q4PEopSCQHpdw=", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "3.0.0", + "resolved": "http://r.cnpmjs.org/is-number/download/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-path-cwd": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/is-path-cwd/download/is-path-cwd-1.0.0.tgz", + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-path-in-cwd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", + "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", + "dev": true, + "dependencies": { + "is-path-inside": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-path-inside": { + "version": "1.0.1", + "resolved": "http://r.cnpmjs.org/is-path-inside/download/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "dev": true, + "dependencies": { + "path-is-inside": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "http://r.cnpmjs.org/is-plain-object/download/is-plain-object-2.0.4.tgz", + "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-regex": { + "version": "1.0.4", + "resolved": "http://r.cnpmjs.org/is-regex/download/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "dev": true, + "dependencies": { + "has": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-stream": { + "version": "1.1.0", + "resolved": "http://r.cnpmjs.org/is-stream/download/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-symbol": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", + "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-typedarray/download/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "node_modules/is-utf8": { + "version": "0.2.1", + "resolved": "http://r.cnpmjs.org/is-utf8/download/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "http://r.cnpmjs.org/is-windows/download/is-windows-1.0.2.tgz", + "integrity": "sha1-0YUOuXkezRjmGCzhKjDzlmNLsZ0=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-wsl": { + "version": "1.1.0", + "resolved": "http://r.cnpmjs.org/is-wsl/download/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/isarray/download/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "http://r.cnpmjs.org/isexe/download/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "http://r.cnpmjs.org/isobject/download/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "http://registry.npm.taobao.org/isstream/download/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "node_modules/js-base64": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz", + "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==" + }, + "node_modules/js-yaml": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-0.3.7.tgz", + "integrity": "sha1-1znY7oZGHlSzVNan19HyrZoWf2I=", + "engines": { + "node": "> 0.4.11" + } + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "http://registry.npm.taobao.org/jsbn/download/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + }, + "node_modules/jsmin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/jsmin/-/jsmin-1.0.1.tgz", + "integrity": "sha1-570NzWSWw79IYyNb9GGj2YqjuYw=", + "bin": { + "jsmin": "bin/jsmin" + }, + "engines": { + "node": ">=0.1.93" + } + }, + "node_modules/json-loader": { + "version": "0.5.7", + "resolved": "http://r.cnpmjs.org/json-loader/download/json-loader-0.5.7.tgz", + "integrity": "sha1-3KFKcCNf+C8KyaOr62DTN6NlGF0=", + "dev": true + }, + "node_modules/json-schema": { + "version": "0.2.3", + "resolved": "http://registry.npm.taobao.org/json-schema/download/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "http://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.4.1.tgz", + "integrity": "sha1-afaofZUTq4u4/mO9sJecRI5oRmA=" + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "http://registry.npm.taobao.org/json-stringify-safe/download/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "node_modules/json3": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", + "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==", + "dev": true + }, + "node_modules/json5": { + "version": "1.0.1", + "resolved": "http://r.cnpmjs.org/json5/download/json5-1.0.1.tgz", + "integrity": "sha1-d5+wAYYE+oVOrL9iUhgNg1Q+Pb4=", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/json5/node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "node_modules/jsprim": { + "version": "1.4.1", + "resolved": "http://registry.npm.taobao.org/jsprim/download/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "node_modules/jssha": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/jssha/-/jssha-2.3.1.tgz", + "integrity": "sha1-FHshJTaQNcpLL30hDcU58Amz3po=", + "deprecated": "jsSHA versions < 3.0.0 will no longer receive feature updates", + "engines": { + "node": "*" + } + }, + "node_modules/jweixin-module": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jweixin-module/-/jweixin-module-1.4.1.tgz", + "integrity": "sha512-2R2oa1lYhAsclfjKSf3DP4ZiP1dcrQUbM7aklbeJA+UAg/LS7MqoA6UbTy1cs4sbB34z62K4bKW0Z9iazD8ejg==" + }, + "node_modules/jxLoader": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jxLoader/-/jxLoader-0.1.1.tgz", + "integrity": "sha1-ATTqUUTlM7WU/B/yX/GU4jXFPs0=", + "dependencies": { + "js-yaml": "0.3.x", + "moo-server": "1.3.x", + "promised-io": "*", + "walker": "1.x" + }, + "engines": { + "node": ">v0.4.10" + } + }, + "node_modules/killable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", + "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==", + "dev": true + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kuler": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/kuler/-/kuler-1.0.1.tgz", + "integrity": "sha512-J9nVUucG1p/skKul6DU3PUZrhs0LPulNaeUOox0IyXDi8S4CztTHs1gQphhuZmzXG7VOQSf6NJfKuzteQLv9gQ==", + "dependencies": { + "colornames": "^1.1.1" + } + }, + "node_modules/lazy-cache": { + "version": "1.0.4", + "resolved": "http://r.cnpmjs.org/lazy-cache/download/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lcid": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/lcid/download/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dev": true, + "dependencies": { + "invert-kv": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/load-json-file": { + "version": "1.1.0", + "resolved": "http://r.cnpmjs.org/load-json-file/download/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/loader-runner": { + "version": "2.4.0", + "resolved": "http://r.cnpmjs.org/loader-runner/download/loader-runner-2.4.0.tgz", + "integrity": "sha1-7UcGa/5TTX6ExMe5mYwqdWB9k1c=", + "dev": true, + "engines": { + "node": ">=4.3.0 <5.0.0 || >=5.10" + } + }, + "node_modules/loader-utils": { + "version": "1.2.3", + "resolved": "http://r.cnpmjs.org/loader-utils/download/loader-utils-1.2.3.tgz", + "integrity": "sha1-H/XcaRHJ8KBiUxpMBLYJQGEIwsc=", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^2.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" + }, + "node_modules/logform": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.1.2.tgz", + "integrity": "sha512-+lZh4OpERDBLqjiwDLpAWNQu6KMjnlXH2ByZwCuSqVPJletw0kTWJf5CgSNAUKn1KUkv3m2cUz/LK8zyEy7wzQ==", + "dependencies": { + "colors": "^1.2.1", + "fast-safe-stringify": "^2.0.4", + "fecha": "^2.3.3", + "ms": "^2.1.1", + "triple-beam": "^1.3.0" + } + }, + "node_modules/logform/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/loglevel": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.4.tgz", + "integrity": "sha512-p0b6mOGKcGa+7nnmKbpzR6qloPbrgLcnio++E+14Vo/XffOGwZtRpUhr8dTH/x2oCMmEoIU0Zwm3ZauhvYD17g==", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/longest": { + "version": "1.0.1", + "resolved": "http://r.cnpmjs.org/longest/download/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/loud-rejection": { + "version": "1.6.0", + "resolved": "http://r.cnpmjs.org/loud-rejection/download/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "dev": true, + "dependencies": { + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lru-cache": { + "version": "4.1.5", + "resolved": "http://r.cnpmjs.org/lru-cache/download/lru-cache-4.1.5.tgz", + "integrity": "sha1-i75Q6oW+1ZvJ4z3KuCNe6bz0Q80=", + "dev": true, + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "node_modules/makeerror": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", + "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", + "dependencies": { + "tmpl": "1.0.x" + } + }, + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "http://r.cnpmjs.org/map-cache/download/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-obj": { + "version": "1.0.1", + "resolved": "http://r.cnpmjs.org/map-obj/download/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-visit": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/map-visit/download/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "dependencies": { + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/md5.js": { + "version": "1.3.5", + "resolved": "http://r.cnpmjs.org/md5.js/download/md5.js-1.3.5.tgz", + "integrity": "sha1-tdB7jjIW4+J81yjXL3DR5qNCAF8=", + "dev": true, + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "http://r.cnpmjs.org/media-typer/download/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memory-fs": { + "version": "0.4.1", + "resolved": "http://r.cnpmjs.org/memory-fs/download/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dev": true, + "dependencies": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "node_modules/meow": { + "version": "3.7.0", + "resolved": "http://r.cnpmjs.org/meow/download/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "dev": true, + "dependencies": { + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/meow/node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "http://r.cnpmjs.org/merge-descriptors/download/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "http://r.cnpmjs.org/methods/download/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "3.1.10", + "resolved": "http://r.cnpmjs.org/micromatch/download/micromatch-3.1.10.tgz", + "integrity": "sha1-cIWbyVyYQJUvNZoGij/En57PrCM=", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/miller-rabin": { + "version": "4.0.1", + "resolved": "http://r.cnpmjs.org/miller-rabin/download/miller-rabin-4.0.1.tgz", + "integrity": "sha1-8IA1HIZbDcViqEYpZtqlNUPHik0=", + "dev": true, + "dependencies": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "bin": { + "miller-rabin": "bin/miller-rabin" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.40.0", + "resolved": "https://registry.npm.taobao.org/mime-db/download/mime-db-1.40.0.tgz", + "integrity": "sha1-plBX6ZjbCQ9zKmj2wnbTh9QSbDI=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.24", + "resolved": "https://registry.npm.taobao.org/mime-types/download/mime-types-2.1.24.tgz", + "integrity": "sha1-tvjQs+lR77d97eyhlM/20W9nb4E=", + "dependencies": { + "mime-db": "1.40.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "http://r.cnpmjs.org/minimalistic-assert/download/minimalistic-assert-1.0.1.tgz", + "integrity": "sha1-LhlN4ERibUoQ5/f7wAznPoPk1cc=", + "dev": true + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "http://r.cnpmjs.org/minimalistic-crypto-utils/download/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "dev": true + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "node_modules/mixin-deep": { + "version": "1.3.2", + "resolved": "http://r.cnpmjs.org/mixin-deep/download/mixin-deep-1.3.2.tgz", + "integrity": "sha1-ESC0PcNZp4Xc5ltVuC4lfM9HlWY=", + "dev": true, + "dependencies": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mixin-deep/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "http://r.cnpmjs.org/is-extendable/download/is-extendable-1.0.1.tgz", + "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/moment": { + "version": "2.24.0", + "resolved": "http://registry.npm.taobao.org/moment/download/moment-2.24.0.tgz", + "integrity": "sha1-DQVdU/UFKqZTyfbraLtdEr9cK1s=", + "engines": { + "node": "*" + } + }, + "node_modules/moo-server": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/moo-server/-/moo-server-1.3.0.tgz", + "integrity": "sha1-XceVaVZaENbv7VQ5SR5p0jkuWPE=", + "engines": { + "node": ">v0.4.10" + } + }, + "node_modules/mpvue-echarts": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/mpvue-echarts/-/mpvue-echarts-0.3.2.tgz", + "integrity": "sha512-KULGS1DOMNhXu3nBkBv6BtmnqjyHLc+2Dur7eW+2s2aic1NCOygglCMmAmMEU6/TGSR67ttFA2NYxXPUYbNhWQ==" + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "http://r.cnpmjs.org/ms/download/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/multicast-dns": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", + "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "dev": true, + "dependencies": { + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "http://r.cnpmjs.org/multicast-dns-service-types/download/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", + "dev": true + }, + "node_modules/nan": { + "version": "2.14.2", + "resolved": "https://registry.npm.taobao.org/nan/download/nan-2.14.2.tgz?cache=0&sync_timestamp=1602591684976&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnan%2Fdownload%2Fnan-2.14.2.tgz", + "integrity": "sha1-9TdkAGlRaPTMaUrJOT0MlYXu6hk=", + "dev": true, + "optional": true + }, + "node_modules/nanomatch": { + "version": "1.2.13", + "resolved": "http://r.cnpmjs.org/nanomatch/download/nanomatch-1.2.13.tgz", + "integrity": "sha1-uHqKpPwN6P5r6IiVs4mD/yZb0Rk=", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/next-tick": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/next-tick/download/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", + "dev": true + }, + "node_modules/node-forge": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.9.0.tgz", + "integrity": "sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ==", + "dev": true, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/node-libs-browser": { + "version": "2.2.1", + "resolved": "http://r.cnpmjs.org/node-libs-browser/download/node-libs-browser-2.2.1.tgz", + "integrity": "sha1-tk9RPRgzhiX5A0bSew0jXmMfZCU=", + "dev": true, + "dependencies": { + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "0.0.1", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.0", + "url": "^0.11.0", + "util": "^0.11.0", + "vm-browserify": "^1.0.1" + } + }, + "node_modules/node-libs-browser/node_modules/punycode": { + "version": "1.4.1", + "resolved": "http://r.cnpmjs.org/punycode/download/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "node_modules/node-releases": { + "version": "1.1.53", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.53.tgz", + "integrity": "sha512-wp8zyQVwef2hpZ/dJH7SfSrIPD6YoJz6BDQDpGEkcA0s3LpAQoxBIYmfIq6QAhC1DhwsyCgTaTTcONwX8qzCuQ==" + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "http://r.cnpmjs.org/normalize-package-data/download/normalize-package-data-2.5.0.tgz", + "integrity": "sha1-5m2xg4sgDB38IzIl0SyzZSDiNKg=", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "http://r.cnpmjs.org/normalize-path/download/normalize-path-3.0.0.tgz", + "integrity": "sha1-Dc1p/yOhybEf0JeDFmRKA4ghamU=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "http://r.cnpmjs.org/npm-run-path/download/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/number-is-nan": { + "version": "1.0.1", + "resolved": "http://r.cnpmjs.org/number-is-nan/download/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "http://registry.npm.taobao.org/oauth-sign/download/oauth-sign-0.9.0.tgz", + "integrity": "sha1-R6ewFrqmi1+g7PPe4IqFxnmsZFU=", + "engines": { + "node": "*" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "http://r.cnpmjs.org/object-assign/download/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy": { + "version": "0.1.0", + "resolved": "http://r.cnpmjs.org/object-copy/download/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "dependencies": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/define-property": { + "version": "0.2.5", + "resolved": "http://r.cnpmjs.org/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.6.0.tgz", + "integrity": "sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==", + "dev": true + }, + "node_modules/object-is": { + "version": "1.0.1", + "resolved": "http://r.cnpmjs.org/object-is/download/object-is-1.0.1.tgz", + "integrity": "sha1-CqYOyZiaCz7Xlc9NBvYs8a1lObY=", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object-visit": { + "version": "1.0.1", + "resolved": "http://r.cnpmjs.org/object-visit/download/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "dependencies": { + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "http://r.cnpmjs.org/object.pick/download/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "node_modules/on-finished": { + "version": "2.3.0", + "resolved": "http://r.cnpmjs.org/on-finished/download/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "http://r.cnpmjs.org/once/download/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/one-time": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/one-time/-/one-time-0.0.4.tgz", + "integrity": "sha1-+M33eISCb+Tf+T46nMN7HkSAdC4=" + }, + "node_modules/opn": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", + "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", + "dev": true, + "dependencies": { + "is-wsl": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/original": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", + "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", + "dev": true, + "dependencies": { + "url-parse": "^1.4.3" + } + }, + "node_modules/os-browserify": { + "version": "0.3.0", + "resolved": "http://r.cnpmjs.org/os-browserify/download/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", + "dev": true + }, + "node_modules/os-locale": { + "version": "1.4.0", + "resolved": "http://r.cnpmjs.org/os-locale/download/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "dev": true, + "dependencies": { + "lcid": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/p-finally/download/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-map": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", + "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/pako": { + "version": "1.0.10", + "resolved": "http://r.cnpmjs.org/pako/download/pako-1.0.10.tgz", + "integrity": "sha1-Qyi621CGpCaqkPVBl31JVdpclzI=", + "dev": true + }, + "node_modules/parse-asn1": { + "version": "5.1.5", + "resolved": "http://r.cnpmjs.org/parse-asn1/download/parse-asn1-5.1.5.tgz", + "integrity": "sha1-ADJxND2ljclMrOSU+u89IUfs6g4=", + "dev": true, + "dependencies": { + "asn1.js": "^4.0.0", + "browserify-aes": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/parse-json": { + "version": "2.2.0", + "resolved": "http://r.cnpmjs.org/parse-json/download/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "dependencies": { + "error-ex": "^1.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascalcase": { + "version": "0.1.1", + "resolved": "http://r.cnpmjs.org/pascalcase/download/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-browserify": { + "version": "0.0.1", + "resolved": "http://r.cnpmjs.org/path-browserify/download/path-browserify-0.0.1.tgz", + "integrity": "sha1-5sTd1+06onxoogzE5Q4aTug7vEo=", + "dev": true + }, + "node_modules/path-dirname": { + "version": "1.0.2", + "resolved": "http://r.cnpmjs.org/path-dirname/download/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "node_modules/path-exists": { + "version": "3.0.0", + "resolved": "http://r.cnpmjs.org/path-exists/download/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "engines": { + "node": ">=4" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "http://r.cnpmjs.org/path-is-absolute/download/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-is-inside": { + "version": "1.0.2", + "resolved": "http://r.cnpmjs.org/path-is-inside/download/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "node_modules/path-key": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/path-key/download/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/path-parse": { + "version": "1.0.6", + "resolved": "http://r.cnpmjs.org/path-parse/download/path-parse-1.0.6.tgz", + "integrity": "sha1-1i27VnlAXXLEc37FhgDp3c8G0kw=", + "dev": true + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "http://r.cnpmjs.org/path-to-regexp/download/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true + }, + "node_modules/path-type": { + "version": "1.1.0", + "resolved": "http://r.cnpmjs.org/path-type/download/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pbkdf2": { + "version": "3.0.17", + "resolved": "http://r.cnpmjs.org/pbkdf2/download/pbkdf2-3.0.17.tgz", + "integrity": "sha1-l2wgZTBhexTrsyEUI597CTNuk6Y=", + "dev": true, + "dependencies": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/performance-now/download/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, + "node_modules/picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "http://r.cnpmjs.org/pify/download/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie": { + "version": "2.0.4", + "resolved": "http://r.cnpmjs.org/pinkie/download/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie-promise": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/pinkie-promise/download/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", + "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=", + "dependencies": { + "find-up": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-up/node_modules/find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-up/node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-up/node_modules/p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-up/node_modules/p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-up/node_modules/p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "engines": { + "node": ">=4" + } + }, + "node_modules/portfinder": { + "version": "1.0.28", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", + "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", + "dev": true, + "dependencies": { + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.5" + }, + "engines": { + "node": ">= 0.12.0" + } + }, + "node_modules/posix-character-classes": { + "version": "0.1.1", + "resolved": "http://r.cnpmjs.org/posix-character-classes/download/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "http://r.cnpmjs.org/process/download/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/process-nextick-args/download/process-nextick-args-2.0.1.tgz", + "integrity": "sha1-eCDZsWEgzFXKmud5JoCufbptf+I=" + }, + "node_modules/promised-io": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/promised-io/-/promised-io-0.3.5.tgz", + "integrity": "sha1-StIXuzZYvKrplGsXqGaOzYUeE1Y=" + }, + "node_modules/proxy-addr": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz", + "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==", + "dev": true, + "dependencies": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.9.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "http://r.cnpmjs.org/prr/download/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true + }, + "node_modules/pseudomap": { + "version": "1.0.2", + "resolved": "http://r.cnpmjs.org/pseudomap/download/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "node_modules/psl": { + "version": "1.1.31", + "resolved": "http://registry.npm.taobao.org/psl/download/psl-1.1.31.tgz", + "integrity": "sha1-6aqG0BAbWxBcvpOsa3hM1UcnYYQ=" + }, + "node_modules/public-encrypt": { + "version": "4.0.3", + "resolved": "http://r.cnpmjs.org/public-encrypt/download/public-encrypt-4.0.3.tgz", + "integrity": "sha1-T8ydd6B+SLp1J+fL4N4z0HATMeA=", + "dev": true, + "dependencies": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/punycode/download/punycode-2.1.1.tgz", + "integrity": "sha1-tYsBCsQMIsVldhbI0sLALHv0eew=", + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.9.0", + "resolved": "http://r.cnpmjs.org/qs/download/qs-6.9.0.tgz", + "integrity": "sha1-0Sl+KgScUxGctJzKNmrbusyAtAk=", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/querystring": { + "version": "0.2.0", + "resolved": "http://r.cnpmjs.org/querystring/download/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", + "dev": true, + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/querystring-es3": { + "version": "0.2.1", + "resolved": "http://r.cnpmjs.org/querystring-es3/download/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true, + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/querystringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz", + "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==", + "dev": true + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "http://r.cnpmjs.org/randombytes/download/randombytes-2.1.0.tgz", + "integrity": "sha1-32+ENy8CcNxlzfYpE0mrekc9Tyo=", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/randomfill": { + "version": "1.0.4", + "resolved": "http://r.cnpmjs.org/randomfill/download/randomfill-1.0.4.tgz", + "integrity": "sha1-ySGW/IarQr6YPxvzF3giSTHWFFg=", + "dev": true, + "dependencies": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "dev": true, + "dependencies": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/read-pkg": { + "version": "1.1.0", + "resolved": "http://r.cnpmjs.org/read-pkg/download/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "dependencies": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-pkg-up": { + "version": "1.0.1", + "resolved": "http://r.cnpmjs.org/read-pkg-up/download/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "dependencies": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-pkg-up/node_modules/find-up": { + "version": "1.1.2", + "resolved": "http://r.cnpmjs.org/find-up/download/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "dependencies": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-pkg-up/node_modules/path-exists": { + "version": "2.1.0", + "resolved": "http://r.cnpmjs.org/path-exists/download/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "dependencies": { + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/readable-stream": { + "version": "2.3.6", + "resolved": "http://r.cnpmjs.org/readable-stream/download/readable-stream-2.3.6.tgz", + "integrity": "sha1-sRwn2IuP8fvgcGQ8+UsMea4bCq8=", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readdirp": { + "version": "2.2.1", + "resolved": "http://r.cnpmjs.org/readdirp/download/readdirp-2.2.1.tgz", + "integrity": "sha1-DodiKjMlqjPokihcr4tOhGUppSU=", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/redent": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/redent/download/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "dev": true, + "dependencies": { + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regex-not": { + "version": "1.0.2", + "resolved": "http://r.cnpmjs.org/regex-not/download/regex-not-1.0.2.tgz", + "integrity": "sha1-H07OJ+ALC2XgJHpoEOaoXYOldSw=", + "dev": true, + "dependencies": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.2.0.tgz", + "integrity": "sha512-ztaw4M1VqgMwl9HlPpOuiYgItcHlunW0He2fE6eNfT6E/CF2FtYi9ofOYe4mKntstYk0Fyh/rDRBdS3AnxjlrA==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/remove-trailing-separator": { + "version": "1.1.0", + "resolved": "http://r.cnpmjs.org/remove-trailing-separator/download/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "node_modules/repeat-element": { + "version": "1.1.3", + "resolved": "http://r.cnpmjs.org/repeat-element/download/repeat-element-1.1.3.tgz", + "integrity": "sha1-eC4NglwMWjuzlzH4Tv7mt0Lmsc4=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "http://r.cnpmjs.org/repeat-string/download/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/repeating": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/repeating/download/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, + "dependencies": { + "is-finite": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/request": { + "version": "2.88.0", + "resolved": "http://registry.npm.taobao.org/request/download/request-2.88.0.tgz?cache=0&other_urls=http%3A%2F%2Fregistry.npm.taobao.org%2Frequest%2Fdownload%2Frequest-2.88.0.tgz", + "integrity": "sha1-nC/KT301tZLv5Xx/ClXoEFIST+8=", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.0", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.4.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/request/node_modules/qs": { + "version": "6.5.2", + "resolved": "http://registry.npm.taobao.org/qs/download/qs-6.5.2.tgz", + "integrity": "sha1-yzroBuh0BERYTvFUzo7pjUA/PjY=", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "http://r.cnpmjs.org/require-directory/download/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "1.0.1", + "resolved": "http://r.cnpmjs.org/require-main-filename/download/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/requires-port/download/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "node_modules/resolve": { + "version": "1.12.0", + "resolved": "http://r.cnpmjs.org/resolve/download/resolve-1.12.0.tgz", + "integrity": "sha1-P8ZEo1yEpIVUYJ/ybsUrZvpXffY=", + "dev": true, + "dependencies": { + "path-parse": "^1.0.6" + } + }, + "node_modules/resolve-cwd": { + "version": "2.0.0", + "resolved": "http://r.cnpmjs.org/resolve-cwd/download/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "dev": true, + "dependencies": { + "resolve-from": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-from": { + "version": "3.0.0", + "resolved": "http://r.cnpmjs.org/resolve-from/download/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-url": { + "version": "0.2.1", + "resolved": "http://r.cnpmjs.org/resolve-url/download/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "deprecated": "https://github.com/lydell/resolve-url#deprecated", + "dev": true + }, + "node_modules/ret": { + "version": "0.1.15", + "resolved": "http://r.cnpmjs.org/ret/download/ret-0.1.15.tgz", + "integrity": "sha1-uKSCXVvbH8P29Twrwz+BOIaBx7w=", + "dev": true, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/right-align": { + "version": "0.1.3", + "resolved": "http://r.cnpmjs.org/right-align/download/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "dev": true, + "dependencies": { + "align-text": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/ripemd160": { + "version": "2.0.2", + "resolved": "http://r.cnpmjs.org/ripemd160/download/ripemd160-2.0.2.tgz", + "integrity": "sha1-ocGm9iR1FXe6XQeRTLyShQWFiQw=", + "dev": true, + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "http://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz", + "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=" + }, + "node_modules/safe-regex": { + "version": "1.1.0", + "resolved": "http://r.cnpmjs.org/safe-regex/download/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "dependencies": { + "ret": "~0.1.10" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "http://registry.npm.taobao.org/safer-buffer/download/safer-buffer-2.1.2.tgz", + "integrity": "sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo=" + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "http://r.cnpmjs.org/select-hose/download/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", + "dev": true + }, + "node_modules/selfsigned": { + "version": "1.10.7", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.7.tgz", + "integrity": "sha512-8M3wBCzeWIJnQfl43IKwOmC4H/RAp50S8DF60znzjW5GVqTcSe2vWclt7hmYVPkKPlHWOu5EaWOMZ2Y6W8ZXTA==", + "dev": true, + "dependencies": { + "node-forge": "0.9.0" + } + }, + "node_modules/semver": { + "version": "5.7.1", + "resolved": "http://r.cnpmjs.org/semver/download/semver-5.7.1.tgz", + "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "http://r.cnpmjs.org/ms/download/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "http://r.cnpmjs.org/serve-index/download/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "dev": true, + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "http://r.cnpmjs.org/http-errors/download/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "http://r.cnpmjs.org/inherits/download/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "node_modules/serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "dev": true, + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "http://r.cnpmjs.org/set-blocking/download/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "node_modules/set-value": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/set-value/download/set-value-2.0.1.tgz", + "integrity": "sha1-oY1AUw5vB95CKMfe/kInr4ytAFs=", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "http://r.cnpmjs.org/setimmediate/download/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "dev": true + }, + "node_modules/setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "dev": true + }, + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "http://r.cnpmjs.org/sha.js/download/sha.js-2.4.11.tgz", + "integrity": "sha1-N6XPC4HsvGlD3hCbopYNGyZYSuc=", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, + "node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "http://r.cnpmjs.org/shebang-command/download/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/shebang-regex/download/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/signal-exit": { + "version": "3.0.2", + "resolved": "http://r.cnpmjs.org/signal-exit/download/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/simple-swizzle/node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + }, + "node_modules/snapdragon": { + "version": "0.8.2", + "resolved": "http://r.cnpmjs.org/snapdragon/download/snapdragon-0.8.2.tgz", + "integrity": "sha1-ZJIufFZbDhQgS6GqfWlkJ40lGC0=", + "dev": true, + "dependencies": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node": { + "version": "2.1.1", + "resolved": "http://r.cnpmjs.org/snapdragon-node/download/snapdragon-node-2.1.1.tgz", + "integrity": "sha1-bBdfhv8UvbByRWPo88GwIaKGhTs=", + "dev": true, + "dependencies": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/define-property": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/define-property/download/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "http://r.cnpmjs.org/is-descriptor/download/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util": { + "version": "3.0.1", + "resolved": "http://r.cnpmjs.org/snapdragon-util/download/snapdragon-util-3.0.1.tgz", + "integrity": "sha1-+VZHlIbyrNeXAGk/b3uAXkWrVuI=", + "dev": true, + "dependencies": { + "kind-of": "^3.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/debug": { + "version": "2.6.9", + "resolved": "http://r.cnpmjs.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/snapdragon/node_modules/define-property": { + "version": "0.2.5", + "resolved": "http://r.cnpmjs.org/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sockjs": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.19.tgz", + "integrity": "sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==", + "dev": true, + "dependencies": { + "faye-websocket": "^0.10.0", + "uuid": "^3.0.1" + } + }, + "node_modules/sockjs-client": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.1.5.tgz", + "integrity": "sha1-G7fA9yIsQPQq3xT0RCy9Eml3GoM=", + "dev": true, + "dependencies": { + "debug": "^2.6.6", + "eventsource": "0.1.6", + "faye-websocket": "~0.11.0", + "inherits": "^2.0.1", + "json3": "^3.3.2", + "url-parse": "^1.1.8" + } + }, + "node_modules/sockjs-client/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/sockjs-client/node_modules/faye-websocket": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", + "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", + "dev": true, + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/source-list-map": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/source-list-map/download/source-list-map-2.0.1.tgz", + "integrity": "sha1-OZO9hzv8SEecyp6jpUeDXHwVSzQ=", + "dev": true + }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "http://r.cnpmjs.org/source-map/download/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-resolve": { + "version": "0.5.2", + "resolved": "http://r.cnpmjs.org/source-map-resolve/download/source-map-resolve-0.5.2.tgz", + "integrity": "sha1-cuLMNAlVQ+Q7LGKyxMENSpBU8lk=", + "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", + "dev": true, + "dependencies": { + "atob": "^2.1.1", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "node_modules/source-map-url": { + "version": "0.4.0", + "resolved": "http://r.cnpmjs.org/source-map-url/download/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "deprecated": "See https://github.com/lydell/source-map-url#deprecated", + "dev": true + }, + "node_modules/spdx-correct": { + "version": "3.1.0", + "resolved": "http://r.cnpmjs.org/spdx-correct/download/spdx-correct-3.1.0.tgz", + "integrity": "sha1-+4PlBERSaPFUsHTiGMh8ADzTHfQ=", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.2.0", + "resolved": "http://r.cnpmjs.org/spdx-exceptions/download/spdx-exceptions-2.2.0.tgz", + "integrity": "sha1-LqRQrudPKom/uUUZwH/Nb0EyKXc=", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.0", + "resolved": "http://r.cnpmjs.org/spdx-expression-parse/download/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha1-meEZt6XaAOBUkcn6M4t5BII7QdA=", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.5", + "resolved": "http://r.cnpmjs.org/spdx-license-ids/download/spdx-license-ids-3.0.5.tgz", + "integrity": "sha1-NpS1gEVnpFjTyARYQqY1hjL2JlQ=", + "dev": true + }, + "node_modules/spdy": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.1.tgz", + "integrity": "sha512-HeZS3PBdMA+sZSu0qwpCxl3DeALD5ASx8pAX0jZdKXSpPWbQ6SYGnlg3BBmYLx5LtiZrmkAZfErCm2oECBcioA==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/spdy-transport/node_modules/debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/spdy-transport/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/spdy-transport/node_modules/readable-stream": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", + "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/spdy/node_modules/debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/spdy/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/split-string": { + "version": "3.1.0", + "resolved": "http://r.cnpmjs.org/split-string/download/split-string-3.1.0.tgz", + "integrity": "sha1-fLCd2jqGWFcFxks5pkZgOGguj+I=", + "dev": true, + "dependencies": { + "extend-shallow": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sshpk": { + "version": "1.16.1", + "resolved": "http://registry.npm.taobao.org/sshpk/download/sshpk-1.16.1.tgz", + "integrity": "sha1-+2YcC+8ps520B2nuOfpwCT1vaHc=", + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=", + "engines": { + "node": "*" + } + }, + "node_modules/static-extend": { + "version": "0.1.2", + "resolved": "http://r.cnpmjs.org/static-extend/download/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "dependencies": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/define-property": { + "version": "0.2.5", + "resolved": "http://r.cnpmjs.org/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "http://r.cnpmjs.org/statuses/download/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/stream-browserify": { + "version": "2.0.2", + "resolved": "http://r.cnpmjs.org/stream-browserify/download/stream-browserify-2.0.2.tgz", + "integrity": "sha1-h1IdOKRKp+6RzhzSpH3wy0ndZgs=", + "dev": true, + "dependencies": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + } + }, + "node_modules/stream-http": { + "version": "2.8.3", + "resolved": "http://r.cnpmjs.org/stream-http/download/stream-http-2.8.3.tgz", + "integrity": "sha1-stJCRpKIpaJ+xP6JM6z2I95lFPw=", + "dev": true, + "dependencies": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "http://r.cnpmjs.org/string_decoder/download/string_decoder-1.1.1.tgz", + "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string-random": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/string-random/-/string-random-0.1.3.tgz", + "integrity": "sha512-g+UsIwzKhNi+9/+Q3Q7hP8R4HkQxiIkQlttnxw6GRdk9pnnkGIv53C6H8dvh8wxAVDhkqpnWeauaPXS1b2sBJg==" + }, + "node_modules/string-width": { + "version": "1.0.2", + "resolved": "http://r.cnpmjs.org/string-width/download/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string.prototype.trimleft": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz", + "integrity": "sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/string.prototype.trimright": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz", + "integrity": "sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "http://r.cnpmjs.org/strip-ansi/download/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-bom": { + "version": "2.0.0", + "resolved": "http://r.cnpmjs.org/strip-bom/download/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "dependencies": { + "is-utf8": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-eof": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/strip-eof/download/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-indent": { + "version": "1.0.1", + "resolved": "http://r.cnpmjs.org/strip-indent/download/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "dev": true, + "dependencies": { + "get-stdin": "^4.0.1" + }, + "bin": { + "strip-indent": "cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/supports-color": { + "version": "4.5.0", + "resolved": "http://r.cnpmjs.org/supports-color/download/supports-color-4.5.0.tgz", + "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "dev": true, + "dependencies": { + "has-flag": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/text-hex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", + "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" + }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true + }, + "node_modules/time-stamp": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-2.2.0.tgz", + "integrity": "sha512-zxke8goJQpBeEgD82CXABeMh0LSJcj7CXEd0OHOg45HgcofF7pxNwZm9+RknpxpDhwN4gFpySkApKfFYfRQnUA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/timers-browserify": { + "version": "2.0.11", + "resolved": "http://r.cnpmjs.org/timers-browserify/download/timers-browserify-2.0.11.tgz", + "integrity": "sha1-gAsfPu4nLlvFPuRloE0OgEwxIR8=", + "dev": true, + "dependencies": { + "setimmediate": "^1.0.4" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/timespan": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/timespan/-/timespan-2.3.0.tgz", + "integrity": "sha1-SQLOBAvRPYRcj1myfp1ZutbzmSk=", + "engines": { + "node": ">= 0.2.0" + } + }, + "node_modules/tmpl": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", + "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=" + }, + "node_modules/to-arraybuffer": { + "version": "1.0.1", + "resolved": "http://r.cnpmjs.org/to-arraybuffer/download/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", + "dev": true + }, + "node_modules/to-object-path": { + "version": "0.3.0", + "resolved": "http://r.cnpmjs.org/to-object-path/download/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-object-path/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex": { + "version": "3.0.2", + "resolved": "http://r.cnpmjs.org/to-regex/download/to-regex-3.0.2.tgz", + "integrity": "sha1-E8/dmzNlUvMLUfM6iuG0Knp1mc4=", + "dev": true, + "dependencies": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "http://r.cnpmjs.org/to-regex-range/download/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tough-cookie": { + "version": "2.4.3", + "resolved": "http://registry.npm.taobao.org/tough-cookie/download/tough-cookie-2.4.3.tgz", + "integrity": "sha1-U/Nto/R3g7CSWvoG/587FlKA94E=", + "dependencies": { + "psl": "^1.1.24", + "punycode": "^1.4.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tough-cookie/node_modules/punycode": { + "version": "1.4.1", + "resolved": "http://registry.npm.taobao.org/punycode/download/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + }, + "node_modules/trim-newlines": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/trim-newlines/download/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/triple-beam": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", + "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" + }, + "node_modules/tty-browserify": { + "version": "0.0.0", + "resolved": "http://r.cnpmjs.org/tty-browserify/download/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "dev": true + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "http://registry.npm.taobao.org/tunnel-agent/download/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "http://registry.npm.taobao.org/tweetnacl/download/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + }, + "node_modules/type": { + "version": "1.2.0", + "resolved": "http://r.cnpmjs.org/type/download/type-1.2.0.tgz", + "integrity": "sha1-hI3XaY2vo+VKbEeedZxLw/GIR6A=", + "dev": true + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/uglify-js": { + "version": "2.8.29", + "resolved": "http://r.cnpmjs.org/uglify-js/download/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "dev": true, + "dependencies": { + "source-map": "~0.5.1", + "yargs": "~3.10.0" + }, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + }, + "optionalDependencies": { + "uglify-to-browserify": "~1.0.0" + } + }, + "node_modules/uglify-js/node_modules/camelcase": { + "version": "1.2.1", + "resolved": "http://r.cnpmjs.org/camelcase/download/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/uglify-js/node_modules/cliui": { + "version": "2.1.0", + "resolved": "http://r.cnpmjs.org/cliui/download/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "dev": true, + "dependencies": { + "center-align": "^0.1.1", + "right-align": "^0.1.1", + "wordwrap": "0.0.2" + } + }, + "node_modules/uglify-js/node_modules/yargs": { + "version": "3.10.0", + "resolved": "http://r.cnpmjs.org/yargs/download/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "dev": true, + "dependencies": { + "camelcase": "^1.0.2", + "cliui": "^2.1.0", + "decamelize": "^1.0.0", + "window-size": "0.1.0" + } + }, + "node_modules/uglify-to-browserify": { + "version": "1.0.2", + "resolved": "http://r.cnpmjs.org/uglify-to-browserify/download/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "dev": true, + "optional": true + }, + "node_modules/uglifyjs-webpack-plugin": { + "version": "0.4.6", + "resolved": "http://r.cnpmjs.org/uglifyjs-webpack-plugin/download/uglifyjs-webpack-plugin-0.4.6.tgz", + "integrity": "sha1-uVH0q7a9YX5m9j64kUmOORdj4wk=", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "source-map": "^0.5.6", + "uglify-js": "^2.8.29", + "webpack-sources": "^1.0.1" + }, + "engines": { + "node": ">=4.3.0 <5.0.0 || >=5.10" + }, + "peerDependencies": { + "webpack": "^1.9 || ^2 || ^2.1.0-beta || ^2.2.0-rc || ^3.0.0" + } + }, + "node_modules/unifly": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unifly/-/unifly-1.0.2.tgz", + "integrity": "sha512-Lk2CQ/HNspIzA3qqeOhEVnfs6G5yNi/3zY3bjEFm4roPi3FhWhAQ6FZDedWo3OrDfMEmGM3IKdbgekeDfvZ3WQ==" + }, + "node_modules/union-value": { + "version": "1.0.1", + "resolved": "http://r.cnpmjs.org/union-value/download/union-value-1.0.1.tgz", + "integrity": "sha1-C2/nuDWuzaYcbqTU8CwUIh4QmEc=", + "dev": true, + "dependencies": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/unpipe/download/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unset-value": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/unset-value/download/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "dependencies": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value": { + "version": "0.3.1", + "resolved": "http://r.cnpmjs.org/has-value/download/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "dependencies": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { + "version": "2.1.0", + "resolved": "http://r.cnpmjs.org/isobject/download/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-values": { + "version": "0.1.4", + "resolved": "http://r.cnpmjs.org/has-values/download/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/upath": { + "version": "1.2.0", + "resolved": "http://r.cnpmjs.org/upath/download/upath-1.2.0.tgz", + "integrity": "sha1-j2bbzVWog6za5ECK+LA1pQRMGJQ=", + "dev": true, + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/uri-js": { + "version": "4.2.2", + "resolved": "http://registry.npm.taobao.org/uri-js/download/uri-js-4.2.2.tgz", + "integrity": "sha1-lMVA4f93KVbiKZUHwBCupsiDjrA=", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/urix": { + "version": "0.1.0", + "resolved": "http://r.cnpmjs.org/urix/download/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "deprecated": "Please see https://github.com/lydell/urix#deprecated", + "dev": true + }, + "node_modules/url": { + "version": "0.11.0", + "resolved": "http://r.cnpmjs.org/url/download/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "dependencies": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "node_modules/url-parse": { + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", + "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", + "dev": true, + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/url/node_modules/punycode": { + "version": "1.3.2", + "resolved": "http://r.cnpmjs.org/punycode/download/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + }, + "node_modules/use": { + "version": "3.1.1", + "resolved": "http://r.cnpmjs.org/use/download/use-3.1.1.tgz", + "integrity": "sha1-1QyMrHmhn7wg8pEfVuuXP04QBw8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/util": { + "version": "0.11.1", + "resolved": "http://r.cnpmjs.org/util/download/util-0.11.1.tgz", + "integrity": "sha1-MjZzNyDsZLsn9uJvQhqqLhtYjWE=", + "dev": true, + "dependencies": { + "inherits": "2.0.3" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "http://r.cnpmjs.org/util-deprecate/download/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "node_modules/util/node_modules/inherits": { + "version": "2.0.3", + "resolved": "http://r.cnpmjs.org/inherits/download/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "http://r.cnpmjs.org/utils-merge/download/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "3.3.2", + "resolved": "http://registry.npm.taobao.org/uuid/download/uuid-3.3.2.tgz", + "integrity": "sha1-G0r0lV6zB3xQHCOHL8ZROBFYcTE=", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "http://r.cnpmjs.org/validate-npm-package-license/download/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha1-/JH2uce6FchX9MssXe/uw51PQQo=", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "http://r.cnpmjs.org/vary/download/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "http://registry.npm.taobao.org/verror/download/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/vm-browserify": { + "version": "1.1.0", + "resolved": "http://r.cnpmjs.org/vm-browserify/download/vm-browserify-1.1.0.tgz", + "integrity": "sha1-vXbWojMj4sqP+hICjcBFWcdfkBk=", + "dev": true + }, + "node_modules/vuex": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/vuex/download/vuex-3.1.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvuex%2Fdownload%2Fvuex-3.1.1.tgz", + "integrity": "sha1-DCZL/jDNvM+Wq52zF30hGCilkQ4=" + }, + "node_modules/walker": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", + "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", + "dependencies": { + "makeerror": "1.0.x" + } + }, + "node_modules/watchpack": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.4.tgz", + "integrity": "sha512-aWAgTW4MoSJzZPAicljkO1hsi1oKj/RRq/OJQh2PKI2UKL04c2Bs+MBOB+BBABHTXJpf9mCwHN7ANCvYsvY2sg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0" + }, + "optionalDependencies": { + "chokidar": "^3.4.1", + "watchpack-chokidar2": "^2.0.0" + } + }, + "node_modules/watchpack-chokidar2": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz", + "integrity": "sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA==", + "dev": true, + "optional": true, + "dependencies": { + "chokidar": "^2.1.8" + }, + "engines": { + "node": "<8.10.0" + } + }, + "node_modules/watchpack/node_modules/anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "dev": true, + "optional": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/watchpack/node_modules/binary-extensions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", + "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", + "dev": true, + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/watchpack/node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "optional": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/watchpack/node_modules/chokidar": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.2.tgz", + "integrity": "sha512-IZHaDeBeI+sZJRX7lGcXsdzgvZqKv6sECqsbErJA4mHWfpRrD8B97kSFN4cQz6nGBGiuFia1MKR4d6c1o8Cv7A==", + "dev": true, + "optional": true, + "dependencies": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.4.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.1.2" + } + }, + "node_modules/watchpack/node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "optional": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/watchpack/node_modules/fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "deprecated": "\"Please update to latest v2.3 or v2.2\"", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/watchpack/node_modules/glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "optional": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/watchpack/node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "optional": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/watchpack/node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/watchpack/node_modules/readdirp": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz", + "integrity": "sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==", + "dev": true, + "optional": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/watchpack/node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "optional": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/webpack": { + "version": "3.12.0", + "resolved": "http://r.cnpmjs.org/webpack/download/webpack-3.12.0.tgz", + "integrity": "sha1-P540NgNwYC/PY56Xk520hvTsDXQ=", + "dev": true, + "dependencies": { + "acorn": "^5.0.0", + "acorn-dynamic-import": "^2.0.0", + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0", + "async": "^2.1.2", + "enhanced-resolve": "^3.4.0", + "escope": "^3.6.0", + "interpret": "^1.0.0", + "json-loader": "^0.5.4", + "json5": "^0.5.1", + "loader-runner": "^2.3.0", + "loader-utils": "^1.1.0", + "memory-fs": "~0.4.1", + "mkdirp": "~0.5.0", + "node-libs-browser": "^2.0.0", + "source-map": "^0.5.3", + "supports-color": "^4.2.1", + "tapable": "^0.2.7", + "uglifyjs-webpack-plugin": "^0.4.6", + "watchpack": "^1.4.0", + "webpack-sources": "^1.0.1", + "yargs": "^8.0.2" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=4.3.0 <5.0.0 || >=5.10" + } + }, + "node_modules/webpack-dev-middleware": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-1.12.2.tgz", + "integrity": "sha512-FCrqPy1yy/sN6U/SaEZcHKRXGlqU0DUaEBL45jkUYoB8foVb6wCnbIJ1HKIx+qUFTW+3JpVcCJCxZ8VATL4e+A==", + "dev": true, + "dependencies": { + "memory-fs": "~0.4.1", + "mime": "^1.5.0", + "path-is-absolute": "^1.0.0", + "range-parser": "^1.0.3", + "time-stamp": "^2.0.0" + }, + "engines": { + "node": ">=0.6" + }, + "peerDependencies": { + "webpack": "^1.0.0 || ^2.0.0 || ^3.0.0" + } + }, + "node_modules/webpack-dev-server": { + "version": "2.11.5", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-2.11.5.tgz", + "integrity": "sha512-7TdOKKt7G3sWEhPKV0zP+nD0c4V9YKUJ3wDdBwQsZNo58oZIRoVIu66pg7PYkBW8A74msP9C2kLwmxGHndz/pw==", + "dev": true, + "dependencies": { + "ansi-html": "0.0.7", + "array-includes": "^3.0.3", + "bonjour": "^3.5.0", + "chokidar": "^2.1.2", + "compression": "^1.7.3", + "connect-history-api-fallback": "^1.3.0", + "debug": "^3.1.0", + "del": "^3.0.0", + "express": "^4.16.2", + "html-entities": "^1.2.0", + "http-proxy-middleware": "^0.19.1", + "import-local": "^1.0.0", + "internal-ip": "1.2.0", + "ip": "^1.1.5", + "killable": "^1.0.0", + "loglevel": "^1.4.1", + "opn": "^5.1.0", + "portfinder": "^1.0.9", + "selfsigned": "^1.9.1", + "serve-index": "^1.9.1", + "sockjs": "0.3.19", + "sockjs-client": "1.1.5", + "spdy": "^4.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^5.1.0", + "webpack-dev-middleware": "1.12.2", + "yargs": "6.6.0" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">=4.7" + }, + "peerDependencies": { + "webpack": "^2.2.0 || ^3.0.0" + } + }, + "node_modules/webpack-dev-server/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/webpack-dev-server/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/webpack-sources": { + "version": "1.4.3", + "resolved": "http://r.cnpmjs.org/webpack-sources/download/webpack-sources-1.4.3.tgz", + "integrity": "sha1-7t2OwLko+/HL/plOItLYkPMwqTM=", + "dev": true, + "dependencies": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + }, + "node_modules/webpack-sources/node_modules/source-map": { + "version": "0.6.1", + "resolved": "http://r.cnpmjs.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack/node_modules/ansi-regex": { + "version": "3.0.0", + "resolved": "http://r.cnpmjs.org/ansi-regex/download/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/webpack/node_modules/camelcase": { + "version": "4.1.0", + "resolved": "http://r.cnpmjs.org/camelcase/download/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/webpack/node_modules/cross-spawn": { + "version": "5.1.0", + "resolved": "http://r.cnpmjs.org/cross-spawn/download/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "dependencies": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "node_modules/webpack/node_modules/execa": { + "version": "0.7.0", + "resolved": "http://r.cnpmjs.org/execa/download/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "dev": true, + "dependencies": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/webpack/node_modules/find-up": { + "version": "2.1.0", + "resolved": "http://r.cnpmjs.org/find-up/download/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/webpack/node_modules/get-stream": { + "version": "3.0.0", + "resolved": "http://r.cnpmjs.org/get-stream/download/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/webpack/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "http://r.cnpmjs.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/webpack/node_modules/json5": { + "version": "0.5.1", + "resolved": "http://r.cnpmjs.org/json5/download/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/webpack/node_modules/load-json-file": { + "version": "2.0.0", + "resolved": "http://r.cnpmjs.org/load-json-file/download/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/webpack/node_modules/locate-path": { + "version": "2.0.0", + "resolved": "http://r.cnpmjs.org/locate-path/download/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/webpack/node_modules/mem": { + "version": "1.1.0", + "resolved": "http://r.cnpmjs.org/mem/download/mem-1.1.0.tgz", + "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", + "dev": true, + "dependencies": { + "mimic-fn": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/webpack/node_modules/mimic-fn": { + "version": "1.2.0", + "resolved": "http://r.cnpmjs.org/mimic-fn/download/mimic-fn-1.2.0.tgz", + "integrity": "sha1-ggyGo5M0ZA6ZUWkovQP8qIBX0CI=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/webpack/node_modules/os-locale": { + "version": "2.1.0", + "resolved": "http://r.cnpmjs.org/os-locale/download/os-locale-2.1.0.tgz", + "integrity": "sha1-QrwpAKa1uL0XN2yOiCtlr8zyS/I=", + "dev": true, + "dependencies": { + "execa": "^0.7.0", + "lcid": "^1.0.0", + "mem": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/webpack/node_modules/p-limit": { + "version": "1.3.0", + "resolved": "http://r.cnpmjs.org/p-limit/download/p-limit-1.3.0.tgz", + "integrity": "sha1-uGvV8MJWkJEcdZD8v8IBDVSzzLg=", + "dev": true, + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/webpack/node_modules/p-locate": { + "version": "2.0.0", + "resolved": "http://r.cnpmjs.org/p-locate/download/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/webpack/node_modules/p-try": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/p-try/download/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/webpack/node_modules/path-type": { + "version": "2.0.0", + "resolved": "http://r.cnpmjs.org/path-type/download/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "dependencies": { + "pify": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/webpack/node_modules/read-pkg": { + "version": "2.0.0", + "resolved": "http://r.cnpmjs.org/read-pkg/download/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true, + "dependencies": { + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/webpack/node_modules/read-pkg-up": { + "version": "2.0.0", + "resolved": "http://r.cnpmjs.org/read-pkg-up/download/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "dev": true, + "dependencies": { + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/webpack/node_modules/string-width": { + "version": "2.1.1", + "resolved": "http://r.cnpmjs.org/string-width/download/string-width-2.1.1.tgz", + "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=", + "dev": true, + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/webpack/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "http://r.cnpmjs.org/strip-ansi/download/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/webpack/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "http://r.cnpmjs.org/strip-bom/download/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/webpack/node_modules/tapable": { + "version": "0.2.9", + "resolved": "http://r.cnpmjs.org/tapable/download/tapable-0.2.9.tgz", + "integrity": "sha1-ry2LvJsE907hevK02QSPgHrNGKg=", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/webpack/node_modules/which-module": { + "version": "2.0.0", + "resolved": "http://r.cnpmjs.org/which-module/download/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "node_modules/webpack/node_modules/y18n": { + "version": "3.2.1", + "resolved": "http://r.cnpmjs.org/y18n/download/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true + }, + "node_modules/webpack/node_modules/yargs": { + "version": "8.0.2", + "resolved": "http://r.cnpmjs.org/yargs/download/yargs-8.0.2.tgz", + "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", + "dev": true, + "dependencies": { + "camelcase": "^4.1.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^2.0.0", + "read-pkg-up": "^2.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^7.0.0" + } + }, + "node_modules/webpack/node_modules/yargs-parser": { + "version": "7.0.0", + "resolved": "http://r.cnpmjs.org/yargs-parser/download/yargs-parser-7.0.0.tgz", + "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", + "dev": true, + "dependencies": { + "camelcase": "^4.1.0" + } + }, + "node_modules/websocket-driver": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.3.tgz", + "integrity": "sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg==", + "dev": true, + "dependencies": { + "http-parser-js": ">=0.4.0 <0.4.11", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz", + "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "http://r.cnpmjs.org/which/download/which-1.3.1.tgz", + "integrity": "sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo=", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/which-module": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/which-module/download/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", + "dev": true + }, + "node_modules/window-size": { + "version": "0.1.0", + "resolved": "http://r.cnpmjs.org/window-size/download/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/winston": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.2.1.tgz", + "integrity": "sha512-zU6vgnS9dAWCEKg/QYigd6cgMVVNwyTzKs81XZtTFuRwJOcDdBg7AU0mXVyNbs7O5RH2zdv+BdNZUlx7mXPuOw==", + "dependencies": { + "async": "^2.6.1", + "diagnostics": "^1.1.1", + "is-stream": "^1.1.0", + "logform": "^2.1.1", + "one-time": "0.0.4", + "readable-stream": "^3.1.1", + "stack-trace": "0.0.x", + "triple-beam": "^1.3.0", + "winston-transport": "^4.3.0" + }, + "engines": { + "node": ">= 6.4.0" + } + }, + "node_modules/winston-transport": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.3.0.tgz", + "integrity": "sha512-B2wPuwUi3vhzn/51Uukcao4dIduEiPOcOt9HJ3QeaXgkJ5Z7UwpBzxS4ZGNHtrxrUvTwemsQiSys0ihOf8Mp1A==", + "dependencies": { + "readable-stream": "^2.3.6", + "triple-beam": "^1.2.0" + }, + "engines": { + "node": ">= 6.4.0" + } + }, + "node_modules/winston/node_modules/readable-stream": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", + "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/wordwrap": { + "version": "0.0.2", + "resolved": "http://r.cnpmjs.org/wordwrap/download/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/wrap-ansi": { + "version": "2.1.0", + "resolved": "http://r.cnpmjs.org/wrap-ansi/download/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "dependencies": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "http://r.cnpmjs.org/wrappy/download/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "node_modules/wrench": { + "version": "1.3.9", + "resolved": "https://registry.npmjs.org/wrench/-/wrench-1.3.9.tgz", + "integrity": "sha1-bxPsNRRTF+spLKX2UxORskQRFBE=", + "deprecated": "wrench.js is deprecated! You should check out fs-extra (https://github.com/jprichardson/node-fs-extra) for any operations you were using wrench for. Thanks for all the usage over the years.", + "engines": { + "node": ">=0.1.97" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "http://r.cnpmjs.org/xtend/download/xtend-4.0.2.tgz", + "integrity": "sha1-u3J3n1+kZRhrH0OPZ0+jR/2121Q=", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/yallist": { + "version": "2.1.2", + "resolved": "http://r.cnpmjs.org/yallist/download/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, + "node_modules/yargs": { + "version": "6.6.0", + "resolved": "http://r.cnpmjs.org/yargs/download/yargs-6.6.0.tgz", + "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=", + "dev": true, + "dependencies": { + "camelcase": "^3.0.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.2", + "which-module": "^1.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^4.2.0" + } + }, + "node_modules/yargs-parser": { + "version": "4.2.1", + "resolved": "http://r.cnpmjs.org/yargs-parser/download/yargs-parser-4.2.1.tgz", + "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=", + "dev": true, + "dependencies": { + "camelcase": "^3.0.0" + } + }, + "node_modules/yargs-parser/node_modules/camelcase": { + "version": "3.0.0", + "resolved": "http://r.cnpmjs.org/camelcase/download/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/yargs/node_modules/camelcase": { + "version": "3.0.0", + "resolved": "http://r.cnpmjs.org/camelcase/download/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/yargs/node_modules/y18n": { + "version": "3.2.1", + "resolved": "http://r.cnpmjs.org/y18n/download/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true + }, + "node_modules/zrender": { + "version": "4.3.2", + "resolved": "https://registry.npm.taobao.org/zrender/download/zrender-4.3.2.tgz?cache=0&sync_timestamp=1612184093375&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fzrender%2Fdownload%2Fzrender-4.3.2.tgz", + "integrity": "sha1-7HQy+UFcgsc1hLa3uMR+GwFiCcY=" + } + }, + "dependencies": { + "@types/js-base64": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@types/js-base64/-/js-base64-3.3.1.tgz", + "integrity": "sha512-Zw33oQNAvDdAN9b0IE5stH0y2MylYvtU7VVTKEJPxhyM2q57CVaNJhtJW258ah24NRtaiA23tptUmVn3dmTKpw==", + "dev": true, + "requires": { + "js-base64": "*" + } + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dev": true, + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "acorn": { + "version": "5.7.4", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", + "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", + "dev": true + }, + "acorn-dynamic-import": { + "version": "2.0.2", + "resolved": "http://r.cnpmjs.org/acorn-dynamic-import/download/acorn-dynamic-import-2.0.2.tgz", + "integrity": "sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=", + "dev": true, + "requires": { + "acorn": "^4.0.3" + }, + "dependencies": { + "acorn": { + "version": "4.0.13", + "resolved": "http://r.cnpmjs.org/acorn/download/acorn-4.0.13.tgz", + "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", + "dev": true + } + } + }, + "ajv": { + "version": "6.10.0", + "resolved": "http://registry.npm.taobao.org/ajv/download/ajv-6.10.0.tgz", + "integrity": "sha1-kNDVRDnaWHzX6EO/twRfUL0ivfE=", + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "3.4.1", + "resolved": "http://r.cnpmjs.org/ajv-keywords/download/ajv-keywords-3.4.1.tgz", + "integrity": "sha1-75FuJxxkrBIXH9g4TqrmsjRYVNo=", + "dev": true, + "requires": {} + }, + "align-text": { + "version": "0.1.4", + "resolved": "http://r.cnpmjs.org/align-text/download/align-text-0.1.4.tgz", + "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "dev": true, + "requires": { + "kind-of": "^3.0.2", + "longest": "^1.0.1", + "repeat-string": "^1.5.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "ansi-html": { + "version": "0.0.7", + "resolved": "http://r.cnpmjs.org/ansi-html/download/ansi-html-0.0.7.tgz", + "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", + "dev": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "http://r.cnpmjs.org/ansi-regex/download/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "anymatch": { + "version": "2.0.0", + "resolved": "http://r.cnpmjs.org/anymatch/download/anymatch-2.0.0.tgz", + "integrity": "sha1-vLJLTzeTTZqnrBe0ra+J58du8us=", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "http://r.cnpmjs.org/normalize-path/download/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "http://r.cnpmjs.org/arr-diff/download/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "http://r.cnpmjs.org/arr-flatten/download/arr-flatten-1.1.0.tgz", + "integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE=", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "http://r.cnpmjs.org/arr-union/download/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true + }, + "array-find-index": { + "version": "1.0.2", + "resolved": "http://r.cnpmjs.org/array-find-index/download/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true + }, + "array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "dev": true + }, + "array-includes": { + "version": "3.0.3", + "resolved": "http://r.cnpmjs.org/array-includes/download/array-includes-3.0.3.tgz", + "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.7.0" + } + }, + "array-union": { + "version": "1.0.2", + "resolved": "http://r.cnpmjs.org/array-union/download/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "requires": { + "array-uniq": "^1.0.1" + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "http://r.cnpmjs.org/array-uniq/download/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "http://r.cnpmjs.org/array-unique/download/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "asn1": { + "version": "0.2.4", + "resolved": "http://registry.npm.taobao.org/asn1/download/asn1-0.2.4.tgz", + "integrity": "sha1-jSR136tVO7M+d7VOWeiAu4ziMTY=", + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "asn1.js": { + "version": "4.10.1", + "resolved": "http://r.cnpmjs.org/asn1.js/download/asn1.js-4.10.1.tgz", + "integrity": "sha1-ucK/WAXx5kqt7tbfOiv6+1pz9aA=", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "assert": { + "version": "1.5.0", + "resolved": "http://r.cnpmjs.org/assert/download/assert-1.5.0.tgz", + "integrity": "sha1-VcEJqvbgrv2z3EtxJAxwv1dLGOs=", + "dev": true, + "requires": { + "object-assign": "^4.1.1", + "util": "0.10.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/inherits/download/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + }, + "util": { + "version": "0.10.3", + "resolved": "http://r.cnpmjs.org/util/download/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "requires": { + "inherits": "2.0.1" + } + } + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/assert-plus/download/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/assign-symbols/download/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, + "async": { + "version": "2.6.3", + "resolved": "http://r.cnpmjs.org/async/download/async-2.6.3.tgz", + "integrity": "sha1-1yYl4jRKNlbjo61Pp0n6gymdgv8=", + "requires": { + "lodash": "^4.17.14" + } + }, + "async-each": { + "version": "1.0.3", + "resolved": "http://r.cnpmjs.org/async-each/download/async-each-1.0.3.tgz", + "integrity": "sha1-tyfb+H12UWAvBvTUrDh/R9kbDL8=", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "http://registry.npm.taobao.org/asynckit/download/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "atob": { + "version": "2.1.2", + "resolved": "http://r.cnpmjs.org/atob/download/atob-2.1.2.tgz", + "integrity": "sha1-bZUX654DDSQ2ZmZR6GvZ9vE1M8k=", + "dev": true + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "http://registry.npm.taobao.org/aws-sign2/download/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + }, + "aws4": { + "version": "1.8.0", + "resolved": "http://registry.npm.taobao.org/aws4/download/aws4-1.8.0.tgz", + "integrity": "sha1-8OAD2cqef1nHpQiUXXsu+aBKVC8=" + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/balanced-match/download/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "base": { + "version": "0.11.2", + "resolved": "http://r.cnpmjs.org/base/download/base-0.11.2.tgz", + "integrity": "sha1-e95c7RRbbVUakNuH+DxVi060io8=", + "dev": true, + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/define-property/download/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "http://r.cnpmjs.org/is-descriptor/download/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "base64-js": { + "version": "1.3.1", + "resolved": "http://r.cnpmjs.org/base64-js/download/base64-js-1.3.1.tgz", + "integrity": "sha1-WOzoy3XdB+ce0IxzarxfrE2/jfE=", + "dev": true + }, + "batch": { + "version": "0.6.1", + "resolved": "http://r.cnpmjs.org/batch/download/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/bcrypt-pbkdf/download/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "big.js": { + "version": "5.2.2", + "resolved": "http://r.cnpmjs.org/big.js/download/big.js-5.2.2.tgz", + "integrity": "sha1-ZfCvOC9Xi83HQr2cKB6cstd2gyg=", + "dev": true + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "http://r.cnpmjs.org/binary-extensions/download/binary-extensions-1.13.1.tgz", + "integrity": "sha1-WYr+VHVbKGilMw0q/51Ou1Mgm2U=", + "dev": true + }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npm.taobao.org/bindings/download/bindings-1.5.0.tgz", + "integrity": "sha1-EDU8npRTNLwFEabZCzj7x8nFBN8=", + "dev": true, + "optional": true, + "requires": { + "file-uri-to-path": "1.0.0" + } + }, + "bn.js": { + "version": "4.11.8", + "resolved": "http://r.cnpmjs.org/bn.js/download/bn.js-4.11.8.tgz", + "integrity": "sha1-LN4J617jQfSEdGuwMJsyU7GxRC8=", + "dev": true + }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "dev": true, + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "dependencies": { + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "dev": true + } + } + }, + "bonjour": { + "version": "3.5.0", + "resolved": "http://r.cnpmjs.org/bonjour/download/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "dev": true, + "requires": { + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "http://r.cnpmjs.org/braces/download/braces-2.3.2.tgz", + "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "http://r.cnpmjs.org/brorand/download/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "http://r.cnpmjs.org/browserify-aes/download/browserify-aes-1.2.0.tgz", + "integrity": "sha1-Mmc0ZC9APavDADIJhTu3CtQo70g=", + "dev": true, + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "browserify-cipher": { + "version": "1.0.1", + "resolved": "http://r.cnpmjs.org/browserify-cipher/download/browserify-cipher-1.0.1.tgz", + "integrity": "sha1-jWR0wbhwv9q807z8wZNKEOlPFfA=", + "dev": true, + "requires": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "browserify-des": { + "version": "1.0.2", + "resolved": "http://r.cnpmjs.org/browserify-des/download/browserify-des-1.0.2.tgz", + "integrity": "sha1-OvTx9Zg5QDVy8cZiBDdfen9wPpw=", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "browserify-rsa": { + "version": "4.0.1", + "resolved": "http://r.cnpmjs.org/browserify-rsa/download/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "randombytes": "^2.0.1" + } + }, + "browserify-sign": { + "version": "4.0.4", + "resolved": "http://r.cnpmjs.org/browserify-sign/download/browserify-sign-4.0.4.tgz", + "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", + "dev": true, + "requires": { + "bn.js": "^4.1.1", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.2", + "elliptic": "^6.0.0", + "inherits": "^2.0.1", + "parse-asn1": "^5.0.0" + } + }, + "browserify-zlib": { + "version": "0.2.0", + "resolved": "http://r.cnpmjs.org/browserify-zlib/download/browserify-zlib-0.2.0.tgz", + "integrity": "sha1-KGlFnZqjviRf6P4sofRuLn9U1z8=", + "dev": true, + "requires": { + "pako": "~1.0.5" + } + }, + "browserslist": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.12.0.tgz", + "integrity": "sha512-UH2GkcEDSI0k/lRkuDSzFl9ZZ87skSy9w2XAn1MsZnL+4c4rqbBd3e82UWHbYDpztABrPBhZsTEeuxVfHppqDg==", + "requires": { + "caniuse-lite": "^1.0.30001043", + "electron-to-chromium": "^1.3.413", + "node-releases": "^1.1.53", + "pkg-up": "^2.0.0" + } + }, + "buffer": { + "version": "4.9.1", + "resolved": "http://r.cnpmjs.org/buffer/download/buffer-4.9.1.tgz", + "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "dev": true, + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "buffer-indexof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", + "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", + "dev": true + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "http://r.cnpmjs.org/buffer-xor/download/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true + }, + "build": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/build/-/build-0.1.4.tgz", + "integrity": "sha1-cH/gJv/O3crL/c3zVur9pk8VEEY=", + "requires": { + "cssmin": "0.3.x", + "jsmin": "1.x", + "jxLoader": "*", + "moo-server": "*", + "promised-io": "*", + "timespan": "2.x", + "uglify-js": "1.x", + "walker": "1.x", + "winston": "*", + "wrench": "1.3.x" + }, + "dependencies": { + "uglify-js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-1.3.5.tgz", + "integrity": "sha1-S1v/+Rhu/7qoiOTJ6UvZ/EyUkp0=" + } + } + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "http://r.cnpmjs.org/builtin-status-codes/download/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "dev": true + }, + "bytes": { + "version": "3.0.0", + "resolved": "http://r.cnpmjs.org/bytes/download/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true + }, + "cache-base": { + "version": "1.0.1", + "resolved": "http://r.cnpmjs.org/cache-base/download/cache-base-1.0.1.tgz", + "integrity": "sha1-Cn9GQWgxyLZi7jb+TnxZ129marI=", + "dev": true, + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "camelcase": { + "version": "2.1.1", + "resolved": "http://r.cnpmjs.org/camelcase/download/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "dev": true + }, + "camelcase-keys": { + "version": "2.1.0", + "resolved": "http://r.cnpmjs.org/camelcase-keys/download/camelcase-keys-2.1.0.tgz", + "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "dev": true, + "requires": { + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" + } + }, + "caniuse-lite": { + "version": "1.0.30001051", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001051.tgz", + "integrity": "sha512-sw8UUnTlRevawTMZKN7vpfwSjCBVoiMPlYd8oT2VwNylyPCBdMAUmLGUApnYYTtIm5JXsQegUAY7GPHqgfDzjw==" + }, + "caseless": { + "version": "0.12.0", + "resolved": "http://registry.npm.taobao.org/caseless/download/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "center-align": { + "version": "0.1.3", + "resolved": "http://r.cnpmjs.org/center-align/download/center-align-0.1.3.tgz", + "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "dev": true, + "requires": { + "align-text": "^0.1.3", + "lazy-cache": "^1.0.3" + } + }, + "chokidar": { + "version": "2.1.8", + "resolved": "http://r.cnpmjs.org/chokidar/download/chokidar-2.1.8.tgz", + "integrity": "sha1-gEs6e2qZNYw8XGHnHYco8EHP+Rc=", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "http://r.cnpmjs.org/cipher-base/download/cipher-base-1.0.4.tgz", + "integrity": "sha1-h2Dk7MJy9MNjUy+SbYdKriwTl94=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "class-utils": { + "version": "0.3.6", + "resolved": "http://r.cnpmjs.org/class-utils/download/class-utils-0.3.6.tgz", + "integrity": "sha1-+TNprouafOAv1B+q0MqDAzGQxGM=", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "http://r.cnpmjs.org/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "cliui": { + "version": "3.2.0", + "resolved": "http://r.cnpmjs.org/cliui/download/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + } + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "http://r.cnpmjs.org/code-point-at/download/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/collection-visit/download/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/color/-/color-3.0.0.tgz", + "integrity": "sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w==", + "requires": { + "color-convert": "^1.9.1", + "color-string": "^1.5.2" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "http://r.cnpmjs.org/color-convert/download/color-convert-1.9.3.tgz", + "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "http://r.cnpmjs.org/color-name/download/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "color-string": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", + "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==", + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "colornames": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/colornames/-/colornames-1.1.1.tgz", + "integrity": "sha1-+IiQMGhcfE/54qVZ9Qd+t2qBb5Y=" + }, + "colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==" + }, + "colorspace": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.2.tgz", + "integrity": "sha512-vt+OoIP2d76xLhjwbBaucYlNSpPsrJWPlBTtwCpQKIu6/CSMutyzX93O/Do0qzpH3YoHEes8YEFXyZ797rEhzQ==", + "requires": { + "color": "3.0.x", + "text-hex": "1.0.x" + } + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npm.taobao.org/combined-stream/download/combined-stream-1.0.8.tgz", + "integrity": "sha1-w9RaizT9cwYxoRCoolIGgrMdWn8=", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "http://r.cnpmjs.org/component-emitter/download/component-emitter-1.3.0.tgz", + "integrity": "sha1-FuQHD7qK4ptnnyIVhT7hgasuq8A=", + "dev": true + }, + "compressible": { + "version": "2.0.17", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.17.tgz", + "integrity": "sha512-BGHeLCK1GV7j1bSmQQAi26X+GgWcTjLr/0tzSvMCl3LH1w1IJ4PFSPoV5316b30cneTziC+B1a+3OjoSUcQYmw==", + "dev": true, + "requires": { + "mime-db": ">= 1.40.0 < 2" + } + }, + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "requires": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "http://r.cnpmjs.org/concat-map/download/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "dev": true + }, + "console-browserify": { + "version": "1.2.0", + "resolved": "http://r.cnpmjs.org/console-browserify/download/console-browserify-1.2.0.tgz", + "integrity": "sha1-ZwY871fOts9Jk6KrOlWECujEkzY=", + "dev": true + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/constants-browserify/download/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true + }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true + }, + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "http://r.cnpmjs.org/cookie-signature/download/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "http://r.cnpmjs.org/copy-descriptor/download/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/core-util-is/download/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "create-ecdh": { + "version": "4.0.3", + "resolved": "http://r.cnpmjs.org/create-ecdh/download/create-ecdh-4.0.3.tgz", + "integrity": "sha1-yREbbzMEXEaX8UR4f5JUzcd8Rf8=", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.0.0" + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "http://r.cnpmjs.org/create-hash/download/create-hash-1.2.0.tgz", + "integrity": "sha1-iJB4rxGmN1a8+1m9IhmWvjqe8ZY=", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "http://r.cnpmjs.org/create-hmac/download/create-hmac-1.1.7.tgz", + "integrity": "sha1-aRcMeLOrlXFHsriwRXLkfq0iQ/8=", + "dev": true, + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "http://r.cnpmjs.org/crypto-browserify/download/crypto-browserify-3.12.0.tgz", + "integrity": "sha1-OWz58xN/A+S45TLFj2mCVOAPgOw=", + "dev": true, + "requires": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + } + }, + "cssmin": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/cssmin/-/cssmin-0.3.2.tgz", + "integrity": "sha1-3c5MVHtRCuDVlKjx+/iq+OLFwA0=" + }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "http://r.cnpmjs.org/currently-unhandled/download/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "dev": true, + "requires": { + "array-find-index": "^1.0.1" + } + }, + "d": { + "version": "1.0.1", + "resolved": "http://r.cnpmjs.org/d/download/d-1.0.1.tgz", + "integrity": "sha1-hpgJU3LVjb7jRv/Qxwk/mfj561o=", + "dev": true, + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "http://registry.npm.taobao.org/dashdash/download/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "http://r.cnpmjs.org/decamelize/download/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "http://r.cnpmjs.org/decode-uri-component/download/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.0.tgz", + "integrity": "sha512-ZbfWJq/wN1Z273o7mUSjILYqehAktR2NVoSrOukDkU9kg2v/Uv89yU4Cvz8seJeAmtN5oqiefKq8FPuXOboqLw==", + "dev": true, + "requires": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + } + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "http://r.cnpmjs.org/define-property/download/define-property-2.0.2.tgz", + "integrity": "sha1-1Flono1lS6d+AqgX+HENcCyxbp0=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "http://r.cnpmjs.org/is-descriptor/download/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "del": { + "version": "3.0.0", + "resolved": "http://r.cnpmjs.org/del/download/del-3.0.0.tgz", + "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", + "dev": true, + "requires": { + "globby": "^6.1.0", + "is-path-cwd": "^1.0.0", + "is-path-in-cwd": "^1.0.0", + "p-map": "^1.1.1", + "pify": "^3.0.0", + "rimraf": "^2.2.8" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "http://r.cnpmjs.org/pify/download/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/delayed-stream/download/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "depd": { + "version": "1.1.2", + "resolved": "http://r.cnpmjs.org/depd/download/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "des.js": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/des.js/download/des.js-1.0.0.tgz", + "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "destroy": { + "version": "1.0.4", + "resolved": "http://r.cnpmjs.org/destroy/download/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "detect-node": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", + "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==", + "dev": true + }, + "diagnostics": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/diagnostics/-/diagnostics-1.1.1.tgz", + "integrity": "sha512-8wn1PmdunLJ9Tqbx+Fx/ZEuHfJf4NKSN2ZBj7SJC/OWRWha843+WsTjqMe1B5E3p28jqBlp+mJ2fPVxPyNgYKQ==", + "requires": { + "colorspace": "1.1.x", + "enabled": "1.0.x", + "kuler": "1.0.x" + } + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "http://r.cnpmjs.org/diffie-hellman/download/diffie-hellman-5.0.3.tgz", + "integrity": "sha1-QOjumPVaIUlgcUaSHGPhrl89KHU=", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "dns-equal": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/dns-equal/download/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", + "dev": true + }, + "dns-packet": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", + "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", + "dev": true, + "requires": { + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" + } + }, + "dns-txt": { + "version": "2.0.2", + "resolved": "http://r.cnpmjs.org/dns-txt/download/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "dev": true, + "requires": { + "buffer-indexof": "^1.0.0" + } + }, + "domain-browser": { + "version": "1.2.0", + "resolved": "http://r.cnpmjs.org/domain-browser/download/domain-browser-1.2.0.tgz", + "integrity": "sha1-PTH1AZGmdJ3RN1p/Ui6CPULlTto=", + "dev": true + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "http://registry.npm.taobao.org/ecc-jsbn/download/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "echarts": { + "version": "4.9.0", + "resolved": "https://registry.npm.taobao.org/echarts/download/echarts-4.9.0.tgz?cache=0&sync_timestamp=1612592564808&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fecharts%2Fdownload%2Fecharts-4.9.0.tgz", + "integrity": "sha1-qbm6oD8Doqcx5jQMVb77V6nhNH0=", + "requires": { + "zrender": "4.3.2" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "http://r.cnpmjs.org/ee-first/download/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "electron-to-chromium": { + "version": "1.3.427", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.427.tgz", + "integrity": "sha512-/rG5G7Opcw68/Yrb4qYkz07h3bESVRJjUl4X/FrKLXzoUJleKm6D7K7rTTz8V5LUWnd+BbTOyxJX2XprRqHD8A==" + }, + "elliptic": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", + "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", + "dev": true, + "requires": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + } + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "http://r.cnpmjs.org/emojis-list/download/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "dev": true + }, + "enabled": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/enabled/-/enabled-1.0.2.tgz", + "integrity": "sha1-ll9lE9LC0cX0ZStkouM5ZGf8L5M=", + "requires": { + "env-variable": "0.0.x" + } + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "http://r.cnpmjs.org/encodeurl/download/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true + }, + "enhanced-resolve": { + "version": "3.4.1", + "resolved": "http://r.cnpmjs.org/enhanced-resolve/download/enhanced-resolve-3.4.1.tgz", + "integrity": "sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.4.0", + "object-assign": "^4.0.1", + "tapable": "^0.2.7" + }, + "dependencies": { + "tapable": { + "version": "0.2.9", + "resolved": "http://r.cnpmjs.org/tapable/download/tapable-0.2.9.tgz", + "integrity": "sha1-ry2LvJsE907hevK02QSPgHrNGKg=", + "dev": true + } + } + }, + "env-variable": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/env-variable/-/env-variable-0.0.5.tgz", + "integrity": "sha512-zoB603vQReOFvTg5xMl9I1P2PnHsHQQKTEowsKKD7nseUfJq6UWzK+4YtlWUO1nhiQUxe6XMkk+JleSZD1NZFA==" + }, + "errno": { + "version": "0.1.7", + "resolved": "http://r.cnpmjs.org/errno/download/errno-0.1.7.tgz", + "integrity": "sha1-RoTXF3mtOa8Xfj8AeZb3xnyFJhg=", + "dev": true, + "requires": { + "prr": "~1.0.1" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "http://r.cnpmjs.org/error-ex/download/error-ex-1.3.2.tgz", + "integrity": "sha1-tKxAZIEH/c3PriQvQovqihTU8b8=", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.16.0.tgz", + "integrity": "sha512-xdQnfykZ9JMEiasTAJZJdMWCQ1Vm00NBw79/AWi7ELfZuuPCSOMDZbT9mkOfSctVtfhb+sAAzrm+j//GjjLHLg==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.0", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.0", + "is-callable": "^1.1.4", + "is-regex": "^1.0.4", + "object-inspect": "^1.6.0", + "object-keys": "^1.1.1", + "string.prototype.trimleft": "^2.1.0", + "string.prototype.trimright": "^2.1.0" + } + }, + "es-to-primitive": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", + "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "es5-ext": { + "version": "0.10.52", + "resolved": "http://r.cnpmjs.org/es5-ext/download/es5-ext-0.10.52.tgz", + "integrity": "sha1-uyF3fpGaBCY3Nt7RIKnWZfEOpj8=", + "dev": true, + "requires": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.2", + "next-tick": "~1.0.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "http://r.cnpmjs.org/es6-iterator/download/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-map": { + "version": "0.1.5", + "resolved": "http://r.cnpmjs.org/es6-map/download/es6-map-0.1.5.tgz", + "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", + "es6-set": "~0.1.5", + "es6-symbol": "~3.1.1", + "event-emitter": "~0.3.5" + } + }, + "es6-set": { + "version": "0.1.5", + "resolved": "http://r.cnpmjs.org/es6-set/download/es6-set-0.1.5.tgz", + "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", + "es6-symbol": "3.1.1", + "event-emitter": "~0.3.5" + }, + "dependencies": { + "es6-symbol": { + "version": "3.1.1", + "resolved": "http://r.cnpmjs.org/es6-symbol/download/es6-symbol-3.1.1.tgz", + "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14" + } + } + } + }, + "es6-symbol": { + "version": "3.1.3", + "resolved": "http://r.cnpmjs.org/es6-symbol/download/es6-symbol-3.1.3.tgz", + "integrity": "sha1-utXTwbzawoJp9MszHkMceKxwXRg=", + "dev": true, + "requires": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "es6-weak-map": { + "version": "2.0.3", + "resolved": "http://r.cnpmjs.org/es6-weak-map/download/es6-weak-map-2.0.3.tgz", + "integrity": "sha1-ttofFswswNm+Q+a9v8Xn383zHVM=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" + } + }, + "escape-html": { + "version": "1.0.3", + "resolved": "http://r.cnpmjs.org/escape-html/download/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "escope": { + "version": "3.6.0", + "resolved": "http://r.cnpmjs.org/escope/download/escope-3.6.0.tgz", + "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", + "dev": true, + "requires": { + "es6-map": "^0.1.3", + "es6-weak-map": "^2.0.1", + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "esrecurse": { + "version": "4.2.1", + "resolved": "http://r.cnpmjs.org/esrecurse/download/esrecurse-4.2.1.tgz", + "integrity": "sha1-AHo7n9vCs7uH5IeeoZyS/b05Qs8=", + "dev": true, + "requires": { + "estraverse": "^4.1.0" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "http://r.cnpmjs.org/estraverse/download/estraverse-4.3.0.tgz", + "integrity": "sha1-OYrT88WiSUi+dyXoPRGn3ijNvR0=", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "http://r.cnpmjs.org/etag/download/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true + }, + "event-emitter": { + "version": "0.3.5", + "resolved": "http://r.cnpmjs.org/event-emitter/download/event-emitter-0.3.5.tgz", + "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "eventemitter3": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", + "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==", + "dev": true + }, + "events": { + "version": "3.0.0", + "resolved": "http://r.cnpmjs.org/events/download/events-3.0.0.tgz", + "integrity": "sha1-mgoN+vYok9krh1uPJpjKQRSXPog=", + "dev": true + }, + "eventsource": { + "version": "0.1.6", + "resolved": "http://r.cnpmjs.org/eventsource/download/eventsource-0.1.6.tgz", + "integrity": "sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI=", + "dev": true, + "requires": { + "original": ">=0.0.5" + } + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "http://r.cnpmjs.org/evp_bytestokey/download/evp_bytestokey-1.0.3.tgz", + "integrity": "sha1-f8vbGY3HGVlDLv4ThCaE4FJaywI=", + "dev": true, + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "http://r.cnpmjs.org/expand-brackets/download/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "http://r.cnpmjs.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "http://r.cnpmjs.org/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "dev": true, + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "array-flatten": { + "version": "1.1.1", + "resolved": "http://r.cnpmjs.org/array-flatten/download/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "dev": true + } + } + }, + "ext": { + "version": "1.1.2", + "resolved": "http://r.cnpmjs.org/ext/download/ext-1.1.2.tgz", + "integrity": "sha1-0dIWyDZBu0y3aEYisGPP9EoZzjU=", + "dev": true, + "requires": { + "type": "^2.0.0" + }, + "dependencies": { + "type": { + "version": "2.0.0", + "resolved": "http://r.cnpmjs.org/type/download/type-2.0.0.tgz", + "integrity": "sha1-Xxb/bvLrRPJgSU2uJxAzspwJqcM=", + "dev": true + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "http://registry.npm.taobao.org/extend/download/extend-3.0.2.tgz", + "integrity": "sha1-+LETa0Bx+9jrFAr/hYsQGewpFfo=" + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "http://r.cnpmjs.org/extend-shallow/download/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "http://r.cnpmjs.org/is-extendable/download/is-extendable-1.0.1.tgz", + "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "http://r.cnpmjs.org/extglob/download/extglob-2.0.4.tgz", + "integrity": "sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM=", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/define-property/download/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "http://r.cnpmjs.org/is-descriptor/download/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "http://registry.npm.taobao.org/extsprintf/download/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/fast-json-stable-stringify/download/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" + }, + "fast-safe-stringify": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", + "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==" + }, + "faye-websocket": { + "version": "0.10.0", + "resolved": "http://r.cnpmjs.org/faye-websocket/download/faye-websocket-0.10.0.tgz", + "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "fecha": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-2.3.3.tgz", + "integrity": "sha512-lUGBnIamTAwk4znq5BcqsDaxSmZ9nDVJaij6NvRt/Tg4R69gERA+otPKbS86ROw9nxVMw2/mp1fnaiWqbs6Sdg==" + }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/file-uri-to-path/download/file-uri-to-path-1.0.0.tgz", + "integrity": "sha1-VTp7hEb/b2hDWcRF8eN6BdrMM90=", + "dev": true, + "optional": true + }, + "fill-range": { + "version": "4.0.0", + "resolved": "http://r.cnpmjs.org/fill-range/download/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "flyio": { + "version": "0.6.14", + "resolved": "http://registry.npm.taobao.org/flyio/download/flyio-0.6.14.tgz", + "integrity": "sha1-xdg+t6m0/ByRWkY9LqbfznVcLW8=", + "requires": { + "request": "^2.85.0" + } + }, + "follow-redirects": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.0.tgz", + "integrity": "sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA==", + "dev": true + }, + "font-awesome": { + "version": "4.7.0", + "resolved": "https://registry.npm.taobao.org/font-awesome/download/font-awesome-4.7.0.tgz", + "integrity": "sha1-j6jPBBGhoxr9B7BtKQK7n8gVoTM=" + }, + "for-in": { + "version": "1.0.2", + "resolved": "http://r.cnpmjs.org/for-in/download/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "http://registry.npm.taobao.org/forever-agent/download/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + }, + "form-data": { + "version": "2.3.3", + "resolved": "http://registry.npm.taobao.org/form-data/download/form-data-2.3.3.tgz", + "integrity": "sha1-3M5SwF9kTymManq5Nr1yTO/786Y=", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "forwarded": { + "version": "0.1.2", + "resolved": "http://r.cnpmjs.org/forwarded/download/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "dev": true + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "http://r.cnpmjs.org/fragment-cache/download/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "^0.2.2" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "http://r.cnpmjs.org/fresh/download/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/fs.realpath/download/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npm.taobao.org/fsevents/download/fsevents-1.2.13.tgz", + "integrity": "sha1-8yXLBFVZJCi88Rs4M3DvcOO/zDg=", + "dev": true, + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "http://r.cnpmjs.org/get-caller-file/download/get-caller-file-1.0.3.tgz", + "integrity": "sha1-+Xj6TJDR3+f/LWvtoqUV5xO9z0o=", + "dev": true + }, + "get-stdin": { + "version": "4.0.1", + "resolved": "http://r.cnpmjs.org/get-stdin/download/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true + }, + "get-value": { + "version": "2.0.6", + "resolved": "http://r.cnpmjs.org/get-value/download/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "http://registry.npm.taobao.org/getpass/download/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.5.tgz", + "integrity": "sha512-J9dlskqUXK1OeTOYBEn5s8aMukWMwWfs+rPTn/jn50Ux4MNXVhubL1wu/j2t+H4NVI+cXEcCaYellqaPVGXNqQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "http://r.cnpmjs.org/glob-parent/download/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "http://r.cnpmjs.org/is-glob/download/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "globby": { + "version": "6.1.0", + "resolved": "http://r.cnpmjs.org/globby/download/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "graceful-fs": { + "version": "4.2.3", + "resolved": "http://r.cnpmjs.org/graceful-fs/download/graceful-fs-4.2.3.tgz", + "integrity": "sha1-ShL/G2A3bvCYYsIJPt2Qgyi+hCM=", + "dev": true + }, + "handle-thing": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.0.tgz", + "integrity": "sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ==", + "dev": true + }, + "har-schema": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/har-schema/download/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + }, + "har-validator": { + "version": "5.1.3", + "resolved": "http://registry.npm.taobao.org/har-validator/download/har-validator-5.1.3.tgz", + "integrity": "sha1-HvievT5JllV2de7ZiTEQ3DUPoIA=", + "requires": { + "ajv": "^6.5.5", + "har-schema": "^2.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "2.0.0", + "resolved": "http://r.cnpmjs.org/has-flag/download/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + }, + "has-symbols": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/has-symbols/download/has-symbols-1.0.0.tgz", + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", + "dev": true + }, + "has-value": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/has-value/download/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/has-values/download/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "kind-of": { + "version": "4.0.0", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "hash-base": { + "version": "3.0.4", + "resolved": "http://r.cnpmjs.org/hash-base/download/hash-base-3.0.4.tgz", + "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "http://r.cnpmjs.org/hmac-drbg/download/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dev": true, + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "hosted-git-info": { + "version": "2.8.5", + "resolved": "http://r.cnpmjs.org/hosted-git-info/download/hosted-git-info-2.8.5.tgz", + "integrity": "sha1-dZz88sTRVq3lmwst+r3cQqa5xww=", + "dev": true + }, + "hpack.js": { + "version": "2.1.6", + "resolved": "http://r.cnpmjs.org/hpack.js/download/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "html-entities": { + "version": "1.2.1", + "resolved": "http://r.cnpmjs.org/html-entities/download/html-entities-1.2.1.tgz", + "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=", + "dev": true + }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "http://r.cnpmjs.org/http-deceiver/download/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", + "dev": true + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "http://r.cnpmjs.org/inherits/download/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } + } + }, + "http-parser-js": { + "version": "0.4.10", + "resolved": "http://r.cnpmjs.org/http-parser-js/download/http-parser-js-0.4.10.tgz", + "integrity": "sha1-ksnBN0w1CF912zWexWzCV8u5P6Q=", + "dev": true + }, + "http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-proxy-middleware": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", + "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", + "dev": true, + "requires": { + "http-proxy": "^1.17.0", + "is-glob": "^4.0.0", + "lodash": "^4.17.11", + "micromatch": "^3.1.10" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/http-signature/download/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "https-browserify": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/https-browserify/download/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "dev": true + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ieee754": { + "version": "1.1.13", + "resolved": "http://r.cnpmjs.org/ieee754/download/ieee754-1.1.13.tgz", + "integrity": "sha1-7BaFWOlaoYH9h9N/VcMrvLZwi4Q=", + "dev": true + }, + "import-local": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-1.0.0.tgz", + "integrity": "sha512-vAaZHieK9qjGo58agRBg+bhHX3hoTZU/Oa3GESWLz7t1U62fk63aHuDJJEteXoDeTCcPmUT+z38gkHPZkkmpmQ==", + "dev": true, + "requires": { + "pkg-dir": "^2.0.0", + "resolve-cwd": "^2.0.0" + }, + "dependencies": { + "find-up": { + "version": "2.1.0", + "resolved": "http://r.cnpmjs.org/find-up/download/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "http://r.cnpmjs.org/locate-path/download/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "http://r.cnpmjs.org/p-locate/download/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/p-try/download/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "pkg-dir": { + "version": "2.0.0", + "resolved": "http://r.cnpmjs.org/pkg-dir/download/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, + "requires": { + "find-up": "^2.1.0" + } + } + } + }, + "indent-string": { + "version": "2.1.0", + "resolved": "http://r.cnpmjs.org/indent-string/download/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "dev": true, + "requires": { + "repeating": "^2.0.0" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "http://r.cnpmjs.org/inflight/download/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "http://r.cnpmjs.org/inherits/download/inherits-2.0.4.tgz", + "integrity": "sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w=" + }, + "internal-ip": { + "version": "1.2.0", + "resolved": "http://r.cnpmjs.org/internal-ip/download/internal-ip-1.2.0.tgz", + "integrity": "sha1-rp+/k7mEh4eF1QqN4bNWlWBYz1w=", + "dev": true, + "requires": { + "meow": "^3.3.0" + } + }, + "interpret": { + "version": "1.2.0", + "resolved": "http://r.cnpmjs.org/interpret/download/interpret-1.2.0.tgz", + "integrity": "sha1-1QYaYiS+WOgIOYX1AU2EQ1lXYpY=", + "dev": true + }, + "invert-kv": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/invert-kv/download/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "dev": true + }, + "ip": { + "version": "1.1.5", + "resolved": "http://r.cnpmjs.org/ip/download/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, + "ipaddr.js": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz", + "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==", + "dev": true + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "http://r.cnpmjs.org/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-arguments": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", + "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==", + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "http://r.cnpmjs.org/is-arrayish/download/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "http://r.cnpmjs.org/is-binary-path/download/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "http://r.cnpmjs.org/is-buffer/download/is-buffer-1.1.6.tgz", + "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=", + "dev": true + }, + "is-callable": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", + "dev": true + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "http://r.cnpmjs.org/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-date-object": { + "version": "1.0.1", + "resolved": "http://r.cnpmjs.org/is-date-object/download/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", + "dev": true + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "http://r.cnpmjs.org/is-descriptor/download/is-descriptor-0.1.6.tgz", + "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-5.1.0.tgz", + "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=", + "dev": true + } + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "http://r.cnpmjs.org/is-extendable/download/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "http://r.cnpmjs.org/is-extglob/download/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-finite": { + "version": "1.0.2", + "resolved": "http://r.cnpmjs.org/is-finite/download/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/is-fullwidth-code-point/download/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-glob": { + "version": "4.0.1", + "resolved": "http://r.cnpmjs.org/is-glob/download/is-glob-4.0.1.tgz", + "integrity": "sha1-dWfb6fL14kZ7x3q4PEopSCQHpdw=", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "http://r.cnpmjs.org/is-number/download/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-path-cwd": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/is-path-cwd/download/is-path-cwd-1.0.0.tgz", + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", + "dev": true + }, + "is-path-in-cwd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", + "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", + "dev": true, + "requires": { + "is-path-inside": "^1.0.0" + } + }, + "is-path-inside": { + "version": "1.0.1", + "resolved": "http://r.cnpmjs.org/is-path-inside/download/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "dev": true, + "requires": { + "path-is-inside": "^1.0.1" + } + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "http://r.cnpmjs.org/is-plain-object/download/is-plain-object-2.0.4.tgz", + "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "is-regex": { + "version": "1.0.4", + "resolved": "http://r.cnpmjs.org/is-regex/download/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "dev": true, + "requires": { + "has": "^1.0.1" + } + }, + "is-stream": { + "version": "1.1.0", + "resolved": "http://r.cnpmjs.org/is-stream/download/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, + "is-symbol": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", + "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "dev": true, + "requires": { + "has-symbols": "^1.0.0" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-typedarray/download/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "http://r.cnpmjs.org/is-utf8/download/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "is-windows": { + "version": "1.0.2", + "resolved": "http://r.cnpmjs.org/is-windows/download/is-windows-1.0.2.tgz", + "integrity": "sha1-0YUOuXkezRjmGCzhKjDzlmNLsZ0=", + "dev": true + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "http://r.cnpmjs.org/is-wsl/download/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/isarray/download/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isexe": { + "version": "2.0.0", + "resolved": "http://r.cnpmjs.org/isexe/download/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "http://r.cnpmjs.org/isobject/download/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "http://registry.npm.taobao.org/isstream/download/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "js-base64": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz", + "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==" + }, + "js-yaml": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-0.3.7.tgz", + "integrity": "sha1-1znY7oZGHlSzVNan19HyrZoWf2I=" + }, + "jsbn": { + "version": "0.1.1", + "resolved": "http://registry.npm.taobao.org/jsbn/download/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + }, + "jsmin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/jsmin/-/jsmin-1.0.1.tgz", + "integrity": "sha1-570NzWSWw79IYyNb9GGj2YqjuYw=" + }, + "json-loader": { + "version": "0.5.7", + "resolved": "http://r.cnpmjs.org/json-loader/download/json-loader-0.5.7.tgz", + "integrity": "sha1-3KFKcCNf+C8KyaOr62DTN6NlGF0=", + "dev": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "http://registry.npm.taobao.org/json-schema/download/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "http://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.4.1.tgz", + "integrity": "sha1-afaofZUTq4u4/mO9sJecRI5oRmA=" + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "http://registry.npm.taobao.org/json-stringify-safe/download/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "json3": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", + "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==", + "dev": true + }, + "json5": { + "version": "1.0.1", + "resolved": "http://r.cnpmjs.org/json5/download/json5-1.0.1.tgz", + "integrity": "sha1-d5+wAYYE+oVOrL9iUhgNg1Q+Pb4=", + "dev": true, + "requires": { + "minimist": "^1.2.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + } + } + }, + "jsprim": { + "version": "1.4.1", + "resolved": "http://registry.npm.taobao.org/jsprim/download/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "jssha": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/jssha/-/jssha-2.3.1.tgz", + "integrity": "sha1-FHshJTaQNcpLL30hDcU58Amz3po=" + }, + "jweixin-module": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jweixin-module/-/jweixin-module-1.4.1.tgz", + "integrity": "sha512-2R2oa1lYhAsclfjKSf3DP4ZiP1dcrQUbM7aklbeJA+UAg/LS7MqoA6UbTy1cs4sbB34z62K4bKW0Z9iazD8ejg==" + }, + "jxLoader": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jxLoader/-/jxLoader-0.1.1.tgz", + "integrity": "sha1-ATTqUUTlM7WU/B/yX/GU4jXFPs0=", + "requires": { + "js-yaml": "0.3.x", + "moo-server": "1.3.x", + "promised-io": "*", + "walker": "1.x" + } + }, + "killable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", + "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==", + "dev": true + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + }, + "kuler": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/kuler/-/kuler-1.0.1.tgz", + "integrity": "sha512-J9nVUucG1p/skKul6DU3PUZrhs0LPulNaeUOox0IyXDi8S4CztTHs1gQphhuZmzXG7VOQSf6NJfKuzteQLv9gQ==", + "requires": { + "colornames": "^1.1.1" + } + }, + "lazy-cache": { + "version": "1.0.4", + "resolved": "http://r.cnpmjs.org/lazy-cache/download/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "dev": true + }, + "lcid": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/lcid/download/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dev": true, + "requires": { + "invert-kv": "^1.0.0" + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "http://r.cnpmjs.org/load-json-file/download/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + } + }, + "loader-runner": { + "version": "2.4.0", + "resolved": "http://r.cnpmjs.org/loader-runner/download/loader-runner-2.4.0.tgz", + "integrity": "sha1-7UcGa/5TTX6ExMe5mYwqdWB9k1c=", + "dev": true + }, + "loader-utils": { + "version": "1.2.3", + "resolved": "http://r.cnpmjs.org/loader-utils/download/loader-utils-1.2.3.tgz", + "integrity": "sha1-H/XcaRHJ8KBiUxpMBLYJQGEIwsc=", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^2.0.0", + "json5": "^1.0.1" + } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" + }, + "logform": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.1.2.tgz", + "integrity": "sha512-+lZh4OpERDBLqjiwDLpAWNQu6KMjnlXH2ByZwCuSqVPJletw0kTWJf5CgSNAUKn1KUkv3m2cUz/LK8zyEy7wzQ==", + "requires": { + "colors": "^1.2.1", + "fast-safe-stringify": "^2.0.4", + "fecha": "^2.3.3", + "ms": "^2.1.1", + "triple-beam": "^1.3.0" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "loglevel": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.4.tgz", + "integrity": "sha512-p0b6mOGKcGa+7nnmKbpzR6qloPbrgLcnio++E+14Vo/XffOGwZtRpUhr8dTH/x2oCMmEoIU0Zwm3ZauhvYD17g==", + "dev": true + }, + "longest": { + "version": "1.0.1", + "resolved": "http://r.cnpmjs.org/longest/download/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", + "dev": true + }, + "loud-rejection": { + "version": "1.6.0", + "resolved": "http://r.cnpmjs.org/loud-rejection/download/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "dev": true, + "requires": { + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" + } + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "http://r.cnpmjs.org/lru-cache/download/lru-cache-4.1.5.tgz", + "integrity": "sha1-i75Q6oW+1ZvJ4z3KuCNe6bz0Q80=", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "makeerror": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", + "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", + "requires": { + "tmpl": "1.0.x" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "http://r.cnpmjs.org/map-cache/download/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "map-obj": { + "version": "1.0.1", + "resolved": "http://r.cnpmjs.org/map-obj/download/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/map-visit/download/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "requires": { + "object-visit": "^1.0.0" + } + }, + "md5.js": { + "version": "1.3.5", + "resolved": "http://r.cnpmjs.org/md5.js/download/md5.js-1.3.5.tgz", + "integrity": "sha1-tdB7jjIW4+J81yjXL3DR5qNCAF8=", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "http://r.cnpmjs.org/media-typer/download/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true + }, + "memory-fs": { + "version": "0.4.1", + "resolved": "http://r.cnpmjs.org/memory-fs/download/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "meow": { + "version": "3.7.0", + "resolved": "http://r.cnpmjs.org/meow/download/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "dev": true, + "requires": { + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + } + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "http://r.cnpmjs.org/merge-descriptors/download/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true + }, + "methods": { + "version": "1.1.2", + "resolved": "http://r.cnpmjs.org/methods/download/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "http://r.cnpmjs.org/micromatch/download/micromatch-3.1.10.tgz", + "integrity": "sha1-cIWbyVyYQJUvNZoGij/En57PrCM=", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "http://r.cnpmjs.org/miller-rabin/download/miller-rabin-4.0.1.tgz", + "integrity": "sha1-8IA1HIZbDcViqEYpZtqlNUPHik0=", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + }, + "mime-db": { + "version": "1.40.0", + "resolved": "https://registry.npm.taobao.org/mime-db/download/mime-db-1.40.0.tgz", + "integrity": "sha1-plBX6ZjbCQ9zKmj2wnbTh9QSbDI=" + }, + "mime-types": { + "version": "2.1.24", + "resolved": "https://registry.npm.taobao.org/mime-types/download/mime-types-2.1.24.tgz", + "integrity": "sha1-tvjQs+lR77d97eyhlM/20W9nb4E=", + "requires": { + "mime-db": "1.40.0" + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "http://r.cnpmjs.org/minimalistic-assert/download/minimalistic-assert-1.0.1.tgz", + "integrity": "sha1-LhlN4ERibUoQ5/f7wAznPoPk1cc=", + "dev": true + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "http://r.cnpmjs.org/minimalistic-crypto-utils/download/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "http://r.cnpmjs.org/mixin-deep/download/mixin-deep-1.3.2.tgz", + "integrity": "sha1-ESC0PcNZp4Xc5ltVuC4lfM9HlWY=", + "dev": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "http://r.cnpmjs.org/is-extendable/download/is-extendable-1.0.1.tgz", + "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "moment": { + "version": "2.24.0", + "resolved": "http://registry.npm.taobao.org/moment/download/moment-2.24.0.tgz", + "integrity": "sha1-DQVdU/UFKqZTyfbraLtdEr9cK1s=" + }, + "moo-server": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/moo-server/-/moo-server-1.3.0.tgz", + "integrity": "sha1-XceVaVZaENbv7VQ5SR5p0jkuWPE=" + }, + "mpvue-echarts": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/mpvue-echarts/-/mpvue-echarts-0.3.2.tgz", + "integrity": "sha512-KULGS1DOMNhXu3nBkBv6BtmnqjyHLc+2Dur7eW+2s2aic1NCOygglCMmAmMEU6/TGSR67ttFA2NYxXPUYbNhWQ==" + }, + "ms": { + "version": "2.0.0", + "resolved": "http://r.cnpmjs.org/ms/download/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "multicast-dns": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", + "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "dev": true, + "requires": { + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" + } + }, + "multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "http://r.cnpmjs.org/multicast-dns-service-types/download/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", + "dev": true + }, + "nan": { + "version": "2.14.2", + "resolved": "https://registry.npm.taobao.org/nan/download/nan-2.14.2.tgz?cache=0&sync_timestamp=1602591684976&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnan%2Fdownload%2Fnan-2.14.2.tgz", + "integrity": "sha1-9TdkAGlRaPTMaUrJOT0MlYXu6hk=", + "dev": true, + "optional": true + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "http://r.cnpmjs.org/nanomatch/download/nanomatch-1.2.13.tgz", + "integrity": "sha1-uHqKpPwN6P5r6IiVs4mD/yZb0Rk=", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "next-tick": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/next-tick/download/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", + "dev": true + }, + "node-forge": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.9.0.tgz", + "integrity": "sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ==", + "dev": true + }, + "node-libs-browser": { + "version": "2.2.1", + "resolved": "http://r.cnpmjs.org/node-libs-browser/download/node-libs-browser-2.2.1.tgz", + "integrity": "sha1-tk9RPRgzhiX5A0bSew0jXmMfZCU=", + "dev": true, + "requires": { + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "0.0.1", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.0", + "url": "^0.11.0", + "util": "^0.11.0", + "vm-browserify": "^1.0.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "http://r.cnpmjs.org/punycode/download/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + } + } + }, + "node-releases": { + "version": "1.1.53", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.53.tgz", + "integrity": "sha512-wp8zyQVwef2hpZ/dJH7SfSrIPD6YoJz6BDQDpGEkcA0s3LpAQoxBIYmfIq6QAhC1DhwsyCgTaTTcONwX8qzCuQ==" + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "http://r.cnpmjs.org/normalize-package-data/download/normalize-package-data-2.5.0.tgz", + "integrity": "sha1-5m2xg4sgDB38IzIl0SyzZSDiNKg=", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "http://r.cnpmjs.org/normalize-path/download/normalize-path-3.0.0.tgz", + "integrity": "sha1-Dc1p/yOhybEf0JeDFmRKA4ghamU=", + "dev": true + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "http://r.cnpmjs.org/npm-run-path/download/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "http://r.cnpmjs.org/number-is-nan/download/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "http://registry.npm.taobao.org/oauth-sign/download/oauth-sign-0.9.0.tgz", + "integrity": "sha1-R6ewFrqmi1+g7PPe4IqFxnmsZFU=" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "http://r.cnpmjs.org/object-assign/download/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-copy": { + "version": "0.1.0", + "resolved": "http://r.cnpmjs.org/object-copy/download/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "http://r.cnpmjs.org/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-inspect": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.6.0.tgz", + "integrity": "sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==", + "dev": true + }, + "object-is": { + "version": "1.0.1", + "resolved": "http://r.cnpmjs.org/object-is/download/object-is-1.0.1.tgz", + "integrity": "sha1-CqYOyZiaCz7Xlc9NBvYs8a1lObY=", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object-visit": { + "version": "1.0.1", + "resolved": "http://r.cnpmjs.org/object-visit/download/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "^3.0.0" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "http://r.cnpmjs.org/object.pick/download/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "on-finished": { + "version": "2.3.0", + "resolved": "http://r.cnpmjs.org/on-finished/download/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "http://r.cnpmjs.org/once/download/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "one-time": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/one-time/-/one-time-0.0.4.tgz", + "integrity": "sha1-+M33eISCb+Tf+T46nMN7HkSAdC4=" + }, + "opn": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", + "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", + "dev": true, + "requires": { + "is-wsl": "^1.1.0" + } + }, + "original": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", + "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", + "dev": true, + "requires": { + "url-parse": "^1.4.3" + } + }, + "os-browserify": { + "version": "0.3.0", + "resolved": "http://r.cnpmjs.org/os-browserify/download/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", + "dev": true + }, + "os-locale": { + "version": "1.4.0", + "resolved": "http://r.cnpmjs.org/os-locale/download/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "dev": true, + "requires": { + "lcid": "^1.0.0" + } + }, + "p-finally": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/p-finally/download/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-map": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", + "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", + "dev": true + }, + "pako": { + "version": "1.0.10", + "resolved": "http://r.cnpmjs.org/pako/download/pako-1.0.10.tgz", + "integrity": "sha1-Qyi621CGpCaqkPVBl31JVdpclzI=", + "dev": true + }, + "parse-asn1": { + "version": "5.1.5", + "resolved": "http://r.cnpmjs.org/parse-asn1/download/parse-asn1-5.1.5.tgz", + "integrity": "sha1-ADJxND2ljclMrOSU+u89IUfs6g4=", + "dev": true, + "requires": { + "asn1.js": "^4.0.0", + "browserify-aes": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "http://r.cnpmjs.org/parse-json/download/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "http://r.cnpmjs.org/pascalcase/download/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, + "path-browserify": { + "version": "0.0.1", + "resolved": "http://r.cnpmjs.org/path-browserify/download/path-browserify-0.0.1.tgz", + "integrity": "sha1-5sTd1+06onxoogzE5Q4aTug7vEo=", + "dev": true + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "http://r.cnpmjs.org/path-dirname/download/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "http://r.cnpmjs.org/path-exists/download/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "http://r.cnpmjs.org/path-is-absolute/download/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "http://r.cnpmjs.org/path-is-inside/download/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/path-key/download/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "http://r.cnpmjs.org/path-parse/download/path-parse-1.0.6.tgz", + "integrity": "sha1-1i27VnlAXXLEc37FhgDp3c8G0kw=", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "http://r.cnpmjs.org/path-to-regexp/download/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true + }, + "path-type": { + "version": "1.1.0", + "resolved": "http://r.cnpmjs.org/path-type/download/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "pbkdf2": { + "version": "3.0.17", + "resolved": "http://r.cnpmjs.org/pbkdf2/download/pbkdf2-3.0.17.tgz", + "integrity": "sha1-l2wgZTBhexTrsyEUI597CTNuk6Y=", + "dev": true, + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "performance-now": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/performance-now/download/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, + "picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "dev": true, + "optional": true + }, + "pify": { + "version": "2.3.0", + "resolved": "http://r.cnpmjs.org/pify/download/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "http://r.cnpmjs.org/pinkie/download/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/pinkie-promise/download/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + }, + "pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", + "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=", + "requires": { + "find-up": "^2.1.0" + }, + "dependencies": { + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" + } + } + }, + "portfinder": { + "version": "1.0.28", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", + "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", + "dev": true, + "requires": { + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.5" + } + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "http://r.cnpmjs.org/posix-character-classes/download/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true + }, + "process": { + "version": "0.11.10", + "resolved": "http://r.cnpmjs.org/process/download/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/process-nextick-args/download/process-nextick-args-2.0.1.tgz", + "integrity": "sha1-eCDZsWEgzFXKmud5JoCufbptf+I=" + }, + "promised-io": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/promised-io/-/promised-io-0.3.5.tgz", + "integrity": "sha1-StIXuzZYvKrplGsXqGaOzYUeE1Y=" + }, + "proxy-addr": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz", + "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==", + "dev": true, + "requires": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.9.0" + } + }, + "prr": { + "version": "1.0.1", + "resolved": "http://r.cnpmjs.org/prr/download/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "http://r.cnpmjs.org/pseudomap/download/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "psl": { + "version": "1.1.31", + "resolved": "http://registry.npm.taobao.org/psl/download/psl-1.1.31.tgz", + "integrity": "sha1-6aqG0BAbWxBcvpOsa3hM1UcnYYQ=" + }, + "public-encrypt": { + "version": "4.0.3", + "resolved": "http://r.cnpmjs.org/public-encrypt/download/public-encrypt-4.0.3.tgz", + "integrity": "sha1-T8ydd6B+SLp1J+fL4N4z0HATMeA=", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/punycode/download/punycode-2.1.1.tgz", + "integrity": "sha1-tYsBCsQMIsVldhbI0sLALHv0eew=" + }, + "qs": { + "version": "6.9.0", + "resolved": "http://r.cnpmjs.org/qs/download/qs-6.9.0.tgz", + "integrity": "sha1-0Sl+KgScUxGctJzKNmrbusyAtAk=" + }, + "querystring": { + "version": "0.2.0", + "resolved": "http://r.cnpmjs.org/querystring/download/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "http://r.cnpmjs.org/querystring-es3/download/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true + }, + "querystringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz", + "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "resolved": "http://r.cnpmjs.org/randombytes/download/randombytes-2.1.0.tgz", + "integrity": "sha1-32+ENy8CcNxlzfYpE0mrekc9Tyo=", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "randomfill": { + "version": "1.0.4", + "resolved": "http://r.cnpmjs.org/randomfill/download/randomfill-1.0.4.tgz", + "integrity": "sha1-ySGW/IarQr6YPxvzF3giSTHWFFg=", + "dev": true, + "requires": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true + }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "dev": true, + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true + } + } + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "http://r.cnpmjs.org/read-pkg/download/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "http://r.cnpmjs.org/read-pkg-up/download/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + }, + "dependencies": { + "find-up": { + "version": "1.1.2", + "resolved": "http://r.cnpmjs.org/find-up/download/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "http://r.cnpmjs.org/path-exists/download/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + } + } + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "http://r.cnpmjs.org/readable-stream/download/readable-stream-2.3.6.tgz", + "integrity": "sha1-sRwn2IuP8fvgcGQ8+UsMea4bCq8=", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "http://r.cnpmjs.org/readdirp/download/readdirp-2.2.1.tgz", + "integrity": "sha1-DodiKjMlqjPokihcr4tOhGUppSU=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "redent": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/redent/download/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "dev": true, + "requires": { + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "http://r.cnpmjs.org/regex-not/download/regex-not-1.0.2.tgz", + "integrity": "sha1-H07OJ+ALC2XgJHpoEOaoXYOldSw=", + "dev": true, + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "regexp.prototype.flags": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.2.0.tgz", + "integrity": "sha512-ztaw4M1VqgMwl9HlPpOuiYgItcHlunW0He2fE6eNfT6E/CF2FtYi9ofOYe4mKntstYk0Fyh/rDRBdS3AnxjlrA==", + "dev": true, + "requires": { + "define-properties": "^1.1.2" + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "http://r.cnpmjs.org/remove-trailing-separator/download/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "repeat-element": { + "version": "1.1.3", + "resolved": "http://r.cnpmjs.org/repeat-element/download/repeat-element-1.1.3.tgz", + "integrity": "sha1-eC4NglwMWjuzlzH4Tv7mt0Lmsc4=", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "http://r.cnpmjs.org/repeat-string/download/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "repeating": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/repeating/download/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, + "requires": { + "is-finite": "^1.0.0" + } + }, + "request": { + "version": "2.88.0", + "resolved": "http://registry.npm.taobao.org/request/download/request-2.88.0.tgz?cache=0&other_urls=http%3A%2F%2Fregistry.npm.taobao.org%2Frequest%2Fdownload%2Frequest-2.88.0.tgz", + "integrity": "sha1-nC/KT301tZLv5Xx/ClXoEFIST+8=", + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.0", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.4.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "qs": { + "version": "6.5.2", + "resolved": "http://registry.npm.taobao.org/qs/download/qs-6.5.2.tgz", + "integrity": "sha1-yzroBuh0BERYTvFUzo7pjUA/PjY=" + } + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "http://r.cnpmjs.org/require-directory/download/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "http://r.cnpmjs.org/require-main-filename/download/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, + "requires-port": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/requires-port/download/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "resolve": { + "version": "1.12.0", + "resolved": "http://r.cnpmjs.org/resolve/download/resolve-1.12.0.tgz", + "integrity": "sha1-P8ZEo1yEpIVUYJ/ybsUrZvpXffY=", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + }, + "resolve-cwd": { + "version": "2.0.0", + "resolved": "http://r.cnpmjs.org/resolve-cwd/download/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "dev": true, + "requires": { + "resolve-from": "^3.0.0" + } + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "http://r.cnpmjs.org/resolve-from/download/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "http://r.cnpmjs.org/resolve-url/download/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "ret": { + "version": "0.1.15", + "resolved": "http://r.cnpmjs.org/ret/download/ret-0.1.15.tgz", + "integrity": "sha1-uKSCXVvbH8P29Twrwz+BOIaBx7w=", + "dev": true + }, + "right-align": { + "version": "0.1.3", + "resolved": "http://r.cnpmjs.org/right-align/download/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "dev": true, + "requires": { + "align-text": "^0.1.1" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "http://r.cnpmjs.org/ripemd160/download/ripemd160-2.0.2.tgz", + "integrity": "sha1-ocGm9iR1FXe6XQeRTLyShQWFiQw=", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "http://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz", + "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=" + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "http://r.cnpmjs.org/safe-regex/download/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "http://registry.npm.taobao.org/safer-buffer/download/safer-buffer-2.1.2.tgz", + "integrity": "sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo=" + }, + "select-hose": { + "version": "2.0.0", + "resolved": "http://r.cnpmjs.org/select-hose/download/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", + "dev": true + }, + "selfsigned": { + "version": "1.10.7", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.7.tgz", + "integrity": "sha512-8M3wBCzeWIJnQfl43IKwOmC4H/RAp50S8DF60znzjW5GVqTcSe2vWclt7hmYVPkKPlHWOu5EaWOMZ2Y6W8ZXTA==", + "dev": true, + "requires": { + "node-forge": "0.9.0" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "http://r.cnpmjs.org/semver/download/semver-5.7.1.tgz", + "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=", + "dev": true + }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "http://r.cnpmjs.org/ms/download/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + } + } + }, + "serve-index": { + "version": "1.9.1", + "resolved": "http://r.cnpmjs.org/serve-index/download/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "http-errors": { + "version": "1.6.3", + "resolved": "http://r.cnpmjs.org/http-errors/download/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "http://r.cnpmjs.org/inherits/download/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + } + } + }, + "serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "http://r.cnpmjs.org/set-blocking/download/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "set-value": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/set-value/download/set-value-2.0.1.tgz", + "integrity": "sha1-oY1AUw5vB95CKMfe/kInr4ytAFs=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "http://r.cnpmjs.org/setimmediate/download/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "dev": true + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "dev": true + }, + "sha.js": { + "version": "2.4.11", + "resolved": "http://r.cnpmjs.org/sha.js/download/sha.js-2.4.11.tgz", + "integrity": "sha1-N6XPC4HsvGlD3hCbopYNGyZYSuc=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "http://r.cnpmjs.org/shebang-command/download/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/shebang-regex/download/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "http://r.cnpmjs.org/signal-exit/download/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "requires": { + "is-arrayish": "^0.3.1" + }, + "dependencies": { + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + } + } + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "http://r.cnpmjs.org/snapdragon/download/snapdragon-0.8.2.tgz", + "integrity": "sha1-ZJIufFZbDhQgS6GqfWlkJ40lGC0=", + "dev": true, + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "http://r.cnpmjs.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "http://r.cnpmjs.org/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "http://r.cnpmjs.org/snapdragon-node/download/snapdragon-node-2.1.1.tgz", + "integrity": "sha1-bBdfhv8UvbByRWPo88GwIaKGhTs=", + "dev": true, + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/define-property/download/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "http://r.cnpmjs.org/is-descriptor/download/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "http://r.cnpmjs.org/snapdragon-util/download/snapdragon-util-3.0.1.tgz", + "integrity": "sha1-+VZHlIbyrNeXAGk/b3uAXkWrVuI=", + "dev": true, + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "sockjs": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.19.tgz", + "integrity": "sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==", + "dev": true, + "requires": { + "faye-websocket": "^0.10.0", + "uuid": "^3.0.1" + } + }, + "sockjs-client": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.1.5.tgz", + "integrity": "sha1-G7fA9yIsQPQq3xT0RCy9Eml3GoM=", + "dev": true, + "requires": { + "debug": "^2.6.6", + "eventsource": "0.1.6", + "faye-websocket": "~0.11.0", + "inherits": "^2.0.1", + "json3": "^3.3.2", + "url-parse": "^1.1.8" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "faye-websocket": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", + "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + } + } + }, + "source-list-map": { + "version": "2.0.1", + "resolved": "http://r.cnpmjs.org/source-list-map/download/source-list-map-2.0.1.tgz", + "integrity": "sha1-OZO9hzv8SEecyp6jpUeDXHwVSzQ=", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "http://r.cnpmjs.org/source-map/download/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "source-map-resolve": { + "version": "0.5.2", + "resolved": "http://r.cnpmjs.org/source-map-resolve/download/source-map-resolve-0.5.2.tgz", + "integrity": "sha1-cuLMNAlVQ+Q7LGKyxMENSpBU8lk=", + "dev": true, + "requires": { + "atob": "^2.1.1", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "http://r.cnpmjs.org/source-map-url/download/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true + }, + "spdx-correct": { + "version": "3.1.0", + "resolved": "http://r.cnpmjs.org/spdx-correct/download/spdx-correct-3.1.0.tgz", + "integrity": "sha1-+4PlBERSaPFUsHTiGMh8ADzTHfQ=", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.2.0", + "resolved": "http://r.cnpmjs.org/spdx-exceptions/download/spdx-exceptions-2.2.0.tgz", + "integrity": "sha1-LqRQrudPKom/uUUZwH/Nb0EyKXc=", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "http://r.cnpmjs.org/spdx-expression-parse/download/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha1-meEZt6XaAOBUkcn6M4t5BII7QdA=", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.5", + "resolved": "http://r.cnpmjs.org/spdx-license-ids/download/spdx-license-ids-3.0.5.tgz", + "integrity": "sha1-NpS1gEVnpFjTyARYQqY1hjL2JlQ=", + "dev": true + }, + "spdy": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.1.tgz", + "integrity": "sha512-HeZS3PBdMA+sZSu0qwpCxl3DeALD5ASx8pAX0jZdKXSpPWbQ6SYGnlg3BBmYLx5LtiZrmkAZfErCm2oECBcioA==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "readable-stream": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", + "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "split-string": { + "version": "3.1.0", + "resolved": "http://r.cnpmjs.org/split-string/download/split-string-3.1.0.tgz", + "integrity": "sha1-fLCd2jqGWFcFxks5pkZgOGguj+I=", + "dev": true, + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "sshpk": { + "version": "1.16.1", + "resolved": "http://registry.npm.taobao.org/sshpk/download/sshpk-1.16.1.tgz", + "integrity": "sha1-+2YcC+8ps520B2nuOfpwCT1vaHc=", + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" + }, + "static-extend": { + "version": "0.1.2", + "resolved": "http://r.cnpmjs.org/static-extend/download/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "http://r.cnpmjs.org/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "http://r.cnpmjs.org/statuses/download/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true + }, + "stream-browserify": { + "version": "2.0.2", + "resolved": "http://r.cnpmjs.org/stream-browserify/download/stream-browserify-2.0.2.tgz", + "integrity": "sha1-h1IdOKRKp+6RzhzSpH3wy0ndZgs=", + "dev": true, + "requires": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + } + }, + "stream-http": { + "version": "2.8.3", + "resolved": "http://r.cnpmjs.org/stream-http/download/stream-http-2.8.3.tgz", + "integrity": "sha1-stJCRpKIpaJ+xP6JM6z2I95lFPw=", + "dev": true, + "requires": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "http://r.cnpmjs.org/string_decoder/download/string_decoder-1.1.1.tgz", + "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "string-random": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/string-random/-/string-random-0.1.3.tgz", + "integrity": "sha512-g+UsIwzKhNi+9/+Q3Q7hP8R4HkQxiIkQlttnxw6GRdk9pnnkGIv53C6H8dvh8wxAVDhkqpnWeauaPXS1b2sBJg==" + }, + "string-width": { + "version": "1.0.2", + "resolved": "http://r.cnpmjs.org/string-width/download/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string.prototype.trimleft": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz", + "integrity": "sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, + "string.prototype.trimright": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz", + "integrity": "sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "http://r.cnpmjs.org/strip-ansi/download/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "http://r.cnpmjs.org/strip-bom/download/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "^0.2.0" + } + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/strip-eof/download/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "strip-indent": { + "version": "1.0.1", + "resolved": "http://r.cnpmjs.org/strip-indent/download/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "dev": true, + "requires": { + "get-stdin": "^4.0.1" + } + }, + "supports-color": { + "version": "4.5.0", + "resolved": "http://r.cnpmjs.org/supports-color/download/supports-color-4.5.0.tgz", + "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "dev": true, + "requires": { + "has-flag": "^2.0.0" + } + }, + "text-hex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", + "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" + }, + "thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true + }, + "time-stamp": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-2.2.0.tgz", + "integrity": "sha512-zxke8goJQpBeEgD82CXABeMh0LSJcj7CXEd0OHOg45HgcofF7pxNwZm9+RknpxpDhwN4gFpySkApKfFYfRQnUA==", + "dev": true + }, + "timers-browserify": { + "version": "2.0.11", + "resolved": "http://r.cnpmjs.org/timers-browserify/download/timers-browserify-2.0.11.tgz", + "integrity": "sha1-gAsfPu4nLlvFPuRloE0OgEwxIR8=", + "dev": true, + "requires": { + "setimmediate": "^1.0.4" + } + }, + "timespan": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/timespan/-/timespan-2.3.0.tgz", + "integrity": "sha1-SQLOBAvRPYRcj1myfp1ZutbzmSk=" + }, + "tmpl": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", + "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=" + }, + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "http://r.cnpmjs.org/to-arraybuffer/download/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", + "dev": true + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "http://r.cnpmjs.org/to-object-path/download/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://r.cnpmjs.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "http://r.cnpmjs.org/to-regex/download/to-regex-3.0.2.tgz", + "integrity": "sha1-E8/dmzNlUvMLUfM6iuG0Knp1mc4=", + "dev": true, + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "http://r.cnpmjs.org/to-regex-range/download/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "dev": true + }, + "tough-cookie": { + "version": "2.4.3", + "resolved": "http://registry.npm.taobao.org/tough-cookie/download/tough-cookie-2.4.3.tgz", + "integrity": "sha1-U/Nto/R3g7CSWvoG/587FlKA94E=", + "requires": { + "psl": "^1.1.24", + "punycode": "^1.4.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "http://registry.npm.taobao.org/punycode/download/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + } + } + }, + "trim-newlines": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/trim-newlines/download/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", + "dev": true + }, + "triple-beam": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", + "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" + }, + "tty-browserify": { + "version": "0.0.0", + "resolved": "http://r.cnpmjs.org/tty-browserify/download/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "dev": true + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "http://registry.npm.taobao.org/tunnel-agent/download/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "http://registry.npm.taobao.org/tweetnacl/download/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + }, + "type": { + "version": "1.2.0", + "resolved": "http://r.cnpmjs.org/type/download/type-1.2.0.tgz", + "integrity": "sha1-hI3XaY2vo+VKbEeedZxLw/GIR6A=", + "dev": true + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "uglify-js": { + "version": "2.8.29", + "resolved": "http://r.cnpmjs.org/uglify-js/download/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "dev": true, + "requires": { + "source-map": "~0.5.1", + "uglify-to-browserify": "~1.0.0", + "yargs": "~3.10.0" + }, + "dependencies": { + "camelcase": { + "version": "1.2.1", + "resolved": "http://r.cnpmjs.org/camelcase/download/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "dev": true + }, + "cliui": { + "version": "2.1.0", + "resolved": "http://r.cnpmjs.org/cliui/download/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "dev": true, + "requires": { + "center-align": "^0.1.1", + "right-align": "^0.1.1", + "wordwrap": "0.0.2" + } + }, + "yargs": { + "version": "3.10.0", + "resolved": "http://r.cnpmjs.org/yargs/download/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "dev": true, + "requires": { + "camelcase": "^1.0.2", + "cliui": "^2.1.0", + "decamelize": "^1.0.0", + "window-size": "0.1.0" + } + } + } + }, + "uglify-to-browserify": { + "version": "1.0.2", + "resolved": "http://r.cnpmjs.org/uglify-to-browserify/download/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "dev": true, + "optional": true + }, + "uglifyjs-webpack-plugin": { + "version": "0.4.6", + "resolved": "http://r.cnpmjs.org/uglifyjs-webpack-plugin/download/uglifyjs-webpack-plugin-0.4.6.tgz", + "integrity": "sha1-uVH0q7a9YX5m9j64kUmOORdj4wk=", + "dev": true, + "requires": { + "source-map": "^0.5.6", + "uglify-js": "^2.8.29", + "webpack-sources": "^1.0.1" + } + }, + "unifly": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unifly/-/unifly-1.0.2.tgz", + "integrity": "sha512-Lk2CQ/HNspIzA3qqeOhEVnfs6G5yNi/3zY3bjEFm4roPi3FhWhAQ6FZDedWo3OrDfMEmGM3IKdbgekeDfvZ3WQ==" + }, + "union-value": { + "version": "1.0.1", + "resolved": "http://r.cnpmjs.org/union-value/download/union-value-1.0.1.tgz", + "integrity": "sha1-C2/nuDWuzaYcbqTU8CwUIh4QmEc=", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + } + }, + "unpipe": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/unpipe/download/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "unset-value": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/unset-value/download/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "http://r.cnpmjs.org/has-value/download/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "http://r.cnpmjs.org/isobject/download/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "http://r.cnpmjs.org/has-values/download/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true + } + } + }, + "upath": { + "version": "1.2.0", + "resolved": "http://r.cnpmjs.org/upath/download/upath-1.2.0.tgz", + "integrity": "sha1-j2bbzVWog6za5ECK+LA1pQRMGJQ=", + "dev": true + }, + "uri-js": { + "version": "4.2.2", + "resolved": "http://registry.npm.taobao.org/uri-js/download/uri-js-4.2.2.tgz", + "integrity": "sha1-lMVA4f93KVbiKZUHwBCupsiDjrA=", + "requires": { + "punycode": "^2.1.0" + } + }, + "urix": { + "version": "0.1.0", + "resolved": "http://r.cnpmjs.org/urix/download/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "url": { + "version": "0.11.0", + "resolved": "http://r.cnpmjs.org/url/download/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "http://r.cnpmjs.org/punycode/download/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + } + } + }, + "url-parse": { + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", + "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", + "dev": true, + "requires": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "use": { + "version": "3.1.1", + "resolved": "http://r.cnpmjs.org/use/download/use-3.1.1.tgz", + "integrity": "sha1-1QyMrHmhn7wg8pEfVuuXP04QBw8=", + "dev": true + }, + "util": { + "version": "0.11.1", + "resolved": "http://r.cnpmjs.org/util/download/util-0.11.1.tgz", + "integrity": "sha1-MjZzNyDsZLsn9uJvQhqqLhtYjWE=", + "dev": true, + "requires": { + "inherits": "2.0.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "http://r.cnpmjs.org/inherits/download/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "http://r.cnpmjs.org/util-deprecate/download/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "http://r.cnpmjs.org/utils-merge/download/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true + }, + "uuid": { + "version": "3.3.2", + "resolved": "http://registry.npm.taobao.org/uuid/download/uuid-3.3.2.tgz", + "integrity": "sha1-G0r0lV6zB3xQHCOHL8ZROBFYcTE=" + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "http://r.cnpmjs.org/validate-npm-package-license/download/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha1-/JH2uce6FchX9MssXe/uw51PQQo=", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "vary": { + "version": "1.1.2", + "resolved": "http://r.cnpmjs.org/vary/download/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true + }, + "verror": { + "version": "1.10.0", + "resolved": "http://registry.npm.taobao.org/verror/download/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "vm-browserify": { + "version": "1.1.0", + "resolved": "http://r.cnpmjs.org/vm-browserify/download/vm-browserify-1.1.0.tgz", + "integrity": "sha1-vXbWojMj4sqP+hICjcBFWcdfkBk=", + "dev": true + }, + "vuex": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/vuex/download/vuex-3.1.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvuex%2Fdownload%2Fvuex-3.1.1.tgz", + "integrity": "sha1-DCZL/jDNvM+Wq52zF30hGCilkQ4=" + }, + "walker": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", + "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", + "requires": { + "makeerror": "1.0.x" + } + }, + "watchpack": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.4.tgz", + "integrity": "sha512-aWAgTW4MoSJzZPAicljkO1hsi1oKj/RRq/OJQh2PKI2UKL04c2Bs+MBOB+BBABHTXJpf9mCwHN7ANCvYsvY2sg==", + "dev": true, + "requires": { + "chokidar": "^3.4.1", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0", + "watchpack-chokidar2": "^2.0.0" + }, + "dependencies": { + "anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "dev": true, + "optional": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "binary-extensions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", + "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", + "dev": true, + "optional": true + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "optional": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "chokidar": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.2.tgz", + "integrity": "sha512-IZHaDeBeI+sZJRX7lGcXsdzgvZqKv6sECqsbErJA4mHWfpRrD8B97kSFN4cQz6nGBGiuFia1MKR4d6c1o8Cv7A==", + "dev": true, + "optional": true, + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.4.0" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "optional": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "dev": true, + "optional": true + }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "optional": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "optional": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "optional": true + }, + "readdirp": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz", + "integrity": "sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==", + "dev": true, + "optional": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "optional": true, + "requires": { + "is-number": "^7.0.0" + } + } + } + }, + "watchpack-chokidar2": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz", + "integrity": "sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA==", + "dev": true, + "optional": true, + "requires": { + "chokidar": "^2.1.8" + } + }, + "wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "requires": { + "minimalistic-assert": "^1.0.0" + } + }, + "webpack": { + "version": "3.12.0", + "resolved": "http://r.cnpmjs.org/webpack/download/webpack-3.12.0.tgz", + "integrity": "sha1-P540NgNwYC/PY56Xk520hvTsDXQ=", + "dev": true, + "requires": { + "acorn": "^5.0.0", + "acorn-dynamic-import": "^2.0.0", + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0", + "async": "^2.1.2", + "enhanced-resolve": "^3.4.0", + "escope": "^3.6.0", + "interpret": "^1.0.0", + "json-loader": "^0.5.4", + "json5": "^0.5.1", + "loader-runner": "^2.3.0", + "loader-utils": "^1.1.0", + "memory-fs": "~0.4.1", + "mkdirp": "~0.5.0", + "node-libs-browser": "^2.0.0", + "source-map": "^0.5.3", + "supports-color": "^4.2.1", + "tapable": "^0.2.7", + "uglifyjs-webpack-plugin": "^0.4.6", + "watchpack": "^1.4.0", + "webpack-sources": "^1.0.1", + "yargs": "^8.0.2" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "http://r.cnpmjs.org/ansi-regex/download/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "camelcase": { + "version": "4.1.0", + "resolved": "http://r.cnpmjs.org/camelcase/download/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "cross-spawn": { + "version": "5.1.0", + "resolved": "http://r.cnpmjs.org/cross-spawn/download/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "0.7.0", + "resolved": "http://r.cnpmjs.org/execa/download/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "dev": true, + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "http://r.cnpmjs.org/find-up/download/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "get-stream": { + "version": "3.0.0", + "resolved": "http://r.cnpmjs.org/get-stream/download/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "http://r.cnpmjs.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "json5": { + "version": "0.5.1", + "resolved": "http://r.cnpmjs.org/json5/download/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + }, + "load-json-file": { + "version": "2.0.0", + "resolved": "http://r.cnpmjs.org/load-json-file/download/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "http://r.cnpmjs.org/locate-path/download/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "mem": { + "version": "1.1.0", + "resolved": "http://r.cnpmjs.org/mem/download/mem-1.1.0.tgz", + "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "http://r.cnpmjs.org/mimic-fn/download/mimic-fn-1.2.0.tgz", + "integrity": "sha1-ggyGo5M0ZA6ZUWkovQP8qIBX0CI=", + "dev": true + }, + "os-locale": { + "version": "2.1.0", + "resolved": "http://r.cnpmjs.org/os-locale/download/os-locale-2.1.0.tgz", + "integrity": "sha1-QrwpAKa1uL0XN2yOiCtlr8zyS/I=", + "dev": true, + "requires": { + "execa": "^0.7.0", + "lcid": "^1.0.0", + "mem": "^1.1.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "http://r.cnpmjs.org/p-limit/download/p-limit-1.3.0.tgz", + "integrity": "sha1-uGvV8MJWkJEcdZD8v8IBDVSzzLg=", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "http://r.cnpmjs.org/p-locate/download/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/p-try/download/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "path-type": { + "version": "2.0.0", + "resolved": "http://r.cnpmjs.org/path-type/download/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "requires": { + "pify": "^2.0.0" + } + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "http://r.cnpmjs.org/read-pkg/download/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true, + "requires": { + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" + } + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "http://r.cnpmjs.org/read-pkg-up/download/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" + } + }, + "string-width": { + "version": "2.1.1", + "resolved": "http://r.cnpmjs.org/string-width/download/string-width-2.1.1.tgz", + "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "http://r.cnpmjs.org/strip-ansi/download/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "http://r.cnpmjs.org/strip-bom/download/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "tapable": { + "version": "0.2.9", + "resolved": "http://r.cnpmjs.org/tapable/download/tapable-0.2.9.tgz", + "integrity": "sha1-ry2LvJsE907hevK02QSPgHrNGKg=", + "dev": true + }, + "which-module": { + "version": "2.0.0", + "resolved": "http://r.cnpmjs.org/which-module/download/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "y18n": { + "version": "3.2.1", + "resolved": "http://r.cnpmjs.org/y18n/download/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true + }, + "yargs": { + "version": "8.0.2", + "resolved": "http://r.cnpmjs.org/yargs/download/yargs-8.0.2.tgz", + "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", + "dev": true, + "requires": { + "camelcase": "^4.1.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^2.0.0", + "read-pkg-up": "^2.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^7.0.0" + } + }, + "yargs-parser": { + "version": "7.0.0", + "resolved": "http://r.cnpmjs.org/yargs-parser/download/yargs-parser-7.0.0.tgz", + "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", + "dev": true, + "requires": { + "camelcase": "^4.1.0" + } + } + } + }, + "webpack-dev-middleware": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-1.12.2.tgz", + "integrity": "sha512-FCrqPy1yy/sN6U/SaEZcHKRXGlqU0DUaEBL45jkUYoB8foVb6wCnbIJ1HKIx+qUFTW+3JpVcCJCxZ8VATL4e+A==", + "dev": true, + "requires": { + "memory-fs": "~0.4.1", + "mime": "^1.5.0", + "path-is-absolute": "^1.0.0", + "range-parser": "^1.0.3", + "time-stamp": "^2.0.0" + } + }, + "webpack-dev-server": { + "version": "2.11.5", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-2.11.5.tgz", + "integrity": "sha512-7TdOKKt7G3sWEhPKV0zP+nD0c4V9YKUJ3wDdBwQsZNo58oZIRoVIu66pg7PYkBW8A74msP9C2kLwmxGHndz/pw==", + "dev": true, + "requires": { + "ansi-html": "0.0.7", + "array-includes": "^3.0.3", + "bonjour": "^3.5.0", + "chokidar": "^2.1.2", + "compression": "^1.7.3", + "connect-history-api-fallback": "^1.3.0", + "debug": "^3.1.0", + "del": "^3.0.0", + "express": "^4.16.2", + "html-entities": "^1.2.0", + "http-proxy-middleware": "^0.19.1", + "import-local": "^1.0.0", + "internal-ip": "1.2.0", + "ip": "^1.1.5", + "killable": "^1.0.0", + "loglevel": "^1.4.1", + "opn": "^5.1.0", + "portfinder": "^1.0.9", + "selfsigned": "^1.9.1", + "serve-index": "^1.9.1", + "sockjs": "0.3.19", + "sockjs-client": "1.1.5", + "spdy": "^4.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^5.1.0", + "webpack-dev-middleware": "1.12.2", + "yargs": "6.6.0" + }, + "dependencies": { + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "webpack-sources": { + "version": "1.4.3", + "resolved": "http://r.cnpmjs.org/webpack-sources/download/webpack-sources-1.4.3.tgz", + "integrity": "sha1-7t2OwLko+/HL/plOItLYkPMwqTM=", + "dev": true, + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "http://r.cnpmjs.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + } + } + }, + "websocket-driver": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.3.tgz", + "integrity": "sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg==", + "dev": true, + "requires": { + "http-parser-js": ">=0.4.0 <0.4.11", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + } + }, + "websocket-extensions": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz", + "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==", + "dev": true + }, + "which": { + "version": "1.3.1", + "resolved": "http://r.cnpmjs.org/which/download/which-1.3.1.tgz", + "integrity": "sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo=", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "1.0.0", + "resolved": "http://r.cnpmjs.org/which-module/download/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", + "dev": true + }, + "window-size": { + "version": "0.1.0", + "resolved": "http://r.cnpmjs.org/window-size/download/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", + "dev": true + }, + "winston": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.2.1.tgz", + "integrity": "sha512-zU6vgnS9dAWCEKg/QYigd6cgMVVNwyTzKs81XZtTFuRwJOcDdBg7AU0mXVyNbs7O5RH2zdv+BdNZUlx7mXPuOw==", + "requires": { + "async": "^2.6.1", + "diagnostics": "^1.1.1", + "is-stream": "^1.1.0", + "logform": "^2.1.1", + "one-time": "0.0.4", + "readable-stream": "^3.1.1", + "stack-trace": "0.0.x", + "triple-beam": "^1.3.0", + "winston-transport": "^4.3.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", + "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "winston-transport": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.3.0.tgz", + "integrity": "sha512-B2wPuwUi3vhzn/51Uukcao4dIduEiPOcOt9HJ3QeaXgkJ5Z7UwpBzxS4ZGNHtrxrUvTwemsQiSys0ihOf8Mp1A==", + "requires": { + "readable-stream": "^2.3.6", + "triple-beam": "^1.2.0" + } + }, + "wordwrap": { + "version": "0.0.2", + "resolved": "http://r.cnpmjs.org/wordwrap/download/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "dev": true + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "http://r.cnpmjs.org/wrap-ansi/download/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "http://r.cnpmjs.org/wrappy/download/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "wrench": { + "version": "1.3.9", + "resolved": "https://registry.npmjs.org/wrench/-/wrench-1.3.9.tgz", + "integrity": "sha1-bxPsNRRTF+spLKX2UxORskQRFBE=" + }, + "xtend": { + "version": "4.0.2", + "resolved": "http://r.cnpmjs.org/xtend/download/xtend-4.0.2.tgz", + "integrity": "sha1-u3J3n1+kZRhrH0OPZ0+jR/2121Q=", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "http://r.cnpmjs.org/yallist/download/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, + "yargs": { + "version": "6.6.0", + "resolved": "http://r.cnpmjs.org/yargs/download/yargs-6.6.0.tgz", + "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=", + "dev": true, + "requires": { + "camelcase": "^3.0.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.2", + "which-module": "^1.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^4.2.0" + }, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "http://r.cnpmjs.org/camelcase/download/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true + }, + "y18n": { + "version": "3.2.1", + "resolved": "http://r.cnpmjs.org/y18n/download/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true + } + } + }, + "yargs-parser": { + "version": "4.2.1", + "resolved": "http://r.cnpmjs.org/yargs-parser/download/yargs-parser-4.2.1.tgz", + "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=", + "dev": true, + "requires": { + "camelcase": "^3.0.0" + }, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "http://r.cnpmjs.org/camelcase/download/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true + } + } + }, + "zrender": { + "version": "4.3.2", + "resolved": "https://registry.npm.taobao.org/zrender/download/zrender-4.3.2.tgz?cache=0&sync_timestamp=1612184093375&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fzrender%2Fdownload%2Fzrender-4.3.2.tgz", + "integrity": "sha1-7HQy+UFcgsc1hLa3uMR+GwFiCcY=" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..88f8fcd --- /dev/null +++ b/package.json @@ -0,0 +1,40 @@ +{ + "name": "shoppingMall", + "version": "1.0.0", + "description": "#### Description 商城web", + "main": "main.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js", + "start": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js" + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "browserslist": "^4.12.0", + "build": "^0.1.4", + "caniuse-lite": "^1.0.30001051", + "echarts": "^4.9.0", + "flyio": "^0.6.14", + "font-awesome": "^4.7.0", + "js-base64": "^2.6.4", + "jssha": "^2.3.1", + "jweixin-module": "^1.4.1", + "moment": "^2.24.0", + "mpvue-echarts": "^0.3.2", + "qs": "^6.9.0", + "string-random": "^0.1.3", + "unifly": "^1.0.2", + "vuex": "^3.1.0" + }, + "devDependencies": { + "@types/js-base64": "^3.3.1", + "webpack": "^3.12.0", + "webpack-dev-server": "^2.11.5" + }, + "repository": { + "type": "git", + "url": "https://gitee.com/guangzhou_hualei_information/shoppingMall_web.git" + } +} diff --git a/pages.json b/pages.json new file mode 100644 index 0000000..178abe6 --- /dev/null +++ b/pages.json @@ -0,0 +1,405 @@ +{ + "pages": [ + { + "path": "pages/index/start-up", + "style": { + "navigationBarTitleText": "运营中心" + } + }, + { + "path": "pages/index/home", + "style": { + "navigationBarTitleText": "", + "enablePullDownRefresh": true, + "navigationStyle": "custom" //禁用uni-app默认的头部导航 + } + }, + { + "path": "pages/index/all-agent", + "style": { + "navigationBarTitleText": "", + "enablePullDownRefresh": true, + "navigationStyle": "custom" //禁用uni-app默认的头部导航 + } + }, + { + "path": "pages/index/city-agent", + "style": { + "navigationBarTitleText": "", + "enablePullDownRefresh": true, + "navigationStyle": "custom" //禁用uni-app默认的头部导航 + } + }, + { + "path": "pages/index/mall", + "style": { + "navigationBarTitleText": "门店管理", + "enablePullDownRefresh": true, + "navigationStyle": "custom" //禁用uni-app默认的头部导航 + } + }, + { + "path": "pages/index/equipment", + "style": { + "navigationBarTitleText": "设备列表", + "enablePullDownRefresh": true, + "navigationStyle": "custom" //禁用uni-app默认的头部导航 + } + }, + { + "path": "pages/index/mine", + "style": { + "navigationBarTitleText": "结算中心", + "enablePullDownRefresh": true, + "navigationStyle": "custom", //禁用uni-app默认的头部导航 + "navigationBarTextStyle": "black", + "navigationBarBackgroundColor": "#5CE6B5", + "backgroundColor": "#5CE6B5" + } + }, + { + "path": "pages/index/login", + "style": { + "navigationBarTitleText": "登录" + } + } + ], + "globalStyle": { + "navigationBarTextStyle": "black", + "navigationBarTitleText": "商城", + "navigationBarBackgroundColor": "#F8F8F8", + "backgroundColor": "#F8F8F8" + }, + "subPackages": [{ + "root": "pages/mall", + "pages": [ + { + "path": "eq-details", + "style": { + "navigationBarTitleText": "设备名称", + "enablePullDownRefresh": true + } + }, + { + "path": "eq-details-new", + "style": { + "navigationBarTitleText": "设备名称", + "navigationStyle": "custom" + } + }, + { + "path": "relevance-shop", + "style": { + "navigationBarTitleText": "关联店铺" + } + }, + { + "path": "abount-machine", + "style": { + "navigationBarTitleText": "关于本机" + } + }, + { + "path": "auxiliary-use", + "style": { + "navigationBarTitleText": "辅助功能" + } + }, + { + "path": "maintenance-machine", + "style": { + "navigationBarTitleText": "维护" + } + }, + { + "path": "managing-tasks", + "style": { + "navigationBarTitleText": "管理任务" + } + }, + { + "path": "support_language", + "style": { + "navigationBarTitleText": "支持语言" + } + }, + { + "path": "default_language", + "style": { + "navigationBarTitleText": "默认语言", + "enablePullDownRefresh": true + } + }, + { + "path": "update_name", + "style": { + "navigationBarTitleText": "修改名称" + } + }, + { + "path": "clean-nozzle", + "style": { + "navigationBarTitleText": "清洗喷头", + "enablePullDownRefresh": true + } + }, + { + "path": "clean-nozzle-history", + "style": { + "navigationBarTitleText": "清洗喷头记录" + } + }, + { + "path": "clean-nozzle-detection", + "style": { + "navigationBarTitleText": "喷嘴检测" + } + }, + { + "path": "software-update", + "style": { + "navigationBarTitleText": "软件更新" + } + }, + { + "path": "exclusive-services", + "style": { + "navigationBarTitleText": "专属服务" + } + }, + { + "path": "print-tasks", + "style": { + "navigationBarTitleText": "打印任务" + } + }, + { + "path": "arrive-good", + "style": { + "navigationBarTitleText": "上架商品" + } + }, + { + "path": "related-template", + "style": { + "navigationBarTitleText": "关联模板" + } + }, + { + "path": "machine-inventory", + "style": { + "navigationBarTitleText": "设备库存" + } + }, + { + "path": "test-colour", + "style": { + "navigationBarTitleText": "测试色块" + } + }, + { + "path": "first-ink-installation", + "style": { + "navigationBarTitleText": "首次装墨" + } + }, + { + "path": "maintenance-history", + "style": { + "navigationBarTitleText": "维保历史" + } + }, + { + "path": "eq-profit", + "style": { + "navigationBarTitleText": "设备关联收益", + "enablePullDownRefresh": true + } + }, + { + "path": "profit", + "style": { + "navigationBarTitleText": "订单统计", + "enablePullDownRefresh": true + } + }, + { + "path": "informationList", + "style": { + "navigationBarTitleText": "切换代理" + } + }, + { + "path": "stockList", + "style": { + "navigationBarTitleText": "库存" + } + } + ] + }, + { + "root": "pages/store", + "pages": [{ + "path": "shopdetails", + "style": { + "navigationBarTitleText": "新增店铺" + } + }, + { + "path": "equipment_list", + "style": { + "navigationBarTitleText": "设备列表", + "enablePullDownRefresh": true + } + } + ] + }, + { + "root": "pages/mine", + "pages": [{ + "path": "order", + "style": { + "navigationBarTitleText": "订单列表", + "enablePullDownRefresh": true, + "onReachBottomDistance":100 + } + }, + { + "path": "order-details", + "style": { + "navigationBarTitleText": "订单详情" + } + }, + { + "path": "Liquidation", + "style": { + "navigationBarTitleText": "收入明细", + "enablePullDownRefresh": true + } + }, + { + "path": "Liquidation-details", + "style": { + "navigationBarTitleText": "收入详情" + } + }, + { + "path": "bill", + "style": { + "navigationBarTitleText": "账单列表", + "enablePullDownRefresh": true + } + }, + { + "path": "bill-details", + "style": { + "navigationBarTitleText": "账单详情" + } + }, + { + "path": "bill-doubt", + "style": { + "navigationBarTitleText": "账单疑惑" + } + }, + { + "path": "Withdrawal", + "style": { + "navigationBarTitleText": "提现记录", + "enablePullDownRefresh": true + } + }, + { + "path": "Withdrawal-details", + "style": { + "navigationBarTitleText": "提现详情" + } + }, + { + "path": "bank", + "style": { + "navigationBarTitleText": "提现账号" + } + }, + { + "path": "information", + "style": { + "navigationBarTitleText": "代理信息" + } + }, + { + "path": "balance", + "style": { + "navigationBarTitleText": "资金账户" + } + }, + { + "path": "money", + "style": { + "navigationBarTitleText": "提现" + } + }, + { + "path": "goodStock", + "style": { + "navigationBarTitleText": "商品库存", + "enablePullDownRefresh": true + } + }, + { + "path": "Print", + "style": { + "navigationBarTitleText": "打印记录" + } + }, + { + "path": "PrintCard", + "style": { + "navigationBarTitleText": "打印卡记录" + } + }, + { + "path": "PrintUseDetail", + "style": { + "navigationBarTitleText": "打印量" + } + }, + { + "path": "PackageDetail", + "style": { + "navigationBarTitleText": "套餐明细" + } + }, + { + "path": "RightsAndInterests", + "style": { + "navigationBarTitleText": "权益对比" + } + }, + { + "path": "Settle", + "style": { + "navigationBarTitleText": "结算列表" + } + },{ + "path": "SettleDetail", + "style": { + "navigationBarTitleText": "结算明细" + } + }, + { + "path": "UserAgreement", + "style": { + "navigationBarTitleText": "用户协议" + } + }, + { + "path": "PrivacyPolicy", + "style": { + "navigationBarTitleText": "隐私政策" + } + } + ] + } + ] +} diff --git a/pages/index/all-agent.vue b/pages/index/all-agent.vue new file mode 100644 index 0000000..de2bc86 --- /dev/null +++ b/pages/index/all-agent.vue @@ -0,0 +1,1255 @@ +<template> + <view class="full-width content-color" style="background: #fff; width: 100%; position: relative;"> + <!-- 自定义头部 --> + <myhead :title="titleName" :color="'#000'" :titleShow="true" :backShow="true" :background="'#F8F8F8'"></myhead> + <view class="home" v-if="long"> + + <!--订单收益开始--> + <view v-if="selectTopType == 1" class="today"> + <view class="today_ul" style="width:60%;margin-top: -17upx;margin-left:20upx;"> + <view class="today_ul_div"> + <view class="today_order_money"> + <text>{{LoupanList.allOrderIncome.today.order_num }}</text> + </view> + <view class="today_profit_text" >今日订单(笔)</view> + <view class="today_order_money" style="margin-top: 28upx;" > + <text>{{LoupanList.allOrderIncome.yesterday.order_num}}</text> + </view> + <view class="today_profit_text" >昨日订单(笔)</view> + </view> + </view> + + <view class="today_ul" style="width:calc(40% - 20upx);margin-left: 30upx;margin-top: -17upx;"> + <view class="today_ul_div"> + <view class="today_order_money"> + <text> {{LoupanList.allOrderIncome.today.order_valid}}</text> + </view> + <view class="today_profit_text">今日有效(笔)</view> + <view class="today_order_money" style="margin-top: 28upx;" > + <text>{{LoupanList.allOrderIncome.yesterday.order_valid}}</text> + </view> + <view class="today_profit_text" >昨日有效(笔)</view> + </view> + </view> + <label class="fa fa-angle-right" + style="color: #fff; font-size: 40upx; width:5%;height: 80upx; margin-top: 70upx; padding-left: 5upx;" + @click="toProfitPage()"></label> + </view> + <!--订单结束收益-> + + <!--设备开始--> + <view v-if="selectTopType == 2" class="today" style="display: flex; flex-direction: column;"> + <view class="today_ul" style="width:100%;margin-left:30upx;margin-top: -17upx"> + <view class="today_ul_div"> + <view class="today_order_money"> + <text>{{LoupanList.allMachineCount.all}}</text> + </view> + <view class="today_profit_text">设备总数(台)</view> + </view> + </view> + <view class="today_ul" + style="width:100%;display: flex; flex-direction: row ;margin-top:30upx;margin-left:30upx "> + <view class="today_ul_div"> + <view class="today_order_money"> + <text>{{LoupanList.allMachineCount.phone}}</text> + </view> + <view class="today_profit_text">手机壳(台)</view> + </view> + <view class="today_ul_div" style="padding-left: 25upx;"> + <view class="today_order_money"> + <text>{{LoupanList.allMachineCount.shirt}}</text> + </view> + <view class="today_profit_text">T恤(台)</view> + </view> + <view class="today_ul_div" style="padding-left: 25upx;"> + <view class="today_order_money"> + <text>{{LoupanList.allMachineCount.golf}}</text> + </view> + <view class="today_profit_text">高尔夫(台)</view> + </view> + <view class="today_ul_div" style="padding-left: 25upx;"> + <view class="today_order_money"> + <text>{{LoupanList.allMachineCount.orther}}</text> + </view> + <view class="today_profit_text">其他(台)</view> + </view> + </view> + </view> + <!--设备结束-> + + <!--代理开始--> + <view v-if="selectTopType == 3" class="today" style="display: flex; flex-direction: row;"> + <view class="today_ul" style="width:100%;margin-left:30upx;"> + <view class="today_ul_div" style="align-items: center; height: 100%; margin-top: 40upx; "> + <view class="today_order_money"> + <text>{{LoupanList.allPartnerCount.all}}</text> + </view> + <view class="today_profit_text">代理总数(位)</view> + </view> + </view> + <view class="today_ul" style="display: flex; flex-direction: column;margin-left:30upx; margin-top: -30upx; + align-items: center; height: 100%;"> + <view class="today_ul_div"> + <view class="today_order_money"> + <text style="font-size: 40upx;">{{LoupanList.allPartnerCount.domestic}}</text> + </view> + <view class="today_profit_text">国内代理(位)</view> + </view> + <view class="today_ul_div" style="margin-top: 20upx;"> + <view class="today_order_money"> + <text style="font-size: 40upx;">{{LoupanList.allPartnerCount.oversea}}</text> + </view> + <view class="today_profit_text">国外代理(位)</view> + </view> + </view> + </view> + <!--代理结束-> + + <!-- 指标趋势 --> + <view class="equipment"> + <view style="display: flex; align-items: center; padding: 0upx 35upx; "> + <view style="font-size: 40upx; font-weight: 500; color: #333333; padding: 20upx 0;">指标趋势</view> + <view style="margin-left: auto; display: flex; font-size: 26upx;"> + <view @click="getsevendate(-6)" :style="{'color': seven ? '#E33C64':''}" + style="font-size: 26upx;padding: 20upx 0;">近7日</view> + <view @click="getthirtydate(-30)" :style="{'color': thirty ? '#E33C64':''}" + style="font-size: 26upx; margin-left: 20upx;padding: 20upx 0;">近30日</view> + <view @click="datatogglePopup('target')" :style="{'color': (seven || thirty) ? '':'#E33C64'}" + style="font-size: 26upx; margin-left: 20upx;padding: 20upx 0;"> + 自定义<span :style="{'color': (seven || thirty) ? '':'#E33C64'}" class="iconfont icon-xiala" + style="margin-left: 5upx; font-size: 20upx; color: #333333;"></span> + </view> + </view> + </view> + <view style="padding: 10upx 35upx; "> + <view style="display: flex;align-items: center; width: 100%;"> + <view style="font-size: 23upx;">指标</view> + + <view @click="target('order')" :class="queryPage.table == 'order' ? 'targetgreen':''" + style="font-size: 23upx; color:#FFFFFF; background:#999999; padding: 5upx 25upx; margin-left: 15upx; border-radius: 30upx;"> + 订单总数</view> + <view @click="target('order_valid')" + :class="queryPage.table == 'order_valid' ? 'targetgreen':''" + style="font-size: 23upx; color:#FFFFFF; background:#999999; padding: 5upx 25upx; margin-left: 15upx; border-radius: 30upx;"> + 有效订单</view> + <!-- <view @click="target('statement')" :class="queryPage.table == 'statement' ? 'targetgreen':''" + style="font-size: 23upx; color:#FFFFFF; background:#999999; padding: 5upx 25upx; margin-left: 15upx; border-radius: 30upx;"> + 收入金额</view> --> + </view> + </view> + </view> + + <!-- 折线图 --> + <view class="qiun-columns"> + <view class="qiun-charts" style="position: relative;"> + <image :class="[imgSrcstate ? 'imgSrcdisplay':'']" :src="imgSrc" style="width: 750upx;height: 500upx; + position: absolute;z-index: -1; width: 100%; top: 0; left: 0;" @click="imgSrcstate = false"></image> + <canvas :class="['charts',imgSrcstate ? 'imgSrcstate':'']" canvas-id="canvaLineA" id="canvaLineA" + disable-scroll=true @touchstart="touchLineA" @touchmove="moveLineA" + @touchend="touchEndLineA"></canvas> + </view> + </view> + + + <!--代理销量榜单开始--> + <view v-if="AllSelfStatisticsList !=null && AllSelfStatisticsList.length > 0" + style="width: 100%; padding-bottom:20upx; "> + <view style="display: flex; align-items: center; padding: 10upx 35upx;"> + <view style="font-size: 40upx; font-weight: 500; color: #333333; padding: 30upx 0;">普通设备</view> + <view style="margin-left: auto; display: flex; font-size: 26upx;"> + <view @click="getcommongoodonedate(-1)" :style="{'color': commongoodone ? '#E33C64':''}" + style="font-size: 26upx; margin-left: 20upx; padding: 20upx 0;">昨天</view> + <view @click="getcommongoodsevendate(-6)" :style="{'color': commongoodseven ? '#E33C64':''}" + style="font-size: 26upx; margin-left: 20upx; padding: 20upx 0;">近7日</view> + <view @click="getcommongoodthirtydate(-30)" :style="{'color': commongoodthirty ? '#E33C64':''}" + style="font-size: 26upx; margin-left: 20upx;padding: 20upx 0;">近30日</view> + </view> + </view> + <view style=" align-items: center; + display: flex; text-align: center; color: #FFFFFF; font-size: 24upx; position: absolute; + width:calc(100% - 80upx); height: 85upx;line-height: 85upx; margin-left:40upx;background: #E33C64"> + <view style="width:50%;color:#FFFFFF;font-weight:bold;border-right:1upx solid #D5D5D5;">代理</view> + <view style="width:15%;height:100%;color: #FFFFFF;border-right:1upx solid #D5D5D5;">设备</view> + <view style="width:15%;height:100%;color: #FFFFFF;border-right:1upx solid #D5D5D5;">订单</view> + <view style="width:20%;color: #FFFFFF;border-right:1upx solid #D5D5D5;">有效订单</view> + + </view> + <scroll-view + style="margin-top: 86upx; width:calc(100% - 80upx); background: #F8F8F8; margin-left:40upx;"> + <view v-for="(item, index) in AllSelfStatisticsList" :key="index" + style="display: flex; font-size: 24upx; border-bottom:1upx solid #FFFFFF; flex-direction: column;"> + <view v-if="item.name !=null" + style="width: 100%; display: flex; flex-direction: row;height: 60upx;line-height:60upx; "> + <view @click="selectSelfAgentList(index,item)" + style="width: 50%;border-right: 1upx solid #FFFFFF; font-size: 20upx; display: flex; flex-direction: row;padding-left: 8upx;"> + <span v-if="item.items !=null && item.items.length > 0" class="iconfont icon-xiala" + style="font-size: 20upx; color: #99999;margin-right:10upx;"></span> + <span v-if="item.items ==null || item.items.length == 0" + style="font-size: 20upx; color: #99999;margin-right:10upx; width: 20upx;"></span> + <text style=" width: 160upx; overflow:hidden; + text-overflow:ellipsis; + display:-webkit-box; + -webkit-line-clamp:1; + ">{{item.name}}</text> + </view> + <view + style="width: 15%;border-right: 1upx solid #FFFFFF; font-size: 20upx;text-align: center; "> + {{item.all_machine_count!=undefined?item.all_machine_count:0}} + </view> + <view + style="width: 15%;border-right: 1upx solid #FFFFFF; color: #44CF7C;font-size: 20upx;text-align: center; "> + {{item.order_count!=undefined ?item.order_count:0 }} + </view> + <view + style="width:20%;border-right: 1upx solid #FFFFFF;font-size: 20upx;text-align: center; "> + {{item.order_valid}} + </view> + <!-- <view + style="width:15%;border-right: 1upx solid #FFFFFF; font-size: 20upx;text-align: center; "> + {{formatRounding(item.statement_sum)}} + </view> --> + </view> + <view v-if="item.isDown" v-for="(districtItem, index) in item.items" :key="index" + style="width: 100%; display: flex; flex-direction: row;height: 60upx;line-height:60upx;"> + <view v-if="districtItem !=null" style="width: 100%; display: flex; flex-direction: row;"> + <view style="width:50%;;padding-left: 40upx; font-size: 20upx;"> + {{districtItem.id}} + </view> + <view style="width:15%; font-size: 20upx;text-align: center; "> + {{districtItem.all_machine_count!=undefined?districtItem.all_machine_count:0}} + </view> + <view style="width:15%;color: #44CF7C; font-size: 20upx; text-align: center; "> + {{districtItem.order_count!=undefined?districtItem.order_count:0}} + </view> + <view style="width:20%;font-size: 20upx;text-align: center; "> + {{districtItem.order_valid}} + </view> + <!-- <view style="width:15%;font-size: 20upx; text-align: center; "> + {{formatRounding(districtItem.statement_sum)}} + </view> --> + </view> + </view> + </view> + </scroll-view> + </view> + <!-- 代理销量榜单结束 --> + + + <!--本月商品销量榜单 --> + <view style="width: 100%; padding-bottom: 30upx; margin-bottom:40upx "> + <view style="display: flex; align-items: center; padding: 0upx 30upx"> + <view style="font-size: 40upx; font-weight: 500; color: #333333; padding: 30upx 0;">商品销量</view> + <view style="margin-left: auto; display: flex; font-size: 26upx;margin-right: 10upx;"> + <view @click="getgoodonedate(-1)" :style="{'color': goodone ? '#E33C64':''}" + style="font-size: 26upx; margin-left: 20upx; padding: 20upx 0;">昨天</view> + <view @click="getgoodsevendate(-6)" :style="{'color': goodseven ? '#E33C64':''}" + style="font-size: 26upx; margin-left: 20upx; padding: 20upx 0;">近7日</view> + <view @click="getgoodthirtydate(-30)" :style="{'color': goodthirty ? '#E33C64':''}" + style="font-size: 26upx; margin-left: 20upx;padding: 20upx 0;">近30日</view> + </view> + </view> + <view v-if="thisMonthGoodsSizeRank.length > 0"> + <view class='topBox' v-for="(item, index) in thisMonthGoodsSizeRank" :key="index" + @click="LiquidationGoodSize(item)"> + <view class='topLittleBOX-1' style="width: 240upx;">{{item.goods_name}}</view> + <view class='topLittleBOX-2' style="width: calc(100% - 240upx);"> + <view class='row-1' :style="{width: item.row2 +'px;max-width:90%'}"></view> + <view class='rowText'>{{item.count}}</view> + </view> + </view> + </view> + <view v-else style="text-align: center; line-height: 60upx;"> + 暂无商品销量数据 + </view> + </view> + <!--本月商品销量榜单结束 --> + </view> + + + <!-- 自定义底部 --> + <foot action="0" :partnerId="Userres_partner_id" :partnerType="UserresPartnerType"></foot> + + <!-- 自定义日期开始 --> + <uni-popup ref="datashowshare" :type="'center'" @change="change" + style="position: relative; z-index: 999999999;"> + <view class="uni-share" style="width: 700upx; margin: auto;"> + <view style="background: #F9F9F9;width: 100%;border-bottom: 1upx solid #00000000;"> + <view style="width: 100%;border-bottom: 1upx solid #E9E7ED; height:100upx; + text-align: center;line-height: 100upx; font-size: 26upx; font-weight: 500;"> + 自定义日期 + </view> + <view style="margin:40upx; display: flex; align-items: center;justify-content: center;"> + <view style="width: calc(50% - 30upx);"> + <picker mode="date" :value="queryPage.trend_start_time" start="2000-01-01" + :end="queryPage.trend_end_time" @change="starttimeChange"> + <view + style="font-size: 24upx; background:#F3F3F3; padding: 20upx 25upx; border-radius: 10upx; text-align: center;"> + {{queryPage.trend_start_time ? queryPage.trend_start_time : '开始时间'}} + </view> + </picker> + </view> + <view style="font-size: 24upx; width: 60upx; text-align: center;">至</view> + <view style="width: calc(50% - 30upx);"> + <picker mode="date" :value="queryPage.trend_end_time" :start="queryPage.trend_strat_time" + :end="queryPage.trend_end_time" @change="endtimeChange"> + <view + style="font-size: 24upx; background:#F3F3F3; padding: 20upx 25upx; border-radius: 10upx; text-align: center;"> + {{queryPage.trend_end_time ? queryPage.trend_end_time : '结束时间'}} + </view> + </picker> + </view> + </view> + <view @click="setdata" style="width: calc(100% - 80upx); margin:0 auto 40upx; height: 90upx; border-radius: 10upx; + line-height: 90upx; font-size: 26upx; text-align: center; color: #FFFFFF; background: #E33C64;">确定</view> + </view> + </view> + </uni-popup> + <!-- 自定义日期结束 --> + </view> +</template> + +<script> + import updata from '@/util/updata.js'; //版本更新 + import foot from '../../components/foot.vue'; // 自定义底部 + import logoservice from '@/service/logoservice.js'; + import myhead from './head/head-home-default.vue'; + //一款可以让数字跑起来的组件 + import digitJump from '../../components/zhihuai-DigitJump/zhihuai-DigitJump.vue' + //折线图 + import uCharts from '../../js_sdk/u-charts/u-charts.js'; + //底部弹框 + import uniPopup from '../index/common/uni-popup/uni-popup.vue' + var _self; + var canvaLineA = null; + export default { + components: { + foot, + myhead, + digitJump, + uniPopup + }, + computed: {}, + data() { + return { + selectTopType: 1, //1:订单收益 2:设备 3:代理 + long: false, + queryPage: { + m: 'Report/allIndex', + table: 'order', + + all_start_time: null, //设备数据开始时间 + all_end_time: null, // 设备数据结束时间 + + trend_start_time: null, //订单趋势开始时间 + trend_end_time: null, //订单趋势结束时间 + + goods_start_time: null, //商品销量开始时间 + goods_end_time: null, //商品销量结束时间 + }, + LoupanList: [], + IndicatorRrendList: [], //指标趋势集合 + AllCityStatisticsList: [], //代理集合 + AllSelfStatisticsList: [], //普通代理集合 + thirty: null, + seven: true, + + commongoodone: true, + commongoodseven: null, + commongoodthirty: null, + + datatogglePopup_text: null, + cWidth: '', + cHeight: '', + pixelRatio: 1, + enableScroll: false, + imgSrc: null, + imgSrcstate: false, //控制折线图顶层问题 + chartDataimgSrcstate: true, + chartData: { + categories: ['', '', '', '', '', '', '', '', ''], + series: [{ + name: '数值', + data: [0, 0, 0, 0, 0, 0, 0, 0, 0], + color: '#E33C64' + }] + }, + datetext: '昨天', + datetext_good: '昨天', + titleName: '全部代理', + agentList: [], //代理数据 + Userres_partner_id: null, //总代理 + AgentState: '-1', + UserresPartnerType: 4, //代理标识判断 + + goodo: null, + goodone: true, + goodseven: null, + goodthirty: null, + + thisMonthGoodsSizeRank: [], //商品数量集合 + + }; + }, + methods: { + + //四设五入 + formatRounding(value) { + //截取当前数据到小数点后两位 + let realVal = parseFloat(value).toFixed(2) + return realVal + }, + + //调转统计界面 + toProfitPage() { + uni.navigateTo({ + url: '/pages/mall/profit?proxy=1', + }); + }, + + //头部标题选中 + onSelectTopTitle(index) { + this.selectTopType = index; + }, + + //调转市代理页面 + transferToPageCityAgent() { + uni.reLaunch({ + url: "/pages/index/city-agent" + }) + }, + + + //选中代理设备 + selectCityAgentList(index, item) { + var resultList = this.AllCityStatisticsList; + this.AllCityStatisticsList = []; + var isDown = item.isDown; + if (isDown) { + isDown = false + } else { + isDown = true + } + resultList.forEach(itemData => { + if (itemData.id == item.id) { + itemData.isDown = isDown + } + }) + this.AllCityStatisticsList = resultList; + }, + + //选中普通设备列表 + selectSelfAgentList(index, item) { + var resultList = this.AllSelfStatisticsList; + this.AllSelfStatisticsList = []; + var isDown = item.isDown; + if (isDown) { + isDown = false + } else { + isDown = true + } + resultList.forEach(itemData => { + if (itemData.id == item.id) { + itemData.isDown = isDown + } + }) + this.AllSelfStatisticsList = resultList; + }, + + //确定时间段 + setdata(e) { + this.chartDataimgSrcstate = true + this.seven = null + this.thirty = null + this.loadGoodsList(1); + var _this = this + setTimeout(function() { //延迟一定时间执行 + _this.imgSrcstate = false + _this.$refs['datashowshare'].close(); + }, 800); + }, + + //选择开始时间 + starttimeChange(e) { + this.queryPage.trend_start_time = e.target.value; + }, + + //选择结束时间 + endtimeChange(e) { + this.queryPage.trend_end_time = e.target.value + }, + + + //自定义时间段 + datatogglePopup(e) { + + var _this = this + _this.imgSrcstate = true + setTimeout(function() { //延迟一定时间执行 + _this.$nextTick(() => { + _this.$refs['datashowshare'].open() + }) + }, 100); + }, + + + + //指标趋势---7天 + getsevendate(e) { + this.chartDataimgSrcstate = true + this.imgSrcstate = false + this.queryPage.trend_start_time = this.getDay(e) + this.queryPage.trend_end_time = this.getDay(0) + this.seven = true + this.thirty = null + this.loadGoodsList(1); + }, + + + //指标趋势---30天 + getthirtydate(e) { + this.chartDataimgSrcstate = true + this.imgSrcstate = false + this.queryPage.trend_start_time = this.getDay(e) + this.queryPage.trend_end_time = this.getDay(0) + //this.queryPage.start_time = this.getDay(e) + //this.queryPage.end_time = this.getDay(0) + this.seven = null + this.thirty = true + this.loadGoodsList(1); + }, + + + // 普通设备--昨天 + getcommongoodonedate(e) { + this.datetext = '昨天' + this.chartDataimgSrcstate = true + this.imgSrcstate = false + this.queryPage.all_start_time = this.getDay(e) + this.queryPage.all_end_time = this.getDay(e) + this.commongoodone = true + this.commongoodseven = null + this.commongoodthirty = null + this.loadGoodsList(3); + }, + + // 普通设备---7天 + getcommongoodsevendate(e) { + this.datetext = '近7天' + this.chartDataimgSrcstate = true + this.imgSrcstate = false + this.queryPage.all_start_time = this.getDay(e) + this.queryPage.all_end_time = this.getDay(0) + this.commongoodone = null + this.commongoodseven = true + this.commongoodthirty = null + this.loadGoodsList(3); + }, + + // 普通设备----30天 + getcommongoodthirtydate(e) { + this.datetext = '近30天' + this.chartDataimgSrcstate = true + this.imgSrcstate = false + this.queryPage.all_start_time = this.getDay(e) + this.queryPage.all_end_time = this.getDay(0) + this.commongoodone = null + this.commongoodseven = null + this.commongoodthirty = true + this.loadGoodsList(3); + }, + + + // 商品销量----昨天 + getgoodonedate(e) { + this.datetext_good = '昨天' + this.chartDataimgSrcstate = true + this.imgSrcstate = false + this.queryPage.goods_start_time = this.getDay(e) + this.queryPage.goods_end_time = this.getDay(0) + this.goodone = true + this.goodseven = null + this.goodthirty = null + this.loadGoodsList(2); + }, + + // 商品销量----7天 + getgoodsevendate(e) { + this.datetext_good = '近7天' + this.chartDataimgSrcstate = true + this.imgSrcstate = false + this.queryPage.goods_start_time = this.getDay(e) + this.queryPage.goods_end_time = this.getDay(0) + this.goodseven = true + this.goodthirty = null + this.goodone = null + this.loadGoodsList(2); + }, + + // 商品销量----30天 + getgoodthirtydate(e) { + this.datetext_good = '近30天' + this.chartDataimgSrcstate = true + this.imgSrcstate = false + this.queryPage.goods_start_time = this.getDay(e) + this.queryPage.goods_end_time = this.getDay(0) + this.goodseven = null + this.goodthirty = true + this.goodone = null + this.loadGoodsList(2); + }, + + //获取天数 + getDay(day) { + this.imgSrcstate = false + var today = new Date(); + var targetday_milliseconds = today.getTime() + 1000 * 60 * 60 * 24 * day; + today.setTime(targetday_milliseconds); //注意,这行是关键代码 + var tYear = today.getFullYear(); + var tMonth = today.getMonth(); + var tDate = today.getDate(); + tMonth = this.doHandleMonth(tMonth + 1); + tDate = this.doHandleMonth(tDate); + return tYear + "-" + tMonth + "-" + tDate; + }, + + //获取月份 + doHandleMonth(month) { + var m = month; + if (month.toString().length == 1) { + m = "0" + month; + } + return m; + }, + + //指标趋势点击 + target(e) { + this.chartDataimgSrcstate = true + this.queryPage.table = e + this.loadGoodsList(1); + }, + + //打开所属代理 + clickAgent() { + this.imgSrcstate = true + this.$nextTick(() => { + this.$refs['showshareAgent'].open() + }) + }, + + //打开设备 + machinetogglePopup() { + this.imgSrcstate = true + this.$nextTick(() => { + this.$refs['machineshowshare'].open() + }) + }, + + //打开商品 + togglePopup() { + this.imgSrcstate = true + this.$nextTick(() => { + this.$refs['showshare'].open() + }) + }, + + //选择月份 + selectMonth(item) { + this.chartDataimgSrcstate = true + this.queryPage.goods_name = item.goods_name ? item.goods_name : null + this.queryPage.goods_attr = item.goods_specs ? item.goods_specs : null + this.queryPage.goods_id = item.goods_id ? item.goods_id : null + var _this = this + setTimeout(function() { //延迟一定时间执行 + _this.imgSrcstate = false + _this.$refs['showshare'].close(); + _this.loadGoodsList(1); + }, 100); + }, + + cancel(type) { + this.$refs['showshare'].close() + this.$refs['machineshowshare'].close() + this.$refs['showshareAgent'].close() + var _this = this + setTimeout(function() { //延迟一定时间执行 + _this.imgSrcstate = false + }, 100); + }, + + change(e) { + if (e.show == false) { + var _this = this + setTimeout(function() { //延迟一定时间执行 + _this.imgSrcstate = false + _this.chartDataimgSrcstate = false + }, 100); + } + }, + + //设备数据 + equipment_list(e) { + uni.navigateTo({ + url: '/pages/store/equipment_list?status=' + e, + }); + }, + + //本月设备收入榜单 + Liquidationmachine_id(e) { + let machineIncome_start_time = this.queryPage.thisMonthOrderIncomeRank_start_time + let machineIncome_end_time = this.queryPage.thisMonthOrderIncomeRank_end_time + uni.navigateTo({ + url: '../mine/order?machineid=' + e.machine_id + '&start_time=' + + machineIncome_start_time + + '&end_time=' + machineIncome_end_time + '&datetext=' + this.datetext + }); + }, + + //本月商品销量榜单 + LiquidationGoodSize(e) { + let machineIncome_start_time = this.queryPage.goods_start_time + let machineIncome_end_time = this.queryPage.goods_end_time + + uni.navigateTo({ + url: '/pages/mine/order?goods_name=' + e.goods_name + '&goods_specs=' + e.goods_specs + + '&start_time=' + machineIncome_start_time + '&end_time=' + machineIncome_end_time + + '&datetext=' + this.datetext_good + "&is_pay=1" + }); + }, + + //收益 + Liquidation(e) { + if (e == null) { + uni.navigateTo({ + url: '/pages/mine/Liquidation', + }); + } else { + uni.navigateTo({ + url: '/pages/mine/Liquidation?date=' + e + "&day=" + e, + }); + } + }, + + //调转订单界面 + toOrderPage(e) { + if (e == null) { + uni.navigateTo({ + url: '/pages/mine/order?proxy=1', + }); + } else { + uni.navigateTo({ + url: '/pages/mine/order?day=' + e + "&proxy=1", + }); + } + }, + + //获取天数 + getToday() { + let myDate = new Date(); + let myMonth = myDate.getMonth() + 1; + if (myMonth < 10) { + myMonth = '0' + myMonth; //补齐 + } + let mydate = myDate.getDate(); + if (myDate.getDate() < 10) { + mydate = '0' + myDate.getDate(); //补齐 + } + //this.queryPage.month = myDate.getFullYear() + '-' + myMonth; + let today = myDate.getFullYear() + '-' + myMonth + return today + }, + + loadGoodsList(state) { + uni.showLoading({ + title: '正在加载中...', + mask: true + }) + logoservice.Reportindex(this.queryPage).then(result => { + this.long = true + this.LoupanList = result + var max = 80; + var first = 0; + if (state == 1 || state == 5) { //指标趋势折线图 + let categories = [] + let seriesdata = [] + if (this.LoupanList.allTrend.length > 8) { + let number = Math.ceil(this.LoupanList.allTrend.length / 8) + this.LoupanList.allTrend.forEach((item, index) => { + if (index % number == 0) { + categories.push(item.day.split("-")[1] + '-' + item.day.split("-")[2]) + } else { + categories.push('') + } + seriesdata.push(item.total) + }) + } else { + this.LoupanList.allTrend.forEach((item, index) => { + categories.push(item.day.split("-")[1] + '-' + item.day.split("-")[2]) + seriesdata.push(item.total) + }) + } + this.chartData.categories = categories + this.chartData.series[0].data = seriesdata + this.cWidth = uni.upx2px(750); + this.cHeight = uni.upx2px(500); + this.showLineA("canvaLineA", this.chartData); + } + if (state == 2 || state == 5) { //市代理列表 + this.LoupanList.allGoods.forEach((item, index) => { + if (index == 0) { + item.row2 = max; + first = parseFloat(item.count); + } else { + item.row2 = max * parseFloat(item.count / first) + if (item.row2 <= 1) { + item.row2 = 1; + } + } + }) + this.thisMonthGoodsSizeRank = this.LoupanList.allGoods; + } + if (state == 3 || state == 5) { //普通设备 + this.LoupanList.allSelfStatistics.forEach(item => { + item.isDown = false //是否下拉 + }) + this.AllSelfStatisticsList = this.LoupanList.allSelfStatistics; + } + uni.hideLoading(); + uni.stopPullDownRefresh(); + }).catch(err => { + uni.hideLoading(); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }); + }, + + //格式化时间 + dateFormatTotext(time) { + try { + var d = new Date(time.replace(/-/g, "/")); + var times = (d.getMonth() + 1) + '-' + d.getDate(); + return times + } catch (e) { + // 错误处理代码片段 + } + return time; + }, + + //折线一 + showLineA(canvasId, chartData) { + var _self = this; + canvaLineA = new uCharts({ + $this: _self, + canvasId: canvasId, //页面组件canvas-id + type: 'area', //图表类型 + fontSize: 11, + legend: { + show: false + }, + dataLabel: false, //是否在图表中显示数据标签内容值 + dataPointShape: true, //是否在图表中显示数据点图形标识 + background: '#FFFFFF', + pixelRatio: _self.pixelRatio, + categories: chartData.categories, + series: chartData.series, + animation: true, + enableScroll: _self.enableScroll, //开启图表拖拽功能 + xAxis: { + type: 'grid', + gridColor: '#F2F2F2', + gridType: 'dash', + dashLength: 4, + itemCount: 8, //x轴单屏显示数据的数量,默认为5个 + scrollShow: true, //新增是否显示滚动条,默认false + scrollAlign: 'left', //滚动条初始位置 + scrollBackgroundColor: '#F7F7FF', //默认为 #EFEBEF + scrollColor: '#DEE7F7', //默认为 #A6A6A6 + }, + yAxis: { + calibration: true, + gridType: 'dash', + gridColor: '#F2F2F2', + dashLength: 4, + splitNumber: 5, + format: (val) => { + return val.toFixed(0) + } + }, + width: _self.cWidth * _self.pixelRatio, + height: _self.cHeight * _self.pixelRatio, + padding: [20, 15, 4, 15], + extra: { + area: { + type: 'curve', + opacity: 0.2, + addLine: true, + width: 2 + } + } + }); + canvaLineA.addEventListener('renderComplete', () => { //监控图表渲染完成 + setTimeout(function() { //延迟一定时间执行 + uni.canvasToTempFilePath({ //将图表转成图片 + x: 0, + y: 0, + width: _self.cWidth * _self.pixelRatio, + height: _self.cHeight * _self.pixelRatio, + fileType: 'png', + canvasId: 'canvaLineA', + success: function(res) { + _self.imgSrc = res.tempFilePath; + _self.chartDataimgSrcstate = false + }, + fail: function(res) {} + }, _self); + }, 100); + }); + }, + + touchLineA(e) { + canvaLineA.scrollStart(e); + }, + + moveLineA(e) { + canvaLineA.scroll(e); + }, + + touchEndLineA(e) { + canvaLineA.scrollEnd(e); + //下面是toolTip事件,如果滚动后不需要显示,可不填写 + canvaLineA.showToolTip(e, { + format: function(item, category) { + return category + ' ' + item.name + ':' + item.data + } + }); + } + }, + + //下拉加载 + onPullDownRefresh() { + this.loadGoodsList(5); + }, + + //上拉加载 + onReachBottom() {}, + + //滑动 + onPageScroll(e) { + let st = e.scrollTop; + this.imgSrcstate = true + }, + + onLoad(options) { + this.queryPage.trend_start_time = this.getDay(-6) //订单趋势开始时间 + this.queryPage.trend_end_time = this.getDay(0) //订单趋势结束时间 + this.queryPage.goods_start_time = this.getDay(-1) //商品销量开始时间 + this.queryPage.goods_end_time = this.getDay(-1) //商品销量结束时间 + this.queryPage.all_start_time = this.getDay(-1) //设备数量开始时间 + this.queryPage.all_end_time = this.getDay(-1) //设备数量结束时间 + }, + + onShow() { + uni.login({ + provider: 'weixin', + success: (res) => { + logoservice.login({ + m: 'Init/init', + code: res.code + }).then(result => { + this.$base.Userres = result //记录用户登录信息 + this.Userres_partner_id = this.$base.Userres.partner_id; //总代理 + uni.setStorageSync('partner_id', this.$base.Userres.partner_id) + //代理标识判断开始 + if (this.Userres_partner_id == 0) { + this.UserresPartnerType == 1 + } else { + if (this.$base.Userres.partner != null) { + if (this.$base.Userres.partner.level == 1) { + this.UserresPartnerType == 2 + } else if (this.$base.Userres.partner.level == 2) { + this.UserresPartnerType == 3 + } + } + } + //代理标识判断开始结束 + uni.setStorageSync('openid', result.openid) + logoservice.setwixinInfo(result); + this.loadGoodsList(5); + logoservice.receiveMoneyList({ + m: 'Init/getPartner' + }).then(result => { + this.agentList = result.list + result.list.forEach(item => { + if (item.id == result.p_id) { + this.titleName = item.name + this.queryPage.partner_id = item.id + this.$base.partner_id = this.queryPage.partner_id; + } + }) + }).catch(err => { + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + }).catch(err => { + uni.navigateTo({ + url: 'login', + }); + }) + }, + fail: (err) => { + console.error('授权登录失败:' + JSON.stringify(err)); + } + }); + }, + onUnload() { + let pages = getCurrentPages(); + } + }; +</script> + +<style lang="scss"> + page { + background: #FFFFFF !important; + } + + .qiun-columns { + display: flex; + flex-direction: column !important; + } + + .qiun-charts { + width: 750upx; + height: 500upx; + background-color: #FFFFFF; + } + + .charts { + width: 750upx; + height: 500upx; + background-color: #FFFFFF; + } + + .imgSrcstate { + position: absolute; + width: 100%; + right: -900px; + top: -600px; + display: none; + } + + .imgSrcdisplay { + z-index: 0 !important; + } + + /*底部分享 */ + .uni-share { + display: flex; + flex-direction: column; + } + + .uni-share-btn { + height: 90upx; + line-height: 90upx; + font-size: 26upx; + text-align: center; + background: #FFFFFF; + } + + .green { + background-color: #E33C64 !important; + color: #FFFFFF; + } + + .targetgreen { + color: #FFFFFF !important; + background: #E33C64 !important; + } + + /*样式的width和height一定要与定义的cWidth和cHeight相对应*/ + .qiun-charts { + width: 750upx; + height: 500upx; + background-color: #FFFFFF; + } + + .charts { + width: 750upx; + height: 500upx; + background-color: #FFFFFF; + } + + .home { + width: 100%; + padding-bottom: 40upx; + display: flex; + flex-direction: column; + + /*今日 today */ + .today { + width: 100%; + background: #E33C64; + display: flex; + justify-content: center; + padding-top: 50upx; + padding-bottom: 30upx; + height: auto; + + .today_ul { + width: 100%; + + .today_ul_div { + margin-left: 20upx; + color: #FFFFFF; + + .today_money { + font-size: 35upx; + font-weight: bold; + } + + .today_profit_text { + font-size: 22upx; + font-weight: 400; + line-height: 20upx; + } + + .today_order_money { + //margin-top: 96upx; + font-size: 50upx; + font-weight: 400; + margin-bottom: 10upx; + //font-weight: bold; + } + + .today_order_num { + // margin-top: 37upx; + font-size: 36upx; + font-weight: bold; + } + } + } + } + + /* yesterday */ + .yesterday { + width: 100%; + height: 127upx; + display: flex; + border-bottom: 1px solid rgba(178, 178, 178, 0.2); + + .yesterday_div { + width: 100%/4; + margin-left: 45upx; + color: #333333; + text-align: center; + + .yesterday_profit_money { + margin-top: 36upx; + font-size: 36upx; + font-weight: bold; + } + + .yesterday_profit_text { + font-size: 20upx; + font-weight: 400; + line-height: 30upx; + } + } + } + + /* equipment */ + .equipment { + width: 100%; + + .equipment_title { + font-size: 40upx; + font-weight: 500; + color: #333333; + margin: 40upx 0 40upx 45upx; + } + + .equipment_main { + width: 100%; + display: flex; + + .equipment_main_ul { + width: calc(100% / 2); + + .equipment_main_ul_circle { + width: 120upx; + height: 120upx; + border-radius: 50%; + margin: auto; + + .equipment_main_ul_circle_num { + font-size: 40upx; + font-weight: 400; + text-align: center; + line-height: 120upx; + } + } + + .equipment_main_ul_text { + font-size: 28upx; + font-weight: 400; + margin-top: 40upx; + color: #333333; + text-align: center; + } + } + } + } + + /*本月机器榜单 */ + .machine_title { + font-size: 40upx; + font-weight: 500; + color: #333333; + margin: 80upx 0 70upx 45upx; + } + + .topBox { + width: calc(100% - 90upx); + margin: 0 auto 40upx; + display: flex; + flex-direction: row; + align-items: center; + } + + .topLittleBOX-1 { + font-size: 24upx; + width: 120upx; + color: #888888; + overflow: text-align; + } + + .topLittleBOX-2 { + padding-left: 20upx; + padding-top: auto; + padding-bottom: auto; + display: flex; + + vertical-align: middle; + flex-direction: row; + align-items: center; + width: calc(100% - 120upx); + } + + .row-1 { + height: 30upx; + background-color: #43CF7C; + border-radius: 20upx; + width: 0upx; + transition: width 1.5s linear; + } + + .rowText { + margin-left: 10upx; + font-size: 30upx; + color: #4c4c4c; + } + + } +</style> diff --git a/pages/index/city-agent.vue b/pages/index/city-agent.vue new file mode 100644 index 0000000..a327f39 --- /dev/null +++ b/pages/index/city-agent.vue @@ -0,0 +1,1284 @@ +<template> + <view class="full-width content-color" style="background: #fff; width: 100%; position: relative;"> + <!-- 自定义头部 --> + <myhead :title="titleName" :color="'#000'" :titleShow="true" :backShow="true" :background="'#F8F8F8'"></myhead> + + <view class="home" v-if="long"> + <view style=" align-items: center; + display: flex; text-align: center; color: #FFFFFF; font-size: 24upx; position: absolute; + width:100%; height: 85upx;line-height: 85upx;;border-bottom:1upx solid #D5D5D5;margin-top: 10upx;"> + <view :style="{'background': selectTopType ==1 ? '#FF8D1A':'#999999'}" style="width:50%;color:#FFFFFF;font-weight:bold; + border-right:1upx solid #D5D5D5; + border-top-left-radius:20upx; + background:#999999;height: 100%;" @click="onSelectTopTitle(1)">收益</view> + <view :style="{'background': selectTopType == 2 ? '#FF8D1A':'#999999'}" + style="width:50%;height:100%;color: #FFFFFF;border-right:1upx solid #D5D5D5;background: #999999;height: 100%;border-top-right-radius: 20upx;" + @click="onSelectTopTitle(2)"> + 设备</view> + </view> + + <!--订单收益开始--> + <view v-if="selectTopType == 1" class="today"> + <view class="today_ul" style="width:33%;margin-top: -17upx;margin-left: 20upx;"> + <view class="today_ul_div"> + <view class="today_order_money" @click="toOrderPage(getDay(-1))"> + <!-- @click="profit()" --> + <text>{{LoupanList.cityOrderIncome.yesterday.order_num}}</text> + </view> + <view class="today_profit_text" @click="toOrderPage(getDay(-1))">昨日订单(笔)</view> + <view class="today_order_money" style="margin-top: 28upx;" @click="Liquidation(getDay(-1))"> + <digitJump :textColor="zh_text_white" :digitDelay="0" + :digitTo="LoupanList.cityOrderIncome.yesterday.order_amount" :digitFiex='2'></digitJump> + </view> + <view class="today_profit_text" @click="Liquidation(getDay(-1))">昨日收益(¥)</view> + </view> + </view> + + <view class="today_ul" style="width:33%;margin-top: -17upx"> + <view class="today_ul_div"> + <view class="today_order_money" @click="toOrderPage(getDay(0))"> + <!-- @click="profit()" --> + <text>{{LoupanList.cityOrderIncome.today.order_num}}</text> + </view> + <view class="today_profit_text" @click="toOrderPage(getDay(0))">今日实时订单(笔)</view> + <view class="today_order_money" style="margin-top: 28upx;" @click="Liquidation(getDay(0))"> + <digitJump :textColor="zh_text_white" :digitDelay="0" + :digitTo="LoupanList.cityOrderIncome.today.order_amount" :digitFiex='2'></digitJump> + </view> + <view class="today_profit_text" @click="Liquidation(getDay(0))">今日实时收益(¥)</view> + </view> + </view> + <view style="width:1upx;height:110upx;background: #D5D5D5;margin-top: 40upx; margin-left: 35upx;"> + </view> + + <view class="today_ul" style="width:33%;margin-top: -17upx"> + <view class="today_ul_div"> + <view class="today_order_money" @click="toOrderPage(null)"> + <!-- @click="profit()" --> + <text>{{LoupanList.cityOrderIncome.month.order_num}}</text> + </view> + <view class="today_profit_text" @click="toOrderPage(null)">本月订单(笔)</view> + <view class="today_order_money" style="margin-top: 28upx;" @click="Liquidation(null)"> + <digitJump :textColor="zh_text_white" :digitDelay="0" + :digitTo="LoupanList.cityOrderIncome.month.order_amount" :digitFiex='2'></digitJump> + </view> + <view class="today_profit_text" @click="Liquidation(null)">本月收益(¥)</view> + </view> + </view> + + <label class="fa fa-angle-right" + style="color: #fff; font-size: 40upx; width:5%;height: 80upx; margin-top: 70upx; padding-left: 5upx;" + @click="toProfitPage()"></label> + </view> + <!--订单结束-> + + + <!-设备开始--> + <view v-if="selectTopType == 2" class="today"> + <view class="today_ul" style="width: 33%;margin-left:20upx;margin-top: -17upx"> + <view class="today_ul_div"> + <view class="today_order_money"> + <text>{{LoupanList.cityMachineCount.week}}</text> + </view> + <view class="today_profit_text">本周新增(台)</view> + <view class="today_order_money" style="margin-top: 28upx;"> + <text>{{LoupanList.cityMachineCount.all}}</text> + </view> + <view class="today_profit_text">代理设备</view> + </view> + </view> + <view class="today_ul" style="width:33%;margin-top: -17upx"> + <view class="today_ul_div"> + <view class="today_order_money"> + <text>{{LoupanList.cityMachineCount.month}}</text> + </view> + <view class="today_profit_text">本月新增(台)</view> + <view class="today_order_money" style="margin-top: 28upx;"> + <text>{{LoupanList.cityMachineCount.my}}</text> + </view> + <view class="today_profit_text">我的设备(台)</view> + </view> + </view> + <view style="width:1upx;height:110upx;background: #D5D5D5;margin-top: 40upx; margin-left: 35upx;"> + </view> + <view class="today_ul" style="width:34%;margin-left: 30upx;margin-top: -17upx;"> + <view class="today_ul_div"> + <view class="today_order_money"> + <text>{{LoupanList.cityMachineCount.week_partner}}</text> + </view> + <view class="today_profit_text">本周新增(位)</view> + <view class="today_order_money" style="margin-top: 28upx;"> + <text>{{LoupanList.cityMachineCount.all_partner}}</text> + </view> + <view class="today_profit_text">市代理总数(位)</view> + </view> + </view> + </view> + <!--设备结束-> + + <!--指标趋势--> + <view class="equipment"> + <view style="display: flex; align-items: center; padding: 0upx 35upx;"> + <view style="font-size: 40upx; font-weight: 500; color: #333333; padding: 20upx 0;">指标趋势</view> + <view style="margin-left: auto; display: flex; font-size: 26upx;"> + <view @click="getsevendate(-7)" :style="{'color': seven ? '#FF8D1A':''}" + style="font-size: 26upx;padding: 20upx 0;">近7日</view> + <view @click="getthirtydate(-30)" :style="{'color': thirty ? '#FF8D1A':''}" + style="font-size: 26upx; margin-left: 20upx;padding: 20upx 0;">近30日</view> + <view @click="datatogglePopup('target')" :style="{'color': (seven || thirty) ? '':'#FF8D1A'}" + style="font-size: 26upx; margin-left: 20upx;padding: 20upx 0;"> + 自定义<span :style="{'color': (seven || thirty) ? '':'#FF8D1A'}" class="iconfont icon-xiala" + style="margin-left: 5upx; font-size: 20upx; color: #333333;"></span> + </view> + </view> + </view> + <view style="padding: 20upx 45upx;"> + <view style="display: flex;align-items: center;"> + <view style="font-size: 26upx;">指标</view> + <view @click="target('machine')" :class="queryPage.table == 'machine' ? 'targetgreen':''" + style="font-size: 26upx; color:#FFFFFF; background:#999999; padding: 5upx 25upx; margin-left: 20upx; border-radius: 40upx;"> + 设备数量</view> + <view @click="target('order')" :class="queryPage.table == 'order' ? 'targetgreen':''" + style="font-size: 26upx; color:#FFFFFF; background:#999999; padding: 5upx 25upx; margin-left: 20upx; border-radius: 40upx;"> + 订单笔数</view> + <view @click="target('statement')" :class="queryPage.table == 'statement' ? 'targetgreen':''" + style="font-size: 26upx; color:#FFFFFF; background:#999999; padding: 5upx 25upx; margin-left: 20upx; border-radius: 40upx;"> + 收入金额</view> + </view> + </view> + </view> + + <!-- 折线图开始--> + <view class="qiun-columns"> + <view class="qiun-charts" style="position: relative;"> + <image :class="[imgSrcstate ? 'imgSrcdisplay':'']" :src="imgSrc" style="width: 750upx;height: 500upx; + position: absolute;z-index: -1; width: 100%; top: 0; left: 0;" @click="imgSrcstate = false"></image> + <canvas :class="['charts',imgSrcstate ? 'imgSrcstate':'']" canvas-id="canvaLineA" id="canvaLineA" + disable-scroll=true @touchstart="touchLineA" @touchmove="moveLineA" + @touchend="touchEndLineA"></canvas> + </view> + </view> + <!-- 折线图结束--> + + <!--代理设备开始 --> + <view v-if="AllDistrictStatisticsList !=null && AllDistrictStatisticsList.length > 0" + style="width: 100%; padding-bottom: 10upx; margin-bottom: 10upx;"> + <view style="display: flex; align-items: center; padding: 10upx 35upx;"> + <view style="font-size: 40upx; font-weight: 500; color: #333333; padding: 30upx 0;">代理设备</view> + <view style="margin-left: auto; display: flex; font-size: 26upx;"> + <view @click="getdistrictdate(-1)" :style="{'color': districtgoodone ? '#FF8D1A':''}" + style="font-size: 26upx; margin-left: 20upx; padding: 20upx 0;">昨天</view> + <view @click="getdistrictsevendate(-7)" :style="{'color': districtgoodseven ? '#FF8D1A':''}" + style="font-size: 26upx; margin-left: 20upx; padding: 20upx 0;">近7日</view> + <view @click="getdistrictthirtydate(-30)" :style="{'color': districtgoodthirty ? '#FF8D1A':''}" + style="font-size: 26upx; margin-left: 20upx;padding: 20upx 0;">近30日</view> + </view> + </view> + <view style=" align-items: center; + display: flex; text-align: center; color: #FFFFFF; font-size: 24upx; position: absolute; + width:calc(100% - 80upx); height: 85upx;line-height: 85upx; margin-left:40upx;background: #FF8D1A"> + <view style="width:40%;color:#FFFFFF;font-weight:bold;border-right:1upx solid #D5D5D5;">代理</view> + <view style="width:15%;height:100%;color: #FFFFFF;border-right:1upx solid #D5D5D5;">设备</view> + <view style="width:15%;height:100%;color: #FFFFFF;border-right:1upx solid #D5D5D5;">新增</view> + <view style="width:15%;color: #FFFFFF;border-right:1upx solid #D5D5D5;">订单</view> + <view style="width:15%;color: #FFFFFF;border-right:1upx solid #D5D5D5;">金额</view> + </view> + <scroll-view + style="margin-top: 86upx; width:calc(100% - 80upx); background: #F8F8F8; margin-left:40upx;"> + <view v-for="(item, index) in AllDistrictStatisticsList" :key="index" + style="display: flex;font-size:24upx;border-bottom:1upx solid #FFFFFF; flex-direction:column;"> + <view v-if="item.name !=null" + style="width:100%;display:flex;flex-direction:row;height:60upx;line-height:60upx;align-items:center;"> + <view @click="selectDistrictAgentList(index,item)" + style="width: 40%;border-right: 1upx solid #FFFFFF; font-size: 20upx; display: flex; flex-direction: row;padding-left: 8upx;"> + <span v-if="item.items !=null && item.items.length > 0" class="iconfont icon-xiala" + style="font-size: 20upx; color: #99999;margin-right:10upx;"></span> + <span v-if="item.items ==null || item.items.length == 0" + style="font-size: 20upx; color: #99999;margin-right:10upx; width: 20upx;"></span> + <text style=" width: 98%; overflow:hidden;text-overflow:ellipsis;display:-webkit-box; -webkit-line-clamp:1;-webkit-box-orient:vertical;">{{item.name}}</text> + </view> + + <view style="width: 15%;border-right:1upx solid #FFFFFF;font-size: 20upx; text-align: center;"> + {{item.all_machine_count}} + </view> + <view style="width:15%;border-right:1upx solid #FFFFFF;color:#FF8D1A; font-size: 20upx;text-align: center;"> + {{item.new_machine_count}} + </view> + <view style="width:15%;border-right: 1upx solid #FFFFFF;font-size: 20upx;text-align: center;"> + {{item.order_count}} + </view> + <view style="width:15%;border-right: 1upx solid #FFFFFF;font-size: 20upx;text-align: center;"> + {{formatRounding(item.statement_sum)}} + </view> + </view> + <view v-if="item.isDown " v-for="(districtItem, index) in item.items" :key="index" + style="width: 100%; display: flex; flex-direction: row;"> + <view + style="width:100%;display: flex; flex-direction: row;height:60upx;line-height:60upx;"> + <view style="width:40%;;padding-left: 40upx;font-size: 20upx;"> + {{districtItem.name}} + </view> + <view style="width:15%;font-size: 20upx;text-align: center;"> + {{districtItem.all_machine_count}} + </view> + <view style="width:15%;color:#FF8D1A;font-size: 20upx;text-align: center;"> + {{districtItem.new_machine_count}} + </view> + <view style="width:15%;font-size: 20upx;text-align: center;"> + {{districtItem.order_count}} + </view> + <view style="width:15%;font-size: 20upx;text-align: center;"> + {{formatRounding(districtItem.statement_sum)}} + </view> + </view> + </view> + </view> + </scroll-view> + </view> + <!--代理设备结束 --> + + <!--我的设备销量开始 --> + <view v-if="AllDeviceStatisticsList !=null && AllDeviceStatisticsList.length > 0" + style="width: 100%; padding-bottom:50upx;margin-bottom:50upx;"> + <view style="display: flex; align-items: center; padding: 10upx 35upx;"> + <view style="font-size: 40upx; font-weight: 500; color: #333333; padding: 30upx 0;">我的设备</view> + <view style="margin-left: auto; display: flex; font-size: 26upx;"> + <view @click="getdeviceonedate(-1)" :style="{'color': devicegoodone ? '#FF8D1A':''}" + style="font-size: 26upx; margin-left: 20upx; padding: 20upx 0;">昨天</view> + <view @click="getdevicesevendate(-7)" :style="{'color': devicegoodseven ? '#FF8D1A':''}" + style="font-size: 26upx; margin-left: 20upx; padding: 20upx 0;">近7日</view> + <view @click="getdevicethirtydate(-30)" :style="{'color': devicegoodthirty ? '#FF8D1A':''}" + style="font-size: 26upx; margin-left: 20upx;padding: 20upx 0;">近30日</view> + </view> + </view> + <view style=" align-items: center; + display: flex; text-align: center; color: #FFFFFF; font-size: 24upx; position: absolute; + width:calc(100% - 80upx); height: 85upx;line-height: 85upx; margin-left:40upx;background: #FF8D1A"> + <view style="width:25%;height:100%;color: #FFFFFF;border-right:1upx solid #D5D5D5;">设备编号</view> + <view style="width:25%;color: #FFFFFF;border-right:1upx solid #D5D5D5;">作品数</view> + <view style="width:25%;color: #FFFFFF;border-right:1upx solid #D5D5D5;">订单</view> + <view style="width:25%;color: #FFFFFF;border-right:1upx solid #D5D5D5;">收益</view> + </view> + <scroll-view + style="margin-top: 86upx; width:calc(100% - 80upx); background: #F8F8F8; margin-left:40upx;"> + <view v-for="(item, index) in AllDeviceStatisticsList" :key="index" + style="display: flex; text-align: center; font-size: 24upx; text-align:center;border-bottom:1upx solid #FFFFFF; flex-direction:column;"> + <view + style="width:100%;display:flex;flex-direction:row;height:60upx;height:60upx;line-height:60upx;align-items:center;"> + <view style="width: 25%;border-right:1upx solid #FFFFFF;font-size: 20upx;"> + {{item.id}} + </view> + <view style="width:25%;border-right:1upx solid #FFFFFF;color:#FF8D1A; font-size: 20upx;"> + {{item.works_num}} + </view> + <view style="width:25%;border-right: 1upx solid #FFFFFF;font-size: 20upx;"> + {{item.order_count}} + </view> + <view style="width:25%;border-right: 1upx solid #FFFFFF;font-size: 20upx;"> + {{formatRounding(item.statement_sum)}} + </view> + </view> + </view> + </scroll-view> + </view> + <!--我的设备销量结束 --> + </view> + + <!-- 自定义底部 --> + <foot action="0" :partnerId="Userres_partner_id" :partnerType="UserresPartnerType"></foot> + + <!-- 自定义日期开始 --> + <uni-popup ref="datashowshare" :type="'center'" @change="change" + style="position: relative; z-index: 999999999;"> + <view class="uni-share" style="width: 700upx; margin: auto;"> + <view style="background: #F9F9F9;width: 100%;border-bottom: 1upx solid #00000000;"> + <view style="width: 100%;border-bottom: 1upx solid #E9E7ED; height:100upx; + text-align: center;line-height: 100upx; font-size: 26upx; font-weight: 500;"> + 自定义日期 + </view> + <view style="margin:40upx; display: flex; align-items: center;justify-content: center;"> + <view style="width: calc(50% - 30upx);"> + <picker mode="date" :value="queryPage.trend_start_time" start="2000-01-01" + :end="queryPage.trend_end_time" @change="starttimeChange"> + <view + style="font-size: 24upx; background:#F3F3F3; padding: 20upx 25upx; border-radius: 10upx; text-align: center;"> + {{queryPage.trend_start_time ? queryPage.trend_start_time : '开始时间'}} + </view> + </picker> + </view> + <view style="font-size: 24upx; width: 60upx; text-align: center;">至</view> + <view style="width: calc(50% - 30upx);"> + <picker mode="date" :value="queryPage.trend_end_time" :start="queryPage.trend_strat_time" + :end="queryPage.trend_end_time" @change="endtimeChange"> + <view + style="font-size: 24upx; background:#F3F3F3; padding: 20upx 25upx; border-radius: 10upx; text-align: center;"> + {{queryPage.trend_end_time ? queryPage.trend_end_time : '结束时间'}} + </view> + </picker> + </view> + </view> + <view @click="setdata" style="width: calc(100% - 80upx); margin:0 auto 40upx; height: 90upx; border-radius: 10upx; + line-height: 90upx; font-size: 26upx; text-align: center; color: #FFFFFF; background: #FF8D1A;">确定</view> + </view> + </view> + </uni-popup> + <!-- 自定义日期结束 --> + + </view> +</template> + +<script> + import updata from '@/util/updata.js'; //版本更新 + import foot from '../../components/foot.vue'; // 自定义底部 + import logoservice from '@/service/logoservice.js'; + import myhead from './head/head-home-default.vue'; + //一款可以让数字跑起来的组件 + import digitJump from '../../components/zhihuai-DigitJump/zhihuai-DigitJump.vue' + + //折线图 + import uCharts from '../../js_sdk/u-charts/u-charts.js'; + //底部弹框 + import uniPopup from '../index/common/uni-popup/uni-popup.vue' + var _self; + var canvaLineA = null; + export default { + components: { + foot, + myhead, + digitJump, + uniPopup + }, + computed: {}, + data() { + return { + selectTopType: 1, //1:订单收益 2:设备 + long: false, + //m=Report/cityIndex + queryPage: { + m: 'Report/cityIndex', + table: 'machine', + trend_start_time: null, //指标开始时间 + trend_end_time: null, //指标结束时间 + city_start_time: null, //市级代理开始时间 + city_end_time: null, //市级代理结束时间 + machine_start_time: null, //我的设备开始时间 + machine_end_time: null, //我的设备结束时间 + }, + LoupanList: [], + IndicatorRrendList: [], //指标趋势集合 + AllDistrictStatisticsList: [], //区级代理集合 + AllDeviceStatisticsList: [], //设备代理集合 + + thirty: null, + seven: true, + districtgoodone: true, + districtgoodseven: null, + districtgoodthirty: null, + + devicegoodone: true, + devicegoodseven: null, + devicegoodthirty: null, + + datatogglePopup_text: null, + + cWidth: '', + cHeight: '', + pixelRatio: 1, + enableScroll: false, + imgSrc: null, + imgSrcstate: false, //控制折线图顶层问题 + chartDataimgSrcstate: true, + chartData: { + categories: ['0', '0', '0', '0', '0', '0', '0', '0', '0'], + series: [{ + name: '数值', + data: [0, 0, 0, 0, 0, 0, 0, 0, 0], + color: '#FF8D1A' + }] + }, + + datetext: '昨天', + datetext_good: '昨天', + device_datetext_good: '昨天', + titleName: '', + + Userres_partner_id: null, //总代理 + AgentState: '-1', + UserresPartnerType: 4, //代理标识判断 + }; + }, + methods: { + + + //四设五入 + formatRounding(value ) { + //截取当前数据到小数点后两位 + let realVal = parseFloat(value).toFixed(2) + return realVal + }, + + + //调转统计界面 + toProfitPage() { + uni.navigateTo({ + url: '/pages/mall/profit?proxy=1', + }); + }, + + //调转订单界面 + toOrderPage(e) { + if (e == null) { + uni.navigateTo({ + url: '/pages/mine/order?proxy=1', + }); + } else { + uni.navigateTo({ + url: '/pages/mine/order?day=' + e + "&proxy=1", + }); + } + }, + + //格式化时间 + dateFormatTotext(time) { + try { + var d = new Date(time.replace(/-/g, "/")); + var times = (d.getMonth() + 1) + '-' + d.getDate(); + return times + } catch (e) { + // 错误处理代码片段 + } + return time; + }, + + //头部标题选中 + onSelectTopTitle(index) { + this.selectTopType = index; + }, + + + + //选中区代理列表 + selectDistrictAgentList(index, item) { + console.log("进来") + var resultList = this.AllDistrictStatisticsList; + this.AllDistrictStatisticsList = []; + var isDown = item.isDown; + if (isDown) { + isDown = false + } else { + isDown = true + } + resultList.forEach(itemData => { + if (itemData.id == item.id) { + itemData.isDown = isDown + } + }) + this.AllDistrictStatisticsList = resultList; + }, + + + //选中设备列表 + selectDeviceAgentList(index, item) { + var resultList = this.AllDeviceStatisticsList; + this.AllDeviceStatisticsList = []; + var isDown = item.isDown; + if (isDown) { + isDown = false + } else { + isDown = true + } + resultList.forEach(itemData => { + if (itemData.id == item.id) { + itemData.isDown = isDown + } + }) + this.AllDeviceStatisticsList = resultList; + }, + + //确定时间段 + setdata(e) { + this.chartDataimgSrcstate = true + this.seven = null + this.thirty = null + this.loadGoodsList(1); + var _this = this + setTimeout(function() { //延迟一定时间执行 + _this.imgSrcstate = false + _this.$refs['datashowshare'].close(); + }, 800); + }, + + //选择开始时间 + starttimeChange(e) { + console.log("开始时间:" + e.target.value); + this.queryPage.trend_start_time = e.target.value; + }, + + //选择结束时间 + endtimeChange(e) { + this.queryPage.trend_end_time = e.target.value + }, + + //自定义时间段 + datatogglePopup(e) { + var _this = this + _this.imgSrcstate = true + setTimeout(function() { //延迟一定时间执行 + _this.$nextTick(() => { + _this.$refs['datashowshare'].open() + }) + }, 100); + }, + + //指标趋势---7天 + getsevendate(e) { + this.chartDataimgSrcstate = true + this.imgSrcstate = false + this.queryPage.trend_start_time = this.getDay(e) + this.queryPage.trend_end_time = this.getDay(0) + this.seven = true + this.thirty = null + this.loadGoodsList(1); + }, + + //指标趋势---30天 + getthirtydate(e) { + this.chartDataimgSrcstate = true + this.imgSrcstate = false + this.queryPage.trend_start_time = this.getDay(e) + this.queryPage.trend_end_time = this.getDay(0) + this.seven = null + this.thirty = true + this.loadGoodsList(1); + }, + + + //区代理销量----昨天 + getdistrictdate(e) { + this.datetext_good = '昨天' + this.chartDataimgSrcstate = true + this.imgSrcstate = false + this.queryPage.city_start_time = this.getDay(e) + this.queryPage.city_end_time = this.getDay(0) + this.districtgoodseven = null + this.districtgoodthirty = null + this.districtgoodone = true + this.loadGoodsList(2); + }, + + // 区代理销量----7天 + getdistrictsevendate(e) { + this.datetext_good = '近7天' + this.chartDataimgSrcstate = true + this.imgSrcstate = false + this.queryPage.city_start_time = this.getDay(e) + this.queryPage.city_end_time = this.getDay(0) + this.districtgoodseven = true + this.districtgoodthirty = null + this.districtgoodone = null + this.loadGoodsList(2); + }, + + // 区代理销量----30天 + getdistrictthirtydate(e) { + this.datetext_good = '近30天' + this.chartDataimgSrcstate = true + this.imgSrcstate = false + this.queryPage.city_start_time = this.getDay(e) + this.queryPage.city_end_time = this.getDay(0) + this.districtgoodone = null + this.districtgoodseven = null + this.districtgoodthirty = true + this.loadGoodsList(2); + }, + + + // 设备代理---昨天 + getdeviceonedate(e) { + this.device_datetext_good = '昨天' + this.chartDataimgSrcstate = true + this.imgSrcstate = false + this.queryPage.machine_start_time = this.getDay(e) + this.queryPage.machine_end_time = this.getDay(0) + this.devicegoodone = true + this.devicegoodseven = null + this.devicegoodthirty = null + this.loadGoodsList(3); + }, + + + // 设备代理---7天 + getdevicesevendate(e) { + this.device_datetext_good = '近7天' + this.chartDataimgSrcstate = true + this.imgSrcstate = false + this.queryPage.machine_start_time = this.getDay(e) + this.queryPage.machine_end_time = this.getDay(0) + this.devicegoodone = null + this.devicegoodseven = true + this.devicegoodthirty = null + this.loadGoodsList(3); + }, + + + // 设备代理----30天 + getdevicethirtydate(e) { + this.device_datetext_good = '近30天' + this.chartDataimgSrcstate = true + this.imgSrcstate = false + this.queryPage.machine_start_time = this.getDay(e) + this.queryPage.machine_end_time = this.getDay(0) + this.devicegoodone = null + this.devicegoodseven = null + this.devicegoodthirty = true + this.loadGoodsList(3); + }, + + + //获取天数 + getDay(day) { + this.imgSrcstate = false + var today = new Date(); + var targetday_milliseconds = today.getTime() + 1000 * 60 * 60 * 24 * day; + today.setTime(targetday_milliseconds); //注意,这行是关键代码 + var tYear = today.getFullYear(); + var tMonth = today.getMonth(); + var tDate = today.getDate(); + tMonth = this.doHandleMonth(tMonth + 1); + tDate = this.doHandleMonth(tDate); + return tYear + "-" + tMonth + "-" + tDate; + }, + + doHandleMonth(month) { + var m = month; + if (month.toString().length == 1) { + m = "0" + month; + } + return m; + }, + + //指标 + target(e) { + this.chartDataimgSrcstate = true + this.queryPage.table = e + this.loadGoodsList(1); + }, + + //打开所属代理 + clickAgent() { + this.imgSrcstate = true + this.$nextTick(() => { + this.$refs['showshareAgent'].open() + }) + }, + + // 打开设备 + machinetogglePopup() { + this.imgSrcstate = true + this.$nextTick(() => { + this.$refs['machineshowshare'].open() + }) + }, + selectmachine(item) { + this.chartDataimgSrcstate = true + this.queryPage.machine_id = item.machine_id ? item.machine_id : null + var _this = this + setTimeout(function() { //延迟一定时间执行 + _this.imgSrcstate = false + _this.$refs['machineshowshare'].close(); + _this.loadGoodsList(1); + }, 100); + }, + //打开商品 + togglePopup() { + this.imgSrcstate = true + this.$nextTick(() => { + this.$refs['showshare'].open() + }) + }, + selectMonth(item) { + this.chartDataimgSrcstate = true + this.queryPage.goods_name = item.goods_name ? item.goods_name : null + this.queryPage.goods_attr = item.goods_specs ? item.goods_specs : null + this.queryPage.goods_id = item.goods_id ? item.goods_id : null + var _this = this + setTimeout(function() { //延迟一定时间执行 + _this.imgSrcstate = false + _this.$refs['showshare'].close(); + _this.loadGoodsList(1); + }, 100); + }, + cancel(type) { + this.$refs['showshare'].close() + this.$refs['machineshowshare'].close() + this.$refs['showshareAgent'].close() + var _this = this + setTimeout(function() { //延迟一定时间执行 + _this.imgSrcstate = false + }, 100); + }, + change(e) { + if (e.show == false) { + var _this = this + setTimeout(function() { //延迟一定时间执行 + _this.imgSrcstate = false + _this.chartDataimgSrcstate = false + }, 100); + } + }, + + //设备数据 + equipment_list(e) { + uni.navigateTo({ + url: '/pages/store/equipment_list?status=' + e, + }); + }, + //本月设备收入榜单 + Liquidationmachine_id(e) { + let machineIncome_start_time = this.queryPage.thisMonthOrderIncomeRank_start_time + let machineIncome_end_time = this.queryPage.thisMonthOrderIncomeRank_end_time + uni.navigateTo({ + url: '../mine/order?machineid=' + e.machine_id + '&start_time=' + + machineIncome_start_time + + '&end_time=' + machineIncome_end_time + '&datetext=' + this.datetext + }); + + }, + //本月商品销量榜单 + LiquidationGoodSize(e) { + let machineIncome_start_time = this.queryPage.thisMonthGoodsSizeRank_start_time + let machineIncome_end_time = this.queryPage.thisMonthGoodsSizeRank_end_time + uni.navigateTo({ + url: '/pages/mine/order?goods_name=' + e.goods_name + '&goods_specs=' + e.goods_specs + + '&start_time=' + machineIncome_start_time + '&end_time=' + machineIncome_end_time + + '&datetext=' + this.datetext_good + }); + }, + + //收益 + Liquidation(e) { + //console.log("date=" + e); + if (e == null) { + uni.navigateTo({ + url: '/pages/mine/Liquidation', + }); + } else { + uni.navigateTo({ + url: '/pages/mine/Liquidation?date=' + e + "&day=" + e, + }); + } + }, + + //获取天数 + getToday() { + let myDate = new Date(); + let myMonth = myDate.getMonth() + 1; + if (myMonth < 10) { + myMonth = '0' + myMonth; //补齐 + } + let mydate = myDate.getDate(); + if (myDate.getDate() < 10) { + mydate = '0' + myDate.getDate(); //补齐 + } + let today = myDate.getFullYear() + '-' + myMonth + return today + }, + + //加载数据 + loadGoodsList(state) { + console.log("加载前") + uni.showLoading({ + title: '正在加载中...', + mask: true + }) + logoservice.Reportindex(this.queryPage).then(result => { + console.log("加载后") + this.long = true + this.LoupanList = result + if (state == 1 || state == 5) { //折线图 + let categories = [] + let seriesdata = [] + if (this.LoupanList.cityTrend.length > 8) { + let number = Math.ceil(this.LoupanList.cityTrend.length / 8) + this.LoupanList.cityTrend.forEach((item, index) => { + if (index % number == 0) { + categories.push(item.day.split("-")[1] + '-' + item.day.split("-")[2]) + } else { + categories.push('') + } + seriesdata.push(item.total) + }) + } else { + this.LoupanList.cityTrend.forEach((item, index) => { + categories.push(item.day.split("-")[1] + '-' + item.day.split("-")[2]) + seriesdata.push(item.total) + }) + } + this.chartData.categories = categories + this.chartData.series[0].data = seriesdata + this.cWidth = uni.upx2px(750); + this.cHeight = uni.upx2px(500); + this.showLineA("canvaLineA", this.chartData); + } + + if (state == 2 || state == 5) { //区代理 + this.LoupanList.cityCityStatistics.forEach(item => { + item.isDown = false //是否下拉 + }) + this.AllDistrictStatisticsList = this.LoupanList.cityCityStatistics + } + + if (state == 3 || state == 5) { //我的设备 + var myMachineCountObject = this.LoupanList.myMachineCount + this.AllDeviceStatisticsList = []; + if (myMachineCountObject != null && myMachineCountObject != "") { + for (const key in myMachineCountObject) { + this.AllDeviceStatisticsList.push(myMachineCountObject[key]); + } + } + } + uni.hideLoading(); + uni.stopPullDownRefresh(); + }).catch(err => { + uni.hideLoading(); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }); + }, + + + //折线一 + showLineA(canvasId, chartData) { + var _self = this; + canvaLineA = new uCharts({ + $this: _self, + canvasId: canvasId, //页面组件canvas-id + type: 'area', //图表类型 + fontSize: 11, + legend: { + show: false + }, + dataLabel: false, //是否在图表中显示数据标签内容值 + dataPointShape: true, //是否在图表中显示数据点图形标识 + background: '#FFFFFF', + pixelRatio: _self.pixelRatio, + categories: chartData.categories, + series: chartData.series, + animation: true, + enableScroll: _self.enableScroll, //开启图表拖拽功能 + xAxis: { + type: 'grid', + gridColor: '#F2F2F2', + gridType: 'dash', + dashLength: 4, + itemCount: 8, //x轴单屏显示数据的数量,默认为5个 + scrollShow: true, //新增是否显示滚动条,默认false + scrollAlign: 'left', //滚动条初始位置 + scrollBackgroundColor: '#F7F7FF', //默认为 #EFEBEF + scrollColor: '#DEE7F7', //默认为 #A6A6A6 + }, + yAxis: { + calibration: true, + gridType: 'dash', + gridColor: '#F2F2F2', + dashLength: 4, + splitNumber: 5, + format: (val) => { + return val.toFixed(0) + } + }, + width: _self.cWidth * _self.pixelRatio, + height: _self.cHeight * _self.pixelRatio, + padding: [20, 15, 4, 15], + extra: { + area: { + type: 'curve', + opacity: 0.2, + addLine: true, + width: 2 + } + } + }); + canvaLineA.addEventListener('renderComplete', () => { //监控图表渲染完成 + //console.log(_self.chartDataimgSrcstate) + //if(_self.chartDataimgSrcstate){ + setTimeout(function() { //延迟一定时间执行 + uni.canvasToTempFilePath({ //将图表转成图片 + x: 0, + y: 0, + width: _self.cWidth * _self.pixelRatio, + height: _self.cHeight * _self.pixelRatio, + fileType: 'png', + canvasId: 'canvaLineA', + success: function(res) { + //console.log(res) + _self.imgSrc = res.tempFilePath; + _self.chartDataimgSrcstate = false + }, + fail: function(res) {} + }, _self); + }, 100); + //} + }); + }, + + touchLineA(e) { + canvaLineA.scrollStart(e); + }, + + moveLineA(e) { + canvaLineA.scroll(e); + }, + + touchEndLineA(e) { + canvaLineA.scrollEnd(e); + //下面是toolTip事件,如果滚动后不需要显示,可不填写 + canvaLineA.showToolTip(e, { + format: function(item, category) { + return category + ' ' + item.name + ':' + item.data + } + }); + } + }, + + //下拉加载 + onPullDownRefresh() { + this.loadGoodsList(5); + }, + + //上拉加载 + onReachBottom() {}, + + //滑动 + onPageScroll(e) { + let st = e.scrollTop; + this.imgSrcstate = true + }, + + onLoad(options) { + this.queryPage.trend_start_time = this.getDay(-7) //指标开始时间 + this.queryPage.trend_end_time = this.getDay(0) //指标结束时间 + + this.queryPage.city_start_time = this.getDay(-1) //市级代理开始时间 + this.queryPage.city_end_time = this.getDay(-1) //市级代理结束时间 + + this.queryPage.machine_start_time = this.getDay(-1) //我的设备开始时间 + this.queryPage.machine_end_time = this.getDay(-1) //我的结束时间 + + }, + + onShow() { + this.cWidth = uni.upx2px(750); + this.cHeight = uni.upx2px(500); + this.showLineA("canvaLineA", this.chartData) + uni.login({ + provider: 'weixin', + success: (res) => { + logoservice.login({ + m: 'Init/init', + code: res.code + }).then(result => { + this.$base.Userres = result //记录用户登录信息 + this.Userres_partner_id = this.$base.Userres.partner_id //总代理 + uni.setStorageSync('partner_id', this.$base.Userres.partner_id) + + //代理标识判断开始 + if (this.Userres_partner_id == 0) { + this.UserresPartnerType == 1 + } else { + if (this.$base.Userres.partner != null) { + if (this.$base.Userres.partner.level == 1) { + this.UserresPartnerType == 2 + } else if (this.$base.Userres.partner.level == 2) { + this.UserresPartnerType == 3 + } + } + } + //代理标识判断开始结束 + + uni.setStorageSync('openid', result.openid) + logoservice.setwixinInfo(result); + this.loadGoodsList(5); + logoservice.receiveMoneyList({ + m: 'Init/getPartner' + }).then(result => { + this.agentList = result.list + result.list.forEach(item => { + if (item.id == result.p_id) { + this.titleName = item.name + //this.queryPage.partner_id = item.id + //this.queryPage.partner_name = item.name + // wx.setNavigationBarTitle({ + // title: item.name + // }) //修改头部名称 + } + }) + }).catch(err => { + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + }).catch(err => { + uni.navigateTo({ + url: 'login', + }); + }) + }, + fail: (err) => { + console.error('授权登录失败:' + JSON.stringify(err)); + } + }); + }, + onUnload() { + let pages = getCurrentPages(); + } + }; +</script> + +<style lang="scss"> + page { + background: #FFFFFF !important; + } + + .qiun-columns { + display: flex; + flex-direction: column !important; + } + + .qiun-charts { + width: 750upx; + height: 500upx; + background-color: #FFFFFF; + } + + .charts { + width: 750upx; + height: 500upx; + background-color: #FFFFFF; + } + + .imgSrcstate { + position: absolute; + width: 100%; + right: -900px; + top: -600px; + display: none; + } + + .imgSrcdisplay { + z-index: 0 !important; + } + + /* 底部分享 */ + .uni-share { + display: flex; + flex-direction: column; + } + + .uni-share-btn { + height: 90upx; + line-height: 90upx; + font-size: 26upx; + text-align: center; + background: #FFFFFF; + } + + .green { + background-color: #FF8D1A !important; + color: #FFFFFF; + } + + .targetgreen { + color: #FFFFFF !important; + background: #FF8D1A !important; + } + + /*样式的width和height一定要与定义的cWidth和cHeight相对应*/ + .qiun-charts { + width: 750upx; + height: 500upx; + background-color: #FFFFFF; + } + + .charts { + width: 750upx; + height: 500upx; + background-color: #FFFFFF; + } + + .home { + width: 100%; + padding-bottom: 60upx; + display: flex; + flex-direction: column; + + /*今日 today */ + .today { + width: 100%; + background: #FF8D1A; + display: flex; + justify-content: center; + padding-top: 50upx; + margin-top: 94upx; + padding-bottom: 30upx; + height: auto; + + .today_ul { + width: 50%; + + .today_ul_div { + margin-left: 20upx; + color: #FFFFFF; + + .today_money { + font-size: 35upx; + font-weight: bold; + } + + .today_profit_text { + font-size: 22upx; + font-weight: 400; + line-height: 20upx; + } + + .today_order_money { + // margin-top: 96upx; + font-size: 50upx; + font-weight: 400; + margin-bottom: 10upx; + } + + .today_order_num { + // margin-top: 37upx; + font-size: 36upx; + font-weight: bold; + } + } + } + } + + /* yesterday */ + .yesterday { + width: 100%; + height: 127upx; + display: flex; + border-bottom: 1px solid rgba(178, 178, 178, 0.2); + + .yesterday_div { + width: 100%/4; + margin-left: 45upx; + color: #333333; + text-align: center; + + .yesterday_profit_money { + margin-top: 36upx; + font-size: 36upx; + font-weight: bold; + } + + .yesterday_profit_text { + font-size: 20upx; + font-weight: 400; + line-height: 30upx; + } + } + } + + /* equipment */ + .equipment { + width: 100%; + + .equipment_title { + font-size: 40upx; + font-weight: 500; + color: #333333; + margin: 50upx 0 40upx 45upx; + } + + .equipment_main { + width: 100%; + display: flex; + + .equipment_main_ul { + width: calc(100% / 2); + + .equipment_main_ul_circle { + width: 120upx; + height: 120upx; + border-radius: 50%; + margin: auto; + + .equipment_main_ul_circle_num { + font-size: 40upx; + font-weight: 400; + text-align: center; + line-height: 120upx; + } + } + + .equipment_main_ul_text { + font-size: 28upx; + font-weight: 400; + margin-top: 40upx; + color: #333333; + text-align: center; + } + } + } + } + + /*本月机器榜单 */ + .machine_title { + font-size: 40upx; + font-weight: 500; + color: #333333; + margin: 80upx 0 70upx 45upx; + } + + .topBox { + width: calc(100% - 90upx); + margin: 0 auto 40upx; + display: flex; + flex-direction: row; + align-items: center; + } + + .topLittleBOX-1 { + font-size: 24upx; + width: 120upx; + color: #888888; + overflow: text-align; + } + + .topLittleBOX-2 { + padding-left: 20upx; + padding-top: auto; + padding-bottom: auto; + display: flex; + // height: 50upx; + // line-height:50upx; + vertical-align: middle; + flex-direction: row; + align-items: center; + width: calc(100% - 120upx); + } + + .row-1 { + height: 30upx; + background-color: #F56364; + border-radius: 20upx; + width: 0upx; + transition: width 1.5s linear; + } + + .rowText { + margin-left: 10upx; + font-size: 30upx; + color: #4c4c4c; + } + + } +</style> diff --git a/pages/index/common/uni-popup/uni-popup.vue b/pages/index/common/uni-popup/uni-popup.vue new file mode 100644 index 0000000..fd132de --- /dev/null +++ b/pages/index/common/uni-popup/uni-popup.vue @@ -0,0 +1,274 @@ +<template> + <view v-if="showPopup" class="uni-popup" @touchmove.stop.prevent="clear"> + <uni-transition :mode-class="['fade']" :styles="maskClass" :duration="duration" :show="showTrans" + @click="onTap" /> + <uni-transition :mode-class="ani" :styles="transClass" :duration="duration" :show="showTrans" @click="onTap"> + <view class="uni-popup__wrapper-box" @click.stop="clear"> + <slot /> + </view> + </uni-transition> + </view> +</template> + +<script> + import uniTransition from '../uni-transition/uni-transition.vue' + + /** + * PopUp 弹出层 + * @description 弹出层组件,为了解决遮罩弹层的问题 + * @tutorial https://ext.dcloud.net.cn/plugin?id=329 + * @property {String} type = [top|center|bottom] 弹出方式 + * @value top 顶部弹出 + * @value center 中间弹出 + * @value bottom 底部弹出 + * @property {Boolean} animation = [ture|false] 是否开启动画 + * @property {Boolean} maskClick = [ture|false] 蒙版点击是否关闭弹窗 + * @event {Function} change 打开关闭弹窗触发,e={show: false} + */ + + export default { + name: 'UniPopup', + components: { + uniTransition + }, + props: { + // 开启动画 + animation: { + type: Boolean, + default: true + }, + // 弹出层类型,可选值,top: 顶部弹出层;bottom:底部弹出层;center:全屏弹出层 + type: { + type: String, + default: 'center' + }, + maskClick: { + type: Boolean, + default: true + } + }, + data() { + return { + duration: 300, + ani: [], + showPopup: false, + showTrans: false, + maskClass: { + 'position': 'fixed', + 'bottom': 0, + 'top': 0, + 'left': 0, + 'right': 0, + 'backgroundColor': 'rgba(0, 0, 0, 0.4)', + }, + transClass: { + 'position': 'fixed', + 'left': 0, + 'right': 0, + + }, + maskClickData: true + } + }, + watch: { + type: { + handler: function(newVal) { + switch (this.type) { + case 'top': + this.ani = ['slide-top'] + this.transClass = { + 'position': 'fixed', + 'left': 0, + 'right': 0, + } + break + case 'bottom': + this.ani = ['slide-bottom'] + this.transClass = { + 'position': 'fixed', + 'left': 0, + 'right': 0, + 'bottom': 0 + } + break + case 'center': + this.ani = ['zoom-out', 'fade'] + this.transClass = { + 'position': 'fixed', + /* #ifndef APP-NVUE */ + 'display': 'flex', + 'flexDirection': 'column', + /* #endif */ + 'bottom': 0, + 'left': 0, + 'right': 0, + 'top': 0, + 'justifyContent': 'center', + 'alignItems': 'center' + } + + break + } + }, + immediate: true + } + }, + created() { + if (this.animation) { + this.duration = 300 + } else { + this.duration = 0 + } + }, + methods: { + + //设置是否能点击 + setMaskClick(IsmaskClick) { + this.maskClickData = IsmaskClick + }, + + clear(e) { + e.stopPropagation() + }, + + open() { + this.maskClickData = this.maskClick; + this.showPopup = true + this.$nextTick(() => { + clearTimeout(this.timer) + this.timer = setTimeout(() => { + this.showTrans = true + }, 10); + }) + this.$emit('change', { + show: true + }) + }, + + close(type) { + this.showTrans = false + this.$nextTick(() => { + clearTimeout(this.timer) + this.$emit('change', { + show: false + }) + this.timer = setTimeout(() => { + this.showPopup = false + }, 500) + }) + }, + + onTap() { + if (!this.maskClickData) return + this.close() + } + } + } +</script> +<style lang="scss" scoped> + .uni-popup { + position: fixed; + /* #ifdef H5 */ + top: var(--window-top); + /* #endif */ + /* #ifndef H5 */ + top: 0; + /* #endif */ + bottom: 0; + left: 0; + right: 0; + /* #ifndef APP-NVUE */ + z-index: 9999; + /* #endif */ + } + + .uni-popup__mask { + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + background-color: $uni-bg-color-mask; + opacity: 0; + } + + .mask-ani { + transition-property: opacity; + transition-duration: 0.2s; + } + + .uni-top-mask { + opacity: 1; + } + + .uni-bottom-mask { + opacity: 1; + } + + .uni-center-mask { + opacity: 1; + } + + .uni-popup__wrapper { + /* #ifndef APP-NVUE */ + display: block; + /* #endif */ + position: absolute; + } + + .top { + top: 0; + left: 0; + right: 0; + transform: translateY(-500px); + } + + .bottom { + bottom: 0; + left: 0; + right: 0; + transform: translateY(500px); + } + + .center { + /* #ifndef APP-NVUE */ + display: flex; + flex-direction: column; + /* #endif */ + bottom: 0; + left: 0; + right: 0; + top: 0; + justify-content: center; + align-items: center; + transform: scale(1.2); + opacity: 0; + } + + .uni-popup__wrapper-box { + /* #ifndef APP-NVUE */ + display: block; + /* #endif */ + position: relative; + } + + .content-ani { + // transition: transform 0.3s; + transition-property: transform, opacity; + transition-duration: 0.2s; + } + + + .uni-top-content { + transform: translateY(0); + } + + .uni-bottom-content { + transform: translateY(0); + } + + .uni-center-content { + transform: scale(1); + opacity: 1; + } +</style> diff --git a/pages/index/common/uni-transition/uni-transition.vue b/pages/index/common/uni-transition/uni-transition.vue new file mode 100644 index 0000000..3252752 --- /dev/null +++ b/pages/index/common/uni-transition/uni-transition.vue @@ -0,0 +1,276 @@ +<template> + <view v-if="isShow" ref="ani" class="uni-transition" :class="[ani.in]" :style="'transform:' +transform+';'+stylesObject" + @click="change"> + <slot></slot> + </view> +</template> + +<script> + //#ifdef APP-NVUE + const animation = uni.requireNativePlugin('animation'); + // #endif + /* + * Transition 过渡动画 + * @description 简单过渡动画组件 + * @tutorial https://ext.dcloud.net.cn/plugin?id=985 + * @property {Boolean} show = [false|true] 控制组件显示或隐藏 + * @property {Array} modeClass = [fade|slide-top|slide-right|slide-bottom|slide-left|zoom-in|zoom-out] 过渡动画类型 + * @value fade 渐隐渐出过渡 + * @value slide-top 由上至下过渡 + * @value slide-right 由右至左过渡 + * @value slide-bottom 由下至上过渡 + * @value slide-left 由左至右过渡 + * @value zoom-in 由小到大过渡 + * @value zoom-out 由大到小过渡 + * @property {Number} duration 过渡动画持续时间 + * @property {Object} styles 组件样式,同 css 样式,注意带’-‘连接符的属性需要使用小驼峰写法如:`backgroundColor:red` + */ + export default { + name: 'uniTransition', + props: { + show: { + type: Boolean, + default: false + }, + modeClass: { + type: Array, + default () { + return [] + } + }, + duration: { + type: Number, + default: 300 + }, + styles: { + type: Object, + default () { + return {} + } + } + }, + data() { + return { + isShow: false, + transform: '', + ani: { in: '', + active: '' + } + }; + }, + watch: { + show: { + handler(newVal) { + if (newVal) { + this.open() + } else { + this.close() + } + }, + immediate: true + } + }, + computed: { + stylesObject() { + let styles = { + ...this.styles, + 'transition-duration': this.duration / 1000 + 's' + } + let transfrom = '' + for (let i in styles) { + let line = this.toLine(i) + transfrom += line + ':' + styles[i] + ';' + } + return transfrom + } + }, + created() { + //this.timer = null + //this.nextTick = (time = 50) => new Promise(resolve => { + //clearTimeout(this.timer) + //this.timer = setTimeout(resolve, time) + //return this.timer + //}); + }, + methods: { + change() { + this.$emit('click', { + detail: this.isShow + }) + }, + open() { + clearTimeout(this.timer) + this.isShow = true + this.transform = '' + this.ani.in = '' + for (let i in this.getTranfrom(false)) { + if (i === 'opacity') { + this.ani.in = 'fade-in' + } else { + this.transform += `${this.getTranfrom(false)[i]} ` + } + } + this.$nextTick(() => { + setTimeout(() => { + this._animation(true) + }, 50) + }) + }, + close(type) { + clearTimeout(this.timer) + this._animation(false) + }, + _animation(type) { + let styles = this.getTranfrom(type) + // #ifdef APP-NVUE + if(!this.$refs['ani']) return + animation.transition(this.$refs['ani'].ref, { + styles, + duration: this.duration, //ms + timingFunction: 'ease', + needLayout: false, + delay: 0 //ms + }, () => { + if (!type) { + this.isShow = false + } + this.$emit('change', { + detail: this.isShow + }) + }) + // #endif + // #ifndef APP-NVUE + this.transform = '' + for (let i in styles) { + if (i === 'opacity') { + this.ani.in = `fade-${type?'out':'in'}` + } else { + this.transform += `${styles[i]} ` + } + } + this.timer = setTimeout(() => { + if (!type) { + this.isShow = false + } + this.$emit('change', { + detail: this.isShow + }) + }, this.duration) + // #endif + }, + getTranfrom(type) { + let styles = { + transform: '' + } + this.modeClass.forEach((mode) => { + switch (mode) { + case 'fade': + styles.opacity = type ? 1 : 0 + break; + case 'slide-top': + styles.transform += `translateY(${type?'0':'-100%'}) ` + break; + case 'slide-right': + styles.transform += `translateX(${type?'0':'100%'}) ` + break; + case 'slide-bottom': + styles.transform += `translateY(${type?'0':'100%'}) ` + break; + case 'slide-left': + styles.transform += `translateX(${type?'0':'-100%'}) ` + break; + case 'zoom-in': + styles.transform += `scale(${type?1:0.8}) ` + break; + case 'zoom-out': + styles.transform += `scale(${type?1:1.2}) ` + break; + } + }) + return styles + }, + _modeClassArr(type) { + let mode = this.modeClass + if (typeof(mode) !== "string") { + let modestr = '' + mode.forEach((item) => { + modestr += (item + '-' + type + ',') + }) + return modestr.substr(0, modestr.length - 1) + } else { + return mode + '-' + type + } + }, + // getEl(el) { + // console.log(el || el.ref || null); + // return el || el.ref || null + // }, + toLine(name) { + return name.replace(/([A-Z])/g, "-$1").toLowerCase(); + } + } + } +</script> + +<style> + .uni-transition { + transition-timing-function: ease; + transition-duration: 0.3s; + transition-property: transform, opacity; + } + + .fade-in { + opacity: 0; + } + + .fade-active { + opacity: 1; + } + + .slide-top-in { + /* transition-property: transform, opacity; */ + transform: translateY(-100%); + } + + .slide-top-active { + transform: translateY(0); + /* opacity: 1; */ + } + + .slide-right-in { + transform: translateX(100%); + } + + .slide-right-active { + transform: translateX(0); + } + + .slide-bottom-in { + transform: translateY(100%); + } + + .slide-bottom-active { + transform: translateY(0); + } + + .slide-left-in { + transform: translateX(-100%); + } + + .slide-left-active { + transform: translateX(0); + opacity: 1; + } + + .zoom-in-in { + transform: scale(0.8); + } + + .zoom-out-active { + transform: scale(1); + } + + .zoom-out-in { + transform: scale(1.2); + } +</style> diff --git a/pages/index/equipment.vue b/pages/index/equipment.vue new file mode 100644 index 0000000..5caa4bc --- /dev/null +++ b/pages/index/equipment.vue @@ -0,0 +1,655 @@ +<template> + <view class="full-width content-color full-height" style="position: relative;"> + <!-- 自定义头部 --> + <myhead :title="topTitle" :color="'#000'" :titleShow="true" :backShow="true" :background="'#ffffff'"></myhead> + <view class="full-width"> + <!-- 选项卡 --> + <view class="equipment" :style="{'top':equipmentHeight + 'px'}"> + <view class="equipment_main"> + <view class="equipment_main_ul" @click="equipment_list(null)"> + <view class="equipment_main_ul_circle" style="color: #3321D9; border:10upx solid #3321D9;"> + <view class="equipment_main_ul_circle_num">{{equipmentData.total || '0'}} + </view> + </view> + <view class="equipment_main_ul_text">设备总数</view> + </view> + <view class="equipment_main_ul" @click="equipment_list('good')"> + <view class="equipment_main_ul_circle" style="color: #5CE6B5; border:10upx solid #04BC2B ;"> + <view class="equipment_main_ul_circle_num"> + {{equipmentData.goodsNum || '0'}} + </view> + </view> + <view class="equipment_main_ul_text">在线设备</view> + </view> + <view class="equipment_main_ul" @click="equipment_list('bad')"> + <view class="equipment_main_ul_circle" style="color: #FB1B1B; border:10upx solid #FB1B1B;"> + <view class="equipment_main_ul_circle_num">{{equipmentData.badNum || '0'}} + </view> + </view> + <view class="equipment_main_ul_text">离线设备</view> + </view> + </view> + </view> + + <!--动态数据 --> + <view scroll-y @scrolltolower="loadMore()" class="full-width" @touchend="touchEnd" v-if="long"> + <view style="padding-bottom: 120upx; padding-top: 220upx;"> + <view v-for="(item, index) in LoupanList" :key="index" @click="store(item)" class="eq_list"> + <view class="full-width eq_list_top"> + <text v-if="item.status.value == 0" class="eq_list_top_right_fault" + style="background:#FB1B1B;">离线</text> + <text v-if="item.status.value == 1" class="eq_list_top_right_fault" + style="background:#04BC2B;">正常</text> + <text v-if="item.status.value == 2" class="eq_list_top_right_fault" + style="background:#5CE6B5;">生产中</text> + <text v-if="item.status.value == 3" class="eq_list_top_right_fault" + style="background:#F2A03E;">故障</text> + <text v-if="item.status.value == 4" class="eq_list_top_right_fault" + style="background:#F2A03E;">调试</text> + <text v-if="item.status.value == 5" class="eq_list_top_right_fault" + style="background:#F2A03E;">升级中</text> + <!-- 设备状态 0:离线 1:正常 2:生产中 3:故障 4:调试 5:升级中 --> + </view> + <!-- 设备状态 0:离线 1:正常 2:生产中 3:故障 4:调试 5:升级中 --> + <view style="width: 100%;display: flex;flex-direction: row;"> + <!-- <view class="full-width eq_list_ul" style="line-height: 70upx;"> --> + <view class="eq_list_ul_left"> + <image @click.stop="previewImage(item.cover)" + :src="item.cover + '?x-oss-process=image/resize,lfit,w_300'" mode="aspectFit" + style="width:150upx; height:150upx;display: block; float: left;padding-top: 60upx;border-top 1px solid #007AFF;margin-left: 20upx;margin-top: -10upx;"> + </image> + </view> + <view + style="width:100%;float: left;margin-left: 15upx;padding-bottom: 10upx; display: flex;flex-direction: column;"> + <view v-if="item.edition!=null && item.edition.mark == 'standard'" + class="full-width eq_list_top_right_text" + style="text-align:right;margin-top:-48upx; height: 60upx;"> + <view style="color:#FFFFFF;margin-top: 0upx; + width: 60upx;height:60upx;border-top: 25px solid #383838; + border-left: 25px solid transparent; + border-right: 25px solid #383838; + border-bottom: 25px solid transparent;float:right;"> + </view> + <view + style=" transform:rotate(45deg); float: right;margin-right: -100upx;margin-top: 15upx;"> + <text class=" eq_list_top_right_text_fault" + style="font-size: 20upx;color: #FFFFFF;"> 标准版</text> + </view> + </view> + <view v-if="item.edition!=null && item.edition.mark== 'unlimited'" + class="full-width eq_list_top_right_text" + style="text-align:right;margin-top:-48upx; height: 60upx;"> + <view style="color:#FFFFFF;margin-top: 0upx; + width: 60upx;height:60upx;border-top: 25px solid #FF8D1A; + border-left: 25px solid transparent; + border-right: 25px solid #FF8D1A; + border-bottom: 25px solid transparent;float:right;"> + </view> + <view + style=" transform:rotate(45deg); float: right;margin-right: -100upx;margin-top: 15upx;"> + <text class=" eq_list_top_right_text_fault" + style="font-size: 20upx;color: #FFFFFF;"> 无限版</text> + </view> + </view> + <text + style="float: left;font-weight: bold;font-size: 32upx; margin-top: -25upx;">{{item.id}}-{{item.code}}</text> + <text + style="font-size: 28upx;color: #383838;margin-left:4upx;margin-top: 10upx;">{{category(item.shop_id,item)}}</text> + <text + style="font-size: 28upx;color: #383838;margin-left:4upx;margin-top: 30upx;">{{item.category}}-{{item.goods_category}}</text> + <View v-if="item.edition!=null && item.edition.mark == 'standard'"> + <text + style="font-size:24upx;color: #383838;margin-left:4upx;margin-top: 0upx;">剩余打印量:</text> + <text + v-if="getPrintSurplusCount(item.package_total.quota - item.package_total.used_quota) ==1 " + style="font-size:24upx;color: #1FBA40;margin-left:4upx;margin-top: 0upx;">{{item.package_total.quota - item.package_total.used_quota}}</text> + <text + v-if="getPrintSurplusCount(item.package_total.quota - item.package_total.used_quota) ==2 " + style="font-size:24upx;color: #FF8D1A;margin-left:4upx;margin-top: 0upx;">{{item.package_total.quota - item.package_total.used_quota}}</text> + <text + v-if="getPrintSurplusCount(item.package_total.quota - item.package_total.used_quota) ==3 " + style="font-size:24upx;color: #FB1B1B;margin-left:4upx;margin-top: 0upx;">{{item.package_total.quota - item.package_total.used_quota}}</text> + </view> + <View v-if="item.edition!=null && item.edition.mark == 'unlimited'"> + <text + style="font-size:24upx;color: #383838;margin-left:4upx;margin-top: 0upx;">剩余打印量:无限量</text> + </view> + </view> + </view> + <view class="full-width eq_list_ul_right" style="line-height:40upx;padding-bottom:10upx;width:calc(100% - 50upx); border-top: 1upx solid #F7F7F7; + margin-left:30upx;margin-top: 10upx; display: flex; flex-direction: row; height: 60upx;line-height: 60upx;"> + <text style="width:60%; color:#383838;font-size: 22upx; ">{{item.partner ? (item.partner) : ' ' }}{{ item.partner_id == 0 ? '(总)' : '(终)' }}</text> + <text + style="width:40%;color:#383838;font-size: 22upx;float:right;text-align: right;">{{dateFormatTotext(item.create_time)}}</text> + </view> + </view> + </view> + + <!--暂无相关信息 --> + <view class="align-center content-color" + style="position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%);" + v-if="LoupanList.length == 0 || LoupanList.length == null"> + <span class="iconfont icon-wushuju" + style="font-size: 100upx; text-align: center; color: #B2B2B2;"></span> + <view style="color: #B2B2B2; text-align: center; line-height: 50upx;font-size: 24upx;"> + 暂无相关设备信息 + </view> + </view> + </view> + <!--动态数据完 --> + </view> + <!--返回顶部 --> + <view v-if="totopstatus" class="to-top content-color" @click="totop()"> + <view class="fa fa-angle-right to-top-icon"></view> + </view> + <!--自定义底部 --> + <foot action="3" :partnerId="Userres_partner_id" :partnerType="UserresPartnerType"></foot> + </view> + +</template> + +<script> + import Enums from '@/util/Enums'; + import Env from '@/util/Env.js'; + //自定义底部 + import foot from '../../components/foot.vue'; + import logoservice from '@/service/logoservice.js'; + import myhead from './head/head.vue'; + export default { + components: { + foot, + myhead + }, + computed: {}, + data() { + return { + long: false, + LoupanList: [], //数据 + //返回顶部 + totopstatus: false, + //上拉状态 + dataLoadState: { + pullDownRefresh: false, + reachBottom: false + }, + queryPage: { + m: 'Machine/list', + page: 1, + per_page: 6, + count: 0 + }, + topQueryPage: { + m: 'Machine/machineStatusNum', + }, + Report: null, + equipmentHeight: null, + topTitle: '设备列表', + Userres_partner_id: null, + equipmentData: null, //顶部设备数据对象 + UserresPartnerType: 4, + }; + }, + + mounted() { + + }, + + created() { + //设备信息 + let app = uni.getSystemInfoSync(); + //胶囊信息 + let menuButtonInfo = uni.getMenuButtonBoundingClientRect(); + this.equipmentHeight = app.statusBarHeight + menuButtonInfo.height + (menuButtonInfo.top - app + .statusBarHeight) * 2 + }, + + methods: { + + //店铺名称 + partnername(partner_id, partner) { + var partner_name = '尚未铺设'; + if (partner) { + partner.forEach(item => { + if (item.id == partner_id) { + partner_name = item.name + } + }); + } + return partner_name + }, + + //设备数据 + equipment_list(e) { + this.queryPage.status = null + this.queryPage.stock = null + if (e == 'good') { + this.queryPage.status = 'good' + this.topTitle = '正常设备' + } + if (e == 'bad') { + this.queryPage.status = 'bad' + this.topTitle = '问题设备' + } + if (e == null) { + this.topTitle = '设备列表' + } + this.LoupanList = [] + this.queryPage.page = 1; + this.queryPage.count = 0; + this.dataLoadState.pullDownRefresh = false + this.dataLoadState.reachBottom = false; + this.loadGoodsList(Enums.DATA_DIRECTION.UP); + }, + + + //格式化时间 + dateFormatTotext(time) { + try { + var d = new Date(time.replace(/-/g, "/")); + var times = d.getFullYear() + '年' + (d.getMonth() + 1) + '月' + d.getDate() + "日"; + return "开通时间" + times + } catch (e) { + // 错误处理代码片段 + } + return ""; + }, + + + //获取剩余量次数相差 + getPrintSurplusCount(count) { + try { + if (count >= 200) { //红色 + return 1; + } else if (count < 200 && count >= 50) { //橙色 + return 2; + } else if (count < 50) { //红色 + return 3; + } + } catch (e) { + + } + return 0; + }, + + + //获取相差天数 + getDaysDifference(time) { + try { + let day = new Date(time.replace(/-/g, "/")).getTime() - new Date().getTime(); //日期转时间戳 + let dayCount = Math.floor(day / 86400000); //时间戳获取天数 + return dayCount; + } catch (e) { + + } + return 0; + }, + + + //预览图片 + previewImage(e) { + var current = e; //这里获取到的是一张本地的图片 + wx.previewImage({ + current: current, //需要预览的图片链接列表 + urls: [current] //当前显示图片的链接 + }) + }, + + //查询店铺 + category(id, item) { + var dataname = '尚未铺设'; + if (item.shop != null) { + dataname = item.shop.short_name; + } + return dataname + }, + + //加载数据 + loadGoodsList(direction) { + if (this.dataLoadState.pullDownRefresh || this.dataLoadState.reachBottom) return; + uni.showLoading({ + title: '正在加载中...' + }) + this.dataLoadState.pullDownRefresh = direction === Enums.DATA_DIRECTION.UP; + this.dataLoadState.reachBottom = direction === Enums.DATA_DIRECTION.DOWN; + if (this.dataLoadState.reachBottom) { + if (Math.ceil(this.queryPage.count / this.queryPage.per_page) < this.queryPage.page) { + return setTimeout(() => { + uni.showToast({ + title: '没有更多数据了!', + icon: 'none' + }); + }, 500); + } + } + logoservice.Machinelist(this.queryPage).then(result => { + this.long = true + let queryList = result.data + //转换时间 + queryList.forEach(itemOne => { + if (itemOne.default_package != null) { + itemOne.default_package.create_date = this.dateFormatTotext(itemOne + .default_package.expire_date); + } + }) + //下拉更新时,查询结果集 + //触底更新时,当前列表+查询结果集 + let newList = this.LoupanList.concat(queryList) + this.LoupanList = newList + //console.log("新设备数据:" + this.LoupanList) + //分页对象处理 + this.queryPage.count = result.count; + this.queryPage.per_page = result.per_page; + // 停止当前页面下拉刷新 + if (this.dataLoadState.pullDownRefresh) uni.stopPullDownRefresh(); + // 数据加载状态处理 false + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + uni.hideLoading(); + // uni.showToast({ title: '加载成功', icon: 'none' }); + }).catch(err => { + // 停止当前页面下拉刷新 + if (this.dataLoadState.pullDownRefresh) uni.stopPullDownRefresh(); + // 数据加载状态处理 false + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + uni.hideLoading(); + }); + }, + + //获取设备顶部数量 + getDquipmentTopList() { + //console.log("顶部数据进来") + logoservice.MachineToplist(this.topQueryPage).then(result => { + this.equipmentData = result.data + //console.log("顶部数据:"+result.data) + //total: 22 + }).catch(err => { + + }); + }, + + //点击选中店铺 + store(item) { + let status = -1; + if (item.edition != null && item.edition.mark == 'standard') { + status = 0; + } else if (item.edition != null && item.edition.mark == 'unlimited') { + status = 1; + } + if (item.is_open_manage == 1) { + uni.navigateTo({ + url: '../mall/eq-details-new?id=' + item.id + "&printType=" + status +"&isShowBack=true", + }); + } else { + uni.navigateTo({ + url: '../mall/eq-details?id=' + item.id + "&printType=" + status, + }); + } + /* uni.navigateTo({ + url: '../mall/eq-details-new?id=' + item.id + "&printType=" + status +"&isShowBack=true", + }); */ + }, + + //返回顶部 + totop() { + uni.pageScrollTo({ + scrollTop: 0, + duration: 300 + }); + this.totopstatus = false + }, + + touchEnd(e) { + if (e.mp.changedTouches[0].pageY > 1200) { + this.totopstatus = true + } else { + this.totopstatus = false + } + }, + + //做滚动加载使用 + loadMore() { + if (Math.ceil(this.queryPage.count / this.queryPage.per_page) < this.queryPage.page) { + return setTimeout(() => { + uni.showToast({ + title: '没有更多数据了!', + icon: 'none' + }); + }, 500); + } + this.queryPage.page = this.queryPage.page + 1; + this.loadGoodsList(Enums.DATA_DIRECTION.DOWN); + }, + + //获取天数 + getToday() { + let myDate = new Date(); + let myMonth = myDate.getMonth() + 1; + if (myMonth < 10) { + myMonth = '0' + myMonth; //补齐 + } + let mydate = myDate.getDate(); + if (myDate.getDate() < 10) { + mydate = '0' + myDate.getDate(); //补齐 + } + //this.queryPage.month = myDate.getFullYear() + '-' + myMonth; + let today = myDate.getFullYear() + '-' + myMonth + return today + }, + }, + + //下拉加载 + onPullDownRefresh() { + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + this.queryPage.page = 1; + this.queryPage.count = 0; + this.LoupanList = [] + this.loadGoodsList(Enums.DATA_DIRECTION.UP); + }, + + //上拉加载 + onReachBottom() { + if (this.LoupanList.length < 6) { + return setTimeout(() => { + uni.showToast({ + title: '没有更多数据了!', + icon: 'none' + }); + }, 500); + } + this.queryPage.page = this.queryPage.page + 1; + this.loadGoodsList(Enums.DATA_DIRECTION.DOWN); + }, + + onLoad(options) { + this.LoupanList = [] + this.queryPage.page = 1; + this.queryPage.count = 0; + if (this.$base.partner_id = -1) { + logoservice.receiveMoneyList({ + m: 'Init/getPartner' + }).then(result => { + this.agentList = result.list + result.list.forEach(item => { + if (item.id == result.p_id) { + this.$base.partner_id = item.id; + this.loadGoodsList(Enums.DATA_DIRECTION.UP); + this.getDquipmentTopList(); + } + }) + }).catch(err => { + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + } + + + uni.login({ + provider: 'weixin', + success: (res) => { + logoservice.login({ + m: 'Init/init', + code: res.code + }).then(result => { + this.$base.Userres = result //记录用户登录信息 + this.Userres_partner_id = this.$base.Userres.partner_id //总代理 + logoservice.setwixinInfo(result); + //代理标识判断开始 + if (this.$base.Userres.partner_id == 0) { + this.UserresPartnerType = 1 + } else { + if (this.$base.Userres.partner != null) { + if (this.$base.Userres.partner.level == 1) { + this.UserresPartnerType = 2 + } else if (this.$base.Userres.partner.level == 2) { + this.UserresPartnerType = 3 + } + } + } + + }).catch(err => { + uni.navigateTo({ + url: 'login', + }); + }) + }, + fail: (err) => { + console.error('授权登录失败:' + JSON.stringify(err)); + } + }); + }, + datatimeLimited(time) { + //return new Date(time.replace(/-/g, "/")).format('HH:mm:ss'); + return time; + }, + onShow() { + + } + }; +</script> + +<style lang="scss"> + page { + width: 100%; + height: 100%; + } + + .eq_list { + width: calc(100% - 60upx); + margin: 30upx 30upx 0; + /*padding: 0upx 20upx; */ + border-radius: 30upx; + background: #FFFFFF; + box-shadow: 0px 0px 20px 0px rgba(51, 51, 51, 0.1); + + .eq_list_top { + overflow: hidden; + padding: 0upx 0; + + .eq_list_top_left { + float: left; + // width: 150upx; + padding: 6upx 0upx; + font-weight: bold; + font-size: 36upx; + } + + .eq_list_top_right_fault { + float: left; + background: #E72C31; + font-size: 24upx; + padding: 8upx 25upx; + color: #FFFFFF; + border-bottom-right-radius: 30upx; + border-top-left-radius: 30upx; + } + + .eq_list_top_right_text { + width: calc(100% - 150upx); + text-align: right; + } + } + + .eq_list_ul { + display: flex; + align-items: center; + line-height: 45upx; + + .eq_list_ul_left { + width: 150upx; + } + + .eq_list_ul_right { + width: calc(100% - 150upx); + text-align: right; + } + } + } + + // 返回顶部 + .to-top { + position: fixed; + bottom: 150upx; + right: 30upx; + width: 80upx; + height: 80upx; + border-radius: 50%; + text-align: center; + line-height: 80upx; + // box-shadow: 5upx 5upx 5upx #ebeef5; + transform: rotate(-90deg); + background: #000; + opacity: 0.5; + z-index: 999; + } + + .to-top-icon { + color: #FFFFFF; + } + + /* equipment */ + .equipment { + width: 100%; + position: fixed; + top: 0; + height: 220upx; + background: #fff; + + .equipment_main { + width: 100%; + display: flex; + padding: 10px 20px; + + .equipment_main_ul { + width: calc(100% / 3); + + .equipment_main_ul_circle { + width: 110upx; + height: 110upx; + line-height: 80upx; + border-radius: 50%; + margin: auto; + + .equipment_main_ul_circle_num { + font-size: 40upx; + font-weight: 400; + text-align: center; + margin-top: 10upx; + } + } + + .equipment_main_ul_text { + font-size: 24upx; + font-weight: 400; + margin-top: 10upx; + color: #333333; + text-align: center; + + } + } + } + } +</style> \ No newline at end of file diff --git a/pages/index/head/head-home-default.vue b/pages/index/head/head-home-default.vue new file mode 100644 index 0000000..206ba13 --- /dev/null +++ b/pages/index/head/head-home-default.vue @@ -0,0 +1,117 @@ +<template> + <view :style="{ height: height + 'px', background:background}"> + <view class="head" :style="{ height: height + 'px', background:background}"> + <view class="back" @click="back" v-if="backShow" :style="{ top: top + 'px', color:color }"> + <image src="../../../static/house.png" mode="aspectFit" + style="width: 39upx; height: 39upx; margin-top: calc((32px - 39upx)/2);margin-left: auto; margin-right: auto;"></image> + </view> + <view @click="toSelectAgent()" class="title" v-if="titleShow" :style="{ top: top + 'px', color:color, 'font-size': size + 'rpx' }">{{title}} + <span class="iconfont icon-xiala" + style="font-size: 20upx; color: #99999;margin-left:15upx;"></span> + </view> + + </view> + </view> +</template> + +<script> + export default { + props: { + title: { + type: String, + default: '自定义标题' + }, + size:{ + type: String, + default: '32' + }, + color:{ + type: String, + default: '#000' + }, + titleShow: { + type: Boolean, + default: true + }, + backShow: { + type: Boolean, + default: true + }, + background:{ + type: String, + default: "linear-gradient(to right, #43e97b 0%, #38f9d7 100%)" + } + }, + data() { + return { + height :0, + top:0, + be_child:0 + } + }, + mounted() { + + }, + created() { + //设备信息 + let app = uni.getSystemInfoSync(); + //胶囊信息 + let menuButtonInfo = uni.getMenuButtonBoundingClientRect(); + this.height = app.statusBarHeight + menuButtonInfo.height + (menuButtonInfo.top - app.statusBarHeight)*2 + this.top = menuButtonInfo.top; + }, + methods: { + //选择代理商页面 + toSelectAgent(){ + uni.navigateTo({ + url: '/pages/mall/informationList', + }); + }, + + back(){ + // if(this.$base.Userres.be_child == 1){ + // uni.reLaunch({url:"/pages/index/home"}); + // } else{ + // console.log('点击头部返回') + // uni.navigateBack(); + uni.navigateTo({ + url: '/pages/mine/information', + }); + // } + } + }, + onLoad(options) { + + }, + onShow() { + this.be_child = this.$base.Userres.be_child; + } + } +</script> + +<style> +.head{ + position: fixed; + width: 750rpx; + z-index: 888; + align-items: center; +} +.title{ + position: fixed; + width: 750rpx; + text-align: center; + line-height: 32px; + height: 32px; +} +.back{ + position: fixed; + width: 81rpx; + text-align: center; + line-height: 32px; + height: 32px; + font-size: 32rpx; + font-weight: 900; + z-index: 9; + align-items: center; +} +</style> diff --git a/pages/index/head/head-machine.vue b/pages/index/head/head-machine.vue new file mode 100644 index 0000000..70cb3a5 --- /dev/null +++ b/pages/index/head/head-machine.vue @@ -0,0 +1,114 @@ +<template> + <view :style="{ height: height + 'px', background:background}"> + <view class="head" :style="{ height: height + 'px', background:background}"> + <view class="back" @click="back" :style="{ top: top + 'px', color:color }"> + <image src="../../../static/icon_all_back.png" mode="aspectFit" + style="width: 40upx; height: 40upx; margin-top: 18upx;margin-left: -20upx; margin-right: auto;"> + </image> + </view> + <view class="title" v-if="titleShow" style="margin-top: 5upx;" :style="{ top: top + 'px', color:color, 'font-size': size + 'rpx' }"> + {{title}} + </view> + </view> + </view> +</template> + +<script> + export default { + props: { + title: { + type: String, + default: '自定义标题' + }, + size: { + type: String, + default: '30' + }, + color: { + type: String, + default: '#000' + }, + titleShow: { + type: Boolean, + default: true + }, + backShow: { + type: Boolean, + default: true + }, + background: { + type: String, + default: "linear-gradient(to right, #43e97b 0%, #38f9d7 100%)" + } + }, + data() { + return { + height: 0, + top: 0, + be_child: 0 + } + }, + mounted() { + + }, + created() { + //设备信息 + let app = uni.getSystemInfoSync(); + //胶囊信息 + let menuButtonInfo = uni.getMenuButtonBoundingClientRect(); + this.height = app.statusBarHeight + menuButtonInfo.height + (menuButtonInfo.top - app.statusBarHeight) * 2 + this.top = menuButtonInfo.top; + }, + methods: { + back() { + if (this.backShow) { + uni.navigateBack(); + } else { + uni.exitMiniProgram({ + success: function() { + //console.log('退出小程序成功'); + }, + fail: function(err) { + //console.log('退出小程序失败', err); + } + }) + } + } + }, + onLoad(options) { + + }, + onShow() { + + } + } +</script> + +<style> + .head { + position: fixed; + width: 750rpx; + z-index: 888; + align-items: center; + } + + .title { + position: fixed; + width: 750rpx; + text-align: center; + line-height: 32px; + height: 32px; + } + + .back { + position: fixed; + width: 81rpx; + text-align: center; + line-height: 32px; + height: 32px; + font-size: 32rpx; + font-weight: 900; + z-index: 9; + align-items: center; + } +</style> \ No newline at end of file diff --git a/pages/index/head/head.vue b/pages/index/head/head.vue new file mode 100644 index 0000000..1d2db57 --- /dev/null +++ b/pages/index/head/head.vue @@ -0,0 +1,106 @@ +<template> + <view :style="{ height: height + 'px', background:background}"> + <view class="head" :style="{ height: height + 'px', background:background}"> + <view class="back" @click="back" v-if="backShow" :style="{ top: top + 'px', color:color }"> + <image src="../../../static/house.png" mode="aspectFit" + style="width: 39upx; height: 39upx; margin-top: calc((32px - 39upx)/2);margin-left: auto; margin-right: auto;"></image> + </view> + <view class="title" v-if="titleShow" :style="{ top: top + 'px', color:color, 'font-size': size + 'rpx' }">{{title}}</view> + </view> + </view> +</template> + +<script> + export default { + props: { + title: { + type: String, + default: '自定义标题' + }, + size:{ + type: String, + default: '32' + }, + color:{ + type: String, + default: '#000' + }, + titleShow: { + type: Boolean, + default: true + }, + backShow: { + type: Boolean, + default: true + }, + background:{ + type: String, + default: "linear-gradient(to right, #43e97b 0%, #38f9d7 100%)" + } + }, + data() { + return { + height :0, + top:0, + be_child:0 + } + }, + mounted() { + + }, + created() { + //设备信息 + let app = uni.getSystemInfoSync(); + //胶囊信息 + let menuButtonInfo = uni.getMenuButtonBoundingClientRect(); + this.height = app.statusBarHeight + menuButtonInfo.height + (menuButtonInfo.top - app.statusBarHeight)*2 + this.top = menuButtonInfo.top; + }, + methods: { + back(){ + // if(this.$base.Userres.be_child == 1){ + // uni.reLaunch({url:"/pages/index/home"}); + // } else{ + // console.log('点击头部返回') + // uni.navigateBack(); + uni.navigateTo({ + url: '/pages/mine/information', + }); + // } + } + }, + onLoad(options) { + + }, + onShow() { + this.be_child = this.$base.Userres.be_child; + } + } +</script> + +<style> +.head{ + position: fixed; + width: 750rpx; + z-index: 888; + align-items: center; +} +.title{ + position: fixed; + width: 750rpx; + text-align: center; + line-height: 32px; + height: 32px; +} +.back{ + position: fixed; + width: 81rpx; + text-align: center; + line-height: 32px; + height: 32px; + font-size: 32rpx; + font-weight: 900; + z-index: 9; + align-items: center; +} +</style> diff --git a/pages/index/home.vue b/pages/index/home.vue new file mode 100644 index 0000000..03a6d8a --- /dev/null +++ b/pages/index/home.vue @@ -0,0 +1,1320 @@ +<template> + <view class="full-width content-color" style="background: #fff; width: 100%; position: relative;height: 100%;"> + <!-- 自定义头部 --> + <myhead :title="titleName" :color="'#000'" :titleShow="true" :backShow="true" :background="'#F8F8F8'"></myhead> + + <view class="home" > + <!-- 首页头部开始开始 --> + <view style="display:flex; flex-direction: column;width: 100%; + height: 370upx;"> + <view + style="width: 100%;display: flex; flex-direction:row;background: #44CF7C;; height: 300upx; padding-top: 40upx;"> + <view + style="display: flex; flex-direction:column; width: calc(100% / 2);color: #fff; font-size: 28upx; margin-left: 50upx;"> + <view style="font-size: 34upx;">{{ LoupanList!=null&&LoupanList.todayOrderIncome[0]!=null?LoupanList.todayOrderIncome[0].order_num:"0"}} + </view> + <view style="margin-top: 10upx;">今日订单(笔)</view> + <view style="font-size: 34upx;margin-top: 40upx;"> + {{LoupanList!=null&&LoupanList.yesterdayOrderIncome[0]!=null?LoupanList.yesterdayOrderIncome[0].order_num:"0"}} + </view> + <view style="margin-top: 10upx;">昨日订单(笔)</view> + </view> + <view + style="display: flex; flex-direction:column; width: calc(100% / 2);color: #fff; font-size: 28upx;margin-left: 50upx;"> + <view style="font-size: 34upx;"> + {{LoupanList!=null&&LoupanList.todayOrderIncome[0]!=null?LoupanList.todayOrderIncome[0].order_valid:"0"}} + </view> + <view style="margin-top: 10upx;">今日有效(笔)</view> + <view style="font-size: 34upx;margin-top: 40upx;"> + {{LoupanList!=null&&LoupanList.yesterdayOrderIncome[0]!=null?LoupanList.yesterdayOrderIncome[0].order_valid:"0"}} + </view> + <view style="margin-top: 10upx;">昨日有效(笔)</view> + </view> + <label class="fa fa-angle-right" + style="color: #fff; font-size: 40upx; width:6%;height: 80upx;padding-left: 5upx; margin-top:100upx" + @click="toProfitPage()"></label> + </view> + </view> + <!-- 首页头部开始结束 --> + + <!-- 指标趋势 开始--> + <view class="equipment"> + <view style="display: flex; align-items: center; padding: 0upx 45upx;"> + <view style="font-size: 40upx; font-weight: 500; color: #333333; padding: 20upx 0;">指标趋势</view> + <view style="margin-left: auto; display: flex; font-size: 26upx;"> + <view @click="getsevendate(-6)" :style="{'color': seven ? '#57BE6A':''}" + style="font-size: 26upx;padding: 20upx 0;">近7日</view> + <view @click="getthirtydate(-30)" :style="{'color': thirty ? '#57BE6A':''}" + style="font-size: 26upx; margin-left: 20upx;padding: 20upx 0;">近30日</view> + <view @click="datatogglePopup('target')" :style="{'color': (seven || thirty) ? '':'#57BE6A'}" + style="font-size: 26upx; margin-left: 20upx;padding: 20upx 0;"> + 自定义<span :style="{'color': (seven || thirty) ? '':'#57BE6A'}" class="iconfont icon-xiala" + style="margin-left: 5upx; font-size: 20upx; color: #333333;"></span> + </view> + </view> + </view> + <view style="padding: 20upx 45upx;"> + <!-- 代理 --> + <view v-if="Userres_partner_id == 0" + style="display: flex;align-items: center; margin-bottom: 30upx;"> + <view style="font-size: 26upx;">代理</view> + <view @click="clickAgent" + style="font-size: 26upx; color:#FFFFFF; background:#43CF7C; padding: 5upx 25upx; margin-left: 20upx; border-radius: 40upx;"> + {{queryPage.partner_name == null ? '全部' : queryPage.partner_name}} + <span class="iconfont icon-xiala" + style="margin-left: 5upx; font-size: 20upx; color: #FFFFFF;"></span> + </view> + </view> + <view style="display: flex;align-items: center; margin-bottom: 30upx;"> + <view style="font-size: 26upx;">设备</view> + <view @click="machinetogglePopup" + style="font-size: 26upx; color:#FFFFFF; background:#43CF7C; padding: 5upx 25upx; margin-left: 20upx; border-radius: 40upx;"> + {{queryPage.machine_id == null ? '全部' : queryPage.machine_id}} + <span class="iconfont icon-xiala" + style="margin-left: 5upx; font-size: 20upx; color: #FFFFFF;"></span> + </view> + </view> + <view style="display: flex;align-items: center;"> + <view style="font-size: 26upx;">指标</view> + <view @click="target('order')" :class="queryPage.table == 'order' ? 'targetgreen':''" + style="font-size: 26upx; color:#FFFFFF; background:#999999; padding: 5upx 25upx; margin-left: 20upx; border-radius: 40upx;"> + 订单</view> + <view @click="target('order_valid')" + :class="queryPage.table == 'order_valid' ? 'targetgreen':''" + style="font-size: 26upx; color:#FFFFFF; background:#999999; padding: 5upx 25upx; margin-left: 20upx; border-radius: 40upx;"> + 有效</view> + </view> + </view> + <!-- 指标趋势结束--> + + + <!-- 折线图 开始--> + <view class="qiun-columns"> + <view class="qiun-charts" style="position: relative;"> + <image :class="[imgSrcstate ? 'imgSrcdisplay':'']" :src="imgSrc" style="width: 750upx;height: 500upx; + position: absolute;z-index: -1; width: 100%; top: 0; left: 0;" @click="imgSrcstate = false"></image> + <!-- :class="['charts',imgSrcstate ? 'imgSrcstate':'']" --> + <canvas :class="['charts',imgSrcstate ? 'imgSrcstate':'']" canvas-id="canvaLineA" + id="canvaLineA" disable-scroll=true @touchstart="touchLineA" @touchmove="moveLineA" + @touchend="touchEndLineA"></canvas> + </view> + </view> + + <!-- 折线图 结束--> + + <!--设备销量开始开始 --> + <view v-if="AllDeviceStatisticsList !=null && AllDeviceStatisticsList.length > 0" + style="width: 100%; padding-bottom: 10upx; margin-bottom: 10upx;"> + <view style="display: flex; align-items: center; padding: 10upx 35upx;"> + <view style="font-size: 40upx; font-weight: 500; color: #333333; padding: 30upx 0;">我的设备</view> + <view style="margin-left: auto; display: flex; font-size: 26upx;"> + <view @click="getdeviceonedate(-1)" :style="{'color': devicegoodone ? '#57BE6A':''}" + style="font-size: 26upx; margin-left: 20upx; padding: 20upx 0;">昨天</view> + <view @click="getdevicesevendate(-6)" :style="{'color': devicegoodseven ? '#57BE6A':''}" + style="font-size: 26upx; margin-left: 20upx; padding: 20upx 0;">近7日</view> + <view @click="getdevicethirtydate(-30)" :style="{'color': devicegoodthirty ? '#57BE6A':''}" + style="font-size: 26upx; margin-left: 20upx;padding: 20upx 0;">近30日</view> + </view> + </view> + <view style=" align-items: center; + display: flex; text-align: center; color: #FFFFFF; font-size: 24upx; position: absolute; + width:calc(100% - 80upx); height: 85upx;line-height: 85upx; margin-left:40upx;background: #57BE6A"> + <view style="width:33%;height:100%;color: #FFFFFF;border-right:1upx solid #D5D5D5;">设备编号</view> + <view style="width:33%;color: #FFFFFF;border-right:1upx solid #D5D5D5;">订单</view> + <view style="width:33%;color: #FFFFFF;">有效订单</view> + </view> + <scroll-view + style="margin-top: 86upx; width:calc(100% - 80upx); background: #F8F8F8; margin-left:40upx;"> + <!-- height: 65upx;line-height: 65upx; --> + <view v-for="(item, index) in AllDeviceStatisticsList" :key="index" + style="display: flex; text-align: center; font-size: 24upx; text-align: center;border-bottom:1upx solid #FFFFFF; flex-direction: column;"> + <view + style="width: 100%; display: flex; flex-direction: row; height:60upx;height: 60upx;line-height:60upx;align-items: center;"> + <view style="width: 33%;border-right: 1upx solid #FFFFFF;font-size: 20upx; "> + {{item.id}} + </view> + <view style="width: 33%;border-right: 1upx solid #FFFFFF;font-size: 20upx; "> + {{item.order_count}} + </view> + <view style="width: 33%; color: #44CF7C; font-size: 20upx;"> + {{item.order_valid}} + </view> + </view> + </view> + </scroll-view> + </view> + <!--设备销量开始结束--> + + + <!--本月商品销量榜单 --> + <view style="width: 100%; padding-bottom: 40upx; margin-bottom: 40upx;"> + <view style="display: flex; align-items: center; padding: 0upx 30upx"> + <view style="font-size: 40upx; font-weight: 500; color: #333333; padding: 30upx 0;">商品销量</view> + <view style="margin-left: auto; display: flex; font-size: 26upx;margin-right: 10upx;"> + <!-- <view @click="getgoododate(0)" :style="{'color': goodo ? '#57BE6A':''}" + style="font-size: 26upx;padding: 20upx 0;">今天</view> --> + <view @click="getgoodonedate(-1)" :style="{'color': goodone ? '#57BE6A':''}" + style="font-size: 26upx; margin-left: 20upx; padding: 20upx 0;">昨天</view> + <view @click="getgoodsevendate(-6)" :style="{'color': goodseven ? '#57BE6A':''}" + style="font-size: 26upx; margin-left: 20upx; padding: 20upx 0;">近7日</view> + <view @click="getgoodthirtydate(-30)" :style="{'color': goodthirty ? '#57BE6A':''}" + style="font-size: 26upx; margin-left: 20upx;padding: 20upx 0;">近30日</view> + </view> + </view> + <view v-if="thisMonthGoodsSizeRank.length > 0"> + <view class='topBox' v-for="(item, index) in thisMonthGoodsSizeRank" :key="index" + @click="LiquidationGoodSize(item)"> + <view class='topLittleBOX-1' style="width: 240upx;">{{item.goods_name}}</view> + <view class='topLittleBOX-2' style="width: calc(100% - 240upx);"> + <view class='row-1' :style="{width: item.row2 +'px;max-width:90%'}"></view> + <view class='rowText'>{{item.count}}</view> + </view> + </view> + </view> + <view v-else style="text-align: center; line-height: 60upx;"> + 暂无商品销量数据 + </view> + </view> + </view> + <!--本月商品销量榜单结束 --> + </view> + + <!-- 自定义底部 --> + <foot action="0" :partnerId="Userres_partner_id"></foot> + + <!-- 设备弹框 --> + <uni-popup ref="machineshowshare" :type="'bottom'" @change="change"> + <view class="uni-share" style="width: 100%; margin: auto;"> + <view style="background: #F9F9F9;width: 100%;border-bottom: 1upx solid #00000000;"> + <view style="width: 100%;border-bottom: 1upx solid #E9E7ED; height:100upx; + text-align: center;line-height: 100upx; font-size: 26upx; font-weight: 500;"> + 选择设备类型 + </view> + <scroll-view scroll-y style="margin: auto; height: 500upx; overflow: hidden; overflow-y: scroll;"> + <view style="width: calc(100% - 40upx); margin:20upx auto; overflow: hidden;"> + <view v-for="(item, index) in Machinelist" :key="index" @click="selectmachine(item)" + :class="queryPage.machine_id == item.machine_id ? 'green':''" + style="width: calc(33% - 20upx);margin:10upx; float: left; background: #ffffff;height: 60px; border-radius: 5upx; font-size: 26upx; text-align: center;line-height: 60px;"> + {{item.machine_id == null ? '全部' : item.machine_id}} + </view> + </view> + </scroll-view> + </view> + <view class="uni-share-btn" @click="cancel('share')">取消</view> + </view> + </uni-popup> + + <!-- 自定义日期 --> + <uni-popup ref="datashowshare" :type="'center'" @change="change" + style="position: relative; z-index: 999999999;"> + <view class="uni-share" style="width: 700upx; margin: auto;"> + <view style="background: #F9F9F9;width: 100%;border-bottom: 1upx solid #00000000;"> + <view style="width: 100%;border-bottom: 1upx solid #E9E7ED; height:100upx; + text-align: center;line-height: 100upx; font-size: 26upx; font-weight: 500;"> + 自定义日期 + </view> + <view style="margin:40upx; display: flex; align-items: center;justify-content: center;"> + <view style="width: calc(50% - 30upx);"> + <picker mode="date" :value="queryPage.map_start_time" start="2000-01-01" + :end="queryPage.map_end_time" @change="starttimeChange"> + <view + style="font-size: 24upx; background:#F3F3F3; padding: 20upx 25upx; border-radius: 10upx; text-align: center;"> + {{queryPage.map_start_time ? queryPage.map_start_time : '开始时间'}} + </view> + </picker> + </view> + <view style="font-size: 24upx; width: 60upx; text-align: center;">至</view> + <view style="width: calc(50% - 30upx);"> + <picker mode="date" :value="queryPage.map_end_time" :start="queryPage.map_start_time" + :end="queryPage.map_end_time" @change="endtimeChange"> + + <view + style="font-size: 24upx; background:#F3F3F3; padding: 20upx 25upx; border-radius: 10upx; text-align: center;"> + {{queryPage.map_end_time ? queryPage.map_end_time : '结束时间'}} + </view> + </picker> + </view> + </view> + <view @click="setdata" style="width: calc(100% - 80upx); margin:0 auto 40upx; height: 90upx; border-radius: 10upx; + line-height: 90upx; font-size: 26upx; text-align: center; color: #FFFFFF; background: #57BE6A;">确定</view> + </view> + </view> + </uni-popup> + </view> + + +</template> + +<script> + import updata from '@/util/updata.js'; //版本更新 + import foot from '../../components/foot.vue'; // 自定义底部 + import logoservice from '@/service/logoservice.js'; + import myhead from './head/head-home-default.vue'; + //一款可以让数字跑起来的组件 + import digitJump from '../../components/zhihuai-DigitJump/zhihuai-DigitJump.vue' + //折线图 + import uCharts from '../../js_sdk/u-charts/u-charts.js'; + //底部弹框 + import uniPopup from '../index/common/uni-popup/uni-popup.vue' + var _self; + var canvaLineA = null; + export default { + components: { + foot, + myhead, + digitJump, + uniPopup + }, + computed: {}, + data() { + return { + long: false, + queryPage: { + m: 'Report/index', + table: 'order', + map_start_time: null, //趋势开始时间 + map_end_time: null, //趋势结束时间 + goods_start_time: null, //商品销量开始时间 + goods_end_time: null, //商品销量结束时间 + machine_start_time: null, //设备数量开始时间 + machine_end_time: null, //设备数量结束时间 + }, + LoupanList: [], + thisMonthOrderIncomeRank: [], + thisMonthGoodsSizeRank: [], + + goodsItem: [], //全部商品类型数据 + Machinelist: [], //全部设备类型数据 + + AllDeviceStatisticsList: [], //设备代理集合 + + thirty: null, + seven: true, + + equipmento: null, + equipmentone: true, + equipmentseven: null, + equipmentthirty: null, + + goodo: null, + goodone: true, + goodseven: null, + goodthirty: null, + + devicegoodone: true, + devicegoodseven: null, + devicegoodthirty: null, + datatogglePopup_text: null, + + cWidth: '', + cHeight: '', + pixelRatio: 1, + enableScroll: false, + imgSrc: null, + imgSrcstate: false, //控制折线图顶层问题 + chartDataimgSrcstate: true, + chartData: { + categories: ['2012', '2013', '2014', '2015', '2016', '2017', '2018', '2019', '2020'], + series: [{ + name: '数值', + data: [70, 40, 65, 100, 44, 68, 40, 20, 190, ], + color: '#2fc25b' + }] + }, + datetext: '昨天', + datetext_good: '昨天', + device_datetext_good: '昨天', + titleName: '运营首页', + agentList: [], //代理数据 + Userres_partner_id: null, //总代理 + AgentState: '-1', + }; + }, + methods: { + + onLoadData() { + this.long = true; + }, + + + onLoadInitData() { + uni.login({ + provider: 'weixin', + success: (res) => { + logoservice.login({ + m: 'Init/init', + code: res.code + }).then(result => { + this.$base.Userres = result //记录用户登录信息 + this.Userres_partner_id = this.$base.Userres.partner_id //总代理 + uni.setStorageSync('partner_id', this.$base.Userres.partner_id) + uni.setStorageSync('openid', result.openid) + logoservice.setwixinInfo(result); + if (result.partner) { + this.titleName = result.partner.name + } + //代理标识判断开始 + if (this.Userres_partner_id == 0) { + this.UserresPartnerType == 1 + uni.reLaunch({ + url: "/pages/index/all-agent" + }) + return + } else { + if (this.$base.Userres.partner != null) { + if (this.$base.Userres.partner.level == 1) { + this.UserresPartnerType == 2 + uni.reLaunch({ + url: "/pages/index/city-agent" + }) + return + } + } + } + //代理标识判断开始结束 + this.loadGoodsList(4); + this.getMachinelist() + logoservice.receiveMoneyList({ + m: 'Init/getPartner' + }).then(result => { + this.agentList = result.list + result.list.forEach(item => { + if (item.id == result.p_id) { + this.titleName = item.name + this.queryPage.partner_id = item.id + this.$base.partner_id = this.queryPage + .partner_id; + this.queryPage.partner_name = item.name + } + }) + }).catch(err => { + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + }).catch(err => { + uni.navigateTo({ + url: 'login', + }); + }) + }, + fail: (err) => { + console.error('授权登录失败:' + JSON.stringify(err)); + } + }); + }, + + //四设五入 + formatRounding(value) { + //截取当前数据到小数点后两位 + let realVal = parseFloat(value).toFixed(2) + return realVal + }, + + //调转统计界面 + toProfitPage() { + uni.navigateTo({ + url: '/pages/mall/profit', + }); + }, + + //调转订单界面 + toOrderPage(e) { + if (e == null) { + uni.navigateTo({ + url: '/pages/mine/order', + }); + } else { + uni.navigateTo({ + url: '/pages/mine/order?day=' + e + "&proxy=1", + }); + } + }, + + + //确定时间段 + setdata(e) { + this.chartDataimgSrcstate = true + this.seven = null + this.thirty = null + this.loadGoodsList(1); + var _this = this + setTimeout(function() { //延迟一定时间执行 + _this.imgSrcstate = false + _this.$refs['datashowshare'].close(); + }, 800); + }, + + + //选择开始时间 + starttimeChange(e) { + this.queryPage.map_start_time = e.target.value; + }, + + //选择结束时间 + endtimeChange(e) { + this.queryPage.map_end_time = e.target.value + }, + + + //自定义时间段 + datatogglePopup(e) { + var _this = this + _this.imgSrcstate = true + setTimeout(function() { //延迟一定时间执行 + _this.$nextTick(() => { + _this.$refs['datashowshare'].open() + }) + }, 100); + }, + + + //指标趋势---7天 + getsevendate(e) { + this.chartDataimgSrcstate = true + this.imgSrcstate = false + this.queryPage.map_start_time = this.getDay(e) + this.queryPage.map_end_time = this.getDay(0) + this.seven = true + this.thirty = null + this.loadGoodsList(1); + }, + + //指标趋势---30天 + getthirtydate(e) { + this.chartDataimgSrcstate = true + this.imgSrcstate = false + this.queryPage.map_start_time = this.getDay(e) + this.queryPage.map_end_time = this.getDay(0) + this.seven = null + this.thirty = true + this.loadGoodsList(1); + }, + + // 商品销量----昨天 + getgoodonedate(e) { + this.datetext_good = '昨天' + this.chartDataimgSrcstate = true + this.imgSrcstate = false + this.queryPage.goods_start_time = this.getDay(e) + this.queryPage.goods_end_time = this.getDay(e) + this.goodone = true + this.goodseven = null + this.goodthirty = null + this.loadGoodsList(2); + }, + + // 商品销量----7天 + getgoodsevendate(e) { + this.datetext_good = '近7天' + this.chartDataimgSrcstate = true + this.imgSrcstate = false + this.queryPage.goods_start_time = this.getDay(e) + this.queryPage.goods_end_time = this.getDay(0) + this.goodseven = true + this.goodthirty = null + this.goodone = null + this.loadGoodsList(2); + }, + + // 商品销量----30天 + getgoodthirtydate(e) { + this.datetext_good = '近30天' + this.chartDataimgSrcstate = true + this.imgSrcstate = false + this.queryPage.goods_start_time = this.getDay(e) + this.queryPage.goods_end_time = this.getDay(0) + this.goodseven = null + this.goodthirty = true + this.goodone = null + this.loadGoodsList(2); + }, + + + //设备代理---昨天 + getdeviceonedate(e) { + this.device_datetext_good = '昨天' + this.chartDataimgSrcstate = true + this.imgSrcstate = false + this.queryPage.machine_start_time = this.getDay(e) + this.queryPage.machine_end_time = this.getDay(0) + this.devicegoodone = true + this.devicegoodseven = null + this.devicegoodthirty = null + this.loadGoodsList(3); + }, + + //设备代理---7天 + getdevicesevendate(e) { + this.device_datetext_good = '近7天' + this.chartDataimgSrcstate = true + this.imgSrcstate = false + this.queryPage.machine_start_time = this.getDay(e) + this.queryPage.machine_end_time = this.getDay(0) + this.devicegoodone = null + this.devicegoodseven = true + this.devicegoodthirty = null + this.loadGoodsList(3); + }, + + //设备代理----30天 + getdevicethirtydate(e) { + this.device_datetext_good = '近30天' + this.chartDataimgSrcstate = true + this.imgSrcstate = false + this.queryPage.machine_start_time = this.getDay(e) + this.queryPage.machine_end_time = this.getDay(0) + this.devicegoodone = null + this.devicegoodseven = null + this.devicegoodthirty = true + this.loadGoodsList(3); + }, + + //选择代理 + toAgent(item) { + logoservice.receiveMoneyList({ + p_id: item.partner_id, + m: 'Init/changePartner' + }).then(result => { + uni.reLaunch({ + url: "/pages/index/home" + }) + }).catch(err => { + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }); + }, + + //获取天数 + getDay(day) { + this.imgSrcstate = false + var today = new Date(); + var targetday_milliseconds = today.getTime() + 1000 * 60 * 60 * 24 * day; + today.setTime(targetday_milliseconds); //注意,这行是关键代码 + var tYear = today.getFullYear(); + var tMonth = today.getMonth(); + var tDate = today.getDate(); + tMonth = this.doHandleMonth(tMonth + 1); + tDate = this.doHandleMonth(tDate); + return tYear + "-" + tMonth + "-" + tDate; + }, + + doHandleMonth(month) { + var m = month; + if (month.toString().length == 1) { + m = "0" + month; + } + return m; + }, + + //指标 + target(e) { + this.chartDataimgSrcstate = true + this.queryPage.table = e + this.loadGoodsList(1); + }, + + //所属代理 + clickAgent() { + this.imgSrcstate = true + this.$nextTick(() => { + this.$refs['showshareAgent'].open() + }) + }, + + selectAgent(e) { + this.chartDataimgSrcstate = true + this.agentList.forEach(item => { + if (item.id == e.id) { + this.queryPage.partner_id = item.id + this.queryPage.partner_name = item.name + } + }) + var _this = this + setTimeout(function() { //延迟一定时间执行 + _this.imgSrcstate = false + _this.$refs['showshareAgent'].close(); + _this.loadGoodsList(1); + }, 100); + }, + + //打开设备 + machinetogglePopup() { + this.imgSrcstate = true + this.$nextTick(() => { + this.$refs['machineshowshare'].open() + }) + }, + + selectmachine(item) { + this.chartDataimgSrcstate = true + this.queryPage.machine_id = item.machine_id ? item.machine_id : null + var _this = this + setTimeout(function() { //延迟一定时间执行 + _this.imgSrcstate = false + _this.$refs['machineshowshare'].close(); + _this.loadGoodsList(1); + }, 100); + }, + + //打开商品 + togglePopup() { + this.imgSrcstate = true + this.$nextTick(() => { + this.$refs['showshare'].open() + }) + }, + + cancel(type) { + this.$refs['showshare'].close() + this.$refs['machineshowshare'].close() + this.$refs['showshareAgent'].close() + var _this = this + setTimeout(function() { //延迟一定时间执行 + _this.imgSrcstate = false + }, 100); + }, + + change(e) { + if (e.show == false) { + var _this = this + setTimeout(function() { //延迟一定时间执行 + _this.imgSrcstate = false + _this.chartDataimgSrcstate = false + }, 100); + } + }, + + refundNumorder(e) { + uni.navigateTo({ + url: '/pages/mine/Liquidation', + }); + }, + + //设备数据 + equipment_list(e) { + uni.navigateTo({ + url: '/pages/store/equipment_list?status=' + e, + }); + }, + + //本月设备收入榜单 + Liquidationmachine_id(e) { + let machine_start_time = this.queryPage.machine_start_time + let machine_end_time = this.queryPage.machine_end_time + uni.navigateTo({ + url: '../mine/order?machineid=' + e.machine_id + '&start_time=' + machine_start_time + + '&end_time=' + machine_end_time + '&datetext=' + this.datetext + }); + }, + + //本月商品销量榜单 + LiquidationGoodSize(e) { + let goods_start_time = this.queryPage.goods_start_time + let goods_end_time = this.queryPage.goods_end_time + uni.navigateTo({ + url: '/pages/mine/order?goods_name=' + e.goods_name + '&goods_specs=' + e.goods_specs + + '&start_time=' + goods_start_time + '&end_time=' + goods_end_time + + '&datetext=' + this.datetext_good + "&is_pay=1" + }); + }, + + //收益 + Liquidation(e) { + //console.log("date=" + e); + if (e == null) { + uni.navigateTo({ + url: '/pages/mine/Liquidation', + }); + } else { + uni.navigateTo({ + url: '/pages/mine/Liquidation?date=' + e + "&day=" + e, + }); + } + }, + + //获取天数 + getToday() { + let myDate = new Date(); + let myMonth = myDate.getMonth() + 1; + if (myMonth < 10) { + myMonth = '0' + myMonth; //补齐 + } + let mydate = myDate.getDate(); + if (myDate.getDate() < 10) { + mydate = '0' + myDate.getDate(); //补齐 + } + //this.queryPage.month = myDate.getFullYear() + '-' + myMonth; + let today = myDate.getFullYear() + '-' + myMonth + return today + }, + + //加载数据 + loadGoodsList(state) { + //console.log("加载前" + state) + uni.showLoading({ + title: '正在加载中...', + mask: true + }) + logoservice.Reportindex(this.queryPage).then(result => { + //console.log("加载后") + this.long = true + this.LoupanList = result + var max = 80; + var first = 0; + if (state == 3 || state == 4) { //设备 + var myMachineCountObject = this.LoupanList.myMachineCount + this.AllDeviceStatisticsList = []; + if (myMachineCountObject != null && myMachineCountObject != "") { + for (const key in myMachineCountObject) { + this.AllDeviceStatisticsList.push(myMachineCountObject[key]); + } + } + //console.log("this.AllDeviceStatisticsList="+this.AllDeviceStatisticsList) + } + if (state == 2 || state == 4) { //商品销量 + this.LoupanList.thisGoodsSizeRank.forEach((item, index) => { + if (index == 0) { + item.row2 = max; + first = parseFloat(item.count); + } else { + item.row2 = max * parseFloat(item.count / first) + if (item.row2 <= 1) { + item.row2 = 1; + } + } + //console.log("this.AllDeviceStatisticsList="+this.AllDeviceStatisticsList) + }) + this.thisMonthGoodsSizeRank = this.LoupanList.thisGoodsSizeRank + } + + //console.log("this.chartData进来"+this.chartData) + + if (state == 1 || state == 4) { + let categories = [] + let seriesdata = [] + if (this.LoupanList.mapList.length > 8) { + let number = Math.ceil(this.LoupanList.mapList.length / 8) + this.LoupanList.mapList.forEach((item, index) => { + if (index % number == 0) { + categories.push(item.day.split("-")[1] + '-' + item.day.split("-")[2]) + } else { + categories.push('') + } + seriesdata.push(item.total) + }) + } else { + this.LoupanList.mapList.forEach((item, index) => { + categories.push(item.day.split("-")[1] + '-' + item.day.split("-")[2]) + seriesdata.push(item.total) + }) + } + this.chartData.categories = categories + this.chartData.series[0].data = seriesdata; + this.cWidth = uni.upx2px(750); + this.cHeight = uni.upx2px(500); + + this.showLineA("canvaLineA", this.chartData); + } + uni.hideLoading(); + uni.stopPullDownRefresh(); + }).catch(err => { + uni.hideLoading(); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }); + }, + getGoodsAttrList() { + logoservice.MoneystatementList({ + m: "Money/orderList", + machine_id: null, + sub: 1 + }).then(result => { + this.goodsItem = result; + this.goodsItem.unshift({ + goods_id: null, + goods_name: null, + goods_specs: null, + }) + }).catch(res => { + uni.showToast({ + title: res.msg ? res.msg : '未查到商品类型选择', + icon: 'none' + }); + }); + }, + getMachinelist() { + logoservice.Machinelist({ + m: 'Machine/list', + page: 1, + per_page: 100 + }).then(result => { + let queryList = [] + result.data.forEach(item => { + queryList.push({ + machine_id: item.id + }) + }) + queryList.sort(function(a, b) { + return a.machine_id - b.machine_id + }) + // console.log(queryList); + this.Machinelist = queryList; + this.Machinelist.unshift({ + machine_id: null + }) + }).catch(res => { + uni.showToast({ + title: res.msg ? res.msg : '未查到商品类型选择', + icon: 'none' + }); + }); + }, + //折线一 + showLineA(canvasId, chartData) { + var _self = this; + canvaLineA = new uCharts({ + $this: _self, + canvasId: canvasId, //页面组件canvas-id + type: 'area', //图表类型 + fontSize: 11, + legend: { + show: false + }, + dataLabel: false, //是否在图表中显示数据标签内容值 + dataPointShape: true, //是否在图表中显示数据点图形标识 + background: '#FFFFFF', + pixelRatio: _self.pixelRatio, + categories: chartData.categories, + series: chartData.series, + animation: true, + enableScroll: _self.enableScroll, //开启图表拖拽功能 + xAxis: { + type: 'grid', + gridColor: '#F2F2F2', + gridType: 'dash', + dashLength: 4, + itemCount: 8, //x轴单屏显示数据的数量,默认为5个 + scrollShow: true, //新增是否显示滚动条,默认false + scrollAlign: 'left', //滚动条初始位置 + scrollBackgroundColor: '#F7F7FF', //默认为 #EFEBEF + scrollColor: '#DEE7F7', //默认为 #A6A6A6 + }, + yAxis: { + calibration: true, + gridType: 'dash', + gridColor: '#F2F2F2', + dashLength: 4, + splitNumber: 5, + format: (val) => { + return val.toFixed(0) + } + }, + width: _self.cWidth * _self.pixelRatio, + height: _self.cHeight * _self.pixelRatio, + padding: [20, 15, 4, 15], + extra: { + area: { + type: 'curve', + opacity: 0.2, + addLine: true, + width: 2 + } + } + }); + canvaLineA.addEventListener('renderComplete', () => { //监控图表渲染完成 + //console.log(_self.chartDataimgSrcstate) + if (_self.chartDataimgSrcstate) { + setTimeout(function() { //延迟一定时间执行 + uni.canvasToTempFilePath({ //将图表转成图片 + x: 0, + y: 0, + width: _self.cWidth * _self.pixelRatio, + height: _self.cHeight * _self.pixelRatio, + fileType: 'png', + canvasId: 'canvaLineA', + success: function(res) { + _self.imgSrc = res.tempFilePath; + _self.chartDataimgSrcstate = false + }, + fail: function(res) {} + }, _self); + }, 100); + } + }); + }, + + touchLineA(e) { + canvaLineA.scrollStart(e); + }, + + moveLineA(e) { + canvaLineA.scroll(e); + }, + + touchEndLineA(e) { + canvaLineA.scrollEnd(e); + //下面是toolTip事件,如果滚动后不需要显示,可不填写 + canvaLineA.showToolTip(e, { + format: function(item, category) { + return category + ' ' + item.name + ':' + item.data + } + }); + } + }, + + //下拉加载 + onPullDownRefresh() { + this.loadGoodsList(4); + }, + + //上拉加载 + onReachBottom() {}, + + //滑动 + onPageScroll(e) { + let st = e.scrollTop; + this.imgSrcstate = true + }, + + + onLoad(options) { + this.queryPage.map_start_time = this.getDay(-6) //趋势开始时间 + this.queryPage.map_end_time = this.getDay(0) //趋势结束时间 + this.queryPage.goods_start_time = this.getDay(-1) //商品销量开始时间 + this.queryPage.goods_end_time = this.getDay(-1) //商品销量结束时间 + this.queryPage.machine_start_time = this.getDay(-1) //设备数量开始时间 + this.queryPage.machine_end_time = this.getDay(-1) //设备数量结束时间 + }, + + + onShow() { + + + + uni.login({ + provider: 'weixin', + success: (res) => { + logoservice.login({ + m: 'Init/init', + code: res.code + }).then(result => { + this.$base.Userres = result //记录用户登录信息 + this.Userres_partner_id = this.$base.Userres.partner_id //总代理 + uni.setStorageSync('partner_id', this.$base.Userres.partner_id) + uni.setStorageSync('openid', result.openid) + logoservice.setwixinInfo(result); + + if (result.partner) { + this.titleName = result.partner.name + } + + //代理标识判断开始 + if (this.Userres_partner_id == 0) { + this.UserresPartnerType == 1 + uni.reLaunch({ + url: "/pages/index/all-agent" + }) + return + + } else { + if (this.$base.Userres.partner != null) { + if (this.$base.Userres.partner.level == 1) { + this.UserresPartnerType == 2 + uni.reLaunch({ + url: "/pages/index/city-agent" + }) + return + + } + } + } + //代理标识判断开始结束 + + this.loadGoodsList(4); + this.getMachinelist() + logoservice.receiveMoneyList({ + m: 'Init/getPartner' + }).then(result => { + this.agentList = result.list + result.list.forEach(item => { + if (item.id == result.p_id) { + this.titleName = item.name + this.queryPage.partner_id = item.id + this.$base.partner_id = this.queryPage.partner_id; + this.queryPage.partner_name = item.name + } + }) + }).catch(err => { + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + }).catch(err => { + uni.navigateTo({ + url: 'login', + }); + }) + }, + fail: (err) => { + console.error('授权登录失败:' + JSON.stringify(err)); + } + }); + }, + onUnload() { + let pages = getCurrentPages(); + } + }; +</script> + +<style lang="scss"> + page { + background: #FFFFFF !important; + } + + .qiun-columns { + display: flex; + flex-direction: column !important; + } + + .qiun-charts { + width: 750upx; + height: 500upx; + background-color: #FFFFFF; + } + + .charts { + width: 750upx; + height: 500upx; + background-color: #FFFFFF; + } + + .imgSrcstate { + position: absolute; + width: 100%; + right: -900px; + top: -600px; + display: none; + } + + .imgSrcdisplay { + z-index: 0 !important; + } + + /* 底部分享 */ + .uni-share { + display: flex; + flex-direction: column; + } + + .uni-share-btn { + height: 90upx; + line-height: 90upx; + font-size: 26upx; + text-align: center; + background: #FFFFFF; + } + + .green { + background-color: #4FB36B !important; + color: #FFFFFF; + } + + .targetgreen { + color: #FFFFFF !important; + background: #43CF7C !important; + } + + /*样式的width和height一定要与定义的cWidth和cHeight相对应*/ + .qiun-charts { + width: 750upx; + height: 500upx; + background-color: #FFFFFF; + } + + .charts { + width: 750upx; + height: 500upx; + background-color: #FFFFFF; + } + + .home { + width: 100%; + padding-bottom: 60upx; + + /*今日 today */ + .today { + width: 100%; + height: 307upx; + background: #43CF7C; + display: flex; + align-items: center; + justify-content: center; + + .today_ul { + width: 50%; + + .today_ul_div { + margin-left: 20upx; + color: #FFFFFF; + + .today_money { + font-size: 35upx; + + + font-weight: 400; + margin-bottom: 10upx; + + } + + .today_profit_text { + font-size: 22upx; + font-weight: 400; + line-height: 20upx; + } + + .today_order_money { + // margin-top: 96upx; + font-size: 50upx; + font-weight: 400; + margin-bottom: 10upx; + } + + .today_order_num { + // margin-top: 37upx; + font-size: 36upx; + font-weight: bold; + } + } + } + } + + /* yesterday */ + .yesterday { + width: 100%; + height: 327upx; + display: flex; + + border-bottom: 1px solid rgba(178, 178, 178, 0.2); + + .yesterday_div { + width: 100%/4; + margin-left: 45upx; + color: #333333; + text-align: center; + + .yesterday_profit_money { + margin-top: 36upx; + font-size: 36upx; + font-weight: bold; + } + + .yesterday_profit_text { + font-size: 20upx; + font-weight: 400; + line-height: 30upx; + } + } + } + + /* equipment */ + .equipment { + width: 100%; + + .equipment_title { + font-size: 40upx; + font-weight: 500; + color: #333333; + margin: 50upx 0 40upx 45upx; + } + + .equipment_main { + width: 100%; + display: flex; + + .equipment_main_ul { + width: calc(100% / 2); + + .equipment_main_ul_circle { + width: 120upx; + height: 120upx; + border-radius: 50%; + margin: auto; + + .equipment_main_ul_circle_num { + font-size: 40upx; + font-weight: 400; + text-align: center; + line-height: 120upx; + } + } + + .equipment_main_ul_text { + font-size: 28upx; + font-weight: 400; + margin-top: 40upx; + color: #333333; + text-align: center; + } + } + } + } + + /*本月机器榜单 */ + .machine_title { + font-size: 40upx; + font-weight: 500; + color: #333333; + margin: 80upx 0 70upx 45upx; + } + + .topBox { + width: calc(100% - 90upx); + margin: 0 auto 40upx; + display: flex; + flex-direction: row; + align-items: center; + } + + .topLittleBOX-1 { + font-size: 24upx; + width: 120upx; + color: #888888; + overflow: text-align; + } + + .topLittleBOX-2 { + padding-left: 20upx; + padding-top: auto; + padding-bottom: auto; + display: flex; + // height: 50upx; + // line-height:50upx; + vertical-align: middle; + flex-direction: row; + align-items: center; + width: calc(100% - 120upx); + } + + .row-1 { + height: 30upx; + background-color: #43CF7C; + border-radius: 20upx; + width: 0upx; + transition: width 1.5s linear; + } + + .rowText { + margin-left: 10upx; + font-size: 30upx; + color: #4c4c4c; + } + + } +</style> \ No newline at end of file diff --git a/pages/index/login.vue b/pages/index/login.vue new file mode 100644 index 0000000..9fa80a2 --- /dev/null +++ b/pages/index/login.vue @@ -0,0 +1,276 @@ +<template> + <view class="content"> + <view class="loader"> + </view> + <view class="logoimg"> + <image class="logo" src="/static/logo.jpg" style="background: #FFFFFF;"></image> + </view> + <view class="text-area"> + <text class="title">{{title}}</text> + </view> + <input type="text" placeholder="请输入您的管理员账号" clearable focus class="inputAcc" v-model="phone" /> + <input type="password" displayable placeholder="请输入登录密码" class="input" v-model="password" /> + <button class="loginBtn" @tap="bindLogin" hover-class="hover-class-bg">登录</button> + <image src="../../static/bg.png" mode="" + style="position: absolute; left: 0; bottom: 0; z-index: -1; width: 464upx; height: 590upx;"></image> + </view> +</template> + +<script> + import logoservice from '@/service/logoservice.js'; + export default { + components: { + + }, + data() { + return { + title: 'ColorPark', + openid: null, + phone: '', + password: '', + unionId: '', + isMachine: 0, + machine_id: "" // 设备Id + } + }, + methods: { + bindLogin() { + uni.showLoading({ + title: '正在登录中...' + }); + if (!this.phone) { + uni.showToast({ + icon: 'none', + title: '请输入您的管理员账号' + }); + return; + } + if (!this.password) { + uni.showToast({ + icon: 'none', + title: '请输入登录密码' + }); + return; + } + const data = { + m: 'Init/bindWx', + openid: this.openid, + phone: this.phone, + pass: this.password, + unionId: this.unionId + }; + if (this.openid == undefined || this.openid == null) { + data.openid = uni.getStorageSync('openid') + } + logoservice.bindWx(data).then(result => { + uni.hideLoading(); + if (result.openid) { + uni.setStorageSync('openid', result.openid) + } + uni.setStorageSync('openid', result.openid) + logoservice.setwixinInfo(result); + uni.setStorageSync('token', result.token) + + uni.showToast({ + icon: 'none', + title: '登录成功' + }); + + var that = this + if (this.machine_id != null && this.machine_id != "") { + setTimeout(function() { + uni.reLaunch({ + url: '../mall/eq-details-new?id=' + that.machine_id + + "&isShowBack=false" + }); + }, 1000) //延 + + } else { + + uni.reLaunch({ + url: 'mall', + }); + } + }).catch(err => { + uni.hideLoading(); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + }, + }, + onReady() { + + }, + + onLoad(options) { + if (options.machine_id) { + this.machine_id = options.machine_id + } + }, + + onShow() { + uni.login({ + provider: 'weixin', + success: (res) => { + console.log(res) + logoservice.login({ + m: 'Init/init', + code: res.code + }).then(result => { + //console.log(result) + if (result.openid) { + uni.setStorageSync('openid', result.openid) + } + uni.setStorageSync('openid', result.openid) + logoservice.setwixinInfo(result); + uni.setStorageSync('token', result.token) + this.openid = result.openid + this.unionId = result.unionId + //console.log(logoservice.getwixinInfo()) + }).catch(err => { + console.log(err.data) + // console.log(err) + if (err.data.openid) { + uni.setStorageSync('openid', err.data.openid) + } + this.openid = err.data.openid + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + }, + fail: (err) => { + console.error('授权登录失败:' + JSON.stringify(err)); + } + }); + } + } +</script> + +<style lang="scss"> + /*每个页面公共css */ + page { + min-height: 100%; + display: flex; + font-size: 16px; + } + + page { + width: 100%; + height: 100%; + display: block; + } + + page { + background-color: #fff; + } + + .content { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + } + + .input { + font-size: 28upx; + margin: 20% 0rem; + position: absolute; + top: 600rpx; + height: 70upx; + width: 50%; + text-align: center; + // border-bottom: 1px #007AFF solid; + border-bottom: 1px #14141A solid; + border-radius: 10upx; + } + + .inputAcc { + font-size: 28upx; + margin: 20% 0rem; + position: absolute; + top: 470rpx; + height: 70upx; + width: 50%; + text-align: center; + // border-bottom: 1px #007AFF solid; + border-bottom: 1px #14141A solid; + border-radius: 10upx; + + } + + .loginBtn { + font-size: 34upx; + background: #14141A !important; + // background: linear-gradient(to right, #4bb0ff, #6149f6); + border-radius: 200rpx; + width: 200rpx; + position: absolute; + color: white; + bottom: 150rpx; + } + + .loginBtn:active { + // transform: translateY(4upx); + } + + .logoimg { + position: absolute; + top: 155rpx; + z-index: 10; + } + + .logo { + height: 200rpx; + width: 200rpx; + border-radius: 100upx; + } + + .text-area { + position: absolute; + top: 400rpx; + display: flex; + justify-content: center; + } + + .title { + font-size: 50rpx; + color: #14141A; + } + + .loader { + z-index: 1; + position: absolute; + top: 130rpx; + width: 250rpx; + height: 250rpx; + border-radius: 50%; + background: linear-gradient(#f07e6e, #84cdfa, #5ad1cd); + animation: animate 1.2s linear infinite; + } + + @keyframes animate { + 0% { + transform: rotate(0deg); + } + + 100% { + transform: rotate(360deg); + } + } + + .loader:after { + content: ''; + position: absolute; + top: 10px; + left: 10px; + right: 10px; + bottom: 10px; + background: #f1f1f1; + border: solid white 10px; + border-radius: 50%; + } +</style> \ No newline at end of file diff --git a/pages/index/mall.vue b/pages/index/mall.vue new file mode 100644 index 0000000..733c822 --- /dev/null +++ b/pages/index/mall.vue @@ -0,0 +1,264 @@ +<template> + <view class="full-width content-color full-height"> + <!-- 自定义头部 --> + <myhead :title="'门店管理'" :color="'#000'" :titleShow="true" :backShow="true" :background="'#F8F8F8'"></myhead> + <!-- 动态数据 --> + <view scroll-y class="full-width full-height" @touchend="touchEnd" v-if="long"> + <view style="padding-top: 20upx; padding-bottom: 120upx;"> + <!-- 动态数据完 --> + <view @click="couponStatusone()" + style="width: 90%; margin:0 auto 40upx; border-radius: 10upx; height:280upx; line-height: 280upx; overflow: hidden;"> + <view class="iconfont icon-21 cu-btn shadow cuIcon" + style="background: #FFFFFF; text-align: center; font-size: 80upx;"></view> + </view> + <!-- 数据 --> + <view v-for="(item, index) in LoupanList" :key="index" @click="store(item)" + @touchstart.preven="touchstart(item,index)" @touchend.prevent="touchend" + style="width: 90%; margin:0 auto 40upx; border-radius: 10upx; background: #FFFFFF; overflow: hidden;"> + <img :src="item.image + '?x-oss-process=image/resize,lfit,w_640'" + style="width: 100%; height:280upx; object-fit:cover;" mode="aspectFill"> + <view class="uni-center" style="font-size: 34upx; color: #343434; margin: 19upx 0;"> + {{item.short_name}}</view> + <!-- <view class="uni-center" style="font-size: 26upx; color: #888888;">电话: {{item.phone}}</view> --> + <view class="uni-center" style="font-size: 26upx; color: #888888;">所属代理: {{item.partner_name}} + </view> + <view class="uni-center" style="font-size: 26upx; color: #888888; margin: 11upx 15upx 29upx 15upx;"> + <view v-html="item.address"></view> + </view> + </view> + </view> + </view> + <!-- 返回顶部 --> + <view v-if="totopstatus" class="to-top content-color" @click="totop()"> + <view class="fa fa-angle-right to-top-icon"></view> + </view> + <!-- 自定义底部 --> + <foot action="1" :partnerId="Userres_partner_id" :partnerType= "UserresPartnerType"></foot> + </view> +</template> + +<script> + import uniIcon from '@/components/uni-icon/uni-icon.vue'; + import Enums from '@/util/Enums'; + import Env from '@/util/Env.js'; + import updata from '@/util/updata.js' + //自定义底部 + import foot from '../../components/foot.vue'; + import logoservice from '@/service/logoservice.js'; + import myhead from './head/head.vue'; + export default { + components: { + uniIcon, + foot, + myhead + }, + computed: {}, + data() { + return { + long: false, + LoupanList: [], //数据 + //返回顶部 + totopstatus: false, + //判断是否为长按 + nav: true, + Userres_partner_id: null, //总代理 + UserresPartnerType:4, + }; + }, + methods: { + couponStatusone() { + if (this.$base.Userres.be_child == 1) return; + uni.navigateTo({ + url: "/pages/store/shopdetails" + }) + }, + touchstart(item, index) { + if (this.$base.Userres.be_child == 1) return; + let that = this; + that.nav = true + clearInterval(this.Loop); //再次清空定时器,防止重复注册定时器 + this.Loop = setTimeout(function() { + that.nav = false + //console.log(that.nav) + uni.showModal({ + title: '删除', + content: '确认要删除当前门店吗?', + confirmText: '删除', + confirmColor: '#ff3b32', + success: async function(res) { + if (res.confirm) { + that.LoupanList.splice(index, 1) + logoservice.shopdel({ + ids: item.id, + m: 'Shop/del' + }).then(result => { + uni.showToast({ + icon: "success", + title: '删除成功!', + duration: 2000 + }); + }).catch(err => { + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }); + } else if (res.cancel) { + console.log('用户点击取消') + } + } + }); + }.bind(this), 500); + }, + touchend() { + clearInterval(this.Loop); + }, + store(item) { + if (this.$base.Userres.be_child == 1) return; + if (this.nav) { + uni.navigateTo({ + url: '../store/shopdetails?start=2&id=' + item.id, + }); + } + }, + //返回顶部 + totop() { + uni.pageScrollTo({ + scrollTop: 0, + duration: 300 + }); + this.totopstatus = false + }, + touchEnd(e) { + if (e.mp.changedTouches[0].pageY > 1200) { + this.totopstatus = true + } else { + this.totopstatus = false + } + }, + datalist() { + uni.showLoading({ + title: '正在加载中...' + }) + logoservice.shoplist({ + m: 'Shop/list' + }).then(result => { + this.long = true + this.LoupanList = result + uni.hideLoading(); + uni.stopPullDownRefresh(); + }).catch(err => { + uni.showToast({ + title: err.msg, + icon: 'none' + }); + uni.hideLoading(); + uni.stopPullDownRefresh(); + }) + }, + }, + //下拉加载 + onPullDownRefresh() { + clearInterval(this.Loop); + uni.showLoading({ + title: '正在加载中...' + }) + this.datalist() + }, + //上拉加载 + onReachBottom() { + uni.showToast({ + title: '没有更多数据了!', + icon: 'none' + }); + }, + onLoad(options) { + uni.showLoading({ + title: '正在加载中...' + }) + uni.login({ + provider: 'weixin', + success: (res) => { + logoservice.login({ + m: 'Init/init', + code: res.code + }).then(result => { + this.$base.Userres = result //记录用户登录信息 + uni.setStorageSync('openid', result.openid) + logoservice.setwixinInfo(result); + //代理标识判断开始 + if (this.$base.Userres.partner_id == 0) { + this.UserresPartnerType = 1 + //console.log("UserresPartnerType进来"+_self.UserresPartnerType); + } else { + if (this.$base.Userres.partner != null) { + if (this.$base.Userres.partner.level == 1) { + this.UserresPartnerType = 2 + } else if (this.$base.Userres.partner.level == 2) { + this.UserresPartnerType = 3 + } + } + } + this.datalist() + }).catch(err => { + uni.navigateTo({ + url: 'login', + }); + }) + }, + fail: (err) => { + console.error('授权登录失败:' + JSON.stringify(err)); + } + }); + }, + onShow() { + this.datalist(); + //console.log('onShow') + //console.log(this.$base.Userres) + // uni.login({ + // provider: 'weixin', + // success: (res) => { + // logoservice.login({ + // m: 'Init/init', + // code: res.code + // }).then(result => { + // this.$base.Userres = result //记录用户登录信息 + // uni.setStorageSync('openid', result.openid) + // logoservice.setwixinInfo(result); + // this.Userres_partner_id = this.$base.Userres.partner_id //总代理 + // }).catch(err => {}) + // }, + // fail: (err) => { + // console.error('授权登录失败:' + JSON.stringify(err)); + // } + // }); + } + }; +</script> + +<style lang="scss"> + page { + width: 100%; + height: 100%; + } + + //返回顶部 + .to-top { + position: fixed; + bottom: 150upx; + right: 30upx; + width: 80upx; + height: 80upx; + border-radius: 50%; + text-align: center; + line-height: 80upx; + transform: rotate(-90deg); + background: #000; + opacity: 0.5; + z-index: 999; + } + + .to-top-icon { + color: #FFFFFF; + } +</style> diff --git a/pages/index/mine.vue b/pages/index/mine.vue new file mode 100644 index 0000000..5177f26 --- /dev/null +++ b/pages/index/mine.vue @@ -0,0 +1,383 @@ +<template> + <view class="mine full-height full-width"> + <!-- 自定义头部 --> + <myhead :title="'结算中心'" :color="'#fff'" :titleShow="true" :backShow="true" :background="'#5CE6B5'"></myhead> + + <view style="width: 100%; height: 240upx;background:#5CE6B5 ;"></view> + + <!--页头--> + <view class="wallet-score bg-white-color full-width" + style="position: relative;;margin-top: -175upx;background: #29D698;"> + <view class="wallet content-color " style="margin-left: 30upx;"> + <view class="text" style="font-size: 24upx;letter-spacing: 2upx;color: #FFFFFF;">未提现到账金额 (元)</view> + <view class="score-num">{{ userInfo.withdrawal_amount || 0 }}</view> + </view> + + <view style="position: absolute; right: 0upx; top: 190upx; background: #F0A900; + padding: 22upx 50upx; + color: #FFFFFF; + border-top-left-radius:40upx; + border-top-right-radius:0upx; + border-bottom-right-radius:0upx; + border-bottom-left-radius:40upx;" @click="money()" + v-if="UserresPartnerType > 1 "> + <text style="color: #FFFFFF; font-size: 32upx;" hover-class="hover-class-text">提现</text> + </view> + + <view v-if=" long && UserresPartnerType > 1 && userInfo != null && userInfo.self_payment == 0" + style="position: absolute; left: 35upx; top: 190upx;display: flex;flex-direction: column;" + @click="toBalanceBank()"> + <text style="color: #fff; font-size: 26upx;" + hover-class="hover-class-text">{{getText(userInfo.account_name)}}</text> + <text style="color: #fff; font-size: 26upx;margin-top: 2upx;" + hover-class="hover-class-text">{{getText(userInfo.account_sn)}}</text> + <label v-if="userInfo.account_name != null && userInfo.account_name != 'null' && userInfo.account_name != '' " class="fa fa-angle-right" + style="color: #fff; font-size: 40upx; margin-left: 340upx;margin-top:-38upx; "></label> + <text style="color: #fff; font-size: 26upx;margin-top:-5upx;" + hover-class="hover-class-text">{{getText(userInfo.bank_name)}}</text> + </view> + </view> + + <view class="other-info" v-if="long"> + <view class="item" style="width: calc(100% / 3)" v-for="(other, index) in sociallist" :key="index" + @click="toOther(other)"> + <view style="border-radius: 20upx;margin-left: 18upx;margin-right: 18upx;height: 200upx;"> + <view class="icon" style="position: relative;" hover-class="hover-class-text"> + <image :src="other.icon" + style="width: 80upx;height: 80upx; margin-left: -10upx;margin-top: 35upx;"> + </image> + </view> + <view class="text content-color" hover-class="hover-class-text"> + {{other.name}} + </view> + </view> + </view> + </view> + + <!-- 自定义底部 --> + <foot action="4" :partnerId="Userres_partner_id" :partnerType="UserresPartnerType"></foot> + + </view> +</template> + + +<script> + import uniIcon from '@/components/uni-icon/uni-icon.vue'; + // 自定义底部 + import foot from '../../components/foot.vue'; + import logoservice from '@/service/logoservice.js'; + import myhead from './head/head.vue'; + export default { + components: { + uniIcon, + foot, + myhead + }, + computed: { + + }, + data() { + return { + long: false, + isShow: false, + sociallist: [{ + code: 'order', + name: '订单列表', + path: '/pages/mine/order', + icon: '../../static/icon_mine_order.png', + }, + { + code: 'Liquidation', + name: '收入明细', + path: '/pages/mine/Liquidation', + icon: '../../static/icon_mine_income.png', + }, + // { + // code: 'Withdrawal', + // name: '提现记录', + // path: '/pages/mine/Withdrawal', + // icon: '../../static/icon_mine_withdrawal.png', + // }, + { + code: 'information', + name: '代理信息', + path: '/pages/mine/information', + icon: '../../static/icon_mine_agent.png', + }, + + // { + // code: 'goodStock', + // name: '商品库存', + // path: '/pages/mine/goodStock', + // icon: '../../static/icon_mine_inventory.png', + // }, + // { + // code: 'printRecord', + // name: '打印卡充值记录', + // path: '/pages/mine/PrintCard', + // icon: '../../static/icon_mine_printe_list.png', + // }, + + ], + userInfo: null, + be_child: 0, //子代理 + partner_id: null, //总代理 + Userres_partner_id: null, //总代理 + UserresPartnerType: 0, + }; + }, + + methods: { + + getText(text) { + if (text == null || text == "null") { + return ""; + } + return text; + }, + + nameFormat(item) { + console.log("name=" + item) + if (!item) return ''; + let str = item; + if (str.length == 2) { + str = str.toString().replace(/^([^\x00-\xff])([^\x00-\xff]{0,})([^\x00-\xff])/g, '$1*') + } else if (str.length == 3) { + str = str.toString().replace(/^([^\x00-\xff])([^\x00-\xff]{0,})([^\x00-\xff])/g, '$1*$3') + } else if (str.length == 4) { + str = str.toString().replace(/^([^\x00-\xff])([^\x00-\xff]{0,2})([^\x00-\xff])/g, '$1**$3') + } else if (str.length > 4) { + str = str.toString().replace(/^([^\x00-\xff])([^\x00-\xff]{0,3})([^\x00-\xff])/g, '$1***$3') + } else {} + return str; + }, + + bankNoFormat(item) { + if (!item) return ''; + let bankCard = item; + var reg = /^(\d{4})\d+(\d{4})$/; + return bankCard.replace(reg, "$1 **** $2"); + }, + + toBalanceBank() { + uni.navigateTo({ + url: '../mine/bank' + }); + }, + + balance() { + uni.navigateTo({ + url: '../mine/balance' + }); + }, + + money() { + + uni.navigateTo({ + //url: '../mine/money' + url:'../mine/Settle', + }); + + }, + + printUseMoney() { + uni.navigateTo({ + url: '../mine/PrintUseDetail' + }); + }, + + packageDetail() { + uni.navigateTo({ + url: '../mine/PackageDetail' + }); + }, + + toOther(other) { + let path = other.path; + if (other.name == "收入明细") { + path = path + "?selfPayment=" + this.userInfo.self_payment + } + uni.navigateTo({ + url: path + }); + }, + + moneyinfo() { + logoservice.Moneyinfo({ + m: 'Money/info' + }).then(result => { + this.long = true; + this.userInfo = result + if (result != null && result.self_payment == 1) { + this.sociallist = [{ + code: 'order', + name: '订单列表', + path: '/pages/mine/order', + icon: '../../static/icon_mine_order.png', + }, + { + code: 'Liquidation', + name: '收入明细', + path: '/pages/mine/Liquidation', + icon: '../../static/icon_mine_income.png', + }, + { + code: 'information', + name: '代理信息', + path: '/pages/mine/information', + icon: '../../static/icon_mine_agent.png', + }, + ] + } + uni.hideLoading(); + uni.stopPullDownRefresh(); + }).catch(err => { + uni.hideLoading(); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + } + }, + + //下拉加载 + onPullDownRefresh() { + this.moneyinfo(); + }, + + //上拉加载 + onReachBottom() { + this.moneyinfo(); + }, + + onShow() { + uni.login({ + provider: 'weixin', + success: (res) => { + logoservice.login({ + m: 'Init/init', + code: res.code + }).then(result => { + this.$base.Userres = result //记录用户登录信息 + uni.setStorageSync('openid', result.openid) + logoservice.setwixinInfo(result); + //代理标识判断开始 + if (result.partner_id == 0) { + this.UserresPartnerType = 1 + } else { + if (result.partner != null) { + if (result.partner.level == 1) { + this.UserresPartnerType = 2 + } else if (result.partner.level == 2) { + this.UserresPartnerType = 3 + } else { + this.UserresPartnerType = 4 + } + } + } + if (this.UserresPartnerType == 1) { + this.sociallist = [{ + code: 'order', + name: '订单列表', + path: '/pages/mine/order', + icon: '../../static/icon_mine_order.png', + }, + { + code: 'Liquidation', + name: '收入明细', + path: '/pages/mine/Liquidation', + icon: '../../static/icon_mine_income.png', + }, + ] + } + this.moneyinfo(); + this.be_child = this.$base.Userres.be_child //子代理 + this.partner_id = this.$base.Userres.partner_id //总代理 + this.Userres_partner_id = this.$base.Userres.partner_id //总代理 + }).catch(err => { + + }) + }, + fail: (err) => { + console.error('授权登录失败:' + JSON.stringify(err)); + } + }); + + } + }; +</script> + +<style lang="scss"> + page { + background: #FFFFFF !important; + width: 100%; + height: 100%; + } + + .mine { + + //结算 + .wallet-score { + padding: 50upx 0; + width: 90%; + height: 320upx; + margin: 57upx auto; + background: #5CE6B6; + box-shadow: 1upx 19upx 57upx 9upx rgba(92, 230, 182, 0.5); + border-radius: 25upx; + display: flex; + font-size: 26upx; + color: #fff; + + .wallet { + width: 100%; + + .score-num { + line-height: 70upx; + font-size: 50upx; + font-weight: bold; + color: #fff; + } + + .text { + line-height: 50upx; + margin-left: 5upx; + color: #fff; + } + } + } + + .other-info { + width: 100%; + margin-top: -15upx; + overflow: hidden; + padding-left: 20upx; + padding-right: 20upx; + + .item { + float: left; + height: 225upx; + align-items: center; + margin-top: 0upx; + width: calc(100% / 5); + + .icon { + width: 60upx; + font-size: 80upx; + margin: auto; + + label { + font-size: 60upx; + } + } + + .text { + width: 100%; + font-size: 25upx; + text-align: center; + } + } + } + } +</style> diff --git a/pages/index/start-up.vue b/pages/index/start-up.vue new file mode 100644 index 0000000..d3a3b15 --- /dev/null +++ b/pages/index/start-up.vue @@ -0,0 +1,470 @@ +<template> + <view class="full-width content-color full-height" style="height: 120%;"> + <view class="start"> + <view style="height: 160upx;"></view> + <image src="/static/logo.jpg" class="start_img"></image> + <view class="start_title">我的风格 我设计</view> + <view class="start_div" v-if="typeIn == 0"> + <view class="start_text">该小程序为色彩公园运营平台,包括店铺管理、设备中心、结算中心、运营报表、设备库存等功能。</view> + <view class="start_text" style="margin-top: 30upx;">暂不提供对外注册,请联系服务商注册帐号。</view> + </view> + + <view class="start_div" v-if="typeIn == 1"> + <view class="start_text">该小程序为色彩公园运营平台,包括店铺管理、设备中心、结算中心、运营报表、设备库存等功能。</view> + <view v-if=" code == '101' || code == '102' || code =='103'|| code =='106' " class="start_text" style="margin-top: 30upx; + font-size: 35upx; color: #ff0000; width: 100%; text-align: center; + font-weight: 600; ">你暂时没有权限访问</view> + </view> + + <view class="footer" v-if="typeIn == 0"> + <view class="footer_but" @click="login()" hover-class="hover-class-bg">已有账号,前往登录</view> + </view> + + <view class="footer" v-if="typeIn == 1 && (code == '101' || code == '102' || code =='103'|| code =='106')"> + <view class="footer_but" @click="toBackCurrentProgram()" hover-class="hover-class-bg">返回</view> + </view> + + + </view> + </view> +</template> + +<script> + import logoservice from '@/service/logoservice.js'; + import store from '../../store' + import Env from '@/util/Env.js'; + + export default { + props: { + partnerId: { + type: Number, + default: 1, + }, + partnerType: { + //1所有 2市级别 3区级别 4终端 + type: Number, + default: 4, + }, + }, + components: { + + }, + computed: { + + }, + data() { + return { + long: false, + LoupanList: [], + //partner_id: "", + //machine_id: "", + machine_id: "100022", //设备Id + partner_id: "14", //代理商Id + typeIn: -1, // 0 默认进来 1 设备详情页面进来 + appletType: 0 ,// 1手机壳 2T恤 3 高尔夫 4 plus 5烘焙 6:Lite + code:"", + }; + }, + methods: { + + login() { + var that = this + uni.login({ + provider: 'weixin', + success: (res) => { + logoservice.login({ + m: 'Init/init', + code: res.code + }).then(result => { + that.$base.Userres = result //记录用户登录信息 + if (result.openid) { + uni.setStorageSync('openid', result.openid) + } + uni.setStorageSync('openid', result.openid) + logoservice.setwixinInfo(result); + uni.setStorageSync('token', result.token) + uni.showLoading({ + title: '自动登录中...' + }); + if (that.$base.Userres.partner_id == 0) { + setTimeout(() => { + uni.navigateTo({ + url: 'all-agent', + }) + + uni.hideLoading(); + }, 500); + } else { + if (that.$base.Userres.partner != null) { + if (that.$base.Userres.partner.level == 1) { + setTimeout(() => { + uni.navigateTo({ + url: 'city-agent', + }) + uni.hideLoading(); + }, 500); + } else if (that.$base.Userres.partner.level == 2) { + setTimeout(() => { + + uni.navigateTo({ + url: 'home', + }); + uni.hideLoading(); + }, 500); + + } else { + setTimeout(() => { + + uni.navigateTo({ + url: 'home', + }); + uni.hideLoading(); + }, 500); + } + } else { + setTimeout(() => { + uni.navigateTo({ + url: 'index', + }) + + uni.hideLoading(); + }, 500); + } + } + }).catch(err => { + //console.log(err) + if (err.data.openid) { + uni.setStorageSync('openid', err.data.openid) + } + uni.navigateTo({ + url: 'login', + }); + }) + }, + fail: (err) => { + //console.error('授权登录失败:' + JSON.stringify(err)); + } + }); + }, + + //监听网络状态 + networkManage() { + wx.getNetworkType({ + success: function(res) { + if (res.networkType == 'none') { + uni.showToast({ + title: '网络似乎不太顺畅', + icon: 'none', + duration: 2000 + }); + } + } + }) + }, + + //手机壳小程序 + toPhoneApplet() { + var url = Env.getBaseURL(); + var envVersionName = "trial"; + if (url.indexOf("colorpark") != -1) { + envVersionName = "release"; + } + + wx.navigateToMiniProgram({ + appId: 'wxdca8810ccd426633', + path: 'pages/index/start-up?machine_id=' + this.machine_id, + envVersion: envVersionName, + success(res) { + + },fail(res){ + + //console.log(res) + + } + }) + }, + + + //T恤小程序 + toTApplet() { + var url = Env.getBaseURL(); + var envVersionName = "trial"; + if (url.indexOf("colorpark") != -1) { + envVersionName = "release"; + } + wx.navigateToMiniProgram({ + appId: 'wx629579ec2f3cb8d4', + path: 'pages/mall/machineDetail?machine_id=' + this.machine_id, + envVersion: envVersionName, + success(res) { + + } + }) + }, + + + //高尔夫小程序 + toGolfApplet() { + var url = Env.getBaseURL(); + var envVersionName = "trial"; + if (url.indexOf("colorpark") != -1) { + envVersionName = "release"; + } + wx.navigateToMiniProgram({ + appId: 'wx90d72bea4d5222b6', + path: 'pages/mall/machineDetail?machine_id=' + this.machine_id, + envVersion: envVersionName, + success(res) { + + } + }) + }, + + + //Plus小程序 + toPlusApplet() { + var url = Env.getBaseURL(); + var envVersionName = "trial"; + if (url.indexOf("colorpark") != -1) { + envVersionName = "release"; + } + wx.navigateToMiniProgram({ + appId: 'wx4fbb04b6a8c55b06', + path: 'pages/mall/machineDetail?machine_id=' + this.machine_id, + envVersion: envVersionName, + success(res) { + + } + }) + }, + + + //烘焙小程序 + toBakingApplet() { + var url = Env.getBaseURL(); + var envVersionName = "trial"; + if (url.indexOf("colorpark") != -1) { + envVersionName = "release"; + } + wx.navigateToMiniProgram({ + appId: 'wx1f880e9650ae72ac', + path: 'pages/index/machineDetail?machine_id=' + this.machine_id, + envVersion: envVersionName, + success(res) { + + } + }) + }, + + //Lite小程序 + toLiteApplet() { + var url = Env.getBaseURL(); + var envVersionName = "trial"; + if (url.indexOf("colorpark") != -1) { + envVersionName = "release"; + } + wx.navigateToMiniProgram({ + appId: 'wx1c777ee874c39b0b', + path: 'pages/index/machineDetail?machine_id=' + this.machine_id, + envVersion: envVersionName, + success(res) { + + } + }) + }, + + //返回当前小程序 + toBackCurrentProgram(){ + uni.exitMiniProgram({ + success: function() { + //console.log('退出小程序成功'); + }, + fail: function(err) { + + } + }) + }, + + //设备详情进来登录处理 + //code: "0 直接进去 + //101-103直接报错提示了。 + //104-105就到登陆页。 + //106就也是提示无访问权限进入。 + machineLogin() { + var that = this + uni.login({ + provider: 'weixin', + success: (res) => { + logoservice.login({ + m: 'Init/checkAdminAuth', + code: res.code, + machine_id: this.machine_id, + partner_id: this.partner_id + }).then(result => { + that.$base.Userres = result //记录用户登录信息 + if (result.openid) { + uni.setStorageSync('openid', result.openid) + } + logoservice.setwixinInfo(result); + uni.setStorageSync('openid', result.openid) + uni.setStorageSync('token', result.token) + let code = result.code; + that.code = code; + if ("0" == code) { //直接调转设备页面 + + setTimeout(function() { + uni.reLaunch({ + url: '../mall/eq-details-new?id=' + that + .machine_id + + "&isShowBack=false", + }); + }, 500) + + } else if ("101" == code || "102" == code || "103" == code) { + uni.showToast({ + title: result.msg, + icon: 'none', + duration: 2000 + }); + + } else if ("104" == code || "105" == code) { //登陆页 + uni.reLaunch({ + url: 'login?machine_id=' + that.machine_id, + }); + + } else if ("106" == code) { //提示错误信息 + uni.showToast({ + title: "无访问权限进入", + icon: 'none', + duration: 2000 + }); + } + //console.log(result) + }).catch(err => { + that.code = "106" + uni.showToast({ + title: "无访问权限进入", + icon: 'none', + duration: 2000 + }); + //console.log(err) + /* if (err.data.openid) { + uni.setStorageSync('openid', err.data.openid) + } */ + }) + }, + fail: (err) => { + + } + }); + }, + + }, + + onLoad(options) { + if (options.partner_id) { + this.partner_id = options.partner_id + this.machine_id = options.machine_id + this.typeIn = 1; + this.machineLogin(); + this.appletType = options.appletType + + } else { + this.typeIn = 0; + } + console.log(this.typeIn) + + }, + + onShow() { + this.networkManage(); + }, + + // 分享转发 + onShareAppMessage(options) { + var that = this; + // 设置转发内容 + var shareObj = { + title: '色彩公园代理中心', + path: '/pages/index/start-up', // 默认是当前页面,必须是以‘/’开头的完整路径 + imageUrl: '', //转发时显示的图片路径,支持网络和本地,不传则使用当前页默认截图。 + success: function(res) { // 转发成功之后的回调 + if (res.errMsg == 'shareAppMessage:ok') {} + } + }; + return shareObj; + }, + + onShareTimeline() { + return { + title: '色彩公园代理中心', + path: '/pages/index/start-up', + imageUrl: '', + query: 'kjbfrom=pyq' + } + }, + }; +</script> + +<style lang="scss"> + page { + width: 100%; + height: 100%; + background: #FFFFFF; + } + + .start { + width: 100%; + height: 100%; + background: #fff; + + .start_img { + width: 218upx; + height: 179upx; + display: block; + margin: 0 auto 26upx; + } + + .start_title { + height: 34upx; + font-size: 36upx; + font-weight: 400; + color: rgba(51, 51, 51, 1); + line-height: 20upx; + text-align: center; + } + + .start_div { + margin: 122upx 99upx 0; + + .start_text { + font-size: 28upx; + font-weight: 400; + color: rgba(51, 51, 51, 1); + line-height: 36upx; + } + } + + .footer { + position: fixed; + bottom: 20upx; + width: 100%; + + .footer_but { + width: 80%; + margin: 0upx auto 0; + color: #fff; + height: 88upx; + text-align: center; + line-height: 88upx; + background: rgba(92, 230, 182, 1); + border-radius: 10upx; + } + + .footer_but_text { + text-align: center; + line-height: 80upx; + } + } + } +</style> \ No newline at end of file diff --git a/pages/mall/abount-machine.vue b/pages/mall/abount-machine.vue new file mode 100644 index 0000000..407a4fe --- /dev/null +++ b/pages/mall/abount-machine.vue @@ -0,0 +1,857 @@ +<template> + <view class="order full-height full-width"> + + <view class="uni-tab-bar full-width" v-if="list"> + + <view scroll-y @scrolltolower="loadMore()" class="full-width content" + style="margin-bottom: 20upx; overflow: auto; width: 100%;height: 100%;"> + + <view class="order-list" v-if="list"> + + <view class="item-new-list"> + <view class="item full-width" @click="updateName()"> + <label class="text content-color">名称</label> + <label class="value content-color"> + <text style="text-align: right;margin-top: 7upx;" + class="full-width">{{list.code}}</text> + <label class="fa fa-angle-right align-right sub-color" + style="margin-top: -2upx;"></label> + </label> + </view> + </view> + + <view class="item-new-list"> + <view class="item full-width"> + <label class="text content-color">出厂时间</label> + <label class="value content-color"> + <view style="text-align: right;line-height: 50upx;" class="full-width"> + {{(list.create_time)}} + </view> + </label> + </view> + <view class="item full-width"> + <label class="text content-color">保障剩余时间</label> + <label class="value content-color"> + <view style="text-align: right;line-height: 50upx;" class="full-width"> + {{list.safeguard_time }}天 + </view> + </label> + </view> + </view> + + <view class="item-new-list"> + <view class="item full-width" @click="showPicker()" > + <label class="text content-color">店铺</label> + <label class="value content-color"> + <view style="text-align: right;line-height: 50upx;" class="full-width" + v-if="list.shop_id">{{category(list.shop_id)}}</view> + <view style="text-align: right; color: #888888; line-height: 50upx;" class="full-width" + v-if="!list.shop_id">没有关联店铺</view> + <label class="fa fa-angle-right align-right sub-color"></label> + </label> + </view> + <view class="item full-width"> + <label class="text content-color">设备地址</label> + <label class="value content-color"> + <view style="text-align: right;line-height: 50upx;" class="full-width"> + {{categoryaddress(list.shop_id)}} + </view> + </label> + </view> + </view> + + + + <!-- <view class="item full-width" @click="showPicker()" + style=" border-top: 1upx solid #f6f6f6;padding-top: 10upx;margin-top: 5upx;"> + <label class="text content-color">店铺</label> + <label class="value content-color"> + <view style="text-align: right;line-height: 50upx;" class="full-width" + v-if="list.shop_id">{{category(list.shop_id)}}</view> + <view style="text-align: right; color: #888888; line-height: 50upx;" class="full-width" + v-if="!list.shop_id">没有关联店铺</view> + <label class="fa fa-angle-right align-right sub-color"></label> + </label> + </view> --> + + + <view class="item-new-list" style="margin-top: 30upx;"> + <view class="item full-width"> + <label class="text content-color">设备编号</label> + <label class="value content-color"> + <view style="text-align: right;line-height: 50upx;" class="full-width"> + {{queryPage.machine_id}} + </view> + </label> + </view> + <view class="item full-width"> + <label class="text content-color">客户</label> + <label class="value content-color"> + <view style="text-align: right;line-height: 50upx;" class="full-width">瑞丰彩 + </view> + </label> + </view> + <view class="item full-width"> + <label class="text content-color">类型</label> + <label class="value content-color"> + <view style="text-align: right;line-height: 50upx;" class="full-width"> + {{list.goods_category}} + </view> + </label> + </view> + + <view class="item full-width"> + <label class="text content-color">软件版本</label> + <label class="value content-color"> + <view style="text-align: right;line-height: 50upx;" class="full-width"> + {{list.pc_version}} + </view> + </label> + </view> + <view class="item full-width"> + <label class="text content-color">最大打印尺寸</label> + <label class="value content-color"> + <view style="text-align: right;line-height: 50upx;" class="full-width"> + {{list.machine_size_name}} + </view> + </label> + </view> + </view> + + <view class="item-new-list"> + <view class="item full-width"> + <label class="text content-color">二维码</label> + <label class="value content-color"> + <input type="text" disabled="disabled" class="full-width" /> + <image @click.stop="showPreviewImage(list.h5_code,list.id)" + v-if="list.h5_code !='' && list.h5_code " :src="list.h5_code " mode="aspectFit" + style="width:80upx; height:80upx; border-radius:10upx; display: block; float: right;margin-top: -5upx;"> + </image> + <image @click.stop="showPreviewImage(list.min_code,list.id)" v-if="list.min_code" + :src="list.min_code " mode="aspectFit" + style="width:80upx; height:80upx; border-radius:10upx; display: block; float: right;margin-top: -5upx; margin-left: 25upx;"> + </image> + </label> + </view> + </view> + + <view class="item-new-list" @click="maintenanceManual()"> + <view class="item full-width"> + <label class="text content-color">查看机器使用手册</label> + <label class="value content-color"> + <text style="text-align: right;margin-top: 5upx;" class="full-width"></text> + <label class="fa fa-angle-right align-right sub-color" + style="margin-top: -3upx;"></label> + </label> + </view> + </view> + + </view> + </view> + </view> + </view> + +</template> + +<script> + import uniIcon from '@/components/uni-icon/uni-icon.vue'; + import uniPopup from '../index/common/uni-popup/uni-popup.vue'; + import Enums from '@/util/Enums'; + import foot from '../../components/foot.vue'; + import logoservice from '@/service/logoservice.js'; + let Base64 = require('js-base64').Base64; + export default { + components: { + uniPopup, + uniIcon, + foot, + }, + computed: { + + }, + data() { + return { + long: false, + isSinglePlatep: true, + isShowPullButtom: false, + isOnclickItem: false, + numberlist: [], + LoupanList: [], + SortNumber: 1, + StcokList: [], + StcokLists: [], + list: null, + selectItem: null, + mode: 'selector', + pickerValueArray: [], + pickerValueDefault: [0], + type: 'bottom', + dataLoadState: { + pullDownRefresh: false, + reachBottom: false + }, + queryPage: { + m: 'Machine/printRecord', + machine_id: null, + page: 1, + per_page: 20, + total: 0, + date: null, + month: null, + year: null, + is_excess: null, + }, + shopQueryPage: { + m: 'Machine/getShop', + }, + attr: null, + showshareitem: null, + showshareindex: null, + printingPickerValueArray: [], + printingpickerValueDefault: [0], + maxnumber: 12, + maxlength: 2, + be_child: 0, //子代理 + Userres_partner_id: null, //总代理 + is_inner: null, //恢复订单打印 + print_type: 0, //默认0标准版 1无限版 + shopList: null, //店铺列表数据 + isShowPop: false, + + }; + }, + + methods: { + + + maintenanceManual() { + uni.showToast({ + title: '即将开放', + icon: 'none' + }); + }, + + //店铺 + showPicker(item) { + uni.navigateTo({ + url: '../mall/relevance-shop?machineid=' + this.list.id, + }); + }, + + category(id) { + var dataname = ''; + if (this.shopList) { + this.shopList.forEach(item => { + if (item.id == id) { + dataname = item.short_name + } + }); + } + return dataname + }, + + + categoryaddress(address) { + var dataaddress = ''; + if (this.shopList) { + this.shopList.forEach(item => { + if (item.id == address) { + dataaddress = item.address.replace('<br/>', ''); + } + }); + } + return dataaddress + }, + + //修改名称 + updateName() { + uni.navigateTo({ + url: '../mall/update_name?machineid=' + this.queryPage.machine_id + "&code=" + this.list.code, + }); + }, + + //获取相差天数 + getDaysDifference(time) { + try { + let day = new Date(time.replace(/-/g, "/")).getTime() - new Date().getTime(); //日期转时间戳 + let dayCount = Math.floor(day / 86400000); //时间戳获取天数 + return dayCount; + } catch (e) { + + } + return 0; + }, + + //字符串转base64 + getStrToBase64(str) { + return Base64.encode(str); + }, + + //预览显示图片 + showPreviewImage(e, id) { + if (e == null || e == "") { + uni.showToast({ + title: '暂时没有定制二维码', + icon: 'none' + }); + return + } + var current = e + "?x-oss-process=image/watermark,text_" + this.getStrToBase64(id) + + ",g_nw,size_50,shadow_50,x_550,y_850,color_4bf25a"; //这里获取到的是一张本地的图片 + uni.previewImage({ + current: current, //需要预览的图片链接列表 + urls: [current] //当前显示图片的链接 + }) + }, + + //格式化时间 + dateFormat(time) { + try { + var dt = new Date(time.replace(/-/g, '/')); + var y = dt.getFullYear(); + var m = dt.getMonth() + 1; + var d = dt.getDate(); + return y + '年' + m + '月' + d + '日'; + } catch (e) { + // 错误处理代码片段 + } + if (time == undefined) { + return ""; + } + return time; + }, + + //取消 + cancel(type) { + this.$refs['showshareinput'].close() + }, + + //获取输入框字符串 + diseaseNameInput(e) { + this.loadStockGoodsList(e.detail.value) + }, + + //获取底部弹框数据 + loadStockGoodsList(goods_name) { + logoservice.MachineStockGoodsList({ + m: 'Machine/getStockGoodsList', + machine_id: this.queryPage.machine_id, + goods_name: goods_name, + }).then(result => { + this.GoodsItem = result; + uni.hideLoading(); + }).catch(err => { + uni.hideLoading(); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + }, + + previewImageOne(item) { + var current = e; //这里获取到的是一张本地的图片 + }, + + setData(obj) { + let that = this; + let keys = []; + let val, data; + Object.keys(obj).forEach(function(key) { + keys = key.split('.'); + val = obj[key]; + data = that.$data; + keys.forEach(function(key2, index) { + if (index + 1 == keys.length) { + that.$set(data, key2, val); + } else { + if (!data[key2]) { + that.$set(data, key2, {}); + } + } + data = data[key2]; + }) + }); + }, + + + + onChange(e) { + + }, + + onCancel(e) { + + }, + + //设备列表详情 + listdetail() { + uni.showLoading({ + title: '正在加载中...' + }); + logoservice.Machinelistdetail({ + m: 'Machine/list', + machine_id: this.queryPage.machine_id + }).then(result => { + this.long = true + uni.stopPullDownRefresh(); + uni.hideLoading(); + if (result[0] != undefined) { + this.list = result[0] + } + }).catch(err => { + uni.hideLoading(); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + }, + + //设备打印信息 加载数据 + loadGoodsList(direction) { + + }, + + //获取店铺数据 + machineGetShopList() { + logoservice.MachineGetShop(this.shopQueryPage).then(result => { + if (result != null && result != undefined) { + this.shopList = result; + } + }).catch(err => { + + }); + }, + + + }, + + onPullDownRefresh() { + + }, + + onReachBottom() { + + }, + + onLoad(options) { + let that = this; + this.queryPage.machine_id = options.machineid + this.listdetail(); + }, + + onShow() { + this.listdetail(); + this.machineGetShopList() + } + + }; +</script> + +<style lang="scss"> + page { + width: 100%; + height: 100%; + background: #fff; + } + + .eq-detail-score { + padding: 40upx 0; + width: 100%; + height: 210upx; + margin: 0upx auto; + background: #43CF7C; + border-radius: 20upx; + display: flex; + align-items: center; + font-size: 26upx; + color: #fff; + } + + .green { + background-color: #4FB36B !important; + color: #FFFFFF; + } + + /*无数据 */ + .noData { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + } + + .noData_img { + width: 260upx; + height: 260upx; + display: block; + margin: 0upx auto 102upx; + } + + .noData_title { + text-align: center; + font-size: 36upx; + } + + .noData_text { + margin-top: 35upx; + font-size: 30upx; + font-weight: 400; + } + + .noData_but { + width: 230upx; + height: 70upx; + line-height: 70upx; + text-align: center; + color: #F56364; + margin: 140upx auto 0; + border: 1upx solid #F56364; + border-radius: 35upx; + } + + /* 去除button默认样式 */ + button::after { + border: none; + } + + button { + background-color: transparent; + padding-left: 0; + padding-right: 0; + line-height: inherit; + } + + .lang-open { + transform: rotate(90deg); + transition: transform 0.5s; + } + + .lang-close { + transform: rotateY(0deg); + transition: transform 0.5s; + } + + //2020-11-17 + .content-open { + height: 90upx; + overflow: hidden; + transition: all 0.4s cubic-bezier(0.25, 1.0, 0.25, 1.0); + } + + .content-close { + height: 0; + transition: all 0.4s cubic-bezier(0.25, 1.0, 0.25, 1.0); + } + + .item-open { + height: 40upx; + transition: all 0.4s cubic-bezier(0.25, 1.0, 0.25, 1.0); + } + + .item-close { + opacity: 0; + height: 0; + } + + /*输入框弹框显示 */ + .weui-search-bar { + position: relative; + padding: 8upx 10upx; + display: flex; + height: 135upx; + background: #FFFFFF; + align-items: center; + } + + .weui-search-bar_form { + width: 100%; + border-radius: 50upx; + background: #F6F6F6; + } + + .weui-search-bar_input { + height: 80upx; + line-height: 80upx; + font-size: 25upx; + padding-left: 24upx; + } + + /*底部弹框显示 */ + .uni-pop_show { + display: flex; + flex-direction: column; + } + + .uni-calendar-item--isDay-text.data-v-09f1e40c { + color: #5CE6B5 !important; //5CE6B5 + } + + .uni-calendar-item--isDay.data-v-09f1e40c { + background: #5CE6B5 !important; + color: #fff !important; + } + + .uni-calendar-item--checked.data-v-09f1e40c { + background: #5CE6B5 !important; + color: #fff !important; + } + + .uni-numbox__value { + width: 120upx !important; + } + + page { + width: 100%; + height: 100%; + background: #F5F5F5; + } + + .eq_list_button { + display: flex; + flex-direction: row; + line-height: 60upx; + padding-bottom: 20upx; + } + + .eq_list_button_ul { + flex: 1; + } + + .eq_list_button_li { + margin: auto; + font-size: 24upx; + color: #FFFFFF; + width: 150upx; + font-weight: bold; + text-align: center; + line-height: 60upx; + height: 60upx; + background-color: #5CE6B6; + } + + .uni-swiper-tab { + border-bottom: 1upx solid #F5F5F5; + } + + .clean-bt { + border-radius: 50%; + width: 200upx; + height: 200upx; + bottom: 160upx; + right: 20upx; + position: fixed; + font-size: 27upx; + text-align: center; + line-height: 130upx; + z-index: 99991; + justify-content: center; + align-items: center; + } + + .order { + width: 100%; + height: 100%; + background-color: #fff; + + .uni-tab-bar { + height: auto !important; + + .uni-swiper-tab { + position: fixed; + top: var(--window-top); + z-index: 999; + width: 100%; + line-height: 85upx; + height: 85upx; + + .swiper-tab-list { + width: calc(100% / 3); + font-size: 30upx; + } + } + + .active { + color: #43CF7C; + } + } + + .way-list { + margin: 0 20upx; + padding-top: 20upx; + border-radius: 10upx; + + .topBox { + width: calc(100% - 60upx); + margin-left: 30upx; + margin-top: 15upx; + justify-content: center; + } + + .topLittleBOX-1 { + font-size: 26upx; + width: 120upx; + color: #333; + overflow: text-align; + } + + .topLittleBOX-2 { + padding-left: 20upx; + padding-top: auto; + padding-bottom: auto; + display: flex; + vertical-align: middle; + flex-direction: row; + align-items: center; + width: calc(100% - 120upx); + position: relative; + } + + .row-1 { + height: 30upx; + background-color: #43CF7C; + border-radius: 20upx; + width: 0upx; + transition: width 1.5s linear; + } + + .rowText { + margin-left: 10upx; + font-size: 26upx; + color: #333; + float: right; + } + + .way-item { + background: #FFFFFF; + border-radius: 10upx; + margin-bottom: 20upx; + } + + .way { + height: 120upx; + min-height: 90upx; + display: flex; + align-items: center; + font-size: 28upx; + + .text { + width: 250upx; + padding-left: 20upx; + color: #fff; + } + + .value { + width: calc(100% - 280upx); + display: flex; + + .prick { + width: calc(100% - 40upx); + } + + .fa-angle-right { + width: 40upx; + font-size: 50upx; + } + } + } + } + + .content { + padding-top: 10upx; + + .order-list { + min-height: 350upx; + width: 100%; + border-radius: 10upx; + + .item { + min-height: 70upx; + display: flex; + align-items: center; + font-size: 26upx; + border-bottom: 1upx solid #F5F5F5; + + .text { + width: 320upx; + color: #000; + font-size: 29upx; + } + + .value { + width: calc(100% - 130upx); + display: flex; + color: #888; + margin-top: 15upx; + margin-bottom: 15upx; + + .prick { + width: calc(100% - 35upx); + } + + .fa-angle-right { + width: 30upx; + font-size: 50upx; + } + } + } + } + } + } + + .print-score { + width: 100%; + height: 280upx; + background: #43CF7C; + border-radius: 20upx; + display: flex; + align-items: center; + font-size: 26upx; + color: #fff; + + .print { + width: 100%; + + .text { + line-height: 50upx; + color: #fff; + } + } + } + + .list-clean { + height: 80upx; + background: #FFFFFF; + padding-left: 20upx; + padding-right: 23upx; + margin-top: 10upx; + border-radius: 15upx; + margin-left: 20upx; + margin-right: 15upx; + padding-top: 18upx; + } + + .item-new-list { + padding-top: 0upx; + padding-left: 30upx; + padding-right: 25upx; + background: #fff; + margin: 0upx 30upx 25upx 30upx; + border-radius: 20upx; + box-shadow: 0 0 10upx 10upx #F5F5F5; + color: #000; + } + + + .item-new-list-text { + margin: -10upx 45upx 30upx 45upx; + color: #999; + font-size: 25upx; + width: calc(100% - 90upx); + } + + .content-color { + color: #fff; + } +</style> \ No newline at end of file diff --git a/pages/mall/arrive-good.vue b/pages/mall/arrive-good.vue new file mode 100644 index 0000000..be667e6 --- /dev/null +++ b/pages/mall/arrive-good.vue @@ -0,0 +1,599 @@ +<template> + <view class="order full-height full-width"> + + <view class="uni-tab-bar full-width"> + + <view scroll-y @scrolltolower="loadMore()" class="full-width content" v-if="long" + style="padding-bottom: 20upx; overflow: auto; width: 100%;height: 100%; background: #fff;"> + + <view class="order-list"> + + <view class="item-new-list"> + <view class="item full-width"> + <label class="text content-color">设备编号</label> + <label class="value content-color"> + <text style="text-align: right;" class="full-width">{{queryPage.machine_id}}</text> + </label> + </view> + </view> + + <view class="item-new-list-text">型号功能仅对部分机型有效。开启对应的型号,设备即可实现当前商品的定制</view> + <view class="item-new-list"> + <view v-for="(item, index) in list" :key="index"> + <view class="item full-width" > + <label class="text content-color" style="min-width: 400upx;">{{item.name}}</label> + <switch :checked="item.flag == 1 ? true :false" @change="onSwitchChange($event,item)" + class="item-new-list-switch" /> + </view> + </view> + </view> + + + </view> + + </view> + </view> + + </view> +</template> + +<script> + import uniIcon from '@/components/uni-icon/uni-icon.vue'; + import uniPopup from '../index/common/uni-popup/uni-popup.vue'; + import Enums from '@/util/Enums'; + import foot from '../../components/foot.vue'; + import logoservice from '@/service/logoservice.js'; + let Base64 = require('js-base64').Base64; + export default { + components: { + uniPopup, + uniIcon, + foot, + }, + computed: { + + }, + data() { + return { + long: false, + isSinglePlatep: true, + isShowPullButtom: false, + isOnclickItem: false, + list: null, + selectItem: null, + mode: 'selector', + pickerValueArray: [], + pickerValueDefault: [0], + type: 'bottom', + dataLoadState: { + pullDownRefresh: false, + reachBottom: false + }, + queryPage: { + m: 'Machine/printRecord', + machine_id: null, + page: 1, + per_page: 20, + total: 0, + date: null, + month: null, + year: null, + is_excess: null, + }, + shopQueryPage: { + m: 'Machine/getShop', + }, + attr: null, + + isShowPop: false, + }; + }, + + methods: { + + //开关修改 + onSwitchChange(e, item) { + if (e.detail.value == true) { + item.flag = 1; + uni.showLoading({ + title: '开启中...' + }) + } else { + item.flag = 0; + uni.showLoading({ + title: '关闭中...' + }) + } + logoservice.Machinestatus({ + m: 'Machine/relationGoodsSave', + machine_id: this.queryPage.machine_id, + goods_id: item.id, + }).then(result => { + uni.hideLoading(); + if (e.detail.value == true) { + uni.showToast({ + title: '开启成功' + }) + } else { + uni.showToast({ + title: '关闭成功' + }) + } + }).catch(err => { + uni.hideLoading(); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + if (e.detail.value == true) { + item.flag = 0; + } else { + item.flag = 1; + } + }) + }, + + onChange(e) { + + }, + + onCancel(e) { + + }, + + goodList() { + uni.showLoading({ + title: '正在加载中...' + }); + logoservice.Machinelistdetail({ + m: 'Machine/relationGoods', + machine_id: this.queryPage.machine_id + }).then(result => { + this.long = true + uni.hideLoading(); + this.list = result + }).catch(err => { + uni.hideLoading(); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + }, + + }, + + onPullDownRefresh() { + + }, + + onReachBottom() { + + }, + + onLoad(options) { + this.queryPage.machine_id = options.machineid + this.goodList(); + }, + + onShow() { + + } + + }; +</script> + +<style lang="scss"> + page { + width: 100%; + height: 100%; + background: #fff; + } + + .eq-detail-score { + padding: 40upx 0; + width: 100%; + height: 210upx; + margin: 0upx auto; + background: #43CF7C; + border-radius: 20upx; + display: flex; + align-items: center; + font-size: 26upx; + color: #fff; + } + + .green { + background-color: #4FB36B !important; + color: #FFFFFF; + } + + /*无数据 */ + .noData { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + } + + .noData_img { + width: 260upx; + height: 260upx; + display: block; + margin: 0upx auto 102upx; + } + + .noData_title { + text-align: center; + font-size: 36upx; + } + + .noData_text { + margin-top: 35upx; + font-size: 30upx; + font-weight: 400; + } + + .noData_but { + width: 230upx; + height: 70upx; + line-height: 70upx; + text-align: center; + color: #F56364; + margin: 140upx auto 0; + border: 1upx solid #F56364; + border-radius: 35upx; + } + + /* 去除button默认样式 */ + button::after { + border: none; + } + + button { + background-color: transparent; + padding-left: 0; + padding-right: 0; + line-height: inherit; + } + + .lang-open { + transform: rotate(90deg); + transition: transform 0.5s; + } + + .lang-close { + transform: rotateY(0deg); + transition: transform 0.5s; + } + + //2020-11-17 + .content-open { + height: 90upx; + overflow: hidden; + transition: all 0.4s cubic-bezier(0.25, 1.0, 0.25, 1.0); + } + + .content-close { + height: 0; + transition: all 0.4s cubic-bezier(0.25, 1.0, 0.25, 1.0); + } + + .item-open { + height: 40upx; + transition: all 0.4s cubic-bezier(0.25, 1.0, 0.25, 1.0); + } + + .item-close { + opacity: 0; + height: 0; + } + + /*输入框弹框显示 */ + .weui-search-bar { + position: relative; + padding: 8upx 10upx; + display: flex; + height: 135upx; + background: #FFFFFF; + align-items: center; + } + + .weui-search-bar_form { + width: 100%; + border-radius: 50upx; + background: #F6F6F6; + } + + .weui-search-bar_input { + height: 80upx; + line-height: 80upx; + font-size: 25upx; + padding-left: 24upx; + } + + /*底部弹框显示 */ + .uni-pop_show { + display: flex; + flex-direction: column; + } + + .uni-calendar-item--isDay-text.data-v-09f1e40c { + color: #5CE6B5 !important; //5CE6B5 + } + + .uni-calendar-item--isDay.data-v-09f1e40c { + background: #5CE6B5 !important; + color: #fff !important; + } + + .uni-calendar-item--checked.data-v-09f1e40c { + background: #5CE6B5 !important; + color: #fff !important; + } + + .uni-numbox__value { + width: 120upx !important; + } + + page { + width: 100%; + height: 100%; + background: #F5F5F5; + } + + .eq_list_button { + display: flex; + flex-direction: row; + line-height: 60upx; + padding-bottom: 20upx; + } + + .eq_list_button_ul { + flex: 1; + } + + .eq_list_button_li { + margin: auto; + font-size: 24upx; + color: #FFFFFF; + width: 150upx; + font-weight: bold; + text-align: center; + line-height: 60upx; + height: 60upx; + background-color: #5CE6B6; + } + + .uni-swiper-tab { + border-bottom: 1upx solid #F5F5F5; + } + + .clean-bt { + border-radius: 50%; + width: 200upx; + height: 200upx; + bottom: 160upx; + right: 20upx; + position: fixed; + font-size: 27upx; + text-align: center; + line-height: 130upx; + z-index: 99991; + justify-content: center; + align-items: center; + } + + .order { + width: 100%; + height: 100%; + background-color: #fff; + + .uni-tab-bar { + height: auto !important; + + .uni-swiper-tab { + position: fixed; + top: var(--window-top); + z-index: 999; + width: 100%; + line-height: 85upx; + height: 85upx; + + .swiper-tab-list { + width: calc(100% / 3); + font-size: 30upx; + } + } + + .active { + color: #43CF7C; + } + } + + .way-list { + margin: 0 20upx; + padding-top: 20upx; + border-radius: 10upx; + + .topBox { + width: calc(100% - 60upx); + margin-left: 30upx; + margin-top: 15upx; + justify-content: center; + } + + .topLittleBOX-1 { + font-size: 26upx; + width: 120upx; + color: #333; + overflow: text-align; + } + + .topLittleBOX-2 { + padding-left: 20upx; + padding-top: auto; + padding-bottom: auto; + display: flex; + vertical-align: middle; + flex-direction: row; + align-items: center; + width: calc(100% - 120upx); + position: relative; + } + + .row-1 { + height: 30upx; + background-color: #43CF7C; + border-radius: 20upx; + width: 0upx; + transition: width 1.5s linear; + } + + .rowText { + margin-left: 10upx; + font-size: 26upx; + color: #333; + float: right; + } + + .way-item { + background: #FFFFFF; + border-radius: 10upx; + margin-bottom: 20upx; + } + + .way { + height: 120upx; + min-height: 90upx; + display: flex; + align-items: center; + font-size: 28upx; + + .text { + width: 250upx; + padding-left: 20upx; + color: #fff; + } + + .value { + width: calc(100% - 280upx); + display: flex; + + .prick { + width: calc(100% - 40upx); + } + + .fa-angle-right { + width: 40upx; + font-size: 50upx; + } + } + } + } + + .content { + padding-top: 10upx; + + .order-list { + min-height: 350upx; + width: 100%; + border-radius: 10upx; + + .item { + min-height: 70upx; + display: flex; + align-items: center; + font-size: 26upx; + border-bottom: 1upx solid #F5F5F5; + + .text { + width: 250upx; + color: #000; + font-size: 29upx; + } + + .value { + width: calc(100% - 120upx); + display: flex; + color: #888; + margin-top: 15upx; + margin-bottom: 15upx; + + + .prick { + width: calc(100% - 35upx); + } + + .fa-angle-right { + width: 30upx; + font-size: 50upx; + } + } + } + } + } + } + + .print-score { + width: 100%; + height: 280upx; + background: #43CF7C; + border-radius: 20upx; + display: flex; + align-items: center; + font-size: 26upx; + color: #fff; + + .print { + width: 100%; + + .text { + line-height: 50upx; + color: #fff; + } + } + } + + .list-clean { + height: 80upx; + background: #FFFFFF; + padding-left: 20upx; + padding-right: 23upx; + margin-top: 10upx; + border-radius: 15upx; + margin-left: 20upx; + margin-right: 15upx; + padding-top: 18upx; + } + + .item-new-list { + padding-top: 0upx; + padding-left: 30upx; + padding-right: 25upx; + background: #fff; + margin: 0upx 30upx 25upx 30upx; + border-radius: 20upx; + box-shadow: 0 0 10upx 10upx #F5F5F5; + color: #000; + } + + .item-new-list-text { + margin: -10upx 45upx 30upx 45upx; + color: #999; + font-size: 25upx; + width: calc(100% - 90upx); + } + + + .content-color { + color: #fff; + } + + .item-new-list-switch { + float: right; + zoom: 0.6; + position: absolute; + right: 80upx + } +</style> \ No newline at end of file diff --git a/pages/mall/auxiliary-use.vue b/pages/mall/auxiliary-use.vue new file mode 100644 index 0000000..194db96 --- /dev/null +++ b/pages/mall/auxiliary-use.vue @@ -0,0 +1,778 @@ +<template> + <view class="order full-height full-width"> + + <view class="uni-tab-bar full-width"> + + <view scroll-y @scrolltolower="loadMore()" class="full-width content" + style="padding-bottom: 20upx; overflow: auto; width: 100%;height: 100%; background: #fff;"> + + <view class="order-list" v-if="list"> + + <view class="item-new-list"> + <view class="item full-width"> + <label class="text content-color">设备编号</label> + <label class="value content-color"> + <text style="text-align: right;" class="full-width">{{queryPage.machine_id}}</text> + </label> + </view> + </view> + + <view class="item-new-list-text">启用对应功能,可对设备开启相应功能,以便更好体验设备</view> + + <view class="item-new-list"> + <view class="item full-width"> + <label class="text content-color">官方图库</label> + <switch :checked="isPublic" @change="onSwitchChange($event,1)" + class="item-new-list-switch" /> + </view> + <view class="item full-width"> + <label class="text content-color">图片隐私保护</label> + <switch :checked="isPrivacy" @change="onSwitchChange($event,2)" + class="item-new-list-switch" /> + </view> + <view class="item full-width"> + <label class="text content-color">图片上传</label> + <switch :checked="isdiyUploadMenu" @change="onSwitchChange($event,3)" + class="item-new-list-switch" /> + </view> + + <view v-if="detail.used_applets == 6 || detail.used_applets == 8" class="item full-width"> + <label class="text content-color">自定义尺寸</label> + <switch :checked="isCustomizeSize" @change="onSwitchChange($event,4)" + class="item-new-list-switch" /> + </view> + </view> + + +<!-- //2:色彩公园,3:色彩公园T恤,4:色彩公园手机壳,5:高尔夫,6:色彩Plus,7 色彩Lite(通用版) ,8 烘焙食品' --> + <view class="item-new-list-text">以上功能支持所有版本。</view> + + + + <view class="item-new-list" v-if="detail.used_applets == 3 || detail.used_applets == 4 || detail.used_applets == 5"> + <view class="item full-width" v-if="detail.used_applets == 3 || detail.used_applets == 4"> + <label class="text content-color" >配送下单</label> + <switch :checked="isDelivery" @change="onSwitchChange($event,5)" + class="item-new-list-switch" /> + </view> + <!-- v-if="detail.used_applets == 3 || detail.used_applets == 4 || detail.used_applets == 5 " --> + <view class="item full-width"> + <label class="text content-color">微信支付</label> + <switch :checked="isSupportPay" @change="onSwitchChange($event,6)" + class="item-new-list-switch" /> + </view> + </view> + + <view class="item-new-list-text" v-if="detail.used_applets == 3 || detail.used_applets == 4 || detail.used_applets == 5"> + 以上功能仅支持微信小程序。如未配置微信商户收款信息,将默认官方统一收款(需要配置微信商户收款可联系专属客服)。</view> + + <view class="item-new-list" v-if=" detail!=null && detail.h5_code != null && detail.h5_code != '' "> + <view class="item full-width" + @click="supportLanguage()"> + <label class="text content-color">支持语言</label> + <label class="value content-color"> + <view style="text-align: right;line-height: 50upx;" class="full-width"> + {{list.language_total}} + </view> + <label class="fa fa-angle-right align-right sub-color"></label> + </label> + </view> + + <view class="item full-width" + @click="defaultLanguage()"> + <label class="text content-color">默认语言</label> + <label class="value content-color"> + <view style="text-align: right;line-height: 50upx;" class="full-width"> + {{list.machine_language_default ? list.machine_language_default : "" }} + </view> + <label class="fa fa-angle-right align-right sub-color"></label> + </label> + </view> + + <view + class="item full-width"> + <label class="text content-color">自动登录</label> + <switch :checked="isAutoRegister" @change="onSwitchChange($event,7)" + class="item-new-list-switch" /> + </view> + + <view + class="item full-width"> + <label class="text content-color">贝宝支付</label> + <switch :checked="isSupportPaypal" @change="onSwitchChange($event,8)" + class="item-new-list-switch" /> + </view> + + <view + + class="item full-width"> + <label class="text content-color">海外配送</label> + <switch :checked="isSupportOversea" @change="onSwitchChange($event,9)" + class="item-new-list-switch" /> + </view> + + </view> + + <view class="item-new-list-text" v-if=" detail!=null && detail.h5_code != null && detail.h5_code != '' " >以上功能仅支持H5(Web)。开启贝宝支付必须联系专属客户提前配置收款基础参数。</view> + + </view> + + </view> + </view> + + </view> + +</template> + +<script> + import uniIcon from '@/components/uni-icon/uni-icon.vue'; + import uniPopup from '../index/common/uni-popup/uni-popup.vue'; + import Enums from '@/util/Enums'; + import foot from '../../components/foot.vue'; + import logoservice from '@/service/logoservice.js'; + let Base64 = require('js-base64').Base64; + export default { + components: { + uniPopup, + uniIcon, + foot, + }, + computed: { + + }, + data() { + return { + long: false, + mode: 'selector', + pickerValueArray: [], + pickerValueDefault: [0], + type: 'bottom', + is_public: 1, + privacy: 0, + diy_upload_menu: 1, + customize_size: 0, + delivery: 0, + support_pay: 0, + auto_register: 0, + support_paypal: 1, + support_oversea: 0, + queryPage: { + m: 'Machine/printRecord', + machine_id: null, + }, + isPublic: false, + isPrivacy: false, + isdiyUploadMenu: false, + isCustomizeSize: false, + isDelivery: false, + isSupportPay: false, + isAutoRegister: false, + isSupportPaypal: false, + isSupportOversea: false, + list: null, + status_name: null, + machine_language_list: [], + machine_category_id: null, //63 自助机 + detail: null, + }; + }, + + methods: { + + getSwitchCheck(type, isCheck) { + switch (type) { + case 1: + this.status_name = "is_public"; + this.isPublic = isCheck + break; + case 2: + this.status_name = "privacy"; + this.isPrivacy = isCheck + break; + case 3: + this.status_name = "diy_upload_menu"; + this.isdiyUploadMenu = isCheck + break; + case 4: + this.status_name = "customize_size"; + this.isCustomizeSize = isCheck + break; + case 5: + this.status_name = "delivery"; + this.isDelivery = isCheck + break; + case 6: + this.status_name = "support_pay"; + this.isSupportPay = isCheck + break; + case 7: + this.status_name = "auto_register"; + this.isAutoRegister = isCheck + break; + case 8: + this.status_name = "support_paypal"; + this.isSupportPaypal = isCheck + break; + case 9: + this.status_name = "support_oversea"; + this.isSupportOversea = isCheck + break; + } + }, + + //设备锁定 + onSwitchChange(e, type) { + if (e.detail.value == true) { + this.getSwitchCheck(type, true) + uni.showLoading({ + title: '开启中...' + }) + } else { + this.getSwitchCheck(type, false) + uni.showLoading({ + title: '关闭中...' + }) + } + logoservice.Machinestatus({ + m: 'Machine/UpdateStatus', + machine_id: this.queryPage.machine_id, + status_name: this.status_name, + }).then(result => { + uni.hideLoading(); + if (e.detail.value == true) { + uni.showToast({ + title: '开启成功' + }) + } else { + uni.showToast({ + title: '关闭成功' + }) + } + }).catch(err => { + uni.hideLoading(); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + if (e.detail.value == true) { + this.getSwitchCheck(type, false) + } else { + this.getSwitchCheck(type, true) + } + }) + }, + + defaultLanguage() { + uni.navigateTo({ + url: '../mall/default_language?machineid=' + this.queryPage.machine_id + "¶m=" + JSON + .stringify(this.list) + }); + }, + + supportLanguage() { + uni.navigateTo({ + url: '../mall/support_language?machineid=' + this.queryPage.machine_id + "¶m=" + JSON + .stringify(this.list) + }); + }, + + //获取状态 + getStatus() { + uni.showLoading({ + title: '正在加载中...' + }); + logoservice.Machinelistdetail({ + m: 'Machine/auxiliaryFunctions', + machine_id: this.queryPage.machine_id, + }).then(result => { + uni.hideLoading(); + this.list = result + this.machine_language_list = this.list.machine_language_list + if (this.list.machine_language_default == undefined || this.list.machine_language_default == + null) { + this.list.machine_language_default = "" + } + this.isPublic = this.list.is_public == 1 ? true : false; + this.isPrivacy = this.list.privacy == 1 ? true : false; + this.isdiyUploadMenu = this.list.diy_upload_menu == 1 ? true : false; + this.isCustomizeSize = this.list.customize_size == 1 ? true : false; + this.isDelivery = this.list.delivery == 1 ? true : false; + this.isSupportPay = this.list.support_pay == 1 ? true : false; + this.isAutoRegister = this.list.auto_register == 1 ? true : false; + this.isSupportPaypal = this.list.support_paypal == 1 ? true : false; + this.isSupportOversea = this.list.support_oversea == 1 ? true : false; + + }).catch(err => { + uni.hideLoading(); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + }, + + //设备列表详情 + listdetail() { + uni.showLoading({ + title: '正在加载中...' + }); + logoservice.Machinelistdetail({ + m: 'Machine/list', + machine_id: this.queryPage.machine_id + }).then(result => { + this.long = true + uni.stopPullDownRefresh(); + uni.hideLoading(); + if (result[0] != undefined) { + this.detail = result[0] + } + }).catch(err => { + uni.hideLoading(); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + }, + + + }, + + onPullDownRefresh() { + + }, + + onReachBottom() { + + }, + + onLoad(options) { + let that = this; + this.queryPage.machine_id = options.machineid + this.machine_category_id = options.machine_category_id + this.getStatus(); + this.listdetail(); + }, + + //this.list.machine_category_id + onShow() { + this.getStatus(); + } + + }; +</script> + +<style lang="scss"> + page { + width: 100%; + height: 100%; + background: #fff; + } + + .eq-detail-score { + padding: 40upx 0; + width: 100%; + height: 210upx; + margin: 0upx auto; + background: #43CF7C; + border-radius: 20upx; + display: flex; + align-items: center; + font-size: 26upx; + color: #fff; + } + + .green { + background-color: #4FB36B !important; + color: #FFFFFF; + } + + /*无数据 */ + .noData { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + } + + .noData_img { + width: 260upx; + height: 260upx; + display: block; + margin: 0upx auto 102upx; + } + + .noData_title { + text-align: center; + font-size: 36upx; + } + + .noData_text { + margin-top: 35upx; + font-size: 30upx; + font-weight: 400; + } + + .noData_but { + width: 230upx; + height: 70upx; + line-height: 70upx; + text-align: center; + color: #F56364; + margin: 140upx auto 0; + border: 1upx solid #F56364; + border-radius: 35upx; + } + + /* 去除button默认样式 */ + button::after { + border: none; + } + + button { + background-color: transparent; + padding-left: 0; + padding-right: 0; + line-height: inherit; + } + + .lang-open { + transform: rotate(90deg); + transition: transform 0.5s; + } + + .lang-close { + transform: rotateY(0deg); + transition: transform 0.5s; + } + + //2020-11-17 + .content-open { + height: 90upx; + overflow: hidden; + transition: all 0.4s cubic-bezier(0.25, 1.0, 0.25, 1.0); + } + + .content-close { + height: 0; + transition: all 0.4s cubic-bezier(0.25, 1.0, 0.25, 1.0); + } + + .item-open { + height: 40upx; + transition: all 0.4s cubic-bezier(0.25, 1.0, 0.25, 1.0); + } + + .item-close { + opacity: 0; + height: 0; + } + + /*输入框弹框显示 */ + .weui-search-bar { + position: relative; + padding: 8upx 10upx; + display: flex; + height: 135upx; + background: #FFFFFF; + align-items: center; + } + + .weui-search-bar_form { + width: 100%; + border-radius: 50upx; + background: #F6F6F6; + } + + .weui-search-bar_input { + height: 80upx; + line-height: 80upx; + font-size: 25upx; + padding-left: 24upx; + } + + /*底部弹框显示 */ + .uni-pop_show { + display: flex; + flex-direction: column; + } + + .uni-calendar-item--isDay-text.data-v-09f1e40c { + color: #5CE6B5 !important; //5CE6B5 + } + + .uni-calendar-item--isDay.data-v-09f1e40c { + background: #5CE6B5 !important; + color: #fff !important; + } + + .uni-calendar-item--checked.data-v-09f1e40c { + background: #5CE6B5 !important; + color: #fff !important; + } + + .uni-numbox__value { + width: 120upx !important; + } + + page { + width: 100%; + height: 100%; + background: #F5F5F5; + } + + .eq_list_button { + display: flex; + flex-direction: row; + line-height: 60upx; + padding-bottom: 20upx; + } + + .eq_list_button_ul { + flex: 1; + } + + .eq_list_button_li { + margin: auto; + font-size: 24upx; + color: #FFFFFF; + width: 150upx; + font-weight: bold; + text-align: center; + line-height: 60upx; + height: 60upx; + background-color: #5CE6B6; + } + + .uni-swiper-tab { + border-bottom: 1upx solid #F5F5F5; + } + + .clean-bt { + border-radius: 50%; + width: 200upx; + height: 200upx; + bottom: 160upx; + right: 20upx; + position: fixed; + font-size: 27upx; + text-align: center; + line-height: 130upx; + z-index: 99991; + justify-content: center; + align-items: center; + } + + .order { + width: 100%; + height: 100%; + background-color: #fff; + + .uni-tab-bar { + height: auto !important; + + .uni-swiper-tab { + position: fixed; + top: var(--window-top); + z-index: 999; + width: 100%; + line-height: 85upx; + height: 85upx; + + .swiper-tab-list { + width: calc(100% / 3); + font-size: 30upx; + } + } + + .active { + color: #43CF7C; + } + } + + .way-list { + margin: 0 20upx; + padding-top: 20upx; + border-radius: 10upx; + + .topBox { + width: calc(100% - 60upx); + margin-left: 30upx; + margin-top: 15upx; + justify-content: center; + } + + .topLittleBOX-1 { + font-size: 26upx; + width: 120upx; + color: #333; + overflow: text-align; + } + + .topLittleBOX-2 { + padding-left: 20upx; + padding-top: auto; + padding-bottom: auto; + display: flex; + vertical-align: middle; + flex-direction: row; + align-items: center; + width: calc(100% - 120upx); + position: relative; + } + + .row-1 { + height: 30upx; + background-color: #43CF7C; + border-radius: 20upx; + width: 0upx; + transition: width 1.5s linear; + } + + .rowText { + margin-left: 10upx; + font-size: 26upx; + color: #333; + float: right; + } + + .way-item { + background: #FFFFFF; + border-radius: 10upx; + margin-bottom: 20upx; + } + + .way { + height: 120upx; + min-height: 90upx; + display: flex; + align-items: center; + font-size: 28upx; + + .text { + width: 250upx; + padding-left: 20upx; + color: #fff; + } + + .value { + width: calc(100% - 280upx); + display: flex; + + .prick { + width: calc(100% - 40upx); + } + + .fa-angle-right { + width: 40upx; + font-size: 50upx; + } + } + } + } + + .content { + padding-top: 10upx; + + .order-list { + min-height: 350upx; + width: 100%; + border-radius: 10upx; + + .item { + min-height: 70upx; + display: flex; + align-items: center; + font-size: 26upx; + border-bottom: 1upx solid #F5F5F5; + + .text { + width: 250upx; + color: #000; + font-size: 29upx; + } + + .value { + width: calc(100% - 120upx); + display: flex; + color: #888; + margin-top: 15upx; + margin-bottom: 15upx; + + + .prick { + width: calc(100% - 35upx); + } + + .fa-angle-right { + width: 30upx; + font-size: 50upx; + } + } + } + } + } + } + + .print-score { + width: 100%; + height: 280upx; + background: #43CF7C; + border-radius: 20upx; + display: flex; + align-items: center; + font-size: 26upx; + color: #fff; + + .print { + width: 100%; + + .text { + line-height: 50upx; + color: #fff; + } + } + } + + .list-clean { + height: 80upx; + background: #FFFFFF; + padding-left: 20upx; + padding-right: 23upx; + margin-top: 10upx; + border-radius: 15upx; + margin-left: 20upx; + margin-right: 15upx; + padding-top: 18upx; + } + + .item-new-list { + padding-top: 0upx; + padding-left: 30upx; + padding-right: 25upx; + background: #fff; + margin: 0upx 30upx 25upx 30upx; + border-radius: 20upx; + box-shadow: 0 0 10upx 10upx #F5F5F5; + color: #000; + } + + .item-new-list-text { + margin: -10upx 45upx 30upx 45upx; + color: #999; + font-size: 25upx; + width: calc(100% - 90upx); + } + + + .content-color { + color: #fff; + } + + .item-new-list-switch { + float: right; + zoom: 0.6; + position: absolute; + right: 80upx + } +</style> \ No newline at end of file diff --git a/pages/mall/clean-nozzle-detection.vue b/pages/mall/clean-nozzle-detection.vue new file mode 100644 index 0000000..a1e5924 --- /dev/null +++ b/pages/mall/clean-nozzle-detection.vue @@ -0,0 +1,722 @@ +<template> + <view class="order full-height full-width"> + + <view class="uni-tab-bar full-width"> + + <view scroll-y @scrolltolower="loadMore()" class="full-width content" + style="padding-bottom: 20upx; width: 100%;height: 100%; background: #fff;"> + + <view class="order-list"> + <view class="item-new-list"> + <view class="item full-width"> + <label class="text content-color">设备编号</label> + <label class="value content-color"> + <text style="text-align: right;" class="full-width">{{queryPage.machine_id}}</text> + </label> + </view> + </view> + + <view class="item-new-list"> + <view class="item full-width"> + <label class="text content-color">状态</label> + + <label class="value content-color" v-if="list.flag.value == 'Y'"> + <text v-if="list.status.value == 0" style="text-align:right; color: #808080;" + class="full-width">离线</text> + <text v-if="list.status.value == 1 || list.status.value == 2 " + style="text-align:right; color: #5CE6B5;" class="full-width">在线</text> + <text v-if="list.status.value == 3 || list.status.value == 4 || list.status.value == 5 " + style="text-align:right; color: #D43030;" class="full-width">故障</text> + </label> + + <label class="value content-color" v-if="list.flag.value == 'N'"> + <text style="text-align:right; color: #FF8D1A;" + class="full-width">锁定</text> + </label> + </view> + </view> + + + + <view class="item-new-list"> + + <text style="color: #DB4F4F; font-size: 30upx; + width: 100%; text-align: center; margin-top: 60upx; font-weight: 800;"> 喷嘴检测功能正在实现</text> + + <text style="color: #00; font-size: 26upx; + margin-top: 50upx; margin-left: 20upx;">您可以在设备前置操作面版,按置“喷嘴检测”,机器将自动完成检测操作。</text> + + <text style="color: #00; font-size: 26upx; + margin-top: 30upx; margin-left: 20upx;">检测前,需在平台平整放置一张空白纸张。</text> + + <image style=" width: 600upx; margin: auto; margin-top: 0upx;" mode="aspectFit" + src="https://img.colorpark.cn/back/169811966765373ff354908.png" /> + </view> + + + <view class="item-new-list-text">喷嘴检测是机器日常保养必要操作。具体操作如不明白不联系您的专属客服。</view> + + <!-- <view class="item-new-list" style="background:#A49D93 ; padding-top: 40upx; padding-bottom: 40upx;"> + <image style="width: 600upx; margin: auto; margin-top: 20upx;" mode="aspectFit" src="https://img.xiaopiu.com/userImages/img22500018b4741a3b0.png"/> + </view> --> + + </view> + </view> + + <!-- <view class="item-new-list-text" style="margin-top: 30upx;">喷嘴检测是机器日常保养的必要操作。机器必须通电,且有正常连接网络,才能完成远程喷嘴检测操作。</view> + + <view class="save_bt" @click="cleanNozzleDetection()">喷嘴检测</view> --> + + </view> + </view> +</template> + +<script> + import uniIcon from '@/components/uni-icon/uni-icon.vue'; + import uniPopup from '../index/common/uni-popup/uni-popup.vue'; + import Enums from '@/util/Enums'; + import foot from '../../components/foot.vue'; + import mpvuePicker from '../../components/mpvue-picker/mpvuePicker.vue'; + import mpvuePickernew from '../../components/mpvue-picker/mpvuePickernew.vue'; + import logoservice from '@/service/logoservice.js'; + let Base64 = require('js-base64').Base64; + export default { + components: { + uniPopup, + uniIcon, + foot, + mpvuePicker, + mpvuePickernew + }, + computed: { + + }, + data() { + return { + long: false, + isSinglePlatep: true, //是否单机版 或者 配送版 + isShowPullButtom: false, //false不显示true显示 + isOnclickItem: false, //是否点击item + numberlist: [], + LoupanList: [], + SortNumber: 1, + StcokList: [], //设备库存列表 + StcokLists: [], + list: null, + getStockerCount: "", //设置输入个数 + selectItem: null, + mode: 'selector', + pickerValueArray: [], + pickerValueDefault: [0], + type: 'bottom', + //上拉状态 + dataLoadState: { + pullDownRefresh: false, + reachBottom: false + }, + queryPage: { + m: 'Machine/printRecord', + machine_id: null, + page: 1, + per_page: 20, + total: 0, + date: null, //日 + month: null, //月 + year: null, //日 + is_excess: null, //套餐选择类型 + }, + shopQueryPage: { + m: 'Machine/getShop', + }, + attr: null, + //商品库存 + showshareitem: null, + showshareindex: null, + maxnumber: 12, + maxlength: 2, + be_child: 0, //子代理 + Userres_partner_id: null, //总代理 + is_inner: null, //恢复订单打印 + print_type: 0, //默认0标准版 1无限版 + shopList: null, //店铺列表数据 + GoodsItem: null, //货道数据 + stockData: null, //库存数据 + stockDataList: null, //库存列表数据 + inkStatusC: false, + inkStatusM: false, + inkStatusY: false, + inkStatusK: false, + inkStatusW: false, + inkStatusHas: false, + isShowPop: false, + timer: null, //定时器 + intCountTimer: 0, + clear_time: "", //上次清洗时间 + isClickClean: false, //是否点击 + oldMousePos: {}, + oldNodePos: {}, + autoCleanLeft: -40, //左位置 + autoCleanTop: -40, //下位置 + isTouchStart: false, + show_clean: 0, //为1时就显示清洗喷头的入口,为0时就不显示 + countDownTimeCount: 1, //倒计时 + countDownTime: null, //倒计时 + isAutoStartClean: false, //是否自动清洗开始 + shop_id: null + }; + }, + + methods: { + + cleanNozzleDetection() { + + }, + + //清洗历史记录 + cleanNozzleHistory() { + uni.navigateTo({ + url: "/pages/mall/clean-nozzle-history?machineid=" + this.queryPage.machine_id + }) + }, + + //保存店铺 + saveShop() { + + }, + + //调转收益列表 + toLiquidationList() { + uni.navigateTo({ + url: '../mine/Liquidation?machineid=' + this.queryPage.machine_id, + }); + }, + + //字符串转base64 + getStrToBase64(str) { + return Base64.encode(str); + }, + + //取消 + cancel(type) { + this.$refs['showshareinput'].close() + }, + + //获取输入框字符串 + diseaseNameInput(e) { + this.loadStockGoodsList(e.detail.value) + }, + + //更换弹框 + toChangePop(item) { + if (this.$base.Userres.be_child == 1) return; + this.selectItem = item; + this.$nextTick(() => { + this.$refs['showshare'].open() + this.loadStockGoodsList(""); + }) + }, + + previewImageOne(item) { + var current = e; //这里获取到的是一张本地的图片 + }, + + //确定 + onConfirm(e) { + this.shop_id = e.value[0]; + }, + + profit() { + uni.navigateTo({ + url: '../mall/eq-profit?machineid=' + this.list.id, + }); + }, + + toorder() { + uni.navigateTo({ + url: '../mine/order?machineid=' + this.list.id, + }); + }, + + listdetail() { + uni.showLoading({ + title: '正在加载中...' + }); + logoservice.Machinelistdetail({ + m: 'Machine/list', + machine_id: this.queryPage.machine_id + }).then(result => { + this.long = true + uni.stopPullDownRefresh(); + uni.hideLoading(); + if (result[0] != undefined) { + this.list = result[0] + this.shop_id = this.list.shop_id + } + }).catch(err => { + uni.hideLoading(); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + }, + + onChange(e) { + + }, + + onCancel(e) { + + }, + + }, + + //下拉加载 + onPullDownRefresh() { + + }, + + //上拉加载 + onReachBottom() { + + }, + + onLoad(options) { + let that = this; + this.queryPage.machine_id = options.machineid + this.listdetail(); + }, + + onShow() { + //this.machineGetShopList(); + } + }; +</script> + +<style lang="scss"> + page { + width: 100%; + height: 100%; + background: #fff; + } + + .eq-detail-score { + padding: 40upx 0; + width: 100%; + height: 210upx; + margin: 0upx auto; + background: #43CF7C; + border-radius: 20upx; + display: flex; + align-items: center; + font-size: 26upx; + color: #fff; + } + + .green { + background-color: #4FB36B !important; + color: #FFFFFF; + } + + /*无数据 */ + .noData { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + } + + .noData_img { + width: 260upx; + height: 260upx; + display: block; + margin: 0upx auto 102upx; + } + + .noData_title { + text-align: center; + font-size: 36upx; + } + + .noData_text { + margin-top: 35upx; + font-size: 30upx; + font-weight: 400; + } + + .noData_but { + width: 230upx; + height: 70upx; + line-height: 70upx; + text-align: center; + color: #F56364; + margin: 140upx auto 0; + border: 1upx solid #F56364; + border-radius: 35upx; + } + + /* 去除button默认样式 */ + button::after { + border: none; + } + + button { + background-color: transparent; + padding-left: 0; + padding-right: 0; + line-height: inherit; + } + + .lang-open { + transform: rotate(90deg); + transition: transform 0.5s; + } + + .lang-close { + transform: rotateY(0deg); + transition: transform 0.5s; + } + + //2020-11-17 + .content-open { + height: 90upx; + overflow: hidden; + transition: all 0.4s cubic-bezier(0.25, 1.0, 0.25, 1.0); + } + + .content-close { + height: 0; + transition: all 0.4s cubic-bezier(0.25, 1.0, 0.25, 1.0); + } + + .item-open { + height: 40upx; + transition: all 0.4s cubic-bezier(0.25, 1.0, 0.25, 1.0); + } + + .item-close { + opacity: 0; + height: 0; + } + + /*输入框弹框显示 */ + .weui-search-bar { + position: relative; + padding: 8upx 10upx; + display: flex; + height: 135upx; + background: #FFFFFF; + align-items: center; + } + + .weui-search-bar_form { + width: 100%; + border-radius: 50upx; + background: #F6F6F6; + } + + .weui-search-bar_input { + height: 80upx; + line-height: 80upx; + font-size: 25upx; + padding-left: 24upx; + } + + /*底部弹框显示 */ + .uni-pop_show { + display: flex; + flex-direction: column; + } + + .uni-calendar-item--isDay-text.data-v-09f1e40c { + color: #5CE6B5 !important; //5CE6B5 + } + + .uni-calendar-item--isDay.data-v-09f1e40c { + background: #5CE6B5 !important; + color: #fff !important; + } + + .uni-calendar-item--checked.data-v-09f1e40c { + background: #5CE6B5 !important; + color: #fff !important; + } + + .uni-numbox__value { + width: 120upx !important; + } + + page { + width: 100%; + height: 100%; + background: #F5F5F5; + } + + .eq_list_button { + display: flex; + flex-direction: row; + line-height: 60upx; + padding-bottom: 20upx; + } + + .eq_list_button_ul { + flex: 1; + } + + .eq_list_button_li { + margin: auto; + font-size: 24upx; + color: #FFFFFF; + width: 150upx; + font-weight: bold; + text-align: center; + line-height: 60upx; + height: 60upx; + background-color: #5CE6B6; + } + + .uni-swiper-tab { + border-bottom: 1upx solid #F5F5F5; + } + + .clean-bt { + border-radius: 50%; + width: 200upx; + height: 200upx; + bottom: 160upx; + right: 20upx; + position: fixed; + font-size: 27upx; + text-align: center; + line-height: 130upx; + z-index: 99991; + justify-content: center; + align-items: center; + } + + .order { + width: 100%; + height: 100%; + background-color: #fff; + + .uni-tab-bar { + height: auto !important; + + .uni-swiper-tab { + position: fixed; + top: var(--window-top); + z-index: 999; + width: 100%; + line-height: 85upx; + height: 85upx; + + .swiper-tab-list { + width: calc(100% / 3); + font-size: 30upx; + } + } + + .active { + color: #43CF7C; + } + } + + .way-list { + margin: 0 20upx; + padding-top: 20upx; + border-radius: 10upx; + + .topBox { + width: calc(100% - 60upx); + margin-left: 30upx; + margin-top: 15upx; + justify-content: center; + } + + .topLittleBOX-1 { + font-size: 26upx; + width: 120upx; + color: #333; + overflow: text-align; + } + + .topLittleBOX-2 { + padding-left: 20upx; + padding-top: auto; + padding-bottom: auto; + display: flex; + vertical-align: middle; + flex-direction: row; + align-items: center; + width: calc(100% - 120upx); + position: relative; + } + + .row-1 { + height: 30upx; + background-color: #43CF7C; + border-radius: 20upx; + width: 0upx; + transition: width 1.5s linear; + } + + .rowText { + margin-left: 10upx; + font-size: 26upx; + color: #333; + float: right; + } + + .way-item { + background: #FFFFFF; + border-radius: 10upx; + margin-bottom: 20upx; + } + + .way { + height: 120upx; + min-height: 90upx; + display: flex; + align-items: center; + font-size: 28upx; + + .text { + width: 250upx; + padding-left: 20upx; + color: #fff; + } + + .value { + width: calc(100% - 280upx); + display: flex; + + .prick { + width: calc(100% - 40upx); + } + + .fa-angle-right { + width: 40upx; + font-size: 50upx; + } + } + } + } + + .content { + padding-top: 10upx; + + .order-list { + min-height: 350upx; + width: 100%; + border-radius: 10upx; + + .item { + min-height: 70upx; + display: flex; + align-items: center; + font-size: 26upx; + border-bottom: 1upx solid #F5F5F5; + + .text { + width: 250upx; + color: #000; + font-size: 29upx; + } + + .value { + width: calc(100% - 120upx); + display: flex; + color: #888; + margin-top: 15upx; + margin-bottom: 15upx; + + + .prick { + width: calc(100% - 35upx); + } + + .fa-angle-right { + width: 30upx; + font-size: 50upx; + } + } + } + } + } + } + + .print-score { + width: 100%; + height: 280upx; + background: #43CF7C; + border-radius: 20upx; + display: flex; + align-items: center; + font-size: 26upx; + color: #fff; + + .print { + width: 100%; + + .text { + line-height: 50upx; + color: #fff; + } + } + } + + .list-clean { + height: 80upx; + background: #FFFFFF; + padding-left: 20upx; + padding-right: 23upx; + margin-top: 10upx; + border-radius: 15upx; + margin-left: 20upx; + margin-right: 15upx; + padding-top: 18upx; + } + + .item-new-list { + padding-top: 0upx; + padding-left: 30upx; + padding-right: 25upx; + background: #fff; + margin: 0upx 30upx 25upx 30upx; + border-radius: 20upx; + box-shadow: 0 0 10upx 10upx #F5F5F5; + color: #000; + display: flex; + flex-direction: column; + } + + .item-new-list-text { + margin: -10upx 45upx 30upx 45upx; + color: #999; + font-size: 25upx; + width: calc(100% - 90upx); + } + + .content-color { + color: #fff; + } + + .item-new-list-switch { + float: right; + zoom: 0.6; + position: absolute; + right: 80upx + } + + .save_bt { + height: 100upx; + width: calc(100% - 60upx); + margin-left: 30upx; + background: #191931; + text-align: center; + line-height: 100upx; + color: #fff; + margin-top: 100upx; + border-radius: 20upx; + } +</style> \ No newline at end of file diff --git a/pages/mall/clean-nozzle-history.vue b/pages/mall/clean-nozzle-history.vue new file mode 100644 index 0000000..f3326fb --- /dev/null +++ b/pages/mall/clean-nozzle-history.vue @@ -0,0 +1,582 @@ +<template> + <view class="order full-height full-width"> + <view class="uni-tab-bar full-width"> + <view scroll-y @scrolltolower="loadMore()" class="full-width content" + style="margin-bottom: 20upx; overflow: auto; width: 100%;height: 100%; background: #fff;"> + + <view class="order-list"> + <view class="item-new-list"> + <view class="item full-width"> + <label class="text content-color">设备编号</label> + <label class="value content-color"> + <text style="text-align: right;" class="full-width">{{queryPage.machine_id}}</text> + </label> + </view> + </view> + + + + + <view class="item-new-list" v-if="list"> + <view v-for="(item, index) in list" :key="index"> + <view class="item full-width"> + <label class="text content-color">{{item.create_time}}</label> + <label class="value content-color"> + <text v-if="item.status.value == 0" style="text-align: right; color: #E72C31;" + class="full-width"> 失败</text> + <text v-if="item.status.value == 1" style="text-align: right; color: #5CE6B5;" + class="full-width"> 成功</text> + </label> + </view> + </view> + </view> + <view class="item-new-list" v-if="list.length == 0 && long"> + <view style="height: 140upx; text-align: center; width: 100%; line-height: 140upx; ">暂时还没清洗日志 + </view> + </view> + + + </view> + </view> + </view> + </view> +</template> + +<script> + import uniIcon from '@/components/uni-icon/uni-icon.vue'; + import uniPopup from '../index/common/uni-popup/uni-popup.vue'; + import Enums from '@/util/Enums'; + import foot from '../../components/foot.vue'; + import mpvuePicker from '../../components/mpvue-picker/mpvuePicker.vue'; + import mpvuePickernew from '../../components/mpvue-picker/mpvuePickernew.vue'; + import logoservice from '@/service/logoservice.js'; + let Base64 = require('js-base64').Base64; + export default { + components: { + uniPopup, + uniIcon, + foot, + mpvuePicker, + mpvuePickernew + }, + computed: { + + }, + data() { + return { + //上拉状态 + dataLoadState: { + pullDownRefresh: false, + reachBottom: false + }, + queryPage: { + m: 'NozzleCleanLog/list', + machine_id: null, + }, + show_clean: 0, //为1时就显示清洗喷头的入口,为0时就不显示 + shop_id: null, + long: false, + list:[], + + }; + }, + + methods: { + + + listdetail() { + uni.showLoading({ + title: '正在加载中...' + }); + logoservice.Machinelistdetail({ + m: 'NozzleCleanLog/list', + machine_id: this.queryPage.machine_id + }).then(result => { + uni.hideLoading(); + this.long = true + this.list = result.data + }).catch(err => { + this.long = true + uni.hideLoading(); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + }, + + //格式化时间 + dateFormat(time) { + try { + var dt = new Date(time.replace(/-/g, '/')); + var y = dt.getFullYear(); + var m = dt.getMonth() + 1; + var d = dt.getDate(); + return y + '年' + m + '月' + d + '日'; + } catch (e) { + // 错误处理代码片段 + } + if (time == undefined) { + return ""; + } + return time; + }, + + + onChange(e) { + + }, + + onCancel(e) { + + }, + + + }, + + //下拉加载 + onPullDownRefresh() { + + }, + + //上拉加载 + onReachBottom() { + + }, + + onLoad(options) { + this.queryPage.machine_id = options.machineid + this.listdetail(); + }, + + onShow() { + + } + }; +</script> + +<style lang="scss"> + page { + width: 100%; + height: 100%; + background: #fff; + } + + .eq-detail-score { + padding: 40upx 0; + width: 100%; + height: 210upx; + margin: 0upx auto; + background: #43CF7C; + border-radius: 20upx; + display: flex; + align-items: center; + font-size: 26upx; + color: #fff; + } + + .green { + background-color: #4FB36B !important; + color: #FFFFFF; + } + + /*无数据 */ + .noData { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + } + + .noData_img { + width: 260upx; + height: 260upx; + display: block; + margin: 0upx auto 102upx; + } + + .noData_title { + text-align: center; + font-size: 36upx; + } + + .noData_text { + margin-top: 35upx; + font-size: 30upx; + font-weight: 400; + } + + .noData_but { + width: 230upx; + height: 70upx; + line-height: 70upx; + text-align: center; + color: #F56364; + margin: 140upx auto 0; + border: 1upx solid #F56364; + border-radius: 35upx; + } + + /* 去除button默认样式 */ + button::after { + border: none; + } + + button { + background-color: transparent; + padding-left: 0; + padding-right: 0; + line-height: inherit; + } + + .lang-open { + transform: rotate(90deg); + transition: transform 0.5s; + } + + .lang-close { + transform: rotateY(0deg); + transition: transform 0.5s; + } + + //2020-11-17 + .content-open { + height: 90upx; + overflow: hidden; + transition: all 0.4s cubic-bezier(0.25, 1.0, 0.25, 1.0); + } + + .content-close { + height: 0; + transition: all 0.4s cubic-bezier(0.25, 1.0, 0.25, 1.0); + } + + .item-open { + height: 40upx; + transition: all 0.4s cubic-bezier(0.25, 1.0, 0.25, 1.0); + } + + .item-close { + opacity: 0; + height: 0; + } + + /*输入框弹框显示 */ + .weui-search-bar { + position: relative; + padding: 8upx 10upx; + display: flex; + height: 135upx; + background: #FFFFFF; + align-items: center; + } + + .weui-search-bar_form { + width: 100%; + border-radius: 50upx; + background: #F6F6F6; + } + + .weui-search-bar_input { + height: 80upx; + line-height: 80upx; + font-size: 25upx; + padding-left: 24upx; + } + + /*底部弹框显示 */ + .uni-pop_show { + display: flex; + flex-direction: column; + } + + .uni-calendar-item--isDay-text.data-v-09f1e40c { + color: #5CE6B5 !important; //5CE6B5 + } + + .uni-calendar-item--isDay.data-v-09f1e40c { + background: #5CE6B5 !important; + color: #fff !important; + } + + .uni-calendar-item--checked.data-v-09f1e40c { + background: #5CE6B5 !important; + color: #fff !important; + } + + .uni-numbox__value { + width: 120upx !important; + } + + page { + width: 100%; + height: 100%; + background: #F5F5F5; + } + + .eq_list_button { + display: flex; + flex-direction: row; + line-height: 60upx; + padding-bottom: 20upx; + } + + .eq_list_button_ul { + flex: 1; + } + + .eq_list_button_li { + margin: auto; + font-size: 24upx; + color: #FFFFFF; + width: 150upx; + font-weight: bold; + text-align: center; + line-height: 60upx; + height: 60upx; + background-color: #5CE6B6; + } + + .uni-swiper-tab { + border-bottom: 1upx solid #F5F5F5; + } + + .clean-bt { + border-radius: 50%; + width: 200upx; + height: 200upx; + bottom: 160upx; + right: 20upx; + position: fixed; + font-size: 27upx; + text-align: center; + line-height: 130upx; + z-index: 99991; + justify-content: center; + align-items: center; + } + + .order { + width: 100%; + height: 100%; + background-color: #fff; + + .uni-tab-bar { + height: auto !important; + + .uni-swiper-tab { + position: fixed; + top: var(--window-top); + z-index: 999; + width: 100%; + line-height: 85upx; + height: 85upx; + + .swiper-tab-list { + width: calc(100% / 3); + font-size: 30upx; + } + } + + .active { + color: #43CF7C; + } + } + + .way-list { + margin: 0 20upx; + padding-top: 20upx; + border-radius: 10upx; + + .topBox { + width: calc(100% - 60upx); + margin-left: 30upx; + margin-top: 15upx; + justify-content: center; + } + + .topLittleBOX-1 { + font-size: 26upx; + width: 120upx; + color: #333; + overflow: text-align; + } + + .topLittleBOX-2 { + padding-left: 20upx; + padding-top: auto; + padding-bottom: auto; + display: flex; + vertical-align: middle; + flex-direction: row; + align-items: center; + width: calc(100% - 120upx); + position: relative; + } + + .row-1 { + height: 30upx; + background-color: #43CF7C; + border-radius: 20upx; + width: 0upx; + transition: width 1.5s linear; + } + + .rowText { + margin-left: 10upx; + font-size: 26upx; + color: #333; + float: right; + } + + .way-item { + background: #FFFFFF; + border-radius: 10upx; + margin-bottom: 20upx; + } + + .way { + height: 120upx; + min-height: 90upx; + display: flex; + align-items: center; + font-size: 28upx; + + .text { + width: 250upx; + padding-left: 20upx; + color: #fff; + } + + .value { + width: calc(100% - 280upx); + display: flex; + + .prick { + width: calc(100% - 40upx); + } + + .fa-angle-right { + width: 40upx; + font-size: 50upx; + } + } + } + } + + .content { + padding-top: 10upx; + + .order-list { + min-height: 350upx; + width: 100%; + border-radius: 10upx; + + .item { + min-height: 70upx; + display: flex; + align-items: center; + font-size: 26upx; + border-bottom: 1upx solid #F5F5F5; + + .text { + width: 400upx; + color: #000; + font-size: 29upx; + } + + .value { + width: calc(100% - 160upx); + display: flex; + color: #888; + margin-top: 15upx; + margin-bottom: 15upx; + + + .prick { + width: calc(100% - 35upx); + } + + .fa-angle-right { + width: 30upx; + font-size: 50upx; + } + } + } + } + } + } + + .print-score { + width: 100%; + height: 280upx; + background: #43CF7C; + border-radius: 20upx; + display: flex; + align-items: center; + font-size: 26upx; + color: #fff; + + .print { + width: 100%; + + .text { + line-height: 50upx; + color: #fff; + } + } + } + + .list-clean { + height: 80upx; + background: #FFFFFF; + padding-left: 20upx; + padding-right: 23upx; + margin-top: 10upx; + border-radius: 15upx; + margin-left: 20upx; + margin-right: 15upx; + padding-top: 18upx; + } + + .item-new-list { + padding-top: 0upx; + padding-left: 30upx; + padding-right: 25upx; + background: #fff; + margin: 0upx 30upx 25upx 30upx; + border-radius: 20upx; + box-shadow: 0 0 10upx 10upx #F5F5F5; + color: #000; + } + + .item-new-list-text { + margin: -10upx 45upx 30upx 45upx; + color: #999; + font-size: 25upx; + width: calc(100% - 90upx); + } + + .content-color { + color: #fff; + } + + .item-new-list-switch { + float: right; + zoom: 0.6; + position: absolute; + right: 80upx + } + + .save_bt { + height: 100upx; + width: calc(100% - 60upx); + margin-left: 30upx; + background: #191931; + text-align: center; + line-height: 100upx; + color: #fff; + margin-top: 100upx; + border-radius: 20upx; + } +</style> \ No newline at end of file diff --git a/pages/mall/clean-nozzle.vue b/pages/mall/clean-nozzle.vue new file mode 100644 index 0000000..456165d --- /dev/null +++ b/pages/mall/clean-nozzle.vue @@ -0,0 +1,939 @@ +<template> + <view class="order full-height full-width"> + + <view class="uni-tab-bar full-width"> + + <view scroll-y @scrolltolower="loadMore()" class="full-width content" + style="margin-bottom: 20upx; overflow: auto; width: 100%;height: 100%; background: #fff;"> + <!-- 机器 --> + <view class="order-list"> + <view class="item-new-list"> + <view class="item full-width"> + <label class="text content-color">设备编号</label> + <label class="value content-color"> + <text style="text-align: right;" class="full-width">{{queryPage.machine_id}}</text> + </label> + </view> + </view> + + <view class="item-new-list" v-if="list"> + <view class="item full-width"> + <label class="text content-color">状态</label> + <label class="value content-color" v-if="list.flag.value == 'Y'"> + <text v-if="list.status.value == 0" style="text-align:right; color: #808080;" + class="full-width">离线</text> + <text v-if="list.status.value == 1 || list.status.value == 2 " style="text-align:right; color: #5CE6B5;" + class="full-width">在线</text> + <text v-if="list.status.value == 3 || list.status.value == 4 || list.status.value == 5 " style="text-align:right; color: #D43030;" + class="full-width">故障</text> + </label> + <label class="value content-color" v-if="list.flag.value == 'N'"> + <text style="text-align:right; color: #FF8D1A;" + class="full-width">锁定</text> + </label> + </view> + + <view class="item full-width" @click="cleanNozzleHistory()"> + <label class="text content-color">最后清洗</label> + <label class="value content-color"> + <view style="text-align: right;line-height: 50upx;" class="full-width"> + {{ list.clear_time != null ? list.clear_time : "" }}</view> + <label class="fa fa-angle-right align-right sub-color"></label> + </label> + </view> + </view> + + + <view style="margin-top: 30upx; + border-radius: 20upx; + width: calc(100% - 60upx); + background: #fff; + margin: 0upx 30upx 10upx 30upx; + border-radius: 20upx; + box-shadow: 0 0 10upx 10upx #F5F5F5;"> + <img src="https://img.colorpark.cn/back/169811951965373f5f53498.png" + style="width: 300upx;margin: auto; display: block;" mode="aspectFit"> + </view> + + </view> + </view> + + <view class="item-new-list-text" style="margin-top: 30upx;">清洗喷头是防止喷头堵塞和填充缺失墨水的必要操作。机器必须通电,且有正常连接网络,才能完成远程清洗喷头操作</view> + + <view class="save_bt" @click="saveCleanNozzle()" v-if="list" + :style="{background: list.status.value == 0 ? '#999' : '#191931' }" >清洗喷头</view> + + <uni-popup ref="cleanCountDown" type="bottom" :maskClick="false"> + <view style="width: 100%; height: 600upx; margin: auto;"> + <view style="background: #F9F9F9;width: 100%; height: 100%; border-radius: 20upx 20upx 0upx 0upx; + align-items: center; + display: flex; + flex-direction: column;"> + <view + style="margin-top:220upx; color: rgba(67, 207, 124, 1); font-size: 60upx; font-weight: 800 "> + {{countDownTimeCount}} + </view> + <view style="margin-top: 80upx; font-size: 26upx; color: #999; ">请稍后 </view> + <view style="margin-top: 20upx; font-size: 26upx; color: #999; "> 正在清洗中,预计需要一分钟</view> + </view> + </view> + </uni-popup> + + + </view> + </view> +</template> + +<script> + import uniIcon from '@/components/uni-icon/uni-icon.vue'; + import uniPopup from '../index/common/uni-popup/uni-popup.vue'; + import Enums from '@/util/Enums'; + import foot from '../../components/foot.vue'; + import mpvuePicker from '../../components/mpvue-picker/mpvuePicker.vue'; + import mpvuePickernew from '../../components/mpvue-picker/mpvuePickernew.vue'; + import logoservice from '@/service/logoservice.js'; + let Base64 = require('js-base64').Base64; + export default { + components: { + uniPopup, + uniIcon, + foot, + mpvuePicker, + mpvuePickernew + }, + computed: { + + }, + data() { + return { + long: false, + isSinglePlatep: true, //是否单机版 或者 配送版 + isShowPullButtom: false, //false不显示true显示 + isOnclickItem: false, //是否点击item + numberlist: [], + LoupanList: [], + SortNumber: 1, + StcokList: [], //设备库存列表 + StcokLists: [], + list: null, + getStockerCount: "", //设置输入个数 + selectItem: null, + mode: 'selector', + pickerValueArray: [], + pickerValueDefault: [0], + type: 'bottom', + //上拉状态 + dataLoadState: { + pullDownRefresh: false, + reachBottom: false + }, + queryPage: { + m: 'Machine/printRecord', + machine_id: null, + page: 1, + per_page: 20, + total: 0, + date: null, //日 + month: null, //月 + year: null, //日 + is_excess: null, //套餐选择类型 + }, + shopQueryPage: { + m: 'Machine/getShop', + }, + attr: null, + //商品库存 + showshareitem: null, + showshareindex: null, + //打印年月日 + printingPickerValueArray: [], + printingpickerValueDefault: [0], + maxnumber: 12, + maxlength: 2, + be_child: 0, //子代理 + Userres_partner_id: null, //总代理 + is_inner: null, //恢复订单打印 + print_type: 0, //默认0标准版 1无限版 + shopList: null, //店铺列表数据 + GoodsItem: null, //货道数据 + stockData: null, //库存数据 + stockDataList: null, //库存列表数据 + inkStatusC: false, + inkStatusM: false, + inkStatusY: false, + inkStatusK: false, + inkStatusW: false, + inkStatusHas: false, + isShowPop: false, + timer: null, //定时器 + intCountTimer: 0, + clear_time: "", //上次清洗时间 + isClickClean: false, //是否点击 + oldMousePos: {}, + oldNodePos: {}, + autoCleanLeft: -40, //左位置 + autoCleanTop: -40, //下位置 + isTouchStart: false, + show_clean: 0, //为1时就显示清洗喷头的入口,为0时就不显示 + countDownTimeCount: 1, //倒计时 + countDownTime: null, //倒计时 + isAutoStartClean: false, //是否自动清洗开始 + shop_id: null, + isClickClean:false, + }; + }, + + methods: { + + //清洗历史记录 + cleanNozzleHistory() { + uni.navigateTo({ + url: "/pages/mall/clean-nozzle-history?machineid=" + this.queryPage.machine_id + }) + }, + + //添加店铺 + addShop() { + uni.navigateTo({ + url: "/pages/store/shopdetails" + }) + }, + + + //清洗喷头 + saveCleanNozzle() { + if(this.list.status.value == 0){ + uni.showToast({ + title: "打印机离线", + duration: 1000, + icon: 'error' + }) + return; + } + if (this.isClickClean) { + return; + } + this.isClickClean = true; + + uni.showLoading({ + title: '清洗中...', + }) + this.intCountTimer = 0; + this.countDownTimeCount = 1; + logoservice.MachineSavePartnerStock({ + m: 'Machine/clearHead', + machine_id: this.queryPage.machine_id, + }).then(result => { + this.autoClick() + }).catch(err => { + this.cleanTimeData(); + uni.showToast({ + title: err.msg, + duration: 1000, + icon: "none", + }) + }) + }, + + + //5秒一次定时器 + autoClick() { + this.$refs['cleanCountDown'].open(); + this.isAutoStartClean = true; + let that = this; + this.timer = setInterval(function() { + that.getCleanStatus(); + }, 5000); + this.countDownTime = setInterval(function() { + that.countDownTimeCount++; + }, 1000); + }, + + + //获取状态值 + getCleanStatus() { + logoservice.MachineSavePartnerStock({ + m: 'Machine/getClearHeadStatus', + machine_id: this.queryPage.machine_id, + }).then(result => { + if (this.countDownTimeCount >= 60) { + this.cleanTimeData(); + uni.showToast({ + title: "清洗成功", + duration: 2000 + }) + } + let clear_status = result.clear_status.value; + if (clear_status == 0) { + this.cleanTimeData(); + uni.showToast({ + title: "清洗成功", + duration: 2000 + }) + } + }).catch(err => { + + }) + }, + + + //清除计时器数据 + cleanTimeData() { + this.isAutoStartClean = false; + clearInterval(this.timer); + this.timer = null; + clearInterval(this.countDownTime); + this.countDownTime = null; + this.intCountTimer = 0; + this.isClickClean = false; + uni.hideLoading(); + this.$refs['cleanCountDown'].close(); + this.countDownTimeCount = 1; + }, + + //获取店铺名称 + category(id) { + var dataname = ''; + if (this.shopList) { + this.shopList.forEach(item => { + if (item.id == id) { + dataname = item.short_name + } + }); + } + return dataname + }, + + //调转收益列表 + toLiquidationList() { + uni.navigateTo({ + url: '../mine/Liquidation?machineid=' + this.queryPage.machine_id, + }); + }, + + //字符串转base64 + getStrToBase64(str) { + return Base64.encode(str); + }, + + //取消 + cancel(type) { + this.$refs['showshareinput'].close() + }, + + //获取输入框字符串 + diseaseNameInput(e) { + this.loadStockGoodsList(e.detail.value) + }, + + //更换弹框 + toChangePop(item) { + if (this.$base.Userres.be_child == 1) return; + this.selectItem = item; + this.$nextTick(() => { + this.$refs['showshare'].open() + this.loadStockGoodsList(""); + }) + }, + + previewImageOne(item) { + var current = e; //这里获取到的是一张本地的图片 + }, + + setData(obj) { + let that = this; + let keys = []; + let val, data; + Object.keys(obj).forEach(function(key) { + keys = key.split('.'); + val = obj[key]; + data = that.$data; + keys.forEach(function(key2, index) { + if (index + 1 == keys.length) { + that.$set(data, key2, val); + } else { + if (!data[key2]) { + that.$set(data, key2, {}); + } + } + data = data[key2]; + }) + }); + }, + + //店铺 + showPicker(item) { + this.pickerValueArray = this.shopList + this.pickerValueArray.filter(item => { + item.label = item.short_name + item.value = item.id + }); + this.$refs.mpvuePicker.show(); + }, + + //确定 + onConfirm(e) { + this.shop_id = e.value[0]; + }, + + profit() { + uni.navigateTo({ + url: '../mall/eq-profit?machineid=' + this.list.id, + }); + }, + + toorder() { + uni.navigateTo({ + url: '../mine/order?machineid=' + this.list.id, + }); + }, + + listdetail() { + uni.showLoading({ + title: '正在加载中...' + }); + logoservice.Machinelistdetail({ + m: 'Machine/list', + machine_id: this.queryPage.machine_id + }).then(result => { + this.long = true + uni.stopPullDownRefresh(); + uni.hideLoading(); + if (result[0] != undefined) { + this.list = result[0] + this.shop_id = this.list.shop_id + } + }).catch(err => { + uni.hideLoading(); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + }, + + loadGoodsList(direction) { + if (this.dataLoadState.pullDownRefresh || this.dataLoadState.reachBottom) return; + uni.showLoading({ + title: '正在加载中...' + }) + this.dataLoadState.pullDownRefresh = direction === Enums.DATA_DIRECTION.UP; + this.dataLoadState.reachBottom = direction === Enums.DATA_DIRECTION.DOWN; + if (this.dataLoadState.reachBottom) { + if (Math.ceil(this.queryPage.total / this.queryPage.per_page) < this.queryPage.page) { + return setTimeout(() => { + uni.showToast({ + title: '没有更多数据了!', + icon: 'none' + }); + }, 500); + } + } + logoservice.Machinelist(this.queryPage).then(result => { + this.long = true + let queryList = result.data.data + //触底更新时,当前列表+查询结果集 + let newList = this.LoupanList.concat(queryList) + this.LoupanList = newList + //分页对象处理 + this.queryPage.total = result.data.total; + this.queryPage.per_page = result.data.per_page; + //停止当前页面下拉刷新 + if (this.dataLoadState.pullDownRefresh) uni.stopPullDownRefresh(); + //数据加载状态处理 false + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + uni.hideLoading(); + }).catch(err => { + //停止当前页面下拉刷新 + if (this.dataLoadState.pullDownRefresh) uni.stopPullDownRefresh(); + //数据加载状态处理 false + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + uni.hideLoading(); + }); + }, + + //获取店铺数据 + machineGetShopList() { + logoservice.MachineGetShop(this.shopQueryPage).then(result => { + if (result != null && result != undefined) { + this.shopList = result; + } + }).catch(err => { + + }); + }, + + onChange(e) { + + }, + + onCancel(e) { + + }, + + //goodsItem加载全部交易类型数据 + getGoodsAttrList() { + logoservice.MoneystatementList({ + m: 'Machine/printRecord', + machine_id: this.queryPage.machine_id, + sub: 1 + }).then(result => { + + }).catch(res => { + uni.showToast({ + title: res.msg ? res.msg : '未查到交易类型选择', + icon: 'none' + }); + }); + }, + }, + + //下拉加载 + onPullDownRefresh() { + + }, + + //上拉加载 + onReachBottom() { + + }, + + onLoad(options) { + let that = this; + this.queryPage.machine_id = options.machineid + this.listdetail(); + }, + + onShow() { + this.machineGetShopList(); + } + }; +</script> + +<style lang="scss"> + page { + width: 100%; + height: 100%; + background: #fff; + } + + .eq-detail-score { + padding: 40upx 0; + width: 100%; + height: 210upx; + margin: 0upx auto; + background: #43CF7C; + border-radius: 20upx; + display: flex; + align-items: center; + font-size: 26upx; + color: #fff; + } + + .green { + background-color: #4FB36B !important; + color: #FFFFFF; + } + + /*无数据 */ + .noData { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + } + + .noData_img { + width: 260upx; + height: 260upx; + display: block; + margin: 0upx auto 102upx; + } + + .noData_title { + text-align: center; + font-size: 36upx; + } + + .noData_text { + margin-top: 35upx; + font-size: 30upx; + font-weight: 400; + } + + .noData_but { + width: 230upx; + height: 70upx; + line-height: 70upx; + text-align: center; + color: #F56364; + margin: 140upx auto 0; + border: 1upx solid #F56364; + border-radius: 35upx; + } + + /* 去除button默认样式 */ + button::after { + border: none; + } + + button { + background-color: transparent; + padding-left: 0; + padding-right: 0; + line-height: inherit; + } + + .lang-open { + transform: rotate(90deg); + transition: transform 0.5s; + } + + .lang-close { + transform: rotateY(0deg); + transition: transform 0.5s; + } + + //2020-11-17 + .content-open { + height: 90upx; + overflow: hidden; + transition: all 0.4s cubic-bezier(0.25, 1.0, 0.25, 1.0); + } + + .content-close { + height: 0; + transition: all 0.4s cubic-bezier(0.25, 1.0, 0.25, 1.0); + } + + .item-open { + height: 40upx; + transition: all 0.4s cubic-bezier(0.25, 1.0, 0.25, 1.0); + } + + .item-close { + opacity: 0; + height: 0; + } + + /*输入框弹框显示 */ + .weui-search-bar { + position: relative; + padding: 8upx 10upx; + display: flex; + height: 135upx; + background: #FFFFFF; + align-items: center; + } + + .weui-search-bar_form { + width: 100%; + border-radius: 50upx; + background: #F6F6F6; + } + + .weui-search-bar_input { + height: 80upx; + line-height: 80upx; + font-size: 25upx; + padding-left: 24upx; + } + + /*底部弹框显示 */ + .uni-pop_show { + display: flex; + flex-direction: column; + } + + .uni-calendar-item--isDay-text.data-v-09f1e40c { + color: #5CE6B5 !important; //5CE6B5 + } + + .uni-calendar-item--isDay.data-v-09f1e40c { + background: #5CE6B5 !important; + color: #fff !important; + } + + .uni-calendar-item--checked.data-v-09f1e40c { + background: #5CE6B5 !important; + color: #fff !important; + } + + .uni-numbox__value { + width: 120upx !important; + } + + page { + width: 100%; + height: 100%; + background: #F5F5F5; + } + + .eq_list_button { + display: flex; + flex-direction: row; + line-height: 60upx; + padding-bottom: 20upx; + } + + .eq_list_button_ul { + flex: 1; + } + + .eq_list_button_li { + margin: auto; + font-size: 24upx; + color: #FFFFFF; + width: 150upx; + font-weight: bold; + text-align: center; + line-height: 60upx; + height: 60upx; + background-color: #5CE6B6; + } + + .uni-swiper-tab { + border-bottom: 1upx solid #F5F5F5; + } + + .clean-bt { + border-radius: 50%; + width: 200upx; + height: 200upx; + bottom: 160upx; + right: 20upx; + position: fixed; + font-size: 27upx; + text-align: center; + line-height: 130upx; + z-index: 99991; + justify-content: center; + align-items: center; + } + + .order { + width: 100%; + height: 100%; + background-color: #fff; + + .uni-tab-bar { + height: auto !important; + + .uni-swiper-tab { + position: fixed; + top: var(--window-top); + z-index: 999; + width: 100%; + line-height: 85upx; + height: 85upx; + + .swiper-tab-list { + width: calc(100% / 3); + font-size: 30upx; + } + } + + .active { + color: #43CF7C; + } + } + + .way-list { + margin: 0 20upx; + padding-top: 20upx; + border-radius: 10upx; + + .topBox { + width: calc(100% - 60upx); + margin-left: 30upx; + margin-top: 15upx; + justify-content: center; + } + + .topLittleBOX-1 { + font-size: 26upx; + width: 120upx; + color: #333; + overflow: text-align; + } + + .topLittleBOX-2 { + padding-left: 20upx; + padding-top: auto; + padding-bottom: auto; + display: flex; + vertical-align: middle; + flex-direction: row; + align-items: center; + width: calc(100% - 120upx); + position: relative; + } + + .row-1 { + height: 30upx; + background-color: #43CF7C; + border-radius: 20upx; + width: 0upx; + transition: width 1.5s linear; + } + + .rowText { + margin-left: 10upx; + font-size: 26upx; + color: #333; + float: right; + } + + .way-item { + background: #FFFFFF; + border-radius: 10upx; + margin-bottom: 20upx; + } + + .way { + height: 120upx; + min-height: 90upx; + display: flex; + align-items: center; + font-size: 28upx; + + .text { + width: 250upx; + padding-left: 20upx; + color: #fff; + } + + .value { + width: calc(100% - 280upx); + display: flex; + + .prick { + width: calc(100% - 40upx); + } + + .fa-angle-right { + width: 40upx; + font-size: 50upx; + } + } + } + } + + .content { + padding-top: 10upx; + + .order-list { + min-height: 350upx; + width: 100%; + border-radius: 10upx; + + .item { + min-height: 70upx; + display: flex; + align-items: center; + font-size: 26upx; + border-bottom: 1upx solid #F5F5F5; + + .text { + width: 250upx; + color: #000; + font-size: 29upx; + } + + .value { + width: calc(100% - 120upx); + display: flex; + color: #888; + margin-top: 15upx; + margin-bottom: 15upx; + + + .prick { + width: calc(100% - 35upx); + } + + .fa-angle-right { + width: 30upx; + font-size: 50upx; + } + } + } + } + } + } + + .print-score { + width: 100%; + height: 280upx; + background: #43CF7C; + border-radius: 20upx; + display: flex; + align-items: center; + font-size: 26upx; + color: #fff; + + .print { + width: 100%; + + .text { + line-height: 50upx; + color: #fff; + } + } + } + + .list-clean { + height: 80upx; + background: #FFFFFF; + padding-left: 20upx; + padding-right: 23upx; + margin-top: 10upx; + border-radius: 15upx; + margin-left: 20upx; + margin-right: 15upx; + padding-top: 18upx; + } + + .item-new-list { + padding-top: 0upx; + padding-left: 30upx; + padding-right: 25upx; + background: #fff; + margin: 0upx 30upx 25upx 30upx; + border-radius: 20upx; + box-shadow: 0 0 10upx 10upx #F5F5F5; + color: #000; + } + + .item-new-list-text { + margin: -10upx 45upx 30upx 45upx; + color: #999; + font-size: 25upx; + width: calc(100% - 90upx); + } + + .content-color { + color: #fff; + } + + .item-new-list-switch { + float: right; + zoom: 0.6; + position: absolute; + right: 80upx + } + + .save_bt { + height: 100upx; + width: calc(100% - 60upx); + margin-left: 30upx; + background: #191931; + text-align: center; + line-height: 100upx; + color: #fff; + margin-top: 100upx; + border-radius: 20upx; + } +</style> \ No newline at end of file diff --git a/pages/mall/default_language.vue b/pages/mall/default_language.vue new file mode 100644 index 0000000..63001f8 --- /dev/null +++ b/pages/mall/default_language.vue @@ -0,0 +1,597 @@ +<template> + <view class="order full-height full-width"> + + <view class="uni-tab-bar full-width"> + + <view scroll-y @scrolltolower="loadMore()" class="full-width content" + style="margin-bottom: 20upx; overflow: auto; width: 100%;height: 100%; background: #fff;"> + + <view class="order-list"> + + <view class="item-new-list"> + <view class="item full-width"> + <label class="text content-color">设备编号</label> + <label class="value content-color"> + <text style="text-align: right;" class="full-width">{{queryPage.machine_id}}</text> + </label> + </view> + </view> + + <view class="item-new-list-text">启用对应功能,可对设备开启相应功能,以便更好体验设备</view> + + <view class="item-new-list"> + <view class="item full-width" style="margin-top: 5upx;" @click="showLanguage()"> + <label class="text content-color">默认语言</label> + <label class="value content-color"> + <view class="full-width" style="width: 320upx; + height: 50upx; + border-radius: 8upx; + background: #fff; position: absolute;right: 30upx; + margin-top: -25upx; "> + <view style=" color: #999;top: 10upx; width: 220upx; + text-align: end; line-height: 50upx; display: flex; justify-content: flex-end;margin-left: 35upx;">{{languageName}}</view> + <span class="iconfont icon-xiala" + style="font-size: 20upx; color: #999; position: relative; float: right; right: 30upx; margin-top: -35upx;"></span> + </view> + </label> + </view> + </view> + + <view class="item-new-list-text">仅对H5版本生效,开启对应的语言,设备定制端将支持当前语言</view> + + </view> + </view> + + <!-- 语言选择 --> + <mpvue-picker ref="mpvuePicker" :themeColor="'#53B2B0'" :mode="mode" + :pickerValueDefault="pickerValueDefault" @onChange="onChange" @onCancel="onCancel" + :pickerValueArray="pickerValueArray" @onConfirm="onConfirm"> + </mpvue-picker> + + </view> + + </view> +</template> + +<script> + import uniIcon from '@/components/uni-icon/uni-icon.vue'; + import uniPopup from '../index/common/uni-popup/uni-popup.vue'; + import Enums from '@/util/Enums'; + import foot from '../../components/foot.vue'; + import logoservice from '@/service/logoservice.js'; + import mpvuePicker from '../../components/mpvue-picker/mpvuePicker.vue'; + let Base64 = require('js-base64').Base64; + export default { + components: { + uniPopup, + uniIcon, + foot, + mpvuePicker + }, + computed: { + + }, + data() { + return { + mode: 'selector', + pickerValueArray: [], + pickerValueDefault: [0], + queryPage: { + m: 'Machine/printRecord', + machine_id: null, + }, + shopQueryPage: { + m: 'Machine/getShop', + }, + param: null, + language_list: [], //语言列表 + languageName: null, + + selectEModel:null, + + }; + }, + + methods: { + + + //选择语言 + showLanguage(item) { + this.pickerValueArray = this.language_list + this.pickerValueArray.filter(item => { + item.label = item.title + item.value = item.machine_language_id + }); + this.$refs.mpvuePicker.show(); + }, + + + onChange(e) { + + this.selectEModel = e; + + //console.log(e); + }, + + onCancel(e) { + + }, + + //确定 + onConfirm(e) { + var that = this; + uni.showLoading({ + title: '加载中...' + }) + setTimeout(function() { //延迟一定时间执行 + if(that.selectEModel != null){ + e = that.selectEModel + } + that.languageName = e.label + logoservice.Machinelistdetail({ + m: 'Machine/defaultLanguageSave', + machine_id: that.queryPage.machine_id, + machine_language_id: e.value[0] + }).then(result => { + uni.hideLoading(); + uni.showToast({ + title: '修改语言成功', + icon: 'none' + }); + }).catch(err => { + uni.hideLoading(); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + }, 3000); + } + + }, + + onPullDownRefresh() { + + }, + + onReachBottom() { + + }, + + onLoad(options) { + this.queryPage.machine_id = options.machineid; + this.param = JSON.parse(options.param); + this.language_list = this.param.machine_language_list + // this.language_list.forEach((item, index) => { + // var pickerValue = { + // label: item.title, + // value: item.machine_language_id + // } + // //this.pickerValueArray.push(pickerValue) + // }); + this.languageName = this.param.machine_language_default + }, + + onShow() { + + } + + }; +</script> + +<style lang="scss"> + page { + width: 100%; + height: 100%; + background: #fff; + } + + .eq-detail-score { + padding: 40upx 0; + width: 100%; + height: 210upx; + margin: 0upx auto; + background: #43CF7C; + border-radius: 20upx; + display: flex; + align-items: center; + font-size: 26upx; + color: #fff; + } + + .green { + background-color: #4FB36B !important; + color: #FFFFFF; + } + + /*无数据 */ + .noData { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + } + + .noData_img { + width: 260upx; + height: 260upx; + display: block; + margin: 0upx auto 102upx; + } + + .noData_title { + text-align: center; + font-size: 36upx; + } + + .noData_text { + margin-top: 35upx; + font-size: 30upx; + font-weight: 400; + } + + .noData_but { + width: 230upx; + height: 70upx; + line-height: 70upx; + text-align: center; + color: #F56364; + margin: 140upx auto 0; + border: 1upx solid #F56364; + border-radius: 35upx; + } + + /* 去除button默认样式 */ + button::after { + border: none; + } + + button { + background-color: transparent; + padding-left: 0; + padding-right: 0; + line-height: inherit; + } + + .lang-open { + transform: rotate(90deg); + transition: transform 0.5s; + } + + .lang-close { + transform: rotateY(0deg); + transition: transform 0.5s; + } + + //2020-11-17 + .content-open { + height: 90upx; + overflow: hidden; + transition: all 0.4s cubic-bezier(0.25, 1.0, 0.25, 1.0); + } + + .content-close { + height: 0; + transition: all 0.4s cubic-bezier(0.25, 1.0, 0.25, 1.0); + } + + .item-open { + height: 40upx; + transition: all 0.4s cubic-bezier(0.25, 1.0, 0.25, 1.0); + } + + .item-close { + opacity: 0; + height: 0; + } + + /*输入框弹框显示 */ + .weui-search-bar { + position: relative; + padding: 8upx 10upx; + display: flex; + height: 135upx; + background: #FFFFFF; + align-items: center; + } + + .weui-search-bar_form { + width: 100%; + border-radius: 50upx; + background: #F6F6F6; + } + + .weui-search-bar_input { + height: 80upx; + line-height: 80upx; + font-size: 25upx; + padding-left: 24upx; + } + + /*底部弹框显示 */ + .uni-pop_show { + display: flex; + flex-direction: column; + } + + .uni-calendar-item--isDay-text.data-v-09f1e40c { + color: #5CE6B5 !important; //5CE6B5 + } + + .uni-calendar-item--isDay.data-v-09f1e40c { + background: #5CE6B5 !important; + color: #fff !important; + } + + .uni-calendar-item--checked.data-v-09f1e40c { + background: #5CE6B5 !important; + color: #fff !important; + } + + .uni-numbox__value { + width: 120upx !important; + } + + page { + width: 100%; + height: 100%; + background: #F5F5F5; + } + + .eq_list_button { + display: flex; + flex-direction: row; + line-height: 60upx; + padding-bottom: 20upx; + } + + .eq_list_button_ul { + flex: 1; + } + + .eq_list_button_li { + margin: auto; + font-size: 24upx; + color: #FFFFFF; + width: 150upx; + font-weight: bold; + text-align: center; + line-height: 60upx; + height: 60upx; + background-color: #5CE6B6; + } + + .uni-swiper-tab { + border-bottom: 1upx solid #F5F5F5; + } + + .clean-bt { + border-radius: 50%; + width: 200upx; + height: 200upx; + bottom: 160upx; + right: 20upx; + position: fixed; + font-size: 27upx; + text-align: center; + line-height: 130upx; + z-index: 99991; + justify-content: center; + align-items: center; + } + + .order { + width: 100%; + height: 100%; + background-color: #fff; + + .uni-tab-bar { + height: auto !important; + + .uni-swiper-tab { + position: fixed; + top: var(--window-top); + z-index: 999; + width: 100%; + line-height: 85upx; + height: 85upx; + + .swiper-tab-list { + width: calc(100% / 3); + font-size: 30upx; + } + } + + .active { + color: #43CF7C; + } + } + + .way-list { + margin: 0 20upx; + padding-top: 20upx; + border-radius: 10upx; + + .topBox { + width: calc(100% - 60upx); + margin-left: 30upx; + margin-top: 15upx; + justify-content: center; + } + + .topLittleBOX-1 { + font-size: 26upx; + width: 120upx; + color: #333; + overflow: text-align; + } + + .topLittleBOX-2 { + padding-left: 20upx; + padding-top: auto; + padding-bottom: auto; + display: flex; + vertical-align: middle; + flex-direction: row; + align-items: center; + width: calc(100% - 120upx); + position: relative; + } + + .row-1 { + height: 30upx; + background-color: #43CF7C; + border-radius: 20upx; + width: 0upx; + transition: width 1.5s linear; + } + + .rowText { + margin-left: 10upx; + font-size: 26upx; + color: #333; + float: right; + } + + .way-item { + background: #FFFFFF; + border-radius: 10upx; + margin-bottom: 20upx; + } + + .way { + height: 120upx; + min-height: 90upx; + display: flex; + align-items: center; + font-size: 28upx; + + .text { + width: 250upx; + padding-left: 20upx; + color: #fff; + } + + .value { + width: calc(100% - 280upx); + display: flex; + + .prick { + width: calc(100% - 40upx); + } + + .fa-angle-right { + width: 40upx; + font-size: 50upx; + } + } + } + } + + .content { + padding-top: 10upx; + + .order-list { + min-height: 350upx; + width: 100%; + border-radius: 10upx; + + .item { + min-height: 70upx; + display: flex; + align-items: center; + font-size: 26upx; + border-bottom: 1upx solid #F5F5F5; + + .text { + width: 250upx; + color: #000; + font-size: 29upx; + } + + .value { + width: calc(100% - 120upx); + display: flex; + color: #888; + margin-top: 15upx; + margin-bottom: 15upx; + + + .prick { + width: calc(100% - 35upx); + } + + .fa-angle-right { + width: 30upx; + font-size: 50upx; + } + } + } + } + } + } + + .print-score { + width: 100%; + height: 280upx; + background: #43CF7C; + border-radius: 20upx; + display: flex; + align-items: center; + font-size: 26upx; + color: #fff; + + .print { + width: 100%; + + .text { + line-height: 50upx; + color: #fff; + } + } + } + + .list-clean { + height: 80upx; + background: #FFFFFF; + padding-left: 20upx; + padding-right: 23upx; + margin-top: 10upx; + border-radius: 15upx; + margin-left: 20upx; + margin-right: 15upx; + padding-top: 18upx; + } + + .item-new-list { + padding-top: 0upx; + padding-left: 30upx; + padding-right: 25upx; + background: #fff; + margin: 0upx 30upx 25upx 30upx; + border-radius: 20upx; + box-shadow: 0 0 10upx 10upx #F5F5F5; + color: #000; + } + + + + .item-new-list-text { + margin: -10upx 45upx 30upx 45upx; + color: #999; + font-size: 25upx; + width: calc(100% - 90upx); + } + + + .content-color { + color: #fff; + } + + .item-new-list-switch { + float: right; + zoom: 0.6; + position: absolute; + right: 80upx + } +</style> \ No newline at end of file diff --git a/pages/mall/eq-details-new.vue b/pages/mall/eq-details-new.vue new file mode 100644 index 0000000..bdfdd35 --- /dev/null +++ b/pages/mall/eq-details-new.vue @@ -0,0 +1,2215 @@ +<template> + <view class="order full-height full-width"> + + <myhead :title="queryPage.machine_id" :color="'#000'" :titleShow="true" :backShow="isShowBack" + :background="'#F8F8F8'"></myhead> + + <view v-if="!list&&long"> + <view class="noData"> + <image src="../../static/icon_guaqi.png" mode="aspectFill" class="noData_img"></image> + <view class="noData_title"> + 非常抱歉,您没有权限查阅当前打印站的信息!<br> + </view> + <!-- <view class="noData_but" @click="tomain()">返回</view> --> + </view> + </view> + + + <view class="uni-tab-bar full-width" v-if="list"> + + <view scroll-y @scrolltolower="loadMore()" class="full-width content" v-if="long" + style="padding-bottom: 20upx; background: #fff; height: 100%;"> + + <view + style="margin: auto; width: 100%; text-align: center; height: 30upx; line-height: 40upx; font-size: 28upx;"> + {{list.goods_category}} + </view> + + + <vew class="eq-detail-top-layout"> + + <view class="left" v-if="!lockingStatus"> + <view v-if="list.status.value == 0" class="status" style="background: #808080;"> + 离线 + </view> + <view v-if="list.status.value == 1 || list.status.value == 2 " class="status" + style="background: #43CF7C;"> + 在线 + </view> + <view v-if="list.status.value == 3 || list.status.value == 4 || list.status.value == 5 " + class="status" style="background: #D43030;"> + 故障 + </view> + </view> + + <view class="left" v-if="lockingStatus"> + <view class="status" style="background: #FF8D1A;"> + 锁定 + </view> + </view> + + <view class="center"> + <image :src="list.cover" mode="aspectFit" style="height: 250upx; " /> + <view class="ink"> + <view class="content"> + <view class="ink-list-bc" style="border: 1upx solid #62C5F1;"> + <view v-if="inkStatusC" style=" background: #62C5F1; " class="in"> </view> + <view v-if="!inkStatusC" style=" background: #62C5F1;height: 20upx; " class="in"> + </view> + </view> + <text class="text">C</text> + </view> + <view class="content"> + <view class="ink-list-bc" style="border: 1upx solid #EE4FEFFF;"> + <view v-if="inkStatusM" style="background: #EE4FEFFF; " class="in"></view> + <view v-if="!inkStatusM" style=" background: #EE4FEFFF;height: 20upx;" class="in"> + </view> + </view> + <text class="text">M</text> + </view> + <view class="content"> + <view class="ink-list-bc" style="border: 1upx solid #F5EC60FF;"> + <view v-if="inkStatusY" style=" background: #F5EC60FF;" class="in"> + </view> + <view v-if="!inkStatusY" style=" background: #F5EC60FF;height: 20upx;" class="in"> + </view> + </view> + <text class="text">Y</text> + </view> + <view class="content"> + <view class="ink-list-bc" style="border: 1upx solid #4B4B4B;"> + <view v-if="inkStatusK" style=" background: #4B4B4B; " class="in"></view> + <view v-if="!inkStatusK" style="background: #4B4B4B; height: 20upx;" class="in"> + </view> + </view> + <text class="text">K</text> + </view> + + <view class="content"> + <view class="ink-list-bc" style="border: 1upx solid #BFBFBF; background:#BFBFBF ;"> + <view v-if="inkStatusW" style=" background: #FFF; " class="in"></view> + <view v-if="!inkStatusW" style="background: #FFF; height: 20upx;" class="in"> + </view> + </view> + <text class="text">W</text> + </view> + + <view class="content"> + <view class="ink-list-bc" style="margin-top: 0upx;border: 1upx solid #A6A6A6;"> + <!-- <view class="ink-list-bc" style="margin-top: 0upx; margin-bottom: -33upx;border: 1upx solid #A6A6A6;"> --> + <view v-if="!inkStatusHas" style="background: #A6A6A6;" class="in"></view> + <view v-if="inkStatusHas" style="background: #A6A6A6; height: 20upx;" class="in"> + </view> + </view> + <!-- <view style=" position: relative; bottom: 28upx; left: 2upx;"> + <image src="../../static/icon_rights_interests_cancel.png" + style="width: 15upx; height: 15upx;" mode="aspectFill"> </image> + </view> --> + <text class="text">废</text> + </view> + </view> + </view> + + <view class="right" /> + + </vew> + + + <view class="order-list" style="width: 100%; height: 100%; "> + <view class="item-new-list-top" v-if=" machineErrors && machineErrors.ink_type == 0 "> + <view class="image"> + <image v-if="machineErrors.ink_type == 0" + src="../../static/icon_rights_interests_cancel.png" style="height: 40upx;" + mode="aspectFit"></image> + <image v-if="machineErrors.ink_type == 1" src="../../static/icon_machine_ink_has.png" + style="height: 33upx;" mode="aspectFit"></image> + </view> + <view class="text"> + <text + style="font-size: 25upx; color: #000; margin-bottom: 8upx;">{{machineErrors.ink_info}}</text> + <text>更新时间:{{dateFormat(machineErrors.ink_update_time)}}</text> + </view> + <view class="image" @click="getMchineErrors(0)"> + <image src="../../static/icon_machine_load.png" style="height: 35upx;" mode="aspectFit"> + </image> + </view> + </view> + + <view class="item-new-list-top" v-if="machineErrors"> + <view class="image"> + <image v-if="machineErrors.status_type == 0" + src="../../static/icon_rights_interests_cancel.png" style="height: 40upx;" + mode="aspectFit"></image> + <image v-if="machineErrors.status_type == 1" src="../../static/icon_machine_right.png" + style="height: 38upx;" mode="aspectFit"></image> + <image v-if="machineErrors.status_type == 2" + src="../../static/icon_machine_status_close.png" style="height: 62upx;" + mode="aspectFit"></image> + </view> + <view class="text"> + <text + style="font-size: 25upx; color: #000; margin-bottom: 8upx;">{{machineErrors.status_info}}</text> + <text>更新时间:{{dateFormat(machineErrors.status_update_time)}}</text> + </view> + <view class="image" @click="getMchineErrors(1)"> + <image src="../../static/icon_machine_load.png" style="height: 35upx;" mode="aspectFit"> + </image> + </view> + </view> + + <view class="item-new-list-color" style="margin-top: 30upx;"> + <view class="content" @tap="cleanNozzle()"> + <image src="../../static/icon_machine_clean.png" class="image" mode="aspectFit"></image> + <text class="text">清洗喷头</text> + </view> + + <view class="content" @tap="testColour()"> + <image src="../../static/icon_machine_color.png" class="image" mode="aspectFit"></image> + <text class="text">测试色块</text> + </view> + + <view class="content" @tap="abountMachine()"> + <image src="../../static/icon_machine_local.png" class="image" mode="aspectFit"></image> + <text class="text">关于本机</text> + </view> + + <view class="content" @tap="maintenanceMachine()"> + <image src="../../static/icon_machine_more.png" class="image" mode="aspectFit"></image> + <text class="text">更多功能</text> + </view> + </view> + + <view class="item-new-list"> + <view class="item full-width" @click="todayPrintPage()"> + <label class="text content-color">今日打印</label> + <label class="value content-color"> + <view style="text-align: right; color: #888888; line-height: 50upx;" class="full-width"> + {{list.machine_order.day_total_effective_order}}/{{list.machine_order.day_total_order}} + </view> + <label class="fa fa-angle-right align-right sub-color"></label> + </label> + </view> + <view class="item full-width" @click="historyPrintPage()"> + <label class="text content-color">历史打印</label> + <label class="value content-color"> + <view style="text-align: right; color: #888888; line-height: 50upx;" class="full-width"> + <!-- 120/650 --> + {{list.machine_order.total_effective_order}}/{{list.machine_order.total_order}} + </view> + <label class="fa fa-angle-right align-right sub-color"></label> + </label> + </view> + </view> + + <view class="item-new-list"> + <view class="item full-width" @click="managingTasks()"> + <label class="text content-color">管理任务</label> + <label class="value content-color"> + <label class="fa fa-angle-right align-right sub-color" + style="float:right;position:absolute;right:55upx;margin-top: -30upx;"></label> + </label> + </view> + </view> + + <view class="item-new-list-text">对任务进行恢复、多次打印等操作,同时部分机型可进行模版、商品上下架、查阅历史打印记录操作。</view> + + <view class="item-new-list"> + + <view class="item full-width"> + <label class="text content-color">锁定</label> + <switch :checked="lockingStatus" @change="onSefaultStatus" + style="float: right;zoom: 0.6;position:absolute;right:75upx" /> + </view> + + <view class="item full-width"> + <label class="text content-color">最近开机</label> + <label class="value content-color"> + <text class="full-width" + style="text-align: right;">{{list.last_connect_time ? list.last_connect_time : "" }}</text> + </label> + </view> + + </view> + + <view class="item-new-list-text">机器开机且有联网,状态将显示正常,锁定状态的设备不允许下单操作,墨水低于20%将显示为缺失状态。</view> + + <view class="item-new-list"> + <view class="item full-width" @click="abountMachine()"> + <label class="text content-color">关于本机</label> + <label class="value content-color"> + <label class="fa fa-angle-right align-right sub-color" + style="float:right;position:absolute;right:55upx;margin-top: -30upx;"></label> + </label> + </view> + <view class="item full-width" @click="auxiliaryUse()"> + <label class="text content-color">辅助</label> + <label class="value content-color"> + <label class="fa fa-angle-right align-right sub-color" + style="float:right;position:absolute;right:55upx;margin-top: -30upx;"></label> + </label> + </view> + <view class="item full-width" @click="maintenanceMachine()"> + <label class="text content-color">维护</label> + <label class="value content-color"> + <label class="fa fa-angle-right align-right sub-color" + style="float:right;position:absolute;right:55upx;margin-top: -30upx;"></label> + </label> + </view> + </view> + + <view class="item-new-list-text">辅助功能可对设备基础进行调整,维护对设备可完成远程清洗喷头、闪喷、远程测试等操作</view> + + <view class="item-new-list"> + <view class="item full-width"> + <label class="text content-color">二维码</label> + <label class="value content-color" style="margin-top: 2upx; margin-bottom: 2upx;"> + <input type="text" disabled="disabled" class="full-width" /> + <image @click.stop="showPreviewImage(list.h5_code,list.id)" + v-if="list.h5_code !='' && list.h5_code " + :src="list.h5_code + '?x-oss-process=image/watermark,text_'+getStrToBase64(list.id)+',g_nw,size_50,shadow_50,x_550,y_850,color_4bf25a'" + mode="aspectFit" + style="width:80upx; height:80upx; border-radius:10upx; display: block; float: right;margin-top: -5upx;"> + </image> + <image @click.stop="showPreviewImage(list.min_code,list.id)" v-if="list.min_code" + :src="list.min_code + '?x-oss-process=image/watermark,text_'+getStrToBase64(list.id)+',g_nw,size_50,shadow_50,x_550,y_850,color_4bf25a'" + mode="aspectFit" + style="width:80upx; height:80upx; border-radius:10upx; display: block; float: right;margin-top: -5upx; margin-left: 25upx;"> + </image> + </label> + </view> + </view> + + <view class="item-new-list-text">定制二维码,可随时将设备二维码分享,方便用户随时下单。</view> + + <view class="item-new-list" style="margin-top: 40upx;" @click="exclusiveServices()"> + <view class="item full-width"> + <label class="text content-color">专属服务</label> + <label class="value content-color"> + <label class="fa fa-angle-right align-right sub-color" + style="float:right;position:absolute;right:50upx;font-size: 50upx;margin-top: -30upx;"></label> + </label> + </view> + </view> + + <view class="item-new-list-text">联系专属客服,可随时随地获得客户维护支持服务。</view> + + <view class="item-new-list" @click="maintenanceManual()"> + <view class="item full-width"> + <label class="text content-color">查看机器保养手册</label> + <label class="value content-color"> + <label class="fa fa-angle-right align-right sub-color" + style="float:right;position:absolute;right:50upx;font-size: 50upx;margin-top: -30upx;"></label> + </label> + </view> + </view> + + </view> + </view> + </view> + + <mpvue-pickernew ref="printingMpvuePicker" :themeColor="'#53B2B0'" + :pickerValueDefault="printingpickerValueDefault" @onChange="onChange" @onCancel="onCancel" + @onConfirm="onConfirmPrinting" :pickerValueArray="printingPickerValueArray"></mpvue-pickernew> + + <view v-if="isTouchStart" style=" position: fixed; + top: 0; + left: 0; + bottom: 0; + right: 0; + width: 100%; + height: 100%; + z-index: 9999;" @touchmove.prevent @mousewheel.prevent></view> + + </view> + </view> +</template> + +<script> + import uniIcon from '@/components/uni-icon/uni-icon.vue'; + import uniPopup from '../index/common/uni-popup/uni-popup.vue'; + import Enums from '@/util/Enums'; + import foot from '../../components/foot.vue'; + import mpvuePicker from '../../components/mpvue-picker/mpvuePicker.vue'; + import mpvuePickernew from '../../components/mpvue-picker/mpvuePickernew.vue'; + import logoservice from '@/service/logoservice.js'; + let Base64 = require('js-base64').Base64; + import myhead from '../index/head/head-machine.vue'; + + export default { + components: { + uniPopup, + uniIcon, + foot, + mpvuePicker, + mpvuePickernew, + myhead + }, + computed: { + + }, + data() { + return { + long: false, + isSinglePlatep: true, //是否单机版 或者 配送版 + isShowPullButtom: false, //false不显示true显示 + isOnclickItem: false, //是否点击item + numberlist: [], + LoupanList: [], + SortNumber: 1, + goodsItem: [{ + goods_name: '全部', + type: -12, + }, + { + goods_name: '套餐内', + type: 0, + }, + { + goods_name: '打印卡', + type: 1, + }, + ], + StcokList: [], //设备库存列表 + StcokLists: [], + list: null, + getStockerCount: "", //设置输入个数 + selectItem: null, + //默认选中 + currentTab: { + code: 0, + name: '机器' + }, + tabBars: [{ + code: 0, + name: '机器' + }, + { + code: 2, + name: '' + }, + { + code: 1, + name: '打印' + }, + ], + //end底部弹框 + mode: 'selector', + pickerValueArray: [], + pickerValueDefault: [0], + type: 'bottom', + //上拉状态 + dataLoadState: { + pullDownRefresh: false, + reachBottom: false + }, + queryPage: { + m: 'Machine/printRecord', + machine_id: null, + page: 1, + per_page: 20, + total: 0, + date: null, //日 + month: null, //月 + year: null, //日 + is_excess: null, //套餐选择类型 + }, + shopQueryPage: { + m: 'Machine/getShop', + }, + attr: null, + //商品库存 + showshareitem: null, + showshareindex: null, + //打印年月日 + printingPickerValueArray: [], + printingpickerValueDefault: [0], + //加载全部交易类型数据 + maxnumber: 12, + maxlength: 2, + be_child: 0, //子代理 + Userres_partner_id: null, //总代理 + is_inner: null, //恢复订单打印 + print_type: 0, //默认0标准版 1无限版 + inkStatusC: false, + inkStatusM: false, + inkStatusY: false, + inkStatusK: false, + inkStatusW: false, + inkStatusHas: false, + isShowPop: false, + timer: null, //定时器 + intCountTimer: 0, + clear_time: "", //上次清洗时间 + isClickClean: false, //是否点击 + lockingStatus: false, + is_update_status: 0, //是否更新故障的时间 + is_update_ink: 0, //是否更新墨水的时间 + machineErrors: null, //机器错误信息 + isShowBack: false, //是否显示返回 + flagValue: "", //机器挂起 + + //list.flag.value + }; + }, + + methods: { + + + maintenanceManual() { + uni.showToast({ + title: '即将开放', + icon: 'none' + }); + }, + + dateFormat(time) { + let now = new Date(time * 1000), + y = now.getFullYear(), + m = now.getMonth() + 1, + d = now.getDate(); + return y + "-" + (m < 10 ? "0" + m : m) + "-" + (d < 10 ? "0" + d : d) + " " + now.toTimeString().substr(0, + 8); + }, + + //今日打印 + todayPrintPage() { + uni.navigateTo({ + url: '/pages/mall/profit?machine_id=' + this.queryPage.machine_id + "&type=1", + }); + }, + + //历史打印 + historyPrintPage() { + uni.navigateTo({ + url: '/pages/mall/profit?machine_id=' + this.queryPage.machine_id + "&type=0", + }); + }, + + //测试色块 + testColour(type) { + uni.navigateTo({ + url: '../mall/test-colour?machineid=' + this.queryPage.machine_id, + }); + }, + + //远程清洗 + cleanNozzle() { + uni.navigateTo({ + url: '../mall/clean-nozzle?machineid=' + this.queryPage.machine_id, + }); + }, + + //专属服务 + exclusiveServices() { + uni.navigateTo({ + url: "/pages/mall/exclusive-services?machineid=" + this.queryPage.machine_id + }) + }, + + //管理任务 + managingTasks() { + uni.navigateTo({ + url: '../mall/managing-tasks?machineid=' + this.queryPage.machine_id, + }); + }, + + //维护 + maintenanceMachine(type) { + uni.navigateTo({ + url: '../mall/maintenance-machine?machineid=' + this.queryPage.machine_id, + }); + }, + + //辅助功能 + auxiliaryUse() { + uni.navigateTo({ + url: '../mall/auxiliary-use?machineid=' + this.queryPage.machine_id + "&machine_category_id=" + + this.list.machine_category_id, + }); + }, + + //关于本机 + abountMachine() { + uni.navigateTo({ + url: '../mall/abount-machine?machineid=' + this.queryPage.machine_id, + }); + }, + + //调转收益列表 + toLiquidationList() { + uni.navigateTo({ + url: '../mine/Liquidation?machineid=' + this.queryPage.machine_id, + }); + }, + + //调转订单列表 + toOrderList() { + uni.navigateTo({ + url: '../mine/order?machineid=' + this.queryPage.machine_id, + }); + }, + + touchstart(ev) { + ev.preventDefault(); + this.isTouchStart = true; + const selectDom = ev.currentTarget; + const { + pageX, + pageY + } = ev.touches[0]; // 手指位置 + const { + offsetLeft, + offsetTop + } = selectDom; // 元素位置 + // 手指原始位置 + this.oldMousePos = { + x: pageX, + y: pageY + }; + // 元素原始位置 + this.oldNodePos = { + x: offsetLeft, + y: offsetTop + }; + }, + + touchMove(ev) { + ev.preventDefault(); + const selectDom = ev.currentTarget; + // x轴偏移量 + const lefts = this.oldMousePos.x - this.oldNodePos.x; + // y轴偏移量 + const tops = this.oldMousePos.y - this.oldNodePos.y; + const { + pageX, + pageY + } = ev.touches[0]; // 手指位置 + this.autoCleanLeft = pageX - lefts; + this.autoCleanTop = pageY - tops; + }, + + touchEnd(ev) { + ev.preventDefault(); + this.isTouchStart = false; + }, + + //选中普通设备列表 + selectStockList(index, item) { + var resultList = this.stockDataList; + this.stockDataList = []; + var isDown = item.isDown; + if (isDown) { + isDown = false + } else { + isDown = true + } + resultList.forEach(itemData => { + if (itemData.id == item.id) { + itemData.isDown = isDown + } + }) + this.stockDataList = resultList; + }, + + //调转库存列表 + toStockList() { + uni.navigateTo({ + url: '../mall/stockList?id=' + this.queryPage.machine_id, + }); + }, + + //获取库存新接口 + getStockData() { + logoservice.MachineSavePartnerStock({ + m: 'Machine/getStockDetail', + machine_id: this.queryPage.machine_id, + }).then(result => { + this.stockData = result; + var max = 60; + var first = 20; + this.stockData.list.forEach((item, index) => { + item.id = index + item.isDown = false; + if (index == 0) { + item.row2 = max * item.need_stock / first; + if (item.row2 <= 0) { + item.row2 = 0; + } + first = parseFloat(item.need_stock); + if (first <= 1) { + first = 20; + } + } else { + item.row2 = max * parseFloat(item.need_stock / first) + if (item.row2 <= 0) { + item.row2 = 0; + } + } + }) + this.stockDataList = this.stockData.list + }).catch(err => { + + }) + }, + + //字符串转base64 + getStrToBase64(str) { + return Base64.encode(str); + }, + + //预览显示图片 + showPreviewImage(e, id) { + if (e == null || e == "") { + uni.showToast({ + title: '暂时没有定制二维码', + icon: 'none' + }); + return + } + var current = e + "?x-oss-process=image/watermark,text_" + this.getStrToBase64(id) + + ",g_nw,size_50,shadow_50,x_550,y_850,color_4bf25a"; //这里获取到的是一张本地的图片 + uni.previewImage({ + current: current, //需要预览的图片链接列表 + urls: [current] //当前显示图片的链接 + }) + }, + + //调转明细页面 + packageDetail(machineId) { + let machineid = machineId; + uni.navigateTo({ + url: '../mine/PrintUseDetail?machineid=' + machineid + '&print_type=' + this.print_type + }); + }, + + Reprint(item) { + if (item.status.value == 0) { + return; + } + uni.showModal({ + title: '温馨提示', + content: '是否此订单恢复打印?', + confirmText: '确定', + confirmColor: '#ff3b32', + success: function(res) { + if (res.confirm) { + //恢复打印的接口: + logoservice.MachineStockGoodsList({ + m: 'Machine/repeatPrint', + machine_id: item.machine_id, + id: item.id, + }).then(result => { + uni.showToast({ + title: '恢复订单打印成功', + icon: 'none' + }); + item.status.value = 0 + item.status.text = "等待出料" + }).catch(err => { + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + } else if (res.cancel) { + + } + } + }); + }, + + //代理商名字 + partnername(partner_id, partner) { + var partner_name = '尚未铺设'; + if (partner) { + partner.forEach(item => { + if (item.id == partner_id) { + partner_name = item.name + } + }); + } + return partner_name + }, + + tomain() { + uni.reLaunch({ + url: "/pages/index/home" + }) + }, + + //打印年月日printing Printing + printingShowPicker(mode) { + this.$refs.printingMpvuePicker.show(); + }, + + //日期确定 + onConfirmPrinting(e) { + this.queryPage.year = null + this.queryPage.month = null + this.queryPage.date = null + if (e.value.length == 1) { + this.queryPage.year = e.value[0] + } else if (e.value.length == 2) { + let myMonth = e.value[1] + if (myMonth < 10) { + myMonth = '0' + e.value[1] //补齐 + } + this.queryPage.month = e.value[0] + '-' + myMonth + } else if (e.value.length == 3) { + let myMonth = e.value[1] + if (myMonth < 10) { + myMonth = '0' + myMonth //补齐 + } + let mydate = e.value[2] + if (mydate < 10) { + mydate = '0' + e.value[2] //补齐 + } + this.queryPage.date = e.value[0] + '-' + myMonth + '-' + mydate + } + //数据加载状态处理 false + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + this.LoupanList = [] + this.queryPage.page = 1; + this.queryPage.total = 0; + this.loadGoodsList(Enums.DATA_DIRECTION.UP); + }, + + //打开类型 + togglePopup() { + this.$nextTick(() => { + this.$refs['printingShowshare'].open() + }) + this.getGoodsAttrList() + }, + + Printingcancel(type) { + this.$refs['printingShowshare'].close() + }, + + selectMonth(item) { + if (item.type == -12) { + this.attr = "全部打印类型"; + this.queryPage.is_excess = null; + } else { + this.attr = item.goods_name ? item.goods_name : null + this.queryPage.is_excess = item.type + } + this.$refs['printingShowshare'].close(); + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + this.queryPage.page = 1; + this.queryPage.total = 0; + this.LoupanList = [] + this.loadGoodsList(Enums.DATA_DIRECTION.UP); + }, + + //取消 + cancel(type) { + this.$refs['showshareinput'].close() + }, + + //更换弹框 + showshareclick(item, index) { + if (this.$base.Userres.be_child == 1) return; + if (this.list.used_applets == '3') { + this.maxnumber = 12 + this.maxlength = 2 + } + if (this.list.used_applets == '4') { + this.maxnumber = 7 + this.maxlength = 1 + } + let itema = JSON.stringify(item) + let itemb = JSON.parse(itema); + this.showshareitem = itemb; + this.showshareindex = index; + this.$nextTick(() => { + this.$refs['showshareinput'].open() + }) + }, + + change(e) { + + }, + + //库存数量输入 + StockCountInput(e) { + this.isOnclickItem = true; + var that = this; + setTimeout(function() { + that.isOnclickItem = false; + }, 1000) //延迟时间 这里是2秒 + }, + + //'2:色彩公园,3:色彩公园T恤,4:色彩公园手机壳,5:高尔夫,6:色彩Plus,7 色彩Lite(通用版) ,8 烘焙食品' + inputVal(item, index) { + if (this.list.used_applets == '3') { + this.maxnumber = 12 + this.maxlength = 2 + } + if (this.list.used_applets == '4') { + this.maxnumber = 7 + this.maxlength = 1 + } + let StcokListsnumber = item.total_stock + if (item.stock > this.maxnumber) { + uni.showToast({ + title: '最大只能输入' + this.maxnumber + '个', + icon: 'none', + }); + item.stock = StcokListsnumber > this.maxnumber ? this.maxnumber : StcokListsnumber; + return false; + } + }, + + //获取输入框字符串 + diseaseNameInput(e) { + this.loadStockGoodsList(e.detail.value) + }, + + //pop选中商品 + selectGood(item) { + this.$refs["showshare"].close(); + var that = this; + let index; + if (this.selectItem != null) { + that.StcokList.forEach((items, indexNumber) => { + if (items.id == this.selectItem.id) { + index = indexNumber; + } + }); + } + uni.showModal({ + title: '确认', + content: '是否关联当前商品?', + confirmText: '确定', + confirmColor: '#ff3b32', + success: function(res) { + if (res.confirm) { + if (that.list.used_applets == '3') { + that.StcokList[index].stock = item.stock > 12 ? 12 : item.stock; + } + if (that.list.used_applets == '4') { + that.StcokList[index].stock = item.stock > 7 ? 7 : item.stock; + } + that.StcokList[index].title = item.title; //name + that.StcokList[index].name = item.name; + that.StcokList[index].front_image = item.front_image; + that.StcokList[index].goods_id = item.goods_id; + that.StcokList[index].dict_id = item.dict_id; + that.StcokList[index].total_stock = item.stock; + that.StcokList[index].isShowPullButtom = false; + that.confirmChangeChannel(that.StcokList[index]) + } + } + }); + }, + + //确认更换货道 + confirmChangeChannel(item) { + logoservice.MachineSavePartnerStock({ + m: 'Machine/saveStock', + id: item.id, + machine_id: this.queryPage.machine_id, + goods_id: item.goods_id, + goods_size: item.goods_size, + stock: item.stock, + dict_id: item.dict_id + }).then(result => { + uni.hideLoading(); + uni.showToast({ + title: "更换成功", + icon: 'none' + }); + }).catch(err => { + uni.hideLoading(); + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + this.StcokList = [] + this.queryPage.page = 1; + this.queryPage.total = 0; + this.loadStockList(Enums.DATA_DIRECTION.UP); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + }, + + //下架功能 + shelvesGood(item, index) { + if (this.$base.Userres.be_child == 1) return; + var _this = this + uni.showModal({ + title: '确认', + content: '确认当前商品下架吗?', + confirmText: '确定', + confirmColor: '#ff3b32', + success: function(res) { + if (res.confirm) { + if (item.goods_id == 0) { + uni.showToast({ + title: "还没绑定商品不能下架", + icon: 'none' + }); + _this.StcokList[index].isShowPullButtom = false; + _this.SortNumber++; + _this.StcokList[index].SortNumber = _this.SortNumber; + this.setData({ + StcokList: _this.StcokList + }) + } else { + uni.showLoading({ + title: '正在加载中...' + }) + logoservice.MachineSavePartnerStock({ + m: 'Machine/saveStock', + id: item.id, + machine_id: _this.queryPage.machine_id, + goods_id: item.goods_id, + goods_size: item.goods_size, + stock: item.stock, + dict_id: item.dict_id, + type: "off", + }).then(result => { + console.log(result) + uni.hideLoading(); + uni.showToast({ + title: "下架成功", + icon: 'none' + }); + _this.dataLoadState.pullDownRefresh = false; + _this.dataLoadState.reachBottom = false; + _this.StcokList = [] + _this.queryPage.page = 1; + _this.queryPage.total = 0; + _this.loadStockList(Enums.DATA_DIRECTION.UP); + }).catch(err => { + _this.dataLoadState.pullDownRefresh = false; + _this.dataLoadState.reachBottom = false; + _this.StcokList = [] + _this.queryPage.page = 1; + _this.queryPage.total = 0; + _this.loadStockList(Enums.DATA_DIRECTION.UP); + uni.hideLoading(); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + } + } else if (res.cancel) { + + } + } + }); + }, + + //更换弹框 + toChangePop(item) { + if (this.$base.Userres.be_child == 1) return; + this.selectItem = item; + this.$nextTick(() => { + this.$refs['showshare'].open() + this.loadStockGoodsList(""); + }) + }, + + //显示下面选择按钮 + showPullButton(item, index) { + if (this.isOnclickItem == false) { + var that = this; + if (item.isShowPullButtom) { + that.StcokList[index].isShowPullButtom = false; + } else { + that.StcokList[index].isShowPullButtom = true; + } + this.SortNumber++; + that.StcokList[index].SortNumber = this.SortNumber; + this.setData({ + StcokList: that.StcokList + }) + } + }, + + //修改货道 + changeChannel(item, index) { + this.$refs["showshareinput"].close(); + this.$refs["showshare"].close(); + var _this = this + _this.isOnclickItem = true; + setTimeout(function() { + _this.isOnclickItem = false; + }, 1000) //延迟时间 这里是1秒 + let jsonLists = JSON.parse(_this.StcokLists); + uni.showModal({ + title: '确认', + content: '确认当前商品货道调整吗?', + confirmText: '确定', + confirmColor: '#ff3b32', + success: function(res) { + if (res.confirm) { + uni.showLoading({ + title: '正在加载中...' + }) + logoservice.MachineSavePartnerStock({ + m: 'Machine/saveStock', + id: item.id, + machine_id: _this.queryPage.machine_id, + goods_id: item.goods_id, + goods_size: item.goods_size, + stock: item.stock, + dict_id: item.dict_id + }).then(result => { + uni.hideLoading(); + uni.showToast({ + title: "修改成功", + icon: 'none' + }); + _this.StcokList[index].stock = item.stock; + }).catch(err => { + uni.hideLoading(); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + } else if (res.cancel) { + + } + } + }); + }, + + //获取底部弹框数据 + loadStockGoodsList(goods_name) { + logoservice.MachineStockGoodsList({ + m: 'Machine/getStockGoodsList', + machine_id: this.queryPage.machine_id, + goods_name: goods_name, + }).then(result => { + this.GoodsItem = result; + uni.hideLoading(); + }).catch(err => { + uni.hideLoading(); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + }, + + previewImageOne(item) { + var current = e; //这里获取到的是一张本地的图片 + }, + + setData(obj) { + let that = this; + let keys = []; + let val, data; + Object.keys(obj).forEach(function(key) { + keys = key.split('.'); + val = obj[key]; + data = that.$data; + keys.forEach(function(key2, index) { + if (index + 1 == keys.length) { + that.$set(data, key2, val); + } else { + if (!data[key2]) { + that.$set(data, key2, {}); + } + } + data = data[key2]; + }) + }); + }, + + + chooseImage: async function() { + if (this.$base.Userres.be_child == 1) return; + var _this = this + uni.chooseImage({ + sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有 + sourceType: ['camera', 'album'], //从相册选择 + count: 1, + success: (res) => { + let tempFilePaths = res.tempFilePaths; + uni.showLoading({ + title: '图片正在上传...' + }) + uni.uploadFile({ + url: 'https://tprint.refinecolor.com/partnerapplets/index', + filePath: tempFilePaths[0], + method: 'POST', + name: 'file', + header: { + 'content-type': 'multipart/form-data' + }, + formData: { + m: 'Upload/upload' + }, //请求额外的form data + success: function(res) { + logoservice.MachinesaveCover({ + m: 'Machine/saveCover', + machine_id: _this.queryPage.machine_id, + cover: JSON.parse(res.data).data.url + }).then(result => { + uni.hideLoading(); + uni.showToast({ + title: '上传成功', + icon: 'none', + duration: 3000 + }) + _this.listdetail() + }).catch(err => { + uni.hideLoading(); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + }, + fail: function(res) { + uni.hideLoading(); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + } + }) + } + }) + }, + + //预览图片 + previewImage(imgs, list) { + let listattr = [] + list.forEach(item => { + listattr.push(item.works_image) + }) + var current = imgs.works_image; //这里获取到的是一张本地的图片 + wx.previewImage({ + current: current, // 当前显示图片的http链接 + urls: listattr // 需要预览的图片http链接列表 + }) + }, + + datatimeLimited(time) { + return new Date(time.replace(/-/g, "/"))._format('HH:mm:ss'); + }, + + category(id) { + var dataname = ''; + if (this.shopList) { + this.shopList.forEach(item => { + if (item.id == id) { + dataname = item.short_name + } + }); + } + return dataname + }, + + categoryaddress(address) { + var dataaddress = ''; + if (this.shopList) { + this.shopList.forEach(item => { + if (item.id == address) { + dataaddress = item.address.replace('<br/>', ''); + } + }); + } + return dataaddress + }, + + //店铺 + showPicker(item) { + uni.navigateTo({ + url: '../mall/relevance-shop?machineid=' + this.list.id, + }); + }, + + //确定 + onConfirm(e) { + uni.showLoading({ + title: '正在关联中...' + }) + logoservice.Machinelistdetail({ + m: 'Machine/bindShop', + machine_id: this.queryPage.machine_id, + shop_id: e.value[0] + }).then(result => { + uni.hideLoading(); + uni.showToast({ + title: '关联店铺成功', + icon: 'none' + }); + this.listdetail() + }).catch(err => { + uni.hideLoading(); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + }, + + profit() { + uni.navigateTo({ + url: '../mall/eq-profit?machineid=' + this.list.id, + }); + }, + + toorder() { + uni.navigateTo({ + url: '../mine/order?machineid=' + this.list.id, + }); + }, + + tapTab(tab) { + this.currentTab = tab; + if (this.currentTab.code == 0) { + this.listdetail() + } + if (this.currentTab.code == 1) { + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + this.LoupanList = [] + this.queryPage.page = 1; + this.queryPage.total = 0; + this.loadGoodsList(Enums.DATA_DIRECTION.UP); + } + if (this.currentTab.code == 2) { + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + this.StcokList = [] + this.queryPage.page = 1; + this.queryPage.total = 0; + this.getStockData(); + } + }, + + //设备锁定 + onSefaultStatus(e) { + if (e.detail.value == true) { + this.list.flag.value = "N" + this.lockingStatus = true; + uni.showLoading({ + title: '设备锁定中...' + }) + } else { + this.list.flag.value = "Y" + this.lockingStatus = false; + uni.showLoading({ + title: '设备恢复中...' + }) + } + logoservice.Machinestatus({ + m: 'Machine/status', + machine_id: this.queryPage.machine_id + }).then(result => { + uni.hideLoading(); + if (e.detail.value == true) { + uni.showToast({ + title: '锁定成功' + }) + } else { + uni.showToast({ + title: '恢复成功' + }) + } + + this.listdetail(); + + this.getMchineErrors(1) + + }).catch(err => { + uni.hideLoading(); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + }, + + //设备列表详情 + listdetail() { + uni.showLoading({ + title: '正在加载中...' + }); + logoservice.Machinelistdetail({ + m: 'Machine/list', + machine_id: this.queryPage.machine_id + }).then(result => { + this.long = true + uni.stopPullDownRefresh(); + uni.hideLoading(); + if (result[0] != undefined) { + this.list = result[0] + + if (this.list.flag.value == "N") { + this.lockingStatus = true + } else { + this.lockingStatus = false + } + + if (this.list.show_clean) { + this.show_clean = this.list.show_clean + } + if (this.list.clear_time) { + this.clear_time = this.list.clear_time + } + if (this.list.edition != null && this.list.edition.mark == 'standard') { + this.print_type = 0; + } else if (this.list.edition != null && this.list.edition.mark == 'unlimited') { + this.print_type = 1; + } + let ink = this.list.ink; + if (ink.length >= 6) { + this.inkStatusC = ink.substring(0, 1) == 0 ? true : false; + this.inkStatusM = ink.substring(1, 2) == 0 ? true : false; + this.inkStatusY = ink.substring(2, 3) == 0 ? true : false; + this.inkStatusK = ink.substring(3, 4) == 0 ? true : false; + this.inkStatusW = ink.substring(4, 5) == 0 ? true : false; + this.inkStatusHas = ink.substring(5, 6) == 0 ? true : false; + } + this.list.default_package.create_date = this.dateFormat(this.list.default_package + .expire_date); + if (this.list.machine_category_id == 63) { + + this.list.isSinglePlatep = false; + } + } + }).catch(err => { + uni.hideLoading(); + /* uni.showToast({ + title: err.msg, + icon: 'none' + }); */ + }) + }, + + //设备打印信息 加载数据 + loadGoodsList(direction) { + if (this.dataLoadState.pullDownRefresh || this.dataLoadState.reachBottom) return; + uni.showLoading({ + title: '正在加载中...' + }) + this.dataLoadState.pullDownRefresh = direction === Enums.DATA_DIRECTION.UP; + this.dataLoadState.reachBottom = direction === Enums.DATA_DIRECTION.DOWN; + if (this.dataLoadState.reachBottom) { + if (Math.ceil(this.queryPage.total / this.queryPage.per_page) < this.queryPage.page) { + return setTimeout(() => { + uni.showToast({ + title: '没有更多数据了!', + icon: 'none' + }); + }, 500); + } + } + logoservice.Machinelist(this.queryPage).then(result => { + this.long = true + let queryList = result.data.data + let newList = this.LoupanList.concat(queryList) + this.LoupanList = newList + //分页对象处理 + this.queryPage.total = result.data.total; + this.queryPage.per_page = result.data.per_page; + //停止当前页面下拉刷新 + if (this.dataLoadState.pullDownRefresh) uni.stopPullDownRefresh(); + //数据加载状态处理 false + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + uni.hideLoading(); + }).catch(err => { + //停止当前页面下拉刷新 + if (this.dataLoadState.pullDownRefresh) uni.stopPullDownRefresh(); + //数据加载状态处理 false + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + uni.hideLoading(); + }); + }, + + //做滚动加载使用 + loadMore() { + if (this.isTouchStart || this.currentTab.code == 0) { + return; + } + if (Math.ceil(this.queryPage.total / this.queryPage.per_page) < this.queryPage.page) { + return setTimeout(() => { + uni.showToast({ + title: '没有更多数据了!', + icon: 'none' + }); + }, 500); + } + this.queryPage.page = this.queryPage.page + 1; + if (this.currentTab.code == 1) { + this.loadGoodsList(Enums.DATA_DIRECTION.DOWN); + } + if (this.currentTab.code == 2) { + this.loadStockList(Enums.DATA_DIRECTION.DOWN) + } + }, + + //获取日期 + getToday() { + let myDate = new Date(); + let myMonth = myDate.getMonth() + 1; + if (myMonth < 10) { + myMonth = '0' + myMonth; //补齐 + } + let mydate = myDate.getDate(); + if (myDate.getDate() < 10) { + mydate = '0' + myDate.getDate(); //补齐 + } + this.queryPage.date = myDate.getFullYear() + '-' + myMonth + '-' + mydate; + }, + + //获取月份 + getMonth() { + let myDate = new Date(); + let myMonth = myDate.getMonth() + 1; + if (myMonth < 10) { + myMonth = '0' + myMonth; //补齐 + } + this.queryPage.month = myDate.getFullYear() + '-' + myMonth; + }, + + //获取店铺数据 + machineGetShopList() { + logoservice.MachineGetShop(this.shopQueryPage).then(result => { + if (result != null && result != undefined) { + this.shopList = result; + } + }).catch(err => { + + }); + }, + + //获取机器错误信息 + getMchineErrors(type) { + if (type == 0) { + this.is_update_ink = 1; + this.is_update_status = 0 + } else if (type == 1) { + this.is_update_ink = 0; + this.is_update_status = 1 + } else { + this.is_update_ink = 0; + this.is_update_status = 0 + } + uni.showLoading({ + title: '正在加载中...' + }) + logoservice.Machinelistdetail({ + m: 'Machine/getErrors', + machine_id: this.queryPage.machine_id, + is_update_status: this.is_update_status, + is_update_ink: this.is_update_ink + }).then(result => { + uni.hideLoading(); + this.machineErrors = result + }).catch(err => { + //uni.hideLoading(); + }) + }, + + //goodsItem加载全部交易类型数据 + getGoodsAttrList() { + logoservice.MoneystatementList({ + m: 'Machine/printRecord', + machine_id: this.queryPage.machine_id, + sub: 1 + }).then(result => { + + }).catch(res => { + uni.showToast({ + title: res.msg ? res.msg : '未查到交易类型选择', + icon: 'none' + }); + }); + }, + }, + + //下拉加载 + onPullDownRefresh() { + if (this.isTouchStart) { + return; + } + if (this.currentTab.code == 0) { + this.listdetail() + } + if (this.currentTab.code == 1) { + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + this.queryPage.page = 1; + this.queryPage.total = 0; + this.LoupanList = [] + this.loadGoodsList(Enums.DATA_DIRECTION.UP); + } + if (this.currentTab.code == 2) { + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + this.queryPage.page = 1; + this.queryPage.total = 0; + this.StcokList = [] + this.loadStockList(Enums.DATA_DIRECTION.UP); + } + uni.stopPullDownRefresh(); + }, + + //上拉加载 + onReachBottom() { + if (this.currentTab.code == 0 || this.isTouchStart) { + return; + } + if (this.LoupanList.length < 6) { + return setTimeout(() => { + uni.showToast({ + title: '没有更多数据了!', + icon: 'none' + }); + }, 500); + } + this.queryPage.page = this.queryPage.page + 1; + if (this.currentTab.code == 1) { + this.loadGoodsList(Enums.DATA_DIRECTION.DOWN) + } + }, + + onLoad(options) { + let that = this; + uni.getSystemInfo({ + success(res) { + that.autoCleanLeft = res.windowWidth - 100; + that.autoCleanTop = res.windowHeight - 180; + } + }); + + + + if (options.isShowBack == "false" || options.isShowBack == false) { + this.isShowBack = false + } else { + this.isShowBack = true; + } + + //options.isShowBack; + + + //console.log(this.isShowBack); + + this.getMonth(); + this.printingPickerValueArray = ['month']; + this.queryPage.machine_id = options.id + uni.setNavigationBarTitle({ + title: this.queryPage.machine_id + }) + uni.login({ + provider: 'weixin', + success: (res) => { + logoservice.login({ + m: 'Init/init', + code: res.code + }).then(result => { + this.$base.Userres = result //记录用户登录信息 + this.Userres_partner_id = this.$base.Userres.partner_id //总代理 + this.is_inner = this.$base.Userres.is_inner + logoservice.setwixinInfo(result); + this.listdetail(); + this.getMchineErrors(-1) + this.machineGetShopList(); + }).catch(err => { + uni.navigateTo({ + url: 'login', + }); + }) + }, + fail: (err) => { + //console.error('授权登录失败:' + JSON.stringify(err)); + } + }); + }, + + onShow() { + // this.isTouchStart = false; + // if (this.$base != null && this.$base.Userres != null) { + // this.be_child = this.$base.Userres.be_child //子代理 + // } + this.listdetail(); + this.getMchineErrors(-1) + } + }; +</script> + +<style lang="scss"> + page { + width: 100%; + height: 100%; + background: #fff; + } + + .eq-detail-score { + padding: 40upx 0; + width: 100%; + height: 210upx; + margin: 0upx auto; + background: #43CF7C; + border-radius: 20upx; + display: flex; + align-items: center; + font-size: 26upx; + color: #fff; + } + + .green { + background-color: #4FB36B !important; + color: #FFFFFF; + } + + /*无数据 */ + .noData { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + } + + .noData_img { + width: 260upx; + height: 260upx; + display: block; + margin: 0upx auto 102upx; + } + + .noData_title { + text-align: center; + font-size: 36upx; + } + + .noData_text { + margin-top: 35upx; + font-size: 30upx; + font-weight: 400; + } + + .noData_but { + width: 230upx; + height: 70upx; + line-height: 70upx; + text-align: center; + color: #F56364; + margin: 140upx auto 0; + border: 1upx solid #F56364; + border-radius: 35upx; + } + + /*去除button默认样式 */ + button::after { + border: none; + } + + button { + background-color: transparent; + padding-left: 0; + padding-right: 0; + line-height: inherit; + } + + .lang-open { + transform: rotate(90deg); + transition: transform 0.5s; + } + + .lang-close { + transform: rotateY(0deg); + transition: transform 0.5s; + } + + //2020-11-17 + .content-open { + height: 90upx; + overflow: hidden; + transition: all 0.4s cubic-bezier(0.25, 1.0, 0.25, 1.0); + } + + .content-close { + height: 0; + transition: all 0.4s cubic-bezier(0.25, 1.0, 0.25, 1.0); + } + + .item-open { + height: 40upx; + transition: all 0.4s cubic-bezier(0.25, 1.0, 0.25, 1.0); + } + + .item-close { + opacity: 0; + height: 0; + } + + /*输入框弹框显示 */ + .weui-search-bar { + position: relative; + padding: 8upx 10upx; + display: flex; + height: 135upx; + background: #FFFFFF; + align-items: center; + } + + .weui-search-bar_form { + width: 100%; + border-radius: 50upx; + background: #F6F6F6; + } + + .weui-search-bar_input { + height: 80upx; + line-height: 80upx; + font-size: 25upx; + padding-left: 24upx; + } + + /*底部弹框显示 */ + .uni-pop_show { + display: flex; + flex-direction: column; + } + + .uni-calendar-item--isDay-text.data-v-09f1e40c { + color: #5CE6B5 !important; //5CE6B5 + } + + .uni-calendar-item--isDay.data-v-09f1e40c { + background: #5CE6B5 !important; + color: #fff !important; + } + + .uni-calendar-item--checked.data-v-09f1e40c { + background: #5CE6B5 !important; + color: #fff !important; + } + + .uni-numbox__value { + width: 120upx !important; + } + + page { + width: 100%; + height: 100%; + background: #F5F5F5; + } + + .eq_list_button { + display: flex; + flex-direction: row; + line-height: 60upx; + padding-bottom: 20upx; + } + + .eq_list_button_ul { + flex: 1; + } + + .eq_list_button_li { + margin: auto; + font-size: 24upx; + color: #FFFFFF; + width: 150upx; + font-weight: bold; + text-align: center; + line-height: 60upx; + height: 60upx; + background-color: #5CE6B6; + } + + .uni-swiper-tab { + border-bottom: 1upx solid #F5F5F5; + } + + .clean-bt { + border-radius: 50%; + width: 200upx; + height: 200upx; + bottom: 160upx; + right: 20upx; + position: fixed; + font-size: 27upx; + text-align: center; + line-height: 130upx; + z-index: 99991; + justify-content: center; + align-items: center; + } + + .order { + width: 100%; + height: 100%; + background-color: #fff; + + .uni-tab-bar { + height: auto !important; + + .uni-swiper-tab { + position: fixed; + top: var(--window-top); + z-index: 999; + width: 100%; + line-height: 85upx; + height: 85upx; + + .swiper-tab-list { + width: calc(100% / 3); + font-size: 30upx; + } + } + + .active { + color: #43CF7C; + } + } + + .way-list { + margin: 0 20upx; + padding-top: 20upx; + border-radius: 10upx; + + .topBox { + width: calc(100% - 60upx); + margin-left: 30upx; + margin-top: 15upx; + justify-content: center; + } + + .topLittleBOX-1 { + font-size: 26upx; + width: 120upx; + color: #333; + overflow: text-align; + } + + .topLittleBOX-2 { + padding-left: 20upx; + padding-top: auto; + padding-bottom: auto; + display: flex; + vertical-align: middle; + flex-direction: row; + align-items: center; + width: calc(100% - 120upx); + position: relative; + } + + .row-1 { + height: 30upx; + background-color: #43CF7C; + border-radius: 20upx; + width: 0upx; + transition: width 1.5s linear; + } + + .rowText { + margin-left: 10upx; + font-size: 26upx; + color: #333; + float: right; + } + + .way-item { + background: #FFFFFF; + border-radius: 10upx; + margin-bottom: 20upx; + } + + .way { + height: 120upx; + min-height: 90upx; + display: flex; + align-items: center; + font-size: 28upx; + + .text { + width: 250upx; + padding-left: 20upx; + color: #fff; + } + + .value { + width: calc(100% - 280upx); + display: flex; + + .prick { + width: calc(100% - 40upx); + } + + .fa-angle-right { + width: 40upx; + font-size: 50upx; + } + } + } + } + + .content { + padding-top: 10upx; + + .order-list { + min-height: 350upx; + width: 100%; + border-radius: 10upx; + + .item { + min-height: 70upx; + display: flex; + align-items: center; + font-size: 26upx; + border-bottom: 1upx solid #F5F5F5; + + .text { + width: 320upx; + color: #000; + font-size: 29upx; + } + + .value { + width: calc(100% - 120upx); + display: flex; + color: #888; + margin-top: 15upx; + margin-bottom: 15upx; + + .prick { + width: calc(100% - 35upx); + } + + .fa-angle-right { + width: 30upx; + font-size: 50upx; + } + } + } + } + } + } + + .print-score { + width: 100%; + height: 280upx; + background: #43CF7C; + border-radius: 20upx; + display: flex; + align-items: center; + font-size: 26upx; + color: #fff; + + .print { + width: 100%; + + .text { + line-height: 50upx; + color: #fff; + } + } + } + + .list-clean { + height: 80upx; + background: #FFFFFF; + padding-left: 20upx; + padding-right: 23upx; + margin-top: 10upx; + border-radius: 15upx; + margin-left: 20upx; + margin-right: 15upx; + padding-top: 18upx; + } + + .item-new-list { + padding-top: 0upx; + padding-left: 30upx; + padding-right: 25upx; + background: #fff; + margin: 0upx 30upx 25upx 30upx; + border-radius: 20upx; + box-shadow: 0 0 10upx 10upx #F5F5F5; + color: #000; + } + + .item-new-list-text { + margin: -10upx 45upx 30upx 45upx; + color: #999; + font-size: 25upx; + width: calc(100% - 90upx); + } + + .content-color { + color: #fff; + } + + .item-new-list-top { + margin: 30upx 30upx 25upx 30upx; + background: #fff; + min-height: 80upx; + border-radius: 20upx; + box-shadow: 0 0 10upx 10upx #F5F5F5; + display: flex; + flex-direction: row; + padding-top: 25upx; + padding-bottom: 28upx; + + .image { + display: flex; + align-items: center; + width: 18%; + min-height: 80upx; + } + + .text { + display: flex; + width: 64%; + min-height: 80upx; + display: flex; + flex-direction: column; + justify-content: center; + font-size: 22upx; + color: #999; + } + + } + + .eq-detail-top-layout { + display: flex; + flex-direction: row; + margin-top: 5upx; + height: 400upx; + + .left { + display: flex; + flex-direction: column; + width: 15%; + + .status { + background: #E72C31; + font-size: 30upx; + color: #FFFFFF; + /*border-top-right-radius: 30upx; */ + border-radius: 30upx; + height: 60upx; + width: 140upx; + text-align: center; + line-height: 60upx; + margin-top: 15upx; + margin-left: 20upx; + font-weight: 600; + } + } + + .center { + display: flex; + flex-direction: column; + width: 70%; + align-items: center; + justify-content: center; + + .ink { + display: flex; + flex-direction: row; + height: 120upx; + margin-top: 10upx; + + .content { + display: flex; + flex-direction: column; + width: 40upx; + height: 120upx; + align-items: center; + justify-content: center; + + .text { + font-size: 26upx; + color: #999; + margin-top: 8upx; + height: 30upx; + line-height: 30upx; + width: 100%; + text-align: center; + + } + + .image { + width: 50upx; + height: 50upx; + + } + } + } + } + + .right { + width: 15%; + } + } + + .item-new-list-color { + + background: #fff; + margin: 30upx 30upx 25upx 30upx; + border-radius: 20upx; + box-shadow: 0 0 10upx 10upx #F5F5F5; + height: 180upx; + display: flex; + flex-direction: row; + width: calc(100% - 60upx); + + + .content { + + display: flex; + flex-direction: column; + width: 25%; + align-items: center; + justify-content: center; + + + .image { + height: 65upx; + width: 65upx; + } + + .text { + color: #000; + width: 100%; + font-size: 23upx; + margin-top: 8upx; + text-align: center; + + } + + } + } + + + + .ink-list-bc { + width: 20upx; + height: 100upx; + background: #fff; + border: 1upx solid #2A82E4; + justify-content: end; + align-items: flex-end; + display: flex; + border-radius: 12upx; + + .in { + width: 100%; + height: 55upx; + background: #2A82E4; + border-radius: 12upx; + } + + } +</style> \ No newline at end of file diff --git a/pages/mall/eq-details.vue b/pages/mall/eq-details.vue new file mode 100644 index 0000000..cd1cd90 --- /dev/null +++ b/pages/mall/eq-details.vue @@ -0,0 +1,2409 @@ +<template> + <view class="order full-height full-width"> + + <!-- 暂无相关信息 --> + <view v-if="!list&&long"> + <view class="noData"> + <image src="../../static/icon_guaqi.png" mode="aspectFill" class="noData_img"></image> + <view class="noData_title"> + 非常抱歉,您没有权限查阅当前打印站的信息!<br> + </view> + <view class="noData_but" @click="tomain()">返回</view> + </view> + + </view> + + <view class="uni-tab-bar full-width" v-if="list"> + <!-- 状态栏 --> + <scroll-view id="tab-bar" class="uni-swiper-tab bg-white-color"> + <view v-for="(tab, index) in tabBars" :key="index" + :class="['swiper-tab-list', currentTab.code == tab.code ? 'active' : '']" :id="tab.code" + :data-current="index" @click="tapTab(tab)"> + <view style="width: 100%; display:flex;flex-direction:row;"> + <text style="width: 100upx;padding-left:90upx;">{{ tab.name }}</text> + <view v-if="tab.name != '' && currentTab.code== tab.code" + style="width:55upx;background: #43CF7C;height:6upx;;margin-top: 78upx;margin-left: -77upx;"> + </view> + </view> + </view> + </scroll-view> + + <view scroll-y @scrolltolower="loadMore()" class="full-width content" v-if="long" + style="margin-bottom: 20upx; overflow: auto; width: 100%;height: 100%;"> + <!-- 机器 --> + <view class="order-list" v-if="currentTab.code == 0"> + <view style="width: 100%; height: auto;padding: 0upx 20upx 0upx 20upx"> + <view class="eq-detail-score bg-white-color full-width" style="position: relative;"> + <view + style="position: absolute;top: 30upx;width: 180upx; height: 60upx; border-top-right-radius: 40upx; border-bottom-right-radius:40upx; background: #FFFFFF;text-align: center;padding-top: 10upx;"> + <text style="color:#383838;font-size:40upx;font-weight: bold;">{{list.id}}</text> + </view> + <view class="eq-detail-score content-color align-center"> + <view + style="position: center; margin-top: -5upx;height: 160upx;width: 100%;display: flex;flex-direction: column;" + @click="printUseMoney()"> + <view v-if="print_type == 0" style="padding-top: 50upx; "> + <text + v-if="getPrintSurplusCount(list.package_total.quota - list.package_total.used_quota) == 1" + style="color: #fff; font-size: 50upx; margin-left:15upx; font-weight: bold; text-align: center;height: 50upx;">{{list.package_total.quota - list.package_total.used_quota}}</text> + <text + v-if="getPrintSurplusCount(list.package_total.quota - list.package_total.used_quota) == 2" + style="color: #FF8D1A; font-size: 50upx; margin-left:15upx; font-weight: bold; text-align: center;height: 50upx;">{{list.package_total.quota - list.package_total.used_quota}}</text> + </view> + <view v-if="print_type == 1" style="padding-top: 50upx;"> + <text + style="color: #fff; font-size: 46upx; margin-left:15upx; font-weight: bold; text-align: center;height: 50upx;">无限量</text> + </view> + <text <text + style="color: #fff; font-size: 22upx; margin-left:15upx; ; text-align: center;">剩余打印量(次)</text> + </view> + </view> + </view> + </view> + <view v-if="print_type == 0" + style="margin-top: -45upx;background: #383838;margin-left: 45upx;margin-right: 45upx; border-radius: 20upx; width: calc(100% -90upx); height: 80upx; position: relative;line-height: 80upx;align-items: center;"> + <text style="color: #FFFFFF; font-size: 24upx;margin-left: 80upx;">标准版</text> + <text + style="color: #FFFFFF; font-size: 24upx;float: right;margin-right: 80upx;width: 150upx;height: 60upx;" + @click="packageDetail(list.id)">了解更多权益</text> + <label class="fa fa-angle-right" + style="color: #fff; font-size: 30upx; float: right; margin-top: 25upx; margin-right: -160upx;"></label> + </view> + <view v-if="print_type == 1" + style="margin-top: -40upx;background: #FF8D1A;margin-left: 45upx;margin-right: 45upx; border-radius: 20upx; width: calc(100% -90upx); height: 80upx; position: relative;line-height: 80upx;align-items: center;"> + <text style="color: #FFFFFF; font-size: 24upx;margin-left: 80upx;">无限版</text> + <text + style="color: #FFFFFF; font-size: 24upx;float: right;margin-right: 80upx; width: 150upx;height: 60upx;" + @click="packageDetail(list.id)">了解更多权益</text> + <label class="fa fa-angle-right" + style="color: #fff; font-size: 30upx; float: right; margin-top: 25upx; margin-right: -160upx;"></label> + </view> + <view v-else-if="print_type != 1 && print_type != 0 " + style="margin-top: -40upx;background:transparent;margin-left: 45upx;margin-right: 45upx; border-radius: 20upx; width: calc(100% -90upx); height: 80upx; position: relative;line-height: 80upx;align-items: center; visibility:display ;"> + </view> + <view + style="margin-top: -18upx; padding: 20upx 15upx 15upx;background: #FFFFFF;margin-left: 20upx;margin-right: 15upx; border-radius: 20upx;"> + <view class="item full-width"> + <label class="text content-color">所属代理</label> + <label class="value content-color"> + <text v-if="Userres_partner_id == 0" style="text-align: right;" + class="full-width">{{list.partner}}</text> + <text v-else style="text-align: right;" class="full-width">{{list.partner}}</text> + </label> + </view> + <view class="item full-width" style="border: 0;"> + <label class="text content-color">设备类型</label> + <label class="value content-color"> + <text style="text-align: right;" class="full-width">{{list.category}}</text> + </label> + </view> + <view class="item full-width" style="border: 0;"> + <label class="text content-color">关联商品</label> + <label class="value content-color"> + <text style="text-align: right;" class="full-width">{{list.goods_category}}</text> + </label> + </view> + <view class="item full-width" style="border: 0;"> + <label class="text content-color"></label> + <label class="value content-color"> + <text style="color:#383838;font-size: 22upx;text-align: right" + class="full-width">开通时间{{dateFormat(list.create_time)}}</text> + </label> + </view> + <view v-if="list.default_package !=null" class="item full-width" style="border: 0; "> + <label class="text content-color"></label> + <label class="value content-color" style="margin-bottom: 5upx;"> + <text v-if="getDaysDifference(list.default_package.expire_date) > 100" + style="text-align: right;color: #1FBA40; font-size: 22upx;" + class="full-width">有效日期至{{list.default_package.create_date}}</text> + <text + v-if="getDaysDifference(list.default_package.expire_date) <= 100 && getDaysDifference(list.default_package.expire_date) > 30" + style="text-align: right;color: #FF8D1A; font-size: 22upx;" + class="full-width">有效日期至{{list.default_package.create_date}}</text> + <text v-if="getDaysDifference(list.default_package.expire_date) <= 30" + style="text-align: right;color: #FB1B1B; font-size: 22upx;" + class="full-width">有效日期至{{list.default_package.create_date}}</text> + </label> + </view> + <view class="item full-width" @click="showPicker()" + style=" border-top: 1upx solid #f6f6f6;padding-top: 10upx;margin-top: 5upx;"> + <label class="text content-color">店铺</label> + <label class="value content-color"> + <view style="text-align: right;line-height: 50upx;" class="full-width" + v-if="list.shop_id">{{category(list.shop_id)}}</view> + <view style="text-align: right; color: #888888; line-height: 50upx;" class="full-width" + v-if="!list.shop_id">没有关联店铺</view> + <label class="fa fa-angle-right align-right sub-color"></label> + </label> + </view> + <view class="item full-width" > + <label class="text content-color">地址</label> + <label class="value content-color"> + <text style="text-align: right;" + class="full-width">{{categoryaddress(list.shop_id)}}</text> + </label> + </view> + <view> + </view> + </view> + + <view style="margin-top: 10upx; padding: 20upx 15upx 15upx;background: #FFFFFF;margin-left: 20upx;margin-right: 15upx; border-radius: 20upx;"> + <view class="item full-width" + style=" padding-top: 10upx;margin-top: 5upx;font-size: 26upx;height:50upx "> + <label class="text content-color">设备</label> + <label class="value content-color"> + <text v-if="list.status.value == 0" style="text-align:right; color: #E72C31;" + class="full-width">离线</text> + <text v-if="list.status.value == 1" style="text-align:right; color: #5CE6B5;" + class="full-width">正常</text> + <text v-if="list.status.value == 2 " style="text-align:right; color: #5CE6B5;" + class="full-width">生产中</text> + <text v-if="list.status.value == 3" style="text-align:right; color: #E72C31;" + class="full-width">故障</text> + <text v-if="list.status.value == 4" style="text-align:right; color: #E72C31;" + class="full-width">调试</text> + <text v-if="list.status.value == 5" style="text-align:right; color: #E72C31;" + class="full-width">升级中</text> + </label> + </view> + + <view class="item full-width" style="border: 0; line-height: 48upx; min-height: 48upx; font-size: 26upx; height:48upx"> + <label class="text content-color">打印</label> + <label class="value content-color"> + <text style="text-align: right; color: #5CE6B5;;" v-if="list.printer_client > 0" + class="full-width">正常</text> + <text style="text-align: right; color: #E72C31;" v-if="list.printer_client == 0" + class="full-width">掉线</text> + </label> + </view> + + <view class="item full-width" + style="border: 0; line-height: 45upx; min-height: 45upx; font-size: 26upx;height:45upx" + v-if="list.isSinglePlatep==false"> + <label class="text content-color">平板</label> + <label class="value content-color"> + <text style="text-align: right; color: #5CE6B5;" v-if="list.android_client > 0" + class="full-width">正常</text> + <text style="text-align: right; color: #E72C31;" v-if="list.android_client == 0" + class="full-width">掉线</text> + </label> + </view> + + <view class="item full-width" + style=" border-top: 1upx solid #f6f6f6;padding-top: 10upx;margin-top: 5upx;height:53upx"> + <label class="text content-color">版本</label> + <label class="value content-color"> + <text style="text-align: right;" + class="full-width">{{list.pc_version}}/{{list.version}}</text> + </label> + </view> + <!-- <view v-if="list.status.value == 3"> + <view class="item full-width" v-if="list.error_time " style="height:50upx"> + <label class="text content-color" style="color: #E72C31;">错误时间</label> + <label class="value content-color"> + <text style="text-align: right;color: #E72C31;" + class="full-width">{{list.error_time || ''}}</text> + </label> + </view> + <view class="item full-width" v-if="list.errors" style="height:50upx"> + <label class="text content-color" style="color: #E72C31;">错误信息</label> + <label class="value content-color"> + <text style="text-align: right;color: #E72C31;" + class="full-width">{{list.errors || ''}}</text> + </label> + </view> + </view> --> + </view> + + <!-- v-if="list.isSinglePlatep == false && be_child == 0" --> + <view style="margin-top: 10upx; + padding: 20upx 15upx 15upx; + background: #FFFFFF; + margin-left: 20upx; + margin-right: 15upx; + border-radius: 20upx;" > + <view class="item full-width" style="height:85upx"> + <label class="text content-color" style="color:#333333; font-size: 28upx;">墨水容量</label> + <label class="value content-color"> + <view style=" + display: flex; + flex-direction: row; + width: 100%;justify-content: flex-end; height: 40upx; + padding-top: 5upx; + padding-bottom: 5upx;"> + <view style=" + display: flex; + flex-direction: column; height: 30upx;"> + <view :style="{color: inkStatusC ? '#333333' : '#999' }" + style="width:40upx; height: 30upx; font-size: 26upx; color: #999; ">C + </view> + <view v-if="!inkStatusC" + style="margin-top: -16upx; width: 25upx; height: 5upx; background: #999; margin-left: -3upx;"> + </view> + </view> + <view style=" display: flex; + flex-direction: column;height: 30upx; "> + <view :style="{color: inkStatusM ? '#333333' : '#999' }" + style="width:40upx; height: 30upx; font-size: 26upx; color: #999; ">M + </view> + <view v-if="!inkStatusM" + style="margin-top: -16upx; width: 25upx; height: 5upx; background: #999; margin-left: -3upx;"> + </view> + </view> + <view style="display: flex; + flex-direction: column;height: 30upx; "> + <view :style="{color: inkStatusY ? '#333333' : '#999' }" + style="width:40upx; height: 30upx; font-size: 26upx; color: #999; ">Y + </view> + <view v-if="!inkStatusY" + style="margin-top: -16upx; width: 25upx; height: 5upx; background: #999; margin-left: -3upx;"> + </view> + </view> + <view style="display: flex; + flex-direction: column;height: 30upx; "> + <view :style="{color: inkStatusK ? '#333333' : '#999' }" + style="width:40upx; height: 30upx; font-size: 26upx; color: #999; ">K + </view> + <view v-if="!inkStatusK" + style="margin-top: -16upx; width: 25upx; height: 5upx; background: #999; margin-left: -3upx;"> + </view> + </view> + <view style=" display: flex; + flex-direction: column; height: 30upx; "> + <view :style="{color: inkStatusW ? '#333333' : '#999' }" + style="width:40upx; height: 30upx; font-size: 26upx; color: #999; ">W + </view> + <view v-if="!inkStatusW" + style="margin-top: -16upx; width: 28upx; height: 5upx; background: #999; margin-left: 0upx;"> + </view> + </view> + <view + style=" display: flex; flex-direction: column; height: 30upx; align-items: center; margin-top: -1upx; "> + <view :style="{color: inkStatusHas ? '#333333' : '#999' }" + style="width:54upx; height: 30upx; font-size: 26upx; color: #999; margin-left: 4upx; "> + 废墨</view> + <view v-if="!inkStatusHas" + style="margin-top: -16upx; width: 60upx; height: 5upx; background: #999; margin-left: -1upx;"> + </view> + </view> + </view> + </label> + </view> + + <view class="item full-width" style="height:85upx; border-top: 1upx solid #f6f6f6" > + <label class="text content-color" style="color: #333333;font-size: 28upx;">最近清洗</label> + <label class="value content-color"> + <label class="value content-color" style="width: 400upx;"> + <text style="text-align: right;color: #999; font-size: 24upx; margin-top: 20upx;" + class="full-width">{{clear_time }}</text> + </label> + <label v-if=" show_clean == 1 && !isAutoStartClean " + @click="cleanPrintPop()" class="fa fa-angle-right align-right sub-color" + style="margin-top: 6upx; margin-right: 0upx;"></label> + </label> + </view> + + <view class="item full-width" style="height:85upx;border-top: 1upx solid #f6f6f6"> + <label class="text content-color" style="color: #333333;font-size: 28upx;">最近开机</label> + <label class="value content-color"> + <label class="value content-color" style="width: 400upx;"> + <text style="text-align: right;color: #999; font-size: 24upx;" + class="full-width">{{list.last_connect_time ? list.last_connect_time : "" }}</text> + </label> + </label> + </view> + </view> + + <view style="margin-top: 10upx; padding: 20upx 15upx 15upx;background: #FFFFFF;margin-left: 20upx;margin-right: 15upx; border-radius: 20upx;"> + <view class="item full-width" style="height: 90upx;"> + <label class="text content-color" style="color:#333333; font-size: 28upx;">二维码</label> + <label class="value content-color"> + <input type="text" disabled="disabled" class="full-width" /> + <image @click.stop="showPreviewImage(list.h5_code,list.id)" + v-if="list.h5_code !='' && list.h5_code " + :src="list.h5_code + '?x-oss-process=image/watermark,text_'+getStrToBase64(list.id)+',g_nw,size_50,shadow_50,x_550,y_850,color_4bf25a'" + mode="aspectFit" + style="width:80upx; height:80upx; border-radius:10upx; display: block; float: right;margin-top: -5upx;"> + </image> + <image @click.stop="showPreviewImage(list.min_code,list.id)" v-if="list.min_code" + :src="list.min_code + '?x-oss-process=image/watermark,text_'+getStrToBase64(list.id)+',g_nw,size_50,shadow_50,x_550,y_850,color_4bf25a'" + mode="aspectFit" + style="width:80upx; height:80upx; border-radius:10upx; display: block; float: right;margin-top: -5upx; margin-left: 25upx;"> + </image> + <label class="fa fa-angle-right align-right sub-color" + style="margin-top: 8upx;margin-left: 5upx;"></label> + </label> + </view> + + <view class="item full-width" style="height: 90upx;border-top: 1upx solid #f6f6f6" @click="toLiquidationList()"> + <label class="text content-color" style="color: #333333;font-size: 28upx;">收益</label> + <label class="value content-color"> + <input type="text" disabled="disabled" class="full-width" /> + <label class="fa fa-angle-right align-right sub-color"></label> + </label> + </view> + + <view class="item full-width" style="height: 90upx;border-top: 1upx solid #f6f6f6" @click="toOrderList()"> + <label class="text content-color" style="color: #333333;font-size: 28upx;">订单</label> + <label class="value content-color"> + <input type="text" disabled="disabled" class="full-width" /> + <label class="fa fa-angle-right align-right sub-color"></label> + </label> + </view> + </view> + </view> + + <!-- 货道 Freight way--> + <view class="way-list" + v-if="currentTab.code == 2 && list.isSinglePlatep == false && stockData != null "> + <!-- 库存数量 --> + <view class="print-score bg-white-color full-width" style="position: relative;height:230upx;"> + <view class="print content-color "> + <view style="position: absolute;top: 30upx;width: 180upx; height: 60upx; border-top-right-radius: 40upx; + border-bottom-right-radius:40upx; background: #FFFFFF;text-align: center; + padding-top: 10upx;"> + <text + style="color:#383838;font-size:40upx;font-weight: bold;">{{queryPage.machine_id}}</text> + </view> + <text @click="toStockList()" + style="color:#fff;font-size:30upx; position: absolute; right: 20upx; top:50upx">调整</text> + <view + style="height: 70upx;position: absolute; left:0upx;top:120upx;width:100%;display:flex;flex-direction:row"> + <text + style="color: #fff; font-size: 50upx;width:33%;;font-weight: 500; text-align: center; padding-left:10upx">{{stockData.all_stock}}</text> + <text + style="color: #fff; font-size: 50upx;width:33%;;font-weight: 500;text-align: center;padding-left:20upx;">{{stockData.now_stock}}</text> + <text + style="color: #fff; font-size: 50upx;width:33%;;font-weight: 500;text-align:center;padding-right:30upx;">{{stockData.need_stock}}</text> + </view> + <view + style="position: absolute; left:0upx;top:180upx;width:100%;display:flex;flex-direction:row"> + <text + style="color:#fff; font-size:23upx;text-align:center;width:33%; padding-left:5upx;">总库存(个)</text> + <text + style="color:#fff; font-size:23upx;margin-left:30upx;text-align:center;width:33%;">实时库存(个)</text> + <text + style="color: #fff; font-size:23upx;text-align:center;width:33%;padding-right:25upx;">需补货(个)</text> + </view> + </view> + </view> + + <!-- 库存列表 --> + <view style="width: 100% ; margin-top: 20upx; background: #fff; border-radius: 20upx; padding-bottom: 20upx; "> + <view style="padding-top: 10upx; font-size: 24upx; font-weight: 550; height: 60upx; width: calc(100% - 60upx); border-bottom: 1upx solid #eee; margin-left: 30upx;"> + 补货明细</view> + <view v-if="stockDataList.length > 0"> + <view class='topBox' v-for="(item, index) in stockDataList" :key="index"> + <view style="display: flex;flex-direction: row;align-items: center;" + @click="selectStockList(index, item)"> + <span v-if="item.list !=null && item.list.length > 0" class="iconfont icon-xiala" + style="font-size: 20upx; color: #99999;margin-right:10upx;"></span> + <span v-if="item.list == null || item.list.length == 0" + style="font-size: 20upx; color: #99999;margin-right:10upx; width: 20upx;"></span> + <view class='topLittleBOX-1' style="width: 240upx;">{{item.name}}</view> + <view class='topLittleBOX-2' style="width: calc(100% - 240upx); "> + <view class='row-1' :style="{width: item.row2 +'px;max-width:90%'}"></view> + <view class='rowText' style="position: absolute; right: 80upx"> + {{item.need_stock}} + </view> + </view> + </view> + <view v-if="item.isDown" v-for="(itemStock, index) in item.list" :key="index" + style="display: flex;flex-direction: row;height: 55upx; align-items: center; position: relative; "> + <view style="width: 250upx;font-size: 26upx;color: #333; margin-left: 30upx; "> + {{itemStock.channel_no}} + </view> + <view style="font-size: 26upx;color: #333;position: absolute; right: 80upx"> + {{itemStock.need_stock}} + </view> + </view> + </view> + </view> + <view style="width: 100%; + height: 70upx; + line-height: 80upx; + text-align: center; + margin-top: 10upx;" v-if="stockDataList == null || stockDataList.length == 0">暂时不需要补货</view> + </view> + </view> + + <!-- 打印 --> + <view style=" background: #F1F1F1; position: fixed; width:100%;top: 85upx; z-index: 99;height: 190upx;" + v-if="currentTab.code == 1"> + <view style="height: 20upx;width:100%;background: #F1F1F1;"></view> + <view + style="width:calc(100% -40upx);padding-top: 20upx; background: #FFFFFF; border-radius: 20upx;margin-left:20upx; margin-right: 20upx;"> + <view + style="width:100%; background: #FFFFFF;height: 140upx; line-height: 140upx;padding-top: 10upx;" + @click="togglePopup()"> + <view + style="width: calc(100% - 40upx);border-radius:50upx; height: 90upx; border:2upx solid #F1F1F1;margin-left: 20upx; margin-right: 20upx;"> + <text + style="color: #333333;float: left;margin-top: -20upx;margin-left: 30upx;font-size: 27upx;">{{attr == null ? '全部打印类型' : attr}}</text> + <span class="iconfont icon-xiala" + style="margin-left: 10upx; font-size: 20upx; color: #BCBEC1;float: right ;margin-top: -25upx;margin-right: 30upx;"></span> + </view> + </view> + <view style="display: flex; width: 100%;height: 40upx;margin-top: 20upx;"> + <view style="font-size: 28upx; line-height: 40upx; width: 50%; text-align: left;color: #333333;margin-left: 35upx;margin-top: -30upx;"> + 作品数量:{{queryPage.total}}件</view> + <view + style="width: calc(100% / 2); text-align: right; padding: 25upx 15upx 25upx 25upx; margin-right: 35upx;margin-top: -55upx;" + @click="printingShowPicker('selector')"> + <text style="color: #333333;" v-if="queryPage.year">{{queryPage.year}}年</text> + <text style="color: #333333;" v-if="queryPage.month">{{queryPage.month}}月</text> + <text style="color: #333333;" v-if="queryPage.date">{{queryPage.date}}</text> + <span class="iconfont icon-xiala" style="margin-left: 10upx; font-size: 20upx; color: #BCBEC1;"></span> + </view> + </view> + </view> + </view> + + <view class="order-list" v-if="currentTab.code == 1"> + <view style="height: 180upx; position: relative;z-index: 9;"></view> + <!-- 动态数据 --> + <view v-if="LoupanList.length > 0" style="overflow: hidden; position: relative;"> + <view style="margin-top: 70upx;padding-bottom:30upx;"> + <view v-for="(item, index) in LoupanList" :key="index" + style="display: flex; margin-left:30upx;margin-right: 30upx; + border-radius: 30upx; font-size: 24upx; + border-top: 1upx solid #F5F5F5; padding-bottom:30upx;padding-top: 15upx;margin-top: 20upx;background: #FFFFFF; "> + <view + style="margin-top:-15upx;height:40upx;line-height: 50upx;text-align:center; width: 140upx;"> + <view v-if="item.status.text == '生产完成' " style=" color: #FFFFFF;font-size: 24upx;border-bottom-right-radius: 30upx; background:#43CF7C; + border-top-left-radius: 30upx;height: 50upx;width: 140upx;"> 生产完成</view> + <view v-if="item.status.text == '生产中'" style=" color: #FFFFFF;font-size: 24upx;border-bottom-right-radius: 30upx; background:#FF8D1A; + border-top-left-radius: 30upx;height: 40upx;width: 140upx;"> 生产中</view> + <view + v-if="item.status.text == '打印失败' ||item.status.text == '失败' || item.status.text == '取消生产' || item.status.text == '等待出料' " + style=" color: #FFFFFF;font-size: 24upx;border-bottom-right-radius: 30upx; background:#D43030; border-top-left-radius: 30upx;height: 40upx;width: 140upx;"> + {{item.status.text}} + </view> + </view> + <view style="width: auto; display: flex;" @click="previewImage(item,LoupanList)"> + <image :src="item.works_image + '?x-oss-process=image/resize,lfit,w_115'" + style="width:115upx; height:115upx; margin: auto; align-items: center;margin-left:-130upx; margin-top: 35upx;" + mode="aspectFill"></image> + </view> + <view style="display: flex;flex-direction: column;width: 60%;margin-left: 20upx;"> + <view style="height: 40upx;font-size: 30upx;font-weight: bold;"> + {{item.name}} + </view> + <view style="height: 40upx;font-size:22upx;"> + {{item.machine_id}}--{{item.goods_specs}} + </view> + <view @click="reprint(item,index)" + style="margin-top: 10upx; display: flex;flex-direction: row; margin-left: 5upx;"> + <text v-if="item.is_excess == 0" + style="margin-right: 10upx;font-size: 22upx;color: #595959; ">套餐卡</text> + <text v-if="item.is_excess == 1" + style="margin-right: 10upx;font-size: 22upx;color: #595959; ">打印卡</text> + </view> + <view style="font-size: 26upx;margin-top: 5upx;margin-left: 2upx;"> + {{item.create_time}} + </view> + <view v-if="item.min!= '' && item.min!= null" + style="font-size: 26upx;margin-left: 5upx;">{{item.min}}(用时)</view> + </view> + <view v-if=" item.status.value!== 0 " style="width: 20%;display: flex; align-items: center; justify-content: center; + text-align: center; line-height: 30upx; color: #fff;" @click="Reprint(item)"> + <text style="width: 80upx;height: 80upx; line-height:80upx; font-size: 23upx;text-align:center;color: #FFFFFF;background-color: rgba(67, 207, 124, 1.0);border-radius: 80px;text-align: center;margin-right: 25upx;"> + 恢复</text> + </view> + </view> + </view> + </view> + <!-- 暂无相关信息 --> + <view class="align-center content-color" + style="position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%);" + v-if=" LoupanList.length == 0 || LoupanList.length == null "> + <span class="iconfont icon-wushuju" + style="font-size: 100upx; text-align: center; color: #B2B2B2;"></span> + <view style="color: #B2B2B2; text-align: center; line-height: 50upx;font-size: 24upx;">当前无打印 + </view> + </view> + </view> + </view> + </view> + + <!-- 店铺 --> + <mpvue-picker ref="mpvuePicker" :themeColor="'#53B2B0'" :mode="mode" :pickerValueDefault="pickerValueDefault" + @onChange="onChange" @onConfirm="onConfirm" @onCancel="onCancel" :pickerValueArray="pickerValueArray"> + </mpvue-picker> + + <!-- 年月日 --> + <mpvue-pickernew ref="printingMpvuePicker" :themeColor="'#53B2B0'" + :pickerValueDefault="printingpickerValueDefault" @onChange="onChange" @onCancel="onCancel" + @onConfirm="onConfirmPrinting" :pickerValueArray="printingPickerValueArray"></mpvue-pickernew> + + <!-- 中间弹框,加货道输入框--> + <uni-popup ref="showshareinput" type="center" @change="change"> + <view style="width:600upx; margin:auto; display: flex; flex-direction: column;"> + <view + style="width:100%; height: 400upx; background: #FFFFFF; border-radius: 10upx; position: relative;"> + <view style="width:100%; text-align: center; margin:30upx 0 0;"> + <label>仓库库存({{showshareitem.total_stock}})个</label> + </view> + <view + style="display: flex; align-items: center; margin:50upx 20upx 0; height: 80upx; line-height: 80upx;"> + <label style="padding-left:20upx;">当前货道库存:</label> + <input v-model="showshareitem.stock" style="width: 60%;font-size: 28upx; height: 90upx; line-height: 90upx; + background: #f9f9f9; + color:#5CE6B6; padding-left: 10upx; border-radius: 5upx;" min="0" :max="maxnumber" :maxlength="maxlength" + type="number" @click.stop="StockCountInput()" + @input="inputVal(showshareitem, showshareindex)"></input> + </view> + <view style="width: calc(100% - 40upx); margin: auto; text-align: right;padding:10upx 20upx;"> + <label style="font-size: 22upx; color: #B2B2B2;">最大只能输入{{maxnumber}}个</label> + </view> + <view style="width:100%; position: absolute; bottom: 0; + display: flex; height: 100upx; align-items: center;border-radius:0 0 10upx 10upx;"> + <view @click="cancel('share')" + style="width: 50%; background: #B2B2B2; text-align: center;height: 100upx; line-height: 100upx; color: #FFFFFF;"> + 取消</view> + <view @click.stop="changeChannel(showshareitem,showshareindex)" + style="width: 50%; background: #5CE6B6; text-align: center; height: 100upx; line-height: 100upx; color: #FFFFFF;"> + 确定</view> + </view> + </view> + </view> + </uni-popup> + + <!-- 底部弹框 搜索商品名称 --> + <uni-popup ref="showshare" :type="type" @change="change"> + <view class="uni-pop_show" style="width: 100%; margin: auto;"> + <view style="width: 100%;background: #FFFFFF;border-bottom: 4upx solid #E9E7ED;margin-right: 80upx;"> + <!-- 搜索框 --> + <view class="weui-search-bar"> + <view class="weui-search-bar_form"> + <input type="text" class="weui-search-bar_input" placeholder="请输入商品名称" + @input='diseaseNameInput' /> + </view> + </view> + <view style="width: 100%; height: 550upx; background: #F9F9F9;"> + <scroll-view scroll-y + style="width:100%; height: 550upx; overflow: hidden; overflow-y: scroll; background: #FFFFFF;"> + <view v-for="(item, index) in GoodsItem" :key="index" @click="selectGood(item)" + style="width: calc(100% - 60upx); margin: auto; height: 110upx; display: flex; align-items: center; border-top: 1upx solid #F6F6F6; background: #FFFFFF;"> + <image :src="item.front_image + '?x-oss-process=image/resize,lfit,w_100'" + mode="aspectFit" + style="width:70upx; height: 70upx;line-height:70upx; margin: 0 10upx;"></image> + <view style="width: calc(100% - 90upx);"> + <view + style="font-size: 25upx;color: #B2B2B2;width: 100%;white-space: nowrap;text-overflow:ellipsis; overflow:hidden; word-break:break-all;"> + {{item.name}}({{item.title}}) + </view> + <view + style="font-size: 25upx;color: #B2B2B2;width: 100%;white-space: nowrap;text-overflow:ellipsis; overflow:hidden; word-break:break-all;"> + 商品库存 : {{item.stock}} + </view> + </view> + </view> + <view class="align-center" + style="position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%);" + v-if="GoodsItem == null || ( GoodsItem != null && GoodsItem.length == 0) "> + <span class="iconfont icon-wushuju" + style="font-size: 100upx; text-align: center; color: #B2B2B2;"></span> + <view style="color: #B2B2B2; text-align: center; line-height: 50upx;font-size: 24upx;"> + 啊嘞,还是一片荒漠</view> + </view> + </scroll-view> + </view> + </view> + </view> + </uni-popup> + + <!-- 打印选择类型 --> + <uni-popup ref="printingShowshare" :type="type" @change="change"> + <view class="uni-share" style="width: 100%; margin: auto;"> + <view style="background: #F9F9F9;width: 100%;border-bottom: 1upx solid #00000000;"> + <view style="width: 100%;border-bottom: 1upx solid #E9E7ED; height:100upx; + text-align: center;line-height: 100upx; font-size: 26upx; font-weight: 500;"> + 选择打印类型 + </view> + <scroll-view scroll-y style="margin: auto; height: 500upx; overflow: hidden; overflow-y: scroll;"> + <view style="width: calc(100% - 40upx); margin:20upx auto; overflow: hidden;"> + <view v-for="(item, index) in goodsItem" :key="index" @click="selectMonth(item)" + :class="attr == item.goods_name ? 'green':''" + style="width: calc(33% - 20upx);margin:10upx; float: left; background: #ffffff;height: 60px; border-radius: 5upx; font-size: 26upx; text-align: center;line-height: 60px;"> + {{item.goods_name == null ? '全部' : item.goods_name}} + </view> + </view> + </scroll-view> + </view> + <view + style="height: 90rpx; line-height: 90rpx; font-size: 14px; text-align: center; color: #666; background: #FFFFFF; border-top: 1px solid #EEEEEE;" + @click="Printingcancel('share')">取消</view> + </view> + </uni-popup> + + <!-- 清洗弹框 --> + <uni-popup ref="cleanPrint" type="center" @change="changeCleanPrint"> + <view style="width: 600upx; height: 640upx; "> + <view style="background: #F9F9F9;width: 100%; height: 100%; border-radius: 20upx; + align-items: center; + display: flex; + flex-direction: column;"> + <image style="width: 320upx; height: 320upx; margin-top: 80upx; " + src="https://img.xiaopiu.com/userImages/img79980184d0e9c4a0.png" mode="aspectFit"> </image> + <view style="margin-top: 80upx; font-size: 26upx; color: #999; ">上一次清洗时间:{{clear_time }} </view> + <view style="width:200upx; height: 60upx; border-radius: 15upx; + line-height: 60upx; text-align: center; + background: rgba(67, 207, 124, 1);margin-top: 40upx; color: #fff; " :style="{background: !isClickClean ?'rgba(67, 207, 124, 1)' :'#999' + }" @click="autoCleanNozzle()">自动清洗喷头 + </view> + </view> + </view> + </uni-popup> + + <uni-popup ref="cleanCountDown" type="bottom" :maskClick="false"> + <view style="width: 100%; height: 600upx; margin: auto;"> + <view style="background: #F9F9F9;width: 100%; height: 100%; border-radius: 20upx 20upx 0upx 0upx; + align-items: center; + display: flex; + flex-direction: column;"> + <view + style="margin-top:220upx; color: rgba(67, 207, 124, 1); font-size: 60upx; font-weight: 800 "> + {{countDownTimeCount}} + </view> + <view style="margin-top: 80upx; font-size: 26upx; color: #999; ">请稍后 </view> + <view style="margin-top: 20upx; font-size: 26upx; color: #999; "> 正在清洗中,预计需要一分钟</view> + </view> + </view> + </uni-popup> + + <view v-if="isTouchStart" style=" position: fixed; + top: 0; + left: 0; + bottom: 0; + right: 0; + width: 100%; + height: 100%; + z-index: 9999;" @touchmove.prevent @mousewheel.prevent></view> + + </view> + </view> +</template> + +<script> + import uniIcon from '@/components/uni-icon/uni-icon.vue'; + import uniPopup from '../index/common/uni-popup/uni-popup.vue'; + import Enums from '@/util/Enums'; + import foot from '../../components/foot.vue'; + import mpvuePicker from '../../components/mpvue-picker/mpvuePicker.vue'; + import mpvuePickernew from '../../components/mpvue-picker/mpvuePickernew.vue'; + import logoservice from '@/service/logoservice.js'; + let Base64 = require('js-base64').Base64; + export default { + components: { + uniPopup, + uniIcon, + foot, + mpvuePicker, + mpvuePickernew + }, + computed: { + + }, + data() { + return { + long: false, + isSinglePlatep: true, //是否单机版 或者 配送版 + isShowPullButtom: false, //false不显示true显示 + isOnclickItem: false, //是否点击item + numberlist: [], + LoupanList: [], + SortNumber: 1, + goodsItem: [{ + goods_name: '全部', + type: -12, + }, + { + goods_name: '套餐内', + type: 0, + }, + { + goods_name: '打印卡', + type: 1, + }, + ], + StcokList: [], //设备库存列表 + StcokLists: [], + list: null, + getStockerCount: "", //设置输入个数 + selectItem: null, + //默认选中 + currentTab: { + code: 0, + name: '机器' + }, + tabBars: [{ + code: 0, + name: '机器' + }, + { + code: 2, + name: '' + }, + { + code: 1, + name: '打印' + }, + ], + //end底部弹框 + mode: 'selector', + pickerValueArray: [], + pickerValueDefault: [0], + type: 'bottom', + //上拉状态 + dataLoadState: { + pullDownRefresh: false, + reachBottom: false + }, + queryPage: { + m: 'Machine/printRecord', + machine_id: null, + page: 1, + per_page: 20, + total: 0, + date: null, //日 + month: null, //月 + year: null, //日 + is_excess: null, //套餐选择类型 + }, + shopQueryPage: { + m: 'Machine/getShop', + }, + attr: null, + //商品库存 + showshareitem: null, + showshareindex: null, + //打印年月日 + printingPickerValueArray: [], + printingpickerValueDefault: [0], + //加载全部交易类型数据 + maxnumber: 12, + maxlength: 2, + be_child: 0, //子代理 + Userres_partner_id: null, //总代理 + is_inner: null, //恢复订单打印 + print_type: 0, //默认0标准版 1无限版 + shopList: null, //店铺列表数据 + GoodsItem: null, //货道数据 + stockData: null, //库存数据 + stockDataList: null, //库存列表数据 + inkStatusC: false, + inkStatusM: false, + inkStatusY: false, + inkStatusK: false, + inkStatusW: false, + inkStatusHas: false, + isShowPop: false, + timer: null, //定时器 + intCountTimer: 0, + clear_time: "", //上次清洗时间 + isClickClean: false, //是否点击 + // 手指原始位置 + oldMousePos: {}, + // 元素原始位置 + oldNodePos: {}, + autoCleanLeft: -40, //左位置 + autoCleanTop: -40, //下位置 + isTouchStart: false, + show_clean: 0, //为1时就显示清洗喷头的入口,为0时就不显示 + countDownTimeCount: 1, //倒计时 + countDownTime: null, //倒计时 + isAutoStartClean: false //是否自动清洗开始 + }; + }, + + methods: { + + //调转收益列表 + toLiquidationList(){ + uni.navigateTo({ + url: '../mine/Liquidation?machineid=' + this.queryPage.machine_id, + }); + + }, + + //调转订单列表 + toOrderList(){ + uni.navigateTo({ + url: '../mine/order?machineid=' + this.queryPage.machine_id, + }); + + }, + + touchstart(ev) { + ev.preventDefault(); + this.isTouchStart = true; + const selectDom = ev.currentTarget; + const { + pageX, + pageY + } = ev.touches[0]; // 手指位置 + const { + offsetLeft, + offsetTop + } = selectDom; // 元素位置 + // 手指原始位置 + this.oldMousePos = { + x: pageX, + y: pageY + }; + // 元素原始位置 + this.oldNodePos = { + x: offsetLeft, + y: offsetTop + }; + }, + + touchMove(ev) { + ev.preventDefault(); + const selectDom = ev.currentTarget; + // x轴偏移量 + const lefts = this.oldMousePos.x - this.oldNodePos.x; + // y轴偏移量 + const tops = this.oldMousePos.y - this.oldNodePos.y; + const { + pageX, + pageY + } = ev.touches[0]; // 手指位置 + this.autoCleanLeft = pageX - lefts; + this.autoCleanTop = pageY - tops; + }, + + touchEnd(ev) { + ev.preventDefault(); + this.isTouchStart = false; + }, + + //自定清洗 + autoCleanNozzle() { + if (this.isClickClean) { + return; + } + this.isClickClean = true; + this.$refs['cleanPrint'].setMaskClick(false); + uni.showLoading({ + title: '清洗中...', + }) + this.intCountTimer = 0; + this.countDownTimeCount = 1; + logoservice.MachineSavePartnerStock({ + m: 'Machine/clearHead', + machine_id: this.queryPage.machine_id, + }).then(result => { + this.autoClick() + }).catch(err => { + this.cleanTimeData(); + uni.showToast({ + title: err.msg, + duration: 1000, + icon: "none", + }) + }) + }, + + //清除计时器数据 + cleanTimeData() { + this.isAutoStartClean = false; + clearInterval(this.timer); + this.timer = null; + clearInterval(this.countDownTime); + this.countDownTime = null; + this.intCountTimer = 0; + this.isClickClean = false; + this.$refs['cleanPrint'].setMaskClick(true); + uni.hideLoading(); + this.$refs['cleanCountDown'].close(); + this.$refs['cleanPrint'].open(); + this.countDownTimeCount = 1; + }, + + //5秒一次定时器 + autoClick() { + this.$refs['cleanCountDown'].open(); + this.$refs['cleanPrint'].close(); + this.isAutoStartClean = true; + let that = this; + this.timer = setInterval(function() { + that.getCleanStatus(); + }, 5000); + this.countDownTime = setInterval(function() { + that.countDownTimeCount++; + }, 1000); + }, + + //获取状态值 + getCleanStatus() { + logoservice.MachineSavePartnerStock({ + m: 'Machine/getClearHeadStatus', + machine_id: this.queryPage.machine_id, + }).then(result => { + if (this.countDownTimeCount >= 60) { + this.cleanTimeData(); + uni.showToast({ + title: "清洗成功", + duration: 2000 + }) + } + let clear_status = result.clear_status.value; + if (clear_status == 0) { + this.$refs['cleanPrint'].setMaskClick(true); + if (result.clear_time) { + this.clear_time = result.clear_time; + } + this.cleanTimeData(); + uni.showToast({ + title: "清洗成功", + duration: 2000 + }) + } + }).catch(err => { + + }) + }, + + //清洗打印弹窗 + cleanPrintPop() { + this.$refs['cleanPrint'].open(); + }, + + changeCleanPrint(obj) { + this.isShowPop = obj.show; + }, + + //选中普通设备列表 + selectStockList(index, item) { + var resultList = this.stockDataList; + this.stockDataList = []; + var isDown = item.isDown; + if (isDown) { + isDown = false + } else { + isDown = true + } + resultList.forEach(itemData => { + if (itemData.id == item.id) { + itemData.isDown = isDown + } + }) + this.stockDataList = resultList; + }, + + //调转库存列表 + toStockList() { + uni.navigateTo({ + url: '../mall/stockList?id=' + this.queryPage.machine_id, + }); + }, + + //获取库存新接口 + getStockData() { + logoservice.MachineSavePartnerStock({ + m: 'Machine/getStockDetail', + machine_id: this.queryPage.machine_id, + }).then(result => { + this.stockData = result; + var max = 60; + var first = 20; + this.stockData.list.forEach((item, index) => { + item.id = index + item.isDown = false; + if (index == 0) { + item.row2 = max * item.need_stock / first; + if (item.row2 <= 0) { + item.row2 = 0; + } + first = parseFloat(item.need_stock); + if (first <= 1) { + first = 20; + } + } else { + item.row2 = max * parseFloat(item.need_stock / first) + if (item.row2 <= 0) { + item.row2 = 0; + } + } + }) + this.stockDataList = this.stockData.list + }).catch(err => { + + }) + }, + + //字符串转base64 + getStrToBase64(str) { + return Base64.encode(str); + }, + + //预览显示图片 + showPreviewImage(e, id) { + if (e == null || e == "") { + uni.showToast({ + title: '暂时没有定制二维码', + icon: 'none' + }); + return + } + var current = e + "?x-oss-process=image/watermark,text_" + this.getStrToBase64(id) + ",g_nw,size_50,shadow_50,x_550,y_850,color_4bf25a"; //这里获取到的是一张本地的图片 + uni.previewImage({ + current: current, //需要预览的图片链接列表 + urls: [current] //当前显示图片的链接 + }) + }, + + //获取剩余量次数相差 + getPrintSurplusCount(count) { + try { + if (count >= 200) { //白色 + return 1; + } else if (count < 200 && count >= 50) { //橙色 + return 2; + } else if (count < 50) { //红色 + return 3; + } + } catch (e) { + + } + return 0; + }, + + //获取相差天数 + getDaysDifference(time) { + try { + let day = new Date(time.replace(/-/g, "/")).getTime() - new Date().getTime(); //日期转时间戳 + let dayCount = Math.floor(day / 86400000); //时间戳获取天数 + return dayCount; + } catch (e) { + + } + return 0; + }, + + //格式化时间 + dateFormat(time) { + try { + var dt = new Date(time.replace(/-/g, '/')); + var y = dt.getFullYear(); + var m = dt.getMonth() + 1; + var d = dt.getDate(); + return y + '年' + m + '月' + d + '日'; + } catch (e) { + // 错误处理代码片段 + } + if(time == undefined){ + return ""; + } + return time; + }, + + //调转明细页面 + packageDetail(machineId) { + let machineid = machineId; + uni.navigateTo({ + url: '../mine/PrintUseDetail?machineid=' + machineid + '&print_type=' + this.print_type + }); + }, + + Reprint(item) { + if (item.status.value == 0) { + return; + } + uni.showModal({ + title: '温馨提示', + content: '是否此订单恢复打印?', + confirmText: '确定', + confirmColor: '#ff3b32', + success: function(res) { + if (res.confirm) { + //恢复打印的接口: + logoservice.MachineStockGoodsList({ + m: 'Machine/repeatPrint', + machine_id: item.machine_id, + id: item.id, + }).then(result => { + uni.showToast({ + title: '恢复订单打印成功', + icon: 'none' + }); + item.status.value = 0 + item.status.text = "等待出料" + }).catch(err => { + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + } else if (res.cancel) { + + } + } + }); + }, + + //代理商名字 + partnername(partner_id, partner) { + var partner_name = '尚未铺设'; + if (partner) { + partner.forEach(item => { + if (item.id == partner_id) { + partner_name = item.name + } + }); + } + return partner_name + }, + + tomain() { + uni.reLaunch({ + url: "/pages/index/home" + }) + }, + + //打印年月日printing Printing + printingShowPicker(mode) { + this.$refs.printingMpvuePicker.show(); + }, + + //日期确定 + onConfirmPrinting(e) { + this.queryPage.year = null + this.queryPage.month = null + this.queryPage.date = null + if (e.value.length == 1) { + this.queryPage.year = e.value[0] + } else if (e.value.length == 2) { + let myMonth = e.value[1] + if (myMonth < 10) { + myMonth = '0' + e.value[1] //补齐 + } + this.queryPage.month = e.value[0] + '-' + myMonth + } else if (e.value.length == 3) { + let myMonth = e.value[1] + if (myMonth < 10) { + myMonth = '0' + myMonth //补齐 + } + let mydate = e.value[2] + if (mydate < 10) { + mydate = '0' + e.value[2] //补齐 + } + this.queryPage.date = e.value[0] + '-' + myMonth + '-' + mydate + } + //数据加载状态处理 false + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + this.LoupanList = [] + this.queryPage.page = 1; + this.queryPage.total = 0; + this.loadGoodsList(Enums.DATA_DIRECTION.UP); + }, + + //打开类型 + togglePopup() { + this.$nextTick(() => { + this.$refs['printingShowshare'].open() + }) + this.getGoodsAttrList() + }, + + Printingcancel(type) { + this.$refs['printingShowshare'].close() + }, + + selectMonth(item) { + if (item.type == -12) { + this.attr = "全部打印类型"; + this.queryPage.is_excess = null; + } else { + this.attr = item.goods_name ? item.goods_name : null + this.queryPage.is_excess = item.type + } + this.$refs['printingShowshare'].close(); + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + this.queryPage.page = 1; + this.queryPage.total = 0; + this.LoupanList = [] + this.loadGoodsList(Enums.DATA_DIRECTION.UP); + }, + + //取消 + cancel(type) { + this.$refs['showshareinput'].close() + }, + + //更换弹框 + showshareclick(item, index) { + if (this.$base.Userres.be_child == 1) return; + if (this.list.used_applets == '3') { + this.maxnumber = 12 + this.maxlength = 2 + } + if (this.list.used_applets == '4') { + this.maxnumber = 7 + this.maxlength = 1 + } + let itema = JSON.stringify(item) + let itemb = JSON.parse(itema); + this.showshareitem = itemb; + this.showshareindex = index; + this.$nextTick(() => { + this.$refs['showshareinput'].open() + }) + }, + + change(e) { + + }, + + //库存数量输入 + StockCountInput(e) { + this.isOnclickItem = true; + var that = this; + setTimeout(function() { + that.isOnclickItem = false; + }, 1000) //延迟时间 这里是2秒 + }, + + inputVal(item, index) { + if (this.list.used_applets == '3') { + this.maxnumber = 12 + this.maxlength = 2 + } + if (this.list.used_applets == '4') { + this.maxnumber = 7 + this.maxlength = 1 + } + let StcokListsnumber = item.total_stock + if (item.stock > this.maxnumber) { + uni.showToast({ + title: '最大只能输入' + this.maxnumber + '个', + icon: 'none', + }); + item.stock = StcokListsnumber > this.maxnumber ? this.maxnumber : StcokListsnumber; + return false; + } + }, + + //获取输入框字符串 + diseaseNameInput(e) { + this.loadStockGoodsList(e.detail.value) + }, + + //pop选中商品 + selectGood(item) { + this.$refs["showshare"].close(); + var that = this; + let index; + if (this.selectItem != null) { + that.StcokList.forEach((items, indexNumber) => { + if (items.id == this.selectItem.id) { + index = indexNumber; + } + }); + } + uni.showModal({ + title: '确认', + content: '是否关联当前商品?', + confirmText: '确定', + confirmColor: '#ff3b32', + success: function(res) { + if (res.confirm) { + if (that.list.used_applets == '3') { + that.StcokList[index].stock = item.stock > 12 ? 12 : item.stock; + } + if (that.list.used_applets == '4') { + that.StcokList[index].stock = item.stock > 7 ? 7 : item.stock; + } + that.StcokList[index].title = item.title; //name + that.StcokList[index].name = item.name; + that.StcokList[index].front_image = item.front_image; + that.StcokList[index].goods_id = item.goods_id; + that.StcokList[index].dict_id = item.dict_id; + that.StcokList[index].total_stock = item.stock; + that.StcokList[index].isShowPullButtom = false; + that.confirmChangeChannel(that.StcokList[index]) + } + } + }); + }, + + //确认更换货道 + confirmChangeChannel(item) { + logoservice.MachineSavePartnerStock({ + m: 'Machine/saveStock', + id: item.id, + machine_id: this.queryPage.machine_id, + goods_id: item.goods_id, + goods_size: item.goods_size, + stock: item.stock, + dict_id: item.dict_id + }).then(result => { + uni.hideLoading(); + uni.showToast({ + title: "更换成功", + icon: 'none' + }); + }).catch(err => { + uni.hideLoading(); + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + this.StcokList = [] + this.queryPage.page = 1; + this.queryPage.total = 0; + this.loadStockList(Enums.DATA_DIRECTION.UP); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + }, + + //下架功能 + shelvesGood(item, index) { + if (this.$base.Userres.be_child == 1) return; + var _this = this + uni.showModal({ + title: '确认', + content: '确认当前商品下架吗?', + confirmText: '确定', + confirmColor: '#ff3b32', + success: function(res) { + if (res.confirm) { + if (item.goods_id == 0) { + uni.showToast({ + title: "还没绑定商品不能下架", + icon: 'none' + }); + _this.StcokList[index].isShowPullButtom = false; + _this.SortNumber++; + _this.StcokList[index].SortNumber = _this.SortNumber; + this.setData({ + StcokList: _this.StcokList + }) + } else { + uni.showLoading({ + title: '正在加载中...' + }) + logoservice.MachineSavePartnerStock({ + m: 'Machine/saveStock', + id: item.id, + machine_id: _this.queryPage.machine_id, + goods_id: item.goods_id, + goods_size: item.goods_size, + stock: item.stock, + dict_id: item.dict_id, + type: "off", + }).then(result => { + uni.hideLoading(); + uni.showToast({ + title: "下架成功", + icon: 'none' + }); + _this.dataLoadState.pullDownRefresh = false; + _this.dataLoadState.reachBottom = false; + _this.StcokList = [] + _this.queryPage.page = 1; + _this.queryPage.total = 0; + _this.loadStockList(Enums.DATA_DIRECTION.UP); + }).catch(err => { + _this.dataLoadState.pullDownRefresh = false; + _this.dataLoadState.reachBottom = false; + _this.StcokList = [] + _this.queryPage.page = 1; + _this.queryPage.total = 0; + _this.loadStockList(Enums.DATA_DIRECTION.UP); + uni.hideLoading(); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + } + } else if (res.cancel) { + + } + } + }); + }, + + //更换弹框 + toChangePop(item) { + if (this.$base.Userres.be_child == 1) return; + this.selectItem = item; + this.$nextTick(() => { + this.$refs['showshare'].open() + this.loadStockGoodsList(""); + }) + }, + + //显示下面选择按钮 + showPullButton(item, index) { + if (this.isOnclickItem == false) { + var that = this; + if (item.isShowPullButtom) { + that.StcokList[index].isShowPullButtom = false; + } else { + that.StcokList[index].isShowPullButtom = true; + } + this.SortNumber++; + that.StcokList[index].SortNumber = this.SortNumber; + this.setData({ + StcokList: that.StcokList + }) + } + }, + + //修改货道 + changeChannel(item, index) { + this.$refs["showshareinput"].close(); + this.$refs["showshare"].close(); + var _this = this + _this.isOnclickItem = true; + setTimeout(function() { + _this.isOnclickItem = false; + }, 1000) //延迟时间 这里是1秒 + let jsonLists = JSON.parse(_this.StcokLists); + uni.showModal({ + title: '确认', + content: '确认当前商品货道调整吗?', + confirmText: '确定', + confirmColor: '#ff3b32', + success: function(res) { + if (res.confirm) { + uni.showLoading({ + title: '正在加载中...' + }) + logoservice.MachineSavePartnerStock({ + m: 'Machine/saveStock', + id: item.id, + machine_id: _this.queryPage.machine_id, + goods_id: item.goods_id, + goods_size: item.goods_size, + stock: item.stock, + dict_id: item.dict_id + }).then(result => { + uni.hideLoading(); + uni.showToast({ + title: "修改成功", + icon: 'none' + }); + _this.StcokList[index].stock = item.stock; + }).catch(err => { + uni.hideLoading(); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + } else if (res.cancel) { + + } + } + }); + }, + + //获取底部弹框数据 + loadStockGoodsList(goods_name) { + logoservice.MachineStockGoodsList({ + m: 'Machine/getStockGoodsList', + machine_id: this.queryPage.machine_id, + goods_name: goods_name, + }).then(result => { + this.GoodsItem = result; + uni.hideLoading(); + }).catch(err => { + uni.hideLoading(); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + }, + + previewImageOne(item) { + var current = e; //这里获取到的是一张本地的图片 + }, + + setData(obj) { + let that = this; + let keys = []; + let val, data; + Object.keys(obj).forEach(function(key) { + keys = key.split('.'); + val = obj[key]; + data = that.$data; + keys.forEach(function(key2, index) { + if (index + 1 == keys.length) { + that.$set(data, key2, val); + } else { + if (!data[key2]) { + that.$set(data, key2, {}); + } + } + data = data[key2]; + }) + }); + }, + + + chooseImage: async function() { + if (this.$base.Userres.be_child == 1) return; + var _this = this + uni.chooseImage({ + sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有 + sourceType: ['camera', 'album'], //从相册选择 + count: 1, + success: (res) => { + let tempFilePaths = res.tempFilePaths; + uni.showLoading({ + title: '图片正在上传...' + }) + uni.uploadFile({ + url: 'https://tprint.refinecolor.com/partnerapplets/index', + filePath: tempFilePaths[0], + method: 'POST', + name: 'file', + header: { + 'content-type': 'multipart/form-data' + }, + formData: { + m: 'Upload/upload' + }, //请求额外的form data + success: function(res) { + logoservice.MachinesaveCover({ + m: 'Machine/saveCover', + machine_id: _this.queryPage.machine_id, + cover: JSON.parse(res.data).data.url + }).then(result => { + uni.hideLoading(); + uni.showToast({ + title: '上传成功', + icon: 'none', + duration: 3000 + }) + _this.listdetail() + }).catch(err => { + uni.hideLoading(); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + }, + fail: function(res) { + uni.hideLoading(); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + } + }) + } + }) + }, + + //预览图片 + previewImage(imgs, list) { + let listattr = [] + list.forEach(item => { + listattr.push(item.works_image) + }) + var current = imgs.works_image; //这里获取到的是一张本地的图片 + wx.previewImage({ + current: current, // 当前显示图片的http链接 + urls: listattr // 需要预览的图片http链接列表 + }) + }, + + datatimeLimited(time) { + return new Date(time.replace(/-/g, "/"))._format('HH:mm:ss'); + }, + + category(id) { + var dataname = ''; + if (this.shopList) { + this.shopList.forEach(item => { + if (item.id == id) { + dataname = item.short_name + } + }); + } + return dataname + }, + + categoryaddress(address) { + var dataaddress = ''; + if (this.shopList) { + this.shopList.forEach(item => { + if (item.id == address) { + dataaddress = item.address.replace('<br/>', ''); + } + }); + } + return dataaddress + }, + + //店铺 + showPicker(item) { + if (this.$base.Userres.be_child == 1) return; + this.pickerValueArray = this.shopList + this.pickerValueArray.filter(item => { + item.label = item.short_name + item.value = item.id + }); + this.$refs.mpvuePicker.show(); + }, + + //确定 + onConfirm(e) { + uni.showLoading({ + title: '正在关联中...' + }) + logoservice.Machinelistdetail({ + m: 'Machine/bindShop', + machine_id: this.queryPage.machine_id, + shop_id: e.value[0] + }).then(result => { + uni.hideLoading(); + uni.showToast({ + title: '关联店铺成功', + icon: 'none' + }); + this.listdetail() + }).catch(err => { + uni.hideLoading(); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + }, + + onChange(e) { + + }, + + onCancel(e) { + + }, + + profit() { + uni.navigateTo({ + url: '../mall/eq-profit?machineid=' + this.list.id, + }); + }, + + toorder() { + uni.navigateTo({ + url: '../mine/order?machineid=' + this.list.id, + }); + }, + + tapTab(tab) { + this.currentTab = tab; + if (this.currentTab.code == 0) { + this.listdetail() + } + if (this.currentTab.code == 1) { + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + this.LoupanList = [] + this.queryPage.page = 1; + this.queryPage.total = 0; + this.loadGoodsList(Enums.DATA_DIRECTION.UP); + } + if (this.currentTab.code == 2) { + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + this.StcokList = [] + this.queryPage.page = 1; + this.queryPage.total = 0; + this.getStockData(); + } + }, + + //设备挂起 + onSefaultStatus(e) { + this.list.flag.value = e.detail.value ? 'N' : 'Y'; + if (e.detail.value == true) { + uni.showLoading({ + title: '设备挂起中...' + }) + } else { + uni.showLoading({ + title: '设备恢复中...' + }) + } + logoservice.Machinestatus({ + m: 'Machine/status', + machine_id: this.queryPage.machine_id + }).then(result => { + uni.hideLoading(); + if (e.detail.value == true) { + uni.showToast({ + title: '挂起成功' + }) + } else { + uni.showToast({ + title: '恢复成功' + }) + } + }).catch(err => { + uni.hideLoading(); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + if (this.list.flag.value == 'N') { + this.list.flag.value = 'Y' + } else if (this.list.flag.value == 'Y') { + this.list.flag.value = 'N' + } + }) + }, + + //设备列表详情 + listdetail() { + uni.showLoading({ + title: '正在加载中...' + }); + logoservice.Machinelistdetail({ + m: 'Machine/list', + machine_id: this.queryPage.machine_id + }).then(result => { + this.long = true + uni.stopPullDownRefresh(); + uni.hideLoading(); + if (result[0] != undefined) { + this.list = result[0] + if (this.list.show_clean) { + this.show_clean = this.list.show_clean + } + if (this.list.clear_time) { + this.clear_time = this.list.clear_time + } + if (this.list.edition != null && this.list.edition.mark == 'standard') { + this.print_type= 0 ; + } else if (this.list.edition != null && this.list.edition.mark == 'unlimited') { + this.print_type = 1; + } + let ink = this.list.ink; + if (ink.length >= 6) { + this.inkStatusC = ink.substring(0, 1) == 0 ? true : false; + this.inkStatusM = ink.substring(1, 2) == 0 ? true : false; + this.inkStatusY = ink.substring(2, 3) == 0 ? true : false; + this.inkStatusK = ink.substring(3, 4) == 0 ? true : false; + this.inkStatusW = ink.substring(4, 5) == 0 ? true : false; + this.inkStatusHas = ink.substring(5, 6) == 0 ? true : false; + } + this.list.default_package.create_date = this.dateFormat(this.list.default_package.expire_date); + if (this.list.machine_category_id == 63) { + this.tabBars = [{ + code: 0, + name: '机器' + }, + { + code: 1, + name: '打印' + }, + { + code: 2, + name: '库存' + }, + ], + this.list.isSinglePlatep = false; + } + } + }).catch(err => { + uni.hideLoading(); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + }, + + //设备打印信息 加载数据 + loadGoodsList(direction) { + if (this.dataLoadState.pullDownRefresh || this.dataLoadState.reachBottom) return; + uni.showLoading({ + title: '正在加载中...' + }) + this.dataLoadState.pullDownRefresh = direction === Enums.DATA_DIRECTION.UP; + this.dataLoadState.reachBottom = direction === Enums.DATA_DIRECTION.DOWN; + if (this.dataLoadState.reachBottom) { + if (Math.ceil(this.queryPage.total / this.queryPage.per_page) < this.queryPage.page) { + return setTimeout(() => { + uni.showToast({ + title: '没有更多数据了!', + icon: 'none' + }); + }, 500); + } + } + logoservice.Machinelist(this.queryPage).then(result => { + this.long = true + let queryList = result.data.data + //下拉更新时,查询结果集 + //触底更新时,当前列表+查询结果集 + let newList = this.LoupanList.concat(queryList) + this.LoupanList = newList + //分页对象处理 + this.queryPage.total = result.data.total; + this.queryPage.per_page = result.data.per_page; + //停止当前页面下拉刷新 + if (this.dataLoadState.pullDownRefresh) uni.stopPullDownRefresh(); + //数据加载状态处理 false + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + uni.hideLoading(); + }).catch(err => { + //停止当前页面下拉刷新 + if (this.dataLoadState.pullDownRefresh) uni.stopPullDownRefresh(); + //数据加载状态处理 false + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + uni.hideLoading(); + }); + }, + + //做滚动加载使用 + loadMore() { + if (this.isTouchStart || this.currentTab.code == 0) { + return; + } + if (Math.ceil(this.queryPage.total / this.queryPage.per_page) < this.queryPage.page) { + return setTimeout(() => { + uni.showToast({ + title: '没有更多数据了!', + icon: 'none' + }); + }, 500); + } + this.queryPage.page = this.queryPage.page + 1; + if (this.currentTab.code == 1) { + this.loadGoodsList(Enums.DATA_DIRECTION.DOWN); + } + if (this.currentTab.code == 2) { + this.loadStockList(Enums.DATA_DIRECTION.DOWN) + } + }, + + //获取日期 + getToday() { + let myDate = new Date(); + let myMonth = myDate.getMonth() + 1; + if (myMonth < 10) { + myMonth = '0' + myMonth; //补齐 + } + let mydate = myDate.getDate(); + if (myDate.getDate() < 10) { + mydate = '0' + myDate.getDate(); //补齐 + } + this.queryPage.date = myDate.getFullYear() + '-' + myMonth + '-' + mydate; + }, + + //获取月份 + getMonth() { + let myDate = new Date(); + let myMonth = myDate.getMonth() + 1; + if (myMonth < 10) { + myMonth = '0' + myMonth; //补齐 + } + this.queryPage.month = myDate.getFullYear() + '-' + myMonth; + }, + + //获取店铺数据 + machineGetShopList() { + logoservice.MachineGetShop(this.shopQueryPage).then(result => { + if (result != null && result != undefined) { + this.shopList = result; + } + }).catch(err => { + + }); + }, + + //goodsItem加载全部交易类型数据 + getGoodsAttrList() { + logoservice.MoneystatementList({ + m: 'Machine/printRecord', + machine_id: this.queryPage.machine_id, + sub: 1 + }).then(result => { + + }).catch(res => { + uni.showToast({ + title: res.msg ? res.msg : '未查到交易类型选择', + icon: 'none' + }); + }); + }, + }, + + //下拉加载 + onPullDownRefresh() { + if (this.isTouchStart) { + return; + } + if (this.currentTab.code == 0) { + this.listdetail() + } + if (this.currentTab.code == 1) { + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + this.queryPage.page = 1; + this.queryPage.total = 0; + this.LoupanList = [] + this.loadGoodsList(Enums.DATA_DIRECTION.UP); + } + if (this.currentTab.code == 2) { + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + this.queryPage.page = 1; + this.queryPage.total = 0; + this.StcokList = [] + this.loadStockList(Enums.DATA_DIRECTION.UP); + } + uni.stopPullDownRefresh(); + }, + + //上拉加载 + onReachBottom() { + if (this.currentTab.code == 0 || this.isTouchStart) { + return; + } + if (this.LoupanList.length < 6) { + return setTimeout(() => { + uni.showToast({ + title: '没有更多数据了!', + icon: 'none' + }); + }, 500); + } + this.queryPage.page = this.queryPage.page + 1; + if (this.currentTab.code == 1) { + this.loadGoodsList(Enums.DATA_DIRECTION.DOWN) + } + }, + + onLoad(options) { + //设置时间 + let that = this; + uni.getSystemInfo({ + success(res) { + that.autoCleanLeft = res.windowWidth - 100; + that.autoCleanTop = res.windowHeight - 180; + } + }); + this.getMonth(); + this.printingPickerValueArray = ['month']; + this.queryPage.machine_id = options.id + uni.setNavigationBarTitle({ + title: this.queryPage.machine_id + }) + uni.login({ + provider: 'weixin', + success: (res) => { + logoservice.login({ + m: 'Init/init', + code: res.code + }).then(result => { + this.$base.Userres = result //记录用户登录信息 + this.Userres_partner_id = this.$base.Userres.partner_id //总代理 + this.is_inner = this.$base.Userres.is_inner + logoservice.setwixinInfo(result); + this.listdetail(); + this.machineGetShopList(); + }).catch(err => { + uni.navigateTo({ + url: 'login', + }); + }) + }, + fail: (err) => { + + } + }); + }, + onShow() { + this.isTouchStart = false; + if (this.$base != null && this.$base.Userres != null) { + this.be_child = this.$base.Userres.be_child //子代理 + } + } + }; +</script> + +<style lang="scss"> + .eq-detail-score { + padding: 40upx 0; + width: 100%; + height: 210upx; + margin: 0upx auto; + background: #43CF7C; + border-radius: 20upx; + display: flex; + align-items: center; + font-size: 26upx; + color: #fff; + } + .green { + background-color: #4FB36B !important; + color: #FFFFFF; + } + /*无数据 */ + .noData { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + } + .noData_img { + width: 260upx; + height: 260upx; + display: block; + margin: 0upx auto 102upx; + } + .noData_title { + text-align: center; + font-size: 36upx; + } + .noData_text { + margin-top: 35upx; + font-size: 30upx; + font-weight: 400; + } + .noData_but { + width: 230upx; + height: 70upx; + line-height: 70upx; + text-align: center; + color: #F56364; + margin: 140upx auto 0; + border: 1upx solid #F56364; + border-radius: 35upx; + } + + /* 去除button默认样式 */ + button::after { + border: none; + } + + button { + background-color: transparent; + padding-left: 0; + padding-right: 0; + line-height: inherit; + } + + .lang-open { + transform: rotate(90deg); + transition: transform 0.5s; + } + + .lang-close { + transform: rotateY(0deg); + transition: transform 0.5s; + } + + //2020-11-17 + .content-open { + height: 90upx; + overflow: hidden; + transition: all 0.4s cubic-bezier(0.25, 1.0, 0.25, 1.0); + } + + .content-close { + height: 0; + transition: all 0.4s cubic-bezier(0.25, 1.0, 0.25, 1.0); + } + + .item-open { + height: 40upx; + transition: all 0.4s cubic-bezier(0.25, 1.0, 0.25, 1.0); + } + + .item-close { + opacity: 0; + height: 0; + } + + /*输入框弹框显示 */ + .weui-search-bar { + position: relative; + padding: 8upx 10upx; + display: flex; + height: 135upx; + background: #FFFFFF; + align-items: center; + } + + .weui-search-bar_form { + width: 100%; + border-radius: 50upx; + background: #F6F6F6; + } + + .weui-search-bar_input { + height: 80upx; + line-height: 80upx; + font-size: 25upx; + padding-left: 24upx; + } + + /* 底部弹框显示 */ + .uni-pop_show { + display: flex; + flex-direction: column; + } + + .uni-calendar-item--isDay-text.data-v-09f1e40c { + color: #5CE6B5 !important; //5CE6B5 + } + + .uni-calendar-item--isDay.data-v-09f1e40c { + background: #5CE6B5 !important; + color: #fff !important; + } + + .uni-calendar-item--checked.data-v-09f1e40c { + background: #5CE6B5 !important; + color: #fff !important; + } + + .uni-numbox__value { + width: 120upx !important; + } + + page { + width: 100%; + height: 100%; + background: #F5F5F5; + } + + .eq_list_button { + display: flex; + flex-direction: row; + line-height: 60upx; + padding-bottom: 20upx; + } + + .eq_list_button_ul { + flex: 1; + } + + .eq_list_button_li { + margin: auto; + font-size: 24upx; + color: #FFFFFF; + width: 150upx; + font-weight: bold; + text-align: center; + line-height: 60upx; + height: 60upx; + background-color: #5CE6B6; + } + + .uni-swiper-tab { + border-bottom: 1upx solid #F5F5F5; + } + + .clean-bt { + border-radius: 50%; + width: 200upx; + height: 200upx; + bottom: 160upx; + right: 20upx; + position: fixed; + font-size: 27upx; + text-align: center; + line-height: 130upx; + z-index: 99991; + justify-content: center; + align-items: center; + } + + .order { + width: 100%; + height: 100%; + + .uni-tab-bar { + height: auto !important; + + .uni-swiper-tab { + position: fixed; + top: var(--window-top); + z-index: 999; + width: 100%; + line-height: 85upx; + height: 85upx; + + .swiper-tab-list { + width: calc(100% / 3); + font-size: 30upx; + } + } + .active { + color: #43CF7C; + } + } + + .way-list { + margin: 0 20upx; + padding-top: 20upx; + border-radius: 10upx; + + .topBox { + width: calc(100% - 60upx); + margin-left: 30upx; + margin-top: 15upx; + justify-content: center; + } + + .topLittleBOX-1 { + font-size: 26upx; + width: 120upx; + color: #333; + overflow: text-align; + } + + .topLittleBOX-2 { + padding-left: 20upx; + padding-top: auto; + padding-bottom: auto; + display: flex; + vertical-align: middle; + flex-direction: row; + align-items: center; + width: calc(100% - 120upx); + position: relative; + } + + .row-1 { + height: 30upx; + background-color: #43CF7C; + border-radius: 20upx; + width: 0upx; + transition: width 1.5s linear; + } + + .rowText { + margin-left: 10upx; + font-size: 26upx; + color: #333; + float: right; + } + + .way-item { + background: #FFFFFF; + border-radius: 10upx; + margin-bottom: 20upx; + } + + .way { + height: 120upx; + min-height: 90upx; + display: flex; + align-items: center; + font-size: 28upx; + + .text { + width: 250upx; + padding-left: 20upx; + } + + .value { + width: calc(100% - 280upx); + display: flex; + + .prick { + width: calc(100% - 40upx); + } + + .fa-angle-right { + width: 40upx; + font-size: 50upx; + } + } + } + } + + .content { + padding-top: 100upx; + + .order-list { + min-height: 350upx; + //width: 100%; + margin-right: 5upx; + width: calc(100% - 5upx); + border-radius: 10upx; + + .item { + min-height: 35upx; + display: flex; + margin-left: 20upx; + align-items: center; + font-size: 28upx; + + .text { + width: 250upx; + /*padding-left: 25upx; */ + color: #353535; + } + + .value { + width: calc(100% - 280upx); + display: flex; + + .prick { + width: calc(100% - 40upx); + } + + .fa-angle-right { + width: 40upx; + font-size: 50upx; + } + } + } + } + } + } + + .print-score { + width: 100%; + height: 280upx; + background: #43CF7C; + border-radius: 20upx; + display: flex; + align-items: center; + font-size: 26upx; + color: #fff; + + .print { + width: 100%; + + .text { + line-height: 50upx; + color: #fff; + } + } + } + + .list-clean { + height: 80upx; + background: #FFFFFF; + padding-left: 20upx; + padding-right: 23upx; + margin-top: 10upx; + border-radius: 15upx; + margin-left: 20upx; + margin-right: 15upx; + padding-top: 18upx + } + +</style> diff --git a/pages/mall/eq-profit.vue b/pages/mall/eq-profit.vue new file mode 100644 index 0000000..6a7669e --- /dev/null +++ b/pages/mall/eq-profit.vue @@ -0,0 +1,465 @@ +<template> + <view class="full-width content-color full-height" style="position: relative;"> + <view class="full-width"> + <view style="position: fixed; width: 100%;"> + <view style="width:100%;text-align: center;padding: 30upx 0; background: #F1F1F1;" @click="togglePopup()"> + <text>{{directiontext == null ? '全部交易类型' : directiontext}}</text> + <span class="iconfont icon-xiala" style="margin-left: 10upx; font-size: 20upx; color: #BCBEC1;"></span> + </view> + <view style="display: flex; padding: 30upx 0; background: #F6F6F6;"> + <!-- 年月日 --> + <view style="width: calc(100% / 2); text-align: left; padding-left: 20upx;" @click="showPicker('selector')"> + <text v-if="queryPage.year">{{queryPage.year}}年</text> + <text v-if="queryPage.month">{{queryPage.month}}月</text> + <text v-if="queryPage.date">{{queryPage.date}}</text> + <text v-if="!queryPage.date && !queryPage.month && !queryPage.year">全部</text> + <span class="iconfont icon-xiala" style="margin-left: 10upx; font-size: 20upx; color: #BCBEC1;"></span> + </view> + <!-- 状态类型 --> + <view style="width: calc(100% / 2); text-align: right; padding-right: 20upx;visibility: hidden;" + v-if="queryPage.machine_id != null || queryPage.billing_id != null"> + <picker @change="bindPickerChange" :value="queryPage.status" :range="array"> + {{array[queryPage.status] || '全部'}} + <span class="iconfont icon-xiala" style="margin-left: 10upx; font-size: 20upx; color: #BCBEC1;"></span> + </picker> + </view> + </view> + <view style="display: flex; padding: 0 20upx 20upx; color: #BCBEC1; background: #F6F6F6; font-size: 24upx;"> + <view>收入明细:{{queryPage.count || '0'}}笔</view> + <view style="margin-left: 10upx;">收入金额:¥{{settle_amount || '0'}}元</view> + </view> + </view> + <!--动态数据--> + <view scroll-y @scrolltolower="loadMore()" class="full-width" @touchend="touchEnd" v-if="long" style="padding-top: 252upx;"> + <view> + <view v-for="(item, index) in LoupanList" :key="index" class="eq_list" @click="details(item)"> + <view class="eq_list_div"> + <view class="full-width eq_list_ul"> + <text class="eq_list_ul_left" v-if="item.direction.value != 'withdrawal'">{{item.goods_attr || ''}}</text> + <text class="eq_list_ul_right"> + <text v-if="item.settle_amount > 0" style="color:#5CE6B6;font-size: 30upx;">+ {{item.settle_amount || '0'}}</text> + <text v-else style="color:#F67273;font-size: 30upx;">{{item.settle_amount || '0'}}</text> + </text> + </view> + <view class="full-width eq_list_ul" style="color: #BCBEC1; font-size: 24upx;"> + <text style="width: 40%;">{{item.create_time}}</text> + <text style="width: 60%; text-align: right;color:#F67273;" v-if="item.direction.value == 'expense'">退款</text> + <text style="width: 60%; text-align: right;color:#F67273;" v-if="item.direction.value == 'withdrawal'">提现</text> + </view> + </view> + </view> + </view> + <!--暂无相关信息--> + <view class="align-center content-color" style="position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%);" + v-if="LoupanList.length == 0 || LoupanList.length == null"> + <span class="iconfont icon-wushuju" style="font-size: 100upx; text-align: center; color: #B2B2B2;"></span> + <view style="color: #B2B2B2; text-align: center; line-height: 50upx;font-size: 24upx;">暂无相关信息</view> + </view> + </view> + <!--动态数据完 --> + </view> + <!--返回顶部 --> + <view v-if="totopstatus" class="to-top content-color" @click="totop()"> + <view class="fa fa-angle-right to-top-icon"></view> + </view> + <mpvue-picker ref="mpvuePicker" + :themeColor="'#53B2B0'" + :pickerValueDefault="pickerValueDefault" + @onChange="onChange" + @onCancel="onCancel" + @onConfirm="onConfirm" + :pickerValueArray="pickerValueArray"></mpvue-picker> + <uni-popup ref="showshare" :type="type" @change="change"> + <view class="uni-share" style="width: 100%; margin: auto;"> + <view style="background: #F9F9F9;width: 100%;border-bottom: 4upx solid #E9E7ED;"> + <view style="width: 100%;border-bottom: 2upx solid #E9E7ED; height:100upx; text-align: center;line-height: 100upx; font-size: 26upx; font-weight: 500;"> + 选择交易类型 + </view> + <scroll-view scroll-y style="margin: auto; height: 500upx; overflow: hidden; overflow-y: scroll;"> + <view style="width: calc(100% - 40upx); margin:20upx auto; overflow: hidden;"> + <view v-for="(item, index) in directionlist" :key="index" @click="selectMonthdirection(item)" :class="queryPage.direction == item.val ? 'green':''" + style="width: calc(33% - 20upx);margin:10upx; float: left; background: #ffffff;height: 60px; border-radius: 5upx; font-size: 26upx; text-align: center;line-height: 60px;"> + {{item.text}} + </view> + </view> + </scroll-view> + </view> + <view class="uni-share-btn" @click="cancel('share')">取消</view> + </view> + </uni-popup> + </view> +</template> + +<script> + import uniIcon from '@/components/uni-icon/uni-icon.vue'; + import uniPopup from '../index/common/uni-popup/uni-popup.vue' + import Enums from '@/util/Enums'; + //自定义底部 + import foot from '../../components/foot.vue'; + import logoservice from '@/service/logoservice.js'; + import mpvuePicker from '../../components/mpvue-picker/mpvuePickernew.vue'; + export default { + components: { + uniPopup, + uniIcon, + foot, + mpvuePicker + }, + computed: {}, + data() { + return { + long:false, + LoupanList: [], //数据 + // 返回顶部 + totopstatus: false, + // 上拉状态 + dataLoadState: { + pullDownRefresh: false, + reachBottom: false + }, + queryPage: { + m:'Money/statementList', + billing_id:null, + machine_id:null, + page: 1, + per_page: 12, + count:null, + status: null,//2付款状态 + year: null,// 年 + month: null,// 月 + date: null,// 日 + goods_attr: null,// 商品 + direction:null // 类型expense退款 |income 收入|withdrawal 提现 + }, + goodsItem:[], + order_amount:null, + settle_amount:null, + //年 + pickerValueArray: [], + pickerValueDefault: [0], + array: ['待清算', '待结算', '已结算','全部'], + type: 'bottom', + directionlist:[{text:'全部',val:null},{text:'收入',val:'income'},{text:'退款',val:'expense'}], + directiontext:null, + }; + }, + mounted(){ + + }, + methods: { + details(item){ + if(item.direction.value == 'withdrawal'){ + uni.navigateTo({ + url: '/pages/mine/Withdrawal-details?id=' + item.id, + }); + }else{ + uni.navigateTo({ + url: '/pages/mine/Liquidation-details?id=' + item.id, + }); + } + }, + bindPickerChange (e) { + if(e.target.value == 3){ + this.queryPage.status = null + }else{ + this.queryPage.status = e.target.value + } + this.LoupanList = [] + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + this.queryPage.page = 1; + this.queryPage.count = 0; + this.loadGoodsList(Enums.DATA_DIRECTION.UP); + }, + showPicker(mode) { + this.$refs.mpvuePicker.show(); + }, + //确定 + onConfirm(e) { + this.queryPage.year = null + this.queryPage.month = null + this.queryPage.date = null + if(e.value.length == 1){ + this.queryPage.year = e.value[0] + }else if(e.value.length == 2){ + let myMonth = e.value[1] + if(myMonth<10){ + myMonth = '0'+ e.value[1] //补齐 + } + this.queryPage.month = e.value[0] + '-' + myMonth + }else if(e.value.length == 3){ + let myMonth = e.value[1] + if(myMonth<10){ + myMonth = '0'+ myMonth //补齐 + } + let mydate = e.value[2] + if(mydate<10){ + mydate = '0'+ e.value[2] //补齐 + } + this.queryPage.date = e.value[0] + '-' + myMonth + '-' + mydate + } + this.LoupanList = [] + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + this.queryPage.page = 1; + this.queryPage.count = 0; + this.loadGoodsList(Enums.DATA_DIRECTION.UP); + }, + onChange(e) { + //console.log(e); + }, + onCancel(e) { + //console.log(e); + }, + // 加载数据 + loadGoodsList(direction) { + if (this.dataLoadState.pullDownRefresh || this.dataLoadState.reachBottom) return; + uni.showLoading({title: '正在加载中...'}) + this.dataLoadState.pullDownRefresh = direction === Enums.DATA_DIRECTION.UP; + this.dataLoadState.reachBottom = direction === Enums.DATA_DIRECTION.DOWN; + if (this.dataLoadState.reachBottom) { + if (Math.ceil(this.queryPage.count / this.queryPage.per_page) < this.queryPage.page) { + return setTimeout(() => { + uni.showToast({title: '没有更多数据了!', icon: 'none'}); + }, 500); + } + } + logoservice.MoneystatementList(this.queryPage).then(result => { + //console.log(result.data) + this.long = true + let queryList = result.data + // 下拉更新时,查询结果集 + // 触底更新时,当前列表+查询结果集 + let newList = this.LoupanList.concat(queryList) + this.LoupanList = newList + // console.log(this.LoupanList) + // 分页对象处理 + this.queryPage.count = result.count; + this.queryPage.per_page = result.per_page; + this.order_amount = result.gross_profit_total; + this.settle_amount = result.settle_amount_total.toFixed(2); + // 停止当前页面下拉刷新 + if (this.dataLoadState.pullDownRefresh) uni.stopPullDownRefresh(); + // 数据加载状态处理 false + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + uni.hideLoading(); + // uni.showToast({ title: '加载成功', icon: 'none' }); + }).catch(err => { + // 停止当前页面下拉刷新 + if (this.dataLoadState.pullDownRefresh) uni.stopPullDownRefresh(); + // 数据加载状态处理 false + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + uni.hideLoading(); + uni.showToast({ + title: err.msg ? err.msg : err.data, + icon: 'none' + }); + }); + }, + //返回顶部 + totop() { + uni.pageScrollTo({ + scrollTop: 0, + duration: 300 + }); + this.totopstatus = false + }, + touchEnd(e) { + if (e.mp.changedTouches[0].pageY > 1000) { + this.totopstatus = true + } else { + this.totopstatus = false + } + }, + //做滚动加载使用 + loadMore() { + if (Math.ceil(this.queryPage.count / this.queryPage.per_page) < this.queryPage.page) { + return setTimeout(() => { + uni.showToast({title: '没有更多数据了!', icon: 'none'}); + }, 500); + } + this.queryPage.page = this.queryPage.page + 1; + this.loadGoodsList(Enums.DATA_DIRECTION.DOWN); + }, + cancel(type) { + this.$refs['show' + type].close() + }, + change(e) { + console.log('是否打开:' + e.show) + }, + togglePopup() { + this.$nextTick(() => { + this.$refs['show' + 'share'].open() + }) + }, + selectMonthdirection(item){ + this.queryPage.direction = item.val; + this.directiontext = item.text; + this.$refs['show' + 'share'].close(); + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + this.queryPage.page = 1; + this.queryPage.count = 0; + this.LoupanList = [] + this.loadGoodsList(Enums.DATA_DIRECTION.UP); + }, + // selectMonth(item) { + // this.queryPage.goods_attr = item; + // this.$refs['show' + 'share'].close(); + // this.dataLoadState.pullDownRefresh = false; + // this.dataLoadState.reachBottom = false; + // this.queryPage.page = 1; + // this.queryPage.count = 0; + // this.LoupanList = [] + // this.loadGoodsList(Enums.DATA_DIRECTION.UP); + // }, + getGoodsAttrList(){ + //加载全部交易类型数据 + logoservice.MoneystatementList({m: 'Money/getGoodsAttrList'}).then(result => { + + this.goodsItem = result; + this.goodsItem.unshift(null) + }).catch(res => { + uni.showToast({title: res.msg ? res.msg: '未查到交易类型选择', icon: 'none'}); + }); + } + }, + // 下拉加载 + onPullDownRefresh() { + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + this.queryPage.page = 1; + this.queryPage.count = 0; + this.LoupanList = [] + this.loadGoodsList(Enums.DATA_DIRECTION.UP); + }, + // 上拉加载 + onReachBottom() { + if (this.LoupanList.length < 12) { + return setTimeout(() => { + uni.showToast({title: '没有更多数据了!', icon: 'none'}); + }, 500); + } + this.queryPage.page = this.queryPage.page + 1; + this.loadGoodsList(Enums.DATA_DIRECTION.DOWN); + }, + onLoad(options) { + // 门店关联 + if(options.shop_id){ + this.queryPage.shop_id = options.shop_id + wx.setNavigationBarTitle({title: options.shop_name}) + } + // 设备关联 + if(options.machineid){ + this.queryPage.machine_id = options.machineid + wx.setNavigationBarTitle({title: options.machineid}) + } + // 账单关联 + if(options.billingid){ + this.queryPage.billing_id = options.billingid + wx.setNavigationBarTitle({title: options.title}) + } + // 可用余额 + if(options.id){ + this.queryPage.status = options.id + if(options.id == 2){ + wx.setNavigationBarTitle({title: '可用明细'}) + }else{ + wx.setNavigationBarTitle({title: '冻结明细'}) + } + } + uni.login({ + provider: 'weixin', + success: (res) => { + logoservice.login({ m:'Init/init',code:res.code}).then(result => { + logoservice.setwixinInfo(result); + this.LoupanList = [] + this.queryPage.page = 1; + this.queryPage.count = 0; + this.loadGoodsList(Enums.DATA_DIRECTION.UP); + this.getGoodsAttrList() + }).catch(err => { + uni.navigateTo({url: 'login',}); + }) + }, + fail: (err) => { + //console.error('授权登录失败:' + JSON.stringify(err)); + } + }); + }, + onShow() { + + } + }; +</script> + +<style lang="scss"> + page { + width: 100%; + height: 100%; + background: #FFFFFF; + } + .eq_list{ + width: 100%; + padding: 0upx 20upx; + background: #FFFFFF; + .eq_list_div{ + border-top: 1upx solid #F5F5F5; + padding: 20upx 0; + .eq_list_ul{ + display: flex; + align-items: center; + line-height: 40upx; + .eq_list_ul_left{ + width: 300upx; + } + .eq_list_ul_right{ + width: calc(100% - 300upx); + text-align: right; + font-weight: 400; + } + } + } + + } + // 返回顶部 + .to-top { + position: fixed; + bottom: 150upx; + right: 30upx; + width: 80upx; + height: 80upx; + border-radius: 50%; + text-align: center; + line-height: 80upx; + // box-shadow: 5upx 5upx 5upx #ebeef5; + transform: rotate(-90deg); + background: #000; + opacity: 0.5; + z-index: 999; + } + .to-top-icon { + color: #FFFFFF; + } + + .uni-share { + display: flex; + flex-direction: column; + } + .uni-share-btn { + height: 90rpx; + line-height: 90rpx; + font-size: 14px; + text-align: center; + color: #666; + background: #FFFFFF; + border-top: 1px solid #EEEEEE; + // margin: 20upx 0; + } + .green { + background-color: #4FB36B !important; + color: #FFFFFF; + } +</style> diff --git a/pages/mall/exclusive-services.vue b/pages/mall/exclusive-services.vue new file mode 100644 index 0000000..ce72c96 --- /dev/null +++ b/pages/mall/exclusive-services.vue @@ -0,0 +1,623 @@ +<template> + <view class="order full-height full-width"> + + <view class="uni-tab-bar full-width"> + + <view scroll-y @scrolltolower="loadMore()" class="full-width content" + style="margin-bottom: 20upx; overflow: auto; width: 100%;height: 100%; background: #fff;"> + + <view class="order-list" v-if="list"> + <view class="item-new-list"> + <view class="item full-width"> + <label class="text content-color">设备编号</label> + <label class="value content-color"> + <text style="text-align: right;" class="full-width">{{queryPage.machine_id}}</text> + </label> + </view> + </view> + + <view class="item-new-list"> + <view class="item full-width"> + <label class="text content-color">出厂时间</label> + <label class="value content-color"> + <text style="text-align: right;" class="full-width">{{list.create_time}}</text> + </label> + </view> + + <view class="item full-width" @click="cleanNozzleHistory()"> + <label class="text content-color">保障剩余时间</label> + <label class="value content-color"> + <view style="text-align: right;line-height: 50upx;" class="full-width"> + {{list.safeguard_time}}天 + </view> + </label> + </view> + </view> + + <view style="margin-top: 30upx; + border-radius: 20upx; + width: calc(100% - 60upx); + background: #fff; + margin: 0upx 30upx 10upx 30upx; + border-radius: 20upx; + box-shadow: 0 0 10upx 10upx #F5F5F5;"> + <!-- @click.stop="showPreviewImage(urlImage)" --> + + + <image show-menu-by-longpress="true" :src="urlImage" @click.stop="showPreviewImage(urlImage)" + style="width: 300upx;margin: auto; display: block;" mode="aspectFit"> </image> + </view> + </view> + </view> + + <view class="item-new-list-text" style="margin-top: 0upx;">通过扫描二维码、或点击咨询按钮,即可联系您的专属售后服务。</view> + + <button ref="button" class="save_bt" @click="goCustomer()">咨询</button> + + </view> + </view> +</template> + +<script> + import uniIcon from '@/components/uni-icon/uni-icon.vue'; + import uniPopup from '../index/common/uni-popup/uni-popup.vue'; + import Enums from '@/util/Enums'; + import foot from '../../components/foot.vue'; + import mpvuePicker from '../../components/mpvue-picker/mpvuePicker.vue'; + import mpvuePickernew from '../../components/mpvue-picker/mpvuePickernew.vue'; + import logoservice from '@/service/logoservice.js'; + + export default { + components: { + uniPopup, + uniIcon, + foot, + mpvuePicker, + mpvuePickernew, + }, + computed: { + + }, + data() { + return { + long: false, + queryPage: { + m: 'Machine/printRecord', + machine_id: null, + }, + shopQueryPage: { + m: 'Machine/getShop', + }, + list: null, + urlImage: "https://img.colorpark.cn/back/169819716165386ea9a0ef9.png", + qrCodeUrl: "" + }; + }, + + + + methods: { + + + + + //预览显示图片 + showPreviewImage(e, id) { + if (e == null || e == "") { + uni.showToast({ + title: '暂时没有定制二维码', + icon: 'none' + }); + return + } + var current = e + "?x-oss-process=image/watermark,text_" + this.getStrToBase64(id) + + ",g_nw,size_50,shadow_50,x_550,y_850,color_4bf25a"; //这里获取到的是一张本地的图片 + uni.previewImage({ + current: current, //需要预览的图片链接列表 + urls: [current] //当前显示图片的链接 + }) + }, + + //字符串转base64 + getStrToBase64(str) { + return Base64.encode(str); + }, + + goCustomer() { + uni.openCustomerServiceChat({ + corpId: 'wwa5849fc2f69d8e53', + //showMessageCard: true, + extInfo: { + url: 'https://work.weixin.qq.com/kfid/kfcc68d63fbdbcc9644' + }, + success: (e) => { + //console.log('e', e) + }, + fail: (err) => { + //console.log('err', err) + } + }) + }, + + + + listdetail() { + uni.showLoading({ + title: '正在加载中...' + }); + logoservice.Machinelistdetail({ + m: 'Machine/list', + machine_id: this.queryPage.machine_id + }).then(result => { + this.long = true + uni.hideLoading(); + if (result[0] != undefined) { + this.list = result[0] + } + }).catch(err => { + uni.hideLoading(); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + }, + + + onChange(e) { + + }, + + onCancel(e) { + + }, + + + }, + + //下拉加载 + onPullDownRefresh() { + + }, + + //上拉加载 + onReachBottom() { + + }, + + onLoad(options) { + this.queryPage.machine_id = options.machineid + this.listdetail(); + }, + + onShow() { + //this.machineGetShopList(); + } + }; +</script> + +<style lang="scss"> + page { + width: 100%; + height: 100%; + background: #fff; + } + + .eq-detail-score { + padding: 40upx 0; + width: 100%; + height: 210upx; + margin: 0upx auto; + background: #43CF7C; + border-radius: 20upx; + display: flex; + align-items: center; + font-size: 26upx; + color: #fff; + } + + .green { + background-color: #4FB36B !important; + color: #FFFFFF; + } + + /*无数据 */ + .noData { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + } + + .noData_img { + width: 260upx; + height: 260upx; + display: block; + margin: 0upx auto 102upx; + } + + .noData_title { + text-align: center; + font-size: 36upx; + } + + .noData_text { + margin-top: 35upx; + font-size: 30upx; + font-weight: 400; + } + + .noData_but { + width: 230upx; + height: 70upx; + line-height: 70upx; + text-align: center; + color: #F56364; + margin: 140upx auto 0; + border: 1upx solid #F56364; + border-radius: 35upx; + } + + /* 去除button默认样式 */ + button::after { + border: none; + } + + button { + background-color: transparent; + padding-left: 0; + padding-right: 0; + line-height: inherit; + } + + .lang-open { + transform: rotate(90deg); + transition: transform 0.5s; + } + + .lang-close { + transform: rotateY(0deg); + transition: transform 0.5s; + } + + //2020-11-17 + .content-open { + height: 90upx; + overflow: hidden; + transition: all 0.4s cubic-bezier(0.25, 1.0, 0.25, 1.0); + } + + .content-close { + height: 0; + transition: all 0.4s cubic-bezier(0.25, 1.0, 0.25, 1.0); + } + + .item-open { + height: 40upx; + transition: all 0.4s cubic-bezier(0.25, 1.0, 0.25, 1.0); + } + + .item-close { + opacity: 0; + height: 0; + } + + /*输入框弹框显示 */ + .weui-search-bar { + position: relative; + padding: 8upx 10upx; + display: flex; + height: 135upx; + background: #FFFFFF; + align-items: center; + } + + .weui-search-bar_form { + width: 100%; + border-radius: 50upx; + background: #F6F6F6; + } + + .weui-search-bar_input { + height: 80upx; + line-height: 80upx; + font-size: 25upx; + padding-left: 24upx; + } + + /*底部弹框显示 */ + .uni-pop_show { + display: flex; + flex-direction: column; + } + + .uni-calendar-item--isDay-text.data-v-09f1e40c { + color: #5CE6B5 !important; //5CE6B5 + } + + .uni-calendar-item--isDay.data-v-09f1e40c { + background: #5CE6B5 !important; + color: #fff !important; + } + + .uni-calendar-item--checked.data-v-09f1e40c { + background: #5CE6B5 !important; + color: #fff !important; + } + + .uni-numbox__value { + width: 120upx !important; + } + + page { + width: 100%; + height: 100%; + background: #F5F5F5; + } + + .eq_list_button { + display: flex; + flex-direction: row; + line-height: 60upx; + padding-bottom: 20upx; + } + + .eq_list_button_ul { + flex: 1; + } + + .eq_list_button_li { + margin: auto; + font-size: 24upx; + color: #FFFFFF; + width: 150upx; + font-weight: bold; + text-align: center; + line-height: 60upx; + height: 60upx; + background-color: #5CE6B6; + } + + .uni-swiper-tab { + border-bottom: 1upx solid #F5F5F5; + } + + .clean-bt { + border-radius: 50%; + width: 200upx; + height: 200upx; + bottom: 160upx; + right: 20upx; + position: fixed; + font-size: 27upx; + text-align: center; + line-height: 130upx; + z-index: 99991; + justify-content: center; + align-items: center; + } + + .order { + width: 100%; + height: 100%; + background-color: #fff; + + .uni-tab-bar { + height: auto !important; + + .uni-swiper-tab { + position: fixed; + top: var(--window-top); + z-index: 999; + width: 100%; + line-height: 85upx; + height: 85upx; + + .swiper-tab-list { + width: calc(100% / 3); + font-size: 30upx; + } + } + + .active { + color: #43CF7C; + } + } + + .way-list { + margin: 0 20upx; + padding-top: 20upx; + border-radius: 10upx; + + .topBox { + width: calc(100% - 60upx); + margin-left: 30upx; + margin-top: 15upx; + justify-content: center; + } + + .topLittleBOX-1 { + font-size: 26upx; + width: 120upx; + color: #333; + overflow: text-align; + } + + .topLittleBOX-2 { + padding-left: 20upx; + padding-top: auto; + padding-bottom: auto; + display: flex; + vertical-align: middle; + flex-direction: row; + align-items: center; + width: calc(100% - 120upx); + position: relative; + } + + .row-1 { + height: 30upx; + background-color: #43CF7C; + border-radius: 20upx; + width: 0upx; + transition: width 1.5s linear; + } + + .rowText { + margin-left: 10upx; + font-size: 26upx; + color: #333; + float: right; + } + + .way-item { + background: #FFFFFF; + border-radius: 10upx; + margin-bottom: 20upx; + } + + .way { + height: 120upx; + min-height: 90upx; + display: flex; + align-items: center; + font-size: 28upx; + + .text { + width: 250upx; + padding-left: 20upx; + color: #fff; + } + + .value { + width: calc(100% - 280upx); + display: flex; + + .prick { + width: calc(100% - 40upx); + } + + .fa-angle-right { + width: 40upx; + font-size: 50upx; + } + } + } + } + + .content { + padding-top: 10upx; + + .order-list { + min-height: 350upx; + width: 100%; + border-radius: 10upx; + + .item { + min-height: 70upx; + display: flex; + align-items: center; + font-size: 26upx; + border-bottom: 1upx solid #F5F5F5; + + .text { + width: 250upx; + color: #000; + font-size: 29upx; + } + + .value { + width: calc(100% - 120upx); + display: flex; + color: #888; + margin-top: 15upx; + margin-bottom: 15upx; + + + .prick { + width: calc(100% - 35upx); + } + + .fa-angle-right { + width: 30upx; + font-size: 50upx; + } + } + } + } + } + } + + .print-score { + width: 100%; + height: 280upx; + background: #43CF7C; + border-radius: 20upx; + display: flex; + align-items: center; + font-size: 26upx; + color: #fff; + + .print { + width: 100%; + + .text { + line-height: 50upx; + color: #fff; + } + } + } + + .list-clean { + height: 80upx; + background: #FFFFFF; + padding-left: 20upx; + padding-right: 23upx; + margin-top: 10upx; + border-radius: 15upx; + margin-left: 20upx; + margin-right: 15upx; + padding-top: 18upx; + } + + .item-new-list { + padding-top: 0upx; + padding-left: 30upx; + padding-right: 25upx; + background: #fff; + margin: 0upx 30upx 25upx 30upx; + border-radius: 20upx; + box-shadow: 0 0 10upx 10upx #F5F5F5; + color: #000; + } + + .item-new-list-text { + margin: -10upx 45upx 30upx 45upx; + color: #999; + font-size: 25upx; + width: calc(100% - 90upx); + } + + .content-color { + color: #fff; + } + + .item-new-list-switch { + float: right; + zoom: 0.6; + position: absolute; + right: 80upx + } + + .save_bt { + height: 100upx; + width: calc(100% - 60upx); + margin-left: 30upx; + background: #191931; + text-align: center; + line-height: 100upx; + color: #fff; + margin-top: 100upx; + border-radius: 20upx; + } +</style> \ No newline at end of file diff --git a/pages/mall/first-ink-installation.vue b/pages/mall/first-ink-installation.vue new file mode 100644 index 0000000..6c10d23 --- /dev/null +++ b/pages/mall/first-ink-installation.vue @@ -0,0 +1,887 @@ +<template> + <view class="order full-height full-width"> + + <view class="uni-tab-bar full-width"> + + <view scroll-y @scrolltolower="loadMore()" class="full-width content" + style="margin-bottom: 20upx; overflow: auto; width: 100%;height: 100%; background: #fff;"> + <!-- 机器 --> + <view class="order-list"> + <view class="item-new-list"> + <view class="item full-width"> + <label class="text content-color">设备编号</label> + <label class="value content-color"> + <text style="text-align: right;" class="full-width">{{queryPage.machine_id}}</text> + </label> + </view> + </view> + + <view class="item-new-list"> + <view class="item full-width"> + <label class="text content-color">状态</label> + <label class="value content-color" v-if="list.flag.value == 'Y'"> + <text v-if="list.status.value == 0" style="text-align:right; color: #808080;" + class="full-width">离线</text> + <text v-if="list.status.value == 1 || list.status.value == 2 " + style="text-align:right; color: #5CE6B5;" class="full-width">在线</text> + <text v-if="list.status.value == 3 || list.status.value == 4 || list.status.value == 5 " + style="text-align:right; color: #D43030;" class="full-width">故障</text> + </label> + <label class="value content-color" v-if="list.flag.value == 'N'"> + <text style="text-align:right; color: #FF8D1A;" class="full-width">锁定</text> + </label> + </view> + </view> + + <view style="margin-top: 30upx; + border-radius: 20upx; + width: calc(100% - 60upx); + background: #fff; + margin: 0upx 30upx 10upx 30upx; + border-radius: 20upx; + box-shadow: 0 0 10upx 10upx #F5F5F5;"> + <img src="https://img.colorpark.cn/back/169811945365373f1dccaf2.png" + style="width: 300upx;margin: auto; display: block;" mode="aspectFit"> + </view> + </view> + </view> + + <view class="item-new-list-text" style="margin-top: 30upx;"> + 装墨是将墨管与喷头填充满墨水,所以对墨水消耗很大,建议只用于新机装墨。机器必须通电,且有正常连接网络,才能完成远程喷嘴检测操作。</view> + + <!-- <view class="save_bt" @click="showConfirmCenterPop()">开始装墨</view> --> + + <view class="save_bt" @click="showConfirmCenterPop()" v-if="list" + :style="{background: list.status.value == 0 ? '#999' : '#191931' }">开始装墨</view> + + + <uni-popup ref="cleanCountDown" type="bottom" :maskClick="false"> + <view style="width: 100%; height: 600upx; margin: auto;"> + <view style="background: #F9F9F9;width: 100%; height: 100%; border-radius: 20upx 20upx 0upx 0upx; + align-items: center; + display: flex; + flex-direction: column;"> + <view + style="margin-top:220upx; color: rgba(67, 207, 124, 1); font-size: 60upx; font-weight: 800 "> + {{countDownTimeCount}} + </view> + <view style="margin-top: 80upx; font-size: 26upx; color: #999; ">请稍后 </view> + <view style="margin-top: 20upx; font-size: 26upx; color: #999; "> 正在装墨中,预计需要一分钟</view> + </view> + </view> + </uni-popup> + + <uni-popup ref="confirmCenter" type="center"> + <view style="width:600upx; margin:auto; display: flex; flex-direction: column;"> + <view + style="width:100%; height: 320upx; background: #FFFFFF; border-radius: 15upx; position: relative; margin-top: -100upx;"> + <view style="font-size: 28upx;color: #999;margin: 50upx 30upx 0upx 30upx"> + 首次装墨只用于新购机器第一次装墨,由于装墨过程比较耗费墨水,请不要随意多次点击装墨,以免造成墨水浪费。同意装墨请点击下方确定。 </view> + <view + style="width:100%; position: absolute; bottom: 0; display: flex; height: 100upx; align-items: center;border-radius:0 0 10upx 10upx;"> + <view @click="closeConfirmCenterPop()" + style="width: 50%;text-align: center;height: 100upx; line-height: 100upx; color: #000; font-size: 30upx;"> + 取消</view> + <view @click.stop="installation()" + style="width: 50%; text-align: center; height: 100upx; line-height: 100upx; color: #000;font-size: 30upx;"> + 确定</view> + </view> + </view> + </view> + </uni-popup> + + </view> + </view> +</template> + +<script> + import uniIcon from '@/components/uni-icon/uni-icon.vue'; + import uniPopup from '../index/common/uni-popup/uni-popup.vue'; + import Enums from '@/util/Enums'; + import foot from '../../components/foot.vue'; + import mpvuePicker from '../../components/mpvue-picker/mpvuePicker.vue'; + import mpvuePickernew from '../../components/mpvue-picker/mpvuePickernew.vue'; + import logoservice from '@/service/logoservice.js'; + let Base64 = require('js-base64').Base64; + export default { + components: { + uniPopup, + uniIcon, + foot, + mpvuePicker, + mpvuePickernew + }, + computed: { + + }, + data() { + return { + long: false, + isSinglePlatep: true, //是否单机版 或者 配送版 + isShowPullButtom: false, //false不显示true显示 + isOnclickItem: false, //是否点击item + numberlist: [], + LoupanList: [], + SortNumber: 1, + StcokList: [], //设备库存列表 + StcokLists: [], + list: null, + getStockerCount: "", //设置输入个数 + selectItem: null, + mode: 'selector', + pickerValueArray: [], + pickerValueDefault: [0], + type: 'bottom', + //上拉状态 + dataLoadState: { + pullDownRefresh: false, + reachBottom: false + }, + queryPage: { + m: 'Machine/printRecord', + machine_id: null, + page: 1, + per_page: 20, + total: 0, + date: null, //日 + month: null, //月 + year: null, //日 + is_excess: null, //套餐选择类型 + }, + shopQueryPage: { + m: 'Machine/getShop', + }, + attr: null, + //商品库存 + showshareitem: null, + showshareindex: null, + //打印年月日 + printingPickerValueArray: [], + printingpickerValueDefault: [0], + maxnumber: 12, + maxlength: 2, + be_child: 0, //子代理 + Userres_partner_id: null, //总代理 + is_inner: null, //恢复订单打印 + print_type: 0, //默认0标准版 1无限版 + shopList: null, //店铺列表数据 + GoodsItem: null, //货道数据 + stockData: null, //库存数据 + stockDataList: null, //库存列表数据 + inkStatusC: false, + inkStatusM: false, + inkStatusY: false, + inkStatusK: false, + inkStatusW: false, + inkStatusHas: false, + isShowPop: false, + timer: null, //定时器 + intCountTimer: 0, + clear_time: "", //上次清洗时间 + isClickClean: false, //是否点击 + oldMousePos: {}, + oldNodePos: {}, + autoCleanLeft: -40, //左位置 + autoCleanTop: -40, //下位置 + isTouchStart: false, + show_clean: 0, //为1时就显示清洗喷头的入口,为0时就不显示 + countDownTimeCount: 1, //倒计时 + countDownTime: null, //倒计时 + isAutoStartInstallation: false, //是否自动清洗开始 + shop_id: null, + }; + }, + + methods: { + + + //显示确定弹框 + showConfirmCenterPop() { + + if (this.list.status.value == 0) { + uni.showToast({ + title: "打印机离线", + duration: 1000, + icon: 'error' + }) + return; + } + + this.$refs['confirmCenter'].open(); + }, + + + //关闭确定弹框 + closeConfirmCenterPop() { + this.$refs['confirmCenter'].close(); + }, + + + //装墨中 + installation() { + + + + this.$refs['confirmCenter'].close() + if (this.isClickClean) { + uni.showToast({ + title: '装墨中...', + icon: 'none' + }); + + return; + } + this.isClickClean = true; + uni.showLoading({ + title: '装墨中...', + }) + this.intCountTimer = 0; + this.countDownTimeCount = 1; + logoservice.MachineSavePartnerStock({ + m: 'Machine/loadInk', + machine_id: this.queryPage.machine_id, + }).then(result => { + this.autoClick() + }).catch(err => { + this.isClickClean = false + uni.hideLoading(); + //this.cleanTimeData(); + uni.showToast({ + title: err.msg, + duration: 1000, + icon: "none", + }) + }) + }, + + autoClick() { + this.$refs['cleanCountDown'].open(); + let that = this; + this.countDownTime = setInterval(function() { + that.countDownTimeCount++; + if (that.countDownTimeCount >= 60) { + uni.hideLoading(); + clearInterval(that.countDownTime); + that.countDownTime = null; + that.isClickClean = false + that.countDownTimeCount = 0; + that.$refs['cleanCountDown'].close() + uni.showToast({ + title: "装墨完成", + icon: "none", + }) + } + }, 1000); + }, + + //获取店铺名称 + category(id) { + var dataname = ''; + if (this.shopList) { + this.shopList.forEach(item => { + if (item.id == id) { + dataname = item.short_name + } + }); + } + return dataname + }, + + //调转收益列表 + toLiquidationList() { + uni.navigateTo({ + url: '../mine/Liquidation?machineid=' + this.queryPage.machine_id, + }); + }, + + //字符串转base64 + getStrToBase64(str) { + return Base64.encode(str); + }, + + //取消 + cancel(type) { + this.$refs['showshareinput'].close() + }, + + //更换弹框 + toChangePop(item) { + if (this.$base.Userres.be_child == 1) return; + this.selectItem = item; + this.$nextTick(() => { + this.$refs['showshare'].open() + this.loadStockGoodsList(""); + }) + }, + + previewImageOne(item) { + var current = e; //这里获取到的是一张本地的图片 + }, + + + //确定 + onConfirm(e) { + this.shop_id = e.value[0]; + }, + + profit() { + uni.navigateTo({ + url: '../mall/eq-profit?machineid=' + this.list.id, + }); + }, + + toorder() { + uni.navigateTo({ + url: '../mine/order?machineid=' + this.list.id, + }); + }, + + listdetail() { + uni.showLoading({ + title: '正在加载中...' + }); + logoservice.Machinelistdetail({ + m: 'Machine/list', + machine_id: this.queryPage.machine_id + }).then(result => { + this.long = true + uni.stopPullDownRefresh(); + uni.hideLoading(); + if (result[0] != undefined) { + this.list = result[0] + this.shop_id = this.list.shop_id + } + }).catch(err => { + uni.hideLoading(); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + }, + + loadGoodsList(direction) { + if (this.dataLoadState.pullDownRefresh || this.dataLoadState.reachBottom) return; + uni.showLoading({ + title: '正在加载中...' + }) + this.dataLoadState.pullDownRefresh = direction === Enums.DATA_DIRECTION.UP; + this.dataLoadState.reachBottom = direction === Enums.DATA_DIRECTION.DOWN; + if (this.dataLoadState.reachBottom) { + if (Math.ceil(this.queryPage.total / this.queryPage.per_page) < this.queryPage.page) { + return setTimeout(() => { + uni.showToast({ + title: '没有更多数据了!', + icon: 'none' + }); + }, 500); + } + } + logoservice.Machinelist(this.queryPage).then(result => { + this.long = true + let queryList = result.data.data + //触底更新时,当前列表+查询结果集 + let newList = this.LoupanList.concat(queryList) + this.LoupanList = newList + //分页对象处理 + this.queryPage.total = result.data.total; + this.queryPage.per_page = result.data.per_page; + //停止当前页面下拉刷新 + if (this.dataLoadState.pullDownRefresh) uni.stopPullDownRefresh(); + //数据加载状态处理 false + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + uni.hideLoading(); + }).catch(err => { + //停止当前页面下拉刷新 + if (this.dataLoadState.pullDownRefresh) uni.stopPullDownRefresh(); + //数据加载状态处理 false + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + uni.hideLoading(); + }); + }, + + //获取店铺数据 + machineGetShopList() { + logoservice.MachineGetShop(this.shopQueryPage).then(result => { + if (result != null && result != undefined) { + this.shopList = result; + } + }).catch(err => { + + }); + }, + + onChange(e) { + + }, + + onCancel(e) { + + }, + + //goodsItem加载全部交易类型数据 + getGoodsAttrList() { + logoservice.MoneystatementList({ + m: 'Machine/printRecord', + machine_id: this.queryPage.machine_id, + sub: 1 + }).then(result => { + + }).catch(res => { + uni.showToast({ + title: res.msg ? res.msg : '未查到交易类型选择', + icon: 'none' + }); + }); + }, + }, + + //下拉加载 + onPullDownRefresh() { + + }, + + //上拉加载 + onReachBottom() { + + }, + + onLoad(options) { + let that = this; + this.queryPage.machine_id = options.machineid + this.listdetail(); + }, + + onShow() { + this.machineGetShopList(); + } + }; +</script> + +<style lang="scss"> + page { + width: 100%; + height: 100%; + background: #fff; + } + + .eq-detail-score { + padding: 40upx 0; + width: 100%; + height: 210upx; + margin: 0upx auto; + background: #43CF7C; + border-radius: 20upx; + display: flex; + align-items: center; + font-size: 26upx; + color: #fff; + } + + .green { + background-color: #4FB36B !important; + color: #FFFFFF; + } + + /*无数据 */ + .noData { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + } + + .noData_img { + width: 260upx; + height: 260upx; + display: block; + margin: 0upx auto 102upx; + } + + .noData_title { + text-align: center; + font-size: 36upx; + } + + .noData_text { + margin-top: 35upx; + font-size: 30upx; + font-weight: 400; + } + + .noData_but { + width: 230upx; + height: 70upx; + line-height: 70upx; + text-align: center; + color: #F56364; + margin: 140upx auto 0; + border: 1upx solid #F56364; + border-radius: 35upx; + } + + /* 去除button默认样式 */ + button::after { + border: none; + } + + button { + background-color: transparent; + padding-left: 0; + padding-right: 0; + line-height: inherit; + } + + .lang-open { + transform: rotate(90deg); + transition: transform 0.5s; + } + + .lang-close { + transform: rotateY(0deg); + transition: transform 0.5s; + } + + //2020-11-17 + .content-open { + height: 90upx; + overflow: hidden; + transition: all 0.4s cubic-bezier(0.25, 1.0, 0.25, 1.0); + } + + .content-close { + height: 0; + transition: all 0.4s cubic-bezier(0.25, 1.0, 0.25, 1.0); + } + + .item-open { + height: 40upx; + transition: all 0.4s cubic-bezier(0.25, 1.0, 0.25, 1.0); + } + + .item-close { + opacity: 0; + height: 0; + } + + /*输入框弹框显示 */ + .weui-search-bar { + position: relative; + padding: 8upx 10upx; + display: flex; + height: 135upx; + background: #FFFFFF; + align-items: center; + } + + .weui-search-bar_form { + width: 100%; + border-radius: 50upx; + background: #F6F6F6; + } + + .weui-search-bar_input { + height: 80upx; + line-height: 80upx; + font-size: 25upx; + padding-left: 24upx; + } + + /*底部弹框显示 */ + .uni-pop_show { + display: flex; + flex-direction: column; + } + + .uni-calendar-item--isDay-text.data-v-09f1e40c { + color: #5CE6B5 !important; //5CE6B5 + } + + .uni-calendar-item--isDay.data-v-09f1e40c { + background: #5CE6B5 !important; + color: #fff !important; + } + + .uni-calendar-item--checked.data-v-09f1e40c { + background: #5CE6B5 !important; + color: #fff !important; + } + + .uni-numbox__value { + width: 120upx !important; + } + + page { + width: 100%; + height: 100%; + background: #F5F5F5; + } + + .eq_list_button { + display: flex; + flex-direction: row; + line-height: 60upx; + padding-bottom: 20upx; + } + + .eq_list_button_ul { + flex: 1; + } + + .eq_list_button_li { + margin: auto; + font-size: 24upx; + color: #FFFFFF; + width: 150upx; + font-weight: bold; + text-align: center; + line-height: 60upx; + height: 60upx; + background-color: #5CE6B6; + } + + .uni-swiper-tab { + border-bottom: 1upx solid #F5F5F5; + } + + .clean-bt { + border-radius: 50%; + width: 200upx; + height: 200upx; + bottom: 160upx; + right: 20upx; + position: fixed; + font-size: 27upx; + text-align: center; + line-height: 130upx; + z-index: 99991; + justify-content: center; + align-items: center; + } + + .order { + width: 100%; + height: 100%; + background-color: #fff; + + .uni-tab-bar { + height: auto !important; + + .uni-swiper-tab { + position: fixed; + top: var(--window-top); + z-index: 999; + width: 100%; + line-height: 85upx; + height: 85upx; + + .swiper-tab-list { + width: calc(100% / 3); + font-size: 30upx; + } + } + + .active { + color: #43CF7C; + } + } + + .way-list { + margin: 0 20upx; + padding-top: 20upx; + border-radius: 10upx; + + .topBox { + width: calc(100% - 60upx); + margin-left: 30upx; + margin-top: 15upx; + justify-content: center; + } + + .topLittleBOX-1 { + font-size: 26upx; + width: 120upx; + color: #333; + overflow: text-align; + } + + .topLittleBOX-2 { + padding-left: 20upx; + padding-top: auto; + padding-bottom: auto; + display: flex; + vertical-align: middle; + flex-direction: row; + align-items: center; + width: calc(100% - 120upx); + position: relative; + } + + .row-1 { + height: 30upx; + background-color: #43CF7C; + border-radius: 20upx; + width: 0upx; + transition: width 1.5s linear; + } + + .rowText { + margin-left: 10upx; + font-size: 26upx; + color: #333; + float: right; + } + + .way-item { + background: #FFFFFF; + border-radius: 10upx; + margin-bottom: 20upx; + } + + .way { + height: 120upx; + min-height: 90upx; + display: flex; + align-items: center; + font-size: 28upx; + + .text { + width: 250upx; + padding-left: 20upx; + color: #fff; + } + + .value { + width: calc(100% - 280upx); + display: flex; + + .prick { + width: calc(100% - 40upx); + } + + .fa-angle-right { + width: 40upx; + font-size: 50upx; + } + } + } + } + + .content { + padding-top: 10upx; + + .order-list { + min-height: 350upx; + width: 100%; + border-radius: 10upx; + + .item { + min-height: 70upx; + display: flex; + align-items: center; + font-size: 26upx; + border-bottom: 1upx solid #F5F5F5; + + .text { + width: 250upx; + color: #000; + font-size: 29upx; + } + + .value { + width: calc(100% - 120upx); + display: flex; + color: #888; + margin-top: 15upx; + margin-bottom: 15upx; + + + .prick { + width: calc(100% - 35upx); + } + + .fa-angle-right { + width: 30upx; + font-size: 50upx; + } + } + } + } + } + } + + .print-score { + width: 100%; + height: 280upx; + background: #43CF7C; + border-radius: 20upx; + display: flex; + align-items: center; + font-size: 26upx; + color: #fff; + + .print { + width: 100%; + + .text { + line-height: 50upx; + color: #fff; + } + } + } + + .list-clean { + height: 80upx; + background: #FFFFFF; + padding-left: 20upx; + padding-right: 23upx; + margin-top: 10upx; + border-radius: 15upx; + margin-left: 20upx; + margin-right: 15upx; + padding-top: 18upx; + } + + .item-new-list { + padding-top: 0upx; + padding-left: 30upx; + padding-right: 25upx; + background: #fff; + margin: 0upx 30upx 25upx 30upx; + border-radius: 20upx; + box-shadow: 0 0 10upx 10upx #F5F5F5; + color: #000; + } + + .item-new-list-text { + margin: -10upx 45upx 30upx 45upx; + color: #999; + font-size: 25upx; + width: calc(100% - 90upx); + } + + .content-color { + color: #fff; + } + + .item-new-list-switch { + float: right; + zoom: 0.6; + position: absolute; + right: 80upx + } + + .save_bt { + height: 100upx; + width: calc(100% - 60upx); + margin-left: 30upx; + background: #191931; + text-align: center; + line-height: 100upx; + color: #fff; + margin-top: 100upx; + border-radius: 20upx; + } +</style> \ No newline at end of file diff --git a/pages/mall/informationList.vue b/pages/mall/informationList.vue new file mode 100644 index 0000000..deb4d05 --- /dev/null +++ b/pages/mall/informationList.vue @@ -0,0 +1,315 @@ +<template> + <view class="full-width content-color full-height"> + <view class="full-width" style="height: 90%;"> + <!--动态数据--> + <view scroll-y @scrolltolower="loadMore()" class="full-width" @touchend="touchEnd" v-if="long" style="margin-bottom: 30upx;"> + <!-- <view v-for="(item, index) in LoupanList.city" :key="index"> + <view @click="tocityHome(item)" style="color:#383838;background: #FFFFFF;display: flex; + flex-direction: row;margin: 20upx; height: 120upx; align-items: center; padding-left: 20upx;padding-right: 20upx;"> + <view style="font-size: 28upx;font-weight: 500;color:#000000;">(市){{item.name}}</view> + <view :class="'lang-close'" style="margin-left: auto; margin-right: 20upx;"> + <label class="fa fa-angle-right align-right sub-color" style="font-size: 40upx;"></label> + </view> + </view> + </view> --> + <!-- <view v-for="(item, index) in LoupanList.district" :key="index"> + <view + style="color:#383838;background: #FFFFFF;display: flex; + flex-direction: row;margin: 20upx; height: 120upx; align-items: center; padding-left: 20upx;padding-right: 20upx;"> + <view style="font-size: 28upx;font-weight: 500;color:#666666 ;">(区){{item.name}}</view> + <view :class="'lang-close'" style="margin-left: auto; margin-right: 20upx;"> + <label class="fa fa-angle-right align-right sub-color" style="font-size: 40upx;"></label> + </view> + </view> + </view> --> + <!-- <view class="eq_list" > + <view class="eq_list_div" v-for="(item, index) in LoupanList.client" :key="index" + @click="refundNumorder(item)"> + <view :style="{'color':p_id == item.id ? '#39B54A':''}" + style="font-size: 28upx;font-weight: 500;color:#666666">{{item.name}}</view> + <view :class="item.isShowPullButtom ? 'lang-open' : 'lang-close'" + style="margin-left: auto; margin-right: 20upx;"> + <label class="fa fa-angle-right align-right sub-color" + :style="{'color':p_id == item.id ? '#39B54A':'#666666'}" + style="font-size: 40upx;"></label> + </view> + </view> + </view> --> + <view class="eq_list" style="margin-top: 5upx;"> + <view class="eq_list_div" v-for="(item, index) in LoupanList.self" :key="index" + @click="refundNumorder(item)"> + <view :style="{'color':p_id == item.id ? '#39B54A':''}" + style="font-size: 28upx;font-weight: 500;color:#666666">{{item.name}}</view> + <view :class="item.isShowPullButtom ? 'lang-open' : 'lang-close'" + style="margin-left: auto; margin-right: 20upx;"> + <label class="fa fa-angle-right align-right sub-color" + :style="{'color':p_id == item.id ? '#39B54A':'#666666'}" + style="font-size: 40upx;"></label> + </view> + </view> + </view> + <!--暂无相关信息--> + <view class="align-center content-color" + style="position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%);" + v-if=" LoupanList == null"> + <span class="iconfont icon-wushuju" + style="font-size: 100upx; text-align: center; color: #B2B2B2;"></span> + <view style="color: #B2B2B2; text-align: center; line-height: 50upx;font-size: 23upx;">暂无相关信息</view> + </view> + </view> + <!--动态数据完--> + </view> + <!--返回顶部--> + <view v-if="totopstatus" class="to-top content-color" @click="totop()"> + <view class="fa fa-angle-right to-top-icon"></view> + </view> + <view v-if="is_inner == 1" @click="toallHome()" style="width:160upx; + height:80upx; + line-height:80upx; + border: 20upx; + background:#E33C64; + border-radius:50upx 0upx 0upx 50upx; + align-items:center; + color: #FFFFFF; + padding-left:15upx;padding-left: 30upx; position:fixed; right: 0upx;bottom: 80upx">所有数据</view> + </view> + +</template> + +<script> + import uniIcon from '@/components/uni-icon/uni-icon.vue'; + import Enums from '@/util/Enums'; + import uniPopup from '../index/common/uni-popup/uni-popup.vue'; + //自定义底部 + import foot from '../../components/foot.vue'; + import logoservice from '@/service/logoservice.js'; + export default { + components: { + uniIcon, + foot, + uniPopup + }, + computed: { + + }, + data() { + return { + msg: "", + error: true, + stockValue: "", + stockCount: "", + long: false, + LoupanList: [], //数据 + //返回顶部 + totopstatus: false, + //上拉状态 + dataLoadState: { + pullDownRefresh: false, + reachBottom: false + }, + queryPage: { + m: 'Partner/levelList', + }, + nameInput: null, + isOnclickItem: false, //是否点击item + showshareitem: null, + showshareindex: null, + p_id: null, + is_inner: null, //是否显示所有 + }; + }, + + methods: { + //调转所有数据 + toallHome() { + logoservice.receiveMoneyList({ + p_id: 0, + m: 'Init/changePartner' + }).then(result => { + uni.reLaunch({ + url: "/pages/index/all-agent" + }) + }).catch(err => { + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }); + }, + + //调转市代理 + tocityHome(item) { + logoservice.receiveMoneyList({ + p_id: item.id, + m: 'Init/changePartner' + }).then(result => { + uni.reLaunch({ + url: "/pages/index/city-agent" + }) + }).catch(err => { + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }); + }, + + //选择终端返回首页 + refundNumorder(item) { + logoservice.receiveMoneyList({ + p_id: item.id, + m: 'Init/changePartner' + }).then(result => { + uni.reLaunch({ + url: "/pages/index/home" + }) + }).catch(err => { + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }); + }, + + //加载数据 + loadGoodsList(direction) { + //if (this.dataLoadState.pullDownRefresh || this.dataLoadState.reachBottom) return; + uni.showLoading({ + title: '正在加载中...', + mask: true + }) + logoservice.receiveMoneyList(this.queryPage).then(result => { + this.long = true + this.LoupanList = result; + console.log("数据:" + this.LoupanList) + uni.hideLoading(); + }).catch(err => { + uni.hideLoading(); + }); + }, + + //返回顶部 + totop() { + uni.pageScrollTo({ + scrollTop: 0, + duration: 300 + }); + this.totopstatus = false + }, + + touchEnd(e) { + if (e.mp.changedTouches[0].pageY > 1000) { + this.totopstatus = true + } else { + this.totopstatus = false + } + }, + + //做滚动加载使用 + loadMore() { + if (Math.ceil(this.queryPage.count / this.queryPage.per_page) < this.queryPage.page) { + return setTimeout(() => { + uni.showToast({ + title: '没有更多数据了!', + icon: 'none' + }); + }, 500); + } + this.queryPage.page = this.queryPage.page + 1; + this.loadGoodsList(Enums.DATA_DIRECTION.DOWN); + }, + }, + + onLoad(options) { + uni.login({ + provider: 'weixin', + success: (res) => { + logoservice.login({ + m: 'Init/init', + code: res.code + }).then(result => { + this.$base.Userres = result //记录用户登录信息 + this.is_inner = this.$base.Userres.is_inner //总代理 + logoservice.setwixinInfo(result); + this.LoupanList = [] + this.loadGoodsList(Enums.DATA_DIRECTION.UP); + }).catch(err => { + uni.navigateTo({ + url: 'login', + }); + }) + }, + fail: (err) => { + console.error('授权登录失败:' + JSON.stringify(err)); + } + }); + }, + + onShow() { + + } + + }; +</script> + +<style lang="scss"> + /* 去除button默认样式 */ + button::after { + border: none; + } + .eq_list { + width: 100%; + overflow: hidden; + padding-right: 20upx; + border-radius: 10upx; + margin-top: -10upx; + + .eq_list_div { + float: left; + height: 120upx; + align-items: center; + width: calc(100% / 2 - 20upx); + margin-left: 20upx; + margin-top: 20upx; + background: #FFFFFF; + padding: 40upx 20upx; + display: flex; + flex-direction: row; + align-items: center; + } + } + + button { + background-color: transparent; + padding-left: 0; + padding-right: 0; + line-height: inherit; + } + + page { + width: 100%; + height: 99%; + background: #F8F8F8; + } + + // 返回顶部 + .to-top { + position: fixed; + bottom: 150upx; + right: 30upx; + width: 80upx; + height: 80upx; + border-radius: 50%; + text-align: center; + line-height: 80upx; + // box-shadow: 5upx 5upx 5upx #ebeef5; + transform: rotate(-90deg); + background: #000; + opacity: 0.5; + z-index: 999; + } + + .to-top-icon { + color: #FFFFFF; + } +</style> diff --git a/pages/mall/machine-inventory.vue b/pages/mall/machine-inventory.vue new file mode 100644 index 0000000..4bf01bd --- /dev/null +++ b/pages/mall/machine-inventory.vue @@ -0,0 +1,1898 @@ +<template> + <view class=" full-height full-width"> + + <!-- 暂无相关信息 --> + <!-- <view v-if="!list&&long"> + <view class="noData"> + <image src="../../static/icon_guaqi.png" mode="aspectFill" class="noData_img"></image> + <view class="noData_title"> + 非常抱歉,您没有权限查阅当前打印站的信息!<br> + </view> + <view class="noData_but" @click="tomain()">返回</view> + </view> + </view> --> + + <view class="uni-tab-bar full-width" v-if="list"> + + + <view scroll-y @scrolltolower="loadMore()" class="full-width content" v-if="long" + style="margin-bottom: 20upx; overflow: auto; width: 100%;height: 100%;"> + + <view class="way-list" style=" + border-radius: 10upx; + margin: 30upx;" + v-if="stockData != null "> + <!-- 库存数量 --> + <view class="print-score bg-white-color full-width" style="position: relative;height:230upx;"> + <view class="print content-color "> + <view style="position: absolute;top: 30upx;width: 180upx; height: 60upx; border-top-right-radius: 40upx; + border-bottom-right-radius:40upx; background: #FFFFFF;text-align: center; + padding-top: 10upx;"> + <text + style="color:#383838;font-size:40upx;font-weight: bold;">{{queryPage.machine_id}}</text> + </view> + <text @click="toStockList()" + style="color:#fff;font-size:30upx; position: absolute; right: 20upx; top:50upx">调整</text> + <view + style="height: 70upx;position: absolute; left:0upx;top:120upx;width:100%;display:flex;flex-direction:row"> + <text + style="color: #fff; font-size: 50upx;width:33%;;font-weight: 500; text-align: center; padding-left:10upx">{{stockData.all_stock}}</text> + <text + style="color: #fff; font-size: 50upx;width:33%;;font-weight: 500;text-align: center;padding-left:20upx;">{{stockData.now_stock}}</text> + <text + style="color: #fff; font-size: 50upx;width:33%;;font-weight: 500;text-align:center;padding-right:30upx;">{{stockData.need_stock}}</text> + </view> + <view + style="position: absolute; left:0upx;top:180upx;width:100%;display:flex;flex-direction:row"> + <text + style="color:#fff; font-size:23upx;text-align:center;width:33%; padding-left:5upx;">总库存(个)</text> + <text + style="color:#fff; font-size:23upx;margin-left:30upx;text-align:center;width:33%;">实时库存(个)</text> + <text + style="color: #fff; font-size:23upx;text-align:center;width:33%;padding-right:25upx;">需补货(个)</text> + </view> + </view> + </view> + + <!-- 库存列表 --> + <view + style="width: 100% ; margin-top: 20upx; background: #fff; border-radius: 20upx; padding-bottom: 20upx; "> + <view + style="padding-top: 10upx; font-size: 24upx; font-weight: 550; height: 60upx; width: calc(100% - 60upx); border-bottom: 1upx solid #eee; margin-left: 30upx;"> + 补货明细</view> + <view v-if="stockDataList.length > 0"> + <view class='topBox' v-for="(item, index) in stockDataList" :key="index"> + + <view style="display: flex;flex-direction: row;align-items: center;" + @click="selectStockList(index, item)"> + <span v-if="item.list !=null && item.list.length > 0" class="iconfont icon-xiala" + style="font-size: 20upx; color: #99999;margin-right:10upx;"></span> + <span v-if="item.list == null || item.list.length == 0" + style="font-size: 20upx; color: #99999;margin-right:10upx; width: 20upx;"></span> + <view class='topLittleBOX-1' style="width: 240upx;">{{item.name}}</view> + <view class='topLittleBOX-2' style="width: calc(100% - 240upx); "> + <view class='row-1' :style="{width: item.row2 +'px;max-width:90%'}"></view> + <view class='rowText' style="position: absolute; right: 80upx"> + {{item.need_stock}} + </view> + </view> + </view> + <view v-if="item.isDown" v-for="(itemStock, index) in item.list" :key="index" + style="display: flex;flex-direction: row;height: 55upx; align-items: center; position: relative; "> + <view style="width: 250upx;font-size: 26upx;color: #333; margin-left: 30upx; "> + {{itemStock.channel_no}} + </view> + <view style="font-size: 26upx;color: #333;position: absolute; right: 80upx"> + {{itemStock.need_stock}} + </view> + </view> + </view> + </view> + <view style="width: 100%; + height: 70upx; + line-height: 80upx; + text-align: center; + margin-top: 10upx;" v-if="stockDataList == null || stockDataList.length == 0"> + 暂时不需要补货 + </view> + </view> + </view> + + + + + </view> + + </view> + + <!-- 店铺 --> + <mpvue-picker ref="mpvuePicker" :themeColor="'#53B2B0'" :mode="mode" :pickerValueDefault="pickerValueDefault" + @onChange="onChange" @onConfirm="onConfirm" @onCancel="onCancel" :pickerValueArray="pickerValueArray"> + </mpvue-picker> + + <!-- 年月日 --> + <mpvue-pickernew ref="printingMpvuePicker" :themeColor="'#53B2B0'" + :pickerValueDefault="printingpickerValueDefault" @onChange="onChange" @onCancel="onCancel" + @onConfirm="onConfirmPrinting" :pickerValueArray="printingPickerValueArray"></mpvue-pickernew> + + <!-- 中间弹框,加货道输入框--> + <uni-popup ref="showshareinput" type="center" @change="change"> + <view style="width:600upx; margin:auto; display: flex; flex-direction: column;"> + <view + style="width:100%; height: 400upx; background: #FFFFFF; border-radius: 10upx; position: relative;"> + <view style="width:100%; text-align: center; margin:30upx 0 0;"> + <label>仓库库存({{showshareitem.total_stock}})个</label> + </view> + <view + style="display: flex; align-items: center; margin:50upx 20upx 0; height: 80upx; line-height: 80upx;"> + <label style="padding-left:20upx;">当前货道库存:</label> + <input v-model="showshareitem.stock" style="width: 60%;font-size: 28upx; height: 90upx; line-height: 90upx; + background: #f9f9f9; + color:#5CE6B6; padding-left: 10upx; border-radius: 5upx;" min="0" :max="maxnumber" :maxlength="maxlength" + type="number" @click.stop="StockCountInput()" + @input="inputVal(showshareitem, showshareindex)"></input> + </view> + <view style="width: calc(100% - 40upx); margin: auto; text-align: right;padding:10upx 20upx;"> + <label style="font-size: 22upx; color: #B2B2B2;">最大只能输入{{maxnumber}}个</label> + </view> + <view style="width:100%; position: absolute; bottom: 0; + display: flex; height: 100upx; align-items: center;border-radius:0 0 10upx 10upx;"> + <view @click="cancel('share')" + style="width: 50%; background: #B2B2B2; text-align: center;height: 100upx; line-height: 100upx; color: #FFFFFF;"> + 取消</view> + <view @click.stop="changeChannel(showshareitem,showshareindex)" + style="width: 50%; background: #5CE6B6; text-align: center; height: 100upx; line-height: 100upx; color: #FFFFFF;"> + 确定</view> + </view> + </view> + </view> + </uni-popup> + + + + + + </view> +</template> + +<script> + import uniIcon from '@/components/uni-icon/uni-icon.vue'; + import uniPopup from '../index/common/uni-popup/uni-popup.vue'; + import Enums from '@/util/Enums'; + import foot from '../../components/foot.vue'; + import mpvuePicker from '../../components/mpvue-picker/mpvuePicker.vue'; + import mpvuePickernew from '../../components/mpvue-picker/mpvuePickernew.vue'; + import logoservice from '@/service/logoservice.js'; + let Base64 = require('js-base64').Base64; + export default { + components: { + uniPopup, + uniIcon, + foot, + mpvuePicker, + mpvuePickernew + }, + computed: { + + }, + data() { + return { + long: false, + isSinglePlatep: true, //是否单机版 或者 配送版 + isShowPullButtom: false, //false不显示true显示 + isOnclickItem: false, //是否点击item + numberlist: [], + LoupanList: [], + SortNumber: 1, + goodsItem: [{ + goods_name: '全部', + type: -12, + }, + { + goods_name: '套餐内', + type: 0, + }, + { + goods_name: '打印卡', + type: 1, + }, + ], + StcokList: [], //设备库存列表 + StcokLists: [], + list: null, + getStockerCount: "", //设置输入个数 + selectItem: null, + //默认选中 + currentTab: { + code: 2, + name: '' + }, + tabBars: [{ + code: 0, + name: '机器' + }, + { + code: 2, + name: '' + }, + { + code: 1, + name: '打印' + }, + ], + //end底部弹框 + mode: 'selector', + pickerValueArray: [], + pickerValueDefault: [0], + type: 'bottom', + //上拉状态 + dataLoadState: { + pullDownRefresh: false, + reachBottom: false + }, + queryPage: { + m: 'Machine/printRecord', + machine_id: null, + page: 1, + per_page: 20, + total: 0, + date: null, //日 + month: null, //月 + year: null, //日 + is_excess: null, //套餐选择类型 + }, + shopQueryPage: { + m: 'Machine/getShop', + }, + attr: null, + //商品库存 + showshareitem: null, + showshareindex: null, + //打印年月日 + printingPickerValueArray: [], + printingpickerValueDefault: [0], + //加载全部交易类型数据 + maxnumber: 12, + maxlength: 2, + be_child: 0, //子代理 + Userres_partner_id: null, //总代理 + is_inner: null, //恢复订单打印 + print_type: 0, //默认0标准版 1无限版 + shopList: null, //店铺列表数据 + GoodsItem: null, //货道数据 + stockData: null, //库存数据 + stockDataList: null, //库存列表数据 + inkStatusC: false, + inkStatusM: false, + inkStatusY: false, + inkStatusK: false, + inkStatusW: false, + inkStatusHas: false, + isShowPop: false, + timer: null, //定时器 + intCountTimer: 0, + clear_time: "", //上次清洗时间 + isClickClean: false, //是否点击 + // 手指原始位置 + oldMousePos: {}, + // 元素原始位置 + oldNodePos: {}, + autoCleanLeft: -40, //左位置 + autoCleanTop: -40, //下位置 + isTouchStart: false, + show_clean: 0, //为1时就显示清洗喷头的入口,为0时就不显示 + countDownTimeCount: 1, //倒计时 + countDownTime: null, //倒计时 + isAutoStartClean: false //是否自动清洗开始 + }; + }, + + methods: { + + //调转收益列表 + toLiquidationList() { + uni.navigateTo({ + url: '../mine/Liquidation?machineid=' + this.queryPage.machine_id, + }); + + }, + + //调转订单列表 + toOrderList() { + uni.navigateTo({ + url: '../mine/order?machineid=' + this.queryPage.machine_id, + }); + + }, + + touchstart(ev) { + ev.preventDefault(); + this.isTouchStart = true; + const selectDom = ev.currentTarget; + const { + pageX, + pageY + } = ev.touches[0]; // 手指位置 + const { + offsetLeft, + offsetTop + } = selectDom; // 元素位置 + // 手指原始位置 + this.oldMousePos = { + x: pageX, + y: pageY + }; + // 元素原始位置 + this.oldNodePos = { + x: offsetLeft, + y: offsetTop + }; + }, + + touchMove(ev) { + ev.preventDefault(); + const selectDom = ev.currentTarget; + // x轴偏移量 + const lefts = this.oldMousePos.x - this.oldNodePos.x; + // y轴偏移量 + const tops = this.oldMousePos.y - this.oldNodePos.y; + const { + pageX, + pageY + } = ev.touches[0]; // 手指位置 + this.autoCleanLeft = pageX - lefts; + this.autoCleanTop = pageY - tops; + }, + + touchEnd(ev) { + ev.preventDefault(); + this.isTouchStart = false; + }, + + //自定清洗 + autoCleanNozzle() { + if (this.isClickClean) { + return; + } + this.isClickClean = true; + this.$refs['cleanPrint'].setMaskClick(false); + uni.showLoading({ + title: '清洗中...', + }) + this.intCountTimer = 0; + this.countDownTimeCount = 1; + logoservice.MachineSavePartnerStock({ + m: 'Machine/clearHead', + machine_id: this.queryPage.machine_id, + }).then(result => { + this.autoClick() + }).catch(err => { + this.cleanTimeData(); + uni.showToast({ + title: err.msg, + duration: 1000, + icon: "none", + }) + }) + }, + + //清除计时器数据 + cleanTimeData() { + this.isAutoStartClean = false; + clearInterval(this.timer); + this.timer = null; + clearInterval(this.countDownTime); + this.countDownTime = null; + this.intCountTimer = 0; + this.isClickClean = false; + this.$refs['cleanPrint'].setMaskClick(true); + uni.hideLoading(); + this.$refs['cleanCountDown'].close(); + this.$refs['cleanPrint'].open(); + this.countDownTimeCount = 1; + }, + + //5秒一次定时器 + autoClick() { + this.$refs['cleanCountDown'].open(); + this.$refs['cleanPrint'].close(); + this.isAutoStartClean = true; + let that = this; + this.timer = setInterval(function() { + that.getCleanStatus(); + }, 5000); + this.countDownTime = setInterval(function() { + that.countDownTimeCount++; + }, 1000); + }, + + //获取状态值 + getCleanStatus() { + logoservice.MachineSavePartnerStock({ + m: 'Machine/getClearHeadStatus', + machine_id: this.queryPage.machine_id, + }).then(result => { + if (this.countDownTimeCount >= 60) { + this.cleanTimeData(); + uni.showToast({ + title: "清洗成功", + duration: 2000 + }) + } + let clear_status = result.clear_status.value; + if (clear_status == 0) { + this.$refs['cleanPrint'].setMaskClick(true); + if (result.clear_time) { + this.clear_time = result.clear_time; + } + this.cleanTimeData(); + uni.showToast({ + title: "清洗成功", + duration: 2000 + }) + } + }).catch(err => { + + }) + }, + + //清洗打印弹窗 + cleanPrintPop() { + this.$refs['cleanPrint'].open(); + }, + + changeCleanPrint(obj) { + this.isShowPop = obj.show; + }, + + //选中普通设备列表 + selectStockList(index, item) { + var resultList = this.stockDataList; + this.stockDataList = []; + var isDown = item.isDown; + if (isDown) { + isDown = false + } else { + isDown = true + } + resultList.forEach(itemData => { + if (itemData.id == item.id) { + itemData.isDown = isDown + } + }) + this.stockDataList = resultList; + }, + + //调转库存列表 + toStockList() { + uni.navigateTo({ + url: '../mall/stockList?id=' + this.queryPage.machine_id, + }); + }, + + //获取库存新接口 + getStockData() { + logoservice.MachineSavePartnerStock({ + m: 'Machine/getStockDetail', + machine_id: this.queryPage.machine_id, + }).then(result => { + this.stockData = result; + var max = 60; + var first = 20; + this.stockData.list.forEach((item, index) => { + item.id = index + item.isDown = false; + if (index == 0) { + item.row2 = max * item.need_stock / first; + if (item.row2 <= 0) { + item.row2 = 0; + } + first = parseFloat(item.need_stock); + if (first <= 1) { + first = 20; + } + } else { + item.row2 = max * parseFloat(item.need_stock / first) + if (item.row2 <= 0) { + item.row2 = 0; + } + } + }) + this.stockDataList = this.stockData.list + }).catch(err => { + + }) + }, + + //字符串转base64 + getStrToBase64(str) { + return Base64.encode(str); + }, + + //预览显示图片 + showPreviewImage(e, id) { + if (e == null || e == "") { + uni.showToast({ + title: '暂时没有定制二维码', + icon: 'none' + }); + return + } + var current = e + "?x-oss-process=image/watermark,text_" + this.getStrToBase64(id) + + ",g_nw,size_50,shadow_50,x_550,y_850,color_4bf25a"; //这里获取到的是一张本地的图片 + uni.previewImage({ + current: current, //需要预览的图片链接列表 + urls: [current] //当前显示图片的链接 + }) + }, + + //获取剩余量次数相差 + getPrintSurplusCount(count) { + try { + if (count >= 200) { //白色 + return 1; + } else if (count < 200 && count >= 50) { //橙色 + return 2; + } else if (count < 50) { //红色 + return 3; + } + } catch (e) { + + } + return 0; + }, + + //获取相差天数 + getDaysDifference(time) { + try { + let day = new Date(time.replace(/-/g, "/")).getTime() - new Date().getTime(); //日期转时间戳 + let dayCount = Math.floor(day / 86400000); //时间戳获取天数 + return dayCount; + } catch (e) { + + } + return 0; + }, + + //格式化时间 + dateFormat(time) { + try { + var dt = new Date(time.replace(/-/g, '/')); + var y = dt.getFullYear(); + var m = dt.getMonth() + 1; + var d = dt.getDate(); + return y + '年' + m + '月' + d + '日'; + } catch (e) { + // 错误处理代码片段 + } + if (time == undefined) { + return ""; + } + return time; + }, + + //调转明细页面 + packageDetail(machineId) { + let machineid = machineId; + uni.navigateTo({ + url: '../mine/PrintUseDetail?machineid=' + machineid + '&print_type=' + this.print_type + }); + }, + + Reprint(item) { + if (item.status.value == 0) { + return; + } + uni.showModal({ + title: '温馨提示', + content: '是否此订单恢复打印?', + confirmText: '确定', + confirmColor: '#ff3b32', + success: function(res) { + if (res.confirm) { + //恢复打印的接口: + logoservice.MachineStockGoodsList({ + m: 'Machine/repeatPrint', + machine_id: item.machine_id, + id: item.id, + }).then(result => { + uni.showToast({ + title: '恢复订单打印成功', + icon: 'none' + }); + item.status.value = 0 + item.status.text = "等待出料" + }).catch(err => { + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + } else if (res.cancel) { + + } + } + }); + }, + + //代理商名字 + partnername(partner_id, partner) { + var partner_name = '尚未铺设'; + if (partner) { + partner.forEach(item => { + if (item.id == partner_id) { + partner_name = item.name + } + }); + } + return partner_name + }, + + tomain() { + uni.reLaunch({ + url: "/pages/index/home" + }) + }, + + //打印年月日printing Printing + printingShowPicker(mode) { + this.$refs.printingMpvuePicker.show(); + }, + + //日期确定 + onConfirmPrinting(e) { + this.queryPage.year = null + this.queryPage.month = null + this.queryPage.date = null + if (e.value.length == 1) { + this.queryPage.year = e.value[0] + } else if (e.value.length == 2) { + let myMonth = e.value[1] + if (myMonth < 10) { + myMonth = '0' + e.value[1] //补齐 + } + this.queryPage.month = e.value[0] + '-' + myMonth + } else if (e.value.length == 3) { + let myMonth = e.value[1] + if (myMonth < 10) { + myMonth = '0' + myMonth //补齐 + } + let mydate = e.value[2] + if (mydate < 10) { + mydate = '0' + e.value[2] //补齐 + } + this.queryPage.date = e.value[0] + '-' + myMonth + '-' + mydate + } + //数据加载状态处理 false + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + this.LoupanList = [] + this.queryPage.page = 1; + this.queryPage.total = 0; + this.loadGoodsList(Enums.DATA_DIRECTION.UP); + }, + + //打开类型 + togglePopup() { + this.$nextTick(() => { + this.$refs['printingShowshare'].open() + }) + this.getGoodsAttrList() + }, + + Printingcancel(type) { + this.$refs['printingShowshare'].close() + }, + + selectMonth(item) { + if (item.type == -12) { + this.attr = "全部打印类型"; + this.queryPage.is_excess = null; + } else { + this.attr = item.goods_name ? item.goods_name : null + this.queryPage.is_excess = item.type + } + this.$refs['printingShowshare'].close(); + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + this.queryPage.page = 1; + this.queryPage.total = 0; + this.LoupanList = [] + this.loadGoodsList(Enums.DATA_DIRECTION.UP); + }, + + //取消 + cancel(type) { + this.$refs['showshareinput'].close() + }, + + //更换弹框 + showshareclick(item, index) { + if (this.$base.Userres.be_child == 1) return; + if (this.list.used_applets == '3') { + this.maxnumber = 12 + this.maxlength = 2 + } + if (this.list.used_applets == '4') { + this.maxnumber = 7 + this.maxlength = 1 + } + let itema = JSON.stringify(item) + let itemb = JSON.parse(itema); + this.showshareitem = itemb; + this.showshareindex = index; + this.$nextTick(() => { + this.$refs['showshareinput'].open() + }) + }, + + change(e) { + + }, + + //库存数量输入 + StockCountInput(e) { + this.isOnclickItem = true; + var that = this; + setTimeout(function() { + that.isOnclickItem = false; + }, 1000) //延迟时间 这里是2秒 + }, + + inputVal(item, index) { + if (this.list.used_applets == '3') { + this.maxnumber = 12 + this.maxlength = 2 + } + if (this.list.used_applets == '4') { + this.maxnumber = 7 + this.maxlength = 1 + } + let StcokListsnumber = item.total_stock + if (item.stock > this.maxnumber) { + uni.showToast({ + title: '最大只能输入' + this.maxnumber + '个', + icon: 'none', + }); + item.stock = StcokListsnumber > this.maxnumber ? this.maxnumber : StcokListsnumber; + return false; + } + }, + + //获取输入框字符串 + diseaseNameInput(e) { + this.loadStockGoodsList(e.detail.value) + }, + + //pop选中商品 + selectGood(item) { + this.$refs["showshare"].close(); + var that = this; + let index; + if (this.selectItem != null) { + that.StcokList.forEach((items, indexNumber) => { + if (items.id == this.selectItem.id) { + index = indexNumber; + } + }); + } + uni.showModal({ + title: '确认', + content: '是否关联当前商品?', + confirmText: '确定', + confirmColor: '#ff3b32', + success: function(res) { + if (res.confirm) { + if (that.list.used_applets == '3') { + that.StcokList[index].stock = item.stock > 12 ? 12 : item.stock; + } + if (that.list.used_applets == '4') { + that.StcokList[index].stock = item.stock > 7 ? 7 : item.stock; + } + that.StcokList[index].title = item.title; //name + that.StcokList[index].name = item.name; + that.StcokList[index].front_image = item.front_image; + that.StcokList[index].goods_id = item.goods_id; + that.StcokList[index].dict_id = item.dict_id; + that.StcokList[index].total_stock = item.stock; + that.StcokList[index].isShowPullButtom = false; + that.confirmChangeChannel(that.StcokList[index]) + } + } + }); + }, + + //确认更换货道 + confirmChangeChannel(item) { + logoservice.MachineSavePartnerStock({ + m: 'Machine/saveStock', + id: item.id, + machine_id: this.queryPage.machine_id, + goods_id: item.goods_id, + goods_size: item.goods_size, + stock: item.stock, + dict_id: item.dict_id + }).then(result => { + uni.hideLoading(); + uni.showToast({ + title: "更换成功", + icon: 'none' + }); + }).catch(err => { + uni.hideLoading(); + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + this.StcokList = [] + this.queryPage.page = 1; + this.queryPage.total = 0; + this.loadStockList(Enums.DATA_DIRECTION.UP); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + }, + + //下架功能 + shelvesGood(item, index) { + if (this.$base.Userres.be_child == 1) return; + var _this = this + uni.showModal({ + title: '确认', + content: '确认当前商品下架吗?', + confirmText: '确定', + confirmColor: '#ff3b32', + success: function(res) { + if (res.confirm) { + console.log(item.goods_id) + if (item.goods_id == 0) { + uni.showToast({ + title: "还没绑定商品不能下架", + icon: 'none' + }); + _this.StcokList[index].isShowPullButtom = false; + _this.SortNumber++; + _this.StcokList[index].SortNumber = _this.SortNumber; + this.setData({ + StcokList: _this.StcokList + }) + } else { + uni.showLoading({ + title: '正在加载中...' + }) + logoservice.MachineSavePartnerStock({ + m: 'Machine/saveStock', + id: item.id, + machine_id: _this.queryPage.machine_id, + goods_id: item.goods_id, + goods_size: item.goods_size, + stock: item.stock, + dict_id: item.dict_id, + type: "off", + }).then(result => { + console.log(result) + uni.hideLoading(); + uni.showToast({ + title: "下架成功", + icon: 'none' + }); + _this.dataLoadState.pullDownRefresh = false; + _this.dataLoadState.reachBottom = false; + _this.StcokList = [] + _this.queryPage.page = 1; + _this.queryPage.total = 0; + _this.loadStockList(Enums.DATA_DIRECTION.UP); + }).catch(err => { + _this.dataLoadState.pullDownRefresh = false; + _this.dataLoadState.reachBottom = false; + _this.StcokList = [] + _this.queryPage.page = 1; + _this.queryPage.total = 0; + _this.loadStockList(Enums.DATA_DIRECTION.UP); + uni.hideLoading(); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + } + } else if (res.cancel) { + + } + } + }); + }, + + //更换弹框 + toChangePop(item) { + if (this.$base.Userres.be_child == 1) return; + this.selectItem = item; + this.$nextTick(() => { + this.$refs['showshare'].open() + this.loadStockGoodsList(""); + }) + }, + + //显示下面选择按钮 + showPullButton(item, index) { + if (this.isOnclickItem == false) { + var that = this; + if (item.isShowPullButtom) { + that.StcokList[index].isShowPullButtom = false; + } else { + that.StcokList[index].isShowPullButtom = true; + } + this.SortNumber++; + that.StcokList[index].SortNumber = this.SortNumber; + this.setData({ + StcokList: that.StcokList + }) + } + }, + + //修改货道 + changeChannel(item, index) { + this.$refs["showshareinput"].close(); + this.$refs["showshare"].close(); + var _this = this + _this.isOnclickItem = true; + setTimeout(function() { + _this.isOnclickItem = false; + }, 1000) //延迟时间 这里是1秒 + let jsonLists = JSON.parse(_this.StcokLists); + uni.showModal({ + title: '确认', + content: '确认当前商品货道调整吗?', + confirmText: '确定', + confirmColor: '#ff3b32', + success: function(res) { + if (res.confirm) { + uni.showLoading({ + title: '正在加载中...' + }) + logoservice.MachineSavePartnerStock({ + m: 'Machine/saveStock', + id: item.id, + machine_id: _this.queryPage.machine_id, + goods_id: item.goods_id, + goods_size: item.goods_size, + stock: item.stock, + dict_id: item.dict_id + }).then(result => { + uni.hideLoading(); + uni.showToast({ + title: "修改成功", + icon: 'none' + }); + _this.StcokList[index].stock = item.stock; + }).catch(err => { + uni.hideLoading(); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + } else if (res.cancel) { + + } + } + }); + }, + + //获取底部弹框数据 + loadStockGoodsList(goods_name) { + logoservice.MachineStockGoodsList({ + m: 'Machine/getStockGoodsList', + machine_id: this.queryPage.machine_id, + goods_name: goods_name, + }).then(result => { + this.GoodsItem = result; + uni.hideLoading(); + }).catch(err => { + uni.hideLoading(); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + }, + + previewImageOne(item) { + var current = e; //这里获取到的是一张本地的图片 + }, + + setData(obj) { + let that = this; + let keys = []; + let val, data; + Object.keys(obj).forEach(function(key) { + keys = key.split('.'); + val = obj[key]; + data = that.$data; + keys.forEach(function(key2, index) { + if (index + 1 == keys.length) { + that.$set(data, key2, val); + } else { + if (!data[key2]) { + that.$set(data, key2, {}); + } + } + data = data[key2]; + }) + }); + }, + + reprint(e, index) { + //console.log(e) + //console.log(index) + }, + + chooseImage: async function() { + if (this.$base.Userres.be_child == 1) return; + var _this = this + uni.chooseImage({ + sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有 + sourceType: ['camera', 'album'], //从相册选择 + count: 1, + success: (res) => { + let tempFilePaths = res.tempFilePaths; + uni.showLoading({ + title: '图片正在上传...' + }) + uni.uploadFile({ + url: 'https://tprint.refinecolor.com/partnerapplets/index', + filePath: tempFilePaths[0], + method: 'POST', + name: 'file', + header: { + 'content-type': 'multipart/form-data' + }, + formData: { + m: 'Upload/upload' + }, //请求额外的form data + success: function(res) { + logoservice.MachinesaveCover({ + m: 'Machine/saveCover', + machine_id: _this.queryPage.machine_id, + cover: JSON.parse(res.data).data.url + }).then(result => { + uni.hideLoading(); + uni.showToast({ + title: '上传成功', + icon: 'none', + duration: 3000 + }) + _this.listdetail() + }).catch(err => { + uni.hideLoading(); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + }, + fail: function(res) { + console.log(res); + uni.hideLoading(); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + } + }) + } + }) + }, + + //预览图片 + previewImage(imgs, list) { + let listattr = [] + list.forEach(item => { + listattr.push(item.works_image) + }) + var current = imgs.works_image; //这里获取到的是一张本地的图片 + wx.previewImage({ + current: current, // 当前显示图片的http链接 + urls: listattr // 需要预览的图片http链接列表 + }) + }, + + datatimeLimited(time) { + return new Date(time.replace(/-/g, "/"))._format('HH:mm:ss'); + }, + + category(id) { + var dataname = ''; + if (this.shopList) { + this.shopList.forEach(item => { + if (item.id == id) { + dataname = item.short_name + } + }); + } + return dataname + }, + + categoryaddress(address) { + var dataaddress = ''; + if (this.shopList) { + this.shopList.forEach(item => { + if (item.id == address) { + dataaddress = item.address.replace('<br/>', ''); + } + }); + } + return dataaddress + }, + + //店铺 + showPicker(item) { + if (this.$base.Userres.be_child == 1) return; + this.pickerValueArray = this.shopList + this.pickerValueArray.filter(item => { + item.label = item.short_name + item.value = item.id + }); + this.$refs.mpvuePicker.show(); + }, + + //确定 + onConfirm(e) { + uni.showLoading({ + title: '正在关联中...' + }) + logoservice.Machinelistdetail({ + m: 'Machine/bindShop', + machine_id: this.queryPage.machine_id, + shop_id: e.value[0] + }).then(result => { + uni.hideLoading(); + uni.showToast({ + title: '关联店铺成功', + icon: 'none' + }); + this.listdetail() + }).catch(err => { + uni.hideLoading(); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + }, + + onChange(e) { + + }, + + onCancel(e) { + + }, + + profit() { + uni.navigateTo({ + url: '../mall/eq-profit?machineid=' + this.list.id, + }); + }, + + toorder() { + uni.navigateTo({ + url: '../mine/order?machineid=' + this.list.id, + }); + }, + + tapTab(tab) { + this.currentTab = tab; + if (this.currentTab.code == 0) { + this.listdetail() + } + if (this.currentTab.code == 1) { + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + this.LoupanList = [] + this.queryPage.page = 1; + this.queryPage.total = 0; + this.loadGoodsList(Enums.DATA_DIRECTION.UP); + } + if (this.currentTab.code == 2) { + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + this.StcokList = [] + this.queryPage.page = 1; + this.queryPage.total = 0; + this.getStockData(); + } + }, + + //设备挂起 + onSefaultStatus(e) { + this.list.flag.value = e.detail.value ? 'N' : 'Y'; + if (e.detail.value == true) { + uni.showLoading({ + title: '设备挂起中...' + }) + } else { + uni.showLoading({ + title: '设备恢复中...' + }) + } + logoservice.Machinestatus({ + m: 'Machine/status', + machine_id: this.queryPage.machine_id + }).then(result => { + uni.hideLoading(); + if (e.detail.value == true) { + uni.showToast({ + title: '挂起成功' + }) + } else { + uni.showToast({ + title: '恢复成功' + }) + } + }).catch(err => { + uni.hideLoading(); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + if (this.list.flag.value == 'N') { + this.list.flag.value = 'Y' + } else if (this.list.flag.value == 'Y') { + this.list.flag.value = 'N' + } + }) + }, + + //设备列表详情 + listdetail() { + uni.showLoading({ + title: '正在加载中...' + }); + logoservice.Machinelistdetail({ + m: 'Machine/list', + machine_id: this.queryPage.machine_id + }).then(result => { + this.long = true + uni.stopPullDownRefresh(); + uni.hideLoading(); + if (result[0] != undefined) { + this.list = result[0] + if (this.list.show_clean) { + this.show_clean = this.list.show_clean + } + if (this.list.clear_time) { + this.clear_time = this.list.clear_time + } + if (this.list.edition != null && this.list.edition.mark == 'standard') { + this.print_type = 0; + } else if (this.list.edition != null && this.list.edition.mark == 'unlimited') { + this.print_type = 1; + } + let ink = this.list.ink; + if (ink.length >= 6) { + this.inkStatusC = ink.substring(0, 1) == 0 ? true : false; + this.inkStatusM = ink.substring(1, 2) == 0 ? true : false; + this.inkStatusY = ink.substring(2, 3) == 0 ? true : false; + this.inkStatusK = ink.substring(3, 4) == 0 ? true : false; + this.inkStatusW = ink.substring(4, 5) == 0 ? true : false; + this.inkStatusHas = ink.substring(5, 6) == 0 ? true : false; + } + this.list.default_package.create_date = this.dateFormat(this.list.default_package + .expire_date); + if (this.list.machine_category_id == 63) { + this.tabBars = [{ + code: 0, + name: '机器' + }, + { + code: 1, + name: '打印' + }, + { + code: 2, + name: '库存' + }, + ], + this.list.isSinglePlatep = false; + } + } + }).catch(err => { + uni.hideLoading(); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + }, + + //设备打印信息 加载数据 + loadGoodsList(direction) { + if (this.dataLoadState.pullDownRefresh || this.dataLoadState.reachBottom) return; + uni.showLoading({ + title: '正在加载中...' + }) + this.dataLoadState.pullDownRefresh = direction === Enums.DATA_DIRECTION.UP; + this.dataLoadState.reachBottom = direction === Enums.DATA_DIRECTION.DOWN; + if (this.dataLoadState.reachBottom) { + if (Math.ceil(this.queryPage.total / this.queryPage.per_page) < this.queryPage.page) { + return setTimeout(() => { + uni.showToast({ + title: '没有更多数据了!', + icon: 'none' + }); + }, 500); + } + } + logoservice.Machinelist(this.queryPage).then(result => { + this.long = true + let queryList = result.data.data + //下拉更新时,查询结果集 + //触底更新时,当前列表+查询结果集 + let newList = this.LoupanList.concat(queryList) + this.LoupanList = newList + //分页对象处理 + this.queryPage.total = result.data.total; + this.queryPage.per_page = result.data.per_page; + //停止当前页面下拉刷新 + if (this.dataLoadState.pullDownRefresh) uni.stopPullDownRefresh(); + //数据加载状态处理 false + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + uni.hideLoading(); + }).catch(err => { + //停止当前页面下拉刷新 + if (this.dataLoadState.pullDownRefresh) uni.stopPullDownRefresh(); + //数据加载状态处理 false + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + uni.hideLoading(); + }); + }, + + //做滚动加载使用 + loadMore() { + if (this.isTouchStart || this.currentTab.code == 0) { + return; + } + if (Math.ceil(this.queryPage.total / this.queryPage.per_page) < this.queryPage.page) { + return setTimeout(() => { + uni.showToast({ + title: '没有更多数据了!', + icon: 'none' + }); + }, 500); + } + this.queryPage.page = this.queryPage.page + 1; + if (this.currentTab.code == 1) { + this.loadGoodsList(Enums.DATA_DIRECTION.DOWN); + } + if (this.currentTab.code == 2) { + this.loadStockList(Enums.DATA_DIRECTION.DOWN) + } + }, + + //获取日期 + getToday() { + let myDate = new Date(); + let myMonth = myDate.getMonth() + 1; + if (myMonth < 10) { + myMonth = '0' + myMonth; //补齐 + } + let mydate = myDate.getDate(); + if (myDate.getDate() < 10) { + mydate = '0' + myDate.getDate(); //补齐 + } + this.queryPage.date = myDate.getFullYear() + '-' + myMonth + '-' + mydate; + }, + + //获取月份 + getMonth() { + let myDate = new Date(); + let myMonth = myDate.getMonth() + 1; + if (myMonth < 10) { + myMonth = '0' + myMonth; //补齐 + } + this.queryPage.month = myDate.getFullYear() + '-' + myMonth; + }, + + //获取店铺数据 + machineGetShopList() { + logoservice.MachineGetShop(this.shopQueryPage).then(result => { + if (result != null && result != undefined) { + this.shopList = result; + } + }).catch(err => { + + }); + }, + + //goodsItem加载全部交易类型数据 + getGoodsAttrList() { + logoservice.MoneystatementList({ + m: 'Machine/printRecord', + machine_id: this.queryPage.machine_id, + sub: 1 + }).then(result => { + + }).catch(res => { + uni.showToast({ + title: res.msg ? res.msg : '未查到交易类型选择', + icon: 'none' + }); + }); + }, + }, + + //下拉加载 + onPullDownRefresh() { + if (this.isTouchStart) { + return; + } + if (this.currentTab.code == 0) { + this.listdetail() + } + if (this.currentTab.code == 1) { + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + this.queryPage.page = 1; + this.queryPage.total = 0; + this.LoupanList = [] + this.loadGoodsList(Enums.DATA_DIRECTION.UP); + } + if (this.currentTab.code == 2) { + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + this.queryPage.page = 1; + this.queryPage.total = 0; + this.StcokList = [] + this.loadStockList(Enums.DATA_DIRECTION.UP); + } + uni.stopPullDownRefresh(); + }, + + //上拉加载 + onReachBottom() { + if (this.currentTab.code == 0 || this.isTouchStart) { + return; + } + if (this.LoupanList.length < 6) { + return setTimeout(() => { + uni.showToast({ + title: '没有更多数据了!', + icon: 'none' + }); + }, 500); + } + this.queryPage.page = this.queryPage.page + 1; + if (this.currentTab.code == 1) { + this.loadGoodsList(Enums.DATA_DIRECTION.DOWN) + } + }, + + onLoad(options) { + //设置时间 + let that = this; + uni.getSystemInfo({ + success(res) { + that.autoCleanLeft = res.windowWidth - 100; + that.autoCleanTop = res.windowHeight - 180; + } + }); + this.getMonth(); + this.printingPickerValueArray = ['month']; + this.queryPage.machine_id = options.id + uni.setNavigationBarTitle({ + title: this.queryPage.machine_id + }) + uni.login({ + provider: 'weixin', + success: (res) => { + logoservice.login({ + m: 'Init/init', + code: res.code + }).then(result => { + that.$base.Userres = result //记录用户登录信息 + that.Userres_partner_id = that.$base.Userres.partner_id //总代理 + that.is_inner = that.$base.Userres.is_inner + logoservice.setwixinInfo(result); + + + + that.getStockData(); + that.listdetail() + }).catch(err => { + uni.navigateTo({ + url: 'login', + }); + }) + }, + fail: (err) => { + //console.error('授权登录失败:' + JSON.stringify(err)); + } + }); + }, + onShow() { + this.isTouchStart = false; + if (this.$base != null && this.$base.Userres != null) { + this.be_child = this.$base.Userres.be_child //子代理 + } + } + }; +</script> + +<style lang="scss"> + .eq-detail-score { + padding: 40upx 0; + width: 100%; + height: 210upx; + margin: 0upx auto; + background: #43CF7C; + border-radius: 20upx; + display: flex; + align-items: center; + font-size: 26upx; + color: #fff; + } + + .green { + background-color: #4FB36B !important; + color: #FFFFFF; + } + + /*无数据 */ + .noData { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + } + + .noData_img { + width: 260upx; + height: 260upx; + display: block; + margin: 0upx auto 102upx; + } + + .noData_title { + text-align: center; + font-size: 36upx; + } + + .noData_text { + margin-top: 35upx; + font-size: 30upx; + font-weight: 400; + } + + .noData_but { + width: 230upx; + height: 70upx; + line-height: 70upx; + text-align: center; + color: #F56364; + margin: 140upx auto 0; + border: 1upx solid #F56364; + border-radius: 35upx; + } + + /* 去除button默认样式 */ + button::after { + border: none; + } + + button { + background-color: transparent; + padding-left: 0; + padding-right: 0; + line-height: inherit; + } + + .lang-open { + transform: rotate(90deg); + transition: transform 0.5s; + } + + .lang-close { + transform: rotateY(0deg); + transition: transform 0.5s; + } + + //2020-11-17 + .content-open { + height: 90upx; + overflow: hidden; + transition: all 0.4s cubic-bezier(0.25, 1.0, 0.25, 1.0); + } + + .content-close { + height: 0; + transition: all 0.4s cubic-bezier(0.25, 1.0, 0.25, 1.0); + } + + .item-open { + height: 40upx; + transition: all 0.4s cubic-bezier(0.25, 1.0, 0.25, 1.0); + } + + .item-close { + opacity: 0; + height: 0; + } + + /*输入框弹框显示 */ + .weui-search-bar { + position: relative; + padding: 8upx 10upx; + display: flex; + height: 135upx; + background: #FFFFFF; + align-items: center; + } + + .weui-search-bar_form { + width: 100%; + border-radius: 50upx; + background: #F6F6F6; + } + + .weui-search-bar_input { + height: 80upx; + line-height: 80upx; + font-size: 25upx; + padding-left: 24upx; + } + + /* 底部弹框显示 */ + .uni-pop_show { + display: flex; + flex-direction: column; + } + + .uni-calendar-item--isDay-text.data-v-09f1e40c { + color: #5CE6B5 !important; //5CE6B5 + } + + .uni-calendar-item--isDay.data-v-09f1e40c { + background: #5CE6B5 !important; + color: #fff !important; + } + + .uni-calendar-item--checked.data-v-09f1e40c { + background: #5CE6B5 !important; + color: #fff !important; + } + + .uni-numbox__value { + width: 120upx !important; + } + + page { + width: 100%; + height: 100%; + background: #F5F5F5; + } + + .eq_list_button { + display: flex; + flex-direction: row; + line-height: 60upx; + padding-bottom: 20upx; + } + + .eq_list_button_ul { + flex: 1; + } + + .eq_list_button_li { + margin: auto; + font-size: 24upx; + color: #FFFFFF; + width: 150upx; + font-weight: bold; + text-align: center; + line-height: 60upx; + height: 60upx; + background-color: #5CE6B6; + } + + .uni-swiper-tab { + border-bottom: 1upx solid #F5F5F5; + } + + .clean-bt { + border-radius: 50%; + width: 200upx; + height: 200upx; + bottom: 160upx; + right: 20upx; + position: fixed; + font-size: 27upx; + text-align: center; + line-height: 130upx; + z-index: 99991; + justify-content: center; + align-items: center; + } + + .order { + width: 100%; + height: 100%; + + .uni-tab-bar { + height: auto !important; + + .uni-swiper-tab { + position: fixed; + top: var(--window-top); + z-index: 999; + width: 100%; + line-height: 85upx; + height: 85upx; + + .swiper-tab-list { + width: calc(100% / 3); + font-size: 30upx; + } + } + + .active { + color: #43CF7C; + } + } + + .way-list { + padding-top: 20upx; + border-radius: 10upx; + margin: 30upx; + padding: 30upx; + + .topBox { + width: calc(100% - 60upx); + margin-left: 30upx; + margin-top: 15upx; + justify-content: center; + } + + .topLittleBOX-1 { + font-size: 26upx; + width: 120upx; + color: #333; + overflow: text-align; + } + + .topLittleBOX-2 { + padding-left: 20upx; + padding-top: auto; + padding-bottom: auto; + display: flex; + vertical-align: middle; + flex-direction: row; + align-items: center; + width: calc(100% - 120upx); + position: relative; + } + + .row-1 { + height: 30upx; + background-color: #43CF7C; + border-radius: 20upx; + width: 0upx; + transition: width 1.5s linear; + } + + .rowText { + margin-left: 10upx; + font-size: 26upx; + color: #333; + float: right; + } + + .way-item { + background: #FFFFFF; + border-radius: 10upx; + margin-bottom: 20upx; + } + + .way { + height: 120upx; + min-height: 90upx; + display: flex; + align-items: center; + font-size: 28upx; + + .text { + width: 250upx; + padding-left: 20upx; + } + + .value { + width: calc(100% - 280upx); + display: flex; + + .prick { + width: calc(100% - 40upx); + } + + .fa-angle-right { + width: 40upx; + font-size: 50upx; + } + } + } + } + + .content { + padding-top: 100upx; + + .order-list { + min-height: 350upx; + //width: 100%; + margin-right: 5upx; + width: calc(100% - 5upx); + border-radius: 10upx; + + .item { + min-height: 35upx; + display: flex; + margin-left: 20upx; + align-items: center; + font-size: 28upx; + + .text { + width: 250upx; + /*padding-left: 25upx; */ + color: #353535; + } + + .value { + width: calc(100% - 280upx); + display: flex; + + .prick { + width: calc(100% - 40upx); + } + + .fa-angle-right { + width: 40upx; + font-size: 50upx; + } + } + } + } + } + } + + .print-score { + width: 100%; + height: 280upx; + background: #43CF7C; + border-radius: 20upx; + display: flex; + align-items: center; + font-size: 26upx; + color: #fff; + + .print { + width: 100%; + + .text { + line-height: 50upx; + color: #fff; + } + } + } + + .list-clean { + height: 80upx; + background: #FFFFFF; + padding-left: 20upx; + padding-right: 23upx; + margin-top: 10upx; + border-radius: 15upx; + margin-left: 20upx; + margin-right: 15upx; + padding-top: 18upx + } +</style> \ No newline at end of file diff --git a/pages/mall/maintenance-history.vue b/pages/mall/maintenance-history.vue new file mode 100644 index 0000000..db8b775 --- /dev/null +++ b/pages/mall/maintenance-history.vue @@ -0,0 +1,855 @@ +<template> + <view class="order full-height full-width"> + + <view class="uni-tab-bar full-width"> + + <view scroll-y @scrolltolower="loadMore()" class="full-width content" + style="margin-bottom: 20upx; overflow: auto; width: 100%;height: 100%; background: #fff;"> + + <view class="order-list" v-if="list"> + <view class="item-new-list"> + <view class="item full-width"> + <label class="text content-color">设备编号</label> + <label class="value content-color"> + <text style="text-align: right;" class="full-width">{{queryPage.machine_id}}</text> + </label> + </view> + </view> + + <view class="item-new-list"> + <view class="item full-width"> + <label class="text content-color">出厂时间</label> + <label class="value content-color"> + <text style="text-align: right;" class="full-width">{{list.create_time}}</text> + </label> + </view> + + <view class="item full-width" @click="cleanNozzleHistory()"> + <label class="text content-color">保障剩余时间</label> + <label class="value content-color"> + <view style="text-align: right;line-height: 50upx;" class="full-width"> + {{list.safeguard_time}}天 + </view> + </label> + </view> + </view> + + <view style="margin-top: 30upx; + border-radius: 20upx; + width: calc(100% - 60upx); + background: #fff; + margin: 0upx 30upx 10upx 30upx; + border-radius: 20upx; + box-shadow: 0 0 10upx 10upx #F5F5F5;" @click.stop="showPreviewImage(urlImage)"> + <image show-menu-by-longpress="true" :src="urlImage" style="width: 300upx;margin: auto; display: block;" mode="aspectFit"> + </image> + </view> + </view> + </view> + + <view class="item-new-list-text" style="margin-top: 0upx;">通过扫描二维码、或点击咨询按钮,即可联系您的专属售后服务。</view> + + <button class="save_bt" @click="goCustomer()">咨询</button> + + </view> + </view> +</template> + +<script> + import uniIcon from '@/components/uni-icon/uni-icon.vue'; + import uniPopup from '../index/common/uni-popup/uni-popup.vue'; + import Enums from '@/util/Enums'; + import foot from '../../components/foot.vue'; + import mpvuePicker from '../../components/mpvue-picker/mpvuePicker.vue'; + import mpvuePickernew from '../../components/mpvue-picker/mpvuePickernew.vue'; + import logoservice from '@/service/logoservice.js'; + let Base64 = require('js-base64').Base64; + export default { + components: { + uniPopup, + uniIcon, + foot, + mpvuePicker, + mpvuePickernew + }, + computed: { + + }, + data() { + return { + long: false, + isSinglePlatep: true, //是否单机版 或者 配送版 + isShowPullButtom: false, //false不显示true显示 + isOnclickItem: false, //是否点击item + numberlist: [], + LoupanList: [], + SortNumber: 1, + StcokList: [], //设备库存列表 + StcokLists: [], + list: null, + getStockerCount: "", //设置输入个数 + selectItem: null, + mode: 'selector', + pickerValueArray: [], + pickerValueDefault: [0], + type: 'bottom', + dataLoadState: { + pullDownRefresh: false, + reachBottom: false + }, + queryPage: { + m: 'Machine/printRecord', + machine_id: null, + page: 1, + per_page: 20, + total: 0, + date: null, //日 + month: null, //月 + year: null, //日 + is_excess: null, //套餐选择类型 + }, + shopQueryPage: { + m: 'Machine/getShop', + }, + attr: null, + isShowPop: false, + timer: null, //定时器 + intCountTimer: 0, + clear_time: "", //上次清洗时间 + isClickClean: false, //是否点击 + oldMousePos: {}, + oldNodePos: {}, + autoCleanLeft: -40, //左位置 + autoCleanTop: -40, //下位置 + isTouchStart: false, + show_clean: 0, //为1时就显示清洗喷头的入口,为0时就不显示 + countDownTimeCount: 1, //倒计时 + countDownTime: null, //倒计时 + isAutoStartClean: false, //是否自动清洗开始 + shop_id: null, + urlImage: " https://img.colorpark.cn/back/169819716165386ea9a0ef9.png" + }; + }, + + methods: { + + + + //预览显示图片 + showPreviewImage(e, id) { + if (e == null || e == "") { + uni.showToast({ + title: '暂时没有定制二维码', + icon: 'none' + }); + return + } + var current = e + "?x-oss-process=image/watermark,text_" + this.getStrToBase64(id) + + ",g_nw,size_50,shadow_50,x_550,y_850,color_4bf25a"; //这里获取到的是一张本地的图片 + uni.previewImage({ + current: current, //需要预览的图片链接列表 + urls: [current] //当前显示图片的链接 + }) + }, + + + goCustomer() { + wx.openCustomerServiceChat({ + corpId: 'wwa5849fc2f69d8e53', + //showMessageCard: true, + extInfo: { + url: 'https://work.weixin.qq.com/kfid/kfcc68d63fbdbcc9644' + }, + success: (e) => { + console.log('e', e) + }, + fail: (err) => { + console.log('err', err) + } + }) + }, + + //清洗历史记录 + cleanNozzleHistory() { + uni.navigateTo({ + url: "/pages/mall/clean-nozzle-history?machineid=" + this.queryPage.machine_id + }) + }, + + //添加店铺 + addShop() { + uni.navigateTo({ + url: "/pages/store/shopdetails" + }) + }, + + //保存店铺 + saveShop() { + if (this.shop_id == "" || this.shop_id == null) { + uni.showToast({ + title: '还没关联店铺', + icon: 'none' + }); + return + } + uni.showLoading({ + title: '正在关联中...' + }) + logoservice.Machinelistdetail({ + m: 'Machine/bindShop', + machine_id: this.queryPage.machine_id, + shop_id: this.shop_id + }).then(result => { + uni.hideLoading(); + uni.showToast({ + title: '关联店铺成功', + icon: 'none' + }); + //this.listdetail() + }).catch(err => { + uni.hideLoading(); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + }, + + //获取店铺名称 + category(id) { + var dataname = ''; + if (this.shopList) { + this.shopList.forEach(item => { + if (item.id == id) { + dataname = item.short_name + } + }); + } + return dataname + }, + + //调转收益列表 + toLiquidationList() { + uni.navigateTo({ + url: '../mine/Liquidation?machineid=' + this.queryPage.machine_id, + }); + }, + + //字符串转base64 + getStrToBase64(str) { + return Base64.encode(str); + }, + + //取消 + cancel(type) { + this.$refs['showshareinput'].close() + }, + + //获取输入框字符串 + diseaseNameInput(e) { + this.loadStockGoodsList(e.detail.value) + }, + + //更换弹框 + toChangePop(item) { + if (this.$base.Userres.be_child == 1) return; + this.selectItem = item; + this.$nextTick(() => { + this.$refs['showshare'].open() + this.loadStockGoodsList(""); + }) + }, + + previewImageOne(item) { + var current = e; //这里获取到的是一张本地的图片 + }, + + setData(obj) { + let that = this; + let keys = []; + let val, data; + Object.keys(obj).forEach(function(key) { + keys = key.split('.'); + val = obj[key]; + data = that.$data; + keys.forEach(function(key2, index) { + if (index + 1 == keys.length) { + that.$set(data, key2, val); + } else { + if (!data[key2]) { + that.$set(data, key2, {}); + } + } + data = data[key2]; + }) + }); + }, + + + + //确定 + onConfirm(e) { + this.shop_id = e.value[0]; + }, + + profit() { + uni.navigateTo({ + url: '../mall/eq-profit?machineid=' + this.list.id, + }); + }, + + toorder() { + uni.navigateTo({ + url: '../mine/order?machineid=' + this.list.id, + }); + }, + + listdetail() { + uni.showLoading({ + title: '正在加载中...' + }); + logoservice.Machinelistdetail({ + m: 'Machine/list', + machine_id: this.queryPage.machine_id + }).then(result => { + this.long = true + uni.stopPullDownRefresh(); + uni.hideLoading(); + if (result[0] != undefined) { + this.list = result[0] + this.shop_id = this.list.shop_id + } + }).catch(err => { + uni.hideLoading(); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + }, + + loadGoodsList(direction) { + if (this.dataLoadState.pullDownRefresh || this.dataLoadState.reachBottom) return; + uni.showLoading({ + title: '正在加载中...' + }) + this.dataLoadState.pullDownRefresh = direction === Enums.DATA_DIRECTION.UP; + this.dataLoadState.reachBottom = direction === Enums.DATA_DIRECTION.DOWN; + if (this.dataLoadState.reachBottom) { + if (Math.ceil(this.queryPage.total / this.queryPage.per_page) < this.queryPage.page) { + return setTimeout(() => { + uni.showToast({ + title: '没有更多数据了!', + icon: 'none' + }); + }, 500); + } + } + logoservice.Machinelist(this.queryPage).then(result => { + this.long = true + let queryList = result.data.data + //触底更新时,当前列表+查询结果集 + let newList = this.LoupanList.concat(queryList) + this.LoupanList = newList + //分页对象处理 + this.queryPage.total = result.data.total; + this.queryPage.per_page = result.data.per_page; + //停止当前页面下拉刷新 + if (this.dataLoadState.pullDownRefresh) uni.stopPullDownRefresh(); + //数据加载状态处理 false + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + uni.hideLoading(); + }).catch(err => { + //停止当前页面下拉刷新 + if (this.dataLoadState.pullDownRefresh) uni.stopPullDownRefresh(); + //数据加载状态处理 false + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + uni.hideLoading(); + }); + }, + + //获取店铺数据 + machineGetShopList() { + logoservice.MachineGetShop(this.shopQueryPage).then(result => { + if (result != null && result != undefined) { + this.shopList = result; + } + }).catch(err => { + + }); + }, + + onChange(e) { + + }, + + onCancel(e) { + + }, + + //goodsItem加载全部交易类型数据 + getGoodsAttrList() { + logoservice.MoneystatementList({ + m: 'Machine/printRecord', + machine_id: this.queryPage.machine_id, + sub: 1 + }).then(result => { + + }).catch(res => { + uni.showToast({ + title: res.msg ? res.msg : '未查到交易类型选择', + icon: 'none' + }); + }); + }, + }, + + //下拉加载 + onPullDownRefresh() { + + }, + + //上拉加载 + onReachBottom() { + + }, + + onLoad(options) { + let that = this; + this.queryPage.machine_id = options.machineid + this.listdetail(); + }, + + onShow() { + this.machineGetShopList(); + } + }; +</script> + +<style lang="scss"> + page { + width: 100%; + height: 100%; + background: #fff; + } + + .eq-detail-score { + padding: 40upx 0; + width: 100%; + height: 210upx; + margin: 0upx auto; + background: #43CF7C; + border-radius: 20upx; + display: flex; + align-items: center; + font-size: 26upx; + color: #fff; + } + + .green { + background-color: #4FB36B !important; + color: #FFFFFF; + } + + /*无数据 */ + .noData { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + } + + .noData_img { + width: 260upx; + height: 260upx; + display: block; + margin: 0upx auto 102upx; + } + + .noData_title { + text-align: center; + font-size: 36upx; + } + + .noData_text { + margin-top: 35upx; + font-size: 30upx; + font-weight: 400; + } + + .noData_but { + width: 230upx; + height: 70upx; + line-height: 70upx; + text-align: center; + color: #F56364; + margin: 140upx auto 0; + border: 1upx solid #F56364; + border-radius: 35upx; + } + + /* 去除button默认样式 */ + button::after { + border: none; + } + + button { + background-color: transparent; + padding-left: 0; + padding-right: 0; + line-height: inherit; + } + + .lang-open { + transform: rotate(90deg); + transition: transform 0.5s; + } + + .lang-close { + transform: rotateY(0deg); + transition: transform 0.5s; + } + + //2020-11-17 + .content-open { + height: 90upx; + overflow: hidden; + transition: all 0.4s cubic-bezier(0.25, 1.0, 0.25, 1.0); + } + + .content-close { + height: 0; + transition: all 0.4s cubic-bezier(0.25, 1.0, 0.25, 1.0); + } + + .item-open { + height: 40upx; + transition: all 0.4s cubic-bezier(0.25, 1.0, 0.25, 1.0); + } + + .item-close { + opacity: 0; + height: 0; + } + + /*输入框弹框显示 */ + .weui-search-bar { + position: relative; + padding: 8upx 10upx; + display: flex; + height: 135upx; + background: #FFFFFF; + align-items: center; + } + + .weui-search-bar_form { + width: 100%; + border-radius: 50upx; + background: #F6F6F6; + } + + .weui-search-bar_input { + height: 80upx; + line-height: 80upx; + font-size: 25upx; + padding-left: 24upx; + } + + /*底部弹框显示 */ + .uni-pop_show { + display: flex; + flex-direction: column; + } + + .uni-calendar-item--isDay-text.data-v-09f1e40c { + color: #5CE6B5 !important; //5CE6B5 + } + + .uni-calendar-item--isDay.data-v-09f1e40c { + background: #5CE6B5 !important; + color: #fff !important; + } + + .uni-calendar-item--checked.data-v-09f1e40c { + background: #5CE6B5 !important; + color: #fff !important; + } + + .uni-numbox__value { + width: 120upx !important; + } + + page { + width: 100%; + height: 100%; + background: #F5F5F5; + } + + .eq_list_button { + display: flex; + flex-direction: row; + line-height: 60upx; + padding-bottom: 20upx; + } + + .eq_list_button_ul { + flex: 1; + } + + .eq_list_button_li { + margin: auto; + font-size: 24upx; + color: #FFFFFF; + width: 150upx; + font-weight: bold; + text-align: center; + line-height: 60upx; + height: 60upx; + background-color: #5CE6B6; + } + + .uni-swiper-tab { + border-bottom: 1upx solid #F5F5F5; + } + + .clean-bt { + border-radius: 50%; + width: 200upx; + height: 200upx; + bottom: 160upx; + right: 20upx; + position: fixed; + font-size: 27upx; + text-align: center; + line-height: 130upx; + z-index: 99991; + justify-content: center; + align-items: center; + } + + .order { + width: 100%; + height: 100%; + background-color: #fff; + + .uni-tab-bar { + height: auto !important; + + .uni-swiper-tab { + position: fixed; + top: var(--window-top); + z-index: 999; + width: 100%; + line-height: 85upx; + height: 85upx; + + .swiper-tab-list { + width: calc(100% / 3); + font-size: 30upx; + } + } + + .active { + color: #43CF7C; + } + } + + .way-list { + margin: 0 20upx; + padding-top: 20upx; + border-radius: 10upx; + + .topBox { + width: calc(100% - 60upx); + margin-left: 30upx; + margin-top: 15upx; + justify-content: center; + } + + .topLittleBOX-1 { + font-size: 26upx; + width: 120upx; + color: #333; + overflow: text-align; + } + + .topLittleBOX-2 { + padding-left: 20upx; + padding-top: auto; + padding-bottom: auto; + display: flex; + vertical-align: middle; + flex-direction: row; + align-items: center; + width: calc(100% - 120upx); + position: relative; + } + + .row-1 { + height: 30upx; + background-color: #43CF7C; + border-radius: 20upx; + width: 0upx; + transition: width 1.5s linear; + } + + .rowText { + margin-left: 10upx; + font-size: 26upx; + color: #333; + float: right; + } + + .way-item { + background: #FFFFFF; + border-radius: 10upx; + margin-bottom: 20upx; + } + + .way { + height: 120upx; + min-height: 90upx; + display: flex; + align-items: center; + font-size: 28upx; + + .text { + width: 250upx; + padding-left: 20upx; + color: #fff; + } + + .value { + width: calc(100% - 280upx); + display: flex; + + .prick { + width: calc(100% - 40upx); + } + + .fa-angle-right { + width: 40upx; + font-size: 50upx; + } + } + } + } + + .content { + padding-top: 10upx; + + .order-list { + min-height: 350upx; + width: 100%; + border-radius: 10upx; + + .item { + min-height: 70upx; + display: flex; + align-items: center; + font-size: 26upx; + border-bottom: 1upx solid #F5F5F5; + + .text { + width: 250upx; + color: #000; + font-size: 29upx; + } + + .value { + width: calc(100% - 120upx); + display: flex; + color: #888; + margin-top: 15upx; + margin-bottom: 15upx; + + + .prick { + width: calc(100% - 35upx); + } + + .fa-angle-right { + width: 30upx; + font-size: 50upx; + } + } + } + } + } + } + + .print-score { + width: 100%; + height: 280upx; + background: #43CF7C; + border-radius: 20upx; + display: flex; + align-items: center; + font-size: 26upx; + color: #fff; + + .print { + width: 100%; + + .text { + line-height: 50upx; + color: #fff; + } + } + } + + .list-clean { + height: 80upx; + background: #FFFFFF; + padding-left: 20upx; + padding-right: 23upx; + margin-top: 10upx; + border-radius: 15upx; + margin-left: 20upx; + margin-right: 15upx; + padding-top: 18upx; + } + + .item-new-list { + padding-top: 0upx; + padding-left: 30upx; + padding-right: 25upx; + background: #fff; + margin: 0upx 30upx 25upx 30upx; + border-radius: 20upx; + box-shadow: 0 0 10upx 10upx #F5F5F5; + color: #000; + } + + .item-new-list-text { + margin: -10upx 45upx 30upx 45upx; + color: #999; + font-size: 25upx; + width: calc(100% - 90upx); + } + + .content-color { + color: #fff; + } + + .item-new-list-switch { + float: right; + zoom: 0.6; + position: absolute; + right: 80upx + } + + .save_bt { + height: 100upx; + width: calc(100% - 60upx); + margin-left: 30upx; + background: #191931; + text-align: center; + line-height: 100upx; + color: #fff; + margin-top: 100upx; + border-radius: 20upx; + } +</style> \ No newline at end of file diff --git a/pages/mall/maintenance-machine.vue b/pages/mall/maintenance-machine.vue new file mode 100644 index 0000000..bb6728d --- /dev/null +++ b/pages/mall/maintenance-machine.vue @@ -0,0 +1,1111 @@ +<template> + <view class="order full-height full-width"> + + <view class="uni-tab-bar full-width"> + + <view scroll-y @scrolltolower="loadMore()" class="full-width content" style=" + padding-bottom: 20upx; + width: 100%;height: 100%; + background: #fff;"> + + <view class="order-list" v-if="list"> + + <view class="item-new-list"> + <view class="item full-width"> + <label class="text content-color">设备编号</label> + <label class="value content-color"> + <text style="text-align: right;" class="full-width">{{queryPage.machine_id}}</text> + </label> + </view> + </view> + + <view class="item-new-list"> + <view class="item full-width"> + <label class="text content-color">出厂时间</label> + <label class="value content-color"> + <view style="text-align: right;line-height: 50upx;" class="full-width"> + {{list.create_time}} + </view> + </label> + </view> + <view class="item full-width"> + <label class="text content-color">保障剩余时间</label> + <label class="value content-color"> + <view style="text-align: right;line-height: 50upx;" class="full-width"> + {{list.safeguard_time }}天 + </view> + </label> + </view> + </view> + + <view class="item-new-list"> + + <view class="item full-width"> + <label class="text content-color">最近清洗时间</label> + <label class="value content-color"> + <view style="text-align: right;line-height: 50upx;" class="full-width"> + {{list.clear_time ? list.clear_time : "" }} + </view> + </label> + </view> + + <view class="item full-width"> + <label class="text content-color">最后开机时间</label> + <label class="value content-color"> + <view style="text-align: right;line-height: 50upx;" class="full-width"> + {{list.last_connect_time ? list.last_connect_time : "" }} + </view> + </label> + </view> + + + + <view class="item full-width"> + <label class="text content-color">墨水容量</label> + + <label class="value content-color"> + + <view style=" + display: flex; + flex-direction: row; + width: 100%;justify-content: center; min-height: 80upx;"> + + <view class="ink"> + <view class="content"> + <view class="ink-list-bc" style="border: 1upx solid #62C5F1;"> + <view v-if="inkStatusC" style=" background: #62C5F1; " class="in"> + </view> + <view v-if="!inkStatusC" style=" background: #62C5F1;height: 20upx; " + class="in"> </view> + </view> + + <text class="ink-list-bc-text">C</text> + </view> + <view class="content"> + <view class="ink-list-bc" style="border: 1upx solid #EE4FEFFF;"> + <view v-if="inkStatusM" style="background: #EE4FEFFF; " class="in"> + </view> + <view v-if="!inkStatusM" style=" background: #EE4FEFFF;height: 20upx;" + class="in"> </view> + </view> + + <text class="ink-list-bc-text">M</text> + </view> + <view class="content"> + <view class="ink-list-bc" style="border: 1upx solid #F5EC60FF;"> + <view v-if="inkStatusY" style=" background: #F5EC60FF;" class="in"> + </view> + <view v-if="!inkStatusY" style=" background: #F5EC60FF;height: 20upx;" + class="in"> </view> + </view> + <text class="ink-list-bc-text">Y</text> + </view> + <view class="content"> + <view class="ink-list-bc" style="border: 1upx solid #4B4B4B;"> + <view v-if="inkStatusK" style=" background: #4B4B4B; " class="in"> + </view> + <view v-if="!inkStatusK" style="background: #4B4B4B; height: 20upx;" + class="in"> </view> + </view> + <text class="ink-list-bc-text">K</text> + </view> + + <view class="content"> + <view class="ink-list-bc" + style="border: 1upx solid #BFBFBF; background:#BFBFBF ;"> + <view v-if="inkStatusW" style=" background: #fff; " class="in"> + </view> + <view v-if="!inkStatusW" style="background: #fff; height: 20upx;" + class="in"> </view> + </view> + <text class="ink-list-bc-text">W</text> + </view> + + <view class="content"> + <view class="ink-list-bc" + style="margin-top: 0upx;border: 1upx solid #A6A6A6; "> + <view v-if="!inkStatusHas" style="background: #A6A6A6;" class="in"> + </view> + <view v-if="inkStatusHas" style="background: #A6A6A6; height: 20upx;" + class="in"> </view> + </view> + + <text class="ink-list-bc-text">废</text> + </view> + </view> + + </view> + </label> + </view> + </view> + + <view class="item-new-list"> + <view class="item full-width" style="padding-top: 5upx;margin-top: 5upx;"> + <label class="text content-color">机器状态</label> + + <label class="value content-color" v-if="list.flag.value == 'Y'"> + <text v-if="list.status.value == 0" style="text-align:right; color: #808080;" + class="full-width">离线</text> + <text v-if="list.status.value == 1 || list.status.value == 2 " + style="text-align:right; color: #5CE6B5;" class="full-width">在线</text> + <text v-if="list.status.value == 3 || list.status.value == 4 || list.status.value == 5 " + style="text-align:right; color: #D43030;" class="full-width">故障</text> + </label> + + <label class="value content-color" v-if="list.flag.value == 'N'"> + <text style="text-align:right; color: #FF8D1A;" class="full-width">锁定</text> + </label> + + </view> + + <view class="item full-width" @click="cleanNozzle()"> + <label class="text content-color">远程清洗</label> + <label class="value content-color"> + <label class="fa fa-angle-right align-right sub-color" + style="float:right;position:absolute;right:50upx;font-size: 50upx;margin-top: -30upx;"></label> + </label> + </view> + + <view class="item full-width" @click="cleanNozzleDetection()"> + <label class="text content-color">喷嘴检测</label> + <label class="value content-color"> + <label class="fa fa-angle-right align-right sub-color" + style="float:right;position:absolute;right:50upx;font-size: 50upx;margin-top: -30upx;"></label> + </label> + </view> + + <view class="item full-width" @click="testColour()"> + <label class="text content-color">测试色块</label> + <label class="value content-color"> + <label class="fa fa-angle-right align-right sub-color" + style="float:right;position:absolute;right:50upx;font-size: 50upx;margin-top: -30upx;"></label> + </label> + </view> + + <view class="item full-width" @click="softwareUpdate()"> + <label class="text content-color">软件更新</label> + <label class="value content-color"> + <label class="fa fa-angle-right align-right sub-color" + style="float:right;position:absolute;right:50upx;font-size: 50upx;margin-top: -30upx;"></label> + </label> + </view> + </view> + + <view class="item-new-list-text">状态正常的设备,可进行远程喷嘴清洗、检测和具体的色块打印,对设备进行常规的维护操作。</view> + + <view class="item-new-list" style="margin-top: 40upx;" @click="firstInkInstallation()"> + <view class="item full-width"> + <label class="text content-color">首次装墨</label> + <label class="value content-color"> + <label class="fa fa-angle-right align-right sub-color" + style="float:right;position:absolute;right:50upx;font-size: 50upx;margin-top: -30upx;"></label> + </label> + </view> + </view> + + <view class="item-new-list-text">装墨比较消耗墨水,建议使用在喷嘴首次调试中使用</view> + + <view class="item-new-list" @click="maintenanceHistory()"> + <view class="item full-width"> + <label class="text content-color">维保历史</label> + <label class="value content-color"> + <label class="fa fa-angle-right align-right sub-color" + style="float:right;position:absolute;right:50upx;font-size: 50upx;margin-top: -30upx;"></label> + </label> + </view> + </view> + + <view class="item-new-list" style="margin-top: 40upx;" @click="exclusiveServices()"> + <view class="item full-width"> + <label class="text content-color">专属服务</label> + <label class="value content-color"> + <label class="fa fa-angle-right align-right sub-color" + style="float:right;position:absolute;right:50upx;font-size: 50upx;margin-top: -30upx;"></label> + </label> + </view> + </view> + + <view class="item-new-list" @click="maintenanceManual()"> + <view class="item full-width"> + <label class="text content-color">查看机器使用手册</label> + <label class="value content-color"> + <label class="fa fa-angle-right align-right sub-color" + style="float:right;position:absolute;right:50upx;font-size: 50upx;margin-top: -30upx;"></label> + </label> + </view> + </view> + + </view> + </view> + </view> + + </view> +</template> + +<script> + import uniIcon from '@/components/uni-icon/uni-icon.vue'; + import uniPopup from '../index/common/uni-popup/uni-popup.vue'; + import Enums from '@/util/Enums'; + import foot from '../../components/foot.vue'; + import logoservice from '@/service/logoservice.js'; + let Base64 = require('js-base64').Base64; + export default { + components: { + uniPopup, + uniIcon, + foot, + }, + computed: { + + }, + data() { + return { + long: false, + isSinglePlatep: true, + isShowPullButtom: false, + isOnclickItem: false, + numberlist: [], + LoupanList: [], + SortNumber: 1, + StcokList: [], + StcokLists: [], + list: null, + selectItem: null, + mode: 'selector', + pickerValueArray: [], + pickerValueDefault: [0], + type: 'bottom', + dataLoadState: { + pullDownRefresh: false, + reachBottom: false + }, + queryPage: { + m: 'Machine/printRecord', + machine_id: null, + page: 1, + per_page: 20, + total: 0, + date: null, + month: null, + year: null, + is_excess: null, + }, + shopQueryPage: { + m: 'Machine/getShop', + }, + attr: null, + showshareitem: null, + showshareindex: null, + printingPickerValueArray: [], + printingpickerValueDefault: [0], + maxnumber: 12, + maxlength: 2, + be_child: 0, //子代理 + Userres_partner_id: null, //总代理 + is_inner: null, //恢复订单打印 + print_type: 0, //默认0标准版 1无限版 + shopList: null, //店铺列表数据 + isShowPop: false, + stockDataList: null, //库存列表数据 + inkStatusC: false, + inkStatusM: false, + inkStatusY: false, + inkStatusK: false, + inkStatusW: false, + inkStatusHas: false + }; + }, + + methods: { + + + maintenanceManual() { + uni.showToast({ + title: '即将开放', + icon: 'none' + }); + }, + + + //维保历史 + maintenanceHistory() { + uni.showToast({ + title: '即将开放', + icon: 'none' + }); + }, + + //测试色块 + testColour() { + uni.navigateTo({ + url: "/pages/mall/test-colour?machineid=" + this.queryPage.machine_id + }) + }, + + //首次装墨 + firstInkInstallation() { + uni.navigateTo({ + url: "/pages/mall/first-ink-installation?machineid=" + this.queryPage.machine_id + }) + }, + + + //专属服务 + exclusiveServices() { + uni.navigateTo({ + url: "/pages/mall/exclusive-services?machineid=" + this.queryPage.machine_id + }) + }, + + //软件更新 + softwareUpdate() { + uni.navigateTo({ + url: "/pages/mall/software-update?machineid=" + this.queryPage.machine_id + }) + }, + + //碰嘴检测 + cleanNozzleDetection() { + uni.navigateTo({ + url: "/pages/mall/clean-nozzle-detection?machineid=" + this.queryPage.machine_id + }) + }, + + //远程清洗 + cleanNozzle() { + uni.navigateTo({ + url: '../mall/clean-nozzle?machineid=' + this.queryPage.machine_id, + }); + }, + + //取消 + cancel(type) { + this.$refs['showshareinput'].close() + }, + + //获取输入框字符串 + diseaseNameInput(e) { + this.loadStockGoodsList(e.detail.value) + }, + + //获取底部弹框数据 + loadStockGoodsList(goods_name) { + logoservice.MachineStockGoodsList({ + m: 'Machine/getStockGoodsList', + machine_id: this.queryPage.machine_id, + goods_name: goods_name, + }).then(result => { + this.GoodsItem = result; + uni.hideLoading(); + }).catch(err => { + uni.hideLoading(); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + }, + + previewImageOne(item) { + var current = e; //这里获取到的是一张本地的图片 + }, + + + onChange(e) { + + }, + + onCancel(e) { + + }, + + profit() { + uni.navigateTo({ + url: '../mall/eq-profit?machineid=' + this.list.id, + }); + }, + + toorder() { + uni.navigateTo({ + url: '../mine/order?machineid=' + this.list.id, + }); + }, + + //设备列表详情 + listdetail() { + uni.showLoading({ + title: '正在加载中...' + }); + logoservice.Machinelistdetail({ + m: 'Machine/list', + machine_id: this.queryPage.machine_id + }).then(result => { + this.long = true + uni.stopPullDownRefresh(); + uni.hideLoading(); + if (result[0] != undefined) { + this.list = result[0] + + if (this.list.show_clean) { + this.show_clean = this.list.show_clean + } + if (this.list.clear_time) { + this.clear_time = this.list.clear_time + } + if (this.list.edition != null && this.list.edition.mark == 'standard') { + this.print_type = 0; + } else if (this.list.edition != null && this.list.edition.mark == 'unlimited') { + this.print_type = 1; + } + let ink = this.list.ink; + if (ink.length >= 6) { + this.inkStatusC = ink.substring(0, 1) == 0 ? true : false; + this.inkStatusM = ink.substring(1, 2) == 0 ? true : false; + this.inkStatusY = ink.substring(2, 3) == 0 ? true : false; + this.inkStatusK = ink.substring(3, 4) == 0 ? true : false; + this.inkStatusW = ink.substring(4, 5) == 0 ? true : false; + this.inkStatusHas = ink.substring(5, 6) == 0 ? true : false; + } + + } + }).catch(err => { + uni.hideLoading(); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + }, + + //设备打印信息 加载数据 + loadGoodsList(direction) { + if (this.dataLoadState.pullDownRefresh || this.dataLoadState.reachBottom) return; + uni.showLoading({ + title: '正在加载中...' + }) + this.dataLoadState.pullDownRefresh = direction === Enums.DATA_DIRECTION.UP; + this.dataLoadState.reachBottom = direction === Enums.DATA_DIRECTION.DOWN; + if (this.dataLoadState.reachBottom) { + if (Math.ceil(this.queryPage.total / this.queryPage.per_page) < this.queryPage.page) { + return setTimeout(() => { + uni.showToast({ + title: '没有更多数据了!', + icon: 'none' + }); + }, 500); + } + } + logoservice.Machinelist(this.queryPage).then(result => { + this.long = true + let queryList = result.data.data + //触底更新时,当前列表+查询结果集 + let newList = this.LoupanList.concat(queryList) + this.LoupanList = newList + //分页对象处理 + this.queryPage.total = result.data.total; + this.queryPage.per_page = result.data.per_page; + //停止当前页面下拉刷新 + if (this.dataLoadState.pullDownRefresh) uni.stopPullDownRefresh(); + //数据加载状态处理 false + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + uni.hideLoading(); + }).catch(err => { + //停止当前页面下拉刷新 + if (this.dataLoadState.pullDownRefresh) uni.stopPullDownRefresh(); + //数据加载状态处理 false + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + uni.hideLoading(); + }); + }, + }, + + onPullDownRefresh() { + + }, + + onReachBottom() { + + }, + + onLoad(options) { + let that = this; + this.queryPage.machine_id = options.machineid + this.listdetail(); + }, + + onShow() { + + } + + }; +</script> + +<style lang="scss"> + page { + width: 100%; + height: 100%; + background: #fff; + } + + .eq-detail-score { + padding: 40upx 0; + width: 100%; + height: 210upx; + margin: 0upx auto; + background: #43CF7C; + border-radius: 20upx; + display: flex; + align-items: center; + font-size: 26upx; + color: #fff; + } + + .green { + background-color: #4FB36B !important; + color: #FFFFFF; + } + + /*无数据 */ + .noData { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + } + + .noData_img { + width: 260upx; + height: 260upx; + display: block; + margin: 0upx auto 102upx; + } + + .noData_title { + text-align: center; + font-size: 36upx; + } + + .noData_text { + margin-top: 35upx; + font-size: 30upx; + font-weight: 400; + } + + .noData_but { + width: 230upx; + height: 70upx; + line-height: 70upx; + text-align: center; + color: #F56364; + margin: 140upx auto 0; + border: 1upx solid #F56364; + border-radius: 35upx; + } + + /*去除button默认样式 */ + button::after { + border: none; + } + + button { + background-color: transparent; + padding-left: 0; + padding-right: 0; + line-height: inherit; + } + + .lang-open { + transform: rotate(90deg); + transition: transform 0.5s; + } + + .lang-close { + transform: rotateY(0deg); + transition: transform 0.5s; + } + + //2020-11-17 + .content-open { + height: 90upx; + overflow: hidden; + transition: all 0.4s cubic-bezier(0.25, 1.0, 0.25, 1.0); + } + + .content-close { + height: 0; + transition: all 0.4s cubic-bezier(0.25, 1.0, 0.25, 1.0); + } + + .item-open { + height: 40upx; + transition: all 0.4s cubic-bezier(0.25, 1.0, 0.25, 1.0); + } + + .item-close { + opacity: 0; + height: 0; + } + + /*输入框弹框显示 */ + .weui-search-bar { + position: relative; + padding: 8upx 10upx; + display: flex; + height: 135upx; + background: #FFFFFF; + align-items: center; + } + + .weui-search-bar_form { + width: 100%; + border-radius: 50upx; + background: #F6F6F6; + } + + .weui-search-bar_input { + height: 80upx; + line-height: 80upx; + font-size: 25upx; + padding-left: 24upx; + } + + /*底部弹框显示 */ + .uni-pop_show { + display: flex; + flex-direction: column; + } + + .uni-calendar-item--isDay-text.data-v-09f1e40c { + color: #5CE6B5 !important; //5CE6B5 + } + + .uni-calendar-item--isDay.data-v-09f1e40c { + background: #5CE6B5 !important; + color: #fff !important; + } + + .uni-calendar-item--checked.data-v-09f1e40c { + background: #5CE6B5 !important; + color: #fff !important; + } + + .uni-numbox__value { + width: 120upx !important; + } + + page { + width: 100%; + height: 100%; + background: #F5F5F5; + } + + .eq_list_button { + display: flex; + flex-direction: row; + line-height: 60upx; + padding-bottom: 20upx; + } + + .eq_list_button_ul { + flex: 1; + } + + .eq_list_button_li { + margin: auto; + font-size: 24upx; + color: #FFFFFF; + width: 150upx; + font-weight: bold; + text-align: center; + line-height: 60upx; + height: 60upx; + background-color: #5CE6B6; + } + + .uni-swiper-tab { + border-bottom: 1upx solid #F5F5F5; + } + + .clean-bt { + border-radius: 50%; + width: 200upx; + height: 200upx; + bottom: 160upx; + right: 20upx; + position: fixed; + font-size: 27upx; + text-align: center; + line-height: 130upx; + z-index: 99991; + justify-content: center; + align-items: center; + } + + .order { + width: 100%; + height: 100%; + background-color: #fff; + + .uni-tab-bar { + height: auto !important; + + .uni-swiper-tab { + position: fixed; + top: var(--window-top); + z-index: 999; + width: 100%; + line-height: 85upx; + height: 85upx; + + .swiper-tab-list { + width: calc(100% / 3); + font-size: 30upx; + } + } + + .active { + color: #43CF7C; + } + } + + .way-list { + margin: 0 20upx; + padding-top: 20upx; + border-radius: 10upx; + + .topBox { + width: calc(100% - 60upx); + margin-left: 30upx; + margin-top: 15upx; + justify-content: center; + } + + .topLittleBOX-1 { + font-size: 26upx; + width: 120upx; + color: #333; + overflow: text-align; + } + + .topLittleBOX-2 { + padding-left: 20upx; + padding-top: auto; + padding-bottom: auto; + display: flex; + vertical-align: middle; + flex-direction: row; + align-items: center; + width: calc(100% - 120upx); + position: relative; + } + + .row-1 { + height: 30upx; + background-color: #43CF7C; + border-radius: 20upx; + width: 0upx; + transition: width 1.5s linear; + } + + .rowText { + margin-left: 10upx; + font-size: 26upx; + color: #333; + float: right; + } + + .way-item { + background: #FFFFFF; + border-radius: 10upx; + margin-bottom: 20upx; + } + + .way { + height: 120upx; + min-height: 90upx; + display: flex; + align-items: center; + font-size: 28upx; + + .text { + width: 250upx; + padding-left: 20upx; + color: #fff; + } + + .value { + width: calc(100% - 280upx); + display: flex; + + .prick { + width: calc(100% - 40upx); + } + + .fa-angle-right { + width: 40upx; + font-size: 50upx; + } + } + } + } + + .content { + padding-top: 10upx; + + .order-list { + min-height: 350upx; + width: 100%; + border-radius: 10upx; + + .item { + min-height: 70upx; + display: flex; + align-items: center; + font-size: 26upx; + border-bottom: 1upx solid #F5F5F5; + + .text { + width: 320upx; + color: #000; + font-size: 29upx; + } + + .value { + width: calc(100% - 120upx); + display: flex; + color: #888; + margin-top: 15upx; + margin-bottom: 15upx; + + .prick { + width: calc(100% - 35upx); + } + + .fa-angle-right { + width: 30upx; + font-size: 50upx; + } + } + } + } + } + } + + .print-score { + width: 100%; + height: 280upx; + background: #43CF7C; + border-radius: 20upx; + display: flex; + align-items: center; + font-size: 26upx; + color: #fff; + + .print { + width: 100%; + + .text { + line-height: 50upx; + color: #fff; + } + } + } + + .list-clean { + height: 80upx; + background: #FFFFFF; + padding-left: 20upx; + padding-right: 23upx; + margin-top: 10upx; + border-radius: 15upx; + margin-left: 20upx; + margin-right: 15upx; + padding-top: 18upx; + } + + .item-new-list { + padding-top: 0upx; + padding-left: 30upx; + padding-right: 25upx; + background: #fff; + margin: 0upx 30upx 25upx 30upx; + border-radius: 20upx; + box-shadow: 0 0 10upx 10upx #F5F5F5; + color: #000; + } + + .item-new-list-text { + margin: -10upx 45upx 30upx 45upx; + color: #999; + font-size: 25upx; + width: calc(100% - 90upx); + } + + .content-color { + color: #fff; + } + + .item-new-list-top { + margin: 30upx 30upx 25upx 30upx; + background: #fff; + height: 150upx; + border-radius: 20upx; + box-shadow: 0 0 10upx 10upx #F5F5F5; + display: flex; + flex-direction: row; + + .image { + display: flex; + align-items: center; + width: 18%; + height: 100%; + } + + .text { + display: flex; + width: 64%; + height: 100%; + display: flex; + flex-direction: column; + justify-content: center; + font-size: 22upx; + color: #999; + } + } + + .eq-detail-top-layout { + display: flex; + flex-direction: row; + margin-top: 5upx; + height: 400upx; + + .left { + display: flex; + flex-direction: column; + width: 15%; + + .status { + background: #E72C31; + font-size: 24upx; + color: #FFFFFF; + border-top-right-radius: 30upx; + height: 60upx; + width: 100upx; + text-align: center; + line-height: 60upx; + margin-top: 15upx; + } + } + + .right { + width: 15%; + } + } + + .item-new-list-color { + + background: #fff; + margin: 30upx 30upx 25upx 30upx; + border-radius: 20upx; + box-shadow: 0 0 10upx 10upx #F5F5F5; + height: 180upx; + display: flex; + flex-direction: row; + width: calc(100% - 60upx); + + .content { + + display: flex; + flex-direction: column; + width: calc(25%); + align-items: center; + justify-content: center; + + .image { + height: 40upx; + width: 40upx; + } + + .text { + color: #000; + width: 100%; + font-size: 24upx; + margin-top: 8upx; + text-align: center; + + } + + } + } + + .ink-list-bc { + width: 20upx; + height: 80upx; + background: #fff; + border: 1upx solid #2A82E4; + justify-content: end; + align-items: flex-end; + display: flex; + border-radius: 12upx; + + .in { + width: 100%; + height: 50upx; + background: #2A82E4; + border-radius: 12upx; + } + + } + + + .ink { + display: flex; + flex-direction: row; + height: 100upx; + width: 100%; + justify-content: flex-end; + align-items: center; + + + .content { + display: flex; + flex-direction: column; + width: 20upx; + height: 100upx; + align-items: center; + justify-content: center; + margin-left: 10upx; + + + /* .text { + font-size: 10upx; + color: #999; + margin-top: 10upx; + height: 15upx; + line-height: 15upx; + width: 100%; + text-align: center; + zoom: 0.7 + + } + */ + .image { + width: 20upx; + height: 20upx; + + } + } + } + + .ink-list-bc-text { + font-size: 20upx; + color: #999; + margin-top: 10upx; + height: 15upx; + line-height: 15upx; + width: 100%; + text-align: center; + } +</style> \ No newline at end of file diff --git a/pages/mall/managing-tasks.vue b/pages/mall/managing-tasks.vue new file mode 100644 index 0000000..71a8df3 --- /dev/null +++ b/pages/mall/managing-tasks.vue @@ -0,0 +1,800 @@ +<template> + <view class="order full-height full-width"> + + <view class="uni-tab-bar full-width"> + + <view scroll-y @scrolltolower="loadMore()" class="full-width content" + style="margin-bottom: 20upx; overflow: auto; width: 100%;height: 100%;"> + <!-- 机器 --> + <view class="order-list" v-if="list"> + + <view class="item-new-list"> + <view class="item full-width"> + <label class="text content-color">设备编号</label> + <label class="value content-color"> + <text style="text-align: right;" class="full-width">{{queryPage.machine_id}}</text> + </label> + </view> + <view> + </view> + </view> + + <view class="item-new-list"> + <view class="item full-width" @click="printTasks()"> + <label class="text content-color">打印任务</label> + <label class="value content-color"> + <label class="fa fa-angle-right align-right sub-color item-new-list-come"></label> + </label> + </view> + <!-- <p class="content vT hL">喷嘴检测</p> --> + <view class="item full-width" @click="printOrder()"> + <label class="text content-color">打印订单</label> + <label class="value content-color"> + <label class="fa fa-angle-right align-right sub-color item-new-list-come"></label> + </label> + </view> + <!-- <p class="content vT hL">测试色块</p> --> + <view v-if="list.machine_category_id == 64 && ( list.used_applets == 4 || list.used_applets == 6 || list.used_applets == 8 )" class="item full-width" @click="arriveGood()"> + <label class="text content-color">上架商品</label> + <label class="value content-color"> + <label class="fa fa-angle-right align-right sub-color item-new-list-come"></label> + </label> + </view> + <view v-if="list.machine_category_id == 64 && ( list.used_applets == 6 || list.used_applets == 8 )" class="item full-width" @click="relatedTemplate()"> + <label class="text content-color">可用模版</label> + <label class="value content-color"> + <label class="fa fa-angle-right align-right sub-color item-new-list-come"></label> + </label> + </view> + </view> + + <!-- <p class="content vT hL">设备库存</p> --> + <view class="item-new-list"> + <view class="item full-width" @click="machineInventory()" v-if="list.machine_category_id == 63" > + <label class="text content-color">设备库存</label> + <label class="value content-color"> + <label class="fa fa-angle-right align-right sub-color" + style="float:right;position:absolute;right:50upx;margin-top: -30upx;"></label> + </label> + </view> + + <view class="item full-width" @click="toLiquidation()"> + <label class="text content-color">收益列表</label> + <label class="value content-color"> + <label class="fa fa-angle-right align-right sub-color" + style="float:right;position:absolute;right:50upx;margin-top: -30upx;"></label> + </label> + </view> + </view> + + <view class="item-new-list-text">以上列表只有开启线上收款、库存管理机型可查阅。</view> + + </view> + </view> + </view> + + </view> + </view> +</template> + +<script> + import uniIcon from '@/components/uni-icon/uni-icon.vue'; + import uniPopup from '../index/common/uni-popup/uni-popup.vue'; + import Enums from '@/util/Enums'; + import foot from '../../components/foot.vue'; + import logoservice from '@/service/logoservice.js'; + let Base64 = require('js-base64').Base64; + export default { + components: { + uniPopup, + uniIcon, + foot, + }, + computed: { + + }, + data() { + return { + long: false, + isSinglePlatep: true, + isShowPullButtom: false, + isOnclickItem: false, + numberlist: [], + LoupanList: [], + SortNumber: 1, + StcokList: [], + StcokLists: [], + list: null, + selectItem: null, + mode: 'selector', + pickerValueArray: [], + pickerValueDefault: [0], + type: 'bottom', + dataLoadState: { + pullDownRefresh: false, + reachBottom: false + }, + queryPage: { + m: 'Machine/printRecord', + machine_id: null, + page: 1, + per_page: 20, + total: 0, + date: null, + month: null, + year: null, + is_excess: null, + }, + shopQueryPage: { + m: 'Machine/getShop', + }, + attr: null, + showshareitem: null, + showshareindex: null, + printingPickerValueArray: [], + printingpickerValueDefault: [0], + maxnumber: 12, + maxlength: 2, + be_child: 0, //子代理 + Userres_partner_id: null, //总代理 + is_inner: null, //恢复订单打印 + print_type: 0, //默认0标准版 1无限版 + shopList: null, //店铺列表数据 + isShowPop: false, + }; + }, + + methods: { + + //Liquidation收益类表 + toLiquidation(){ + uni.navigateTo({ + url: "/pages/mall/eq-profit?machineid=" + this.queryPage.machine_id + }) + }, + + + //设备库存 + machineInventory(){ + uni.navigateTo({ + url: "/pages/mall/machine-inventory?id=" + this.queryPage.machine_id + }) + }, + + //关联模板 + relatedTemplate() { + uni.navigateTo({ + url: "/pages/mall/related-template?machineid=" + this.queryPage.machine_id + }) + }, + + //关联商品 + arriveGood() { + uni.navigateTo({ + url: "/pages/mall/arrive-good?machineid=" + this.queryPage.machine_id + }) + }, + + + //打印订单 + printOrder() { + uni.navigateTo({ + url: "/pages/mine/order?machineid=" + this.queryPage.machine_id + }) + }, + + + //打印任务 + printTasks() { + uni.navigateTo({ + url: "/pages/mall/print-tasks?id=" + this.queryPage.machine_id + "&printType=1" + }) + }, + + //字符串转base64 + getStrToBase64(str) { + return Base64.encode(str); + }, + + //格式化时间 + dateFormat(time) { + try { + var dt = new Date(time.replace(/-/g, '/')); + var y = dt.getFullYear(); + var m = dt.getMonth() + 1; + var d = dt.getDate(); + return y + '年' + m + '月' + d + '日'; + } catch (e) { + // 错误处理代码片段 + } + if (time == undefined) { + return ""; + } + return time; + }, + + //取消 + cancel(type) { + this.$refs['showshareinput'].close() + }, + + //获取输入框字符串 + diseaseNameInput(e) { + this.loadStockGoodsList(e.detail.value) + }, + + //获取底部弹框数据 + loadStockGoodsList(goods_name) { + logoservice.MachineStockGoodsList({ + m: 'Machine/getStockGoodsList', + machine_id: this.queryPage.machine_id, + goods_name: goods_name, + }).then(result => { + this.GoodsItem = result; + uni.hideLoading(); + }).catch(err => { + uni.hideLoading(); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + }, + + previewImageOne(item) { + var current = e; //这里获取到的是一张本地的图片 + }, + + setData(obj) { + let that = this; + let keys = []; + let val, data; + Object.keys(obj).forEach(function(key) { + keys = key.split('.'); + val = obj[key]; + data = that.$data; + keys.forEach(function(key2, index) { + if (index + 1 == keys.length) { + that.$set(data, key2, val); + } else { + if (!data[key2]) { + that.$set(data, key2, {}); + } + } + data = data[key2]; + }) + }); + }, + + //店铺 + // showPicker(item) { + // this.pickerValueArray = this.shopList + // this.pickerValueArray.filter(item => { + // item.label = item.short_name + // item.value = item.id + // }); + // this.$refs.mpvuePicker.show(); + // }, + + onChange(e) { + + }, + + onCancel(e) { + + }, + + profit() { + uni.navigateTo({ + url: '../mall/eq-profit?machineid=' + this.list.id, + }); + }, + + toorder() { + uni.navigateTo({ + url: '../mine/order?machineid=' + this.list.id, + }); + }, + + //设备列表详情 + listdetail() { + uni.showLoading({ + title: '正在加载中...' + }); + logoservice.Machinelistdetail({ + m: 'Machine/list', + machine_id: this.queryPage.machine_id + }).then(result => { + this.long = true + uni.stopPullDownRefresh(); + uni.hideLoading(); + if (result[0] != undefined) { + this.list = result[0] + } + }).catch(err => { + uni.hideLoading(); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + }, + + //设备打印信息 加载数据 + loadGoodsList(direction) { + if (this.dataLoadState.pullDownRefresh || this.dataLoadState.reachBottom) return; + uni.showLoading({ + title: '正在加载中...' + }) + this.dataLoadState.pullDownRefresh = direction === Enums.DATA_DIRECTION.UP; + this.dataLoadState.reachBottom = direction === Enums.DATA_DIRECTION.DOWN; + if (this.dataLoadState.reachBottom) { + if (Math.ceil(this.queryPage.total / this.queryPage.per_page) < this.queryPage.page) { + return setTimeout(() => { + uni.showToast({ + title: '没有更多数据了!', + icon: 'none' + }); + }, 500); + } + } + logoservice.Machinelist(this.queryPage).then(result => { + this.long = true + let queryList = result.data.data + //触底更新时,当前列表+查询结果集 + let newList = this.LoupanList.concat(queryList) + this.LoupanList = newList + //分页对象处理 + this.queryPage.total = result.data.total; + this.queryPage.per_page = result.data.per_page; + //停止当前页面下拉刷新 + if (this.dataLoadState.pullDownRefresh) uni.stopPullDownRefresh(); + //数据加载状态处理 false + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + uni.hideLoading(); + }).catch(err => { + //停止当前页面下拉刷新 + if (this.dataLoadState.pullDownRefresh) uni.stopPullDownRefresh(); + //数据加载状态处理 false + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + uni.hideLoading(); + }); + }, + }, + + onPullDownRefresh() { + + }, + + onReachBottom() { + + }, + + onLoad(options) { + let that = this; + this.queryPage.machine_id = options.machineid + this.listdetail(); + }, + + onShow() { + + } + + }; +</script> + +<style lang="scss"> + page { + width: 100%; + height: 100%; + background: #fff; + } + + .eq-detail-score { + padding: 40upx 0; + width: 100%; + height: 210upx; + margin: 0upx auto; + background: #43CF7C; + border-radius: 20upx; + display: flex; + align-items: center; + font-size: 26upx; + color: #fff; + } + + .green { + background-color: #4FB36B !important; + color: #FFFFFF; + } + + /*无数据 */ + .noData { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + } + + .noData_img { + width: 260upx; + height: 260upx; + display: block; + margin: 0upx auto 102upx; + } + + .noData_title { + text-align: center; + font-size: 36upx; + } + + .noData_text { + margin-top: 35upx; + font-size: 30upx; + font-weight: 400; + } + + .noData_but { + width: 230upx; + height: 70upx; + line-height: 70upx; + text-align: center; + color: #F56364; + margin: 140upx auto 0; + border: 1upx solid #F56364; + border-radius: 35upx; + } + + /* 去除button默认样式 */ + button::after { + border: none; + } + + button { + background-color: transparent; + padding-left: 0; + padding-right: 0; + line-height: inherit; + } + + .lang-open { + transform: rotate(90deg); + transition: transform 0.5s; + } + + .lang-close { + transform: rotateY(0deg); + transition: transform 0.5s; + } + + //2020-11-17 + .content-open { + height: 90upx; + overflow: hidden; + transition: all 0.4s cubic-bezier(0.25, 1.0, 0.25, 1.0); + } + + .content-close { + height: 0; + transition: all 0.4s cubic-bezier(0.25, 1.0, 0.25, 1.0); + } + + .item-open { + height: 40upx; + transition: all 0.4s cubic-bezier(0.25, 1.0, 0.25, 1.0); + } + + .item-close { + opacity: 0; + height: 0; + } + + /*输入框弹框显示 */ + .weui-search-bar { + position: relative; + padding: 8upx 10upx; + display: flex; + height: 135upx; + background: #FFFFFF; + align-items: center; + } + + .weui-search-bar_form { + width: 100%; + border-radius: 50upx; + background: #F6F6F6; + } + + .weui-search-bar_input { + height: 80upx; + line-height: 80upx; + font-size: 25upx; + padding-left: 24upx; + } + + /*底部弹框显示 */ + .uni-pop_show { + display: flex; + flex-direction: column; + } + + .uni-calendar-item--isDay-text.data-v-09f1e40c { + color: #5CE6B5 !important; //5CE6B5 + } + + .uni-calendar-item--isDay.data-v-09f1e40c { + background: #5CE6B5 !important; + color: #fff !important; + } + + .uni-calendar-item--checked.data-v-09f1e40c { + background: #5CE6B5 !important; + color: #fff !important; + } + + .uni-numbox__value { + width: 120upx !important; + } + + page { + width: 100%; + height: 100%; + background: #F5F5F5; + } + + .eq_list_button { + display: flex; + flex-direction: row; + line-height: 60upx; + padding-bottom: 20upx; + } + + .eq_list_button_ul { + flex: 1; + } + + .eq_list_button_li { + margin: auto; + font-size: 24upx; + color: #FFFFFF; + width: 150upx; + font-weight: bold; + text-align: center; + line-height: 60upx; + height: 60upx; + background-color: #5CE6B6; + } + + .uni-swiper-tab { + border-bottom: 1upx solid #F5F5F5; + } + + .clean-bt { + border-radius: 50%; + width: 200upx; + height: 200upx; + bottom: 160upx; + right: 20upx; + position: fixed; + font-size: 27upx; + text-align: center; + line-height: 130upx; + z-index: 99991; + justify-content: center; + align-items: center; + } + + .order { + width: 100%; + height: 100%; + background-color: #fff; + + .uni-tab-bar { + height: auto !important; + + .uni-swiper-tab { + position: fixed; + top: var(--window-top); + z-index: 999; + width: 100%; + line-height: 85upx; + height: 85upx; + + .swiper-tab-list { + width: calc(100% / 3); + font-size: 30upx; + } + } + + .active { + color: #43CF7C; + } + } + + .way-list { + margin: 0 20upx; + padding-top: 20upx; + border-radius: 10upx; + + .topBox { + width: calc(100% - 60upx); + margin-left: 30upx; + margin-top: 15upx; + justify-content: center; + } + + .topLittleBOX-1 { + font-size: 26upx; + width: 120upx; + color: #333; + overflow: text-align; + } + + .topLittleBOX-2 { + padding-left: 20upx; + padding-top: auto; + padding-bottom: auto; + display: flex; + vertical-align: middle; + flex-direction: row; + align-items: center; + width: calc(100% - 120upx); + position: relative; + } + + .row-1 { + height: 30upx; + background-color: #43CF7C; + border-radius: 20upx; + width: 0upx; + transition: width 1.5s linear; + } + + .rowText { + margin-left: 10upx; + font-size: 26upx; + color: #333; + float: right; + } + + .way-item { + background: #FFFFFF; + border-radius: 10upx; + margin-bottom: 20upx; + } + + .way { + height: 120upx; + min-height: 90upx; + display: flex; + align-items: center; + font-size: 28upx; + + .text { + width: 250upx; + padding-left: 20upx; + color: #fff; + } + + .value { + width: calc(100% - 280upx); + display: flex; + + .prick { + width: calc(100% - 40upx); + } + + .fa-angle-right { + width: 40upx; + font-size: 50upx; + } + } + } + } + + .content { + padding-top: 10upx; + + .order-list { + min-height: 350upx; + width: 100%; + border-radius: 10upx; + + .item { + min-height: 70upx; + display: flex; + align-items: center; + font-size: 26upx; + border-bottom: 1upx solid #F5F5F5; + + .text { + width: 250upx; + color: #000; + font-size: 29upx; + } + + .value { + width: calc(100% - 120upx); + display: flex; + color: #888; + margin-top: 15upx; + margin-bottom: 15upx; + + + .prick { + width: calc(100% - 35upx); + } + + .fa-angle-right { + width: 30upx; + font-size: 50upx; + } + } + } + } + } + } + + .print-score { + width: 100%; + height: 280upx; + background: #43CF7C; + border-radius: 20upx; + display: flex; + align-items: center; + font-size: 26upx; + color: #fff; + + .print { + width: 100%; + + .text { + line-height: 50upx; + color: #fff; + } + } + } + + .list-clean { + height: 80upx; + background: #FFFFFF; + padding-left: 20upx; + padding-right: 23upx; + margin-top: 10upx; + border-radius: 15upx; + margin-left: 20upx; + margin-right: 15upx; + padding-top: 18upx; + } + + .item-new-list { + padding-top: 0upx; + padding-left: 30upx; + padding-right: 25upx; + background: #fff; + margin: 0upx 30upx 25upx 30upx; + border-radius: 20upx; + box-shadow: 0 0 10upx 10upx #F5F5F5; + color: #000; + } + + .item-new-list-text { + margin: -10upx 45upx 30upx 45upx; + color: #999; + font-size: 25upx; + width: calc(100% - 60upx); + } + + .item-new-list-come { + float: right; + position: absolute; + right: 50upx; + margin-top: -30upx; + } + + .content-color { + color: #fff; + } +</style> \ No newline at end of file diff --git a/pages/mall/print-tasks.vue b/pages/mall/print-tasks.vue new file mode 100644 index 0000000..a3b35c6 --- /dev/null +++ b/pages/mall/print-tasks.vue @@ -0,0 +1,2136 @@ +<template> + <view class="order full-height full-width"> + + <!-- 暂无相关信息 --> + <view v-if="!list && long && !LoupanList"> + <view class="noData"> + <image src="../../static/icon_guaqi.png" mode="aspectFill" class="noData_img"></image> + <view class="noData_title"> + 非常抱歉,您没有权限查阅当前打印站的信息!<br> + </view> + <view class="noData_but" @click="tomain()">返回</view> + </view> + + </view> + + <view class="uni-tab-bar full-width" v-if="list "> + + <view scroll-y @scrolltolower="loadMore()" class="full-width content" + style="margin-bottom: 20upx; overflow: auto; width: 100%;height: 100%;"> + + <!-- 打印 --> + <view style=" background: #F1F1F1; position: fixed; width:100%;top: 10upx; z-index: 99;height: 190upx;"> + <view style="height: 20upx;width:100%;background: #F1F1F1;"></view> + <view + style="width:calc(100% -40upx);padding-top: 20upx; background: #FFFFFF; border-radius: 20upx;margin-left:20upx; margin-right: 20upx;"> + <view + style="width:100%; background: #FFFFFF;height: 140upx; line-height: 140upx;padding-top: 10upx;" + @click="togglePopup()"> + <view + style="width: calc(100% - 40upx);border-radius:50upx; height: 90upx; border:2upx solid #F1F1F1;margin-left: 20upx; margin-right: 20upx;"> + <text + style="color: #333333;float: left;margin-top: -20upx;margin-left: 30upx;font-size: 27upx;">{{attr == null ? '全部打印类型' : attr}}</text> + <span class="iconfont icon-xiala" + style="margin-left: 10upx; font-size: 20upx; color: #BCBEC1;float: right ;margin-top: -25upx;margin-right: 30upx;"></span> + </view> + </view> + <view style="display: flex; width: 100%;height: 40upx;margin-top: 20upx;"> + <view + style="font-size: 28upx; line-height: 40upx; width: 50%; text-align: left;color: #333333;margin-left: 35upx;margin-top: -30upx;"> + 作品数量:{{queryPage.total}}件</view> + <view + style="width: calc(100% / 2); text-align: right; padding: 25upx 15upx 25upx 25upx; margin-right: 35upx;margin-top: -55upx;" + @click="printingShowPicker('selector')"> + <text style="color: #333333;" v-if="queryPage.year">{{queryPage.year}}年</text> + <text style="color: #333333;" v-if="queryPage.month">{{queryPage.month}}月</text> + <text style="color: #333333;" v-if="queryPage.date">{{queryPage.date}}</text> + <span class="iconfont icon-xiala" + style="margin-left: 10upx; font-size: 20upx; color: #BCBEC1;"></span> + </view> + </view> + </view> + </view> + + <view class="order-list" v-if="long"> + <view style="height: 180upx; position: relative;z-index: 9;"></view> + <!-- 动态数据 --> + <view v-if="LoupanList.length > 0" style="overflow: hidden; position: relative;"> + <view style="margin-top: 70upx;padding-bottom:30upx;"> + <view v-for="(item, index) in LoupanList" :key="index" + style="display: flex; margin-left:30upx;margin-right: 30upx; + border-radius: 30upx; font-size: 24upx; + border-top: 1upx solid #F5F5F5; padding-bottom:30upx;padding-top: 15upx;margin-top: 20upx;background: #FFFFFF; "> + <view + style="margin-top:-15upx;height:40upx;line-height: 50upx;text-align:center; width: 140upx;"> + <view v-if="item.status.text == '生产完成' " style=" color: #FFFFFF;font-size: 24upx;border-bottom-right-radius: 30upx; background:#43CF7C; + border-top-left-radius: 30upx;height: 50upx;width: 140upx;"> 生产完成</view> + <view v-if="item.status.text == '生产中'" style=" color: #FFFFFF;font-size: 24upx;border-bottom-right-radius: 30upx; background:#FF8D1A; + border-top-left-radius: 30upx;height: 40upx;width: 140upx;"> 生产中</view> + <view + v-if="item.status.text == '打印失败' ||item.status.text == '失败' || item.status.text == '取消生产' || item.status.text == '等待出料' " + style=" color: #FFFFFF;font-size: 24upx;border-bottom-right-radius: 30upx; background:#D43030; border-top-left-radius: 30upx;height: 40upx;width: 140upx;"> + {{item.status.text}} + </view> + </view> + <view style="width: auto; display: flex;" @click="previewImage(item,LoupanList)"> + <image :src="item.works_image + '?x-oss-process=image/resize,lfit,w_115'" + style="width:115upx; height:115upx; margin: auto; align-items: center;margin-left:-130upx; margin-top: 35upx;" + mode="aspectFill"></image> + </view> + <view style="display: flex;flex-direction: column;width: 60%;margin-left: 20upx;"> + <view style="height: 40upx;font-size: 30upx;font-weight: bold;"> + {{item.name}} + </view> + <view style="height: 40upx;font-size:22upx;"> + {{item.machine_id}}--{{item.goods_specs}} + </view> + <view @click="reprint(item,index)" + style="margin-top: 10upx; display: flex;flex-direction: row; margin-left: 5upx;"> + <text v-if="item.is_excess == 0" + style="margin-right: 10upx;font-size: 22upx;color: #595959; ">套餐卡</text> + <text v-if="item.is_excess == 1" + style="margin-right: 10upx;font-size: 22upx;color: #595959; ">打印卡</text> + </view> + <view style="font-size: 26upx;margin-top: 5upx;margin-left: 2upx;"> + {{item.create_time}} + </view> + <view v-if="item.min!= '' && item.min!= null" + style="font-size: 26upx;margin-left: 5upx;">{{item.min}}(用时)</view> + </view> + <view v-if=" item.status.value !== 0 " style="width: 20%;display: flex; align-items: center; justify-content: center; + text-align: center; line-height: 30upx; color: #fff;" @click="Reprint(item)"> + <text + style="width: 80upx;height: 80upx; line-height:80upx; font-size: 23upx;text-align:center;color: #FFFFFF;background-color: #131319;border-radius: 80px;text-align: center;margin-right: 25upx;"> + 恢复</text> + </view> + + + <view + v-if=" item.status.value == 0 && list.is_open_manage == 1" + style="width: 20%;display: flex; align-items: center; justify-content: center;text-align: center; line-height: 30upx; color: #fff;"> + <text @click="showPrintPop(item)" + style="width: 80upx;height: 80upx; line-height:80upx; font-size: 23upx;text-align:center;color: #FFFFFF;background-color: rgba(67, 207, 124, 1.0);border-radius: 80px;text-align: center;margin-right: 25upx;"> + 打印</text> + </view> + + </view> + </view> + </view> + <!-- 暂无相关信息 --> + <view class="align-center content-color" + style="position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%);" + v-if=" LoupanList.length == 0 || LoupanList.length == null "> + <span class="iconfont icon-wushuju" + style="font-size: 100upx; text-align: center; color: #B2B2B2;"></span> + <view style="color: #B2B2B2; text-align: center; line-height: 50upx;font-size: 24upx;">当前无打印 + </view> + </view> + </view> + </view> + </view> + + <!-- 年月日 --> + <mpvue-pickernew ref="printingMpvuePicker" :themeColor="'#53B2B0'" + :pickerValueDefault="printingpickerValueDefault" @onChange="onChange" @onCancel="onCancel" + @onConfirm="onConfirmPrinting" :pickerValueArray="printingPickerValueArray"></mpvue-pickernew> + + <!-- 底部弹框 搜索商品名称 --> + <uni-popup ref="showshare" :type="type" @change="change"> + <view class="uni-pop_show" style="width: 100%; margin: auto;"> + <view style="width: 100%;background: #FFFFFF;border-bottom: 4upx solid #E9E7ED;margin-right: 80upx;"> + <!-- 搜索框 --> + <view class="weui-search-bar"> + <view class="weui-search-bar_form"> + <input type="text" class="weui-search-bar_input" placeholder="请输入商品名称" + @input='diseaseNameInput' /> + </view> + </view> + <view style="width: 100%; height: 550upx; background: #F9F9F9;"> + <scroll-view scroll-y + style="width:100%; height: 550upx; overflow: hidden; overflow-y: scroll; background: #FFFFFF;"> + <view v-for="(item, index) in GoodsItem" :key="index" @click="selectGood(item)" + style="width: calc(100% - 60upx); margin: auto; height: 110upx; display: flex; align-items: center; border-top: 1upx solid #F6F6F6; background: #FFFFFF;"> + <image :src="item.front_image + '?x-oss-process=image/resize,lfit,w_100'" + mode="aspectFit" + style="width:70upx; height: 70upx;line-height:70upx; margin: 0 10upx;"></image> + <view style="width: calc(100% - 90upx);"> + <view + style="font-size: 25upx;color: #B2B2B2;width: 100%;white-space: nowrap;text-overflow:ellipsis; overflow:hidden; word-break:break-all;"> + {{item.name}}({{item.title}}) + </view> + <view + style="font-size: 25upx;color: #B2B2B2;width: 100%;white-space: nowrap;text-overflow:ellipsis; overflow:hidden; word-break:break-all;"> + 商品库存 : {{item.stock}} + </view> + </view> + </view> + <view class="align-center" + style="position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%);" + v-if="GoodsItem == null || ( GoodsItem != null && GoodsItem.length == 0) "> + <span class="iconfont icon-wushuju" + style="font-size: 100upx; text-align: center; color: #B2B2B2;"></span> + <view style="color: #B2B2B2; text-align: center; line-height: 50upx;font-size: 24upx;"> + 啊嘞,还是一片荒漠</view> + </view> + + <!-- <view style="visibility: hidden;" >{{ showData }} </view> --> + + + </scroll-view> + </view> + </view> + </view> + </uni-popup> + + <!-- 打印选择类型 --> + <uni-popup ref="printingShowshare" :type="type" @change="change"> + <view class="uni-share" style="width: 100%; margin: auto;"> + <view style="background: #F9F9F9;width: 100%;border-bottom: 1upx solid #00000000;"> + <view style="width: 100%;border-bottom: 1upx solid #E9E7ED; height:100upx; + text-align: center;line-height: 100upx; font-size: 26upx; font-weight: 500;"> + 选择打印类型 + </view> + <scroll-view scroll-y style="margin: auto; height: 500upx; overflow: hidden; overflow-y: scroll;"> + <view style="width: calc(100% - 40upx); margin:20upx auto; overflow: hidden;"> + <view v-for="(item, index) in goodsItem" :key="index" @click="selectMonth(item)" + :class="attr == item.goods_name ? 'green':''" + style="width: calc(33% - 20upx);margin:10upx; float: left; background: #ffffff;height: 60px; border-radius: 5upx; font-size: 26upx; text-align: center;line-height: 60px;"> + {{item.goods_name == null ? '全部' : item.goods_name}} + </view> + </view> + </scroll-view> + </view> + <view + style="height: 90rpx; line-height: 90rpx; font-size: 14px; text-align: center; color: #666; background: #FFFFFF; border-top: 1px solid #EEEEEE;" + @click="Printingcancel('share')">取消</view> + </view> + </uni-popup> + + <uni-popup ref="confirmCenter" type="center"> + <view style="width:650upx; margin:auto; display: flex; flex-direction: column;"> + <view style="width:100%; background: #FFFFFF; border-radius: 15upx; + padding-top: 40upx; padding-bottom: 40upx;display: flex; flex-direction: column;"> + <view style=" + width: 100%; + text-align: center; + font-size: 35upx; + color: #000; + height: 80upx; + line-height: 80upx; + ">是否继续打印 </view> + + <!-- v-if ="list.choose_whiteink == 1" --> + <view v-if="list.choose_whitelink == 1" style="display: flex; + flex-direction: row; + width: 100%; height: 250upx; + justify-content: center; + align-items: center; + margin-top: 80upx; + margin-bottom: 60upx;"> + <view style="width: 50%; + display: flex; + justify-content: center; + align-items: center;"> + <view style="width: 250upx; + height: 250upx; + background:#999; + color: #fff; + text-align: center; + line-height: 250upx;" :style="{background: selectPrintItemType == 0 ?'rgba(67, 207, 124, 1)' :'#999'}" + @click="selectPrintType(0)">白色手机壳 + </view> + </view> + <view style="width: 50%; + display: flex; + justify-content: center; + align-items: center;"> + <view + style="width: 250upx;height: 250upx; background:#999;color: #fff;text-align: center; line-height: 250upx;" + :style="{background: selectPrintItemType == 1 ?'rgba(67, 207, 124, 1)' :'#999'}" + @click="selectPrintType(1)">其他颜色手机壳</view> + </view> + </view> + + + <view style="width:100%; display: flex; height: 60upx; align-items: center;margin-top: 40upx;"> + <view @click="closePrintPop()" + style="width: 50%;text-align: center;height: 100upx; line-height: 100upx; color: #000; font-size: 30upx;"> + 取消</view> + <view @click.stop="printAgain()" + style="width: 50%; text-align: center; height: 100upx; line-height: 100upx; color: #000;font-size: 30upx;"> + 确定</view> + </view> + </view> + </view> + </uni-popup> + + <!-- <uni-popup ref="cleanPrint" type="center" @change="changeCleanPrint"> + <view style="width: 600upx; height: 640upx; "> + <view style="background: #F9F9F9;width: 100%; height: 100%; border-radius: 20upx; + align-items: center; + display: flex; + flex-direction: column;"> + <image style="width: 320upx; height: 320upx; margin-top: 80upx; " + src="https://img.xiaopiu.com/userImages/img79980184d0e9c4a0.png" mode="aspectFit"> </image> + <view style="margin-top: 80upx; font-size: 26upx; color: #999; ">上一次清洗时间:{{clear_time }} </view> + <view style="width:200upx; height: 60upx; border-radius: 15upx; + line-height: 60upx; text-align: center; + background: rgba(67, 207, 124, 1);margin-top: 40upx; color: #fff; " :style="{background: !isClickClean ?'rgba(67, 207, 124, 1)' :'#999' + }" @click="autoCleanNozzle()">自动清洗喷头 + </view> + </view> + </view> + </uni-popup> --> + + </view> + </view> +</template> + +<script> + import uniIcon from '@/components/uni-icon/uni-icon.vue'; + import uniPopup from '../index/common/uni-popup/uni-popup.vue'; + import Enums from '@/util/Enums'; + import foot from '../../components/foot.vue'; + import mpvuePicker from '../../components/mpvue-picker/mpvuePicker.vue'; + import mpvuePickernew from '../../components/mpvue-picker/mpvuePickernew.vue'; + import logoservice from '@/service/logoservice.js'; + let Base64 = require('js-base64').Base64; + export default { + components: { + uniPopup, + uniIcon, + foot, + mpvuePicker, + mpvuePickernew + }, + computed: { + + }, + data() { + return { + long: false, + isSinglePlatep: true, //是否单机版 或者 配送版 + isShowPullButtom: false, //false不显示true显示 + isOnclickItem: false, //是否点击item + numberlist: [], + LoupanList: [], + SortNumber: 1, + goodsItem: [{ + goods_name: '全部', + type: -12, + }, + { + goods_name: '套餐内', + type: 0, + }, + { + goods_name: '打印卡', + type: 1, + }, + ], + StcokList: [], //设备库存列表 + StcokLists: [], + list: null, + getStockerCount: "", //设置输入个数 + selectItem: null, + //默认选中 + currentTab: { + code: 1, + name: '机器' + }, + tabBars: [{ + code: 0, + name: '机器' + }, + { + code: 2, + name: '' + }, + { + code: 1, + name: '打印' + }, + ], + //end底部弹框 + mode: 'selector', + pickerValueArray: [], + pickerValueDefault: [0], + type: 'bottom', + //上拉状态 + dataLoadState: { + pullDownRefresh: false, + reachBottom: false + }, + queryPage: { + m: 'Machine/printRecord', + machine_id: null, + page: 1, + per_page: 20, + total: 0, + date: null, //日 + month: null, //月 + year: null, //日 + is_excess: null, //套餐选择类型 + }, + shopQueryPage: { + m: 'Machine/getShop', + }, + attr: null, + //商品库存 + showshareitem: null, + showshareindex: null, + //打印年月日 + printingPickerValueArray: [], + printingpickerValueDefault: [0], + //加载全部交易类型数据 + maxnumber: 12, + maxlength: 2, + be_child: 0, //子代理 + Userres_partner_id: null, //总代理 + is_inner: null, //恢复订单打印 + print_type: 0, //默认0标准版 1无限版 + shopList: null, //店铺列表数据 + GoodsItem: null, //货道数据 + stockData: null, //库存数据 + stockDataList: null, //库存列表数据 + inkStatusC: false, + inkStatusM: false, + inkStatusY: false, + inkStatusK: false, + inkStatusW: false, + inkStatusHas: false, + isShowPop: false, + timer: null, //定时器 + intCountTimer: 0, + clear_time: "", //上次清洗时间 + isClickClean: false, //是否点击 + //手指原始位置 + oldMousePos: {}, + //元素原始位置 + oldNodePos: {}, + autoCleanLeft: -40, //左位置 + autoCleanTop: -40, //下位置 + isTouchStart: false, + show_clean: 0, //为1时就显示清洗喷头的入口,为0时就不显示 + countDownTimeCount: 1, //倒计时 + countDownTime: null, //倒计时 + isAutoStartClean: false, //是否自动清洗开始 + selectPrintItem: null, //选中打印对象 + selectPrintItemType: 0, //0 只打印彩墨 1 打印彩墨和白 + showData: 1, + }; + }, + + methods: { + + //选择类型 + selectPrintType(type) { + this.selectPrintItemType = type + }, + + //显示打印弹框 + showPrintPop(item) { + this.selectPrintItemType = 0 + this.selectPrintItem = item; + this.$refs["confirmCenter"].open(); + }, + + //关闭打印弹框 + closePrintPop() { + this.selectPrintItem = null; + this.$refs["confirmCenter"].close(); + }, + + +// text: "生产中" +// value: 1 + + //打印 + printAgain() { + if (this.selectPrintItem == null) { + return + } + //this.showData++; + //0 :只打印彩墨 1:打印彩墨和白墨 + //恢复打印的接口: + + let queue_id = this.selectPrintItem.id + + let that = this; + + this.$refs["confirmCenter"].close(); + + uni.showLoading({ + title: '操作中...', + }) + + logoservice.MachineStockGoodsList({ + m: 'Machine/remotePrint', + machine_id: this.selectPrintItem.machine_id, + queue_id: queue_id, + white_ink: this.selectPrintItemType + }).then(result => { + + setTimeout(function() { + uni.hideLoading(); + + that.LoupanList.forEach(itemData => { + if (itemData.id == queue_id) { + itemData.status.value = 1 + itemData.status.text = "生产中" + } + }); + //that.closePrintPop(); + }, 4000) //延迟时间 这里是2秒 + + + + + + //console.log(this.LoupanList); + + /* LoupanList.forEach(){ + + } */ + + //this.selectPrintItem.status.click = true; + + }).catch(err => { + this.closePrintPop(); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + }, + + + //调转收益列表 + toLiquidationList() { + uni.navigateTo({ + url: '../mine/Liquidation?machineid=' + this.queryPage.machine_id, + }); + }, + + + //调转订单列表 + toOrderList() { + uni.navigateTo({ + url: '../mine/order?machineid=' + this.queryPage.machine_id, + }); + }, + + + touchstart(ev) { + ev.preventDefault(); + this.isTouchStart = true; + const selectDom = ev.currentTarget; + const { + pageX, + pageY + } = ev.touches[0]; // 手指位置 + const { + offsetLeft, + offsetTop + } = selectDom; // 元素位置 + // 手指原始位置 + this.oldMousePos = { + x: pageX, + y: pageY + }; + // 元素原始位置 + this.oldNodePos = { + x: offsetLeft, + y: offsetTop + }; + }, + + touchMove(ev) { + ev.preventDefault(); + const selectDom = ev.currentTarget; + // x轴偏移量 + const lefts = this.oldMousePos.x - this.oldNodePos.x; + // y轴偏移量 + const tops = this.oldMousePos.y - this.oldNodePos.y; + const { + pageX, + pageY + } = ev.touches[0]; // 手指位置 + this.autoCleanLeft = pageX - lefts; + this.autoCleanTop = pageY - tops; + }, + + touchEnd(ev) { + ev.preventDefault(); + this.isTouchStart = false; + }, + + //自定清洗 + autoCleanNozzle() { + if (this.isClickClean) { + return; + } + this.isClickClean = true; + this.$refs['cleanPrint'].setMaskClick(false); + uni.showLoading({ + title: '清洗中...', + }) + this.intCountTimer = 0; + this.countDownTimeCount = 1; + logoservice.MachineSavePartnerStock({ + m: 'Machine/clearHead', + machine_id: this.queryPage.machine_id, + }).then(result => { + this.autoClick() + }).catch(err => { + this.cleanTimeData(); + uni.showToast({ + title: err.msg, + duration: 1000, + icon: "none", + }) + }) + }, + + //清除计时器数据 + cleanTimeData() { + this.isAutoStartClean = false; + clearInterval(this.timer); + this.timer = null; + clearInterval(this.countDownTime); + this.countDownTime = null; + this.intCountTimer = 0; + this.isClickClean = false; + this.$refs['cleanPrint'].setMaskClick(true); + uni.hideLoading(); + this.$refs['cleanCountDown'].close(); + this.$refs['cleanPrint'].open(); + this.countDownTimeCount = 1; + }, + + //5秒一次定时器 + autoClick() { + this.$refs['cleanCountDown'].open(); + this.$refs['cleanPrint'].close(); + this.isAutoStartClean = true; + let that = this; + this.timer = setInterval(function() { + that.getCleanStatus(); + }, 5000); + this.countDownTime = setInterval(function() { + that.countDownTimeCount++; + }, 1000); + }, + + //获取状态值 + getCleanStatus() { + logoservice.MachineSavePartnerStock({ + m: 'Machine/getClearHeadStatus', + machine_id: this.queryPage.machine_id, + }).then(result => { + if (this.countDownTimeCount >= 60) { + this.cleanTimeData(); + uni.showToast({ + title: "清洗成功", + duration: 2000 + }) + } + let clear_status = result.clear_status.value; + if (clear_status == 0) { + this.$refs['cleanPrint'].setMaskClick(true); + if (result.clear_time) { + this.clear_time = result.clear_time; + } + this.cleanTimeData(); + uni.showToast({ + title: "清洗成功", + duration: 2000 + }) + } + }).catch(err => { + + }) + }, + + //清洗打印弹窗 + cleanPrintPop() { + this.$refs['cleanPrint'].open(); + }, + + changeCleanPrint(obj) { + this.isShowPop = obj.show; + }, + + //选中普通设备列表 + selectStockList(index, item) { + var resultList = this.stockDataList; + this.stockDataList = []; + var isDown = item.isDown; + if (isDown) { + isDown = false + } else { + isDown = true + } + resultList.forEach(itemData => { + if (itemData.id == item.id) { + itemData.isDown = isDown + } + }) + this.stockDataList = resultList; + }, + + //调转库存列表 + toStockList() { + uni.navigateTo({ + url: '../mall/stockList?id=' + this.queryPage.machine_id, + }); + }, + + //获取库存新接口 + getStockData() { + logoservice.MachineSavePartnerStock({ + m: 'Machine/getStockDetail', + machine_id: this.queryPage.machine_id, + }).then(result => { + this.stockData = result; + var max = 60; + var first = 20; + this.stockData.list.forEach((item, index) => { + item.id = index + item.isDown = false; + if (index == 0) { + item.row2 = max * item.need_stock / first; + if (item.row2 <= 0) { + item.row2 = 0; + } + first = parseFloat(item.need_stock); + if (first <= 1) { + first = 20; + } + } else { + item.row2 = max * parseFloat(item.need_stock / first) + if (item.row2 <= 0) { + item.row2 = 0; + } + } + }) + this.stockDataList = this.stockData.list + }).catch(err => { + + }) + }, + + //字符串转base64 + getStrToBase64(str) { + return Base64.encode(str); + }, + + //预览显示图片 + showPreviewImage(e, id) { + if (e == null || e == "") { + uni.showToast({ + title: '暂时没有定制二维码', + icon: 'none' + }); + return + } + var current = e + "?x-oss-process=image/watermark,text_" + this.getStrToBase64(id) + + ",g_nw,size_50,shadow_50,x_550,y_850,color_4bf25a"; //这里获取到的是一张本地的图片 + uni.previewImage({ + current: current, //需要预览的图片链接列表 + urls: [current] //当前显示图片的链接 + }) + }, + + //获取剩余量次数相差 + getPrintSurplusCount(count) { + try { + if (count >= 200) { //白色 + return 1; + } else if (count < 200 && count >= 50) { //橙色 + return 2; + } else if (count < 50) { //红色 + return 3; + } + } catch (e) { + + } + return 0; + }, + + //获取相差天数 + getDaysDifference(time) { + try { + let day = new Date(time.replace(/-/g, "/")).getTime() - new Date().getTime(); //日期转时间戳 + let dayCount = Math.floor(day / 86400000); //时间戳获取天数 + return dayCount; + } catch (e) { + + } + return 0; + }, + + //格式化时间 + dateFormat(time) { + try { + var dt = new Date(time.replace(/-/g, '/')); + var y = dt.getFullYear(); + var m = dt.getMonth() + 1; + var d = dt.getDate(); + return y + '年' + m + '月' + d + '日'; + } catch (e) { + // 错误处理代码片段 + } + if (time == undefined) { + return ""; + } + return time; + }, + + //调转明细页面 + packageDetail(machineId) { + let machineid = machineId; + uni.navigateTo({ + url: '../mine/PrintUseDetail?machineid=' + machineid + '&print_type=' + this.print_type + }); + }, + + + + + Reprint(item) { + if (item.status.value == 0) { + return; + } + uni.showModal({ + title: '温馨提示', + content: '是否此订单恢复打印?', + confirmText: '确定', + confirmColor: '#ff3b32', + success: function(res) { + if (res.confirm) { + //恢复打印的接口: + logoservice.MachineStockGoodsList({ + m: 'Machine/repeatPrint', + machine_id: item.machine_id, + id: item.id, + }).then(result => { + uni.showToast({ + title: '恢复订单打印成功', + icon: 'none' + }); + item.status.value = 0 + item.status.text = "等待出料" + }).catch(err => { + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + } else if (res.cancel) { + + } + } + }); + }, + + //代理商名字 + partnername(partner_id, partner) { + var partner_name = '尚未铺设'; + if (partner) { + partner.forEach(item => { + if (item.id == partner_id) { + partner_name = item.name + } + }); + } + return partner_name + }, + + tomain() { + uni.reLaunch({ + url: "/pages/index/home" + }) + }, + + //打印年月日printing Printing + printingShowPicker(mode) { + this.$refs.printingMpvuePicker.show(); + }, + + //日期确定 + onConfirmPrinting(e) { + this.queryPage.year = null + this.queryPage.month = null + this.queryPage.date = null + if (e.value.length == 1) { + this.queryPage.year = e.value[0] + } else if (e.value.length == 2) { + let myMonth = e.value[1] + if (myMonth < 10) { + myMonth = '0' + e.value[1] //补齐 + } + this.queryPage.month = e.value[0] + '-' + myMonth + } else if (e.value.length == 3) { + let myMonth = e.value[1] + if (myMonth < 10) { + myMonth = '0' + myMonth //补齐 + } + let mydate = e.value[2] + if (mydate < 10) { + mydate = '0' + e.value[2] //补齐 + } + this.queryPage.date = e.value[0] + '-' + myMonth + '-' + mydate + } + //数据加载状态处理 false + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + this.LoupanList = [] + this.queryPage.page = 1; + this.queryPage.total = 0; + this.loadGoodsList(Enums.DATA_DIRECTION.UP); + }, + + //打开类型 + togglePopup() { + this.$nextTick(() => { + this.$refs['printingShowshare'].open() + }) + this.getGoodsAttrList() + }, + + Printingcancel(type) { + this.$refs['printingShowshare'].close() + }, + + selectMonth(item) { + if (item.type == -12) { + this.attr = "全部打印类型"; + this.queryPage.is_excess = null; + } else { + this.attr = item.goods_name ? item.goods_name : null + this.queryPage.is_excess = item.type + } + this.$refs['printingShowshare'].close(); + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + this.queryPage.page = 1; + this.queryPage.total = 0; + this.LoupanList = [] + this.loadGoodsList(Enums.DATA_DIRECTION.UP); + }, + + //取消 + cancel(type) { + this.$refs['showshareinput'].close() + }, + + //更换弹框 + showshareclick(item, index) { + if (this.$base.Userres.be_child == 1) return; + if (this.list.used_applets == '3') { + this.maxnumber = 12 + this.maxlength = 2 + } + if (this.list.used_applets == '4') { + this.maxnumber = 7 + this.maxlength = 1 + } + let itema = JSON.stringify(item) + let itemb = JSON.parse(itema); + this.showshareitem = itemb; + this.showshareindex = index; + this.$nextTick(() => { + this.$refs['showshareinput'].open() + }) + }, + + change(e) { + + }, + + //库存数量输入 + StockCountInput(e) { + this.isOnclickItem = true; + var that = this; + setTimeout(function() { + that.isOnclickItem = false; + }, 1000) //延迟时间 这里是2秒 + }, + + inputVal(item, index) { + if (this.list.used_applets == '3') { + this.maxnumber = 12 + this.maxlength = 2 + } + if (this.list.used_applets == '4') { + this.maxnumber = 7 + this.maxlength = 1 + } + let StcokListsnumber = item.total_stock + if (item.stock > this.maxnumber) { + uni.showToast({ + title: '最大只能输入' + this.maxnumber + '个', + icon: 'none', + }); + item.stock = StcokListsnumber > this.maxnumber ? this.maxnumber : StcokListsnumber; + return false; + } + }, + + //获取输入框字符串 + diseaseNameInput(e) { + this.loadStockGoodsList(e.detail.value) + }, + + //pop选中商品 + selectGood(item) { + this.$refs["showshare"].close(); + var that = this; + let index; + if (this.selectItem != null) { + that.StcokList.forEach((items, indexNumber) => { + if (items.id == this.selectItem.id) { + index = indexNumber; + } + }); + } + uni.showModal({ + title: '确认', + content: '是否关联当前商品?', + confirmText: '确定', + confirmColor: '#ff3b32', + success: function(res) { + if (res.confirm) { + if (that.list.used_applets == '3') { + that.StcokList[index].stock = item.stock > 12 ? 12 : item.stock; + } + if (that.list.used_applets == '4') { + that.StcokList[index].stock = item.stock > 7 ? 7 : item.stock; + } + that.StcokList[index].title = item.title; //name + that.StcokList[index].name = item.name; + that.StcokList[index].front_image = item.front_image; + that.StcokList[index].goods_id = item.goods_id; + that.StcokList[index].dict_id = item.dict_id; + that.StcokList[index].total_stock = item.stock; + that.StcokList[index].isShowPullButtom = false; + that.confirmChangeChannel(that.StcokList[index]) + } + } + }); + }, + + //确认更换货道 + confirmChangeChannel(item) { + logoservice.MachineSavePartnerStock({ + m: 'Machine/saveStock', + id: item.id, + machine_id: this.queryPage.machine_id, + goods_id: item.goods_id, + goods_size: item.goods_size, + stock: item.stock, + dict_id: item.dict_id + }).then(result => { + uni.hideLoading(); + uni.showToast({ + title: "更换成功", + icon: 'none' + }); + }).catch(err => { + uni.hideLoading(); + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + this.StcokList = [] + this.queryPage.page = 1; + this.queryPage.total = 0; + this.loadStockList(Enums.DATA_DIRECTION.UP); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + }, + + //下架功能 + shelvesGood(item, index) { + if (this.$base.Userres.be_child == 1) return; + var _this = this + uni.showModal({ + title: '确认', + content: '确认当前商品下架吗?', + confirmText: '确定', + confirmColor: '#ff3b32', + success: function(res) { + if (res.confirm) { + console.log(item.goods_id) + if (item.goods_id == 0) { + uni.showToast({ + title: "还没绑定商品不能下架", + icon: 'none' + }); + _this.StcokList[index].isShowPullButtom = false; + _this.SortNumber++; + _this.StcokList[index].SortNumber = _this.SortNumber; + this.setData({ + StcokList: _this.StcokList + }) + } else { + uni.showLoading({ + title: '正在加载中...' + }) + logoservice.MachineSavePartnerStock({ + m: 'Machine/saveStock', + id: item.id, + machine_id: _this.queryPage.machine_id, + goods_id: item.goods_id, + goods_size: item.goods_size, + stock: item.stock, + dict_id: item.dict_id, + type: "off", + }).then(result => { + console.log(result) + uni.hideLoading(); + uni.showToast({ + title: "下架成功", + icon: 'none' + }); + _this.dataLoadState.pullDownRefresh = false; + _this.dataLoadState.reachBottom = false; + _this.StcokList = [] + _this.queryPage.page = 1; + _this.queryPage.total = 0; + _this.loadStockList(Enums.DATA_DIRECTION.UP); + }).catch(err => { + _this.dataLoadState.pullDownRefresh = false; + _this.dataLoadState.reachBottom = false; + _this.StcokList = [] + _this.queryPage.page = 1; + _this.queryPage.total = 0; + _this.loadStockList(Enums.DATA_DIRECTION.UP); + uni.hideLoading(); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + } + } else if (res.cancel) { + + } + } + }); + }, + + //更换弹框 + toChangePop(item) { + if (this.$base.Userres.be_child == 1) return; + this.selectItem = item; + this.$nextTick(() => { + this.$refs['showshare'].open() + this.loadStockGoodsList(""); + }) + }, + + //显示下面选择按钮 + showPullButton(item, index) { + if (this.isOnclickItem == false) { + var that = this; + if (item.isShowPullButtom) { + that.StcokList[index].isShowPullButtom = false; + } else { + that.StcokList[index].isShowPullButtom = true; + } + this.SortNumber++; + that.StcokList[index].SortNumber = this.SortNumber; + this.setData({ + StcokList: that.StcokList + }) + } + }, + + //修改货道 + changeChannel(item, index) { + this.$refs["showshareinput"].close(); + this.$refs["showshare"].close(); + var _this = this + _this.isOnclickItem = true; + setTimeout(function() { + _this.isOnclickItem = false; + }, 1000) //延迟时间 这里是1秒 + let jsonLists = JSON.parse(_this.StcokLists); + uni.showModal({ + title: '确认', + content: '确认当前商品货道调整吗?', + confirmText: '确定', + confirmColor: '#ff3b32', + success: function(res) { + if (res.confirm) { + uni.showLoading({ + title: '正在加载中...' + }) + logoservice.MachineSavePartnerStock({ + m: 'Machine/saveStock', + id: item.id, + machine_id: _this.queryPage.machine_id, + goods_id: item.goods_id, + goods_size: item.goods_size, + stock: item.stock, + dict_id: item.dict_id + }).then(result => { + uni.hideLoading(); + uni.showToast({ + title: "修改成功", + icon: 'none' + }); + _this.StcokList[index].stock = item.stock; + }).catch(err => { + uni.hideLoading(); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + } else if (res.cancel) { + + } + } + }); + }, + + //获取底部弹框数据 + loadStockGoodsList(goods_name) { + logoservice.MachineStockGoodsList({ + m: 'Machine/getStockGoodsList', + machine_id: this.queryPage.machine_id, + goods_name: goods_name, + }).then(result => { + this.GoodsItem = result; + uni.hideLoading(); + }).catch(err => { + uni.hideLoading(); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + }, + + previewImageOne(item) { + var current = e; //这里获取到的是一张本地的图片 + }, + + setData(obj) { + let that = this; + let keys = []; + let val, data; + Object.keys(obj).forEach(function(key) { + keys = key.split('.'); + val = obj[key]; + data = that.$data; + keys.forEach(function(key2, index) { + if (index + 1 == keys.length) { + that.$set(data, key2, val); + } else { + if (!data[key2]) { + that.$set(data, key2, {}); + } + } + data = data[key2]; + }) + }); + }, + + reprint(e, index) { + //console.log(e) + //console.log(index) + }, + + chooseImage: async function() { + if (this.$base.Userres.be_child == 1) return; + var _this = this + uni.chooseImage({ + sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有 + sourceType: ['camera', 'album'], //从相册选择 + count: 1, + success: (res) => { + let tempFilePaths = res.tempFilePaths; + uni.showLoading({ + title: '图片正在上传...' + }) + uni.uploadFile({ + url: 'https://tprint.refinecolor.com/partnerapplets/index', + filePath: tempFilePaths[0], + method: 'POST', + name: 'file', + header: { + 'content-type': 'multipart/form-data' + }, + formData: { + m: 'Upload/upload' + }, //请求额外的form data + success: function(res) { + logoservice.MachinesaveCover({ + m: 'Machine/saveCover', + machine_id: _this.queryPage.machine_id, + cover: JSON.parse(res.data).data.url + }).then(result => { + uni.hideLoading(); + uni.showToast({ + title: '上传成功', + icon: 'none', + duration: 3000 + }) + _this.listdetail() + }).catch(err => { + uni.hideLoading(); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + }, + fail: function(res) { + console.log(res); + uni.hideLoading(); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + } + }) + } + }) + }, + + //预览图片 + previewImage(imgs, list) { + let listattr = [] + list.forEach(item => { + listattr.push(item.works_image) + }) + var current = imgs.works_image; //这里获取到的是一张本地的图片 + wx.previewImage({ + current: current, // 当前显示图片的http链接 + urls: listattr // 需要预览的图片http链接列表 + }) + }, + + datatimeLimited(time) { + return new Date(time.replace(/-/g, "/"))._format('HH:mm:ss'); + }, + + category(id) { + var dataname = ''; + if (this.shopList) { + this.shopList.forEach(item => { + if (item.id == id) { + dataname = item.short_name + } + }); + } + return dataname + }, + + categoryaddress(address) { + var dataaddress = ''; + if (this.shopList) { + this.shopList.forEach(item => { + if (item.id == address) { + dataaddress = item.address.replace('<br/>', ''); + } + }); + } + return dataaddress + }, + + //店铺 + showPicker(item) { + if (this.$base.Userres.be_child == 1) return; + this.pickerValueArray = this.shopList + this.pickerValueArray.filter(item => { + item.label = item.short_name + item.value = item.id + }); + this.$refs.mpvuePicker.show(); + }, + + //确定 + onConfirm(e) { + uni.showLoading({ + title: '正在关联中...' + }) + logoservice.Machinelistdetail({ + m: 'Machine/bindShop', + machine_id: this.queryPage.machine_id, + shop_id: e.value[0] + }).then(result => { + uni.hideLoading(); + uni.showToast({ + title: '关联店铺成功', + icon: 'none' + }); + this.listdetail() + }).catch(err => { + uni.hideLoading(); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + }, + + onChange(e) { + + }, + + onCancel(e) { + + }, + + profit() { + uni.navigateTo({ + url: '../mall/eq-profit?machineid=' + this.list.id, + }); + }, + + toorder() { + uni.navigateTo({ + url: '../mine/order?machineid=' + this.list.id, + }); + }, + + tapTab(tab) { + this.currentTab = tab; + if (this.currentTab.code == 0) { + this.listdetail() + } + if (this.currentTab.code == 1) { + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + this.LoupanList = [] + this.queryPage.page = 1; + this.queryPage.total = 0; + this.loadGoodsList(Enums.DATA_DIRECTION.UP); + } + if (this.currentTab.code == 2) { + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + this.StcokList = [] + this.queryPage.page = 1; + this.queryPage.total = 0; + this.getStockData(); + } + }, + + //设备挂起 + onSefaultStatus(e) { + this.list.flag.value = e.detail.value ? 'N' : 'Y'; + if (e.detail.value == true) { + uni.showLoading({ + title: '设备挂起中...' + }) + } else { + uni.showLoading({ + title: '设备恢复中...' + }) + } + logoservice.Machinestatus({ + m: 'Machine/status', + machine_id: this.queryPage.machine_id + }).then(result => { + uni.hideLoading(); + if (e.detail.value == true) { + uni.showToast({ + title: '挂起成功' + }) + } else { + uni.showToast({ + title: '恢复成功' + }) + } + }).catch(err => { + uni.hideLoading(); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + if (this.list.flag.value == 'N') { + this.list.flag.value = 'Y' + } else if (this.list.flag.value == 'Y') { + this.list.flag.value = 'N' + } + }) + }, + + //设备列表详情 + listdetail() { + uni.showLoading({ + title: '正在加载中...' + }); + logoservice.Machinelistdetail({ + m: 'Machine/list', + machine_id: this.queryPage.machine_id + }).then(result => { + + uni.stopPullDownRefresh(); + uni.hideLoading(); + if (result[0] != undefined) { + this.list = result[0] + if (this.list.show_clean) { + this.show_clean = this.list.show_clean + } + if (this.list.clear_time) { + this.clear_time = this.list.clear_time + } + if (this.list.edition != null && this.list.edition.mark == 'standard') { + this.print_type = 0; + } else if (this.list.edition != null && this.list.edition.mark == + 'unlimited') { + this.print_type = 1; + } + let ink = this.list.ink; + if (ink.length >= 6) { + this.inkStatusC = ink.substring(0, 1) == 0 ? true : false; + this.inkStatusM = ink.substring(1, 2) == 0 ? true : false; + this.inkStatusY = ink.substring(2, 3) == 0 ? true : false; + this.inkStatusK = ink.substring(3, 4) == 0 ? true : false; + this.inkStatusW = ink.substring(4, 5) == 0 ? true : false; + this.inkStatusHas = ink.substring(5, 6) == 0 ? true : false; + } + this.list.default_package.create_date = this.dateFormat(this.list + .default_package + .expire_date); + if (this.list.machine_category_id == 63) { + this.tabBars = [{ + code: 0, + name: '机器' + }, + { + code: 1, + name: '打印' + }, + { + code: 2, + name: '库存' + }, + ], + this.list.isSinglePlatep = false; + } + } + }).catch(err => { + uni.hideLoading(); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + }, + + //设备打印信息 加载数据 + loadGoodsList(direction) { + if (this.dataLoadState.pullDownRefresh || this.dataLoadState.reachBottom) return; + uni.showLoading({ + title: '正在加载中...' + }) + this.dataLoadState.pullDownRefresh = direction === Enums.DATA_DIRECTION.UP; + this.dataLoadState.reachBottom = direction === Enums.DATA_DIRECTION.DOWN; + if (this.dataLoadState.reachBottom) { + if (Math.ceil(this.queryPage.total / this.queryPage.per_page) < this.queryPage.page) { + return setTimeout(() => { + uni.showToast({ + title: '没有更多数据了!', + icon: 'none' + }); + }, 500); + } + } + logoservice.Machinelist(this.queryPage).then(result => { + this.long = true + let queryList = result.data.data + //下拉更新时,查询结果集 + //触底更新时,当前列表+查询结果集 + let newList = this.LoupanList.concat(queryList) + this.LoupanList = newList + //分页对象处理 + this.queryPage.total = result.data.total; + this.queryPage.per_page = result.data.per_page; + //停止当前页面下拉刷新 + if (this.dataLoadState.pullDownRefresh) uni.stopPullDownRefresh(); + //数据加载状态处理 false + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + uni.hideLoading(); + }).catch(err => { + //停止当前页面下拉刷新 + if (this.dataLoadState.pullDownRefresh) uni.stopPullDownRefresh(); + //数据加载状态处理 false + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + uni.hideLoading(); + }); + }, + + //做滚动加载使用 + loadMore() { + if (this.isTouchStart || this.currentTab.code == 0) { + return; + } + if (Math.ceil(this.queryPage.total / this.queryPage.per_page) < this.queryPage.page) { + return setTimeout(() => { + uni.showToast({ + title: '没有更多数据了!', + icon: 'none' + }); + }, 500); + } + this.queryPage.page = this.queryPage.page + 1; + if (this.currentTab.code == 1) { + this.loadGoodsList(Enums.DATA_DIRECTION.DOWN); + } + if (this.currentTab.code == 2) { + this.loadStockList(Enums.DATA_DIRECTION.DOWN) + } + }, + + //获取日期 + getToday() { + let myDate = new Date(); + let myMonth = myDate.getMonth() + 1; + if (myMonth < 10) { + myMonth = '0' + myMonth; //补齐 + } + let mydate = myDate.getDate(); + if (myDate.getDate() < 10) { + mydate = '0' + myDate.getDate(); //补齐 + } + this.queryPage.date = myDate.getFullYear() + '-' + myMonth + '-' + mydate; + }, + + //获取月份 + getMonth() { + let myDate = new Date(); + let myMonth = myDate.getMonth() + 1; + if (myMonth < 10) { + myMonth = '0' + myMonth; //补齐 + } + this.queryPage.month = myDate.getFullYear() + '-' + myMonth; + }, + + //获取店铺数据 + machineGetShopList() { + logoservice.MachineGetShop(this.shopQueryPage).then(result => { + if (result != null && result != undefined) { + this.shopList = result; + } + }).catch(err => { + + }); + }, + + //goodsItem加载全部交易类型数据 + getGoodsAttrList() { + logoservice.MoneystatementList({ + m: 'Machine/printRecord', + machine_id: this.queryPage.machine_id, + sub: 1 + }).then(result => { + + }).catch(res => { + uni.showToast({ + title: res.msg ? res.msg : '未查到交易类型选择', + icon: 'none' + }); + }); + }, + }, + + //下拉加载 + onPullDownRefresh() { + if (this.isTouchStart) { + return; + } + if (this.currentTab.code == 0) { + this.listdetail() + } + if (this.currentTab.code == 1) { + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + this.queryPage.page = 1; + this.queryPage.total = 0; + this.LoupanList = [] + this.loadGoodsList(Enums.DATA_DIRECTION.UP); + } + if (this.currentTab.code == 2) { + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + this.queryPage.page = 1; + this.queryPage.total = 0; + this.StcokList = [] + this.loadStockList(Enums.DATA_DIRECTION.UP); + } + uni.stopPullDownRefresh(); + }, + + //上拉加载 + onReachBottom() { + if (this.currentTab.code == 0 || this.isTouchStart) { + return; + } + if (this.LoupanList.length < 6) { + return setTimeout(() => { + uni.showToast({ + title: '没有更多数据了!', + icon: 'none' + }); + }, 500); + } + this.queryPage.page = this.queryPage.page + 1; + if (this.currentTab.code == 1) { + this.loadGoodsList(Enums.DATA_DIRECTION.DOWN) + } + }, + + onLoad(options) { + //设置时间 + let that = this; + uni.getSystemInfo({ + success(res) { + that.autoCleanLeft = res.windowWidth - 100; + that.autoCleanTop = res.windowHeight - 180; + } + }); + this.getMonth(); + this.printingPickerValueArray = ['month']; + this.queryPage.machine_id = options.id + //logoservice.setwixinInfo(result); + + this.listdetail(); + this.attr = "全部打印类型"; + this.queryPage.is_excess = null; + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + this.queryPage.page = 1; + this.queryPage.total = 0; + this.LoupanList = [] + this.loadGoodsList(Enums.DATA_DIRECTION.UP); + + + + // uni.login({ + // provider: 'weixin', + // success: (res) => { + // logoservice.login({ + // m: 'Init/init', + // code: res.code + // }).then(result => { + // that.$base.Userres = result //记录用户登录信息 + // that.Userres_partner_id = that.$base.Userres.partner_id //总代理 + // that.is_inner = that.$base.Userres.is_inner + // logoservice.setwixinInfo(result); + // that.listdetail(); + + // that.attr = "全部打印类型"; + // that.queryPage.is_excess = null; + // that.dataLoadState.pullDownRefresh = false; + // that.dataLoadState.reachBottom = false; + // that.queryPage.page = 1; + // that.queryPage.total = 0; + // that.LoupanList = [] + // that.loadGoodsList(Enums.DATA_DIRECTION.UP); + + // }).catch(err => { + // uni.navigateTo({ + // url: 'login', + // }); + // }) + // }, + // fail: (err) => { + // //console.error('授权登录失败:' + JSON.stringify(err)); + // } + // }); + }, + onShow() { + this.isTouchStart = false; + if (this.$base != null && this.$base.Userres != null) { + this.be_child = this.$base.Userres.be_child //子代理 + } + } + }; +</script> + +<style lang="scss"> + .eq-detail-score { + padding: 40upx 0; + width: 100%; + height: 210upx; + margin: 0upx auto; + background: #43CF7C; + border-radius: 20upx; + display: flex; + align-items: center; + font-size: 26upx; + color: #fff; + } + + .green { + background-color: #4FB36B !important; + color: #FFFFFF; + } + + /*无数据 */ + .noData { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + } + + .noData_img { + width: 260upx; + height: 260upx; + display: block; + margin: 0upx auto 102upx; + } + + .noData_title { + text-align: center; + font-size: 36upx; + } + + .noData_text { + margin-top: 35upx; + font-size: 30upx; + font-weight: 400; + } + + .noData_but { + width: 230upx; + height: 70upx; + line-height: 70upx; + text-align: center; + color: #F56364; + margin: 140upx auto 0; + border: 1upx solid #F56364; + border-radius: 35upx; + } + + /* 去除button默认样式 */ + button::after { + border: none; + } + + button { + background-color: transparent; + padding-left: 0; + padding-right: 0; + line-height: inherit; + } + + .lang-open { + transform: rotate(90deg); + transition: transform 0.5s; + } + + .lang-close { + transform: rotateY(0deg); + transition: transform 0.5s; + } + + //2020-11-17 + .content-open { + height: 90upx; + overflow: hidden; + transition: all 0.4s cubic-bezier(0.25, 1.0, 0.25, 1.0); + } + + .content-close { + height: 0; + transition: all 0.4s cubic-bezier(0.25, 1.0, 0.25, 1.0); + } + + .item-open { + height: 40upx; + transition: all 0.4s cubic-bezier(0.25, 1.0, 0.25, 1.0); + } + + .item-close { + opacity: 0; + height: 0; + } + + /*输入框弹框显示 */ + .weui-search-bar { + position: relative; + padding: 8upx 10upx; + display: flex; + height: 135upx; + background: #FFFFFF; + align-items: center; + } + + .weui-search-bar_form { + width: 100%; + border-radius: 50upx; + background: #F6F6F6; + } + + .weui-search-bar_input { + height: 80upx; + line-height: 80upx; + font-size: 25upx; + padding-left: 24upx; + } + + /* 底部弹框显示 */ + .uni-pop_show { + display: flex; + flex-direction: column; + } + + .uni-calendar-item--isDay-text.data-v-09f1e40c { + color: #5CE6B5 !important; //5CE6B5 + } + + .uni-calendar-item--isDay.data-v-09f1e40c { + background: #5CE6B5 !important; + color: #fff !important; + } + + .uni-calendar-item--checked.data-v-09f1e40c { + background: #5CE6B5 !important; + color: #fff !important; + } + + .uni-numbox__value { + width: 120upx !important; + } + + page { + width: 100%; + height: 100%; + background: #F5F5F5; + } + + .eq_list_button { + display: flex; + flex-direction: row; + line-height: 60upx; + padding-bottom: 20upx; + } + + .eq_list_button_ul { + flex: 1; + } + + .eq_list_button_li { + margin: auto; + font-size: 24upx; + color: #FFFFFF; + width: 150upx; + font-weight: bold; + text-align: center; + line-height: 60upx; + height: 60upx; + background-color: #5CE6B6; + } + + .uni-swiper-tab { + border-bottom: 1upx solid #F5F5F5; + } + + .clean-bt { + border-radius: 50%; + width: 200upx; + height: 200upx; + bottom: 160upx; + right: 20upx; + position: fixed; + font-size: 27upx; + text-align: center; + line-height: 130upx; + z-index: 99991; + justify-content: center; + align-items: center; + } + + .order { + width: 100%; + height: 100%; + + .uni-tab-bar { + height: auto !important; + + .uni-swiper-tab { + position: fixed; + top: var(--window-top); + z-index: 999; + width: 100%; + line-height: 85upx; + height: 85upx; + + .swiper-tab-list { + width: calc(100% / 3); + font-size: 30upx; + } + } + + .active { + color: #43CF7C; + } + } + + .way-list { + margin: 0 20upx; + padding-top: 20upx; + border-radius: 10upx; + + .topBox { + width: calc(100% - 60upx); + margin-left: 30upx; + margin-top: 15upx; + justify-content: center; + } + + .topLittleBOX-1 { + font-size: 26upx; + width: 120upx; + color: #333; + overflow: text-align; + } + + .topLittleBOX-2 { + padding-left: 20upx; + padding-top: auto; + padding-bottom: auto; + display: flex; + vertical-align: middle; + flex-direction: row; + align-items: center; + width: calc(100% - 120upx); + position: relative; + } + + .row-1 { + height: 30upx; + background-color: #43CF7C; + border-radius: 20upx; + width: 0upx; + transition: width 1.5s linear; + } + + .rowText { + margin-left: 10upx; + font-size: 26upx; + color: #333; + float: right; + } + + .way-item { + background: #FFFFFF; + border-radius: 10upx; + margin-bottom: 20upx; + } + + .way { + height: 120upx; + min-height: 90upx; + display: flex; + align-items: center; + font-size: 28upx; + + .text { + width: 250upx; + padding-left: 20upx; + } + + .value { + width: calc(100% - 280upx); + display: flex; + + .prick { + width: calc(100% - 40upx); + } + + .fa-angle-right { + width: 40upx; + font-size: 50upx; + } + } + } + } + + .content { + padding-top: 20upx; + + .order-list { + min-height: 350upx; + margin-right: 5upx; + width: calc(100% - 5upx); + border-radius: 10upx; + + + + .item { + min-height: 35upx; + display: flex; + margin-left: 20upx; + align-items: center; + font-size: 28upx; + + .text { + width: 250upx; + /*padding-left: 25upx; */ + color: #353535; + } + + .value { + width: calc(100% - 280upx); + display: flex; + + .prick { + width: calc(100% - 40upx); + } + + .fa-angle-right { + width: 40upx; + font-size: 50upx; + } + } + } + } + } + } + + .print-score { + width: 100%; + height: 280upx; + background: #43CF7C; + border-radius: 20upx; + display: flex; + align-items: center; + font-size: 26upx; + color: #fff; + + .print { + width: 100%; + + .text { + line-height: 50upx; + color: #fff; + } + } + } + + .list-clean { + height: 80upx; + background: #FFFFFF; + padding-left: 20upx; + padding-right: 23upx; + margin-top: 10upx; + border-radius: 15upx; + margin-left: 20upx; + margin-right: 15upx; + padding-top: 18upx + } +</style> \ No newline at end of file diff --git a/pages/mall/profit.vue b/pages/mall/profit.vue new file mode 100644 index 0000000..f621373 --- /dev/null +++ b/pages/mall/profit.vue @@ -0,0 +1,421 @@ +<template> + <view class="full-width content-color full-height" style="position: relative;"> + <view class="full-width"> + <!-- 动态数据 --> + <view + style="display: flex; flex-direction: row;width: calc(100% - 40upx); height: 60upx; background: #fff; margin-left: 20upx; "> + <view @click="selectDayData(1)" style="width: 50%; line-height: 60upx; text-align: center;" :style="{ + background : selectDay ? '#333' : '#fff', color: selectDay ? '#fff' : '#333'}"> + 每日 + </view> + <view @click="selectDayData(2)" style="width: 50%; line-height: 60upx; text-align: center; " :style="{ + background : selectDay ? '#fff' : '#333', color: selectDay ? '#333' : '#fff'}"> + 每月 + </view> + </view> + + <view scroll-y @scrolltolower="loadMore()" class="full-width" @touchend="touchEnd" v-if="long"> + <view v-for="(item, index) in LoupanList" :key="index" class="eq_list" @click="refundNumorder(item)"> + + <view class="eq_list_div"> + <view> + <view style="font-size: 36upx;font-weight: 600;color: #333; margin-top: 8upx;">{{item.day}} + </view> + <view style="display: flex; flex-direction: row; margin-top: 10upx; height: 55upx;"> + + <!-- {{item.valid_num} } --> + <view style="font-size:48upx;font-weight: 600; color: #00B83AFF;" + :style="{color:item.valid_num > 0 ? '#00B83AFF' :'#FB1B1B'}"> {{item.valid_num}} + </view> + + <view style="display: flex; flex-direction: row;align-items: flex-end; height: 100%; + margin-left: 5upx;"> + <view style="font-size: 35upx;font-weight: 600; color: #333; ">单</view> + <view style="font-size: 26upx;color: #999999; margin-left: 12upx; "> + 全部{{item.pay_num}}单</view> + </view> + + </view> + </view> + <view :class="item.isShowPullButtom ? 'lang-open' : 'lang-close'" + style="margin-left: auto; margin-right: 20upx;"> + <label class="fa fa-angle-right align-right sub-color" style="font-size: 40upx;"></label> + </view> + </view> + </view> + + <!-- 暂无相关信息 --> + <view class="align-center content-color" + style="position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%);" + v-if="LoupanList.length == 0 || LoupanList.length == null"> + <span class="iconfont icon-wushuju" + style="font-size: 100upx; text-align: center; color: #B2B2B2;"></span> + <view style="color: #B2B2B2; text-align: center; line-height: 50upx;font-size: 23upx;">暂无相关信息</view> + </view> + </view> + + </view> + <!-- 返回顶部 --> + <view v-if="totopstatus" class="to-top content-color" @click="totop()"> + <view class="fa fa-angle-right to-top-icon"></view> + </view> + </view> +</template> + +<script> + import uniIcon from '@/components/uni-icon/uni-icon.vue'; + import Enums from '@/util/Enums'; + import uniPopup from '../index/common/uni-popup/uni-popup.vue'; + // 自定义底部 + import foot from '../../components/foot.vue'; + import logoservice from '@/service/logoservice.js'; + export default { + components: { + uniIcon, + foot, + uniPopup + }, + computed: { + + }, + data() { + return { + msg: "", + error: true, + stockValue: "", + stockCount: "", + long: false, + LoupanList: [], //数据 + //返回顶部 + totopstatus: false, + //上拉状态 + dataLoadState: { + pullDownRefresh: false, + reachBottom: false + }, + queryPage: { + m: 'Money/receiveOrderList', + page: 1, + per_page: 12, + count: 0, + machine_id: "" + }, + nameInput: null, + isOnclickItem: false, //是否点击item + showshareitem: null, + showshareindex: null, + proxy: 0, //proxy,0我的订单,1代理订单 默认是0 + selectDay: true, //选择月份 + typeSelect: 0, //0 显示全部 1 显示日 2 显示月 + dateStr: '', + time: '', + week: '' + }; + }, + + methods: { + //选择月份 type = 1 //天 type = 2 月 + selectDayData(type) { + if (type == 1) { + this.selectDay = true + } else { + this.selectDay = false + } + this.LoupanList = [] + this.queryPage.page = 1; + this.queryPage.count = 0; + this.loadGoodsList(Enums.DATA_DIRECTION.UP, type); + }, + + //点击调转订单页面 + refundNumorder(e) { + if (this.selectDay) { + uni.navigateTo({ + url: '/pages/mine/order?day=' + e.day + "&proxy=" + this.proxy + "&is_pay=1&machineid=" + + this.queryPage.machine_id, + }); + } else { + uni.navigateTo({ + url: '/pages/mine/order?month=' + e.day + "&proxy=" + this.proxy + + "&is_pay=1&is_pay=1&machineid=" + this.queryPage.machine_id, + }); + } + }, + + timeDayFormat() { + var dateTime = new Date(); + //获得系统年份; + var year = dateTime.getFullYear(); + //获得系统月份; + var month = dateTime.getMonth() + 1; + //获得系统当月分天数; + var day = dateTime.getDate(); + //打印完整的系统日期; + return year + '-' + month + '-' + day + ' '; + }, + + loadGoodsList(direction, type) { + if (this.dataLoadState.pullDownRefresh || this.dataLoadState.reachBottom) return; + uni.showLoading({ + title: '正在加载中...', + mask: true + }) + this.dataLoadState.pullDownRefresh = direction === Enums.DATA_DIRECTION.UP; + this.dataLoadState.reachBottom = direction === Enums.DATA_DIRECTION.DOWN; + if (this.dataLoadState.reachBottom) { + if (Math.ceil(this.queryPage.count / this.queryPage.per_page) < this.queryPage.page) { + return setTimeout(() => { + uni.showToast({ + title: '没有更多数据了!', + icon: 'none' + }); + }, 500); + } + } + //machineOrderListByMonth + //machineOrderListByMonth + if (type == 1) { + this.queryPage.m = "Money/machineOrderList"; //receiveOrderListByMonth //Money/machineOrderList + } else { + this.queryPage.m = "Money/machineOrderListByMonth"; //Money/machineOrderListByMonth + } + logoservice.receiveMoneyList(this.queryPage).then(result => { + this.long = true + let queryList = result.data + + //下拉更新时,查询结果集 + //触底更新时,当前列表+查询结果集 + let newList = this.LoupanList.concat(queryList) + + if (type != 1) { + newList.forEach(itemData => { + itemData.day = itemData.month + }); + } + // if (this.typeSelect == 1) { + // let dayListData = []; + // if (newList != null && newList.length > 0) { + // var daytime = this.timeDayFormat(); + // for (var i = 0; i < newList.length; i++) { + // var itemData = newList[i]; + // if (itemData.day == daytime) { + // dayListData.push(itemData) + // } + // break; + // } + // } + // newList = dayListData + // } + + + this.LoupanList = newList + + //分页对象处理 + this.queryPage.count = result.count; + this.queryPage.per_page = result.per_page; + //停止当前页面下拉刷新 + if (this.dataLoadState.pullDownRefresh) uni.stopPullDownRefresh(); + //数据加载状态处理 false + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + uni.hideLoading(); + //uni.showToast({ title: '加载成功', icon: 'none' }); + }).catch(err => { + //停止当前页面下拉刷新 + if (this.dataLoadState.pullDownRefresh) uni.stopPullDownRefresh(); + // 数据加载状态处理 false + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + uni.hideLoading(); + }); + }, + //返回顶部 + totop() { + uni.pageScrollTo({ + scrollTop: 0, + duration: 300 + }); + this.totopstatus = false + }, + touchEnd(e) { + if (e.mp.changedTouches[0].pageY > 1000) { + this.totopstatus = true + } else { + this.totopstatus = false + } + }, + //做滚动加载使用 + loadMore() { + if (Math.ceil(this.queryPage.count / this.queryPage.per_page) < this.queryPage.page) { + return setTimeout(() => { + uni.showToast({ + title: '没有更多数据了!', + icon: 'none' + }); + }, 500); + } + this.queryPage.page = this.queryPage.page + 1; + this.loadGoodsList(Enums.DATA_DIRECTION.DOWN); + }, + }, + //下拉加载 + onPullDownRefresh() { + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + this.queryPage.page = 1; + this.queryPage.count = 0; + this.LoupanList = [] + var type = 1; + if (this.selectDay) { + type = 1 + } else { + type = 2 + } + this.loadGoodsList(Enums.DATA_DIRECTION.UP, type); + }, + //上拉加载 + onReachBottom() { + + }, + onLoad(options) { + console.log(options); + //this.proxy = options.proxy + if (this.proxy) { + this.proxy = options.proxy + } + + if (options.machine_id) { + this.queryPage.machine_id = options.machine_id + } + if (options.type) { + this.typeSelect = options.type; + if (this.typeSelect == 1) { + this.selectDay = true + } else { + this.selectDay = false + } + } + this.LoupanList = [] + this.queryPage.page = 1; + this.queryPage.count = 0; + var type = 1; + if (this.selectDay) { + type = 1 + } else { + type = 2 + } + + this.LoupanList = [] + this.queryPage.page = 1; + this.queryPage.count = 0; + var type = 1; + if (this.selectDay) { + type = 1 + } else { + type = 2 + } + + + + this.LoupanList = [] + this.queryPage.page = 1; + this.queryPage.count = 0; + var type = 1; + if (this.selectDay) { + type = 1 + } else { + type = 2 + } + this.loadGoodsList(Enums.DATA_DIRECTION.UP, type); + + + + /* uni.login({ + provider: 'weixin', + success: (res) => { + logoservice.login({ + m: 'Init/init', + code: res.code + }).then(result => { + logoservice.setwixinInfo(result); + this.LoupanList = [] + this.queryPage.page = 1; + this.queryPage.count = 0; + var type = 1; + if (this.selectDay) { + type = 1 + } else { + type = 2 + } + + this.loadGoodsList(Enums.DATA_DIRECTION.UP, type); + }).catch(err => { + uni.navigateTo({ + url: 'login', + }); + }) + }, + fail: (err) => { + console.error('授权登录失败:' + JSON.stringify(err)); + } + }); */ + }, + onShow() { + + } + }; +</script> + +<style lang="scss"> + /* 去除button默认样式 */ + button::after { + border: none; + } + + button { + background-color: transparent; + padding-left: 0; + padding-right: 0; + line-height: inherit; + } + + page { + width: 100%; + height: 100%; + background: #FFFFFF; + } + + .eq_list { + width: 94%; + margin: 20upx auto; + border-radius: 10upx; + overflow: hidden; + + .eq_list_div { + background: #FFFFFF; + padding: 20upx 30upx; + display: flex; + align-items: center; + } + } + + //返回顶部 + .to-top { + position: fixed; + bottom: 150upx; + right: 30upx; + width: 80upx; + height: 80upx; + border-radius: 50%; + text-align: center; + line-height: 80upx; + transform: rotate(-90deg); + background: #000; + opacity: 0.5; + z-index: 999; + } + + .to-top-icon { + color: #FFFFFF; + } +</style> \ No newline at end of file diff --git a/pages/mall/related-template.vue b/pages/mall/related-template.vue new file mode 100644 index 0000000..9f8a42a --- /dev/null +++ b/pages/mall/related-template.vue @@ -0,0 +1,631 @@ +<template> + <view class="order full-height full-width"> + + <view class="uni-tab-bar full-width"> + + <view scroll-y @scrolltolower="loadMore()" class="full-width content" v-if="long" + style="padding-bottom: 20upx; overflow: auto; width: 100%;height: 100%; background: #fff;"> + + <view class="order-list"> + + <view class="item-new-list"> + <view class="item full-width"> + <label class="text content-color">设备编号</label> + <label class="value content-color"> + <text style="text-align: right;" class="full-width">{{queryPage.machine_id}}</text> + </label> + </view> + </view> + + + <view class="item-new-list-text">模版功能仅对部分机型有效。开启对应的模板,设备即可实现当前商品的自动校对位置</view> + + <view class="item-new-list"> + + + <view v-for="(item, index) in list" :key="index"> + <view class="item full-width"> + <label class="text content-color">{{item.name}}</label> + <switch :checked="item.flag == 1 ? true :false" @change="onSwitchChange($event,item)" + class="item-new-list-switch" /> + </view> + </view> + + + + </view> + + + </view> + + </view> + </view> + + </view> +</template> + +<script> + import uniIcon from '@/components/uni-icon/uni-icon.vue'; + import uniPopup from '../index/common/uni-popup/uni-popup.vue'; + import Enums from '@/util/Enums'; + import foot from '../../components/foot.vue'; + import logoservice from '@/service/logoservice.js'; + let Base64 = require('js-base64').Base64; + export default { + components: { + uniPopup, + uniIcon, + foot, + }, + computed: { + + }, + data() { + return { + long: false, + isSinglePlatep: true, + isShowPullButtom: false, + isOnclickItem: false, + numberlist: [], + LoupanList: [], + SortNumber: 1, + StcokList: [], + StcokLists: [], + list: null, + selectItem: null, + mode: 'selector', + pickerValueArray: [], + pickerValueDefault: [0], + type: 'bottom', + dataLoadState: { + pullDownRefresh: false, + reachBottom: false + }, + queryPage: { + m: 'Machine/printRecord', + machine_id: null, + page: 1, + per_page: 20, + total: 0, + date: null, + month: null, + year: null, + is_excess: null, + }, + shopQueryPage: { + m: 'Machine/getShop', + }, + attr: null, + showshareitem: null, + showshareindex: null, + printingPickerValueArray: [], + printingpickerValueDefault: [0], + maxnumber: 12, + maxlength: 2, + be_child: 0, //子代理 + Userres_partner_id: null, //总代理 + is_inner: null, //恢复订单打印 + print_type: 0, //默认0标准版 1无限版 + shopList: null, //店铺列表数据 + isShowPop: false, + }; + }, + + methods: { + + + //开关修改 + onSwitchChange(e, item) { + if (e.detail.value == true) { + item.flag = 1; + uni.showLoading({ + title: '开启中...' + }) + } else { + item.flag = 0; + //this.getSwitchCheck(type, false) + uni.showLoading({ + title: '关闭中...' + }) + } + logoservice.Machinestatus({ + m: 'Machine/machineCanvasSave', + machine_id: this.queryPage.machine_id, + canvas_size_id: item.id, + }).then(result => { + uni.hideLoading(); + if (e.detail.value == true) { + uni.showToast({ + title: '开启成功' + }) + } else { + uni.showToast({ + title: '关闭成功' + }) + } + }).catch(err => { + uni.hideLoading(); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + if (e.detail.value == true) { + item.flag = 0; + } else { + item.flag = 1; + } + }) + }, + + + + onChange(e) { + + }, + + onCancel(e) { + + }, + + + //设备列表详情 + goodList() { + uni.showLoading({ + title: '正在加载中...' + }); + logoservice.Machinelistdetail({ + m: 'Machine/machineCanvas', + machine_id: this.queryPage.machine_id + }).then(result => { + this.long = true + uni.stopPullDownRefresh(); + uni.hideLoading(); + + this.list = result; + + }).catch(err => { + uni.hideLoading(); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + }, + + + }, + + onPullDownRefresh() { + + }, + + onReachBottom() { + + }, + + onLoad(options) { + + this.queryPage.machine_id = options.machineid + this.goodList(); + }, + + onShow() { + + } + + }; +</script> + +<style lang="scss"> + page { + width: 100%; + height: 100%; + background: #fff; + } + + .eq-detail-score { + padding: 40upx 0; + width: 100%; + height: 210upx; + margin: 0upx auto; + background: #43CF7C; + border-radius: 20upx; + display: flex; + align-items: center; + font-size: 26upx; + color: #fff; + } + + .green { + background-color: #4FB36B !important; + color: #FFFFFF; + } + + /*无数据 */ + .noData { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + } + + .noData_img { + width: 260upx; + height: 260upx; + display: block; + margin: 0upx auto 102upx; + } + + .noData_title { + text-align: center; + font-size: 36upx; + } + + .noData_text { + margin-top: 35upx; + font-size: 30upx; + font-weight: 400; + } + + .noData_but { + width: 230upx; + height: 70upx; + line-height: 70upx; + text-align: center; + color: #F56364; + margin: 140upx auto 0; + border: 1upx solid #F56364; + border-radius: 35upx; + } + + /* 去除button默认样式 */ + button::after { + border: none; + } + + button { + background-color: transparent; + padding-left: 0; + padding-right: 0; + line-height: inherit; + } + + .lang-open { + transform: rotate(90deg); + transition: transform 0.5s; + } + + .lang-close { + transform: rotateY(0deg); + transition: transform 0.5s; + } + + //2020-11-17 + .content-open { + height: 90upx; + overflow: hidden; + transition: all 0.4s cubic-bezier(0.25, 1.0, 0.25, 1.0); + } + + .content-close { + height: 0; + transition: all 0.4s cubic-bezier(0.25, 1.0, 0.25, 1.0); + } + + .item-open { + height: 40upx; + transition: all 0.4s cubic-bezier(0.25, 1.0, 0.25, 1.0); + } + + .item-close { + opacity: 0; + height: 0; + } + + /*输入框弹框显示 */ + .weui-search-bar { + position: relative; + padding: 8upx 10upx; + display: flex; + height: 135upx; + background: #FFFFFF; + align-items: center; + } + + .weui-search-bar_form { + width: 100%; + border-radius: 50upx; + background: #F6F6F6; + } + + .weui-search-bar_input { + height: 80upx; + line-height: 80upx; + font-size: 25upx; + padding-left: 24upx; + } + + /*底部弹框显示 */ + .uni-pop_show { + display: flex; + flex-direction: column; + } + + .uni-calendar-item--isDay-text.data-v-09f1e40c { + color: #5CE6B5 !important; //5CE6B5 + } + + .uni-calendar-item--isDay.data-v-09f1e40c { + background: #5CE6B5 !important; + color: #fff !important; + } + + .uni-calendar-item--checked.data-v-09f1e40c { + background: #5CE6B5 !important; + color: #fff !important; + } + + .uni-numbox__value { + width: 120upx !important; + } + + page { + width: 100%; + height: 100%; + background: #F5F5F5; + } + + .eq_list_button { + display: flex; + flex-direction: row; + line-height: 60upx; + padding-bottom: 20upx; + } + + .eq_list_button_ul { + flex: 1; + } + + .eq_list_button_li { + margin: auto; + font-size: 24upx; + color: #FFFFFF; + width: 150upx; + font-weight: bold; + text-align: center; + line-height: 60upx; + height: 60upx; + background-color: #5CE6B6; + } + + .uni-swiper-tab { + border-bottom: 1upx solid #F5F5F5; + } + + .clean-bt { + border-radius: 50%; + width: 200upx; + height: 200upx; + bottom: 160upx; + right: 20upx; + position: fixed; + font-size: 27upx; + text-align: center; + line-height: 130upx; + z-index: 99991; + justify-content: center; + align-items: center; + } + + .order { + width: 100%; + height: 100%; + background-color: #fff; + + .uni-tab-bar { + height: auto !important; + + .uni-swiper-tab { + position: fixed; + top: var(--window-top); + z-index: 999; + width: 100%; + line-height: 85upx; + height: 85upx; + + .swiper-tab-list { + width: calc(100% / 3); + font-size: 30upx; + } + } + + .active { + color: #43CF7C; + } + } + + .way-list { + margin: 0 20upx; + padding-top: 20upx; + border-radius: 10upx; + + .topBox { + width: calc(100% - 60upx); + margin-left: 30upx; + margin-top: 15upx; + justify-content: center; + } + + .topLittleBOX-1 { + font-size: 26upx; + width: 120upx; + color: #333; + overflow: text-align; + } + + .topLittleBOX-2 { + padding-left: 20upx; + padding-top: auto; + padding-bottom: auto; + display: flex; + vertical-align: middle; + flex-direction: row; + align-items: center; + width: calc(100% - 120upx); + position: relative; + } + + .row-1 { + height: 30upx; + background-color: #43CF7C; + border-radius: 20upx; + width: 0upx; + transition: width 1.5s linear; + } + + .rowText { + margin-left: 10upx; + font-size: 26upx; + color: #333; + float: right; + } + + .way-item { + background: #FFFFFF; + border-radius: 10upx; + margin-bottom: 20upx; + } + + .way { + height: 120upx; + min-height: 90upx; + display: flex; + align-items: center; + font-size: 28upx; + + .text { + width: 250upx; + padding-left: 20upx; + color: #fff; + } + + .value { + width: calc(100% - 280upx); + display: flex; + + .prick { + width: calc(100% - 40upx); + } + + .fa-angle-right { + width: 40upx; + font-size: 50upx; + } + } + } + } + + .content { + padding-top: 10upx; + + .order-list { + min-height: 350upx; + width: 100%; + border-radius: 10upx; + + .item { + min-height: 70upx; + display: flex; + align-items: center; + font-size: 26upx; + border-bottom: 1upx solid #F5F5F5; + + .text { + width: 250upx; + color: #000; + font-size: 29upx; + } + + .value { + width: calc(100% - 120upx); + display: flex; + color: #888; + margin-top: 15upx; + margin-bottom: 15upx; + + + .prick { + width: calc(100% - 35upx); + } + + .fa-angle-right { + width: 30upx; + font-size: 50upx; + } + } + } + } + } + } + + .print-score { + width: 100%; + height: 280upx; + background: #43CF7C; + border-radius: 20upx; + display: flex; + align-items: center; + font-size: 26upx; + color: #fff; + + .print { + width: 100%; + + .text { + line-height: 50upx; + color: #fff; + } + } + } + + .list-clean { + height: 80upx; + background: #FFFFFF; + padding-left: 20upx; + padding-right: 23upx; + margin-top: 10upx; + border-radius: 15upx; + margin-left: 20upx; + margin-right: 15upx; + padding-top: 18upx; + } + + .item-new-list { + padding-top: 0upx; + padding-left: 30upx; + padding-right: 25upx; + background: #fff; + margin: 0upx 30upx 25upx 30upx; + border-radius: 20upx; + box-shadow: 0 0 10upx 10upx #F5F5F5; + color: #000; + } + + .item-new-list-text { + margin: -10upx 45upx 30upx 45upx; + color: #999; + font-size: 25upx; + width: calc(100% - 90upx); + } + + .content-color { + color: #fff; + } + + .item-new-list-switch { + float: right; + zoom: 0.6; + position: absolute; + right: 80upx + } +</style> \ No newline at end of file diff --git a/pages/mall/relevance-shop.vue b/pages/mall/relevance-shop.vue new file mode 100644 index 0000000..a1489d3 --- /dev/null +++ b/pages/mall/relevance-shop.vue @@ -0,0 +1,856 @@ +<template> + <view class="order full-height full-width"> + + <view class="uni-tab-bar full-width"> + + <view scroll-y @scrolltolower="loadMore()" class="full-width content" + style="margin-bottom: 20upx; overflow: auto; width: 100%;height: 100%;"> + <!-- 机器 --> + <view class="order-list"> + <view class="item-new-list"> + <view class="item full-width"> + <label class="text content-color">设备编号</label> + <label class="value content-color"> + <text style="text-align: right;" class="full-width">{{queryPage.machine_id}}</text> + </label> + </view> + </view> + + <view class="item-new-list" style="padding-top: 60upx;padding-bottom: 60upx;"> + <view style="color: #000; font-size: 70upx; font-weight: 500; text-align: center; " + @click="addShop()">+</view> + </view> + + <view class="item-new-list" v-if="list" > + <view class="item full-width" > + <label class="text content-color">店铺</label> + + <label class="value content-color"> + + <view v-if="shop_id" class="full-width" + style="width: 550upx; + height: 45upx; + border-radius: 8upx; + background: transparent; + position: absolute; + right: 40upx; + margin-top: -20upx;" @click="showPicker()"> + <view style="color: #000; margin-top: 10upx; font-size: 24upx;display: flex; justify-content: flex-end; width: 470upx; ">{{category(shop_id)}}</view> + <span class="iconfont icon-xiala"style="font-size: 20upx; + color: #999; + margin-right:10upx; + position: relative; + float: right; + right: 20upx; + top:-28upx"></span> + </view> + + <view style="text-align: right; color: #888888; line-height: 50upx;" class="full-width" v-if="!shop_id">没有关联店铺</view> + + </label> + </view> + </view> + <view class="item-new-list-text">关联具体的店铺,访问设备时将显示店铺的具体位置、营业时间,便以客户选择</view> + </view> + </view> + + <view class="save_bt" @click="saveShop()">确认</view> + + <!-- 店铺 --> + <mpvue-picker ref="mpvuePicker" :themeColor="'#53B2B0'" :mode="mode" + :pickerValueDefault="pickerValueDefault" @onChange="onChange" @onCancel="onCancel" + :pickerValueArray="pickerValueArray" @onConfirm="onConfirm"> + </mpvue-picker> + + + <view v-if="isTouchStart" style=" + position: fixed; + top: 0; + left: 0; + bottom: 0; + right: 0; + width: 100%; + height: 100%; + z-index: 9999;" @touchmove.prevent @mousewheel.prevent></view> + + </view> + </view> +</template> + +<script> + import uniIcon from '@/components/uni-icon/uni-icon.vue'; + import uniPopup from '../index/common/uni-popup/uni-popup.vue'; + import Enums from '@/util/Enums'; + import foot from '../../components/foot.vue'; + import mpvuePicker from '../../components/mpvue-picker/mpvuePicker.vue'; + import mpvuePickernew from '../../components/mpvue-picker/mpvuePickernew.vue'; + import logoservice from '@/service/logoservice.js'; + let Base64 = require('js-base64').Base64; + export default { + components: { + uniPopup, + uniIcon, + foot, + mpvuePicker, + mpvuePickernew + }, + computed: { + + }, + data() { + return { + long: false, + isSinglePlatep: true, //是否单机版 或者 配送版 + isShowPullButtom: false, //false不显示true显示 + isOnclickItem: false, //是否点击item + numberlist: [], + LoupanList: [], + SortNumber: 1, + StcokList: [], //设备库存列表 + StcokLists: [], + list: null, + getStockerCount: "", //设置输入个数 + selectItem: null, + mode: 'selector', + pickerValueArray: [], + pickerValueDefault: [0], + type: 'bottom', + //上拉状态 + dataLoadState: { + pullDownRefresh: false, + reachBottom: false + }, + queryPage: { + m: 'Machine/printRecord', + machine_id: null, + page: 1, + per_page: 20, + total: 0, + date: null, //日 + month: null, //月 + year: null, //日 + is_excess: null, //套餐选择类型 + }, + shopQueryPage: { + m: 'Machine/getShop', + }, + attr: null, + //商品库存 + showshareitem: null, + showshareindex: null, + //打印年月日 + printingPickerValueArray: [], + printingpickerValueDefault: [0], + maxnumber: 12, + maxlength: 2, + be_child: 0, //子代理 + Userres_partner_id: null, //总代理 + is_inner: null, //恢复订单打印 + print_type: 0, //默认0标准版 1无限版 + shopList: null, //店铺列表数据 + GoodsItem: null, //货道数据 + stockData: null, //库存数据 + stockDataList: null, //库存列表数据 + inkStatusC: false, + inkStatusM: false, + inkStatusY: false, + inkStatusK: false, + inkStatusW: false, + inkStatusHas: false, + isShowPop: false, + timer: null, //定时器 + intCountTimer: 0, + clear_time: "", //上次清洗时间 + isClickClean: false, //是否点击 + oldMousePos: {}, + oldNodePos: {}, + autoCleanLeft: -40, //左位置 + autoCleanTop: -40, //下位置 + isTouchStart: false, + show_clean: 0, //为1时就显示清洗喷头的入口,为0时就不显示 + countDownTimeCount: 1, //倒计时 + countDownTime: null, //倒计时 + isAutoStartClean: false, //是否自动清洗开始 + shop_id: null + }; + }, + + methods: { + + //添加店铺 + addShop() { + uni.navigateTo({ + url: "/pages/store/shopdetails?machine_id=" + this.queryPage.machine_id + }) + }, + + //保存店铺 + saveShop() { + if (this.shop_id == "" || this.shop_id == null) { + uni.showToast({ + title: '还没关联店铺', + icon: 'none' + }); + return + } + uni.showLoading({ + title: '正在关联中...' + }) + logoservice.Machinelistdetail({ + m: 'Machine/bindShop', + machine_id: this.queryPage.machine_id, + shop_id: this.shop_id + }).then(result => { + uni.hideLoading(); + uni.showToast({ + title: '关联店铺成功', + icon: 'none' + }); + uni.navigateBack() + }).catch(err => { + uni.hideLoading(); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + }, + + //获取店铺名称 + category(id) { + var dataname = ''; + if (this.shopList) { + this.shopList.forEach(item => { + if (item.id == id) { + dataname = item.short_name + } + }); + } + return dataname + }, + + //调转收益列表 + toLiquidationList() { + uni.navigateTo({ + url: '../mine/Liquidation?machineid=' + this.queryPage.machine_id, + }); + }, + + //字符串转base64 + getStrToBase64(str) { + return Base64.encode(str); + }, + + //取消 + cancel(type) { + this.$refs['showshareinput'].close() + }, + + //获取输入框字符串 + diseaseNameInput(e) { + this.loadStockGoodsList(e.detail.value) + }, + + //更换弹框 + toChangePop(item) { + if (this.$base.Userres.be_child == 1) return; + this.selectItem = item; + this.$nextTick(() => { + this.$refs['showshare'].open() + this.loadStockGoodsList(""); + }) + }, + + previewImageOne(item) { + var current = e; //这里获取到的是一张本地的图片 + }, + + setData(obj) { + let that = this; + let keys = []; + let val, data; + Object.keys(obj).forEach(function(key) { + keys = key.split('.'); + val = obj[key]; + data = that.$data; + keys.forEach(function(key2, index) { + if (index + 1 == keys.length) { + that.$set(data, key2, val); + } else { + if (!data[key2]) { + that.$set(data, key2, {}); + } + } + data = data[key2]; + }) + }); + }, + + //店铺 + showPicker(item) { + this.pickerValueArray = this.shopList + this.pickerValueArray.filter(item => { + item.label = item.short_name + item.value = item.id + }); + this.$refs.mpvuePicker.show(); + }, + + //确定 + onConfirm(e) { + this.shop_id = e.value[0]; + }, + + profit() { + uni.navigateTo({ + url: '../mall/eq-profit?machineid=' + this.list.id, + }); + }, + + toorder() { + uni.navigateTo({ + url: '../mine/order?machineid=' + this.list.id, + }); + }, + + listdetail() { + uni.showLoading({ + title: '正在加载中...' + }); + logoservice.Machinelistdetail({ + m: 'Machine/list', + machine_id: this.queryPage.machine_id + }).then(result => { + this.long = true + uni.stopPullDownRefresh(); + uni.hideLoading(); + if (result[0] != undefined) { + this.list = result[0] + console.log(this.list) + this.shop_id = this.list.shop_id + } + }).catch(err => { + uni.hideLoading(); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + }, + + loadGoodsList(direction) { + if (this.dataLoadState.pullDownRefresh || this.dataLoadState.reachBottom) return; + uni.showLoading({ + title: '正在加载中...' + }) + this.dataLoadState.pullDownRefresh = direction === Enums.DATA_DIRECTION.UP; + this.dataLoadState.reachBottom = direction === Enums.DATA_DIRECTION.DOWN; + if (this.dataLoadState.reachBottom) { + if (Math.ceil(this.queryPage.total / this.queryPage.per_page) < this.queryPage.page) { + return setTimeout(() => { + uni.showToast({ + title: '没有更多数据了!', + icon: 'none' + }); + }, 500); + } + } + logoservice.Machinelist(this.queryPage).then(result => { + this.long = true + let queryList = result.data.data + //触底更新时,当前列表+查询结果集 + let newList = this.LoupanList.concat(queryList) + this.LoupanList = newList + //分页对象处理 + this.queryPage.total = result.data.total; + this.queryPage.per_page = result.data.per_page; + //停止当前页面下拉刷新 + if (this.dataLoadState.pullDownRefresh) uni.stopPullDownRefresh(); + //数据加载状态处理 false + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + uni.hideLoading(); + }).catch(err => { + //停止当前页面下拉刷新 + if (this.dataLoadState.pullDownRefresh) uni.stopPullDownRefresh(); + //数据加载状态处理 false + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + uni.hideLoading(); + }); + }, + + //获取店铺数据 + machineGetShopList() { + logoservice.MachineGetShop(this.shopQueryPage).then(result => { + if (result != null && result != undefined) { + this.shopList = result; + } + }).catch(err => { + + }); + }, + + onChange(e) { + + }, + + onCancel(e) { + + }, + + //goodsItem加载全部交易类型数据 + getGoodsAttrList() { + logoservice.MoneystatementList({ + m: 'Machine/printRecord', + machine_id: this.queryPage.machine_id, + sub: 1 + }).then(result => { + + }).catch(res => { + uni.showToast({ + title: res.msg ? res.msg : '未查到交易类型选择', + icon: 'none' + }); + }); + }, + }, + + //下拉加载 + onPullDownRefresh() { + + }, + + //上拉加载 + onReachBottom() { + + }, + + onLoad(options) { + let that = this; + this.queryPage.machine_id = options.machineid + //console.log(options.machineid) + this.listdetail(); + this.machineGetShopList(); + }, + + onShow() { + this.machineGetShopList(); + } + }; +</script> + +<style lang="scss"> + .eq-detail-score { + padding: 40upx 0; + width: 100%; + height: 210upx; + margin: 0upx auto; + background: #43CF7C; + border-radius: 20upx; + display: flex; + align-items: center; + font-size: 26upx; + color: #fff; + } + + .green { + background-color: #4FB36B !important; + color: #FFFFFF; + } + + /*无数据 */ + .noData { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + } + + .noData_img { + width: 260upx; + height: 260upx; + display: block; + margin: 0upx auto 102upx; + } + + .noData_title { + text-align: center; + font-size: 36upx; + } + + .noData_text { + margin-top: 35upx; + font-size: 30upx; + font-weight: 400; + } + + .noData_but { + width: 230upx; + height: 70upx; + line-height: 70upx; + text-align: center; + color: #F56364; + margin: 140upx auto 0; + border: 1upx solid #F56364; + border-radius: 35upx; + } + + /* 去除button默认样式 */ + button::after { + border: none; + } + + button { + background-color: transparent; + padding-left: 0; + padding-right: 0; + line-height: inherit; + } + + .lang-open { + transform: rotate(90deg); + transition: transform 0.5s; + } + + .lang-close { + transform: rotateY(0deg); + transition: transform 0.5s; + } + + //2020-11-17 + .content-open { + height: 90upx; + overflow: hidden; + transition: all 0.4s cubic-bezier(0.25, 1.0, 0.25, 1.0); + } + + .content-close { + height: 0; + transition: all 0.4s cubic-bezier(0.25, 1.0, 0.25, 1.0); + } + + .item-open { + height: 40upx; + transition: all 0.4s cubic-bezier(0.25, 1.0, 0.25, 1.0); + } + + .item-close { + opacity: 0; + height: 0; + } + + /*输入框弹框显示 */ + .weui-search-bar { + position: relative; + padding: 8upx 10upx; + display: flex; + height: 135upx; + background: #FFFFFF; + align-items: center; + } + + .weui-search-bar_form { + width: 100%; + border-radius: 50upx; + background: #F6F6F6; + } + + .weui-search-bar_input { + height: 80upx; + line-height: 80upx; + font-size: 25upx; + padding-left: 24upx; + } + + /*底部弹框显示 */ + .uni-pop_show { + display: flex; + flex-direction: column; + } + + .uni-calendar-item--isDay-text.data-v-09f1e40c { + color: #5CE6B5 !important; //5CE6B5 + } + + .uni-calendar-item--isDay.data-v-09f1e40c { + background: #5CE6B5 !important; + color: #fff !important; + } + + .uni-calendar-item--checked.data-v-09f1e40c { + background: #5CE6B5 !important; + color: #fff !important; + } + + .uni-numbox__value { + width: 120upx !important; + } + + page { + width: 100%; + height: 100%; + background: #F5F5F5; + } + + .eq_list_button { + display: flex; + flex-direction: row; + line-height: 60upx; + padding-bottom: 20upx; + } + + .eq_list_button_ul { + flex: 1; + } + + .eq_list_button_li { + margin: auto; + font-size: 24upx; + color: #FFFFFF; + width: 150upx; + font-weight: bold; + text-align: center; + line-height: 60upx; + height: 60upx; + background-color: #5CE6B6; + } + + .uni-swiper-tab { + border-bottom: 1upx solid #F5F5F5; + } + + .clean-bt { + border-radius: 50%; + width: 200upx; + height: 200upx; + bottom: 160upx; + right: 20upx; + position: fixed; + font-size: 27upx; + text-align: center; + line-height: 130upx; + z-index: 99991; + justify-content: center; + align-items: center; + } + + .order { + width: 100%; + height: 100%; + background-color: #fff; + + .uni-tab-bar { + height: auto !important; + + .uni-swiper-tab { + position: fixed; + top: var(--window-top); + z-index: 999; + width: 100%; + line-height: 85upx; + height: 85upx; + + .swiper-tab-list { + width: calc(100% / 3); + font-size: 30upx; + } + } + + .active { + color: #43CF7C; + } + } + + .way-list { + margin: 0 20upx; + padding-top: 20upx; + border-radius: 10upx; + + .topBox { + width: calc(100% - 60upx); + margin-left: 30upx; + margin-top: 15upx; + justify-content: center; + } + + .topLittleBOX-1 { + font-size: 26upx; + width: 120upx; + color: #333; + overflow: text-align; + } + + .topLittleBOX-2 { + padding-left: 20upx; + padding-top: auto; + padding-bottom: auto; + display: flex; + vertical-align: middle; + flex-direction: row; + align-items: center; + width: calc(100% - 120upx); + position: relative; + } + + .row-1 { + height: 30upx; + background-color: #43CF7C; + border-radius: 20upx; + width: 0upx; + transition: width 1.5s linear; + } + + .rowText { + margin-left: 10upx; + font-size: 26upx; + color: #333; + float: right; + } + + .way-item { + background: #FFFFFF; + border-radius: 10upx; + margin-bottom: 20upx; + } + + .way { + height: 120upx; + min-height: 90upx; + display: flex; + align-items: center; + font-size: 28upx; + + .text { + width: 250upx; + padding-left: 20upx; + color: #fff; + } + + .value { + width: calc(100% - 280upx); + display: flex; + + .prick { + width: calc(100% - 40upx); + } + + .fa-angle-right { + width: 40upx; + font-size: 50upx; + } + } + } + } + + .content { + padding-top: 10upx; + + .order-list { + min-height: 350upx; + margin-right: 5upx; + width: calc(100% - 5upx); + border-radius: 10upx; + + .item { + min-height: 70upx; + display: flex; + align-items: center; + font-size: 26upx; + border-bottom: 1upx solid #F5F5F5; + + .text { + width: 250upx; + color: #000; + font-size: 29upx; + } + + + .value { + width: calc(100% - 120upx); + display: flex; + color: #888; + margin-top: 15upx; + margin-bottom: 15upx; + + + .prick { + width: calc(100% - 35upx); + } + + .fa-angle-right { + width: 30upx; + font-size: 50upx; + } + } + } + } + } + } + + .print-score { + width: 100%; + height: 280upx; + background: #43CF7C; + border-radius: 20upx; + display: flex; + align-items: center; + font-size: 26upx; + color: #fff; + + .print { + width: 100%; + + .text { + line-height: 50upx; + color: #fff; + } + } + } + + .list-clean { + height: 80upx; + background: #FFFFFF; + padding-left: 20upx; + padding-right: 23upx; + margin-top: 10upx; + border-radius: 15upx; + margin-left: 20upx; + margin-right: 15upx; + padding-top: 18upx + } + + .content-color { + color: #fff; + } + + .item-new-list { + padding-top: 0upx; + padding-left: 30upx; + padding-right: 25upx; + background: #fff; + margin: 0upx 30upx 25upx 30upx; + border-radius: 20upx; + box-shadow: 0 0 10upx 10upx #F5F5F5; + color: #000; + } + + .item-new-list-text { + margin: -10upx 45upx 30upx 45upx; + color: #999; + font-size: 25upx; + width: calc(100% - 90upx); + } + + .save_bt { + height: 100upx; + width: calc(100% - 60upx); + margin-left: 30upx; + background: #191931; + text-align: center; + line-height: 100upx; + color: #fff; + margin-top: 100upx; + border-radius: 20upx; + } +</style> \ No newline at end of file diff --git a/pages/mall/software-update.vue b/pages/mall/software-update.vue new file mode 100644 index 0000000..5eef2a8 --- /dev/null +++ b/pages/mall/software-update.vue @@ -0,0 +1,812 @@ +<template> + <view class="order full-height full-width"> + + <view class="uni-tab-bar full-width" v-if="list"> + <view class="full-width content" + style="margin-bottom: 20upx; overflow: auto; width: 100%;height: 100%; background: #fff;"> + <view class="order-list"> + <view class="item-new-list"> + <view class="item full-width"> + <label class="text content-color">设备编号</label> + <label class="value content-color"> + <text style="text-align: right;" class="full-width">{{queryPage.machine_id}}</text> + </label> + </view> + </view> + + <view class="item-new-list"> + <view class="item full-width"> + <label class="text content-color">状态</label> + + <label class="value content-color" v-if="list.flag.value == 'Y'"> + <text v-if="list.status.value == 0" style="text-align:right; color: #808080;" + class="full-width">离线</text> + <text v-if="list.status.value == 1 || list.status.value == 2 " + style="text-align:right; color: #5CE6B5;" class="full-width">在线</text> + <text v-if="list.status.value == 3 || list.status.value == 4 || list.status.value == 5 " + style="text-align:right; color: #D43030;" class="full-width">故障</text> + </label> + + <label class="value content-color" v-if="list.flag.value == 'N'"> + <text style="text-align:right; color: #FF8D1A;" + class="full-width">锁定</text> + </label> + + </view> + + <view class="item full-width"> + <label class="text content-color">当前版本</label> + <label class="value content-color"> + <text style="text-align: right;" class="full-width">{{list.version}}</text> + </label> + </view> + </view> + + <view class="item-new-list-text">机器必须通电,且有正常连接网络,设备将自动完成下载和更新软件。</view> + + <view class="item-new-list-text" style="text-align: center;margin-top: 80upx; color: #000; + font-size: 32upx;"> + {{list.pc_version}}<br>你的设备已是最新的软件版本,包含所有最新的错误修复和安全性增强功能</view> + </view> + + </view> + + </view> + + </view> +</template> + +<script> + import uniIcon from '@/components/uni-icon/uni-icon.vue'; + import uniPopup from '../index/common/uni-popup/uni-popup.vue'; + import Enums from '@/util/Enums'; + import foot from '../../components/foot.vue'; + import mpvuePicker from '../../components/mpvue-picker/mpvuePicker.vue'; + import mpvuePickernew from '../../components/mpvue-picker/mpvuePickernew.vue'; + import logoservice from '@/service/logoservice.js'; + let Base64 = require('js-base64').Base64; + export default { + components: { + uniPopup, + uniIcon, + foot, + mpvuePicker, + mpvuePickernew + }, + computed: { + + }, + data() { + return { + long: false, + isSinglePlatep: true, //是否单机版 或者 配送版 + isShowPullButtom: false, //false不显示true显示 + isOnclickItem: false, //是否点击item + numberlist: [], + LoupanList: [], + SortNumber: 1, + StcokList: [], //设备库存列表 + StcokLists: [], + list: null, + getStockerCount: "", //设置输入个数 + selectItem: null, + mode: 'selector', + pickerValueArray: [], + pickerValueDefault: [0], + type: 'bottom', + //上拉状态 + dataLoadState: { + pullDownRefresh: false, + reachBottom: false + }, + queryPage: { + m: 'Machine/printRecord', + machine_id: null, + page: 1, + per_page: 20, + total: 0, + date: null, //日 + month: null, //月 + year: null, //日 + is_excess: null, //套餐选择类型 + }, + shopQueryPage: { + m: 'Machine/getShop', + }, + attr: null, + //商品库存 + showshareitem: null, + showshareindex: null, + //打印年月日 + printingPickerValueArray: [], + printingpickerValueDefault: [0], + maxnumber: 12, + maxlength: 2, + be_child: 0, //子代理 + Userres_partner_id: null, //总代理 + is_inner: null, //恢复订单打印 + print_type: 0, //默认0标准版 1无限版 + shopList: null, //店铺列表数据 + GoodsItem: null, //货道数据 + stockData: null, //库存数据 + stockDataList: null, //库存列表数据 + inkStatusC: false, + inkStatusM: false, + inkStatusY: false, + inkStatusK: false, + inkStatusW: false, + inkStatusHas: false, + isShowPop: false, + timer: null, //定时器 + intCountTimer: 0, + clear_time: "", //上次清洗时间 + isClickClean: false, //是否点击 + oldMousePos: {}, + oldNodePos: {}, + autoCleanLeft: -40, //左位置 + autoCleanTop: -40, //下位置 + isTouchStart: false, + show_clean: 0, //为1时就显示清洗喷头的入口,为0时就不显示 + countDownTimeCount: 1, //倒计时 + countDownTime: null, //倒计时 + isAutoStartClean: false, //是否自动清洗开始 + shop_id: null + }; + }, + + methods: { + + //清洗历史记录 + cleanNozzleHistory() { + uni.navigateTo({ + url: "/pages/mall/clean-nozzle-history?machineid=" + this.queryPage.machine_id + }) + }, + + //保存店铺 + saveShop() { + if (this.shop_id == "" || this.shop_id == null) { + uni.showToast({ + title: '还没关联店铺', + icon: 'none' + }); + return + } + uni.showLoading({ + title: '正在关联中...' + }) + logoservice.Machinelistdetail({ + m: 'Machine/bindShop', + machine_id: this.queryPage.machine_id, + shop_id: this.shop_id + }).then(result => { + uni.hideLoading(); + uni.showToast({ + title: '关联店铺成功', + icon: 'none' + }); + }).catch(err => { + uni.hideLoading(); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + }, + + //获取店铺名称 + category(id) { + var dataname = ''; + if (this.shopList) { + this.shopList.forEach(item => { + if (item.id == id) { + dataname = item.short_name + } + }); + } + return dataname + }, + + //调转收益列表 + toLiquidationList() { + uni.navigateTo({ + url: '../mine/Liquidation?machineid=' + this.queryPage.machine_id, + }); + }, + + //字符串转base64 + getStrToBase64(str) { + return Base64.encode(str); + }, + + //取消 + cancel(type) { + this.$refs['showshareinput'].close() + }, + + //获取输入框字符串 + diseaseNameInput(e) { + this.loadStockGoodsList(e.detail.value) + }, + + //更换弹框 + toChangePop(item) { + if (this.$base.Userres.be_child == 1) return; + this.selectItem = item; + this.$nextTick(() => { + this.$refs['showshare'].open() + this.loadStockGoodsList(""); + }) + }, + + previewImageOne(item) { + var current = e; //这里获取到的是一张本地的图片 + }, + + + //确定 + onConfirm(e) { + this.shop_id = e.value[0]; + }, + + profit() { + uni.navigateTo({ + url: '../mall/eq-profit?machineid=' + this.list.id, + }); + }, + + toorder() { + uni.navigateTo({ + url: '../mine/order?machineid=' + this.list.id, + }); + }, + + listdetail() { + uni.showLoading({ + title: '正在加载中...' + }); + logoservice.Machinelistdetail({ + m: 'Machine/list', + machine_id: this.queryPage.machine_id + }).then(result => { + this.long = true + uni.stopPullDownRefresh(); + uni.hideLoading(); + if (result[0] != undefined) { + this.list = result[0] + this.shop_id = this.list.shop_id + } + }).catch(err => { + uni.hideLoading(); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + }, + + loadGoodsList(direction) { + if (this.dataLoadState.pullDownRefresh || this.dataLoadState.reachBottom) return; + uni.showLoading({ + title: '正在加载中...' + }) + this.dataLoadState.pullDownRefresh = direction === Enums.DATA_DIRECTION.UP; + this.dataLoadState.reachBottom = direction === Enums.DATA_DIRECTION.DOWN; + if (this.dataLoadState.reachBottom) { + if (Math.ceil(this.queryPage.total / this.queryPage.per_page) < this.queryPage.page) { + return setTimeout(() => { + uni.showToast({ + title: '没有更多数据了!', + icon: 'none' + }); + }, 500); + } + } + logoservice.Machinelist(this.queryPage).then(result => { + this.long = true + let queryList = result.data.data + //触底更新时,当前列表+查询结果集 + let newList = this.LoupanList.concat(queryList) + this.LoupanList = newList + //分页对象处理 + this.queryPage.total = result.data.total; + this.queryPage.per_page = result.data.per_page; + //停止当前页面下拉刷新 + if (this.dataLoadState.pullDownRefresh) uni.stopPullDownRefresh(); + //数据加载状态处理 false + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + uni.hideLoading(); + }).catch(err => { + //停止当前页面下拉刷新 + if (this.dataLoadState.pullDownRefresh) uni.stopPullDownRefresh(); + //数据加载状态处理 false + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + uni.hideLoading(); + }); + }, + + //获取店铺数据 + machineGetShopList() { + logoservice.MachineGetShop(this.shopQueryPage).then(result => { + if (result != null && result != undefined) { + this.shopList = result; + } + }).catch(err => { + + }); + }, + + onChange(e) { + + }, + + onCancel(e) { + + }, + + //goodsItem加载全部交易类型数据 + getGoodsAttrList() { + logoservice.MoneystatementList({ + m: 'Machine/printRecord', + machine_id: this.queryPage.machine_id, + sub: 1 + }).then(result => { + + }).catch(res => { + uni.showToast({ + title: res.msg ? res.msg : '未查到交易类型选择', + icon: 'none' + }); + }); + }, + }, + + //下拉加载 + onPullDownRefresh() { + + }, + + //上拉加载 + onReachBottom() { + + }, + + onLoad(options) { + let that = this; + this.queryPage.machine_id = options.machineid + this.listdetail(); + }, + + onShow() { + this.machineGetShopList(); + } + }; +</script> + +<style lang="scss"> + page { + width: 100%; + height: 100%; + background: #fff; + } + + .eq-detail-score { + padding: 40upx 0; + width: 100%; + height: 210upx; + margin: 0upx auto; + background: #43CF7C; + border-radius: 20upx; + display: flex; + align-items: center; + font-size: 26upx; + color: #fff; + } + + .green { + background-color: #4FB36B !important; + color: #FFFFFF; + } + + /*无数据 */ + .noData { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + } + + .noData_img { + width: 260upx; + height: 260upx; + display: block; + margin: 0upx auto 102upx; + } + + .noData_title { + text-align: center; + font-size: 36upx; + } + + .noData_text { + margin-top: 35upx; + font-size: 30upx; + font-weight: 400; + } + + .noData_but { + width: 230upx; + height: 70upx; + line-height: 70upx; + text-align: center; + color: #F56364; + margin: 140upx auto 0; + border: 1upx solid #F56364; + border-radius: 35upx; + } + + /* 去除button默认样式 */ + button::after { + border: none; + } + + button { + background-color: transparent; + padding-left: 0; + padding-right: 0; + line-height: inherit; + } + + .lang-open { + transform: rotate(90deg); + transition: transform 0.5s; + } + + .lang-close { + transform: rotateY(0deg); + transition: transform 0.5s; + } + + //2020-11-17 + .content-open { + height: 90upx; + overflow: hidden; + transition: all 0.4s cubic-bezier(0.25, 1.0, 0.25, 1.0); + } + + .content-close { + height: 0; + transition: all 0.4s cubic-bezier(0.25, 1.0, 0.25, 1.0); + } + + .item-open { + height: 40upx; + transition: all 0.4s cubic-bezier(0.25, 1.0, 0.25, 1.0); + } + + .item-close { + opacity: 0; + height: 0; + } + + /*输入框弹框显示 */ + .weui-search-bar { + position: relative; + padding: 8upx 10upx; + display: flex; + height: 135upx; + background: #FFFFFF; + align-items: center; + } + + .weui-search-bar_form { + width: 100%; + border-radius: 50upx; + background: #F6F6F6; + } + + .weui-search-bar_input { + height: 80upx; + line-height: 80upx; + font-size: 25upx; + padding-left: 24upx; + } + + /*底部弹框显示 */ + .uni-pop_show { + display: flex; + flex-direction: column; + } + + .uni-calendar-item--isDay-text.data-v-09f1e40c { + color: #5CE6B5 !important; //5CE6B5 + } + + .uni-calendar-item--isDay.data-v-09f1e40c { + background: #5CE6B5 !important; + color: #fff !important; + } + + .uni-calendar-item--checked.data-v-09f1e40c { + background: #5CE6B5 !important; + color: #fff !important; + } + + .uni-numbox__value { + width: 120upx !important; + } + + page { + width: 100%; + height: 100%; + background: #F5F5F5; + } + + .eq_list_button { + display: flex; + flex-direction: row; + line-height: 60upx; + padding-bottom: 20upx; + } + + .eq_list_button_ul { + flex: 1; + } + + .eq_list_button_li { + margin: auto; + font-size: 24upx; + color: #FFFFFF; + width: 150upx; + font-weight: bold; + text-align: center; + line-height: 60upx; + height: 60upx; + background-color: #5CE6B6; + } + + .uni-swiper-tab { + border-bottom: 1upx solid #F5F5F5; + } + + .clean-bt { + border-radius: 50%; + width: 200upx; + height: 200upx; + bottom: 160upx; + right: 20upx; + position: fixed; + font-size: 27upx; + text-align: center; + line-height: 130upx; + z-index: 99991; + justify-content: center; + align-items: center; + } + + .order { + width: 100%; + height: 100%; + background-color: #fff; + + .uni-tab-bar { + height: auto !important; + + .uni-swiper-tab { + position: fixed; + top: var(--window-top); + z-index: 999; + width: 100%; + line-height: 85upx; + height: 85upx; + + .swiper-tab-list { + width: calc(100% / 3); + font-size: 30upx; + } + } + + .active { + color: #43CF7C; + } + } + + .way-list { + margin: 0 20upx; + padding-top: 20upx; + border-radius: 10upx; + + .topBox { + width: calc(100% - 60upx); + margin-left: 30upx; + margin-top: 15upx; + justify-content: center; + } + + .topLittleBOX-1 { + font-size: 26upx; + width: 120upx; + color: #333; + overflow: text-align; + } + + .topLittleBOX-2 { + padding-left: 20upx; + padding-top: auto; + padding-bottom: auto; + display: flex; + vertical-align: middle; + flex-direction: row; + align-items: center; + width: calc(100% - 120upx); + position: relative; + } + + .row-1 { + height: 30upx; + background-color: #43CF7C; + border-radius: 20upx; + width: 0upx; + transition: width 1.5s linear; + } + + .rowText { + margin-left: 10upx; + font-size: 26upx; + color: #333; + float: right; + } + + .way-item { + background: #FFFFFF; + border-radius: 10upx; + margin-bottom: 20upx; + } + + .way { + height: 120upx; + min-height: 90upx; + display: flex; + align-items: center; + font-size: 28upx; + + .text { + width: 250upx; + padding-left: 20upx; + color: #fff; + } + + .value { + width: calc(100% - 280upx); + display: flex; + + .prick { + width: calc(100% - 40upx); + } + + .fa-angle-right { + width: 40upx; + font-size: 50upx; + } + } + } + } + + .content { + padding-top: 10upx; + + .order-list { + min-height: 350upx; + width: 100%; + border-radius: 10upx; + + .item { + min-height: 70upx; + display: flex; + align-items: center; + font-size: 26upx; + border-bottom: 1upx solid #F5F5F5; + + .text { + width: 250upx; + color: #000; + font-size: 29upx; + } + + .value { + width: calc(100% - 120upx); + display: flex; + color: #888; + margin-top: 15upx; + margin-bottom: 15upx; + + + .prick { + width: calc(100% - 35upx); + } + + .fa-angle-right { + width: 30upx; + font-size: 50upx; + } + } + } + } + } + } + + .print-score { + width: 100%; + height: 280upx; + background: #43CF7C; + border-radius: 20upx; + display: flex; + align-items: center; + font-size: 26upx; + color: #fff; + + .print { + width: 100%; + + .text { + line-height: 50upx; + color: #fff; + } + } + } + + .list-clean { + height: 80upx; + background: #FFFFFF; + padding-left: 20upx; + padding-right: 23upx; + margin-top: 10upx; + border-radius: 15upx; + margin-left: 20upx; + margin-right: 15upx; + padding-top: 18upx; + } + + .item-new-list { + padding-top: 0upx; + padding-left: 30upx; + padding-right: 25upx; + background: #fff; + margin: 0upx 30upx 25upx 30upx; + border-radius: 20upx; + box-shadow: 0 0 10upx 10upx #F5F5F5; + color: #000; + } + + .item-new-list-text { + margin: -10upx 45upx 30upx 45upx; + color: #999; + font-size: 25upx; + width: calc(100% - 90upx); + } + + .content-color { + color: #fff; + } + + .item-new-list-switch { + float: right; + zoom: 0.6; + position: absolute; + right: 80upx + } + + .save_bt { + height: 100upx; + width: calc(100% - 60upx); + margin-left: 30upx; + background: #191931; + text-align: center; + line-height: 100upx; + color: #fff; + margin-top: 100upx; + border-radius: 20upx; + } +</style> \ No newline at end of file diff --git a/pages/mall/stockList.vue b/pages/mall/stockList.vue new file mode 100644 index 0000000..1ce0a23 --- /dev/null +++ b/pages/mall/stockList.vue @@ -0,0 +1,1219 @@ +<template> + <view class="order full-height full-width"> + + + <view class="way-list" v-if="long && StcokList" > + <view class="way-item" v-for="(item, index) in StcokList" :key="index" @click="showPullButton(item,index)"> + <view class="way full-width"> + <view style="font-size: 30upx; color: #333333;font-weight: bold;width: 100upx;text-align: center;"> + {{item.channel_no}} + </view> + <image v-if="item.front_image" :src="item.front_image + '?x-oss-process=image/resize,lfit,w_100'" + mode="aspectFit" style="width:66upx; height:66upx; border-radius:10upx;"></image> + <view v-else style="width: 66upx;"></view> + <view style="width: calc(100% - 206upx); padding-left:20upx;"> + <view style="font-size: 24upx; color: #B2B2B2;" v-if="item.name!=null && item.name!='' "> + {{item.name}}-{{item.title}} + </view> + <view style="display: flex; align-items: center;" v-if="item.name != null && item.name != ''"> + <text style="font-size: 24upx; color: #B2B2B2;">仓库库存:{{item.total_stock}}</text> + <text + style="font-size: 24upx; color: #B2B2B2; padding-left: 10upx;">当前货道库存:{{item.stock}}</text> + </view> + <view style="font-size: 24upx; margin-top: 2upx;color: #B2B2B2;" + v-if="item.name == null || item.name == ''">货道暂未关联商品</view> + </view> + <view :class="item.isShowPullButtom ? 'lang-open' : 'lang-close'"> + <label class="fa fa-angle-right align-right sub-color" style="font-size: 40upx;"></label> + </view> + </view> + <view :class="item.isShowPullButtom ? 'content-open' : 'content-close'"> + <view :class="item.isShowPullButtom ? 'item-open' : 'item-close'"> + <view class="eq_list_button" v-if="item.isShowPullButtom == true"> + <view class="eq_list_button_ul"> + <button v-if="item.name != null && item.name!=''" class="eq_list_button_li" + @click.stop="shelvesGood(item,index)" + :class="be_child == 1 ? 'bg-grey' : ''">下架</button> + </view> + <view class="eq_list_button_ul"> + <button class="eq_list_button_li" @click.stop="toChangePop(item)" + :class="be_child == 1 ? 'bg-grey' : ''">{{item.name ? '切换':'添加'}}</button> + </view> + <view class="eq_list_button_ul"> + <button v-if="item.name != null && item.name != ''" class="eq_list_button_li" + @click.stop="showshareclick(item,index)" + :class="be_child == 1 ? 'bg-grey' : ''">输入</button> + </view> + </view> + </view> + </view> + </view> + </view> + + + <view v-if="(StcokList.length == 0) && !long "> + <view class="noData"> + <image src="../../static/icon_guaqi.png" mode="aspectFill" class="noData_img"></image> + <view class="noData_title"> + 非常抱歉,您没有库存信息<br> + </view> + <view class="noData_but" @click="tomain()">返回</view> + </view> + </view> + + + <uni-popup ref="showshare" :type="type" @change="change"> + <view class="uni-pop_show" style="width: 100%; margin: auto;"> + <view style="width: 100%;background: #FFFFFF;border-bottom: 4upx solid #E9E7ED;margin-right: 80upx;"> + <view class="weui-search-bar"> + <view class="weui-search-bar_form"> + <input type="text" class="weui-search-bar_input" placeholder="请输入商品名称" + @input='diseaseNameInput' /> + </view> + </view> + <view style="width: 100%; height: 550upx; background: #F9F9F9; " v-if="GoodsItem != null "> + <scroll-view scroll-y + style="width:100%; height: 550upx; overflow: hidden; overflow-y: scroll; background: #FFFFFF;"> + <view v-for="(item, index) in GoodsItem" :key="index" @click="selectGood(item)" + style="width: calc(100% - 60upx); margin: auto; height: 110upx; display: flex; align-items: center; border-top: 1upx solid #F6F6F6; background: #FFFFFF;"> + <image :src="item.front_image + '?x-oss-process=image/resize,lfit,w_100'" + mode="aspectFit" + style="width:70upx; height: 70upx;line-height:70upx; margin: 0 10upx;"></image> + <view style="width: calc(100% - 90upx);"> + <view + style="font-size: 25upx;color: #B2B2B2;width: 100%;white-space: nowrap;text-overflow:ellipsis; overflow:hidden; word-break:break-all;"> + {{item.name}}({{item.title}}) + </view> + <view + style="font-size: 25upx;color: #B2B2B2;width: 100%;white-space: nowrap;text-overflow:ellipsis; overflow:hidden; word-break:break-all;"> + 商品库存 : {{item.stock}} + </view> + </view> + </view> + <view class="align-center" + style="position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%);" + v-if=" GoodsItem == null || ( GoodsItem != null && GoodsItem.length == 0) "> + <span class="iconfont icon-wushuju" + style="font-size: 100upx; text-align: center; color: #B2B2B2;"></span> + <view style="color: #B2B2B2; text-align: center; line-height: 50upx;font-size: 24upx;"> + 啊嘞,还是一片荒漠</view> + </view> + </scroll-view> + </view> + </view> + </view> + </uni-popup> + + <uni-popup ref="showshareinput" type="center" @change="change"> + <view style="width:600upx; margin:auto; display: flex; flex-direction: column;"> + <view + style="width:100%; height: 400upx; background: #FFFFFF; border-radius: 10upx; position: relative;"> + <view style="width:100%; text-align: center; margin:30upx 0 0;"> + <label>仓库库存({{showshareitem.total_stock}})个</label> + </view> + <view + style="display: flex; align-items: center; margin:50upx 20upx 0; height: 80upx; line-height: 80upx;"> + <label style="padding-left:20upx;">当前货道库存:</label> + <input type="number" v-model="showshareitem.stock" style="width: 60%;font-size: 28upx; height: 90upx; line-height: 90upx; + background: #f9f9f9; + color:#5CE6B6; padding-left: 10upx; border-radius: 5upx;" min="0" :max="maxnumber" :maxlength="maxlength" + @click.stop="StockCountInput()" @input="inputVal(showshareitem, showshareindex)"></input> + </view> + <view style="width: calc(100% - 40upx); margin: auto; text-align: right;padding:10upx 20upx;"> + <label style="font-size: 22upx; color: #B2B2B2;">最大只能输入{{maxnumber}}个</label> + </view> + <view style="width:100%; position: absolute; bottom: 0; + display: flex; height: 100upx; align-items: center;border-radius:0 0 10upx 10upx;"> + <view @click="cancel('share')" + style="width: 50%; background: #B2B2B2; text-align: center;height: 100upx; line-height: 100upx; color: #FFFFFF;"> + 取消</view> + <view @click.stop="changeChannel(showshareitem,showshareindex)" + style="width: 50%; background: #5CE6B6; text-align: center; height: 100upx; line-height: 100upx; color: #FFFFFF;"> + 确定</view> + </view> + </view> + </view> + </uni-popup> + + <!-- 打印选择类型 --> + <uni-popup ref="printingShowshare" :type="type" @change="change"> + <view class="uni-share" style="width: 100%; margin: auto;"> + <view style="background: #F9F9F9;width: 100%;border-bottom: 1upx solid #00000000;"> + <view style="width: 100%;border-bottom: 1upx solid #E9E7ED; height:100upx; + text-align: center;line-height: 100upx; font-size: 26upx; font-weight: 500;"> + 选择打印类型 + </view> + <scroll-view scroll-y style="margin: auto; height: 500upx; overflow: hidden; overflow-y: scroll;"> + <view style="width: calc(100% - 40upx); margin:20upx auto; overflow: hidden;"> + <view v-for="(item, index) in goodsItem" :key="index" @click="selectMonth(item)" + :class="attr == item.goods_name ? 'green':''" + style="width: calc(33% - 20upx);margin:10upx; float: left; background: #ffffff;height: 60px; border-radius: 5upx; font-size: 26upx; text-align: center;line-height: 60px;"> + {{item.goods_name == null ? '全部' : item.goods_name}} + </view> + </view> + </scroll-view> + </view> + <view style="height: 90rpx; line-height: 90rpx; font-size: 14px; text-align: center; color: #666; background: #FFFFFF; border-top: 1px solid #EEEEEE;" + @click="Printingcancel('share')">取消</view> + </view> + </uni-popup> + </view> +</template> + +<script> + import uniIcon from '@/components/uni-icon/uni-icon.vue'; + import uniPopup from '../index/common/uni-popup/uni-popup.vue'; + import Enums from '@/util/Enums'; + import foot from '../../components/foot.vue'; + import mpvuePicker from '../../components/mpvue-picker/mpvuePicker.vue'; + import mpvuePickernew from '../../components/mpvue-picker/mpvuePickernew.vue'; + import logoservice from '@/service/logoservice.js'; + let Base64 = require('js-base64').Base64; + export default { + components: { + uniPopup, + uniIcon, + foot, + mpvuePicker, + mpvuePickernew + }, + computed: { + + }, + data() { + return { + long: true, + isSinglePlatep: true, //是否单机版 或者 配送版 + isShowPullButtom: false, //false不显示true显示 + isOnclickItem: false, //是否点击item + numberlist: [], + LoupanList: [], + SortNumber: 1, + goodsItem: [{ + goods_name: '全部', + type: -12, + }, + { + goods_name: '套餐内', + type: 0, + }, + { + goods_name: '打印卡', + type: 1, + }, + ], + StcokList: [], //设备库存列表 + StcokLists: [], + list: null, + getStockerCount: "", //设置输入个数 + selectItem: null, + currentTab: { + code: 0, + name: '机器' + }, + mode: 'selector', + pickerValueArray: [], + pickerValueDefault: [0], + type: 'bottom', + dataLoadState: { + pullDownRefresh: false, + reachBottom: false + }, + queryPage: { + m: 'Machine/printRecord', + machine_id: null, + page: 1, + per_page: 20, + total: 0, + date: null, //日 + month: null, //月 + year: null, //日 + is_excess: null, //套餐选择类型 + }, + shopQueryPage: { + m: 'Machine/getShop', + }, + attr: null, + //商品库存 + showshareitem: null, + showshareindex: null, + //打印年月日 + printingPickerValueArray: [], + printingpickerValueDefault: [0], + //加载全部交易类型数据 + maxnumber: 12, + maxlength: 2, + be_child: 0, //子代理 + Userres_partner_id: null, //总代理 + is_inner: null, //恢复订单打印 + print_type: 0, //默认0标准版 1无限版 + shopList: null, //店铺列表数据 + GoodsItem: [], //货道数据 + }; + }, + + methods: { + + //字符串转base64 + getStrToBase64(str) { + return Base64.encode(str); + }, + + //预览显示图片 + showPreviewImage(e, id) { + if (e == null || e == "") { + uni.showToast({ + title: '暂时没有定制二维码', + icon: 'none' + }); + return + } + var current = e + "?x-oss-process=image/watermark,text_" + this.getStrToBase64(id) + + ",g_nw,size_50,shadow_50,x_550,y_850,color_4bf25a"; //这里获取到的是一张本地的图片 + wx.previewImage({ + current: current, //需要预览的图片链接列表 + urls: [current] //当前显示图片的链接 + }) + }, + + //获取剩余量次数相差 + getPrintSurplusCount(count) { + try { + if (count >= 200) { //白色 + return 1; + } else if (count < 200 && count >= 50) { //橙色 + return 2; + } else if (count < 50) { //红色 + return 3; + } + } catch (e) { + return 0; + } + return 0; + }, + + //获取相差天数 + getDaysDifference(time) { + try { + let day = new Date(time.replace(/-/g, "/")).getTime() - new Date().getTime(); //日期转时间戳 + let dayCount = Math.floor(day / 86400000); //时间戳获取天数 + return dayCount; + } catch (e) { + + } + return 0; + }, + + //格式化时间 + dateFormat(time) { + try { + var dt = new Date(time.replace(/-/g, '/')); + var y = dt.getFullYear(); + var m = dt.getMonth() + 1; + var d = dt.getDate(); + return y + '年' + m + '月' + d + '日'; + } catch (e) { + // 错误处理代码片段 + } + return time; + }, + + //代理商名字 + partnername(partner_id, partner) { + var partner_name = '尚未铺设'; + if (partner) { + partner.forEach(item => { + if (item.id == partner_id) { + partner_name = item.name + } + }); + } + return partner_name + }, + + tomain() { + uni.navigateBack(); + }, + + printingShowPicker(mode) { + this.$refs.printingMpvuePicker.show(); + }, + + //日期确定 + onConfirmPrinting(e) { + this.queryPage.year = null + this.queryPage.month = null + this.queryPage.date = null + if (e.value.length == 1) { + this.queryPage.year = e.value[0] + } else if (e.value.length == 2) { + let myMonth = e.value[1] + if (myMonth < 10) { + myMonth = '0' + e.value[1] //补齐 + } + this.queryPage.month = e.value[0] + '-' + myMonth + } else if (e.value.length == 3) { + let myMonth = e.value[1] + if (myMonth < 10) { + myMonth = '0' + myMonth //补齐 + } + let mydate = e.value[2] + if (mydate < 10) { + mydate = '0' + e.value[2] //补齐 + } + this.queryPage.date = e.value[0] + '-' + myMonth + '-' + mydate + } + // 数据加载状态处理 false + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + this.LoupanList = [] + this.queryPage.page = 1; + this.queryPage.total = 0; + this.loadGoodsList(Enums.DATA_DIRECTION.UP); + }, + + //打开类型 + togglePopup() { + this.$nextTick(() => { + this.$refs['printingShowshare'].open() + }) + this.getGoodsAttrList() + }, + + Printingcancel(type) { + this.$refs['printingShowshare'].close() + }, + + selectMonth(item) { + if (item.type == -12) { + this.attr = "全部打印类型"; + this.queryPage.is_excess = null; + } else { + this.attr = item.goods_name ? item.goods_name : null + this.queryPage.is_excess = item.type + } + this.$refs['printingShowshare'].close(); + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + this.queryPage.page = 1; + this.queryPage.total = 0; + this.LoupanList = [] + this.loadGoodsList(Enums.DATA_DIRECTION.UP); + }, + + //取消 + cancel(type) { + this.$refs['showshareinput'].close() + }, + + //更换弹框 + showshareclick(item, index) { + if (this.$base.Userres.be_child == 1) return; + if (this.list.used_applets == '3') { + this.maxnumber = 12 + this.maxlength = 2 + } + if (this.list.used_applets == '4') { + this.maxnumber = 7 + this.maxlength = 1 + } + let itema = JSON.stringify(item) + let itemb = JSON.parse(itema); + this.showshareitem = itemb; + this.showshareindex = index; + this.$nextTick(() => { + this.$refs['showshareinput'].open() + }) + }, + + change(e) { + + }, + + //库存数量输入 + StockCountInput(e) { + this.isOnclickItem = true; + var that = this; + setTimeout(function() { + that.isOnclickItem = false; + }, 1000) //延迟时间 这里是2秒 + }, + + inputVal(item, index) { + if (this.list.used_applets == '3') { + this.maxnumber = 12 + this.maxlength = 2 + } + if (this.list.used_applets == '4') { + this.maxnumber = 7 + this.maxlength = 1 + } + let StcokListsnumber = item.total_stock + if (item.stock > this.maxnumber) { + uni.showToast({ + title: '最大只能输入' + this.maxnumber + '个', + icon: 'none', + }); + item.stock = StcokListsnumber > this.maxnumber ? this.maxnumber : StcokListsnumber; + return false; + } + }, + + //获取输入框字符串 + diseaseNameInput(e) { + this.loadStockGoodsList(e.detail.value) + }, + + //pop选中商品 + selectGood(item) { + this.$refs["showshare"].close(); + var that = this; + let index; + if (this.selectItem != null) { + that.StcokList.forEach((items, indexNumber) => { + if (items.id == this.selectItem.id) { + index = indexNumber; + } + }); + } + uni.showModal({ + title: '确认', + content: '是否关联当前商品?', + confirmText: '确定', + confirmColor: '#ff3b32', + success: function(res) { + if (res.confirm) { + if (that.list.used_applets == '3') { + that.StcokList[index].stock = item.stock > 12 ? 12 : item.stock; + } + if (that.list.used_applets == '4') { + that.StcokList[index].stock = item.stock > 7 ? 7 : item.stock; + } + that.StcokList[index].title = item.title; //name + that.StcokList[index].name = item.name; + that.StcokList[index].front_image = item.front_image; + that.StcokList[index].goods_id = item.goods_id; + that.StcokList[index].dict_id = item.dict_id; + that.StcokList[index].total_stock = item.stock; + that.StcokList[index].isShowPullButtom = false; + that.confirmChangeChannel(that.StcokList[index]) + } else if (res.cancel) { + //console.log('用户点击取消') + } + } + }); + }, + + //确认更换货道 + confirmChangeChannel(item) { + logoservice.MachineSavePartnerStock({ + m: 'Machine/saveStock', + id: item.id, + machine_id: this.queryPage.machine_id, + goods_id: item.goods_id, + goods_size: item.goods_size, + stock: item.stock, + dict_id: item.dict_id + }).then(result => { + uni.hideLoading(); + uni.showToast({ + title: "更换成功", + icon: 'none' + }); + }).catch(err => { + uni.hideLoading(); + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + this.StcokList = [] + this.queryPage.page = 1; + this.queryPage.total = 0; + this.loadStockList(Enums.DATA_DIRECTION.UP); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + }, + + //下架功能 + shelvesGood(item, index) { + if (this.$base.Userres.be_child == 1) return; + var _this = this + uni.showModal({ + title: '确认', + content: '确认当前商品下架吗?', + confirmText: '确定', + confirmColor: '#ff3b32', + success: function(res) { + if (res.confirm) { + if (item.goods_id == 0) { + uni.showToast({ + title: "还没绑定商品不能下架", + icon: 'none' + }); + _this.StcokList[index].isShowPullButtom = false; + _this.SortNumber++; + _this.StcokList[index].SortNumber = _this.SortNumber; + this.setData({ + StcokList: _this.StcokList + }) + } else { + uni.showLoading({ + title: '正在加载中...' + }) + logoservice.MachineSavePartnerStock({ + m: 'Machine/saveStock', + id: item.id, + machine_id: _this.queryPage.machine_id, + goods_id: item.goods_id, + goods_size: item.goods_size, + stock: item.stock, + dict_id: item.dict_id, + type: "off", + }).then(result => { + uni.hideLoading(); + uni.showToast({ + title: "下架成功", + icon: 'none' + }); + _this.dataLoadState.pullDownRefresh = false; + _this.dataLoadState.reachBottom = false; + _this.StcokList = [] + _this.queryPage.page = 1; + _this.queryPage.total = 0; + _this.loadStockList(Enums.DATA_DIRECTION.UP); + }).catch(err => { + _this.dataLoadState.pullDownRefresh = false; + _this.dataLoadState.reachBottom = false; + _this.StcokList = [] + _this.queryPage.page = 1; + _this.queryPage.total = 0; + _this.loadStockList(Enums.DATA_DIRECTION.UP); + uni.hideLoading(); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + } + } else if (res.cancel) { + //console.log('用户点击取消') + } + } + }); + }, + + //更换弹框 + toChangePop(item) { + if (this.$base.Userres.be_child == 1) return; + this.selectItem = item; + this.$nextTick(() => { + this.$refs['showshare'].open() + this.loadStockGoodsList(""); + }) + }, + + //显示下面选择按钮 + showPullButton(item, index) { + if (this.isOnclickItem == false) { + //console.log("显示下面选择按钮") + var that = this; + if (item.isShowPullButtom) { + that.StcokList[index].isShowPullButtom = false; + } else { + that.StcokList[index].isShowPullButtom = true; + } + this.SortNumber++; + that.StcokList[index].SortNumber = this.SortNumber; + this.setData({ + StcokList: that.StcokList + }) + } + }, + + //修改货道 + changeChannel(item, index) { + this.$refs["showshareinput"].close(); + this.$refs["showshare"].close(); + var _this = this + _this.isOnclickItem = true; + setTimeout(function() { + _this.isOnclickItem = false; + }, 1000) //延迟时间 这里是1秒 + let jsonLists = JSON.parse(_this.StcokLists); + uni.showModal({ + title: '确认', + content: '确认当前商品货道调整吗?', + confirmText: '确定', + confirmColor: '#ff3b32', + success: function(res) { + if (res.confirm) { + uni.showLoading({ + title: '正在加载中...' + }) + logoservice.MachineSavePartnerStock({ + m: 'Machine/saveStock', + id: item.id, + machine_id: _this.queryPage.machine_id, + goods_id: item.goods_id, + goods_size: item.goods_size, + stock: item.stock, + dict_id: item.dict_id + }).then(result => { + uni.hideLoading(); + uni.showToast({ + title: "修改成功", + icon: 'none' + }); + _this.StcokList[index].stock = item.stock; + }).catch(err => { + uni.hideLoading(); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + } else if (res.cancel) { + //console.log('用户点击取消') + } + } + }); + }, + + //获取底部弹框数据 + loadStockGoodsList(goods_name) { + logoservice.MachineStockGoodsList({ + m: 'Machine/getStockGoodsList', + machine_id: this.queryPage.machine_id, + goods_name: goods_name, + }).then(result => { + this.GoodsItem = result; + uni.hideLoading(); + }).catch(err => { + uni.hideLoading(); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + }, + + previewImageOne(item) { + var current = e; //这里获取到的是一张本地的图片 + }, + + setData(obj) { + let that = this; + let keys = []; + let val, data; + Object.keys(obj).forEach(function(key) { + keys = key.split('.'); + val = obj[key]; + data = that.$data; + keys.forEach(function(key2, index) { + if (index + 1 == keys.length) { + that.$set(data, key2, val); + } else { + if (!data[key2]) { + that.$set(data, key2, {}); + } + } + data = data[key2]; + }) + }); + }, + + reprint(e, index) { + + }, + + datatimeLimited(time) { + return new Date(time.replace(/-/g, "/"))._format('HH:mm:ss'); + }, + + category(id) { + var dataname = ''; + if (this.shopList) { + this.shopList.forEach(item => { + if (item.id == id) { + dataname = item.short_name + } + }); + } + return dataname + }, + + categoryaddress(address) { + var dataaddress = ''; + if (this.shopList) { + this.shopList.forEach(item => { + if (item.id == address) { + dataaddress = item.address.replace('<br/>', ''); + } + }); + } + return dataaddress + }, + + onChange(e) {}, + + onCancel(e) {}, + + profit() { + uni.navigateTo({ + url: '../mall/eq-profit?machineid=' + this.list.id, + }); + }, + + toorder() { + uni.navigateTo({ + url: '../mine/order?machineid=' + this.list.id, + }); + }, + + //设备库存信息 加载数据 + loadStockList(direction) { + + setTimeout (()=>{ + uni.showLoading({ + title: '正在加载中...' , + }); + },200) + + + /* uni.showLoading({ + title: '正在加载中...' + }) */ + if (this.dataLoadState.pullDownRefresh || this.dataLoadState.reachBottom) return; + + this.dataLoadState.pullDownRefresh = direction === Enums.DATA_DIRECTION.UP; + this.dataLoadState.reachBottom = direction === Enums.DATA_DIRECTION.DOWN; + if (this.dataLoadState.reachBottom) { + if (Math.ceil(this.queryPage.total / this.queryPage.per_page) < this.queryPage.page) { + return setTimeout(() => { + uni.showToast({ + title: '没有更多数据了!', + icon: 'none' + }); + }, 500); + } + } + logoservice.MachineGetStock({ + m: 'Machine/getStock', + machine_id: this.queryPage.machine_id, + page: 1, + per_page: 20, + total: 0, + date: null + }).then(resultGetStock => { + this.long = true; + let stockList = resultGetStock + //下拉更新时,查询结果集 + //触底更新时,当前列表+查询结果集 + let newList = this.StcokList.concat(stockList) + this.StcokList = newList; + + this.StcokLists = JSON.stringify(newList) + + // 分页对象处理 + // 停止当前页面下拉刷新 + if (this.dataLoadState.pullDownRefresh) uni.stopPullDownRefresh(); + // 数据加载状态处理 false + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + uni.hideLoading(); + // uni.showToast({ title: '加载成功', icon: 'none' }); + }).catch(err => { + // 停止当前页面下拉刷新 + if (this.dataLoadState.pullDownRefresh) uni.stopPullDownRefresh(); + // 数据加载状态处理 false + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + uni.hideLoading(); + }); + }, + + //做滚动加载使用 + loadMore() { + if (Math.ceil(this.queryPage.total / this.queryPage.per_page) < this.queryPage.page) { + return setTimeout(() => { + uni.showToast({ + title: '没有更多数据了!', + icon: 'none' + }); + }, 500); + } + this.queryPage.page = this.queryPage.page + 1; + this.loadStockList(Enums.DATA_DIRECTION.DOWN) + }, + + //设备列表详情 + listdetail() { + uni.showLoading({ + title: '正在加载中...' + }); + logoservice.Machinelistdetail({ + m: 'Machine/list', + machine_id: this.queryPage.machine_id + }).then(result => { + this.long = true + uni.stopPullDownRefresh(); + uni.hideLoading(); + if (result[0] != undefined) { + this.list = result[0] + + } + }).catch(err => { + uni.hideLoading(); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + }, + + //获取店铺数据 + machineGetShopList() { + logoservice.MachineGetShop(this.shopQueryPage).then(result => { + if (result != null && result != undefined) { + this.shopList = result; + } + }).catch(err => { + + }); + }, + + }, + + //下拉加载 + onPullDownRefresh() { + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + this.queryPage.page = 1; + this.queryPage.total = 0; + this.StcokList = [] + this.loadStockList(Enums.DATA_DIRECTION.UP); + uni.stopPullDownRefresh(); + }, + + //上拉加载 + onReachBottom() { + if (this.LoupanList.length < 6) { + return setTimeout(() => { + uni.showToast({ + title: '没有更多数据了!', + icon: 'none' + }); + }, 500); + } + this.loadStockList(Enums.DATA_DIRECTION.DOWN) + }, + + onLoad(options) { + this.printingPickerValueArray = ['month']; + this.queryPage.machine_id = options.id + wx.setNavigationBarTitle({ + title: this.queryPage.machine_id + }) + this.loadStockList(); + this.listdetail(); + }, + + onShow() { + this.be_child = this.$base.Userres.be_child //子代理 + } + + }; +</script> + +<style lang="scss"> + .eq-detail-score { + padding: 50upx 0; + width: 100%; + height: 230upx; + margin: 0upx auto; + background: #43CF7C; + border-radius: 20upx; + display: flex; + align-items: center; + font-size: 26upx; + color: #fff; + } + + .green { + background-color: #4FB36B !important; + color: #FFFFFF; + } + + /* 无数据 */ + .noData { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + } + + .noData_img { + width: 260upx; + height: 260upx; + display: block; + margin: 0upx auto 102upx; + } + + .noData_title { + // color: #FFFFFF; + text-align: center; + font-size: 36upx; + } + + .noData_text { + margin-top: 35upx; + font-size: 30upx; + font-weight: 400; + // color: #999999; + } + + .noData_but { + width: 230upx; + height: 70upx; + line-height: 70upx; + text-align: center; + color: #F56364; + margin: 140upx auto 0; + border: 1upx solid #F56364; + border-radius: 35upx; + } + + /* 去除button默认样式 */ + button::after { + border: none; + } + + button { + background-color: transparent; + padding-left: 0; + padding-right: 0; + line-height: inherit; + } + + .lang-open { + transform: rotate(90deg); + transition: transform 0.5s; + } + + .lang-close { + transform: rotateY(0deg); + transition: transform 0.5s; + } + + // 2020-11-17 + .content-open { + height: 90upx; + overflow: hidden; + transition: all 0.4s cubic-bezier(0.25, 1.0, 0.25, 1.0); + } + + .content-close { + height: 0; + transition: all 0.4s cubic-bezier(0.25, 1.0, 0.25, 1.0); + } + + .item-open { + height: 40upx; + transition: all 0.4s cubic-bezier(0.25, 1.0, 0.25, 1.0); + } + + .item-close { + opacity: 0; + height: 0; + } + + /* 输入框弹框显示 */ + .weui-search-bar { + position: relative; + padding: 8upx 10upx; + display: flex; + height: 135upx; + background: #FFFFFF; + align-items: center; + } + + .weui-search-bar_form { + width: 100%; + border-radius: 50upx; + background: #F6F6F6; + } + + .weui-search-bar_input { + height: 80upx; + line-height: 80upx; + font-size: 25upx; + padding-left: 24upx; + } + + /* 底部弹框显示 */ + .uni-pop_show { + display: flex; + flex-direction: column; + } + + .uni-calendar-item--isDay-text.data-v-09f1e40c { + color: #5CE6B5 !important; //5CE6B5 + } + + .uni-calendar-item--isDay.data-v-09f1e40c { + background: #5CE6B5 !important; + color: #fff !important; + } + + .uni-calendar-item--checked.data-v-09f1e40c { + background: #5CE6B5 !important; + color: #fff !important; + } + + .uni-numbox__value { + width: 120upx !important; + } + + page { + width: 100%; + height: 100%; + background: #F5F5F5; + } + + .eq_list_button { + display: flex; + flex-direction: row; + + line-height: 60upx; + padding-bottom: 20upx; + } + + .eq_list_button_ul { + flex: 1; + } + + .eq_list_button_li { + margin: auto; + font-size: 24upx; + color: #FFFFFF; + width: 150upx; + font-weight: bold; + text-align: center; + line-height: 60upx; + height: 60upx; + background-color: #5CE6B6; + } + + .uni-swiper-tab { + border-bottom: 1upx solid #F5F5F5; + } + + .order { + .uni-tab-bar { + height: auto !important; + + .uni-swiper-tab { + position: fixed; + top: var(--window-top); + z-index: 999; + width: 100%; + line-height: 99rpx; + height: 0rpx; + + .swiper-tab-list { + width: calc(100% / 3); + font-size: 30upx; + } + } + + .active { + color: #43CF7C; + /*#43CF7C */ + /* #3321D9 */ + } + } + + .way-list { + min-height: 350upx; + + padding: 20upx 10upx 10upx; + border-radius: 10upx; + + .way-item { + background: #FFFFFF; + border-radius: 10upx; + margin-bottom: 20upx; + } + + .way { + height: 120upx; + min-height: 90upx; + display: flex; + align-items: center; + font-size: 28upx; + + .text { + width: 250upx; + padding-left: 20upx; + } + + .value { + width: calc(100% - 280upx); + display: flex; + + .prick { + width: calc(100% - 40upx); + } + + .fa-angle-right { + width: 40upx; + font-size: 50upx; + } + } + } + } + + /*width: calc(100% -40upx); */ + + .content { + padding-top: 100upx; + + .order-list { + min-height: 350upx; + width: 100%; + margin-right: 20upx; + //width: calc(100% - 60upx); + border-radius: 10upx; + + .item { + min-height: 45upx; + display: flex; + margin-left: 20upx; + align-items: center; + font-size: 28upx; + + .text { + width: 250upx; + /* padding-left: 25upx; */ + color: #353535; + } + + .value { + width: calc(100% - 280upx); + display: flex; + + .prick { + width: calc(100% - 40upx); + } + + .fa-angle-right { + width: 40upx; + font-size: 50upx; + } + } + } + } + } + } +</style> diff --git a/pages/mall/support_language.vue b/pages/mall/support_language.vue new file mode 100644 index 0000000..d8a9d75 --- /dev/null +++ b/pages/mall/support_language.vue @@ -0,0 +1,551 @@ +<template> + <view class="order full-height full-width"> + + <view class="uni-tab-bar full-width"> + + <view scroll-y @scrolltolower="loadMore()" class="full-width content" + style="margin-bottom: 20upx; overflow: auto; width: 100%;height: 100%;"> + + <view class="order-list"> + + <view class="item-new-list"> + <view class="item full-width"> + <label class="text content-color">设备编号</label> + <label class="value content-color"> + <text style="text-align: right;" class="full-width">{{queryPage.machine_id}}</text> + </label> + </view> + </view> + + <view class="item-new-list-text">启用对应功能,可对设备开启相应功能,以便更好体验设备</view> + + <view class="item-new-list"> + + <view v-for="(item, index) in language_list" :key="index"> + <view class="item full-width"> + <label class="text content-color">{{item.title}}</label> + <switch :checked="item.flag == 1 ? true :false" @change="onSwitchChange($event,item)" + class="item-new-list-switch" /> + </view> + </view> + + </view> + + <view class="item-new-list-text">仅对H5版本生效,开启对应的语言,设备定制端将支持当前语言</view> + + </view> + + </view> + </view> + + </view> + +</template> + +<script> + import uniIcon from '@/components/uni-icon/uni-icon.vue'; + import uniPopup from '../index/common/uni-popup/uni-popup.vue'; + import Enums from '@/util/Enums'; + import foot from '../../components/foot.vue'; + import logoservice from '@/service/logoservice.js'; + let Base64 = require('js-base64').Base64; + export default { + components: { + uniPopup, + uniIcon, + foot, + }, + computed: { + + }, + data() { + return { + queryPage: {}, + param: null, + language_list: [] //语言列表 + }; + }, + + methods: { + + //开关修改 + onSwitchChange(e, item) { + console.log(e) + if (e.detail.value == true) { + item.flag = 1; + //this.getSwitchCheck(type, true) + uni.showLoading({ + title: '开启中...' + }) + } else { + item.flag = 0; + //this.getSwitchCheck(type, false) + uni.showLoading({ + title: '关闭中...' + }) + } + logoservice.Machinestatus({ + m: 'Machine/LanguageSupportSave', + machine_id: this.queryPage.machine_id, + machine_language_id: item.id, + }).then(result => { + uni.hideLoading(); + if (e.detail.value == true) { + uni.showToast({ + title: '开启成功' + }) + } else { + uni.showToast({ + title: '关闭成功' + }) + } + }).catch(err => { + uni.hideLoading(); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + if (e.detail.value == true) { + item.flag = 0; + } else { + item.flag = 1; + } + }) + }, + }, + + onPullDownRefresh() { + + }, + + onReachBottom() { + + }, + + onLoad(options) { + this.queryPage.machine_id = options.machineid; + this.param = JSON.parse(options.param); + this.language_list = this.param.language_list + console.log(this.language_list) + }, + + onShow() { + + } + + }; +</script> + +<style lang="scss"> + page { + width: 100%; + height: 100%; + background: #fff; + } + + .eq-detail-score { + padding: 40upx 0; + width: 100%; + height: 210upx; + margin: 0upx auto; + background: #43CF7C; + border-radius: 20upx; + display: flex; + align-items: center; + font-size: 26upx; + color: #fff; + } + + .green { + background-color: #4FB36B !important; + color: #FFFFFF; + } + + /*无数据 */ + .noData { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + } + + .noData_img { + width: 260upx; + height: 260upx; + display: block; + margin: 0upx auto 102upx; + } + + .noData_title { + text-align: center; + font-size: 36upx; + } + + .noData_text { + margin-top: 35upx; + font-size: 30upx; + font-weight: 400; + } + + .noData_but { + width: 230upx; + height: 70upx; + line-height: 70upx; + text-align: center; + color: #F56364; + margin: 140upx auto 0; + border: 1upx solid #F56364; + border-radius: 35upx; + } + + /* 去除button默认样式 */ + button::after { + border: none; + } + + button { + background-color: transparent; + padding-left: 0; + padding-right: 0; + line-height: inherit; + } + + .lang-open { + transform: rotate(90deg); + transition: transform 0.5s; + } + + .lang-close { + transform: rotateY(0deg); + transition: transform 0.5s; + } + + //2020-11-17 + .content-open { + height: 90upx; + overflow: hidden; + transition: all 0.4s cubic-bezier(0.25, 1.0, 0.25, 1.0); + } + + .content-close { + height: 0; + transition: all 0.4s cubic-bezier(0.25, 1.0, 0.25, 1.0); + } + + .item-open { + height: 40upx; + transition: all 0.4s cubic-bezier(0.25, 1.0, 0.25, 1.0); + } + + .item-close { + opacity: 0; + height: 0; + } + + /*输入框弹框显示 */ + .weui-search-bar { + position: relative; + padding: 8upx 10upx; + display: flex; + height: 135upx; + background: #FFFFFF; + align-items: center; + } + + .weui-search-bar_form { + width: 100%; + border-radius: 50upx; + background: #F6F6F6; + } + + .weui-search-bar_input { + height: 80upx; + line-height: 80upx; + font-size: 25upx; + padding-left: 24upx; + } + + /*底部弹框显示 */ + .uni-pop_show { + display: flex; + flex-direction: column; + } + + .uni-calendar-item--isDay-text.data-v-09f1e40c { + color: #5CE6B5 !important; //5CE6B5 + } + + .uni-calendar-item--isDay.data-v-09f1e40c { + background: #5CE6B5 !important; + color: #fff !important; + } + + .uni-calendar-item--checked.data-v-09f1e40c { + background: #5CE6B5 !important; + color: #fff !important; + } + + .uni-numbox__value { + width: 120upx !important; + } + + page { + width: 100%; + height: 100%; + background: #F5F5F5; + } + + .eq_list_button { + display: flex; + flex-direction: row; + line-height: 60upx; + padding-bottom: 20upx; + } + + .eq_list_button_ul { + flex: 1; + } + + .eq_list_button_li { + margin: auto; + font-size: 24upx; + color: #FFFFFF; + width: 150upx; + font-weight: bold; + text-align: center; + line-height: 60upx; + height: 60upx; + background-color: #5CE6B6; + } + + .uni-swiper-tab { + border-bottom: 1upx solid #F5F5F5; + } + + .clean-bt { + border-radius: 50%; + width: 200upx; + height: 200upx; + bottom: 160upx; + right: 20upx; + position: fixed; + font-size: 27upx; + text-align: center; + line-height: 130upx; + z-index: 99991; + justify-content: center; + align-items: center; + } + + .order { + width: 100%; + height: 100%; + background-color: #fff; + + .uni-tab-bar { + height: auto !important; + + .uni-swiper-tab { + position: fixed; + top: var(--window-top); + z-index: 999; + width: 100%; + line-height: 85upx; + height: 85upx; + + .swiper-tab-list { + width: calc(100% / 3); + font-size: 30upx; + } + } + + .active { + color: #43CF7C; + } + } + + .way-list { + margin: 0 20upx; + padding-top: 20upx; + border-radius: 10upx; + + .topBox { + width: calc(100% - 60upx); + margin-left: 30upx; + margin-top: 15upx; + justify-content: center; + } + + .topLittleBOX-1 { + font-size: 26upx; + width: 120upx; + color: #333; + overflow: text-align; + } + + .topLittleBOX-2 { + padding-left: 20upx; + padding-top: auto; + padding-bottom: auto; + display: flex; + vertical-align: middle; + flex-direction: row; + align-items: center; + width: calc(100% - 120upx); + position: relative; + } + + .row-1 { + height: 30upx; + background-color: #43CF7C; + border-radius: 20upx; + width: 0upx; + transition: width 1.5s linear; + } + + .rowText { + margin-left: 10upx; + font-size: 26upx; + color: #333; + float: right; + } + + .way-item { + background: #FFFFFF; + border-radius: 10upx; + margin-bottom: 20upx; + } + + .way { + height: 120upx; + min-height: 90upx; + display: flex; + align-items: center; + font-size: 28upx; + + .text { + width: 320upx; + padding-left: 20upx; + color: #fff; + } + + .value { + width: calc(100% - 280upx); + display: flex; + + .prick { + width: calc(100% - 40upx); + } + + .fa-angle-right { + width: 40upx; + font-size: 50upx; + } + } + } + } + + .content { + padding-top: 10upx; + + .order-list { + min-height: 350upx; + width: 100%; + border-radius: 10upx; + + .item { + min-height: 70upx; + display: flex; + align-items: center; + font-size: 26upx; + border-bottom: 1upx solid #F5F5F5; + + .text { + width: 250upx; + color: #000; + font-size: 29upx; + } + + .value { + width: calc(100% - 120upx); + display: flex; + color: #888; + margin-top: 15upx; + margin-bottom: 15upx; + + + .prick { + width: calc(100% - 35upx); + } + + .fa-angle-right { + width: 30upx; + font-size: 50upx; + } + } + } + } + } + } + + .print-score { + width: 100%; + height: 280upx; + background: #43CF7C; + border-radius: 20upx; + display: flex; + align-items: center; + font-size: 26upx; + color: #fff; + + .print { + width: 100%; + + .text { + line-height: 50upx; + color: #fff; + } + } + } + + .list-clean { + height: 80upx; + background: #FFFFFF; + padding-left: 20upx; + padding-right: 23upx; + margin-top: 10upx; + border-radius: 15upx; + margin-left: 20upx; + margin-right: 15upx; + padding-top: 18upx; + } + + .item-new-list { + padding-top: 0upx; + padding-left: 30upx; + padding-right: 25upx; + background: #fff; + margin: 0upx 30upx 25upx 30upx; + border-radius: 20upx; + box-shadow: 0 0 10upx 10upx #F5F5F5; + color: #000; + } + + .item-new-list-text { + margin: -10upx 45upx 30upx 45upx; + color: #999; + font-size: 25upx; + width: calc(100% - 90upx); + } + + .content-color { + color: #fff; + } + + .item-new-list-switch { + float: right; + zoom: 0.6; + position: absolute; + right: 80upx + } +</style> \ No newline at end of file diff --git a/pages/mall/test-colour.vue b/pages/mall/test-colour.vue new file mode 100644 index 0000000..a51edcd --- /dev/null +++ b/pages/mall/test-colour.vue @@ -0,0 +1,870 @@ +<template> + <view class="order full-height full-width"> + + <view class="uni-tab-bar full-width"> + + <view scroll-y @scrolltolower="loadMore()" class="full-width content" + style="margin-bottom: 20upx; overflow: auto; width: 100%;height: 100%; background: #fff;"> + <!-- 机器 --> + <view class="order-list" v-if="list"> + <view class="item-new-list"> + <view class="item full-width"> + <label class="text content-color">设备编号</label> + <label class="value content-color"> + <text style="text-align: right;" class="full-width">{{queryPage.machine_id}}</text> + </label> + </view> + </view> + + <view class="item-new-list"> + <view class="item full-width"> + <label class="text content-color">状态</label> + <label class="value content-color" v-if="list.flag.value == 'Y'"> + <text v-if="list.status.value == 0" style="text-align:right; color: #808080;" + class="full-width">离线</text> + <text v-if="list.status.value == 1 || list.status.value == 2 " + style="text-align:right; color: #5CE6B5;" class="full-width">在线</text> + <text v-if="list.status.value == 3 || list.status.value == 4 || list.status.value == 5 " + style="text-align:right; color: #D43030;" class="full-width">故障</text> + </label> + <label class="value content-color" v-if="list.flag.value == 'N'"> + <text style="text-align:right; color: #FF8D1A;" + class="full-width">锁定</text> + </label> + </view> + </view> + + + <view style="margin-top: 30upx; + border-radius: 20upx; + width: calc(100% - 60upx); + background: #fff; + margin: 0upx 30upx 10upx 30upx; + border-radius: 20upx; + box-shadow: 0 0 10upx 10upx #F5F5F5; + height: 400upx;"> + <img src="https://img.colorpark.cn/back/169811961265373fbc80762.png" + style="height: 400upx;margin: auto; display: block;" mode="aspectFit"> + </view> + + </view> + </view> + + + <view class="item-new-list-text" style="margin-top: 30upx;">打印色块是检测喷头颜色是否正常的必要操作。机器必须通电,且有正常连接网络,才能完成远程打印设备操作。</view> + + <!-- <view class="save_bt" @click="testColourBt()">打印色块</view> --> + + <view class="save_bt" @click="testColourBt()" v-if="list" + :style="{background: list.status.value == 0 ? '#999' : '#191931' }" >打印色块</view> + + + <uni-popup ref="cleanCountDown" type="bottom" :maskClick="false"> + <view style="width: 100%; height: 600upx; margin: auto;"> + <view style="background: #F9F9F9;width: 100%; height: 100%; border-radius: 20upx 20upx 0upx 0upx; + align-items: center; + display: flex; + flex-direction: column;"> + <view + style="margin-top:220upx; color: rgba(67, 207, 124, 1); font-size: 60upx; font-weight: 800 "> + {{countDownTimeCount}} + </view> + <view style="margin-top: 80upx; font-size: 26upx; color: #999; ">请稍后 </view> + <view style="margin-top: 20upx; font-size: 26upx; color: #999; "> 正在色块正在测试中,预计需要两分钟</view> + </view> + </view> + </uni-popup> + + + </view> + </view> +</template> + +<script> + import uniIcon from '@/components/uni-icon/uni-icon.vue'; + import uniPopup from '../index/common/uni-popup/uni-popup.vue'; + import Enums from '@/util/Enums'; + import foot from '../../components/foot.vue'; + import mpvuePicker from '../../components/mpvue-picker/mpvuePicker.vue'; + import mpvuePickernew from '../../components/mpvue-picker/mpvuePickernew.vue'; + import logoservice from '@/service/logoservice.js'; + let Base64 = require('js-base64').Base64; + export default { + components: { + uniPopup, + uniIcon, + foot, + mpvuePicker, + mpvuePickernew + }, + computed: { + + }, + data() { + return { + long: false, + isSinglePlatep: true, //是否单机版 或者 配送版 + isShowPullButtom: false, //false不显示true显示 + isOnclickItem: false, //是否点击item + numberlist: [], + LoupanList: [], + SortNumber: 1, + StcokList: [], //设备库存列表 + StcokLists: [], + list: null, + getStockerCount: "", //设置输入个数 + selectItem: null, + mode: 'selector', + pickerValueArray: [], + pickerValueDefault: [0], + type: 'bottom', + //上拉状态 + dataLoadState: { + pullDownRefresh: false, + reachBottom: false + }, + queryPage: { + m: 'Machine/printRecord', + machine_id: null, + page: 1, + per_page: 20, + total: 0, + date: null, //日 + month: null, //月 + year: null, //日 + is_excess: null, //套餐选择类型 + }, + shopQueryPage: { + m: 'Machine/getShop', + }, + attr: null, + //商品库存 + showshareitem: null, + showshareindex: null, + //打印年月日 + printingPickerValueArray: [], + printingpickerValueDefault: [0], + maxnumber: 12, + maxlength: 2, + be_child: 0, //子代理 + Userres_partner_id: null, //总代理 + is_inner: null, //恢复订单打印 + print_type: 0, //默认0标准版 1无限版 + shopList: null, //店铺列表数据 + GoodsItem: null, //货道数据 + stockData: null, //库存数据 + stockDataList: null, //库存列表数据 + inkStatusC: false, + inkStatusM: false, + inkStatusY: false, + inkStatusK: false, + inkStatusW: false, + inkStatusHas: false, + isShowPop: false, + timer: null, //定时器 + intCountTimer: 0, + clear_time: "", //上次清洗时间 + isClickClean: false, //是否点击 + oldMousePos: {}, + oldNodePos: {}, + autoCleanLeft: -40, //左位置 + autoCleanTop: -40, //下位置 + isTouchStart: false, + show_clean: 0, //为1时就显示清洗喷头的入口,为0时就不显示 + countDownTimeCount: 1, //倒计时 + countDownTime: null, //倒计时 + isAutoStartClean: false, //是否自动清洗开始 + shop_id: null, + isClickClean: false, + }; + }, + + methods: { + + //测试色块 + testColourBt() { + if(this.list.status.value == 0){ + uni.showToast({ + title: "打印机离线", + duration: 1000, + icon: 'error' + }) + return; + } + if (this.isClickClean) { + return; + } + this.isClickClean = true; + uni.showLoading({ + title: '色块测试中...', + }) + this.intCountTimer = 0; + this.countDownTimeCount = 1; + logoservice.MachineSavePartnerStock({ + m: 'Machine/printTestImage', + machine_id: this.queryPage.machine_id, + }).then(result => { + this.autoClick() + }).catch(err => { + uni.hideLoading(); + uni.showToast({ + title: err.msg, + duration: 1000, + icon: "none", + }) + }) + }, + + autoClick() { + this.$refs['cleanCountDown'].open(); + let that = this; + this.countDownTime = setInterval(function() { + that.countDownTimeCount++; + if (that.countDownTimeCount >= 100) { + uni.hideLoading(); + clearInterval(that.countDownTime); + that.countDownTime = null; + that.isClickClean = false + that.countDownTimeCount = 0; + that.$refs['cleanCountDown'].close() + uni.showToast({ + title: "色块测试完成", + duration: 1000, + icon: "none", + }) + + } + }, 1000); + }, + + //获取状态值 + getCleanStatus() { + logoservice.MachineSavePartnerStock({ + m: 'Machine/getClearHeadStatus', + machine_id: this.queryPage.machine_id, + }).then(result => { + if (this.countDownTimeCount >= 60) { + this.cleanTimeData(); + uni.showToast({ + title: "清洗成功", + duration: 2000 + }) + } + let clear_status = result.clear_status.value; + if (clear_status == 0) { + this.cleanTimeData(); + uni.showToast({ + title: "清洗成功", + duration: 2000 + }) + } + }).catch(err => { + + }) + }, + + + //清除计时器数据 + cleanTimeData() { + this.isAutoStartClean = false; + clearInterval(this.timer); + this.timer = null; + clearInterval(this.countDownTime); + this.countDownTime = null; + this.intCountTimer = 0; + this.isClickClean = false; + uni.hideLoading(); + this.$refs['cleanCountDown'].close(); + this.countDownTimeCount = 1; + }, + + + + //调转收益列表 + toLiquidationList() { + uni.navigateTo({ + url: '../mine/Liquidation?machineid=' + this.queryPage.machine_id, + }); + }, + + //字符串转base64 + getStrToBase64(str) { + return Base64.encode(str); + }, + + //取消 + cancel(type) { + this.$refs['showshareinput'].close() + }, + + + + + + + //确定 + onConfirm(e) { + this.shop_id = e.value[0]; + }, + + profit() { + uni.navigateTo({ + url: '../mall/eq-profit?machineid=' + this.list.id, + }); + }, + + toorder() { + uni.navigateTo({ + url: '../mine/order?machineid=' + this.list.id, + }); + }, + + listdetail() { + uni.showLoading({ + title: '正在加载中...' + }); + logoservice.Machinelistdetail({ + m: 'Machine/list', + machine_id: this.queryPage.machine_id + }).then(result => { + this.long = true + uni.stopPullDownRefresh(); + uni.hideLoading(); + if (result[0] != undefined) { + this.list = result[0] + this.shop_id = this.list.shop_id + } + }).catch(err => { + uni.hideLoading(); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + }, + + loadGoodsList(direction) { + if (this.dataLoadState.pullDownRefresh || this.dataLoadState.reachBottom) return; + uni.showLoading({ + title: '正在加载中...' + }) + this.dataLoadState.pullDownRefresh = direction === Enums.DATA_DIRECTION.UP; + this.dataLoadState.reachBottom = direction === Enums.DATA_DIRECTION.DOWN; + if (this.dataLoadState.reachBottom) { + if (Math.ceil(this.queryPage.total / this.queryPage.per_page) < this.queryPage.page) { + return setTimeout(() => { + uni.showToast({ + title: '没有更多数据了!', + icon: 'none' + }); + }, 500); + } + } + logoservice.Machinelist(this.queryPage).then(result => { + this.long = true + let queryList = result.data.data + //触底更新时,当前列表+查询结果集 + let newList = this.LoupanList.concat(queryList) + this.LoupanList = newList + //分页对象处理 + this.queryPage.total = result.data.total; + this.queryPage.per_page = result.data.per_page; + //停止当前页面下拉刷新 + if (this.dataLoadState.pullDownRefresh) uni.stopPullDownRefresh(); + //数据加载状态处理 false + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + uni.hideLoading(); + }).catch(err => { + //停止当前页面下拉刷新 + if (this.dataLoadState.pullDownRefresh) uni.stopPullDownRefresh(); + //数据加载状态处理 false + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + uni.hideLoading(); + }); + }, + + //获取店铺数据 + machineGetShopList() { + logoservice.MachineGetShop(this.shopQueryPage).then(result => { + if (result != null && result != undefined) { + this.shopList = result; + } + }).catch(err => { + + }); + }, + + onChange(e) { + + }, + + onCancel(e) { + + }, + + //goodsItem加载全部交易类型数据 + getGoodsAttrList() { + logoservice.MoneystatementList({ + m: 'Machine/printRecord', + machine_id: this.queryPage.machine_id, + sub: 1 + }).then(result => { + + }).catch(res => { + uni.showToast({ + title: res.msg ? res.msg : '未查到交易类型选择', + icon: 'none' + }); + }); + }, + }, + + //下拉加载 + onPullDownRefresh() { + + }, + + //上拉加载 + onReachBottom() { + + }, + + onLoad(options) { + let that = this; + this.queryPage.machine_id = options.machineid + this.listdetail(); + }, + + onShow() { + this.machineGetShopList(); + } + }; +</script> + +<style lang="scss"> + page { + width: 100%; + height: 100%; + background: #fff; + } + + .eq-detail-score { + padding: 40upx 0; + width: 100%; + height: 210upx; + margin: 0upx auto; + background: #43CF7C; + border-radius: 20upx; + display: flex; + align-items: center; + font-size: 26upx; + color: #fff; + } + + .green { + background-color: #4FB36B !important; + color: #FFFFFF; + } + + /*无数据 */ + .noData { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + } + + .noData_img { + width: 260upx; + height: 260upx; + display: block; + margin: 0upx auto 102upx; + } + + .noData_title { + text-align: center; + font-size: 36upx; + } + + .noData_text { + margin-top: 35upx; + font-size: 30upx; + font-weight: 400; + } + + .noData_but { + width: 230upx; + height: 70upx; + line-height: 70upx; + text-align: center; + color: #F56364; + margin: 140upx auto 0; + border: 1upx solid #F56364; + border-radius: 35upx; + } + + /* 去除button默认样式 */ + button::after { + border: none; + } + + button { + background-color: transparent; + padding-left: 0; + padding-right: 0; + line-height: inherit; + } + + .lang-open { + transform: rotate(90deg); + transition: transform 0.5s; + } + + .lang-close { + transform: rotateY(0deg); + transition: transform 0.5s; + } + + //2020-11-17 + .content-open { + height: 90upx; + overflow: hidden; + transition: all 0.4s cubic-bezier(0.25, 1.0, 0.25, 1.0); + } + + .content-close { + height: 0; + transition: all 0.4s cubic-bezier(0.25, 1.0, 0.25, 1.0); + } + + .item-open { + height: 40upx; + transition: all 0.4s cubic-bezier(0.25, 1.0, 0.25, 1.0); + } + + .item-close { + opacity: 0; + height: 0; + } + + /*输入框弹框显示 */ + .weui-search-bar { + position: relative; + padding: 8upx 10upx; + display: flex; + height: 135upx; + background: #FFFFFF; + align-items: center; + } + + .weui-search-bar_form { + width: 100%; + border-radius: 50upx; + background: #F6F6F6; + } + + .weui-search-bar_input { + height: 80upx; + line-height: 80upx; + font-size: 25upx; + padding-left: 24upx; + } + + /*底部弹框显示 */ + .uni-pop_show { + display: flex; + flex-direction: column; + } + + .uni-calendar-item--isDay-text.data-v-09f1e40c { + color: #5CE6B5 !important; //5CE6B5 + } + + .uni-calendar-item--isDay.data-v-09f1e40c { + background: #5CE6B5 !important; + color: #fff !important; + } + + .uni-calendar-item--checked.data-v-09f1e40c { + background: #5CE6B5 !important; + color: #fff !important; + } + + .uni-numbox__value { + width: 120upx !important; + } + + page { + width: 100%; + height: 100%; + background: #F5F5F5; + } + + .eq_list_button { + display: flex; + flex-direction: row; + line-height: 60upx; + padding-bottom: 20upx; + } + + .eq_list_button_ul { + flex: 1; + } + + .eq_list_button_li { + margin: auto; + font-size: 24upx; + color: #FFFFFF; + width: 150upx; + font-weight: bold; + text-align: center; + line-height: 60upx; + height: 60upx; + background-color: #5CE6B6; + } + + .uni-swiper-tab { + border-bottom: 1upx solid #F5F5F5; + } + + .clean-bt { + border-radius: 50%; + width: 200upx; + height: 200upx; + bottom: 160upx; + right: 20upx; + position: fixed; + font-size: 27upx; + text-align: center; + line-height: 130upx; + z-index: 99991; + justify-content: center; + align-items: center; + } + + .order { + width: 100%; + height: 100%; + background-color: #fff; + + .uni-tab-bar { + height: auto !important; + + .uni-swiper-tab { + position: fixed; + top: var(--window-top); + z-index: 999; + width: 100%; + line-height: 85upx; + height: 85upx; + + .swiper-tab-list { + width: calc(100% / 3); + font-size: 30upx; + } + } + + .active { + color: #43CF7C; + } + } + + .way-list { + margin: 0 20upx; + padding-top: 20upx; + border-radius: 10upx; + + .topBox { + width: calc(100% - 60upx); + margin-left: 30upx; + margin-top: 15upx; + justify-content: center; + } + + .topLittleBOX-1 { + font-size: 26upx; + width: 120upx; + color: #333; + overflow: text-align; + } + + .topLittleBOX-2 { + padding-left: 20upx; + padding-top: auto; + padding-bottom: auto; + display: flex; + vertical-align: middle; + flex-direction: row; + align-items: center; + width: calc(100% - 120upx); + position: relative; + } + + .row-1 { + height: 30upx; + background-color: #43CF7C; + border-radius: 20upx; + width: 0upx; + transition: width 1.5s linear; + } + + .rowText { + margin-left: 10upx; + font-size: 26upx; + color: #333; + float: right; + } + + .way-item { + background: #FFFFFF; + border-radius: 10upx; + margin-bottom: 20upx; + } + + .way { + height: 120upx; + min-height: 90upx; + display: flex; + align-items: center; + font-size: 28upx; + + .text { + width: 250upx; + padding-left: 20upx; + color: #fff; + } + + .value { + width: calc(100% - 280upx); + display: flex; + + .prick { + width: calc(100% - 40upx); + } + + .fa-angle-right { + width: 40upx; + font-size: 50upx; + } + } + } + } + + .content { + padding-top: 10upx; + + .order-list { + min-height: 350upx; + width: 100%; + border-radius: 10upx; + + .item { + min-height: 70upx; + display: flex; + align-items: center; + font-size: 26upx; + border-bottom: 1upx solid #F5F5F5; + + .text { + width: 250upx; + color: #000; + font-size: 29upx; + } + + .value { + width: calc(100% - 120upx); + display: flex; + color: #888; + margin-top: 15upx; + margin-bottom: 15upx; + + + .prick { + width: calc(100% - 35upx); + } + + .fa-angle-right { + width: 30upx; + font-size: 50upx; + } + } + } + } + } + } + + .print-score { + width: 100%; + height: 280upx; + background: #43CF7C; + border-radius: 20upx; + display: flex; + align-items: center; + font-size: 26upx; + color: #fff; + + .print { + width: 100%; + + .text { + line-height: 50upx; + color: #fff; + } + } + } + + .list-clean { + height: 80upx; + background: #FFFFFF; + padding-left: 20upx; + padding-right: 23upx; + margin-top: 10upx; + border-radius: 15upx; + margin-left: 20upx; + margin-right: 15upx; + padding-top: 18upx; + } + + .item-new-list { + padding-top: 0upx; + padding-left: 30upx; + padding-right: 25upx; + background: #fff; + margin: 0upx 30upx 25upx 30upx; + border-radius: 20upx; + box-shadow: 0 0 10upx 10upx #F5F5F5; + color: #000; + } + + .item-new-list-text { + margin: -10upx 45upx 30upx 45upx; + color: #999; + font-size: 25upx; + width: calc(100% - 90upx); + } + + .content-color { + color: #fff; + } + + .item-new-list-switch { + float: right; + zoom: 0.6; + position: absolute; + right: 80upx + } + + .save_bt { + height: 100upx; + width: calc(100% - 60upx); + margin-left: 30upx; + background: #191931; + text-align: center; + line-height: 100upx; + color: #fff; + margin-top: 100upx; + border-radius: 20upx; + } +</style> \ No newline at end of file diff --git a/pages/mall/update_name.vue b/pages/mall/update_name.vue new file mode 100644 index 0000000..965c17e --- /dev/null +++ b/pages/mall/update_name.vue @@ -0,0 +1,600 @@ +<template> + <view class="order full-height full-width"> + + <view class="uni-tab-bar full-width"> + + <view scroll-y @scrolltolower="loadMore()" class="full-width content" + style="margin-bottom: 20upx; overflow: auto; width: 100%;height: 100%;"> + + <view class="order-list"> + + <view class="item-new-list"> + <view class="item full-width" style="height: 60upx;"> + <label class="text content-color">名称</label> + <label class="value content-color"> + <view style="width: 260upx; height: 50upx; background: transparent; + border: 1upx solid #999; + border-radius: 6upx; position: absolute; right: 50upx; margin-top: -25upx;"> + <input style="color: #000; margin-left: 20upx;" :value="code" maxlength="25" + @input="descInput($event)" /> + </view> + </label> + </view> + </view> + + </view> + </view> + + <view class="save_bt" @click="saveMachineCode()">确认</view> + + </view> + + </view> +</template> + +<script> + import uniIcon from '@/components/uni-icon/uni-icon.vue'; + import uniPopup from '../index/common/uni-popup/uni-popup.vue'; + import Enums from '@/util/Enums'; + import foot from '../../components/foot.vue'; + import logoservice from '@/service/logoservice.js'; + import mpvuePicker from '../../components/mpvue-picker/mpvuePicker.vue'; + let Base64 = require('js-base64').Base64; + export default { + components: { + uniPopup, + uniIcon, + foot, + mpvuePicker + }, + computed: { + + }, + data() { + return { + long: false, + isSinglePlatep: true, + isShowPullButtom: false, + isOnclickItem: false, + list: null, + selectItem: null, + mode: 'selector', + pickerValueArray: [], + pickerValueDefault: [0], + type: 'bottom', + dataLoadState: { + pullDownRefresh: false, + reachBottom: false + }, + queryPage: { + m: 'Machine/printRecord', + machine_id: null, + page: 1, + per_page: 20, + total: 0, + date: null, + month: null, + year: null, + is_excess: null, + }, + shopQueryPage: { + m: 'Machine/getShop', + }, + attr: null, + maxnumber: 12, + maxlength: 2, + be_child: 0, //子代理 + Userres_partner_id: null, //总代理 + is_inner: null, //恢复订单打印 + print_type: 0, //默认0标准版 1无限版 + shopList: null, //店铺列表数据 + isShowPop: false, + code: null, + }; + }, + + methods: { + + //保存设备名称 + saveMachineCode() { + uni.showLoading({ + title: '正在加载中...' + }); + logoservice.Machinelistdetail({ + m: 'Machine/saveMachineName', + machine_id: this.queryPage.machine_id, + code: this.code + }).then(result => { + uni.hideLoading(); + uni.showToast({ + title: "修改成功", + icon: 'none' + }); + uni.navigateBack(); + }).catch(err => { + uni.hideLoading(); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + }, + + //输入框监听 + descInput(e) { + this.code = e.target.value; + }, + + onChange(e) { + + }, + + onCancel(e) { + + }, + + //设备列表详情 + listdetail() { + uni.showLoading({ + title: '正在加载中...' + }); + logoservice.Machinelistdetail({ + m: 'Machine/list', + machine_id: this.queryPage.machine_id + }).then(result => { + this.long = true + uni.stopPullDownRefresh(); + uni.hideLoading(); + if (result[0] != undefined) { + this.list = result[0] + } + }).catch(err => { + uni.hideLoading(); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + }, + + }, + + onPullDownRefresh() { + + }, + + onReachBottom() { + + }, + + onLoad(options) { + let that = this; + this.queryPage.machine_id = options.machineid + this.code = options.code + }, + + onShow() { + + } + + }; +</script> + +<style lang="scss"> + page { + width: 100%; + height: 100%; + background: #fff; + } + + .eq-detail-score { + padding: 40upx 0; + width: 100%; + height: 210upx; + margin: 0upx auto; + background: #43CF7C; + border-radius: 20upx; + display: flex; + align-items: center; + font-size: 26upx; + color: #fff; + } + + .green { + background-color: #4FB36B !important; + color: #FFFFFF; + } + + /*无数据 */ + .noData { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + } + + .noData_img { + width: 260upx; + height: 260upx; + display: block; + margin: 0upx auto 102upx; + } + + .noData_title { + text-align: center; + font-size: 36upx; + } + + .noData_text { + margin-top: 35upx; + font-size: 30upx; + font-weight: 400; + } + + .noData_but { + width: 230upx; + height: 70upx; + line-height: 70upx; + text-align: center; + color: #F56364; + margin: 140upx auto 0; + border: 1upx solid #F56364; + border-radius: 35upx; + } + + /* 去除button默认样式 */ + button::after { + border: none; + } + + button { + background-color: transparent; + padding-left: 0; + padding-right: 0; + line-height: inherit; + } + + .lang-open { + transform: rotate(90deg); + transition: transform 0.5s; + } + + .lang-close { + transform: rotateY(0deg); + transition: transform 0.5s; + } + + //2020-11-17 + .content-open { + height: 90upx; + overflow: hidden; + transition: all 0.4s cubic-bezier(0.25, 1.0, 0.25, 1.0); + } + + .content-close { + height: 0; + transition: all 0.4s cubic-bezier(0.25, 1.0, 0.25, 1.0); + } + + .item-open { + height: 40upx; + transition: all 0.4s cubic-bezier(0.25, 1.0, 0.25, 1.0); + } + + .item-close { + opacity: 0; + height: 0; + } + + /*输入框弹框显示 */ + .weui-search-bar { + position: relative; + padding: 8upx 10upx; + display: flex; + height: 135upx; + background: #FFFFFF; + align-items: center; + } + + .weui-search-bar_form { + width: 100%; + border-radius: 50upx; + background: #F6F6F6; + } + + .weui-search-bar_input { + height: 80upx; + line-height: 80upx; + font-size: 25upx; + padding-left: 24upx; + } + + /*底部弹框显示 */ + .uni-pop_show { + display: flex; + flex-direction: column; + } + + .uni-calendar-item--isDay-text.data-v-09f1e40c { + color: #5CE6B5 !important; //5CE6B5 + } + + .uni-calendar-item--isDay.data-v-09f1e40c { + background: #5CE6B5 !important; + color: #fff !important; + } + + .uni-calendar-item--checked.data-v-09f1e40c { + background: #5CE6B5 !important; + color: #fff !important; + } + + .uni-numbox__value { + width: 120upx !important; + } + + page { + width: 100%; + height: 100%; + background: #F5F5F5; + } + + .eq_list_button { + display: flex; + flex-direction: row; + line-height: 60upx; + padding-bottom: 20upx; + } + + .eq_list_button_ul { + flex: 1; + } + + .eq_list_button_li { + margin: auto; + font-size: 24upx; + color: #FFFFFF; + width: 150upx; + font-weight: bold; + text-align: center; + line-height: 60upx; + height: 60upx; + background-color: #5CE6B6; + } + + .uni-swiper-tab { + border-bottom: 1upx solid #F5F5F5; + } + + .clean-bt { + border-radius: 50%; + width: 200upx; + height: 200upx; + bottom: 160upx; + right: 20upx; + position: fixed; + font-size: 27upx; + text-align: center; + line-height: 130upx; + z-index: 99991; + justify-content: center; + align-items: center; + } + + .order { + width: 100%; + height: 100%; + background-color: #fff; + + .uni-tab-bar { + height: auto !important; + + .uni-swiper-tab { + position: fixed; + top: var(--window-top); + z-index: 999; + width: 100%; + line-height: 85upx; + height: 85upx; + + .swiper-tab-list { + width: calc(100% / 3); + font-size: 30upx; + } + } + + .active { + color: #43CF7C; + } + } + + .way-list { + margin: 0 20upx; + padding-top: 20upx; + border-radius: 10upx; + + .topBox { + width: calc(100% - 60upx); + margin-left: 30upx; + margin-top: 15upx; + justify-content: center; + } + + .topLittleBOX-1 { + font-size: 26upx; + width: 120upx; + color: #333; + overflow: text-align; + } + + .topLittleBOX-2 { + padding-left: 20upx; + padding-top: auto; + padding-bottom: auto; + display: flex; + vertical-align: middle; + flex-direction: row; + align-items: center; + width: calc(100% - 120upx); + position: relative; + } + + .row-1 { + height: 30upx; + background-color: #43CF7C; + border-radius: 20upx; + width: 0upx; + transition: width 1.5s linear; + } + + .rowText { + margin-left: 10upx; + font-size: 26upx; + color: #333; + float: right; + } + + .way-item { + background: #FFFFFF; + border-radius: 10upx; + margin-bottom: 20upx; + } + + .way { + height: 120upx; + min-height: 90upx; + display: flex; + align-items: center; + font-size: 28upx; + + .text { + width: 250upx; + padding-left: 20upx; + color: #fff; + } + + .value { + width: calc(100% - 280upx); + display: flex; + + .prick { + width: calc(100% - 40upx); + } + + .fa-angle-right { + width: 40upx; + font-size: 50upx; + } + } + } + } + + .content { + padding-top: 10upx; + + .order-list { + min-height: 350upx; + width: 100%; + border-radius: 10upx; + + .item { + min-height: 70upx; + display: flex; + align-items: center; + font-size: 26upx; + border-bottom: 1upx solid #F5F5F5; + + .text { + width: 250upx; + color: #000; + font-size: 29upx; + } + + .value { + width: calc(100% - 120upx); + display: flex; + color: #888; + margin-top: 15upx; + margin-bottom: 15upx; + + + .prick { + width: calc(100% - 35upx); + } + + .fa-angle-right { + width: 30upx; + font-size: 50upx; + } + } + } + } + } + } + + .print-score { + width: 100%; + height: 280upx; + background: #43CF7C; + border-radius: 20upx; + display: flex; + align-items: center; + font-size: 26upx; + color: #fff; + + .print { + width: 100%; + + .text { + line-height: 50upx; + color: #fff; + } + } + } + + .list-clean { + height: 80upx; + background: #FFFFFF; + padding-left: 20upx; + padding-right: 23upx; + margin-top: 10upx; + border-radius: 15upx; + margin-left: 20upx; + margin-right: 15upx; + padding-top: 18upx; + } + + .item-new-list { + padding-top: 0upx; + padding-left: 30upx; + padding-right: 25upx; + background: #fff; + margin: 0upx 30upx 25upx 30upx; + border-radius: 20upx; + box-shadow: 0 0 10upx 10upx #F5F5F5; + color: #000; + } + + .item-new-list-text { + margin: -10upx 45upx 30upx 45upx; + color: #999; + font-size: 25upx; + width: calc(100% - 90upx); + } + + .content-color { + color: #fff; + } + + .save_bt { + height: 100upx; + width: calc(100% - 60upx); + margin-left: 30upx; + background: #191931; + text-align: center; + line-height: 100upx; + color: #fff; + margin-top: 100upx; + border-radius: 20upx; + } +</style> \ No newline at end of file diff --git a/pages/mine/Liquidation-details.vue b/pages/mine/Liquidation-details.vue new file mode 100644 index 0000000..01d2d68 --- /dev/null +++ b/pages/mine/Liquidation-details.vue @@ -0,0 +1,251 @@ +<template> + <view class="full-width content-color full-height" style="position: relative;"> + <view class="full-width"> + <view class="full-width" v-if="long"> + <view style="text-align: center; font-weight: bold; padding: 100upx 0;"> + <view style="font-size:80upx;font-weight:bold;">{{LoupanList.settle_amount || ''}}</view> + <view v-if="LoupanList.direction.value == 'income'" style="font-size:26upx;font-weight:400;color:#5CE6B6;">收入(¥)</view> + <view v-if="LoupanList.direction.value == 'expense'" style="font-size:26upx;font-weight:400;color:#F67273;">退款(¥)</view> + <view v-if="LoupanList.direction.value == 'withdrawal'" style="font-size:26upx;font-weight:400;color:#F67273;">提现(¥)</view> + </view> + <view style="display: flex; justify-content: center;"> + <view style="width: 100upx;"> + <view style="width: 100upx;"> + <view style="width:32upx; height:32upx; margin: auto; background:#5CE6B5; border-radius:50%;"></view> + </view> + <view style="width:1px; height:80upx; margin: auto; background:#5CE6B5;"></view> + <view v-if="LoupanList.status.value == 0"> + <view style="width:32upx; height:32upx; margin: auto; background:#B2B2B2; border-radius:50%;"></view> + <view style="width:1px; height:80upx; margin: auto; background:#B2B2B2;"></view> + </view> + <view v-if="LoupanList.status.value == 1 || LoupanList.status.value == 2"> + <view style="width:32upx; height:32upx; margin: auto; background:#5CE6B5; border-radius:50%;"></view> + <view style="width:1px; height:80upx; margin: auto; background:#5CE6B5;"></view> + </view> + <view v-if="LoupanList.status.value != 2" style="width:32upx; height:32upx; margin: auto; background:#B2B2B2; border-radius:50%;"></view> + <view v-if="LoupanList.status.value == 2" style="width:32upx; height:32upx; margin: auto;"> + <span class="iconfont icon-duihao2" style="color: #5CE6B5; font-size: 32upx;"></span> + </view> + </view> + <view> + <view> + <span>待清算</span> + <span style="color: #B2B2B2; padding-left: 20upx;">{{LoupanList.create_time || ''}}</span> + </view> + <view style="margin-top: 70upx;"> + <span v-if="LoupanList.status.value == 0" style="color: #B2B2B2;">待结算</span> + <span v-if="LoupanList.status.value == 1 || LoupanList.status.value == 2" >待结算</span> + <span v-if="LoupanList.status.value == 1 || LoupanList.status.value == 2" style="color: #B2B2B2; padding-left: 20upx;"> + {{datatime(LoupanList.billing_time) || ''}} + </span> + </view> + <view style="margin-top: 70upx;"> + <span v-if="LoupanList.status.value != 2" style="color: #B2B2B2;">已结算</span> + <span v-if="LoupanList.status.value == 2" style="color: #5CE6B5;">已结算</span> + <span v-if="LoupanList.status.value == 2" style="color: #B2B2B2; padding-left: 20upx;">{{datatime(LoupanList.finish_time) || ''}}</span> + </view> + </view> + </view> + <view style="display: flex; justify-content: center;"> + <view class="eq_list"> + <view class="full-width eq_list_ul" style="margin-top: 30upx;"> + <text class="eq_list_ul_left">订单编号:</text> + <text class="eq_list_ul_right">{{LoupanList.order_id || ''}}</text> + </view> + <view class="full-width eq_list_ul"> + <text class="eq_list_ul_left">设备编号:</text> + <text class="eq_list_ul_right">{{LoupanList.machine_id || ''}}</text> + </view> + <view class="full-width eq_list_ul"> + <text class="eq_list_ul_left">产品属性:</text> + <text class="eq_list_ul_right">{{LoupanList.goods_attr || ''}}</text> + </view> + <!-- <view class="full-width eq_list_ul" style=""> + <text class="eq_list_ul_left">订单金额:</text> + <text class="eq_list_ul_right">¥{{LoupanList.settle_total || ''}}</text> + </view> --> + <!-- <view class="full-width eq_list_ul"> + <text class="eq_list_ul_left">成本金额:</text> + <text class="eq_list_ul_right">¥{{LoupanList.cost_amount || ''}}</text> + </view> --> + <!-- <view class="full-width eq_list_ul"> + <text class="eq_list_ul_left">结算比例:</text> + <text class="eq_list_ul_right">{{LoupanList.settle_rate*100 || ''}}%</text> + </view> --> + <view class="full-width eq_list_ul"> + <text v-if="LoupanList.direction.value == 'income'" class="eq_list_ul_left">收入金额:</text> + <text v-if="LoupanList.direction.value == 'expense'" class="eq_list_ul_left">退款金额:</text> + <text v-if="LoupanList.direction.value == 'withdrawal'" class="eq_list_ul_left">提现金额:</text> + <text class="eq_list_ul_right">{{LoupanList.settle_amount || ''}}(¥)</text> + </view> + <view class="full-width eq_list_ul"> + <text class="eq_list_ul_left">所属代理:</text> + <text class="eq_list_ul_right">{{LoupanList.partner.name || ''}}</text> + </view> + <view class="full-width eq_list_ul"> + <text class="eq_list_ul_left">所属店铺:</text> + <text class="eq_list_ul_right">{{LoupanList.shop.short_name || ''}}</text> + </view> + <view class="full-width eq_list_ul"> + <text class="eq_list_ul_left">店铺地址:</text> + <view class="eq_list_ul_right" style="width: 350upx;"> + <view v-html="LoupanList.shop.address"></view> + </view> + </view> + <view class="full-width eq_list_ul"> + <text class="eq_list_ul_left">订单作品:</text> + <view class="eq_list_ul_right"> + <image :src="LoupanList.order_queue.works_image" mode="widthFix" style="width: 200upx;"></image> + </view> + </view> + <!-- <view style="width: 100%; height: 1upx; background: #F5F5F5; margin: 10upx 0;"></view> + <view class="full-width eq_list_ul"> + <text class="eq_list_ul_left">下单时间:</text> + <text class="eq_list_ul_right">{{LoupanList.create_time || ''}}</text> + </view> + <view class="full-width eq_list_ul" v-if="LoupanList.billing_time" > + <text class="eq_list_ul_left">确认时间:</text> + <text class="eq_list_ul_right">{{datatime(LoupanList.billing_time) || ''}}</text> + </view> + <view class="full-width eq_list_ul" v-if="LoupanList.finish_time"> + <text class="eq_list_ul_left">结算时间:</text> + <text class="eq_list_ul_right">{{datatime(LoupanList.finish_time) || ''}}</text> + </view> + <view style="width: 100%; height: 1upx; background: #F5F5F5; margin: 10upx 0;"></view> + <view class="full-width eq_list_ul" style="display: block;"> + <text style="color: #818181; font-size: 28upx;font-weight:500; line-height: 80upx;">结算方式</text> + <view style="background:rgba(238,238,238,1); border-radius:10upx; padding: 15upx;"> + <view style="line-height: 40upx;">(订单金额 - 成本金额) X 结算比例 = 收入金额</view> + <view style="line-height: 40upx;">例:(¥{{LoupanList.settle_total || ''}} - ¥{{LoupanList.cost_amount || ''}}) X {{LoupanList.settle_rate*100 || ''}}% = ¥{{LoupanList.settle_amount || ''}}</view> + </view> + </view> --> + </view> + </view> + </view> + </view> + </view> +</template> + +<script> + import uniIcon from '@/components/uni-icon/uni-icon.vue'; + import logoservice from '@/service/logoservice.js'; + export default { + components: { + uniIcon + }, + computed: {}, + data() { + return { + long:false, + LoupanList: { + finish_time:null + }, //数据 + queryPage: { + m:'Money/statementDetail', + id:null + }, + }; + }, + methods: { + datatime(time){ + if(time != null){ + var date = new Date(time*1000) + var year = date.getFullYear(); + var month = date.getMonth() + 1; + var day = date.getDate(); + var hour = date.getHours(); + if(month < 10) { + month = '0' + month; + } + if(day < 10) { + day = '0' + day; + } + if(hour < 10) { + hour = '0' + hour; + } + var minute = date.getMinutes(); + if(minute < 10) { + minute = '0' + minute; + } + var second = date.getSeconds(); + if(second < 10) { + second = '0' + second; + } + var currentTime = year + "-" + month + "-" + day + " " + hour + ":" + minute + ":" + second; + return currentTime + }else{ + return 0 + } + + }, + // 加载数据 + loadGoodsList() { + uni.showLoading({title: '正在加载中...'}) + logoservice.MoneystatementDetail(this.queryPage).then(result => { + this.long = true + this.LoupanList = result + uni.hideLoading(); + }).catch(err => { + uni.hideLoading(); + uni.showToast({ title: err.msg, icon: 'none' }); + }); + } + }, + // 下拉加载 + onPullDownRefresh() { + // this.loadGoodsList(); + }, + // 上拉加载 + onReachBottom() { + // this.loadGoodsList(); + }, + onLoad(options) { + console.log(options) + this.queryPage.id = options.id + uni.login({ + provider: 'weixin', + success: (res) => { + logoservice.login({ m:'Init/init',code:res.code}).then(result => { + logoservice.setwixinInfo(result); + this.loadGoodsList(); + }).catch(err => { + uni.navigateTo({url: 'login',}); + }) + }, + fail: (err) => { + console.error('授权登录失败:' + JSON.stringify(err)); + } + }); + }, + onShow() { + + } + }; +</script> + +<style lang="scss"> + page { + width: 100%; + height: 100%; + background: #FFFFFF; + } + .eq_list{ + margin:0 auto 20upx; + padding: 10upx 20upx; + background: #FFFFFF; + .eq_list_ul{ + display: flex; + // align-items: center; + line-height: 55upx; + font-size: 28upx; + .eq_list_ul_left{ + // width: 180upx; + color: #818181; + } + .eq_list_ul_right{ + // width: calc(100% - 180upx); + // text-align: right; + } + } + } +</style> diff --git a/pages/mine/Liquidation.vue b/pages/mine/Liquidation.vue new file mode 100644 index 0000000..b18b28b --- /dev/null +++ b/pages/mine/Liquidation.vue @@ -0,0 +1,657 @@ +<template> + <view class="full-width content-color full-height" style="position: relative;"> + <view class="full-width"> + <view style="position: fixed; width: 100%;"> + <view style="width:100%;text-align: center;padding: 30upx 0; background: #F1F1F1;" + @click="togglePopup()"> + <!-- <text>{{queryPage.goods_attr == null ? '全部交易类型' : queryPage.goods_attr}}</text> --> + <text>{{directiontext == null ? '全部交易类型' : directiontext}}</text> + <span class="iconfont icon-xiala" + style="margin-left: 10upx; font-size: 20upx; color: #BCBEC1;"></span> + </view> + <view style="display: flex;background: #F6F6F6;"> + <!-- 年月日 --> + <view style="width: calc(100% / 2); text-align: left;padding: 30upx 0 30upx 20upx;" + @click="showPicker('selector')"> + <text v-if="queryPage.year">{{queryPage.year}}年</text> + <text v-if="queryPage.month">{{queryPage.month}}月</text> + <text v-if="queryPage.date">{{queryPage.date}}</text> + <span class="iconfont icon-xiala" + style="margin-left: 10upx; font-size: 20upx; color: #BCBEC1;"></span> + </view> + <!-- 状态类型 --> + <view + style="width: calc(100% / 2); text-align: right;padding: 30upx 20upx 30upx 0; visibility: hidden;"> + <picker @change="bindPickerChange" :value="queryPage.status" :range="array"> + {{array[queryPage.status] || '全部'}} + <span class="iconfont icon-xiala" + style="margin-left: 10upx; font-size: 20upx; color: #BCBEC1;"></span> + </picker> + </view> + </view> + <view + style="display: flex; padding: 0 20upx 20upx; color: #BCBEC1; background: #F6F6F6; font-size: 24upx;"> + <view>收入明细:{{queryPage.count || '0'}}笔</view> + <view style="margin-left: 10upx;">收入金额:¥{{settle_amount || '0'}}元</view> + </view> + </view> + <!-- 动态数据 --> + <view scroll-y @scrolltolower="loadMore()" class="full-width" @touchend="touchEnd" v-if="long" + style="padding-top: 252upx;"> + <view v-for="(item, index) in LoupanList" :key="index" class="eq_list" @click="details(item)"> + <view class="eq_list_div"> + <view class="full-width eq_list_ul"> + <text class="eq_list_ul_left" + v-if="item.direction.value != 'withdrawal'">{{item.goods_attr || ''}}</text> + <text class="eq_list_ul_right"> + <text v-if="item.settle_amount > 0 && self_payment == 0 && item.material_id != 0" + style="color:#5CE6B6;font-size: 30upx;">+{{item.settle_amount || '0'}}</text> + + <text v-if="item.settle_amount > 0 && self_payment == 0 && item.material_id == 0" + style="color:#5CE6B6;font-size: 30upx;">+{{item.settle_amount || '0'}}</text> + + <text v-if="item.settle_amount > 0 && self_payment == 1 && item.material_id == 0 " + style="color:#5CE6B6;font-size: 30upx;">+{{item.real_amount || '0'}}</text> + + <text v-if="item.settle_amount <= 0 " style="color:#F67273;font-size: 30upx;"> + {{item.settle_amount || '0'}}</text> + + </text> + </view> + <view class="full-width eq_list_ul" style="color: #BCBEC1; font-size: 24upx;"> + <text style="width: 40%;">{{item.create_time}}</text> + <!-- <text style="width: 30%; text-align: center;visibility: hidden;">订单金额:¥{{item.settle_total || ''}}</text> + <text style="width: 10%; text-align: center;visibility: hidden;">{{item.settle_rate*100}}%</text> --> + <text style="width: 60%; text-align: right;color:#F67273;" + v-if="item.direction.value == 'expense'">退款</text> + <text style="width: 60%; text-align: right;color:#F67273;" + v-if="item.direction.value == 'withdrawal'">提现</text> + </view> + </view> + </view> + <!-- 暂无相关信息 --> + <view class="align-center content-color" + style="position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%);" + v-if="LoupanList.length == 0 || LoupanList.length == null"> + <span class="iconfont icon-wushuju" + style="font-size: 100upx; text-align: center; color: #B2B2B2;"></span> + <view style="color: #B2B2B2; text-align: center; line-height: 50upx;font-size: 24upx;">暂无相关信息</view> + </view> + </view> + <!-- 动态数据完 --> + </view> + <!-- 返回顶部 --> + <view v-if="totopstatus" class="to-top content-color" @click="totop()"> + <view class="fa fa-angle-right to-top-icon"></view> + </view> + <mpvue-picker ref="mpvuePicker" :themeColor="'#53B2B0'" :pickerValueDefault="pickerValueDefault" + @onChange="onChange" @onCancel="onCancel" @onConfirm="onConfirm" :pickerValueArray="pickerValueArray"> + </mpvue-picker> + <uni-popup ref="showshare" :type="type" @change="change"> + <view class="uni-share" style="width: 100%; margin: auto;"> + <view style="background: #F9F9F9;width: 100%;border-bottom: 1upx solid #00000000;"> + <view style="width: 100%;border-bottom: 1upx solid #E9E7ED; height:100upx; + text-align: center;line-height: 100upx; font-size: 26upx; font-weight: 500;"> + 选择交易类型 + </view> + <scroll-view scroll-y style="margin: auto; height: 500upx; overflow: hidden; overflow-y: scroll;"> + <view style="width: calc(100% - 40upx); margin:20upx auto; overflow: hidden;"> + <!-- <view v-for="(item, index) in goodsItem" :key="index" @click="selectMonth(item)" :class="queryPage.goods_attr == item ? 'green':''" + style="width: calc(33% - 20upx);margin:10upx; float: left; background: #ffffff;height: 60px; border-radius: 5upx; font-size: 26upx; text-align: center;line-height: 60px;"> + {{item == null ? '全部' : item}} + </view> --> + <view v-for="(item, index) in directionlist" :key="index" + @click="selectMonthdirection(item)" + :class="queryPage.direction == item.val ? 'green':''" + style="width: calc(33% - 20upx);margin:10upx; float: left; background: #ffffff;height: 60px; border-radius: 5upx; font-size: 26upx; text-align: center;line-height: 60px;"> + {{item.text}} + </view> + </view> + </scroll-view> + </view> + <view class="uni-share-btn" @click="cancel('share')">取消</view> + </view> + </uni-popup> + </view> + +</template> + +<script> + import uniIcon from '@/components/uni-icon/uni-icon.vue'; + import uniPopup from '../index/common/uni-popup/uni-popup.vue' + import Enums from '@/util/Enums'; + // 自定义底部 + import foot from '../../components/foot.vue'; + import logoservice from '@/service/logoservice.js'; + import mpvuePicker from '../../components/mpvue-picker/mpvuePickernew.vue'; + export default { + components: { + uniPopup, + uniIcon, + foot, + mpvuePicker + }, + computed: {}, + data() { + return { + long: false, + LoupanList: [], //数据 + goodSize: null, + // 返回顶部 + totopstatus: false, + // 上拉状态 + dataLoadState: { + pullDownRefresh: false, + reachBottom: false + }, + queryPage: { + m: 'Money/statementList', + billing_id: null, + machine_id: null, // 设备 + page: 1, + per_page: 12, + count: null, + status: null, //2付款状态 + year: null, // 年 + month: null, // 月 + date: null, // 日 + goods_attr: null, // 商品 + direction: null // 类型expense退款 |income 收入|withdrawal 提现 + }, + goodsItem: [], + order_amount: null, + settle_amount: null, + pickerValueArray: [], + pickerValueDefault: [0], + array: ['待清算', '待结算', '已结算', '全部'], + type: 'bottom', + directionlist: [{ + text: '全部', + val: null + }, { + text: '收入', + val: 'income' + }, { + text: '退款', + val: 'expense' + }], + directiontext: null, + self_payment: 0, //是否显示收入列表显示的金额 + }; + }, + mounted() { + + }, + methods: { + details(item) { + if (item.direction.value == 'withdrawal') { + uni.navigateTo({ + url: '/pages/mine/Withdrawal-details?id=' + item.id, + }); + } else { + uni.navigateTo({ + url: '/pages/mine/Liquidation-details?id=' + item.id, + }); + } + }, + bindPickerChange(e) { + //console.log('picker发送选择改变,携带值为', e.target) + if (e.target.value == 3) { + this.queryPage.status = null + } else { + this.queryPage.status = e.target.value + } + //console.log() + this.LoupanList = [] + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + this.queryPage.page = 1; + this.queryPage.count = 0; + this.loadGoodsList(Enums.DATA_DIRECTION.UP); + }, + getToday() { + let myDate = new Date(); + let myMonth = myDate.getMonth() + 1; + if (myMonth < 10) { + myMonth = '0' + myMonth; //补齐 + } + let mydate = myDate.getDate(); + if (myDate.getDate() < 10) { + mydate = '0' + myDate.getDate(); //补齐 + } + this.queryPage.date = myDate.getFullYear() + '-' + myMonth + '-' + mydate; + // let today = myDate.getFullYear() + '-' + myMonth + '-' + mydate; + // return today + }, + getMonth() { + let myDate = new Date(); + let myMonth = myDate.getMonth() + 1; + if (myMonth < 10) { + myMonth = '0' + myMonth; //补齐 + } + /*let mydate = myDate.getDate(); + if (myDate.getDate() < 10) { + mydate = '0' + myDate.getDate(); //补齐 + }*/ + this.queryPage.month = myDate.getFullYear() + '-' + myMonth; + }, + showPicker(mode) { + this.$refs.mpvuePicker.show(); + }, + //确定 + onConfirm(e) { + this.queryPage.year = null + this.queryPage.month = null + this.queryPage.date = null + if (e.value.length == 1) { + this.queryPage.year = e.value[0] + } else if (e.value.length == 2) { + let myMonth = e.value[1] + if (myMonth < 10) { + myMonth = '0' + e.value[1] //补齐 + } + this.queryPage.month = e.value[0] + '-' + myMonth + } else if (e.value.length == 3) { + let myMonth = e.value[1] + if (myMonth < 10) { + myMonth = '0' + myMonth //补齐 + } + let mydate = e.value[2] + if (mydate < 10) { + mydate = '0' + e.value[2] //补齐 + } + this.queryPage.date = e.value[0] + '-' + myMonth + '-' + mydate + } + this.LoupanList = [] + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + this.queryPage.page = 1; + this.queryPage.count = 0; + this.loadGoodsList(Enums.DATA_DIRECTION.UP); + }, + onChange(e) { + //console.log(e); + }, + onCancel(e) { + //console.log(e); + }, + //加载数据 + loadGoodsList(direction) { + if (this.dataLoadState.pullDownRefresh || this.dataLoadState.reachBottom) return; + uni.showLoading({ + title: '正在加载中...' + }) + this.dataLoadState.pullDownRefresh = direction === Enums.DATA_DIRECTION.UP; + this.dataLoadState.reachBottom = direction === Enums.DATA_DIRECTION.DOWN; + if (this.dataLoadState.reachBottom) { + if (Math.ceil(this.queryPage.count / this.queryPage.per_page) < this.queryPage.page) { + return setTimeout(() => { + uni.showToast({ + title: '没有更多数据了!', + icon: 'none' + }); + }, 500); + } + } + /*if(this.goodSize != null) { + this.queryPage.goods_attr = this.goodSize + }*/ + logoservice.MoneystatementList(this.queryPage).then(result => { + + this.long = true + let queryList = result.data + //下拉更新时,查询结果集 + //触底更新时,当前列表+查询结果集 + let newList = this.LoupanList.concat(queryList) + this.LoupanList = newList + //console.log(this.LoupanList) + //console.log(this.LoupanList) + //分页对象处理 + //console.log(result.settle_amount_total) + //console.log(Number(result.settle_amount_total).toFixed(2)) + this.queryPage.count = result.count; + this.queryPage.per_page = result.per_page; + this.order_amount = result.gross_profit_total; + this.settle_amount = Number(result.settle_amount_total).toFixed(2); + + //停止当前页面下拉刷新 + if (this.dataLoadState.pullDownRefresh) uni.stopPullDownRefresh(); + //数据加载状态处理 false + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + uni.hideLoading(); + //uni.showToast({ title: '加载成功', icon: 'none' }); + }).catch(err => { + //停止当前页面下拉刷新 + if (this.dataLoadState.pullDownRefresh) uni.stopPullDownRefresh(); + //数据加载状态处理 false + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + uni.hideLoading(); + uni.showToast({ + title: err.msg ? err.msg : err.data, + icon: 'none' + }); + }); + }, + //返回顶部 + totop() { + uni.pageScrollTo({ + scrollTop: 0, + duration: 300 + }); + this.totopstatus = false + }, + touchEnd(e) { + if (e.mp.changedTouches[0].pageY > 1000) { + this.totopstatus = true + } else { + this.totopstatus = false + } + }, + //做滚动加载使用 + loadMore() { + if (Math.ceil(this.queryPage.count / this.queryPage.per_page) < this.queryPage.page) { + return setTimeout(() => { + uni.showToast({ + title: '没有更多数据了!', + icon: 'none' + }); + }, 500); + } + this.queryPage.page = this.queryPage.page + 1; + this.loadGoodsList(Enums.DATA_DIRECTION.DOWN); + }, + cancel(type) { + this.$refs['show' + type].close() + }, + change(e) { + console.log('是否打开:' + e.show) + }, + togglePopup() { + this.$nextTick(() => { + this.$refs['show' + 'share'].open() + }) + }, + selectMonthdirection(item) { + this.queryPage.direction = item.val; + this.directiontext = item.text; + this.$refs['show' + 'share'].close(); + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + this.queryPage.page = 1; + this.queryPage.count = 0; + this.LoupanList = [] + this.loadGoodsList(Enums.DATA_DIRECTION.UP); + }, + // selectMonth(item) { + // this.queryPage.goods_attr = item; + // this.$refs['show' + 'share'].close(); + // this.dataLoadState.pullDownRefresh = false; + // this.dataLoadState.reachBottom = false; + // this.queryPage.page = 1; + // this.queryPage.count = 0; + // this.LoupanList = [] + // this.loadGoodsList(Enums.DATA_DIRECTION.UP); + // }, + getGoodsAttrList() { + //加载全部交易类型数据 + logoservice.MoneystatementList({ + m: 'Money/getGoodsAttrList' + }).then(result => { + //console.log(result); + this.goodsItem = result; + this.goodsItem.unshift(null) + }).catch(res => { + uni.showToast({ + title: res.msg ? res.msg : '未查到交易类型选择', + icon: 'none' + }); + }); + } + }, + // 下拉加载 + onPullDownRefresh() { + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + this.queryPage.page = 1; + this.queryPage.count = 0; + this.LoupanList = [] + this.loadGoodsList(Enums.DATA_DIRECTION.UP); + this.getGoodsAttrList() + }, + // 上拉加载 + onReachBottom() { + console.log('上拉加载') + if (this.LoupanList.length < 12) { + return setTimeout(() => { + uni.showToast({ + title: '没有更多数据了!', + icon: 'none' + }); + }, 500); + } + this.queryPage.page = this.queryPage.page + 1; + this.loadGoodsList(Enums.DATA_DIRECTION.DOWN); + }, + onLoad(options) { + // 设置时间 + // 设备关联 + if (options.selfPayment) { + this.self_payment = options.selfPayment; + } + //console.log(options) + + if (options.machineid) { + this.queryPage.machine_id = options.machineid + wx.setNavigationBarTitle({ + title: options.machineid + }) + this.pickerValueArray = ['month'] + // 获取本月 + let myDate = new Date(); + let myMonth = myDate.getMonth() + 1; + if (myMonth < 10) { + myMonth = '0' + myMonth; //补齐 + } + this.queryPage.date = null + this.queryPage.month = myDate.getFullYear() + '-' + myMonth + } + if (options.direction) { + this.queryPage.direction = options.direction + this.directionlist.forEach(item => { + if (options.direction == item.val) { + this.directiontext = item.text; + } + }) + } + if (options.day) { + this.queryPage.date = options.day + } else { + this.getMonth() + this.pickerValueArray = ['month'] + } + if (options.date != 'undefined' && options.date != null) { + //console.log(options) + if (options.date == 'yesterday') { + this.pickerValueArray = ['yesterday'] + // 获取昨天的日期 + let myDate = new Date(); + let myMonth = myDate.getMonth() + 1; + if (myMonth < 10) { + myMonth = '0' + myMonth; //补齐 + } + let mydate = myDate.getDate() - 1; + if (mydate < 10) { + mydate = '0' + mydate; //补齐 + } + this.queryPage.date = myDate.getFullYear() + '-' + myMonth + '-' + mydate; + } + if (options.date == 'month') { + this.pickerValueArray = ['month'] + // 获取本月 + let myDate = new Date(); + let myMonth = myDate.getMonth() + 1; + if (myMonth < 10) { + myMonth = '0' + myMonth; //补齐 + } + this.queryPage.date = null + this.queryPage.month = myDate.getFullYear() + '-' + myMonth + } + } + //console.log("date="+this.queryPage.date) + // if (options.goodSize != 'undefined' && options.goodSize != null && options.goodSize != '') { + // wx.setNavigationBarTitle({ + // title: "收入明细" + // }) + // this.goodSize = options.goodSize + // this.pickerValueArray = ['month'] + // // 获取本月 + // let myDate = new Date(); + // let myMonth = myDate.getMonth() + 1; + // if (myMonth < 10) { + // myMonth = '0' + myMonth; //补齐 + // } + // this.queryPage.date = null + // this.queryPage.month = myDate.getFullYear() + '-' + myMonth + // //this.queryPage.goods_attr =options.goodSize + // } + uni.login({ + provider: 'weixin', + success: (res) => { + logoservice.login({ + m: 'Init/init', + code: res.code + }).then(result => { + logoservice.setwixinInfo(result); + /* this.LoupanList = [] + this.queryPage.page = 1; + this.queryPage.count = 0; + this.loadGoodsList(Enums.DATA_DIRECTION.UP); */ + this.getGoodsAttrList(); + if (this.goodSize != null) { + // this.selectMonth(options.goodSize); + } else { + this.LoupanList = [] + this.queryPage.page = 1; + this.queryPage.count = 0; + this.loadGoodsList(Enums.DATA_DIRECTION.UP); + } + }).catch(err => { + uni.navigateTo({ + url: 'login', + }); + }) + }, + fail: (err) => { + console.error('授权登录失败:' + JSON.stringify(err)); + } + }); + }, + onShow() { + + } + }; +</script> + +<style lang="scss"> + page { + width: 100%; + height: 100%; + background: #FFFFFF; + } + + .butn { + font-size: 30upx; + font-weight: 400; + height: 100upx; + line-height: 100upx; + text-align: center; + width: 100%; + } + + /* 底部分享 */ + .uni-share { + display: flex; + flex-direction: column; + } + + .uni-share-btn { + height: 90upx; + line-height: 90upx; + font-size: 26upx; + text-align: center; + background: #FFFFFF; + } + + .eq_list { + width: 100%; + padding: 0upx 20upx; + background: #FFFFFF; + + .eq_list_div { + border-top: 1upx solid #F5F5F5; + padding: 25upx 0; + + .eq_list_ul { + display: flex; + align-items: center; + line-height: 30upx; + + .eq_list_ul_left { + width: 300upx; + } + + .eq_list_ul_right { + width: calc(100% - 300upx); + text-align: right; + font-weight: 400; + margin-top: 30upx; + } + } + } + + } + + // 返回顶部 + .to-top { + position: fixed; + bottom: 150upx; + right: 30upx; + width: 80upx; + height: 80upx; + border-radius: 50%; + text-align: center; + line-height: 80upx; + // box-shadow: 5upx 5upx 5upx #ebeef5; + transform: rotate(-90deg); + background: #000; + opacity: 0.5; + z-index: 999; + } + + .to-top-icon { + color: #FFFFFF; + } + + .uni-share { + display: flex; + flex-direction: column; + } + + .uni-share-btn { + height: 90rpx; + line-height: 90rpx; + font-size: 14px; + text-align: center; + color: #666; + background: #FFFFFF; + border-top: 1px solid #EEEEEE; + // margin: 20upx 0; + } + + .green { + background-color: #4FB36B !important; + color: #FFFFFF; + } +</style> diff --git a/pages/mine/PackageDetail.vue b/pages/mine/PackageDetail.vue new file mode 100644 index 0000000..350757a --- /dev/null +++ b/pages/mine/PackageDetail.vue @@ -0,0 +1,349 @@ +<template> + + <view class="packagedetail full-height full-width"> + <view v-if=" print_type==0" class="print-score bg-white-color full-width" + style="position: relative;margin-top: 10upx; height:230upx;"> + <view class="print content-color align-center" style="width: 100%;"> + <view + style="position: absolute;top: 30upx;width: 180upx; height: 52upx; border-top-right-radius: 40upx; border-bottom-right-radius:40upx; background: #FFFFFF;text-align: center;padding-top: 8upx;"> + <text style="color:#383838;font-size:40upx;margin-top:15upx;font-weight: bold;">{{machineid}}</text> + </view> + <view + style=" position:center;height:130upx;text-align:center;line-height:130upx;width:100%;margin-top:-40upx;"> + <text style="color:#fff;font-size:55upx;margin-left:15upx;font-weight:450;">标准版</text> + </view> + <view style="position: absolute; width: 100%; text-align: center;margin-top: -25upx;"> + <text v-if="getDaysDifference(time) > 100" + style="color: #fff; font-size: 26upx;">有效期至{{dateFormat(time)}}</text> + <text v-if="getDaysDifference(time) <= 100 && getDaysDifference(time) > 30" + style="color: #FF8D1A; font-size: 26upx;">有效期至{{dateFormat(time)}}</text> + <text v-if="getDaysDifference(time) <= 30 " + style="color: #FB1B1B; font-size: 26upx;">有效期至{{dateFormat(time)}}</text> + </view> + <view style="position: absolute; right: 30upx; top: 260upx;"> + <text style="color: #fff; font-size: 26upx;;" hover-class="hover-class-text" + @click="rightsAndInterests()">权限对比</text> + <label class="fa fa-angle-right" style="color: #fff; font-size: 32upx; margin-left: 5upx;"></label> + </view> + </view> + </view> + + <view v-if=" print_type==1" class="print-score bg-white-color full-width" + style="position: relative;margin-top: 10upx; background:#FF8D1A; height:230upx"> + <view class="print content-color align-center" style="width: 100%;"> + <view + style="position: absolute;top: 30upx;width: 180upx; height: 52upx; border-top-right-radius: 40upx; border-bottom-right-radius:40upx; background: #FFFFFF;text-align: center;padding-top: 8upx;"> + <text style="color:#383838;font-size:40upx;margin-top:15upx;font-weight: bold;">{{machineid}}</text> + </view> + <view + style=" position:center;height:130upx;text-align:center;line-height:130upx;width:100%;margin-top:-40upx;"> + <text style="color:#fff;font-size:55upx;margin-left:15upx;font-weight:450;">无限版</text> + </view> + <view style="position: absolute; width: 100%; text-align: center;margin-top: -25upx;"> + <text v-if="getDaysDifference(time) > 100" + style="color: #fff; font-size: 26upx;">有效期至{{timeDateFormatText}}</text> + <text v-if="getDaysDifference(time) <= 100 && getDaysDifference(time) > 30" + style="color: #FF8D1A; font-size: 26upx;">有效期至{{timeDateFormatText}}</text> + <text v-if="getDaysDifference(time) <= 30 " + style="color: #FB1B1B; font-size: 26upx;">有效期至{{timeDateFormatText}}</text> + </view> + <view style="position: absolute; right:30upx;top:260upx;"> + <text style="color: #fff; font-size: 26upx;;" hover-class="hover-class-text" + @click="rightsAndInterests()">权限对比</text> + <label class="fa fa-angle-right" style="color: #fff; font-size: 32upx; margin-left: 5upx;"></label> + </view> + </view> + </view> + + <View style="margin-left:40upx;margin-top:60upx;"> + <text v-if="print_type==0" style="font-size: 35upx;color:#383838;font-weight: bold;">基础服务</text> + <text v-if="print_type==1" style="font-size: 35upx;color:#FF8D1A;font-weight: bold;">基础服务</text> + </view> + + <view class="other-info"> + <view class="item" style="width: calc(100% / 3)" v-for="(other, index) in packagelistone" :key="index"> + <view class="text content-color"> + {{other.name}} + </view> + </view> + </view> + + + <view style="margin-left:40upx;margin-top:40upx; width:calc(100% - 60upx);height:2upx;background:#f6f6f6;"></view> + + + <View style="margin-left:40upx;margin-top:40upx; "> + <text v-if="print_type==0" style="height:100upx;font-size:35upx;color:#383838;font-weight:bold;">产品服务</text> + <text v-if="print_type==1" style="height:100upx;font-size:35upx;color:#FF8D1A;font-weight:bold;">产品服务</text> + </view> + <view class="other-info"> + <view class="item" style="width: calc(100% / 3)" v-for="(other, index) in productlistone" :key="index"> + <view class="text content-color"> + {{other.name}} + </view> + </view> + </view> + + + <view style="margin-left:40upx;margin-top:40upx; width:calc(100% - 60upx);height:2upx;background:#f6f6f6;"> + </view> + + <View style="margin-left:40upx;margin-top:40upx; "> + <text v-if="print_type==0" style="font-size:35upx;color:#383838;font-weight: bold;">保障服务</text> + <text v-if="print_type==1" style="font-size:35upx;color:#FF8D1A;font-weight: bold;">保障服务</text> + </view> + <view class="other-info"> + <view class="item" style="width: calc(100% / 3)" v-for="(other, index) in securitylist" :key="index"> + <view class="text content-color"> + {{other.name}} + </view> + </view> + </view> + + </view> +</template> + +<script> + import logoservice from '@/service/logoservice.js'; + export default { + components: { + + }, + computed: { + + }, + data() { + return { + packagelistone: [{ + name: '个人/工作室', + }, + { + name: '支持国内', + + }, + { + name: '品牌授权', + }, + { + name: '1-3个子运营账号', + }, + { + name: '500次/年打印量', + }, + { + name: '¥0.5次/次打印卡', + }, + ], + + productlistone: [{ + name: '部分官方图库', + + }, + { + name: '官方小程序', + + }, + { + name: '官方收款', + }, + { + name: '运营小程序', + }, + { + name: 'H5定制', + } + ], + securitylist: [{ + name: '培训服务', + }, + { + name: '24小时监控', + + }, + { + name: '上门服务', + } + ], + long: false, + list: { + bank_name: null, + account_name: null, + account_sn: null + }, + submit: true, + money: "", + machineid: "", + print_type: 0, //默认0标准版 1无限版 + time: "", //失效时间 + timeDateFormatText:null,//格式化后的时间 + } + }, + + methods: { + //获取相差天数 + getDaysDifference(time) { + try { + let day = new Date(time.replace(/-/g, '/')).getTime() - new Date().getTime(); //日期转时间戳 + let dayCount = Math.floor(day / 86400000); //时间戳获取天数 + return dayCount; + } catch (e) { + + } + return 0; + }, + + //格式化时间 + dateFormat(time) { + try { + var dt = new Date(time.replace(/-/g, '/')); + var y = dt.getFullYear(); + var m = dt.getMonth() + 1; + var d = dt.getDate(); + return y + '年' + m + '月' + d + '日'; + } catch (e) { + // 错误处理代码片段 + } + return time; + }, + + + rightsAndInterests() { + uni.navigateTo({ + url: '../mine/RightsAndInterests?print_type=' + this.print_type + }); + }, + + onShow() { + var _self = this; + uni.login({ + provider: 'weixin', + success: (res) => { + logoservice.login({ + m: 'Init/init', + code: res.code + }).then(result => { + uni.setStorageSync('openid', result.openid) + logoservice.setwixinInfo(result); + this.submit = true + //_self.updateInfoData(); + }).catch(err => { + + }) + }, + fail: (err) => { + console.error('授权登录失败:' + JSON.stringify(err)); + } + }); + }, + + onLoad(options) { + this.machineid = options.machineid; + this.print_type = options.print_type; + this.time = options.time; + this.timeDateFormatText =this.dateFormat(this.time); + if (this.print_type == 1) { + this.packagelistone = [{ + name: '中小企业', + }, + { + name: '全球', + }, + { + name: '品牌授权', + }, + { + name: '无限', + }, + { + name: '无限打印量', + }, + ] + this.productlistone = [{ + name: '所有官方图库', + }, + { + name: '官方小程序', + }, + { + name: '官方收款', + }, + { + name: '运营小程序', + }, + { + name: 'H5定制', + }, + { + name: '自定义小程序', + }, + { + name: '自定义收款', + }, + { + name: '运营后台', + }, + ] + this.securitylist = [{ + name: '培训服务', + }, + { + name: '24小时监控', + }, + { + name: '上门服务', + }, + ] + } + + } + }, + } +</script> + +<style lang="scss"> + page { + width: 100%; + height: 99%; + background: #FFFFFF; + } + + .packagedetail { + width: 100%; + height: 100%; + + .print-score { + padding: 50upx 0; + width: 90%; + height: 160upx; + margin: 57upx auto; + background: #383838; + border-radius: 20upx; + display: flex; + align-items: center; + font-size: 26upx; + color: #fff; + } + + .other-info { + width: 100%; + margin-top: 30upx; + overflow: hidden; + padding-left: 40upx; + padding-right: 40upx; + + .item { + float: left; + height: 50upx; + align-items: center; + width: calc(100% / 5); + + .text { + width: 100%; + font-size: 24upx; + text-align: left; + color: #333333; + } + } + } + } +</style> diff --git a/pages/mine/Print.vue b/pages/mine/Print.vue new file mode 100644 index 0000000..52ed45a --- /dev/null +++ b/pages/mine/Print.vue @@ -0,0 +1,682 @@ +<template> + <view class="full-width content-color full-height" style="position: relative;"> + <view class="full-width"> + <view style="position: fixed; width: 100%;"> + <view style="height: 20upx;width:100%;background: #F1F1F1;"></view> + <view style="width:calc(100% -40upx);padding-top: 20upx; padding-bottom: 20upx; background: #FFFFFF; border-radius: 20upx;margin-left:20upx; margin-right: 20upx;"> + <view style="width:calc(100% - 40upx);border-radius:50upx; height: 90upx; border:2upx solid #F1F1F1;margin:20upx;" @click="togglePopup()"> + <text style="color: #383838;float:left;margin-top:25upx;margin-left: 30upx;">{{attr == null ? '打印类型' :attr}}</text> + <span class="iconfont icon-xiala" + style="margin-left: 10upx; font-size: 20upx; color: #BCBEC1;float: right;margin-top:30upx;margin-right:20upx;"></span> + </view> + <view style="display: flex; padding: 15upx 20upx 15upx 40upx; color: #BCBEC1; font-size: 24upx;flex-direction: row;"> + <view style="width: 40%; color: #383838">作品总数:{{queryPage.total || '0'}}笔</view> + <view style="width: calc(60% - 20upx); text-align:right;" @click="showPicker('selector')"> + <text style="color: #383838" v-if="queryPage.start_time == null && queryPage.end_time == null"> + <text style="color: #383838" v-if="queryPage.year">{{queryPage.year}}年</text> + <text style="color: #383838" v-if="queryPage.month">{{queryPage.month}}月</text> + <text style="color: #383838" v-if="queryPage.day">{{queryPage.day}}</text> + <text style="color: #383838" v-if="!queryPage.day && !queryPage.month && !queryPage.year">全部</text> + </text> + <text v-else>{{datetext}}</text> + <span class="iconfont icon-xiala"style="margin-left: 10upx; font-size: 20upx; color: #BCBEC1;"></span> + </view> + </view> + </view> + </view> + + <!-- 动态数据 --> + <view scroll-y @scrolltolower="loadMore()" class="full-width" @touchend="touchEnd" v-if="long" + style="padding-top: 250upx; "> + <view v-for="(item, index) in LoupanList" :key="index" class="eq_list"> + <!-- @click="details(item)" --> + <view style=" color: #FFFFFF;font-size: 24upx;border-bottom-right-radius: 20upx; background:#43CF7C; + border-top-left-radius: 20upx;height: 50upx;width: 140upx;text-align: center;padding-top: 10upx;"> {{item.status.text}}</view> + <view class="eq_list_div"> + <view class="full-width eq_list_ul"> + <view style="width: 130upx; display: flex;align-items: center;" + @click="previewImage(item,LoupanList)"> + <image :src="item.works_image + '?x-oss-process=image/resize,lfit,w_130'" + style="width:130upx; height:150upx; margin: auto; align-items: center;margin-left: 20upx;" + mode="aspectFill"></image> + </view> + <View style="width: 60%; height: auto;display: flex;flex-direction: column;margin-left: 20upx;"> + <text class="eq_list_ul_left" style="margin-left:15upx;width: auto;"> + <text style="font-size: 30upx;font-weight: bold;">{{item.goods_name || ''}}</text> + <text style="font-size: 30upx; font-weight: bold" + v-if="item.used_applets == '2'">-{{item.goods_specs || ''}} </text> + </text> + <text class="eq_list_ul_left" style="margin-left:15upx;width: auto;margin-top: 2upx;"> + <text style="font-size: 22upx;">{{item.machine_id || ''}}</text> + <text style="font-size: 22upx;" + v-if="item.used_applets == '2'">-{{item.goods_specs || ''}} </text> + </text> + <View style="width: 100%; height: auto;display: flex;flex-direction: row;margin-top: 15upx;"> + <text class="eq_list_ul_left" style="margin-left:15upx;width: auto;"> + <text style="font-size: 24upx;color:#595959;">套餐内</text> + </text> + </view> + <text style="margin-left:15upx;width:auto;font-size: 26upx;margin-top: 2upx;">{{item.pay_time}}</text> + <text style="margin-left:15upx;width:auto;font-size: 26upx;margin-top: 0upx;">3分20秒(用时</text> + </view> + <!--<view class="full-width eq_list_ul" style="width:40%;"> --> + <view style="width:40%;display: flex;justify-content: center; + text-align:center;line-height:30upx;color:#FFFFFF;"> + <text + style="width: 80upx;height:80upx;font-size:24upx; + text-align:center; + color:rgba(255, 255, 255, 1); + background-color: rgba(67, 207, 124, 1); + border-radius: 80upx; + line-height:80upx; + text-align:center;margin-right:-70upx;">恢复</text> + </view> + </view> + </view> + </view> + + <!--暂无相关信息 --> + <view class="align-center content-color" + style="position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%);" + v-if="LoupanList.length == 0 || LoupanList.length == null"> + <span class="iconfont icon-wushuju" + style="font-size: 100upx; text-align: center; color: #B2B2B2;"></span> + <view style="color: #B2B2B2; text-align: center; line-height: 50upx;font-size: 24upx;">暂无相关信息 + </view> + </view> + </view> + + <!--动态数据完 --> + </view> + <!--返回顶部 --> + <view v-if="totopstatus" class="to-top content-color" @click="totop()"> + <view class="fa fa-angle-right to-top-icon"></view> + </view> + <mpvue-picker ref="mpvuePicker" :themeColor="'#53B2B0'" :pickerValueDefault="pickerValueDefault" @onChange="onChange" @onCancel="onCancel" @onConfirm="onConfirm" :pickerValueArray="pickerValueArray"> + </mpvue-picker> + <uni-popup ref="showshare" :type="type" @change="change"> + <view class="uni-share" style="width: 100%; margin: auto;"> + <view style="background: #F9F9F9;width: 100%;border-bottom: 1upx solid #00000000;"> + <view style="width: 100%;border-bottom: 1upx solid #E9E7ED; height:100upx; + text-align: center;line-height: 100upx; font-size: 26upx; font-weight: 500;"> + 选择打印类型 + </view> + <scroll-view scroll-y style="margin: auto; height: 500upx; overflow: hidden; overflow-y: scroll;"> + <view style="width: calc(100% - 40upx); margin:20upx auto; overflow: hidden;"> + <view v-for="(item, index) in goodsItem" :key="index" @click="selectMonth(item)" + :class="attr == item.goods_name ? 'green':''" + style="width: calc(33% - 20upx);margin:10upx; float: left; background: #ffffff;height: 60px; border-radius: 5upx; font-size: 26upx; text-align: center;line-height: 60px;"> + {{item.goods_name == null ? '全部' : item.goods_name}} + </view> + </view> + </scroll-view> + </view> + <view class="uni-share-btn" @click="cancel('share')">取消</view> + </view> + </uni-popup> + </view> + </view> +</template> + +<script> + import uniIcon from '@/components/uni-icon/uni-icon.vue'; + import uniPopup from '../index/common/uni-popup/uni-popup.vue' + import Enums from '@/util/Enums'; + //自定义底部 + import foot from '../../components/foot.vue'; + import logoservice from '@/service/logoservice.js'; + import mpvuePicker from '../../components/mpvue-picker/mpvuePickernew.vue'; + export default { + components: { + uniPopup, + uniIcon, + foot, + mpvuePicker + }, + computed: {}, + data() { + return { + long: false, + LoupanList: [], //数据 + goodSize: null, + //返回顶部 + totopstatus: false, + //上拉状态 + dataLoadState: { + pullDownRefresh: false, + reachBottom: false + }, + queryPage: { + m: 'Machine/printRecord', + machine_id: null, + page: 1, + per_page: 20, + total: 0, + date: null, //日 + month: null, //月 + year: null, //日 + is_excess: null, //套餐选择类型 + }, + goodsItem: [ + { + goods_name: '全部', + type: -12 + }, + { + goods_name: '套餐内', + type: 2 + }, + { + goods_name: '打印卡', + type: 1 + }, + ], + attr, + order_amount: null, + total_mount: null, + //年 + pickerValueArray: [], + pickerValueDefault: [0], + type: 'bottom', + datetext: null, + }; + }, + mounted() { + + }, + methods: { + details(item) { + /*uni.navigateTo({ + url: '/pages/mine/order-details?id=' + item.id, + }); */ + }, + //恢复打印 + Reprint(item) { + if (item.status.value == 0) { + return; + } + uni.showModal({ + title: '温馨提示', + content: '是否此订单恢复打印?', + confirmText: '确定', + confirmColor: '#ff3b32', + success: function(res) { + if (res.confirm) { + // 恢复打印的接口: + logoservice.MachineStockGoodsList({ + m: 'Machine/repeatPrint', + machine_id: item.machine_id, + id: item.id, + }).then(result => { + uni.showToast({ + title: '恢复订单打印成功', + icon: 'none' + }); + //console.log('-----') + item.status.value = 0 + item.status.text = "等待出料" + }).catch(err => { + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + } else if (res.cancel) { + //console.log('用户点击取消') + } + } + }); + }, + bindPickerChange(e) { + console.log('picker发送选择改变,携带值为', e.target) + if (e.target.value == 3) { + this.queryPage.status = null + } else { + this.queryPage.status = e.target.value + } + this.LoupanList = [] + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + this.queryPage.page = 1; + this.queryPage.total = 0; + this.loadGoodsList(Enums.DATA_DIRECTION.UP); + }, + getToday() { + let myDate = new Date(); + let myMonth = myDate.getMonth() + 1; + if (myMonth < 10) { + myMonth = '0' + myMonth; //补齐 + } + let mydate = myDate.getDate(); + if (myDate.getDate() < 10) { + mydate = '0' + myDate.getDate(); //补齐 + } + this.queryPage.day = myDate.getFullYear() + '-' + myMonth + '-' + mydate; + }, + showPicker(mode) { + this.$refs.mpvuePicker.show(); + }, + //确定 + onConfirm(e) { + this.queryPage.year = null + this.queryPage.month = null + this.queryPage.day = null + this.queryPage.start_time = null + this.queryPage.end_time = null + if (e.value.length == 1) { + this.queryPage.year = e.value[0] + } else if (e.value.length == 2) { + let myMonth = e.value[1] + if (myMonth < 10) { + myMonth = '0' + e.value[1] //补齐 + } + this.queryPage.month = e.value[0] + '-' + myMonth + } else if (e.value.length == 3) { + let myMonth = e.value[1] + if (myMonth < 10) { + myMonth = '0' + myMonth //补齐 + } + let mydate = e.value[2] + if (mydate < 10) { + mydate = '0' + e.value[2] //补齐 + } + this.queryPage.day = e.value[0] + '-' + myMonth + '-' + mydate + } + this.LoupanList = [] + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + this.queryPage.page = 1; + this.queryPage.total = 0; + this.loadGoodsList(Enums.DATA_DIRECTION.UP); + }, + onChange(e) { + //console.log(e); + }, + onCancel(e) { + //console.log(e); + }, + //设备打印信息 加载数据 + loadGoodsList(direction) { + if (this.dataLoadState.pullDownRefresh || this.dataLoadState.reachBottom) return; + uni.showLoading({ + title: '正在加载中...' + }) + this.dataLoadState.pullDownRefresh = direction === Enums.DATA_DIRECTION.UP; + this.dataLoadState.reachBottom = direction === Enums.DATA_DIRECTION.DOWN; + if (this.dataLoadState.reachBottom) { + if (Math.ceil(this.queryPage.total / this.queryPage.per_page) < this.queryPage.page) { + return setTimeout(() => { + uni.showToast({ + title: '没有更多数据了!', + icon: 'none' + }); + }, 500); + } + } + logoservice.Machinelist(this.queryPage).then(result => { + this.long = true + let queryList = result.data.data + // 下拉更新时,查询结果集 + // 触底更新时,当前列表+查询结果集 + let newList = this.LoupanList.concat(queryList) + this.LoupanList = newList + // 分页对象处理 + this.queryPage.total = result.data.total; + this.queryPage.per_page = result.data.per_page; + // 停止当前页面下拉刷新 + if (this.dataLoadState.pullDownRefresh) uni.stopPullDownRefresh(); + // 数据加载状态处理 false + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + uni.hideLoading(); + // uni.showToast({ title: '加载成功', icon: 'none' }); + }).catch(err => { + // 停止当前页面下拉刷新 + if (this.dataLoadState.pullDownRefresh) uni.stopPullDownRefresh(); + // 数据加载状态处理 false + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + uni.hideLoading(); + }); + }, + //返回顶部 + totop() { + uni.pageScrollTo({ + scrollTop: 0, + duration: 300 + }); + this.totopstatus = false + }, + touchEnd(e) { + if (e.mp.changedTouches[0].pageY > 1000) { + this.totopstatus = true + } else { + this.totopstatus = false + } + }, + //做滚动加载使用 + loadMore() { + if (Math.ceil(this.queryPage.total / this.queryPage.per_page) < this.queryPage.page) { + return setTimeout(() => { + uni.showToast({ + title: '没有更多数据了!', + icon: 'none' + }); + }, 500); + } + this.queryPage.page = this.queryPage.page + 1; + this.loadGoodsList(Enums.DATA_DIRECTION.DOWN); + }, + cancel(type) { + this.$refs['show' + type].close() + }, + change(e) { + console.log('是否打开:' + e.show) + }, + togglePopup() { + this.$nextTick(() => { + this.$refs['show' + 'share'].open() + }) + }, + selectMonth(item) { + //this.queryPage.goods_name = item.goods_name ? item.goods_name : null + //this.queryPage.attr = item.goods_specs ? item.goods_specs : null + if(item.type == -12){ + this.attr ="全部打印类型"; + this.queryPage.is_excess = null; + }else{ + this.attr = item.goods_name ? item.goods_name : null + this.queryPage.is_excess = item.type + } + this.$refs['show' + 'share'].close(); + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + this.queryPage.page = 1; + this.queryPage.total = 0; + //this.LoupanList = [] + this.loadGoodsList(Enums.DATA_DIRECTION.UP); + }, + //刷新状态 + mentDetail(id) { + console.log(id) + logoservice.MoneystatementDetail({ + m: 'Money/orderDetail', + id: id + }).then(result => { + this.LoupanList.forEach(item => { + if (item.id == id) { + item.is_pay = result.is_pay + item.status = result.status + } + }) + }).catch(err => {}); + } + }, + + //下拉加载 + onPullDownRefresh() { + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + this.queryPage.page = 1; + this.queryPage.total = 0; + this.LoupanList = [] + this.loadGoodsList(Enums.DATA_DIRECTION.UP); + this.getGoodsAttrList() + }, + + //上拉加载 + onReachBottom() { + console.log('上拉加载') + if (this.LoupanList.length < 12) { + return setTimeout(() => { + uni.showToast({ + title: '没有更多数据了!', + icon: 'none' + }); + }, 500); + } + this.queryPage.page = this.queryPage.page + 1; + this.loadGoodsList(Enums.DATA_DIRECTION.DOWN); + }, + onLoad(options) { + // 设置时间 + this.getToday() + // 门店关联 + if (options.shop_id) { + this.queryPage.shop_id = options.shop_id + wx.setNavigationBarTitle({ + title: options.shop_name + }) + this.queryPage.day = null + this.queryPage.month = null + this.queryPage.year = null + } + // 设备关联 + if (options.machineid) { + this.queryPage.machine_id = options.machineid + wx.setNavigationBarTitle({ + title: options.machineid + }) + this.queryPage.day = null + this.queryPage.month = null + this.queryPage.year = null + // this.pickerValueArray = ['month'] + // // 获取本月 + // let myDate = new Date(); + // let myMonth = myDate.getMonth() + 1; + // if (myMonth < 10) { + // myMonth = '0' + myMonth; //补齐 + // } + // this.queryPage.day = null + // this.queryPage.month = myDate.getFullYear() + '-' + myMonth + } + if (options.start_time) { + this.queryPage.start_time = options.start_time + } + if (options.end_time) { + this.queryPage.end_time = options.end_time + } + if (options.is_pay) { + this.queryPage.is_pay = options.is_pay + } + if (options.datetext) { + this.datetext = options.datetext + } + if (options.date != 'undefined' && options.date != null) { + if (options.date == 'yesterday') { + this.pickerValueArray = ['yesterday'] + // 获取昨天的日期 + let myDate = new Date(); + let myMonth = myDate.getMonth() + 1; + if (myMonth < 10) { + myMonth = '0' + myMonth; //补齐 + } + let mydate = myDate.getDate() - 1; + if (mydate < 10) { + mydate = '0' + mydate; //补齐 + } + this.queryPage.day = myDate.getFullYear() + '-' + myMonth + '-' + mydate; + } + if (options.date == 'month') { + this.pickerValueArray = ['month'] + // 获取本月 + let myDate = new Date(); + let myMonth = myDate.getMonth() + 1; + if (myMonth < 10) { + myMonth = '0' + myMonth; //补齐 + } + this.queryPage.day = null + this.queryPage.month = myDate.getFullYear() + '-' + myMonth + } + } + if (options.goods_name != 'undefined' && options.goods_name != null && options.goods_name != '') { + wx.setNavigationBarTitle({ + title: "订单列表" + }) + this.goodSize = { + goods_name: options.goods_name, + goods_specs: options.goods_specs + } + this.queryPage.day = null + this.queryPage.month = null + this.queryPage.year = null + // this.pickerValueArray = ['month'] + // 获取本月 + // let myDate = new Date(); + // let myMonth = myDate.getMonth() + 1; + // if (myMonth < 10) { + // myMonth = '0' + myMonth; //补齐 + // } + // this.queryPage.day = null + // this.queryPage.month = myDate.getFullYear() + '-' + myMonth + } + uni.login({ + provider: 'weixin', + success: (res) => { + logoservice.login({ + m: 'Init/init', + code: res.code + }).then(result => { + logoservice.setwixinInfo(result); + //this.getGoodsAttrList(); + if (this.goodSize != null) { + this.selectMonth(this.goodSize); + } else { + this.LoupanList = [] + this.queryPage.page = 1; + this.queryPage.total = 0; + this.loadGoodsList(Enums.DATA_DIRECTION.UP); + } + }).catch(err => { + uni.navigateTo({ + url: 'login', + }); + }) + }, + fail: (err) => { + console.error('授权登录失败:' + JSON.stringify(err)); + } + }); + }, + onShow(id) { + console.log(id) + // console.log('-------onShow') + if (id) { + this.mentDetail(id) + } + // this.dataLoadState.pullDownRefresh = false; + // this.dataLoadState.reachBottom = false; + // this.queryPage.page = 1; + // this.queryPage.total = 0; + // this.LoupanList = [] + // this.loadGoodsList(Enums.DATA_DIRECTION.UP); + // this.getGoodsAttrList() + } + }; +</script> + +<style lang="scss"> + page { + width: 100%; + height: 100%; + background: #FFFFFF; + } + + .butn { + font-size: 30upx; + font-weight: 400; + height: 100upx; + line-height: 100upx; + text-align: center; + width: 100%; + } + + /* 底部分享 */ + .uni-share { + display: flex; + flex-direction: column; + } + + .uni-share-btn { + height: 90upx; + line-height: 90upx; + font-size: 26upx; + text-align: center; + background: #FFFFFF; + } + + .eq_list { + width: calc(100% -40upx); + + background: #FFFFFF; + margin-left: 20upx; + margin-right: 20upx; + margin-top: 20upx; + border-radius: 20upx; + + .eq_list_div { + + margin-top: -40upx; + padding: 20upx 0; + + .eq_list_ul { + display: flex; + align-items: center; + line-height: 40upx; + + .eq_list_ul_left { + width: 300upx; + } + + .eq_list_ul_right { + width: calc(100% - 300upx); + text-align: right; + font-weight: 400; + } + } + } + + } + + // 返回顶部 + .to-top { + position: fixed; + bottom: 150upx; + right: 30upx; + width: 80upx; + height: 80upx; + border-radius: 50%; + text-align: center; + line-height: 80upx; + // box-shadow: 5upx 5upx 5upx #ebeef5; + transform: rotate(-90deg); + background: #000; + opacity: 0.5; + z-index: 999; + } + + .to-top-icon { + color: #FFFFFF; + } + + .uni-share { + display: flex; + flex-direction: column; + } + + .uni-share-btn { + height: 90rpx; + line-height: 90rpx; + font-size: 14px; + text-align: center; + color: #666; + background: #FFFFFF; + border-top: 1px solid #EEEEEE; + // margin: 20upx 0; + } + + .green { + background-color: #4FB36B !important; + color: #FFFFFF; + } +</style> diff --git a/pages/mine/PrintCard.vue b/pages/mine/PrintCard.vue new file mode 100644 index 0000000..510a5a6 --- /dev/null +++ b/pages/mine/PrintCard.vue @@ -0,0 +1,242 @@ +<template> + <view class="full-width content-color full-height" style="position: relative;"> + <view class="full-width"> + <!-- 动态数据 --> + <view scroll-y @scrolltolower="loadMore()" class="full-width" @touchend="touchEnd" v-if="long" > + <view v-for="(item, index) in LoupanList" :key="index" class="eq_list" > + <view class="eq_list_div"> + <view class="full-width eq_list_ul"> + <text class="eq_list_ul_left" style="font-size: 30upx;">{{item.machine_id}} - {{item.title}}打印卡</text> + </view> + <view class="full-width eq_list_ul"> + <text class="eq_list_ul_left" style="font-size: 24upx; color: #B2B2B2; width: 80%;">充值时间:{{item.create_time}}</text> + <text class="eq_list_ul_right" style="font-size: 30upx;height:100%;color:#3A8CE6;margin-top:-60upx;">¥{{item.amount}}</text> + + </view> + </view> + </view> + <!-- 暂无相关信息 --> + <view class="align-center content-color" style="position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%);" + v-if="LoupanList.length == 0 || LoupanList.length == null"> + <span class="iconfont icon-wushuju" style="font-size: 100upx; text-align: center; color: #B2B2B2;"></span> + <view style="color: #B2B2B2; text-align: center; line-height: 50upx;font-size: 24upx;">暂无相关信息</view> + </view> + </view> + <!-- 动态数据完 --> + </view> + <!-- 返回顶部 --> + <view v-if="totopstatus" class="to-top content-color" @click="totop()"> + <view class="fa fa-angle-right to-top-icon"></view> + </view> + </view> +</template> + +<script> + import uniIcon from '@/components/uni-icon/uni-icon.vue'; + import Enums from '@/util/Enums'; + // 自定义底部 + import foot from '../../components/foot.vue'; + import logoservice from '@/service/logoservice.js'; + export default { + components: { + uniIcon, + foot, + }, + computed: {}, + data() { + return { + long:false, + LoupanList: [], //数据 + // 返回顶部 + totopstatus: false, + // 上拉状态 + dataLoadState: { + pullDownRefresh: false, + reachBottom: false + }, + queryPage: { + m:'Money/partnerOrderList', + page: 1, + per_page: 12, + count:0 + }, + }; + }, + methods: { + + // 加载数据 + loadGoodsList(direction) { + if (this.dataLoadState.pullDownRefresh || this.dataLoadState.reachBottom) return; + uni.showLoading({title: '正在加载中...'}) + this.dataLoadState.pullDownRefresh = direction === Enums.DATA_DIRECTION.UP; + this.dataLoadState.reachBottom = direction === Enums.DATA_DIRECTION.DOWN; + if (this.dataLoadState.reachBottom) { + if (Math.ceil(this.queryPage.count / this.queryPage.per_page) < this.queryPage.page) { + return setTimeout(() => { + uni.showToast({title: '没有更多数据了!', icon: 'none'}); + }, 500); + } + } + logoservice.Withdrawallist(this.queryPage).then(result => { + // console.log(result.data) + this.long = true + let queryList = result.data + // 下拉更新时,查询结果集 + // 触底更新时,当前列表+查询结果集 + let newList = this.LoupanList.concat(queryList) + this.LoupanList = newList + // console.log(this.LoupanList) + // 分页对象处理 + this.queryPage.count = result.count; + this.queryPage.per_page = result.per_page; + // 停止当前页面下拉刷新 + if (this.dataLoadState.pullDownRefresh) uni.stopPullDownRefresh(); + // 数据加载状态处理 false + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + uni.hideLoading(); + // uni.showToast({ title: '加载成功', icon: 'none' }); + }).catch(err => { + // 停止当前页面下拉刷新 + if (this.dataLoadState.pullDownRefresh) uni.stopPullDownRefresh(); + // 数据加载状态处理 false + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + uni.hideLoading(); + }); + }, + // 返回顶部 + totop() { + uni.pageScrollTo({ + scrollTop: 0, + duration: 300 + }); + this.totopstatus = false + }, + touchEnd(e) { + if (e.mp.changedTouches[0].pageY > 1000) { + this.totopstatus = true + } else { + this.totopstatus = false + } + }, + // 做滚动加载使用 + loadMore() { + if (Math.ceil(this.queryPage.count / this.queryPage.per_page) < this.queryPage.page) { + return setTimeout(() => { + uni.showToast({title: '没有更多数据了!', icon: 'none'}); + }, 500); + } + this.queryPage.page = this.queryPage.page + 1; + this.loadGoodsList(Enums.DATA_DIRECTION.DOWN); + }, + }, + // 下拉加载 + onPullDownRefresh() { + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + this.queryPage.page = 1; + this.queryPage.count = 0; + this.LoupanList = [] + this.loadGoodsList(Enums.DATA_DIRECTION.UP); + }, + // 上拉加载 + onReachBottom() { + console.log('上拉加载') + if (this.LoupanList.length < 12) { + return setTimeout(() => { + uni.showToast({title: '没有更多数据了!', icon: 'none'}); + }, 500); + } + this.queryPage.page = this.queryPage.page + 1; + this.loadGoodsList(Enums.DATA_DIRECTION.DOWN); + }, + onLoad(options) { + uni.login({ + provider: 'weixin', + success: (res) => { + logoservice.login({ m:'Init/init',code:res.code}).then(result => { + logoservice.setwixinInfo(result); + this.LoupanList = [] + this.queryPage.page = 1; + this.queryPage.count = 0; + this.loadGoodsList(Enums.DATA_DIRECTION.UP); + }).catch(err => { + uni.navigateTo({url: 'login',}); + }) + }, + fail: (err) => { + console.error('授权登录失败:' + JSON.stringify(err)); + } + }); + }, + onShow() { + + } + }; +</script> + +<style lang="scss"> + .uni-collapse-cell__title{ + border: 0 !important; + } + .uni-collapse:after{ + height: 0 !important; + } + .uni-collapse:before{ + height: 0 !important; + } + .uni-collapse-cell:after{ + height: 0 !important; + } + .uni-collapse-cell--open{ + background: #fff !important; + } + page { + width: 100%; + height: 100%; + background: #FFFFFF; + } + .eq_list{ + width: 94%; + margin:20upx auto; + border-radius:10upx; + background: #FFFFFF; + overflow: hidden; + .eq_list_div{ + margin: 0 20upx; + padding: 20upx 10upx; + .eq_list_ul{ + display: flex; + align-items: center; + line-height: 50upx; + .eq_list_ul_left{ + width: 50%; + } + .eq_list_ul_right{ + width: 50%; + text-align: right; + } + } + } + } + // 返回顶部 + .to-top { + position: fixed; + bottom: 150upx; + right: 30upx; + width: 80upx; + height: 80upx; + border-radius: 50%; + text-align: center; + line-height: 80upx; + // box-shadow: 5upx 5upx 5upx #ebeef5; + transform: rotate(-90deg); + background: #000; + opacity: 0.5; + z-index: 999; + } + .to-top-icon { + color: #FFFFFF; + } +</style> diff --git a/pages/mine/PrintUseDetail.vue b/pages/mine/PrintUseDetail.vue new file mode 100644 index 0000000..5f0d9de --- /dev/null +++ b/pages/mine/PrintUseDetail.vue @@ -0,0 +1,462 @@ +<template> + <view style="width: 100%; height: 85%;"> + <!--标准版开始 --> + <view v-if="print_type == 0 && long" class="printusedetail full-width full-height"> + <view class="print-score bg-white-color full-width" style="position: relative;;margin-top: 10upx; height:230upx;"> + <view class="print content-color "> + <view + style="position: absolute;top: 30upx;width: 180upx; height: 52upx; border-top-right-radius: 40upx; border-bottom-right-radius:40upx; background: #FFFFFF;text-align: center;padding-top: 8upx;"> + <text style="color:#383838;font-size:40upx;font-weight: bold;">{{machineid}}</text> + </view> + <view + style="height: 70upx;position: absolute; left:20upx;top:140upx;width:100%;display:flex;flex-direction:row"> + <text + style="color: #fff; font-size: 60upx;width:22%;;font-weight: 500; text-align: center; padding-left:10upx">{{list != null ? list.package_total.quota : 0}}</text> + <text + style="color: #fff; font-size: 60upx;width:45%;;font-weight: 500;text-align: center;padding-left:20upx;">{{list != null ? list.package_total.used_quota : 0}}</text> + <text v-if="getPrintSurplusCount(surplusCount) == 1 " + style="color: #43CF7C; font-size: 60upx;width:33%;;font-weight: 500;text-align:center;padding-right:30upx;">{{surplusCount}}</text> + <text v-if="getPrintSurplusCount(surplusCount) == 2 " + style="color: #FF8D1A; font-size: 60upx;width:33%;;font-weight: 500;text-align:center;padding-right:30upx;">{{surplusCount}}</text> + <text v-if="getPrintSurplusCount(surplusCount) == 3 " + style="color: #FB1B1B; font-size: 60upx;width:33%;;font-weight: 500;text-align:center;padding-right:30upx;">{{surplusCount}}</text> + </view> + <view style="position: absolute; left:20upx;top:220upx;width:100%;display:flex;flex-direction:row"> + <text style="color:#fff; font-size:23upx;text-align:center;width:25%; padding-left:5upx;">可打印总量(次)</text> + <text + style="color:#fff; font-size:23upx;margin-left:30upx;text-align:center;width:40%;">已经使用(次)</text> + <text style="color: #fff; font-size:23upx;text-align:center;width:35%;padding-right:25upx;">剩余打印量(次)</text> + </view> + </view> + </view> + + <view class="print-score bg-white-color full-width" + style="position: relative;margin-top: -30upx;height: 180upx;background: #FFFFFF;box-shadow: 1upx 19upx 57upx 9upx rgba(197, 197, 197, 0.5);height: 130upx"> + <view style="position: absolute; left: 20upx; top: 25upx;"> + <text style="color: #fff; font-size:28upx;color: #383838;font-weight:bold;">标准版</text> + </view> + <view + style="position: absolute;left:180upx;top:25upx;background:#383838; width:180upx; height:38upx; border-radius: 30upx; text-align: center;padding-top: 3upx;" + @click="packageDetail()"> + <text style="color: #fff; font-size: 24upx;color: #FFFFFF;padding-top:10upx;">套餐权益</text> + <label class="fa fa-angle-right align-right sub-color" + style="margin-left:8upx;font-size:25upx;color:#ffffff;"></label> + </view> + <view style="position: absolute; right: 20upx; top: 28upx;"> + <text v-if="getPrintSurplusCount(packageSurplusCount) == 1 " + style="color: #43CF7C;font-size: 24upx;">剩余打印量:{{packageSurplusCount}}次</text> + <text v-if="getPrintSurplusCount(packageSurplusCount) == 2 " + style="color: #FF8D1A;font-size: 24upx;">剩余打印量:{{packageSurplusCount}}次</text> + <text v-if="getPrintSurplusCount(packageSurplusCount) == 3 " + style="color: #FB1B1B;font-size: 24upx;">剩余打印量:{{packageSurplusCount}}次</text> + </view> + <view class='topLittleBOX-2' style="margin-left: 20upx;margin-top:20upx;height:60upx;"> + <view class='row-1' :style="{width: 250 +'px;max-width:90%'}"></view> + </view> + <view style="position:absolute; left:20upx; top:135upx"> + <text + style=" font-size: 26upx;color: #333333;">已使用:{{list.default_package.used_quota}}次/可打印总量:{{list != null ? list.default_package.quota : 0}}次</text> + </view> + <view style="position:absolute;width:calc(100% - 40upx);height:2upx;background:#f6f6f6;top:80upx;margin-left: 20upx;margin-right:10upx;"> + </view> + <view style="position:absolute; top:180upx; height:auto;width:100%;text-align:center;" v-if="list"> + <text v-if="getDaysDifference(list.default_package.expire_time) > 100" + style=" font-size: 22upx;color:#43CF7C">有效期至{{list.default_package.create_date}}</text> + <text + v-if="getDaysDifference(list.default_package.expire_time) > 30 && getDaysDifference(list.default_package.expire_time) <=100" + style=" font-size: 22upx;color:#FF8D1A ">有效期至{{list.default_package.create_date}}</text> + <text v-if="getDaysDifference(list.default_package.expire_time) <= 30" + style=" font-size: 22upx;color:#FB1B1B ">有效期至{{list.default_package.create_date}}</text> + </view> + </view> + + + <view v-if=" printCardList.length != null && printCardList.length > 0 && list" class="print-score-buttom"> + <view style="width:100%; height:40upx;display:flex;flex-direction:row;margin-top:20upx;"> + <text + style="color:#fff;font-size:28upx;color:#2A82E4;font-weight:bold;width:30%;margin-left: 15upx;">打印卡</text> + <view style="width:70%;text-align:right;"> + <text + v-if="getPrintSurplusCount(list.package_total.print_card_quota - list.package_total.print_card_used_quota) == 1 " + style="color: #43CF7C;font-size: 24upx; width:90%;margin-right: 15upx;">剩余打印量:{{list.package_total.print_card_quota - list.package_total.print_card_used_quota}}次</text> + <text + v-if="getPrintSurplusCount(list.package_total.print_card_quota - list.package_total.print_card_used_quota) == 2 " + style="color: #FF8D1A;font-size: 24upx; width:90%;margin-right: 15upx;">剩余打印量:{{list.package_total.print_card_quota - list.package_total.print_card_used_quota}}次</text> + <text + v-if="getPrintSurplusCount(list.package_total.print_card_quota - list.package_total.print_card_used_quota) == 3 " + style="color: #FB1B1B;font-size: 24upx; width:90%;margin-right: 15upx;">剩余打印量:{{list.package_total.print_card_quota - list.package_total.print_card_used_quota}}次</text> + <!-- <text + style="color:#fff;font-size: 22upx;color: #7EDEA5;width:90%;margin-right: 15upx;">余量:{{list.package_total.print_card_quota - list.package_total.print_card_used_quota}}次</text> --> + </view> + </view> + <view style="margin-top:25upx;height:35upx;margin-left: 15upx;"> + <view class='row-2' :style="{width: 250 +'px;max-width:90%'}"></view> + </view> + <view style="margin-left:15upx;margin-top: 5upx;"> + <text + style="font-size: 26upx;color: #333333;">已使用:{{list.package_total.print_card_used_quota}}次/可打印总量:{{list.package_total.print_card_quota}}次</text> + </view> + <view v-for="(item, index) in printCardList" :key="index"> + <view + style="margin-left:20upx; margin-top:20upx;height: auto;display:flex;flex-direction:column;background: #FDF7E8;box-shadow: 1upx 19upx 57upx 9upx;border-radius: 5upx;width: 93%;padding-left: 20upx;"> + <text + style=" font-size:26upx;color: #2A82E4;font-weight: bold ;margin-top: 10upx;">{{item.quota}}次打印卡</text> + <text + style="font-size: 22upx;color:#666666;margin-top: 5upx; margin-bottom: 10upx;">已使用:{{item.used_quota}}次,   剩余打印量:{{item.quota - item.used_quota}}次</text> + </view> + </view> + </view> + + <view style="position:relative;margin-top:-30upx; + width:calc(100% - 70upx); + height: 160upx; + border-radius: 20upx; margin-left: 35upx;margin-right: 35upx; background: #FFFFFF; + box-shadow: 1upx 19upx 57upx 9upx rgba(197, 197, 197, 0.5);text-align: center;line-height: 160upx;" + v-if="printCardList.length == 0 || printCardList.length == null"> + <text style="color: #B2B2B2; text-align: center; line-height: 50upx;font-size: 24upx; color: #2A82E4; font-weight: 600"> + 未充值打印卡 + </text> + </view> + </view> + <!-- 标准版结束--> + + + <!-- 无限版开始--> + <view v-if="print_type == 1 && long" class="printusedetail full-width full-height"> + <view class="print-score bg-white-color full-width" + style="position: relative;margin-top: 10upx;background: #FF8D1A; height:230upx;"> + <view class="print content-color "> + <view + style="position: absolute;top: 30upx;width: 180upx; height: 52upx; border-top-right-radius: 40upx; border-bottom-right-radius:40upx; background: #FFFFFF;text-align: center;padding-top: 8upx;"> + <text style="color:#383838;font-size:40upx;font-weight: bold;">{{machineid}}</text> + </view> + <view + style="height: 70upx;position: absolute; left:20upx;top:140upx;width:100%;display:flex;flex-direction:row"> + <text + style="color: #fff; font-size: 40upx;width:33%;;font-weight: 400; text-align: center;padding-right: 20upx;">无限</text> + <text + style="color: #fff; font-size: 42upx;width:33%;;font-weight: 400;text-align: center;">{{list.package_total.used_quota}}</text> + <text + style="color: #FFFFFF; font-size: 40upx;width:33%;;font-weight: 400;text-align:center;padding-right:30upx;">无限</text> + </view> + <view style="position: absolute; left:20upx;top:200upx;width:100%;display:flex;flex-direction:row"> + <text style="color:#fff; font-size:24upx;text-align:center;width:25%;padding-left: 30upx;">可印总量(次)</text> + <text + style="color:#fff; font-size:24upx;margin-left:30upx;text-align:center;width:40%;">已使用(次)</text> + <text style="color: #fff; font-size:24upx;text-align:center;width:35%;padding-right: 30upx;">剩余打印量(次)</text> + </view> + </view> + </view> + + <view class="print-score bg-white-color full-width" + style="position: relative;margin-top: -30upx;height: 180upx;background: #FFFFFF;box-shadow: 1upx 19upx 57upx 9upx rgba(197, 197, 197, 0.5);height: 130upx"> + <view style="position: absolute; left: 20upx; top: 25upx;"> + <text style="color: #fff; font-size:28upx;color: #FF8D1A;;font-weight:bold;">无限版</text> + </view> + <view + style="position: absolute;left:180upx;top:28upx;background:#FF8D1A; width:180upx; height:38upx; border-radius: 30upx; text-align: center;padding-top: 3upx;" + @click="packageDetail()"> + <text style="color: #fff; font-size: 24upx;color: #FFFFFF;padding-top:10upx;">套餐权益</text> + <label class="fa fa-angle-right align-right sub-color" + style="margin-left:8upx;font-size:25upx;color:#ffffff;"></label> + </view> + <view style="position:absolute;top:115upx; width:100%;height:80upx; text-align: center;"> + <text style="color: #fff; font-size:30upx;color: #FF8D1A;font-weight:600;">不限制打印次数</text> + </view> + <view + style="position:absolute;width:calc(100% - 40upx);height:2upx;background:#f6f6f6;top:80upx;margin-left: 20upx;margin-right:10upx;"> + </view> + <view style="position:absolute;top:165upx;width:100%;height:80upx;text-align: center;"> + <text v-if="getDaysDifference(list.default_package.expire_time) > 100" + style=" font-size: 22upx;color:#43CF7C">有效期至{{list.default_package.create_date}}</text> + <text + v-if="getDaysDifference(list.default_package.expire_time) > 30 && getDaysDifference(list.default_package.expire_time) <=100" + style=" font-size: 22upx;color:#FF8D1A ">有效期至{{list.default_package.create_date}}</text> + <text v-if="getDaysDifference(list.default_package.expire_time) <= 30" + style=" font-size: 22upx;color:#FB1B1B ">有效期至{{list.default_package.create_date}}</text> + </view> + </view> + </view> + + <!-- <view v-if="long && print_type == 0" style="width:100%; height: 80upx;" > + <text style="float:right;color:#FFFFFF; font-size: 30upx;background:#2A82E4; + border-top-left-radius:60upx; + border-bottom-left-radius: 60upx; + width: 220upx;text-align: center;height:80upx;line-height:80upx;margin-right:-15upx;margin-top:20upx;" + @click="printCardRecharge()">充值打印卡</text> + </view> --> + + </view> +</template> + +<script> + import uniPopup from '../index/common/uni-popup/uni-popup.vue'; + import logoservice from '@/service/logoservice.js'; + + export default { + components: { + uniPopup, + }, + computed: { + + }, + data() { + return { + long: false, + list: null, + submit: true, + money: "", + machineid: "", + print_type: 0, //默认0标准版 1无限版 + surplusCount: 0, //剩余次数 + packageSurplusCount: 0, //打印卡剩余次数 + printCardList: [], //打印卡列表 + } + }, + methods: { + + //获取剩余量次数相差 + getPrintSurplusCount(count) { + try { + if (count >= 200) { //绿色 + return 1; + } else if (count < 200 && count >= 50) { //橙色 + return 2; + } else if (count < 50) { //红色 + return 3; + } + } catch (e) { + + } + return 0; + }, + + + //获取相差天数 + getDaysDifference(time) { + try { + let day = new Date(time.replace(/-/g, "/")).getTime() - new Date().getTime(); //日期转时间戳 + let dayCount = Math.floor(day / 86400000); //时间戳获取天数 + return dayCount; + } catch (e) { + + } + return 0; + }, + + + //格式化时间 + dateFormat(time) { + try { + var dt = new Date(time.replace(/-/g, '/')); + var y = dt.getFullYear(); + var m = dt.getMonth() + 1; + var d = dt.getDate(); + return y + '年' + m + '月' + d + '日'; + } catch (e) { + // 错误处理代码片段 + } + return time; + }, + + + packageDetail() { + var time; + if (this.list != null && this.list.default_package != null) { + time = this.list.default_package.expire_date; + } + uni.navigateTo({ + url: '../mine/PackageDetail?machineid=' + this.machineid + "&print_type=" + this.print_type + + "&time=" + time, + }); + }, + // printCardRecharge() { + // uni.navigateTo({ + // url: '../mine/PrintCardRecharge?machineid=' + this.machineid + "&surplusCount=" + this + // .surplusCount, + // }); + // }, + // printCardRechargeList() { + // uni.navigateTo({ + // url: '../mine/PrintCardRechargeList' + // }); + // }, + + //获取初始化数据 + getDataInfo() { + uni.showLoading({ + title: '正在加载中...' + }); + logoservice.Machinelistdetail({ + m: 'Machine/list', + machine_id: this.machineid + }).then(result => { + this.long = true + uni.hideLoading(); + + if (result[0] != undefined) { + this.list = result[0]; + + if (this.list != null && this.list.package_total != null) { + var quota = this.list.package_total.quota; + var used_quota = this.list.package_total.used_quota; + this.surplusCount = quota - used_quota; + } + + if (this.list != null && this.list.default_package != null) { + this.list.default_package.create_date = this.dateFormat(this.list.default_package.expire_date); + var quota = this.list.default_package.quota; + var used_quota = this.list.default_package.used_quota; + this.packageSurplusCount = quota - used_quota; + } + + this.printCardList = this.list.print_package; + + console.log("打印数量:"+this.printCardList.length ); + } + }).catch(err => { + uni.hideLoading(); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + }, + }, + + onShow() { + + }, + onLoad(options) { + this.machineid = options.machineid; + this.print_type = options.print_type; + var _seft = this + uni.login({ + provider: 'weixin', + success: (res) => { + logoservice.login({ + m: 'Init/init', + code: res.code + }).then(result => { + this.long = true; + /* uni.showLoading({ + title: '正在加载中...' + }); */ + _seft.getDataInfo(); + }).catch(err => { + + }) + }, + fail: (err) => { + console.error('授权登录失败:' + JSON.stringify(err)); + } + }); + + } + } +</script> + +<style lang="scss"> + page { + width: 100%; + height: 99%; + background: #FFFFFF; + } + + .printusedetail { + + .print-score-buttom { + width: 88%; + padding: 10upx; + padding-bottom: 30upx; + background: #FFFFFF; + border-radius: 20upx; + display: flex; + flex-direction: column; + font-size: 26upx; + color: #fff; + position: relative; + margin: 0 auto; + margin-top: -40upx; + box-shadow: 1upx 19upx 57upx 9upx rgba(197, 197, 197, 0.5); + .print { + width: 100%; + .text { + line-height: 50upx; + color: #fff; + } + } + .print-card-has-no-use-box { + padding-left: 20upx; + padding-top: auto; + display: flex; + vertical-align: middle; + flex-direction: row; + align-items: center; + width: calc(100% - 120upx); + } + .row-1 { + height: 30upx; + background-color: #383838; + border-radius: 20upx; + width: 0upx; + transition: width 1.5s linear; + } + .row-2 { + height: 30upx; + background-color: #2A82E4; + border-radius: 20upx; + transition: width 1.5s linear; + } + } + + .print-score { + padding: 50upx 0; + width: 90%; + height: 220upx; + margin: 57upx auto; + background: #383838; + border-radius: 20upx; + display: flex; + align-items: center; + font-size: 26upx; + color: #fff; + + .print { + width: 100%; + + .text { + line-height: 50upx; + color: #fff; + } + } + + .print-card-has-no-use-box { + padding-left: 20upx; + padding-top: auto; + display: flex; + vertical-align: middle; + flex-direction: row; + align-items: center; + width: calc(100% - 120upx); + } + + .row-1 { + height: 30upx; + background-color: #383838; + border-radius: 20upx; + width: 0upx; + transition: width 1.5s linear; + } + + .row-2 { + height: 30upx; + background-color: #2A82E4; + border-radius: 20upx; + width: 0upx; + transition: width 1.5s linear; + } + } + + } +</style> diff --git a/pages/mine/PrivacyPolicy.vue b/pages/mine/PrivacyPolicy.vue new file mode 100644 index 0000000..46d605e --- /dev/null +++ b/pages/mine/PrivacyPolicy.vue @@ -0,0 +1,147 @@ +<template> + <view class="full-width content-color full-height"> + <view class="full-width"> + <div> + + <div style="text-indent: 32upx;"> + 本应用非常重视用户隐私政策并严格遵守相关的法律规定。请您仔细阅读《隐私政策》后再继续使用。 + 如果您继续使用我们的服务,表示您已经充分阅读和理解我们协议的全部内容。 + </div> + <div style="text-indent: 32upx; margin-top: 5upx;"> + 本小程序尊重并保护所有使用服务用户的个人隐私权。 + 为了给您提供更准确、更优质的服务,本应用会按照本隐私权政策的规定使用和披露您的个人信息。 + 除本隐私权政策另有规定外,在未征得您事先许可的情况下,本应用不会将这些信息对外披露或向第三方提供。 + 本应用会不时更新本隐私权政策。您在同意本应用服务使用协议之时,即视为您已经同意本隐私权政策全部内容。 + </div> + <div style="margin-top: 5upx;"> + <div style="text-indent: 32upx; font-weight: 900;">1. 适用范围</div> + <div style="text-indent: 32upx;"> + (a) 在您注册本应用小程序帐号时,您根据小程序要求提供的个人注册信息。 + </div> + <div style="text-indent: 32upx;"> + (b) 在您使用本应用网络服务,或访问本应用平台网页时,本应用自动接收并记录的您的浏览器和计算机上的信息, + 包括但不限于您的IP地址、浏览器的类型、使用的语言、访问日期和时间、软硬件特征信息及您需求的网页记录等数据。 + </div> + <div style="text-indent: 32upx;"> + (c) 本应用通过合法途径从商业伙伴处取得的用户个人数据。 + </div> + <div style="text-indent: 32upx;"> + (d) 本应用严禁用户发布不良信息,如裸露、色情和亵渎内容,发布的内容我们会进行审核,一经发现不良信息,会禁用该用户的所有权限,予以封号处理。 + </div> + </div> + <div style="margin-top: 5upx;"> + <div style="text-indent: 32upx; font-weight: 900;">2. 信息使用</div> + <div style="text-indent: 32upx;"> + (a) 本应用不会向任何无关第三方提供、出售、出租、分享或交易您的个人登录信息。如果我们存储发生维修或升级,我们会事先发出推送消息来通知您,请您提前允许本应用消息通知。 + </div> + <div style="text-indent: 32upx;"> + (b) 本应用亦不允许任何第三方以任何手段收集、编辑、出售或者无偿传播您的个人信息。任何本应用平台用户如从事上述活动,一经发现,本应用有权立即终止与该用户的服务协议。 + </div> + <div style="text-indent: 32upx;"> + (c) 为服务用户的目的,本应用可能通过使用您的个人信息,向您提供您感兴趣的信息,包括但不限于向您发出产品和服务信息, + 或者与本应用合作伙伴共享信息以便他们向您发送有关其产品和服务的信息。(后者需要您的事先同意) + </div> + </div> + <div style="margin-top: 5upx;"> + <div style="text-indent: 32upx; font-weight: 900;">3. 信息披露</div> + <div style="text-indent: 32upx;"> + 在如下情况下,本应用将依据您的个人意愿或法律的规定全部或部分的披露您的个人信息: + </div> + <div style="text-indent: 32upx;"> + (a) 未经您事先同意,我们不会向第三方披露。 + </div> + <div style="text-indent: 32upx;"> + (b) 为提供您所要求的产品和服务,而必须和第三方分享您的个人信息。 + </div> + <div style="text-indent: 32upx;"> + (c) 根据法律的有关规定,或者行政或司法机构的要求,向第三方或者行政、司法机构披露。 + </div> + <div style="text-indent: 32upx;"> + (d) 如您出现违反中国有关法律、法规或者本应用服务协议或相关规则的情况,需要向第三方披露。 + </div> + <div style="text-indent: 32upx;"> + (e) 如您是适格的知识产权投诉人并已提起投诉,应被投诉人要求,向被投诉人披露,以便双方处理可能的权利纠纷。 + </div> + </div> + <div style="margin-top: 5upx;"> + <div style="text-indent: 32upx; font-weight: 900;">4. 信息存储和交换</div> + <div style="text-indent: 32upx;"> + 本应用收集的有关您的信息和资料将保存在本应用及(或)其关联公司的服务器上,这些信息和资料可能传送至您所在国家、地区或本应用收集信息和资料所在地的境外并在境外被访问、存储和展示。 + </div> + </div> + <div style="margin-top: 5upx;"> + <div style="text-indent: 32upx; font-weight: 900;">5. Cookie的使用</div> + <div style="text-indent: 32upx;"> + (a) 在您未拒绝接受cookies的情况下,本应用会在您的计算机上设定或取用cookies,以便您能登录或使用依赖于cookies的本应用平台服务或功能。 + 本应用使用cookies可为您提供更加周到的个性化服务,包括推广服务。 + </div> + <div style="text-indent: 32upx;"> + (b) 您有权选择接受或拒绝接受cookies。您可以通过修改浏览器设置的方式拒绝接受cookies。 + 但如果您选择拒绝接受cookies,则您可能无法登录或使用依赖于cookies的本应用网络服务或功能。 + </div> + <div style="text-indent: 32upx;"> + (c) 通过本应用所设cookies所取得的有关信息,将适用本政策。 + </div> + </div> + <div style="margin-top: 5upx;"> + <div style="text-indent: 32upx;">6.本隐私政策的更改</div> + <div style="text-indent: 32upx;"> + (a) + 如果决定更改隐私政策,我们会在本政策中、本公司网站中以及我们认为适当的位置发布这些更改,以便您了解我们如何收集、使用您的个人信息,哪些人可以访问这些信息,以及在什么情况下我们会透露这些信息。 + </div> + <div style="text-indent: 32upx;"> + (b) 本公司保留随时修改本政策的权利,因此请经常查看。如对本政策作出重大更改,本公司会通过网站通知的形式告知。 + </div> + </div> + <div style="text-indent: 32upx; margin-top: 5upx;"> + 请您妥善保护自己的个人信息,仅在必要的情形下向他人提供。如您发现自己的个人信息泄密,尤其是本应用用户名及密码发生泄露,请您立即联络本应用客服,以便本应用采取相应措施。 + </div> + <div style="text-indent: 32upx; margin-top: 5upx;"> + 感谢您花时间了解我们的隐私政策!我们将尽全力保护您的个人信息和合法权益,再次感谢您的信任! + </div> + </div> + </view> + </view> +</template> + +<script> + export default { + components: { + + }, + computed: {}, + data() { + return { + + }; + }, + mounted() { + + }, + methods: { + onChange(e) { + + }, + onCancel(e) { + + }, + change() { + + }, + }, + onLoad(options) { + + }, + onShow() { + + } + }; +</script> + +<style lang="scss"> + page { + width: 100%; + height: 100%; + background: #FFFFFF; + } +</style> \ No newline at end of file diff --git a/pages/mine/RightsAndInterests.vue b/pages/mine/RightsAndInterests.vue new file mode 100644 index 0000000..e21b7a5 --- /dev/null +++ b/pages/mine/RightsAndInterests.vue @@ -0,0 +1,274 @@ +<template> + <view style="width: 100%; background: #F8F8F8;"> + <view style="position: absolute; padding-left: 30upx; top: 20upx; display: flex;flex-direction: column;padding-right: 30upx; margin-bottom: 20upx;"> + <text style="color: #333333; font-size: 32upx;font-weight:bold;" + hover-class="hover-class-text">云打印软件服务权益</text> + <text style="color: #333333; font-size: 26upx;margin-top: 10upx;" + hover-class="hover-class-text">瑞丰彩自助云打印服务,无需安装任何APP、无需人工设计,只需微信“扫一扫”,轻松上传相片、自动渲染、自助打印。</text> + <view style="width: 100%;height: auto; margin-top: 40upx;"> + <!--动态数据--> + <view style=" background: #F8F8F8; overflow: hidden; position: relative; width: 100%; "> + <view style="border-radius:5upx 5upx 0px 0px; align-items: center; + display: flex; text-align: center; color: #FFFFFF; font-size: 24upx; position: absolute; + width:100%; height: 85upx;line-height: 85upx;"> + <view style="width:33%;color:#383838;font-weight:bold;">对比项</view> + <view style="width:33.5%;background:#383838;height:100%;color: #FFFFFF;border-right:1upx solid #999999;">标准版</view> + <view style="width:33.5%;background:#E3801B;color: #FFFFFF;">无限版</view> + </view> + <scroll-view + style="margin-top: 86upx;margin-bottom: 0upx; padding-bottom: 5upx; border-bottom-right-radius: 5upx; border-bottom-left-radius: 5upx; width: 100%; background: #F8F8F8;"> + + <view v-for="(item, index) in openlist" :key="index" + style="display: flex; text-align: center; font-size: 24upx; border-top: 2upx solid #FFFFFF; height: 65upx;line-height: 65upx; text-align: center;"> + <view style="width: 33%;border-right: 1upx solid #FFFFFF; "> <!-- border-right: 1upx solid #EEEEEE;border-left: 1upx solid #EEEEEE; --> + {{item.name}} + </view> + <view style="width: 33%; border-right: 2upx solid #FFFFFF;height: 100%; "> + <image v-if="item.standard == 1" src="../../static/icon_rights_interests_complete.png" + style="width: 35upx;height: 35upx;margin-top: 15upx; "></image> + <image v-if="item.standard == 2" src="../../static/icon_rights_interests_cancel.png" + style="width: 28upx;height: 28upx;margin-top: 15upx;"></image> + <text style="width: 28upx;height: 28upx;font-size:24upx;" v-if="item.standard == 5">{{item.standardText}}</text> + </view> + <view style="width: 33%; height: 100%;"> + <image v-if="item.upgrade == 1" src="../../static/icon_rights_interests_complete.png" + style="width: 35upx;height: 35upx;margin-top: 15upx;"></image> + <image v-if="item.upgrade == 2" src="../../static/icon_rights_interests_cancel.png" + style="width: 28upx;height: 28upx;margin-top: 15upx;"></image> + <text style="width: 28upx;height: 28upx;font-size:26upx;" v-if="item.upgrade == 5">{{item.infiniteText}}</text> + </view> + </view> + </scroll-view> + </view> + </view> + + + </view> + </view> +</template> + +<script> + import logoservice from '@/service/logoservice.js'; + export default { + components: { + + }, + computed: { + + }, + data() { + return { + openlist: [/*{ + name: '设备服务费', + standard: 5, + upgrade: 5, + standardText: "¥12800", + infiniteText: "¥19800", + }, + { + name: '软件服务费', + standard: 5, + upgrade: 5, + standardText: "¥1888", + infiniteText: "¥3888", + }, */ + { + name: '适合客户', + standard: 5, + upgrade: 5, + standardText: "个人工作室", + infiniteText: "中小企业", + }, + { + name: '支持区域', + standard: 5, + upgrade: 5, + standardText: "国内", + infiniteText: "全球", + }, + { + name: '默认打印数', + standard: 5, + upgrade: 5, + standardText: "500", + infiniteText: "无限", + }, + + { + name: '超量打印量', + standard: 5, + upgrade: 5, + standardText: "¥0.5/次", + infiniteText: "无限", + }, + + { + name: '运营子账号', + standard: 5, + upgrade: 5, + standardText: "1-3", + infiniteText: "1-10", + }, + { + name: '品牌授权', + standard: 1, + upgrade: 1, + }, + { + name: '官方图库', + standard: 5, + upgrade: 5, + standardText: "部分图库", + infiniteText: "所有", + }, + { + name: '专属图片', + standard: 2, + upgrade: 1, + }, + { + name: '图库管理', + standard: 2, + upgrade: 1, + }, + { + name: '广告管理', + standard: 2, + upgrade: 1, + }, + { + name: '官方小程序', + standard: 1, + upgrade: 1, + }, + { + name: '官方客户端', + standard: 1, + upgrade: 1, + + }, + { + name: '自定小程序', + standard: 2, + upgrade: 1, + }, + { + name: 'H5定制', + standard: 2, + upgrade: 1, + }, + { + name: '自定义收款', + standard: 2, + upgrade: 1, + }, + { + name: '独立pc运营平台', + standard: 2, + upgrade: 1, + }, + { + name: '开放平台', + standard: 2, + upgrade: 2, + }, + { + name: '培训服务', + standard: 1, + upgrade: 1, + }, + { + name: '优先客户支持', + standard: 2, + upgrade: 1, + }, + { + name: '官方微信群', + standard: 2, + upgrade: 1, + }, + { + name: '24小时智能监控', + standard: 1, + upgrade: 1, + }, + { + name: '专属数据分析服务', + standard: 2, + upgrade: 1, + }, + { + name: '专属技术支持', + standard: 2, + upgrade: 1, + }, + { + name: '系统升级', + standard: 1, + upgrade: 1, + }, + { + name: '特别定制', + standard: 2, + upgrade: 1, + }, + { + name: '上门服务', + standard: 1, + upgrade: 1, + }, + { + name: '设备维护', + standard: 1, + upgrade: 1, + }, + + + ], + long: false, + list: { + bank_name: null, + account_name: null, + account_sn: null + }, + submit: true, + money: "", + print_type: 0, //默认0标准版 1无限版 + } + }, + methods: { + + }, + onShow() { + uni.login({ + provider: 'weixin', + success: (res) => { + logoservice.login({ + m: 'Init/init', + code: res.code + }).then(result => { + uni.setStorageSync('openid', result.openid) + logoservice.setwixinInfo(result); + this.submit = true + }).catch(err => { + + }) + }, + fail: (err) => { + console.error('授权登录失败:' + JSON.stringify(err)); + } + }); + }, + onLoad(options) { + this.print_type = options.print_type; + } + } +</script> + +<style lang="scss"> + page { + width: 100%; + height: 100%; + background: #FFFFFF; + } +</style> diff --git a/pages/mine/Settle.vue b/pages/mine/Settle.vue new file mode 100644 index 0000000..fab72c7 --- /dev/null +++ b/pages/mine/Settle.vue @@ -0,0 +1,373 @@ +<template> + <view class="full-width content-color full-height" style="position: relative;"> + <view class="full-width"> + <view style="position: fixed; width: 100%;"> + + <view + style="width:calc(100% - 40upx); background: #FFFFFF;height: 220upx; padding-top: 10upx;margin-left: 20upx; border-radius: 10upx;"> + <view @click="togglePopup()" style="width: calc(100% - 40upx);border-radius:50upx; height: 80upx; border:2upx solid #F1F1F1; + margin-left: 20upx; margin-right: 20upx;"> + <text style="color: #333333;float: left;margin-top: 20upx;margin-left: 30upx;font-size: 27upx;"> + {{queryPage.direction!=null ? queryPage.direction :"结算状态" }} + </text> + <span class="iconfont icon-xiala" + style="margin-left: 10upx; font-size: 20upx; color: #BCBEC1;float: right ;margin-top: 25upx;margin-right: 30upx;"></span> + </view> + <view style="width: calc(100% - 40upx); height: 90upx;margin-left: 20upx; + margin-right: 20upx; margin-top: 20upx;display: flex; + flex-direction: row; border:2upx solid #F1F1F1;"> + <view + style="margin: auto; display: flex; flex-direction: row; justify-content: center; width: calc(100% -100upx);margin-top: 20upx;"> + <text style="color: #333333;font-size: 27upx;" @click="selectStartTime()"> + {{selectStartTimeText?selectStartTimeText:"开始时间"}}</text> + <text style="color: #333333;margin-left: 60upx;font-size: 27upx;"> ~ </text> + <text style="color: #333333;margin-left: 60upx;font-size: 27upx;" @click="selectEndTime()"> + {{selectEndTimeText?selectEndTimeText:"结束时间"}} </text> + </view> + </view> + </view> + </view> + <!-- 动态数据 --> + <view scroll-y @scrolltolower="loadMore()" class="full-width" v-if="long" + style="padding-top: 252upx;"> + <view v-for="(item, index) in LoupanList" :key="index" class="eq_list" @click="details(item)"> + <view class="eq_list_div"> + <view class="full-width eq_list_ul"> + <text class="eq_list_ul_left">结算时间 {{item.create_time || ''}}</text> + <text class="eq_list_ul_right" style="margin-top: -5upx;"> + <text v-if="item.settle_amount >= 0 " + style="color:#5CE6B6;font-size: 30upx;">+{{item.settle_amount || '0'}}</text> + <text v-if="item.settle_amount < 0 " style="color:#F67273;font-size: 30upx;"> + {{item.settle_amount || '0'}}</text> + </text> + </view> + <view class="full-width eq_list_ul" style="color: #BCBEC1; font-size: 24upx;"> + <text style="width: 60%;">结算周期:{{item.start_time}} - {{item.end_time}}</text> + <text style="width: 40%; text-align: right;color:#F67273;" + v-if="item.status.text == '未结算' || item.status.text == '待结算' ">{{item.status.text}}</text> + <text style="width: 40%; text-align: right;color:#5CE6B6;" + v-if="item.status.text == '已结算' ">{{item.status.text}}</text> + <text style="width: 40%; text-align: right;color:#F0A900;" + v-if="item.status.text == '结算中' || item.status.text == '提现中' ">{{item.status.text}}</text> + </view> + </view> + </view> + <!-- 暂无相关信息 --> + <view class="align-center content-color" + style="position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%);" + v-if="LoupanList.length == 0 || LoupanList.length == null"> + <span class="iconfont icon-wushuju" + style="font-size: 100upx; text-align: center; color: #B2B2B2;"></span> + <view style="color: #B2B2B2; text-align: center; line-height: 50upx;font-size: 24upx;">暂无相关信息</view> + </view> + </view> + <!-- 动态数据完 --> + </view> + <!-- 返回顶部 --> + <view v-if="totopstatus" class="to-top content-color" @click="totop()"> + <view class="fa fa-angle-right to-top-icon"></view> + </view> + + <mpvue-picker ref="mpvuePicker" :themeColor="'#53B2B0'" :pickerValueDefault="pickerValueDefault" + @onCancel="onCancel" @onConfirm="onConfirm" :pickerValueArray="pickerValueArray"> + </mpvue-picker> + <uni-popup ref="showshare" :type="type" @change="change"> + <view class="uni-share" style="width: 100%; margin: auto;"> + <view style="background: #F9F9F9;width: 100%;border-bottom: 1upx solid #00000000;"> + <view style="width: 100%;border-bottom: 1upx solid #E9E7ED; height:100upx; + text-align: center;line-height: 100upx; font-size: 26upx; font-weight: 500;"> + 选择结算状态 + </view> + <scroll-view scroll-y style="margin: auto; height: 500upx; overflow: hidden; overflow-y: scroll;"> + <view style="width: calc(100% - 40upx); margin:20upx auto; overflow: hidden;"> + <view v-for="(item, index) in directionlist" :key="index" + @click="selectMonthdirection(item)" + :class="queryPage.direction == item.val ? 'green':''" + style="width: calc(33% - 20upx);margin:10upx; float: left; background: #ffffff;height: 60px; border-radius: 5upx; font-size: 26upx; text-align: center;line-height: 60px;"> + {{item.text}} + </view> + </view> + </scroll-view> + </view> + <view class="uni-share-btn" @click="cancel('share')">取消</view> + </view> + </uni-popup> + </view> + +</template> + +<script> + import uniIcon from '@/components/uni-icon/uni-icon.vue'; + import uniPopup from '../index/common/uni-popup/uni-popup.vue' + import Enums from '@/util/Enums'; + import foot from '../../components/foot.vue'; + import logoservice from '@/service/logoservice.js'; + import mpvuePicker from '../../components/mpvue-picker/mpvuePickernew.vue'; + export default { + components: { + uniPopup, + uniIcon, + foot, + mpvuePicker, + }, + computed: {}, + data() { + return { + long: false, + LoupanList: [], //数据 + queryPage: { + m: 'Settle/list', + partner_id: 14, + }, + goodsItem: [], + pickerValueArray: [], + pickerValueDefault: [0, 1], + array: ['待结算', '已结算', '提现中', '全部'], + type: 'bottom', + directionlist: [{ + text: '全部', + val: "" + }, + { + text: '结算中', + val: '1' + }, + { + text: '提现中', + val: '2' + }, + { + text: '已结算', + val: '3' + } + ], + selectStartTimeText: "", //开始时间 + selectEndTimeText: "", //结束时间 + selectTypeTime: 1, //1开始时间 2结束时间 + }; + }, + mounted() { + + }, + methods: { + + //开始时间 + selectStartTime() { + this.selectTypeTime = 1; + this.$refs.mpvuePicker.show(); + }, + + //结束时间 + selectEndTime() { + this.selectTypeTime = 2; + this.$refs.mpvuePicker.show(); + }, + + //日期确定 + onConfirm(e) { + let date; + if (e.value.length == 1) { + date = e.value[0] + } else if (e.value.length == 2) { + let myMonth = e.value[1] + if (myMonth < 10) { + myMonth = '0' + e.value[1] //补齐 + } + date = e.value[0] + '-' + myMonth + } else if (e.value.length == 3) { + let myMonth = e.value[1] + if (myMonth < 10) { + myMonth = '0' + myMonth //补齐 + } + let mydate = e.value[2] + if (mydate < 10) { + mydate = '0' + e.value[2] //补齐 + } + date = e.value[0] + '-' + myMonth + '-' + mydate + } + if (this.selectTypeTime == 1) { + this.selectStartTimeText = date; + this.queryPage.start_time = this.selectStartTimeText + if (this.queryPage.end_time != null && this.queryPage.end_time != "") { + this.loadGoodsList(Enums.DATA_DIRECTION.UP); + } + } else { + this.selectEndTimeText = date; + this.queryPage.end_time = this.selectEndTimeText + if (this.queryPage.start_time != null && this.queryPage.start_time != "") { + this.loadGoodsList(Enums.DATA_DIRECTION.UP); + } + } + }, + + details(item) { + uni.navigateTo({ + url: '/pages/mine/SettleDetail?id=' + item.settle_id, + }); + }, + + onChange(e) { + + }, + + onCancel(e) { + + }, + + change(){ + + }, + + //加载数据 + loadGoodsList(direction) { + logoservice.MoneystatementList(this.queryPage).then(result => { + this.long = true + this.LoupanList = result + uni.hideLoading(); + }).catch(err => { + uni.hideLoading(); + uni.showToast({ + title: err.msg ? err.msg : err.data, + icon: 'none' + }); + }); + }, + + + togglePopup() { + this.$nextTick(() => { + this.$refs['show' + 'share'].open() + }) + }, + + selectMonthdirection(item) { + this.queryPage.status = item.val; + this.attr = item.text; + this.queryPage.direction = this.attr; + + console.log(item.val); + + this.$refs['show' + 'share'].close(); + this.LoupanList = [] + this.loadGoodsList(Enums.DATA_DIRECTION.UP); + }, + + }, + + // partner_id + onLoad(options) { + this.pickerValueArray = ['month', 'day'] + this.queryPage.partner_id = uni.getStorageSync('partner_id'); + this.loadGoodsList(); + }, + + onShow() { + + } + + }; +</script> + +<style lang="scss"> + page { + width: 100%; + height: 100%; + background: #FFFFFF; + } + + .butn { + font-size: 30upx; + font-weight: 400; + height: 100upx; + line-height: 100upx; + text-align: center; + width: 100%; + } + + /* 底部分享 */ + .uni-share { + display: flex; + flex-direction: column; + } + + .uni-share-btn { + height: 90upx; + line-height: 90upx; + font-size: 26upx; + text-align: center; + background: #FFFFFF; + } + + .eq_list { + width: 100%; + padding: 0upx 20upx; + background: #FFFFFF; + + .eq_list_div { + border-top: 1upx solid #F5F5F5; + padding: 25upx 0; + + .eq_list_ul { + display: flex; + align-items: center; + line-height: 30upx; + margin-top: 20upx; + + .eq_list_ul_left { + width: 420upx; + font-size: 26upx; + } + + .eq_list_ul_right { + width: calc(100% - 300upx); + text-align: right; + font-weight: 400; + margin-top: 20upx; + } + } + } + + } + + // 返回顶部 + .to-top { + position: fixed; + bottom: 150upx; + right: 30upx; + width: 80upx; + height: 80upx; + border-radius: 50%; + text-align: center; + line-height: 80upx; + // box-shadow: 5upx 5upx 5upx #ebeef5; + transform: rotate(-90deg); + background: #000; + opacity: 0.5; + z-index: 999; + } + + .to-top-icon { + color: #FFFFFF; + } + + .uni-share { + display: flex; + flex-direction: column; + } + + .uni-share-btn { + height: 90rpx; + line-height: 90rpx; + font-size: 14px; + text-align: center; + color: #666; + background: #FFFFFF; + border-top: 1px solid #EEEEEE; + // margin: 20upx 0; + } + + .green { + background-color: #4FB36B !important; + color: #FFFFFF; + } +</style> \ No newline at end of file diff --git a/pages/mine/SettleDetail.vue b/pages/mine/SettleDetail.vue new file mode 100644 index 0000000..55db861 --- /dev/null +++ b/pages/mine/SettleDetail.vue @@ -0,0 +1,345 @@ +<template> + <view class="full-width full-height" style="position: relative; background: #fff;"> + <view class="full-width" v-if="partnerSettle"> + <view style=" width: 100%; height: 40upx; background: #fff;"></view> + <view style=" width: 100%; text-align: center; margin-bottom: 80upx; "> + <text style="font-size: 40upx; color: #F67273; "v-if="partnerSettle.status.text == '待结算' || partnerSettle.status.text == '未结算' ">{{partnerSettle?partnerSettle.status.text:""}}</text> + <text style="font-size: 40upx; color: #F0A900; " v-if="partnerSettle.status.text == '结算中' || partnerSettle.status.text == '提现中' " >{{partnerSettle?partnerSettle.status.text:""}}</text> + <text style="font-size: 40upx; color: #5CE6B6; " v-if="partnerSettle.status.text == '已结算'">{{partnerSettle?partnerSettle.status.text:""}}</text> + </view> + + <view style=" width: 100%;display: flex;flex-direction: row; margin-left: 50upx; margin-top: 10upx; "> + <text style="font-size: 26upx; color: #333; ">结算周期: {{partnerSettle?partnerSettle.start_time:""}} - {{partnerSettle?partnerSettle.end_time:""}}</text> + </view> + + <view style=" width: 100%;display: flex;flex-direction: row; margin-left: 50upx; margin-top: 10upx; "> + <text style="font-size: 26upx; color: #333; ">订单总数:{{partnerSettle?partnerSettle.order_count:""}}单</text> + </view> + + <!-- <p class="content vT hL">订单金额:¥1.01</p> --> + <view style=" width: 100%;display: flex;flex-direction: row; margin-left: 50upx; margin-top: 10upx; "> + <text style="font-size: 26upx; color: #333; ">订单金额:¥{{partnerSettle?partnerSettle.order_amount:""}}</text> + </view> + + <view style=" width: 100%;display: flex;flex-direction: row; margin-left: 50upx; margin-top: 10upx; "> + <text style="font-size: 26upx; color: #333; ">结算比率:{{partnerSettle?partnerSettle.settle_rate * 100 :""}}%</text> + </view> + + <view style=" width: 100%;display: flex;flex-direction: row; margin-left: 50upx; margin-top: 10upx; "> + <text style="font-size: 26upx; color: #333; ">结算金额:¥{{partnerSettle?(partnerSettle.settle_amount * partnerSettle.settle_rate).toFixed(2) :""}}</text> + </view> + + <!-- <p class="content vT hL">手续费率:0.6%</p> --> + <view style=" width: 100%;display: flex;flex-direction: row; margin-left: 50upx; margin-top: 40upx; "> + <text style="font-size: 26upx; color: #333; ">手续费率:{{partnerSettle?(partnerSettle.withdrawal_rate * 100):""}} %</text> + </view> + + <view style=" width: 100%;display: flex;flex-direction: row; margin-left: 50upx; margin-top: 10upx; "> + <text + style="font-size: 26upx; color: #333; ">手续费:{{partnerSettle?(partnerSettle.withdrawal_rate * partnerSettle.settle_amount * partnerSettle.settle_rate).toFixed(2):""}} + </text> + </view> + + <view style=" width: 100%;display: flex;flex-direction: row; margin-left: 50upx; margin-top: 20upx; "> + <text + style="font-size: 26upx; color: red ">可提金额:¥{{partnerSettle?(partnerSettle.settle_amount * partnerSettle.settle_rate - (partnerSettle.withdrawal_rate * partnerSettle.settle_amount * partnerSettle.settle_rate).toFixed(2)).toFixed(2):"" }}</text> + </view> + + <!--动态数据--> + <view style="width: 100%; margin-top: 40upx;"> + <view + style=" background: #F8F8F8; overflow: hidden; position: relative; width:calc(100% - 20upx);margin-left: 10upx; "> + <view style="border-radius:5upx 5upx 0px 0px; align-items: center; + display: flex; + text-align: center; + color: #FFFFFF; + font-size: 24upx; + width:100%; + height: 90upx; + line-height: 90upx;"> + <view style="width:18%;color:#383838;font-weight:bold;border-right: 1upx solid #FFFFFF;">类型</view> + <view style="width:40%;color:#383838;font-weight:bold;border-right: 1upx solid #FFFFFF;">订单</view> + <view style="width:22%;color:#383838;font-weight:bold;border-right: 1upx solid #FFFFFF;">商品</view> + <view style="width:20%;color:#383838;font-weight:bold">状态</view> + </view> + + <scroll-view style=" + border-bottom-right-radius: 5upx; + border-bottom-left-radius: 5upx; + background: #F8F8F8;align-items: center;"> + + <view v-for="(item, index) in LoupanList" :key="index" style="display: flex; + font-size: 20upx; + border-top: 1upx solid #FFF; + height: 110upx; + line-height: 110upx; flex-direction: column; "> + + <view style="height: 90upx;line-height: 90upx; flex-direction: row; text-align: center; display: flex; + width: 100%; "> + <view style="width: 18%;border-right: 1upx solid #FFFFFF; margin-top: 20upx; "> + <text style="font-size: 20upx; color: #F67273; "v-if="item.direction == 'income'">收入</text> + <text style="font-size: 20upx; color: #5CE6B6; " v-if="item.direction == 'expense'">支出</text> + </view> + <view style="width: 40%;border-right: 1upx solid #FFFFFF;text-overflow:ellipsis;overflow:hidden;"> + {{item.order_id}} + </view> + <view style="width: 22%;border-right: 1upx solid #FFFFFF;margin-top: 12upx; "> + {{item.goods_name}} + </view> + <view style="width: 20%;border-right: 1upx solid #FFFFFF;margin-top: 5upx; "> + <text v-if="item.direction == 'income'" + style="color:#5CE6B6;font-size: 26upx;">+{{item.settle_amount > 0 ? item.settle_amount : -item.settle_amount}}</text> + <text v-if="item.direction == 'expense'" style="color:#F67273;font-size: 26upx;"> + {{item.settle_amount < 0 ? item.settle_amount : -item.settle_amount}}</text> + </view> + </view> + + <view style="height: 21upx;line-height: 21upx; flex-direction: row; text-align: center; display: flex; + width: 100%; margin-top: -20upx;"> + <view style="width: 18%;border-right: 1upx solid #FFFFFF; height: 80upx;"></view> + <view style="width: 40%;border-right: 1upx solid #FFFFFF;height: 80upx;">{{item.create_time}}</view> + <view style="width: 22%;border-right: 1upx solid #FFFFFF;height: 80upx;"></view> + <view style="width: 20%;border-right: 1upx solid #FFFFFF;height: 80upx; "> + <text style="font-size: 20upx; color: #F67273; "v-if="item.status.text == '待结算' || item.status.text == '未结算' ">{{item?item.status.text:""}}</text> + <text style="font-size: 20upx; color: #5CE6B6; " v-if="item.status.text == '已结算'">{{item?item.status.text:""}}</text> + </view> + </view> + </view> + </scroll-view> + </view> + <view style="height: 120upx; width: 100%; background: #FFF;"> </view> + </view> + </view> + + <view v-if="partnerSettle != null && (partnerSettle.status.text == '待结算' || partnerSettle.status.text == '未结算' || partnerSettle.status.text == '结算中' )" + @click="toMoney()" style="width: 130upx; height: 60upx; background: green; position: fixed; bottom: 70upx; right: 40upx; color: #fff; font-size: 30upx; + line-height: 60upx; text-align: center;z-index: 9999999;">提现 </view> + + </view> + +</template> + +<script> + import uniIcon from '@/components/uni-icon/uni-icon.vue'; + import uniPopup from '../index/common/uni-popup/uni-popup.vue' + import Enums from '@/util/Enums'; + // 自定义底部 + import foot from '../../components/foot.vue'; + import logoservice from '@/service/logoservice.js'; + import mpvuePicker from '../../components/mpvue-picker/mpvuePickernew.vue'; + export default { + components: { + uniPopup, + uniIcon, + foot, + mpvuePicker, + }, + computed: {}, + data() { + return { + long: false, + LoupanList: [], //数据 + queryPage: { + m: 'Settle/Detail', + id: null, + }, + goodsItem: [], + pickerValueArray: [], + pickerValueDefault: [0, 1], + type: 'bottom', + selectStartTimeText: "", //开始时间 + selectEndTimeText: "", //结束时间 + partnerSettle: null, //结算明细 + }; + }, + mounted() { + + }, + methods: { + + //提现 + toMoney() { + let money = (this.partnerSettle.settle_amount * this.partnerSettle.settle_rate - (this.partnerSettle.withdrawal_rate * this.partnerSettle.settle_amount * this.partnerSettle.settle_rate).toFixed(2)).toFixed(2); + //(this.partnerSettle.settle_amount - (this.partnerSettle.withdrawal_rate * this.partnerSettle.settle_amount * this.partnerSettle.settle_rate).toFixed(2)).toFixed(2) + //(this.partnerSettle.settle_amount - (this.partnerSettle.withdrawal_rate * this.partnerSettle.settle_amount).toFixed(2)).toFixed(2); + uni.navigateTo({ + url: '../mine/money?money=' + money + "&id=" + this.queryPage.id + }); + }, + + onChange(e) { + + }, + + onCancel(e) { + + }, + + loadGoodsList(direction) { + logoservice.MoneystatementList(this.queryPage).then(result => { + this.long = true + this.LoupanList = result.list + this.partnerSettle = result.partnerSettle + + uni.hideLoading(); + }).catch(err => { + uni.hideLoading(); + uni.showToast({ + title: err.msg ? err.msg : err.data, + icon: 'none' + }); + }); + }, + + cancel(type) { + + }, + + change(e) { + + }, + + togglePopup() { + this.$nextTick(() => { + this.$refs['show' + 'share'].open() + }) + }, + + selectMonthdirection(item) { + this.queryPage.direction = item.val; + this.directiontext = item.text; + this.$refs['show' + 'share'].close(); + this.LoupanList = [] + this.loadGoodsList(Enums.DATA_DIRECTION.UP); + }, + + getGoodsAttrList() { + logoservice.MoneystatementList({ + m: 'Money/getGoodsAttrList' + }).then(result => { + this.goodsItem = result; + this.goodsItem.unshift(null) + }).catch(res => { + uni.showToast({ + title: res.msg ? res.msg : '未查到交易类型选择', + icon: 'none' + }); + }); + } + }, + + onLoad(options) { + if (options.id) { + this.queryPage.id = options.id; + } + this.loadGoodsList(); + }, + + onShow() { + + } + + }; +</script> + +<style lang="scss"> + page { + width: 100%; + height: 100%; + background: #FFFFFF; + } + + .butn { + font-size: 30upx; + font-weight: 400; + height: 100upx; + line-height: 100upx; + text-align: center; + width: 100%; + } + + /* 底部分享 */ + .uni-share { + display: flex; + flex-direction: column; + } + + .uni-share-btn { + height: 90upx; + line-height: 90upx; + font-size: 26upx; + text-align: center; + background: #FFFFFF; + } + + .eq_list { + width: 100%; + padding: 0upx 20upx; + background: #FFFFFF; + + .eq_list_div { + border-top: 1upx solid #F5F5F5; + padding: 25upx 0; + + .eq_list_ul { + display: flex; + align-items: center; + line-height: 30upx; + + .eq_list_ul_left { + width: 300upx; + } + + .eq_list_ul_right { + width: calc(100% - 300upx); + text-align: right; + font-weight: 400; + margin-top: 30upx; + } + } + } + + } + + // 返回顶部 + .to-top { + position: fixed; + bottom: 150upx; + right: 30upx; + width: 80upx; + height: 80upx; + border-radius: 50%; + text-align: center; + line-height: 80upx; + // box-shadow: 5upx 5upx 5upx #ebeef5; + transform: rotate(-90deg); + background: #000; + opacity: 0.5; + z-index: 999; + } + + .to-top-icon { + color: #FFFFFF; + } + + .uni-share { + display: flex; + flex-direction: column; + } + + .uni-share-btn { + height: 90rpx; + line-height: 90rpx; + font-size: 14px; + text-align: center; + color: #666; + background: #FFFFFF; + border-top: 1px solid #EEEEEE; + // margin: 20upx 0; + } + + .green { + background-color: #4FB36B !important; + color: #FFFFFF; + } +</style> \ No newline at end of file diff --git a/pages/mine/UserAgreement.vue b/pages/mine/UserAgreement.vue new file mode 100644 index 0000000..1b97f7a --- /dev/null +++ b/pages/mine/UserAgreement.vue @@ -0,0 +1,290 @@ +<template> + <view class="full-width content-color full-height" > + <view class="full-width"> + <div> + + <div> + <div style="text-indent: 32upx; font-weight: 900;">一、总则</div> + <div style="text-indent: 32upx;"> + 1、用户在注册及使用前请认真阅读本协议,确保充分理解本协议中所有条款。除非您接受本协议所有条款,否则您无权注册、登录或使用本协议所涉服务。您的注册、登录、使用等行为将视为无条件接受本协议所有条款的约束。 + </div> + <div style="text-indent: 32upx;"> + 2、除非另有明确规定,本产品所推出的新功能、新服务,均无条件的使用本协议。 + </div> + <div style="text-indent: 32upx;"> + 3、我公司保留在任何时候修改本协议条款的权利,且无需另行通知。在我公司修改协议条款后,如果您不接受修改后的条款,请立即停止使用本产品提供的服务,继续使用本产品提供的服务将被视为接受修改后的协议。 + </div> + </div> + <div style="margin-top: 5upx;"> + <div style="text-indent: 32upx; font-weight: 900;">二、用户注册</div> + <div style="text-indent: 32upx;"> + 1、用户应当同意本协议的全部条款并按照页面提示完成全部注册程序(未成年人应与法定监护人共同完成)。用户在注册过程中点击“下一步”按钮即表示完全接受本协议全部条款。 + </div> + <div style="text-indent: 32upx;"> + 2、用户在使用本服务前需要注册一个本产品账号。本产品账号应当使用手机号码绑定注册,请用户使用尚未与本产品账号绑定且未被本产品根据本协议封禁的手机号码注册账号。本产品可以根据用户需求或产品需求对账号注册和绑定的方式进行更改,而无须事先通知用户。 + </div> + <div style="text-indent: 32upx;"> + 3、用户在使用本产品服务过程中应保证各项服务业务所需信息的真实性,如果因信息不真实而引起的问题,以及问题发生所带来的后果,本公司不负任何责任。 + </div> + <div style="text-indent: 32upx;"> + 4、在用户注册及使用本产品时,要搜集能识别用户身份的个人信息以便系统可以在必要时联系用户,或为用户提供更好的使用体验。系统搜集的信息包括但不限于用户的性别、年龄、出生日期、所在城市;系统同意对这些信息的使用将受限于用户个人隐私信息保护的约束。 + </div> + </div> + <div style="margin-top: 5upx;"> + <div style="text-indent: 32upx; font-weight: 900;">三、服务内容</div> + <div style="text-indent: 32upx;"> + 1、本服务的具体内容由本产品根据实际情况提供,包括但不限于用户使用本产品等。本产品可以对提供的服务予以变更,且本产品提供的服务内容可能随时变更,用户将会收到关于服务变更的通知。 + </div> + <div style="text-indent: 32upx;"> + 2、除非本协议另有其他明示规定,本公司所推出的新产品、新功能、新服务,均受到本协议条款之规范。 + </div> + </div> + <div style="margin-top: 5upx;"> + <div style="text-indent: 32upx; font-weight: 900;">四、服务变更、中断或终止</div> + <div style="text-indent: 32upx;"> + 1、鉴于网络服务的特殊性(包括但不限于服务器的稳定性问题、恶意的网络攻击等行为的存在及其他无法控制的情形),用户同意我公司有权随时中断或终止部分或全部的服务。 + </div> + <div style="text-indent: 32upx;"> + 2、我公司需要定期或不定期地对提供服务的系统或相关设备进行检修或维护,如因此类情况而造成服务在合理时间内的中断,我公司无需为此承担任何责任。 + </div> + <div style="text-indent: 32upx;"> + 3、如发生下列任何一种情形,我公司有权随时变更、中断或终止向用户提供本协议项下的服务而无需对用户或任何第三方承担任何责任: + </div> + <div style="text-indent: 32upx;"> + (1)根据法律规定用户应提交真实信息,而用户提供的个人资料不真实、或与注册时信息不一致又未能提供合理证明; + </div> + <div style="text-indent: 32upx;"> + (2)用户违反相关法律法规或本协议的约定; + </div> + <div style="text-indent: 32upx;"> + (3)按照法律规定或有权机关的要求; + </div> + <div style="text-indent: 32upx;"> + (4)出于安全的原因或其他必要的情形。 + </div> + </div> + <div style="margin-top: 5upx;"> + <div style="text-indent: 32upx; font-weight: 900;">五、用户个人隐私信息保护</div> + <div style="text-indent: 32upx;"> + 1、依据法律的规定,我们将在特定情形下收集、使用和披露您的个人信息。以下条款描述了我们如何收集、使用和披露您的个人信息。 + </div> + <div style="text-indent: 32upx;"> + 2、信息收集 + </div> + <div style="text-indent: 32upx;"> + (1)用户提供 + </div> + <div style="text-indent: 32upx;"> + 我们会对您直接提供的信息进行保存。比如:我们会记录您的注册信息、寻求客服或者其他和我们沟通的记录。记录信息的种类包括:头像、昵称、性别、出生日期、所在地区以及其他您选择提供的信息。我们收集、使用和披露个人信息是为了通过创建账户、识别用户、回应查询和邮件等方式来为您提供服务。 + </div> + <div style="text-indent: 32upx;"> + (2)自动收集 + </div> + <div style="text-indent: 32upx;"> + 当你接触或者使用我们的服务时,我们将自动收集您的信息包括: + Log信息(我们记录所有您使用服务时的log信息,包括浏览器信息、使用时间、浏览的网页、IP地址及来源)。我们使用多种技术记录信息,包括但不限于:向您的移动设备种Cookies。Cookies是一些存在您的硬件上的小数据包,用以帮助我们提高服务的质量及您的使用体验,了解在哪些区域和功能上受欢迎,以及统计流量等。 + </div> + <div style="text-indent: 32upx;"> + 3、信息使用 + </div> + <div style="text-indent: 32upx;"> + (1)除本隐私政策未载明或本隐私政策的更新未能首先通知您的情况下,您的个人信息将不会用于其他目的。 + </div> + <div style="text-indent: 32upx;"> + (2)匿名汇总统计数据不是我公司所定义的个人用户信息,我们将为多种目的,包括但不限于分析和使用模式的报告等,来保存和使用此类信息。我公司保留以任何目的或单方面许可第三方使用和披露匿名汇总统计数据的权利。 + </div> + <div style="text-indent: 32upx;"> + (3)您在本产品中上传的信息,有可能会损坏您或他人的合法权益,您必须充分意识此类风险的存在。您明确同意,自行承担因上传信息所存在的一切风险及后果,我公司无需承担任何责任。 + </div> + <div style="text-indent: 32upx;"> + 4、法定披露 + </div> + <div style="text-indent: 32upx;"> + 虽然我们会尽最大努力保护用户隐私,但当我们有理由相信只有公开个人信息才能遵循现行司法程序、 法院指令或其他法律程序或者保护我公司、我公司用户或第三方的权利、财产或安全时,我们可能披露个人信息。 + </div> + <div style="text-indent: 32upx;"> + 5、信息安全 + </div> + <div style="text-indent: 32upx;"> + 我们会采取合理的实际及电子手段以及规程保障措施来保护您的个人信息。 虽然通过因特网信息传输数据并非100% 安全,但我们已经采取并将继续采取商业范畴内合理的努力来确保您的个人信息得到保护。 + </div> + <div style="text-indent: 32upx;"> + 6、未成年人隐私保护 + </div> + <div style="text-indent: 32upx;"> + 我公司重视对未成年人个人隐私信息的保护。我公司将依赖用户提供的个人信息判断用户是否为未成年人。任何18岁以下的未成年人注册账号或使用本服务应事先取得家长或其法定监护人(以下简称“监护人”)的书面同意。除根据法律法规的规定及有权机关的指示披露外,我公司不会使用向任何第三方透露未成年人的个人隐私信息。 + </div> + </div> + <div style="margin-top: 5upx;"> + <div style="text-indent: 32upx; font-weight: 900;">六、内容规范</div> + <div style="text-indent: 32upx;"> + 1、本项规范所述内容是指用户使用本服务过程中所制作、上载、复制、发布、传播的任何内容,包括但不限于账号头像、名称、个性签名等注册信息及认证资料,或文字、语音、图片、图文等发送、回复消息和相关链接页面,以及其他使用本产品账号或本服务所产生的内容。 + </div> + <div style="text-indent: 32upx;"> + 2、用户承诺使用本产品的服务时必须符合中华人民共和国有关法律法规,不得利用本产品的服务制作、上载、复制、发布、传播以下内容: + </div> + <div style="text-indent: 32upx;"> + (1)反对宪法所确定的基本原则的; + </div> + <div style="text-indent: 32upx;"> + (2)危害国家安全,泄露国家秘密,颠覆国家政权,破坏国家统一的; + </div> + <div style="text-indent: 32upx;"> + (3)损害国家荣誉和利益的; + </div> + <div style="text-indent: 32upx;"> + (4)煽动民族仇恨、民族歧视,破坏民族团结的; + </div> + <div style="text-indent: 32upx;"> + (5)破坏国家宗教政策,宣扬邪教和封建迷信的; + </div> + <div style="text-indent: 32upx;"> + (6)散布谣言,扰乱社会秩序,破坏社会稳定的; + </div> + <div style="text-indent: 32upx;"> + (7)散布淫秽、色情、赌博、暴力、凶杀、恐怖或者教唆犯罪的; + </div> + <div style="text-indent: 32upx;"> + (8)侮辱或者诽谤他人,侵害他人合法权益的; + </div> + <div style="text-indent: 32upx;"> + (9)含有法律、行政法规禁止的其他内容的。 + </div> + <div style="text-indent: 32upx;"> + 3、用户不得利用本产品账号或本服务制作、上载、复制、发布、传播下干扰本产品正常运营,以及侵犯其他用户或第三方合作权益的内容: + </div> + <div style="text-indent: 32upx;"> + (1)含有任何性暗示的; + </div> + <div style="text-indent: 32upx;"> + (2)含有辱骂、恐吓、威胁内容的; + </div> + <div style="text-indent: 32upx;"> + (3)含有骚扰、垃圾广告、恶意信息、诱骗信息的; + </div> + <div style="text-indent: 32upx;"> + (4)涉及他人隐私、个人信息或资料的; + </div> + <div style="text-indent: 32upx;"> + (5)含有其他干扰本服务正常运营和侵犯其他用户或第三方合法权益的。 + </div> + </div> + <div style="margin-top: 5upx;"> + <div style="text-indent: 32upx; font-weight: 900;">七、使用规则</div> + <div style="text-indent: 32upx;"> + 1、用户在本服务中或通过本服务所传送、发布的任何内容并不反映或代表,也不得被视为反映或代表我公司的观点、立场或政策,我公司对此不承担任何责任。 + </div> + <div style="text-indent: 32upx;"> + 2、用户在使用本产品时,必须遵守中华人民共和国相关法律法规的规定,同意将不会利用本产品进行任何违法或不正当的活动,包括但不限于下列行为: + </div> + <div style="text-indent: 32upx;"> + (1)干扰或破坏有关服务,或与有关服务连接的任何服务器或网络,或与有关服务相关的任何政策、要求或规定; + </div> + <div style="text-indent: 32upx;"> + (2)采集并存储涉及任何其他用户的个人信息,以用于任何被禁止的活动; + </div> + <div style="text-indent: 32upx;"> + (3)故意或非故意违反任何相关的中国法律、法规、规章、条例等其他具有法律效力的规范。 + </div> + <div style="text-indent: 32upx;"> + 3、用户须对利用本产品账号或本服务传送信息的真实性、合法性、无害性、准确性、有效性等全权负责,与用户所传播信息相关的任何法律责任由用户自行承担,与我公司无关。如因此给我公司或第三方造成损害的,用户应当依法予以赔偿。 + </div> + <div style="text-indent: 32upx;"> + 4、本产品提供的服务中可能包括广告,用户同意在使用过程中显示本产品和第三方供应商、合作伙伴提供的广告。除法律法规明确规定外,用户应自行对该广告信息进行的交易负责,对用户因该广告信息进行的交易或前述广告商提供的内容或遭受的损失或损害,我公司不承担任何责任。 + </div> + <div style="text-indent: 32upx;"> + 5、用户为使用本产品,须自行配备进入国际互联网所必需的设备,包括电脑、手机及其他与接入国际互联网有关的装置,并自行支付与此服务有关的费用。 + </div> + </div> + <div style="margin-top: 5upx;"> + <div style="text-indent: 32upx; font-weight: 900;">八、免责声明</div> + <div style="text-indent: 32upx;"> + 1、对于经由本产品服务而传送的内容,我公司不保证前述内容的正确性、完整性或品质。用户在接受有关服务时,有可能会接触到令人不快、不适当或令人厌恶的内容。在任何情况下,我公司均不对任何内容负责,包括但不限于任何内容发生任何错误或纰漏以及衍生的任何损失或损害。用户使用上述内容,应自行承担风险。 + </div> + <div style="text-indent: 32upx;"> + 2、用户明确同意其使用本产品所存在的风险及其后果将完全由其自己承担,我公司对用户不承担任何责任。如因用户违反有关法律、法规或本协议项下的任何条款而给任何其他第三人造成损失,用户同意承担由此造成的损害赔偿责任。 + </div> + <div style="text-indent: 32upx;"> + 3、我公司尊重并保护用户的个人隐私权。但因恶意的网络攻击等行为及其他无法控制的情形,导致用户隐私信息泄露的,用户同意我公司不承担任何责任。 + </div> + <div style="text-indent: 32upx;"> + 4、对于因电信系统或互联网网络故障、计算机故障、计算机系统问题或其它任何不可抗力原因而产生损失,我公司不承担任何责任,但将尽力减少因此给用户造成的损失和影响。 + </div> + </div> + <div style="margin-top: 5upx;"> + <div style="text-indent: 32upx; font-weight: 900;">九、知识产权声明</div> + <div style="text-indent: 32upx;"> + 1、本产品服务中包含的任何文字、图表、音频、视频和软件(包括但不限于软件中包含的图表、动画、音频、视频、界面实际、数据和程序、代码、文档)等信息或材料均受著作权法、商标法和其它法律法规保护,未经相关权利人书面同意,用户不得以任何方式使用该信息或材料。 + </div> + <div style="text-indent: 32upx;"> + 2、本协议未授予用户使用本产品任何商标、服务标记、标识、域名和其他显著品牌特征的权利,任何人不得擅自(包括但不限于:以非法的方式复制、传播、展示、镜像、上载、下载)使用,否则我公司将依法追究法律责任。 + </div> + <div style="text-indent: 32upx;"> + 3、除本协议明确允许以外,用户不得以任何形式或任何方式对本产品部分或全部内容进行修改、出租、租赁、出借、出售、分发、复制、创作衍生品或用于任何商业用途。 + </div> + </div> + <div style="margin-top: 5upx;"> + <div style="text-indent: 32upx; font-weight: 900;">十、法律适用</div> + <div style="text-indent: 32upx;"> + 1、本协议的订立、执行和解释及争议的解决均应适用中国法律并受中国法院管辖。如服务条款任何一部分与中华人民共和国法律相抵触,则该部分条款应按法律规定重新解释,部分条款无效或重新解释不影响其余条款法律效力。 + </div> + <div style="text-indent: 32upx;"> + 2、用户和我公司一致同意本协议。在执行本协议过程中如发生纠纷,双方应友好协商解决;协商不成时,任何一方可直接向所在地的人民法院提起诉讼。 + </div> + </div> + <div style="margin-top: 5upx;"> + <div style="text-indent: 32upx; font-weight: 900;">十一、其他规定</div> + <div style="text-indent: 32upx;"> + 1、本协议中的标题仅为方便而设,在解释本协议时应被忽略。 + </div> + <div style="text-indent: 32upx;"> + 2、本协议及其修改权、最终解释权归我公司所有。 + </div> + </div> + </div> + </view> + </view> +</template> + +<script> + + export default { + components: { + + }, + computed: {}, + data() { + return { + + }; + }, + mounted() { + + }, + methods: { + onChange(e) { + + }, + onCancel(e) { + + }, + change(){ + + }, + }, + onLoad(options) { + + }, + onShow() { + + } + }; +</script> + +<style lang="scss"> + page { + width: 100%; + height: 100%; + background: #FFFFFF; + } +</style> \ No newline at end of file diff --git a/pages/mine/Withdrawal-details.vue b/pages/mine/Withdrawal-details.vue new file mode 100644 index 0000000..d12df37 --- /dev/null +++ b/pages/mine/Withdrawal-details.vue @@ -0,0 +1,171 @@ +<template> + <view class="full-width content-color full-height" style="position: relative;"> + <view class="full-width"> + <view class="full-width" v-if="long" style="margin:auto 100upx;"> + <view style="text-align: center; font-weight: bold; padding: 100upx 0; margin-left: -150upx;"> + <view style="font-size:80upx;font-weight:bold;">{{LoupanList.withdrawal_amount || ''}}</view> + <view style="font-size:26upx;font-weight:400;">提现金额(¥)</view> + </view> + <view style="display: flex; justify-content: center;"> + <view style="width: 100upx;"> + <view style="width: 100upx;"> + <view style="width:32upx; height:32upx; margin: auto; background:#5CE6B5; border-radius:50%;"></view> + </view> + <view style="width:1px; height:80upx; margin: auto; background:#5CE6B5;"></view> + <view v-if="LoupanList.processing_status.value != 1" + style="width:32upx; height:32upx; margin: auto; background:#B2B2B2; border-radius:50%;"></view> + <view v-if="LoupanList.processing_status.value == 1" style="width:32upx; height:32upx; margin: auto;"> + <span class="iconfont icon-duihao2" style="color: #5CE6B5; font-size: 32upx;"></span> + </view> + </view> + <view style="width: calc(100% - 100upx);"> + <view> + <span>发起提现</span> + <span style="color: #B2B2B2; padding-left: 20upx;">{{LoupanList.create_time || ''}}</span> + </view> + <view style="margin-top: 70upx;"> + <span v-if="LoupanList.processing_status.value == 0" style="color:#B2B2B2;">提现到帐</span> + <span v-if="LoupanList.processing_status.value == 1" style="color:#5CE6B5;">提现到帐</span> + <span v-if="LoupanList.processing_status.value == 2" style="color:#B2B2B2;">拒绝提现</span> + <span style="color: #B2B2B2; padding-left: 20upx;">{{LoupanList.processing_time || ''}}</span> + </view> + </view> + </view> + <view style="padding-top: 20upx;"> + <view class="eq_list"> + <view class="full-width eq_list_ul"> + <text class="eq_list_ul_left">到账金额:</text> + <text class="eq_list_ul_right">¥{{LoupanList.amounts_payable || ''}}</text> + </view> + <view class="full-width eq_list_ul"> + <text class="eq_list_ul_left">服务费:</text> + <text class="eq_list_ul_right">¥{{LoupanList.handling_fee || ''}}</text> + </view> + <view class="full-width eq_list_ul"> + <text class="eq_list_ul_left">银行:</text> + <text class="eq_list_ul_right">{{LoupanList.bank_info || ''}}</text> + </view> + <view class="full-width eq_list_ul"> + <text class="eq_list_ul_left">持卡人:</text> + <text class="eq_list_ul_right">{{LoupanList.payee_name || ''}}</text> + </view> + <view class="full-width eq_list_ul"> + <text class="eq_list_ul_left">卡号:</text> + <text class="eq_list_ul_right">{{LoupanList.payee_account_num.replace(/\s/g, '').replace(/[^\d]/g, '').replace(/(\d{4})(?=\d)/g, '$1 ') || ''}}</text> + </view> + <view style="width: 100%; height: 1upx; background: #F5F5F5; margin: 10upx 0;"></view> + <view class="full-width eq_list_ul"> + <text class="eq_list_ul_left">申请时间:</text> + <text class="eq_list_ul_right"> {{LoupanList.create_time || ''}} </text> + </view> + <view class="full-width eq_list_ul" v-if="LoupanList.processing_status.value == 1"> + <text class="eq_list_ul_left">到账时间:</text> + <text class="eq_list_ul_right"> {{LoupanList.processing_time || ''}} </text> + </view> + <view class="full-width eq_list_ul" > + <text class="eq_list_ul_left">提现单号:</text> + <text class="eq_list_ul_right">{{LoupanList.id || ''}}</text> + </view> + <view style="width: 100%; height: 1upx; background: #F5F5F5; margin: 10upx 0;"></view> + <view class="full-width eq_list_ul" v-if="LoupanList.processing_info"> + <text class="eq_list_ul_left">处理信息:</text> + <text class="eq_list_ul_right">{{LoupanList.processing_info || ''}}</text> + </view> + </view> + </view> + </view> + </view> + </view> +</template> + +<script> + import uniIcon from '@/components/uni-icon/uni-icon.vue'; + import logoservice from '@/service/logoservice.js'; + export default { + components: { + uniIcon + }, + computed: {}, + data() { + return { + long:false, + LoupanList: null, //数据 + queryPage: { + m:'Withdrawal/detail', + id:null + }, + }; + }, + methods: { + // 加载数据 + loadGoodsList(direction) { + uni.showLoading({title: '正在加载中...'}) + logoservice.Withdrawaldetail(this.queryPage).then(result => { + this.long = true + this.LoupanList = result + uni.hideLoading(); + }).catch(err => { + uni.hideLoading(); + uni.showToast({ title: err.msg, icon: 'none' }); + }); + } + }, + // 下拉加载 + onPullDownRefresh() { + this.loadGoodsList(); + }, + // 上拉加载 + onReachBottom() { + this.loadGoodsList(); + }, + onLoad(options) { + console.log(options) + this.queryPage.id = options.id + uni.login({ + provider: 'weixin', + success: (res) => { + logoservice.login({ m:'Init/init',code:res.code}).then(result => { + logoservice.setwixinInfo(result); + this.loadGoodsList(); + }).catch(err => { + uni.navigateTo({url: 'login',}); + }) + }, + fail: (err) => { + console.error('授权登录失败:' + JSON.stringify(err)); + } + }); + }, + onShow() { + + } + }; +</script> + +<style lang="scss"> + page { + width: 100%; + height: 100%; + background: #FFFFFF; + } + .eq_list{ + width: 90%; + margin:0 auto 20upx; + padding: 10upx 20upx; + border-radius:10upx; + background: #FFFFFF; + .eq_list_ul{ + display: flex; + align-items: center; + line-height: 55upx; + font-size: 28upx; + .eq_list_ul_left{ + width: 150upx; + color: #B2B2B2; + } + .eq_list_ul_right{ + width: calc(100% - 150upx); + } + } + } +</style> diff --git a/pages/mine/Withdrawal.vue b/pages/mine/Withdrawal.vue new file mode 100644 index 0000000..0e0c37a --- /dev/null +++ b/pages/mine/Withdrawal.vue @@ -0,0 +1,248 @@ +<template> + <view class="full-width content-color full-height" style="position: relative;"> + <view class="full-width"> + <!-- 动态数据 --> + <view scroll-y @scrolltolower="loadMore()" class="full-width" @touchend="touchEnd" v-if="long" > + <view v-for="(item, index) in LoupanList" :key="index" class="eq_list" @click="Withdrawal(item)"> + <view class="eq_list_div"> + <view class="full-width eq_list_ul"> + <text class="eq_list_ul_left" style="font-size: 30upx;">余额提现-{{item.bank_info}}</text> + <text class="eq_list_ul_right" style="font-size: 30upx;">¥{{item.withdrawal_amount}}</text> + </view> + <view class="full-width eq_list_ul"> + <text class="eq_list_ul_left" style="font-size: 24upx; color: #B2B2B2; width: 80%;">申请时间:{{item.create_time}}</text> + <text class="eq_list_ul_right" v-if="item.processing_status.value == 0" style="font-size: 24upx; color: #F56364; width: 20%; ">待处理</text> + <text class="eq_list_ul_right" v-if="item.processing_status.value == 1" style="font-size: 24upx; color: #5CE6B5; width: 20%;" >已支付</text> + <text class="eq_list_ul_right" v-if="item.processing_status.value == 2" style="font-size: 24upx; color: #B2B2B2; width: 20%;" >拒绝</text> + </view> + </view> + </view> + <!-- 暂无相关信息 --> + <view class="align-center content-color" style="position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%);" + v-if="LoupanList.length == 0 || LoupanList.length == null"> + <span class="iconfont icon-wushuju" style="font-size: 100upx; text-align: center; color: #B2B2B2;"></span> + <view style="color: #B2B2B2; text-align: center; line-height: 50upx;font-size: 24upx;">暂无相关信息</view> + </view> + </view> + <!-- 动态数据完 --> + </view> + <!-- 返回顶部 --> + <view v-if="totopstatus" class="to-top content-color" @click="totop()"> + <view class="fa fa-angle-right to-top-icon"></view> + </view> + </view> +</template> + +<script> + import uniIcon from '@/components/uni-icon/uni-icon.vue'; + import Enums from '@/util/Enums'; + // 自定义底部 + import foot from '../../components/foot.vue'; + import logoservice from '@/service/logoservice.js'; + export default { + components: { + uniIcon, + foot, + }, + computed: {}, + data() { + return { + long:false, + LoupanList: [], //数据 + // 返回顶部 + totopstatus: false, + // 上拉状态 + dataLoadState: { + pullDownRefresh: false, + reachBottom: false + }, + queryPage: { + m:'Withdrawal/list', + page: 1, + per_page: 12, + count:0 + }, + }; + }, + methods: { + Withdrawal(item){ + uni.navigateTo({ + url: '/pages/mine/Withdrawal-details?id=' + item.id, + }); + }, + // 加载数据 + loadGoodsList(direction) { + if (this.dataLoadState.pullDownRefresh || this.dataLoadState.reachBottom) return; + uni.showLoading({title: '正在加载中...'}) + this.dataLoadState.pullDownRefresh = direction === Enums.DATA_DIRECTION.UP; + this.dataLoadState.reachBottom = direction === Enums.DATA_DIRECTION.DOWN; + if (this.dataLoadState.reachBottom) { + if (Math.ceil(this.queryPage.count / this.queryPage.per_page) < this.queryPage.page) { + return setTimeout(() => { + uni.showToast({title: '没有更多数据了!', icon: 'none'}); + }, 500); + } + } + logoservice.Withdrawallist(this.queryPage).then(result => { + // console.log(result.data) + this.long = true + let queryList = result.data + // 下拉更新时,查询结果集 + // 触底更新时,当前列表+查询结果集 + let newList = this.LoupanList.concat(queryList) + this.LoupanList = newList + // console.log(this.LoupanList) + // 分页对象处理 + this.queryPage.count = result.count; + this.queryPage.per_page = result.per_page; + // 停止当前页面下拉刷新 + if (this.dataLoadState.pullDownRefresh) uni.stopPullDownRefresh(); + // 数据加载状态处理 false + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + uni.hideLoading(); + // uni.showToast({ title: '加载成功', icon: 'none' }); + }).catch(err => { + // 停止当前页面下拉刷新 + if (this.dataLoadState.pullDownRefresh) uni.stopPullDownRefresh(); + // 数据加载状态处理 false + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + uni.hideLoading(); + }); + }, + // 返回顶部 + totop() { + uni.pageScrollTo({ + scrollTop: 0, + duration: 300 + }); + this.totopstatus = false + }, + touchEnd(e) { + if (e.mp.changedTouches[0].pageY > 1000) { + this.totopstatus = true + } else { + this.totopstatus = false + } + }, + // 做滚动加载使用 + loadMore() { + if (Math.ceil(this.queryPage.count / this.queryPage.per_page) < this.queryPage.page) { + return setTimeout(() => { + uni.showToast({title: '没有更多数据了!', icon: 'none'}); + }, 500); + } + this.queryPage.page = this.queryPage.page + 1; + this.loadGoodsList(Enums.DATA_DIRECTION.DOWN); + }, + }, + // 下拉加载 + onPullDownRefresh() { + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + this.queryPage.page = 1; + this.queryPage.count = 0; + this.LoupanList = [] + this.loadGoodsList(Enums.DATA_DIRECTION.UP); + }, + // 上拉加载 + onReachBottom() { + console.log('上拉加载') + if (this.LoupanList.length < 12) { + return setTimeout(() => { + uni.showToast({title: '没有更多数据了!', icon: 'none'}); + }, 500); + } + this.queryPage.page = this.queryPage.page + 1; + this.loadGoodsList(Enums.DATA_DIRECTION.DOWN); + }, + onLoad(options) { + uni.login({ + provider: 'weixin', + success: (res) => { + logoservice.login({ m:'Init/init',code:res.code}).then(result => { + logoservice.setwixinInfo(result); + this.LoupanList = [] + this.queryPage.page = 1; + this.queryPage.count = 0; + this.loadGoodsList(Enums.DATA_DIRECTION.UP); + }).catch(err => { + uni.navigateTo({url: 'login',}); + }) + }, + fail: (err) => { + console.error('授权登录失败:' + JSON.stringify(err)); + } + }); + }, + onShow() { + + } + }; +</script> + +<style lang="scss"> + .uni-collapse-cell__title{ + border: 0 !important; + } + .uni-collapse:after{ + height: 0 !important; + } + .uni-collapse:before{ + height: 0 !important; + } + .uni-collapse-cell:after{ + height: 0 !important; + } + .uni-collapse-cell--open{ + background: #fff !important; + } + page { + width: 100%; + height: 100%; + background: #FFFFFF; + } + .eq_list{ + width: 94%; + margin:20upx auto; + border-radius:10upx; + background: #FFFFFF; + overflow: hidden; + .eq_list_div{ + margin: 0 20upx; + padding: 20upx 10upx; + .eq_list_ul{ + display: flex; + align-items: center; + line-height: 50upx; + .eq_list_ul_left{ + width: 50%; + } + .eq_list_ul_right{ + width: 50%; + text-align: right; + } + } + } + } + // 返回顶部 + .to-top { + position: fixed; + bottom: 150upx; + right: 30upx; + width: 80upx; + height: 80upx; + border-radius: 50%; + text-align: center; + line-height: 80upx; + // box-shadow: 5upx 5upx 5upx #ebeef5; + transform: rotate(-90deg); + background: #000; + opacity: 0.5; + z-index: 999; + } + .to-top-icon { + color: #FFFFFF; + } +</style> diff --git a/pages/mine/balance.vue b/pages/mine/balance.vue new file mode 100644 index 0000000..f8ee28a --- /dev/null +++ b/pages/mine/balance.vue @@ -0,0 +1,97 @@ +<template> + <view class="edit-address full-height full-width"> + <view class="form bg-white-color full-width" > + <view class="item full-width" @click="eqprofit(2)"> + <label class="text content-color" style="font-weight: bold;">可用余额</label> + <label class="value content-color"> + <input style="font-weight: bold;" type="text" disabled="disabled" v-model="userInfo.base_amount" class="full-width"/> + <label class="fa fa-angle-right align-right sub-color"></label> + </label> + </view> + + </view> + </view> +</template> + +<script> + import logoservice from '@/service/logoservice.js'; + export default { + components: { + + }, + computed: { + + }, + data() { + return { + userInfo: { + + }, + } + }, + methods: { + // 相加 + add(arg1, arg2) { + return (Math.round(arg1 * 100) + Math.round(arg2 * 100)) / 100; + }, + // 相乘 + multiple(arg1, arg2) { + return (Math.round(arg1 * 100) * Math.round(arg2 * 100)) / 10000; + }, + eqprofit(id){ + uni.navigateTo({ + url: '/pages/mall/eq-profit?id=' + id + }); + }, + }, + onLoad(options) { + + }, + onShow() { + logoservice.Moneyinfo({ m:'Money/info'}).then(result => { + uni.hideLoading(); + console.log(result) + this.userInfo = result + }).catch(err => { + uni.hideLoading(); + uni.showToast({ title: err.msg, icon: 'none' }); + }) + } + } +</script> + +<style lang="scss"> + page{ + background: #F5F5F5; + } + input{ + text-align: right; + } + .edit-address { + .form { + .item { + height: 90upx; + display: flex; + align-items: center; + border-top: 10upx solid #F5F5F5; + font-size: 28upx; + .text { + width: 150upx; + padding-left: 20upx; + } + .value { + width: calc(100% - 180upx); + display: flex; + align-items: center; + .prick { + width: calc(100% - 40upx); + } + .fa-angle-right { + width: 40upx; + font-size: 50upx; + } + } + } + } + } +</style> diff --git a/pages/mine/bank.vue b/pages/mine/bank.vue new file mode 100644 index 0000000..c650ca4 --- /dev/null +++ b/pages/mine/bank.vue @@ -0,0 +1,184 @@ +<template> + <view class="edit-address full-height full-width"> + <view class="form bg-white-color full-width"> + <view class="item full-width"> + <label class="text content-color">银行</label> + <label class="value content-color"> + <input type="text" v-model="list.bank_name" class="full-width" placeholder="请输入银行名称"/> + <label class="fa fa-angle-right align-right sub-color" ></label> + </label> + </view> + <view class="item full-width" > + <label class="text content-color">持卡人</label> + <label class="value content-color"> + <input type="text" v-model="list.account_name" class="full-width" placeholder="请输入收款人户名" /> + <!-- @blur="onSearch" @focus="focus" @input='changeSearch' --> + <label class="fa fa-angle-right align-right sub-color" ></label> + </label> + </view> + <view class="item full-width" > + <label class="text content-color">卡号</label> + <label class="value content-color"> + <input type="text" v-model="list.account_sn" @input="doInput" @blur="inputBlur" class="full-width" placeholder="请输入收款人账号"/> + <label class="fa fa-angle-right align-right sub-color" ></label> + </label> + </view> + </view> + <view class="footer" style="bottom: 100upx;"> + <view class="footer_but" @click="onSave()">保存</view> + </view> + + <view class="footer" style="display: flex; + flex-direction: row; + color: #333; + font-size: 32upx; + bottom: 20upx; + justify-content: center;" > + <checkbox checked="checked"> </checkbox> + 我已经阅读同意 <view style="color:rgba(92, 230, 182, 1);" @click="toUserAgreement()"> 用户协议 </view> + 和 + <view style="color:rgba(92, 230, 182, 1);"@click="toPrivacyPolicy()">隐私协议 </view> + </view> + + </view> +</template> + +<script> + import logoservice from '@/service/logoservice.js'; + export default { + components: { + }, + computed: { + + }, + data() { + return { + list: { + m:'Money/saveInfo', + bank_name:null, + account_name:null, + account_sn:null + }, + loading: false, + } + }, + methods: { + + + //用户协议 + toUserAgreement(){ + uni.navigateTo({url: '../mine/UserAgreement'}); + }, + + //隐私政策 + toPrivacyPolicy(){ + uni.navigateTo({url: '../mine/PrivacyPolicy'}); + }, + + + onSave () { + if (this.loading) return; + if (!this.list.bank_name) { + uni.showToast({ title: '银行名称不能为空!', icon: 'none' }); + return false; + } + if (!this.list.account_name) { + uni.showToast({ title: '银行账户名不能为空!', icon: 'none' }); + return false; + } + if (!this.list.account_sn) { + uni.showToast({ title: '银行账号不能为空!', icon: 'none' }); + return false; + } + this.loading = true; + uni.showLoading({ title: '正在保存中...' }); + const data = { + m:'Money/saveInfo', + bank_name:this.list.bank_name, + account_name:this.list.account_name, + account_sn:this.list.account_sn.replace(/\s*/g,"") + } + logoservice.MoneysaveInfo(data).then(reuslt => { + this.loading = false; + uni.navigateBack(); + uni.hideLoading(); + }).catch(err => { + this.loading = false; + uni.showToast({ title: err.msg, icon: 'none' }); + }) + }, + doInput(e) { + this.list.account_sn = e.detail.value.replace(/\s/g, '').replace(/[^\d]/g, '').replace(/(\d{4})(?=\d)/g, '$1 '); + }, + inputBlur(e){ + console.log(e); + } + }, + onLoad(options) { + + }, + onShow() { + logoservice.Moneyinfo({ m:'Money/info'}).then(result => { + uni.hideLoading(); + console.log(result) + this.list = result + this.list.account_sn = this.list.account_sn.replace(/\s/g, '').replace(/[^\d]/g, '').replace(/(\d{4})(?=\d)/g, '$1 ') + }).catch(err => { + uni.hideLoading(); + uni.showToast({ title: err.msg, icon: 'none' }); + }) + } + } +</script> + +<style lang="scss"> + page{ + background: #F5F5F5; + } + input{ + text-align: right; + } + .edit-address { + .form { + .item { + height: 90upx; + display: flex; + align-items: center; + border-top: 10upx solid #F5F5F5; + font-size: 28upx; + padding: 0 27upx 0 32upx; + width: calc(100% - 60upx); + .text { + width: 200upx; + } + .value { + width: calc(100% - 200upx); + display: flex; + align-items: center; + .prick { + width: calc(100% - 40upx); + } + .fa-angle-right { + width: 40upx; + font-size: 50upx; + } + } + } + } + .footer { + position: fixed; + bottom: 20upx; + width: 100%; + .footer_but { + width: calc(100% - 60upx); + margin: 0upx auto 0; + color: #fff; + height: 88upx; + text-align: center; + line-height: 88upx; + background: rgba(92, 230, 182, 1); + border-radius: 10upx; + } + } + } +</style> diff --git a/pages/mine/bill-details.vue b/pages/mine/bill-details.vue new file mode 100644 index 0000000..ff293d0 --- /dev/null +++ b/pages/mine/bill-details.vue @@ -0,0 +1,217 @@ +<template> + <view class="full-width content-color full-height" style="position: relative;"> + <view class="full-width"> + <view class="full-width" v-if="long"> + <view style="text-align: center; font-weight: bold; padding: 100upx 0;"> + <view style="font-size:80upx;font-weight:bold;">{{LoupanList.settle_amount || ''}}</view> + <view style="font-size:26upx;font-weight:400;">账单金额(¥)</view> + </view> + <view style="display: flex; justify-content: center;"> + <view style="width: 100upx;"> + <view style="width: 100upx;"> + <view style="width:32upx; height:32upx; margin: auto; background:#5CE6B5; border-radius:50%;"></view> + </view> + <view style="width:1px; height:80upx; margin: auto; background:#5CE6B5;"></view> + <view v-if="LoupanList.status.value == 0"> + <view style="width:32upx; height:32upx; margin: auto; background:#B2B2B2; border-radius:50%;"></view> + <view style="width:1px; height:80upx; margin: auto; background:#B2B2B2;"></view> + </view> + <view v-if="LoupanList.status.value == 1 || LoupanList.status.value == 2"> + <view style="width:32upx; height:32upx; margin: auto; background:#5CE6B5; border-radius:50%;"></view> + <view style="width:1px; height:80upx; margin: auto; background:#5CE6B5;"></view> + </view> + <view v-if="LoupanList.status.value != 2" style="width:32upx; height:32upx; margin: auto; background:#B2B2B2; border-radius:50%;"></view> + <view v-if="LoupanList.status.value == 2" style="width:32upx; height:32upx; margin: auto;"> + <span class="iconfont icon-duihao2" style="color: #5CE6B5; font-size: 32upx;"></span> + </view> + </view> + <view style="width: calc(100% - 100upx);"> + <view> + <span>待确认</span> + <span style="color: #B2B2B2; padding-left: 20upx;">{{LoupanList.create_time || ''}}</span> + </view> + <view style="margin-top: 70upx;"> + <span v-if="LoupanList.status.value == 0" style="color: #B2B2B2;">已确认</span> + <span v-if="LoupanList.status.value == 1 || LoupanList.status.value == 2" >已确认</span> + <span v-if="LoupanList.status.value == 1 || LoupanList.status.value == 2" style="color: #B2B2B2; padding-left: 20upx;">{{LoupanList.confirm_time|| ''}}</span> + </view> + <view style="margin-top: 70upx;"> + <span v-if="LoupanList.status.value != 2" style="color: #B2B2B2;">已完成</span> + <span v-if="LoupanList.status.value == 2" style="color: #5CE6B5;">已完成</span> + <span v-if="LoupanList.status.value == 2" style="color: #B2B2B2; padding-left: 20upx;">{{LoupanList.finish_time || ''}}</span> + </view> + </view> + </view> + <view style="padding-top: 20upx;"> + + <view class="eq_list"> + <view class="full-width eq_list_ul"> + <text class="eq_list_ul_left">结算账单:</text> + <text class="eq_list_ul_right">{{LoupanList.title}}</text> + </view> + <view class="full-width eq_list_ul"> + <text class="eq_list_ul_left">结算明细:</text> + <text class="eq_list_ul_right">{{LoupanList.statement_number || ''}}笔</text> + </view> + <view class="full-width eq_list_ul"> + <text class="eq_list_ul_left">订单总额:</text> + <text class="eq_list_ul_right">¥{{LoupanList.order_amount}}</text> + </view> + <view style="width: 100%; height: 1upx; background: #F5F5F5; margin: 10upx 0;"></view> + <view class="full-width eq_list_ul"> + <text class="eq_list_ul_left">创建时间:</text> + <text class="eq_list_ul_right">{{LoupanList.create_time || ''}}</text> + </view> + <view class="full-width eq_list_ul" v-if="LoupanList.status.value == 1 || LoupanList.status.value == 2" > + <text class="eq_list_ul_left">确认时间:</text> + <text class="eq_list_ul_right">{{LoupanList.confirm_time || ''}}</text> + </view> + <view class="full-width eq_list_ul" v-if="LoupanList.status.value == 2"> + <text class="eq_list_ul_left">完成时间:</text> + <text class="eq_list_ul_right">{{LoupanList.finish_time || ''}}</text> + </view> + <view style="width: 100%; height: 1upx; background: #F5F5F5; margin: 10upx 0;"></view> + <view class="full-width eq_list_ul" @click="phone(LoupanList.admin_name[0].phone)"> + <text class="eq_list_ul_left">联系服务商:</text> + <text class="eq_list_ul_right">{{LoupanList.admin_name[0].phone || ''}}</text> + </view> + <view style="color: #5CE6B6;" @click="profit()">与此账单关联的收益></view> + </view> + </view> + <view style="position: fixed; bottom: 20upx; width: 100%;" v-if="LoupanList.status.value == 0"> + <view style="width:80%; margin: 0upx auto 0; color: #fff; height:88upx; text-align: center; line-height: 88upx; background:rgba(92,230,182,1); border-radius:10upx;" @click="loginBtnone">确认</view> + <view style="text-align: center; line-height: 80upx;" @click="doubt">对账单有疑惑?</view> + </view> + </view> + </view> + </view> +</template> + +<script> + import uniIcon from '@/components/uni-icon/uni-icon.vue'; + import logoservice from '@/service/logoservice.js'; + export default { + components: { + uniIcon + }, + computed: {}, + data() { + return { + long:false, + LoupanList: null, //数据 + queryPage: { + m:'Money/billDetail', + id:null + }, + }; + }, + methods: { + phone(item){ + uni.makePhoneCall({ phoneNumber: item}); + }, + profit(){ + uni.navigateTo({ + url: '../mall/eq-profit?billingid=' + this.LoupanList.id + '&title=' + this.LoupanList.title, + }); + }, + doubt(item){ + uni.navigateTo({ + url: '/pages/mine/bill-doubt?id=' + this.LoupanList.id + '&remark=' + this.LoupanList.remark, + }); + }, + loginBtnone(){ + let stat = this; + uni.showModal({ + title:'提示', + content: '确认了,没有疑惑了?', + success:function(res){ + if(res.confirm){ + uni.showLoading({title: '正在提交中...'}) + logoservice.MoneyconfirmBill({ + m:'Money/confirmBill', + id:stat.queryPage.id + }).then(result => { + stat.loadGoodsList(); + uni.hideLoading(); + }).catch(err => { + uni.hideLoading(); + uni.showToast({ title: err.msg, icon: 'none' }); + }); + } else if(res.cancel) { + } + }, + }); + }, + // 加载数据 + loadGoodsList() { + uni.showLoading({title: '正在加载中...'}) + logoservice.MoneybillDetail(this.queryPage).then(result => { + this.long = true + this.LoupanList = result + uni.hideLoading(); + }).catch(err => { + uni.hideLoading(); + uni.showToast({ title: err.msg, icon: 'none' }); + }); + } + }, + // 下拉加载 + onPullDownRefresh() { + this.loadGoodsList(); + }, + // 上拉加载 + onReachBottom() { + this.loadGoodsList(); + }, + onLoad(options) { + console.log(options) + this.queryPage.id = options.id + uni.login({ + provider: 'weixin', + success: (res) => { + logoservice.login({ m:'Init/init',code:res.code}).then(result => { + logoservice.setwixinInfo(result); + this.loadGoodsList(); + }).catch(err => { + uni.navigateTo({url: 'login',}); + }) + }, + fail: (err) => { + console.error('授权登录失败:' + JSON.stringify(err)); + } + }); + }, + onShow() { + this.loadGoodsList(); + } + }; +</script> + +<style lang="scss"> + page { + width: 100%; + height: 100%; + background: #FFFFFF; + } + .eq_list{ + width: 90%; + margin:0 auto 20upx; + padding: 10upx 20upx; + border-radius:10upx; + background: #FFFFFF; + .eq_list_ul{ + display: flex; + align-items: center; + line-height: 55upx; + font-size: 28upx; + .eq_list_ul_left{ + // width: 180upx; + color: #818181; + } + .eq_list_ul_right{ + // width: calc(100% - 180upx); + // text-align: right; + } + } + } +</style> diff --git a/pages/mine/bill-doubt.vue b/pages/mine/bill-doubt.vue new file mode 100644 index 0000000..b0ab3fe --- /dev/null +++ b/pages/mine/bill-doubt.vue @@ -0,0 +1,68 @@ +<template> + <view class="page"> + <view class="uni-textarea"> + <textarea maxlength="10000" placeholder="请输入您的疑问" v-model="queryPage.remark" style="height: 400upx;"/> + </view> + <view style="width:calc(100% - 80upx); margin: 80upx auto 0; color: #fff; + height:88upx; text-align: center; line-height: 88upx; + background:rgba(92,230,182,1); + border-radius:10upx;" @click="loginBtnone()">确认</view> + </view> +</template> + +<script> + import logoservice from '@/service/logoservice.js'; + export default { + components: { + + }, + data() { + return { + queryPage:{ + m:'Money/billRemark', + id:null, + remark:null, + } + } + }, + methods: { + loginBtnone(){ + uni.showLoading({title: '正在提交中...'}) + logoservice.MoneybillRemark(this.queryPage).then(result => { + uni.showToast({title: '提交成功'}) + uni.navigateBack(); + uni.hideLoading(); + }).catch(err => { + uni.hideLoading(); + uni.showToast({ title: err.msg, icon: 'none' }); + }); + }, + }, + onLoad(options) { + this.queryPage.id = options.id + this.queryPage.remark = options.remark + }, + onShow() { + + } + + } +</script> + +<style lang="scss"> + .page { + width: 100%; + height: 100%; + background-color: #F5F5F5; + padding-top: 50upx; + } + .uni-textarea { + line-height: 1.6; + height: 400upx; + background: #fff; + margin: 0 40upx; + width: calc(100% - 80upx); + border-radius:10upx; + text-align: 24upx; + } +</style> diff --git a/pages/mine/bill.vue b/pages/mine/bill.vue new file mode 100644 index 0000000..d7160e9 --- /dev/null +++ b/pages/mine/bill.vue @@ -0,0 +1,281 @@ +<template> + <view class="full-width content-color full-height" style="position: relative;"> + <view class="full-width"> + <!-- 动态数据 --> + <view scroll-y @scrolltolower="loadMore()" class="full-width" @touchend="touchEnd" v-if="long" > + <view v-for="(item, index) in LoupanList" :key="index" class="eq_list" @click="billdetails(item)"> + <view class="eq_list_div"> + <view class="full-width eq_list_ul"> + <text class="eq_list_ul_left" style="font-size: 30upx;">{{item.title}}</text> + <text class="eq_list_ul_right" style="font-size: 30upx;">¥{{item.settle_amount}}</text> + </view> + <view class="full-width eq_list_ul"> + <text class="eq_list_ul_left" style="font-size: 24upx; color: #B2B2B2; width: 80%;">{{item.create_time || ''}}</text> + <text class="eq_list_ul_right" v-if="item.status.value == 0" style="font-size: 24upx; color: #F56364; width: 20%; ">待确认</text> + <text class="eq_list_ul_right" v-if="item.status.value == 1" style="font-size: 24upx; color: #F2A03E; width: 20%;" >已确认</text> + <text class="eq_list_ul_right" v-if="item.status.value == 2" style="font-size: 24upx; color: #5CE6B5; width: 20%;" >已完成</text> + </view> + </view> + + + </view> + <!-- 暂无相关信息 --> + <view class="align-center content-color" style="position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%);" + v-if="LoupanList.length == 0 || LoupanList.length == null"> + <span class="iconfont icon-wushuju" style="font-size: 100upx; text-align: center; color: #B2B2B2;"></span> + <view style="color: #B2B2B2; text-align: center; line-height: 50upx;font-size: 24upx;">暂无相关信息</view> + </view> + </view> + <!-- 动态数据完 --> + </view> + <!-- 返回顶部 --> + <view v-if="totopstatus" class="to-top content-color" @click="totop()"> + <view class="fa fa-angle-right to-top-icon"></view> + </view> + </view> +</template> + +<script> + import uniIcon from '@/components/uni-icon/uni-icon.vue'; + import Enums from '@/util/Enums'; + // 自定义底部 + import foot from '../../components/foot.vue'; + import logoservice from '@/service/logoservice.js'; + export default { + components: { + uniIcon, + foot, + }, + computed: {}, + data() { + return { + long:false, + LoupanList: [], //数据 + // 返回顶部 + totopstatus: false, + // 上拉状态 + dataLoadState: { + pullDownRefresh: false, + reachBottom: false + }, + queryPage: { + m:'Money/billList', + page: 1, + per_page: 12, + count:0 + }, + }; + }, + methods: { + billdetails(item){ + uni.navigateTo({ + url: '/pages/mine/bill-details?id=' + item.id, + }); + }, + loginBtnone(){ + uni.showModal({ + title: '温馨提示', + content: '是否确认要结算当前账单?', + confirmText: '确认', + confirmColor: '#5CE6B5', + success:async function(res) { + if (res.confirm) { + console.log('用户点击确定'); + uni.showToast({title: '请耐心等待打款'}) + } else if (res.cancel) { + console.log('用户点击取消'); + } + } + }); + }, + change(e){ + + }, + // 加载数据 + loadGoodsList(direction) { + if (this.dataLoadState.pullDownRefresh || this.dataLoadState.reachBottom) return; + uni.showLoading({title: '正在加载中...'}) + this.dataLoadState.pullDownRefresh = direction === Enums.DATA_DIRECTION.UP; + this.dataLoadState.reachBottom = direction === Enums.DATA_DIRECTION.DOWN; + if (this.dataLoadState.reachBottom) { + if (Math.ceil(this.queryPage.count / this.queryPage.per_page) < this.queryPage.page) { + return setTimeout(() => { + uni.showToast({title: '没有更多数据了!', icon: 'none'}); + }, 500); + } + } + logoservice.MoneybillList(this.queryPage).then(result => { + // console.log(result.data) + this.long = true + let queryList = result.data + // 下拉更新时,查询结果集 + // 触底更新时,当前列表+查询结果集 + let newList = this.LoupanList.concat(queryList) + this.LoupanList = newList + // console.log(this.LoupanList) + // 分页对象处理 + this.queryPage.count = result.count; + this.queryPage.per_page = result.per_page; + // 停止当前页面下拉刷新 + if (this.dataLoadState.pullDownRefresh) uni.stopPullDownRefresh(); + // 数据加载状态处理 false + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + uni.hideLoading(); + // uni.showToast({ title: '加载成功', icon: 'none' }); + }).catch(err => { + // 停止当前页面下拉刷新 + if (this.dataLoadState.pullDownRefresh) uni.stopPullDownRefresh(); + // 数据加载状态处理 false + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + uni.hideLoading(); + }); + }, + // 返回顶部 + totop() { + uni.pageScrollTo({ + scrollTop: 0, + duration: 300 + }); + this.totopstatus = false + }, + touchEnd(e) { + if (e.mp.changedTouches[0].pageY > 1000) { + this.totopstatus = true + } else { + this.totopstatus = false + } + }, + // 做滚动加载使用 + loadMore() { + if (Math.ceil(this.queryPage.count / this.queryPage.per_page) < this.queryPage.page) { + return setTimeout(() => { + uni.showToast({title: '没有更多数据了!', icon: 'none'}); + }, 500); + } + this.queryPage.page = this.queryPage.page + 1; + this.loadGoodsList(Enums.DATA_DIRECTION.DOWN); + }, + }, + // 下拉加载 + onPullDownRefresh() { + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + this.queryPage.page = 1; + this.queryPage.count = 0; + this.LoupanList = [] + this.loadGoodsList(Enums.DATA_DIRECTION.UP); + }, + // 上拉加载 + onReachBottom() { + console.log('上拉加载') + if (this.LoupanList.length < 12) { + return setTimeout(() => { + uni.showToast({title: '没有更多数据了!', icon: 'none'}); + }, 500); + } + this.queryPage.page = this.queryPage.page + 1; + this.loadGoodsList(Enums.DATA_DIRECTION.DOWN); + }, + onLoad(options) { + uni.login({ + provider: 'weixin', + success: (res) => { + logoservice.login({ m:'Init/init',code:res.code}).then(result => { + logoservice.setwixinInfo(result); + this.LoupanList = [] + this.queryPage.page = 1; + this.queryPage.count = 0; + this.loadGoodsList(Enums.DATA_DIRECTION.UP); + }).catch(err => { + uni.navigateTo({url: 'login',}); + }) + }, + fail: (err) => { + console.error('授权登录失败:' + JSON.stringify(err)); + } + }); + }, + onShow() { + + } + }; +</script> + +<style lang="scss"> + .uni-collapse-cell__title{ + border: 0 !important; + } + .uni-collapse:after{ + height: 0 !important; + } + .uni-collapse:before{ + height: 0 !important; + } + .uni-collapse-cell:after{ + height: 0 !important; + } + .uni-collapse-cell--open{ + background: #fff !important; + } + page { + width: 100%; + height: 100%; + background: #FFFFFF; + } + .eq_list{ + width: 94%; + margin:20upx auto; + border-radius:10upx; + background: #FFFFFF; + overflow: hidden; + .eq_list_div{ + margin: 0 20upx; + padding: 20upx 10upx; + .eq_list_ul{ + display: flex; + align-items: center; + line-height: 50upx; + // border-top: 1upx solid #F5F5F5; + .eq_list_ul_left{ + width: 50%; + } + .eq_list_ul_right{ + width: 50%; + text-align: right; + } + } + } + + } + // 返回顶部 + .to-top { + position: fixed; + bottom: 150upx; + right: 30upx; + width: 80upx; + height: 80upx; + border-radius: 50%; + text-align: center; + line-height: 80upx; + // box-shadow: 5upx 5upx 5upx #ebeef5; + transform: rotate(-90deg); + background: #000; + opacity: 0.5; + z-index: 999; + } + .to-top-icon { + color: #FFFFFF; + } + .loginBtnone { + border: 0 !important; + font-size: 28upx; + border-radius: 10rpx; + width: 300rpx; + color: white; + background: #5CE6B5; + line-height: 70upx; + margin:auto; + } +</style> diff --git a/pages/mine/goodStock.vue b/pages/mine/goodStock.vue new file mode 100644 index 0000000..b7ada19 --- /dev/null +++ b/pages/mine/goodStock.vue @@ -0,0 +1,399 @@ +<template> + <view class="full-width content-color full-height" style="position: relative;"> + <view class="full-width"> + <!-- 动态数据 --> + <view scroll-y @scrolltolower="loadMore()" class="full-width" @touchend="touchEnd" v-if="long"> + <view v-for="(item, index) in LoupanList" :key="index" class="eq_list"> + <view class="eq_list_div"> + <view class="full-width eq_list_ul"> + <image @click.stop="previewImage(item.front_image)" v-if="item.front_image" :src="item.front_image + '?x-oss-process=image/resize,lfit,w_100'" + mode="aspectFit" style="width:70upx; height: 90upx;line-height:70upx; margin: 0 10upx;"></image> + <view style="width: calc(100% - 220upx);"> + <view style="font-size: 25upx;color: #B2B2B2;width: 100%;white-space: nowrap;text-overflow:ellipsis; overflow:hidden; word-break:break-all;"> + {{item.goods_name}}<!-- - {{item.title}} --> + </view> + <view style="font-size: 25upx;color: #B2B2B2;width: 100%;white-space: nowrap;text-overflow:ellipsis; overflow:hidden; word-break:break-all;margin-top: 7upx;">仓库库存:{{item.stock}} + <!-- 货道库存:{{item.stockTotal}} --> + </view> + </view> + <button @click.stop="showshareclick(item,index)" + style="font-size: 23upx; color:#FFFFFF; width:130upx;font-weight:bold; text-align: center; line-height: 60upx; height: 60upx; background-color:#5CE6B6">调整</button> + </view> + </view> + </view> + <!-- 暂无相关信息 --> + <view class="align-center content-color" style="position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%);" + v-if="LoupanList.length == 0 || LoupanList.length == null"> + <span class="iconfont icon-wushuju" style="font-size: 100upx; text-align: center; color: #B2B2B2;"></span> + <view style="color: #B2B2B2; text-align: center; line-height: 50upx;font-size: 23upx;">暂无相关信息</view> + </view> + </view> + <!-- 动态数据完 --> + <!-- 中间弹框,加货道输入框 @click.stop="changeChannel(item,item.stock,index)"--> + <uni-popup ref="showshareinput" type="center" @change="showchange"> + <view style="width:600upx; margin:auto; display: flex; flex-direction: column;"> + <view style="width:100%; height: 300upx; background: #F9F9F9; border-radius: 10upx; position: relative;"> + <view style="display: flex; align-items: center; width: calc(100% - 60upx); + margin:40upx 30upx; border-radius: 10upx; height: 120upx; background: #FFFFFF;font-size: 34upx;"> + <label style="padding-left: 20upx;">实时库存:</label> + <input v-model="showshareitem.stock" style="width: 60%;" auto-focus="true" + maxlength="100000" type="number" @click.stop="StockCountInput()"></input> + </view> + <view style="width:100%; background: #FFFFFF; position: absolute; bottom: 0; + display: flex; height: 100upx; align-items: center;border-radius:0 0 10upx 10upx;"> + <view @click="cancel('share')" + style="padding: 10upx 20upx; border: 1upx solid #5CE6B6;border-radius: 5upx; margin-left: auto; color:#5CE6B6;"> + 取消 + </view> + <view @click.stop="changeChannel(showshareitem,showshareindex)" + style="padding: 10upx 20upx; background:#5CE6B6; border-radius: 5upx; color: #FFFFFF; margin: 0 30upx;"> + 确定 + </view> + </view> + </view> + </view> + </uni-popup> + + </view> + <!-- 返回顶部 --> + <view v-if="totopstatus" class="to-top content-color" @click="totop()"> + <view class="fa fa-angle-right to-top-icon"></view> + </view> + </view> +</template> + +<script> + import uniIcon from '@/components/uni-icon/uni-icon.vue'; + import Enums from '@/util/Enums'; + import uniPopup from '../index/common/uni-popup/uni-popup.vue'; + // 自定义底部 + import foot from '../../components/foot.vue'; + import logoservice from '@/service/logoservice.js'; + export default { + components: { + uniIcon, + foot, + uniPopup + }, + computed: {}, + data() { + return { + msg: "", + error: true, + stockValue: "", + stockCount: "", + long: false, + LoupanList: [], //数据 + LoupanLists: [], //数据 + // 返回顶部 + totopstatus: false, + // 上拉状态 + dataLoadState: { + pullDownRefresh: false, + reachBottom: false + }, + queryPage: { + m: 'Machine/stockList', + page: 1, + per_page: 12, + count: 0 + }, + nameInput: null, + + isOnclickItem: false, //是否点击item + showshareitem:null, + showshareindex:null + }; + }, + methods: { + showchange(e){ + + }, + cancel(type) { + this.$refs['showshareinput'].close() + }, + //更换弹框 + showshareclick(item,index) { + console.log(item) + let itema = JSON.stringify(item) + let itemb = JSON.parse(itema); + this.showshareitem = itemb; + this.showshareindex = index; + this.$nextTick(() => { + this.$refs['showshareinput'].open() + }) + }, + //库存数量输入 + StockCountInput(e) { + console.log("进入库存数量") + this.isOnclickItem = true; + var that = this; + setTimeout(function() { + that.isOnclickItem = false; + }, 1000) //延迟时间 这里是2秒 + }, + //修改货道 + changeChannel(item,index) { + this.$refs["showshareinput"].close(); + var _this = this + _this.isOnclickItem = true; + setTimeout(function() { + _this.isOnclickItem = false; + }, 1000) //延迟时间 这里是1秒 + let jsonLists = JSON.parse(_this.LoupanLists); + uni.showLoading({title: '正在加载中...'}) + logoservice.MachineSavePartnerStock({ + m: 'Machine/savePartnerStock', + id: item.id, + stock: item.stock + }).then(result => { + uni.hideLoading(); + uni.showToast({title: "修改成功",icon: 'none'}); + _this.LoupanList[index].stock = item.stock; + }).catch(err => { + uni.hideLoading(); + uni.showToast({title: err.msg,icon: 'none'}); + }) + }, + + previewImage(e) { + var current = e; //这里获取到的是一张本地的图片 + wx.previewImage({ + current: current, //需要预览的图片链接列表 + urls: [current] //当前显示图片的链接 + }) + }, + + // change(item, value) { + // let jsonLists = JSON.parse(this.LoupanLists); + // uni.showModal({ + // title: '确认', + // content: '确认当前商品入货吗?', + // confirmText: '确定', + // confirmColor: '#ff3b32', + // success: function(res) { + // if (res.confirm) { + // uni.showLoading({ + // title: '正在加载中...' + // }) + // logoservice.MachineSavePartnerStock({ + // m: 'Machine/savePartnerStock', + // id: item.id, + // stock: value + // }).then(result => { + // console.log() + // uni.hideLoading(); + // uni.showToast({ + // title: "保存成功", + // icon: 'none' + // }); + // }).catch(err => { + // uni.hideLoading(); + // jsonLists.forEach((items, index) => { + // //用item操作每一条数据。 + // if (items.id == item.id) { + // console.error('stock:' + items.stock); + // item.stock = items.stock + // } + // }); + // uni.showToast({ + // title: err.msg, + // icon: 'none' + // }); + // }) + // } else if (res.cancel) { + // console.log('用户点击取消') + // } + // } + // }); + // }, + //获取设备代理列表 + loadGoodsList(direction) { + if (this.dataLoadState.pullDownRefresh || this.dataLoadState.reachBottom) return; + uni.showLoading({ + title: '正在加载中...' + }) + this.dataLoadState.pullDownRefresh = direction === Enums.DATA_DIRECTION.UP; + this.dataLoadState.reachBottom = direction === Enums.DATA_DIRECTION.DOWN; + if (this.dataLoadState.reachBottom) { + if (Math.ceil(this.queryPage.count / this.queryPage.per_page) < this.queryPage.page) { + return setTimeout(() => { + uni.showToast({ + title: '没有更多数据了!', + icon: 'none' + }); + }, 500); + } + } + logoservice.MachineStockList(this.queryPage).then(result => { + this.long = true + let queryList = result.data + // 下拉更新时,查询结果集 + // 触底更新时,当前列表+查询结果集 + let newList = this.LoupanList.concat(queryList) + this.LoupanList = newList + this.LoupanLists = JSON.stringify(newList) + // 分页对象处理 + this.queryPage.count = result.count; + this.queryPage.per_page = result.per_page; + // 停止当前页面下拉刷新 + if (this.dataLoadState.pullDownRefresh) uni.stopPullDownRefresh(); + // 数据加载状态处理 false + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + uni.hideLoading(); + // uni.showToast({ title: '加载成功', icon: 'none' }); + }).catch(err => { + // 停止当前页面下拉刷新 + if (this.dataLoadState.pullDownRefresh) uni.stopPullDownRefresh(); + // 数据加载状态处理 false + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + uni.hideLoading(); + }); + }, + // 返回顶部 + totop() { + uni.pageScrollTo({ + scrollTop: 0, + duration: 300 + }); + this.totopstatus = false + }, + touchEnd(e) { + if (e.mp.changedTouches[0].pageY > 1000) { + this.totopstatus = true + } else { + this.totopstatus = false + } + }, + // 做滚动加载使用 + loadMore() { + if (Math.ceil(this.queryPage.count / this.queryPage.per_page) < this.queryPage.page) { + return setTimeout(() => { + uni.showToast({ + title: '没有更多数据了!', + icon: 'none' + }); + }, 500); + } + this.queryPage.page = this.queryPage.page + 1; + this.loadGoodsList(Enums.DATA_DIRECTION.DOWN); + }, + }, + // 下拉加载 + onPullDownRefresh() { + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + this.queryPage.page = 1; + this.queryPage.count = 0; + this.LoupanList = [] + this.loadGoodsList(Enums.DATA_DIRECTION.UP); + }, + // 上拉加载 + onReachBottom() { + console.log('上拉加载') + if (this.LoupanList.length < 12) { + return setTimeout(() => { + uni.showToast({ + title: '没有更多数据了!', + icon: 'none' + }); + }, 500); + } + this.queryPage.page = this.queryPage.page + 1; + this.loadGoodsList(Enums.DATA_DIRECTION.DOWN); + }, + + + onLoad(options) { + uni.login({ + provider: 'weixin', + success: (res) => { + logoservice.login({ + m: 'Init/init', + code: res.code + }).then(result => { + logoservice.setwixinInfo(result); + this.LoupanList = [] + this.queryPage.page = 1; + this.queryPage.count = 0; + this.loadGoodsList(Enums.DATA_DIRECTION.UP); + }).catch(err => { + uni.navigateTo({ + url: 'login', + }); + }) + }, + fail: (err) => { + console.error('授权登录失败:' + JSON.stringify(err)); + } + }); + }, + + onShow() { + + + } + }; +</script> + +<style lang="scss"> + /* 去除button默认样式 */ + button::after { + border: none; + } + button { + background-color: transparent; + padding-left: 0; + padding-right: 0; + line-height: inherit; + } + + page { + width: 100%; + height: 100%; + background: #FFFFFF; + } + + .eq_list { + width: 94%; + margin: 20upx auto; + border-radius: 10upx; + background: #FFFFFF; + overflow: hidden; + + .eq_list_div { + padding: 20upx 10upx; + + .eq_list_ul { + display: flex; + align-items: center; + } + } + } + + + + // 返回顶部 + .to-top { + position: fixed; + bottom: 150upx; + right: 30upx; + width: 80upx; + height: 80upx; + border-radius: 50%; + text-align: center; + line-height: 80upx; + // box-shadow: 5upx 5upx 5upx #ebeef5; + transform: rotate(-90deg); + background: #000; + opacity: 0.5; + z-index: 999; + } + + .to-top-icon { + color: #FFFFFF; + } + +</style> diff --git a/pages/mine/information.vue b/pages/mine/information.vue new file mode 100644 index 0000000..98df66e --- /dev/null +++ b/pages/mine/information.vue @@ -0,0 +1,174 @@ +<template> + <view class="full-width content-color full-height" style="position: relative;"> + <view class="full-width"> + <!-- 动态数据 --> + <view class="full-width" v-if="long" > + <view style="padding-top: 20upx;"> + <view class="eq_list"> + <view class="full-width eq_list_ul"> + <text class="eq_list_ul_left">代理名称:</text> + <text class="eq_list_ul_right">{{LoupanList.name}}</text> + </view> + <view class="full-width eq_list_ul"> + <text class="eq_list_ul_left">负责人:</text> + <text class="eq_list_ul_right">{{ getContactInfo(LoupanList.contact)}}</text> + </view> + <view class="full-width eq_list_ul" > + <text class="eq_list_ul_left">登录账号:</text> + <text class="eq_list_ul_right">{{LoupanList.account}}</text> + </view> + <view class="full-width eq_list_ul" > + <text class="eq_list_ul_left">客服电话:</text> + <text class="eq_list_ul_right">{{LoupanList.phone}}</text> + </view> + <view class="full-width eq_list_ul" > + <text class="eq_list_ul_left">结算比例:</text> + <text class="eq_list_ul_right">{{ getSettlementOProportion(LoupanList.settlement_proportion) * 100}}%</text> + </view> + + <view class="full-width eq_list_ul" > + <text class="eq_list_ul_left">官方服务:</text> + <text class="eq_list_ul_right" >瑞丰彩</text> + </view> + </view> + + <view class="footer"> + <view class="footer_but" @click="onSave()">切换账号</view> + </view> + </view> + </view> + <!-- 动态数据完 --> + </view> + </view> +</template> + +<script> + import uniIcon from '@/components/uni-icon/uni-icon.vue'; + import logoservice from '@/service/logoservice.js'; + export default { + components: { + uniIcon + }, + computed: {}, + data() { + return { + long:false, + LoupanList: null, //数据 + queryPage: { + m:'Money/partner' + }, + is_inner: null, //是否显示所有 + }; + }, + methods: { + + //获取负责人信息 + getContactInfo(contactName){ + if( contactName == 'undefined' || contactName == null || contactName == "" ){ + return ""; + } else { + return contactName; + } + }, + + //获取结算比例 + getSettlementOProportion(settlement_proportion){ + if(isNaN(settlement_proportion) || settlement_proportion == "" || settlement_proportion == null){ + return 1 + } + return parseFloat(settlement_proportion).toFixed(2); + }, + + onSave(){ + uni.navigateTo({ + url: '/pages/mall/informationList', + }); + }, + // 加载数据 + loadGoodsList(direction) { + uni.showLoading({title: '正在加载中...'}) + logoservice.Moneypartner(this.queryPage).then(result => { + this.long = true + this.LoupanList = result + uni.hideLoading(); + }).catch(err => { + uni.hideLoading(); + uni.showToast({ title: err.msg, icon: 'none' }); + }); + } + }, + // 下拉加载 + onPullDownRefresh() { + this.loadGoodsList(); + }, + // 上拉加载 + onReachBottom() { + this.loadGoodsList(); + }, + onLoad(options) { + uni.login({ + provider: 'weixin', + success: (res) => { + logoservice.login({ m:'Init/init',code:res.code}).then(result => { + this.$base.Userres = result //记录用户登录信息 + this.is_inner = this.$base.Userres.is_inner //总代理 + logoservice.setwixinInfo(result); + this.loadGoodsList(); + }).catch(err => { + uni.navigateTo({url: 'login',}); + }) + }, + fail: (err) => { + console.error('授权登录失败:' + JSON.stringify(err)); + } + }); + }, + onShow() { + + } + }; +</script> + +<style lang="scss"> + page { + width: 100%; + height: 100%; + background: #FFFFFF; + } + .eq_list{ + width: 90%; + margin:0 auto 20upx; + padding: 10upx 20upx; + border-radius:10upx; + background: #FFFFFF; + .eq_list_ul{ + display: flex; + align-items: center; + line-height: 80upx; + border-bottom: 1upx solid #F5F5F5; + font-size: 28upx; + .eq_list_ul_left{ + width: 150upx; + } + .eq_list_ul_right{ + width: calc(100% - 150upx); + // text-align: right; + } + } + } + .footer { + position: fixed; + bottom: 20upx; + width: 100%; + .footer_but { + width: calc(100% - 60upx); + margin: 0upx auto 0; + color: #fff; + height: 88upx; + text-align: center; + line-height: 88upx; + background: rgba(92, 230, 182, 1); + border-radius: 10upx; + } + } +</style> diff --git a/pages/mine/money.vue b/pages/mine/money.vue new file mode 100644 index 0000000..259331c --- /dev/null +++ b/pages/mine/money.vue @@ -0,0 +1,289 @@ +<template> + <view class="full-width" v-if="long"> + <view class="item full-width" @click="bank()"> + <label class="text content-color">银行:</label> + <label class="value content-color"> + <input type="text" v-model="list.bank_name" disabled="disabled" class="full-width" /> + <label class="fa fa-angle-right align-right sub-color"></label> + </label> + </view> + <view class="item full-width"> + <label class="text content-color">持卡人:</label> + <label class="value content-color"> {{list.account_name || ''}} </label> + </view> + <view class="item full-width"> + <label class="text content-color">卡号:</label> + <label class="value content-color" v-if="list.account_sn!=null && list.account_sn!=''"> + {{list.account_sn.replace(/\s/g, '').replace(/[^\d]/g, '').replace(/(\d{4})(?=\d)/g, '$1 ') || ''}}</label> + </view> + <view class="item full-width" style="border: 0;"> + <label class="text content-color">提现金额:</label> + </view> + <view style="height: 140upx; border-bottom: 1px solid #EEEEEE; margin: 50upx 50upx 50upx; display: flex;"> + <span style="font-size: 60upx; line-height: 140upx;">¥</span> + <!-- <input style="width: 100%; height: 140upx; line-height: 140upx; font-size: 35upx;" + v-model="queryPage.withdrawal_amount" placeholder="请输入提现金额(元)" + @blur="onSearch" @focus="focus" @input='changeSearch'/> --> + <!-- 金额输入限制 --> + + <view style="width: 100%; height: 140upx; line-height: 140upx; font-size: 35upx;">{{money}} </view> + + <!-- <input style="width: 100%; height: 140upx; line-height: 140upx; font-size: 35upx;" :value="money" + placeholder="请输入提现金额(元)" type="digit" + @input="moneyChange"/> --> + <!-- number digit --> + </view> + <!-- <view v-if="!submit" style="color: #F56364; font-size: 24upx; margin-top: 90upx; width: calc(100% - 100upx); margin: auto;"> + 输入金额超过提现金额,或提现金额为0 + </view> + <view style="color: #B2B2B2; font-size: 24upx; margin-top: 90upx; width: calc(100% - 100upx); margin: auto;"> + 到账金额<span v-if="list.withdrawal_rate">{{(money - (money*list.withdrawal_rate).toFixed(2)) || '0'}}</span>元, + 服务费<span v-if="list.withdrawal_rate">{{((money * list.withdrawal_rate).toFixed(2)) || ''}}</span>元 + </view> --> + <!-- <view style="color: #B2B2B2; font-size: 24upx; margin-top: 90upx; width: calc(100% - 100upx); margin: auto;">可提现金额{{list.base_amount || 0}}元 + <span style="color: #5CE6B6; font-size: 24upx; margin-left: 10upx;" @click="numone()" hover-class="hover-class-text">全部提出</span> + </view> --> + <!-- <button type="button" v-if="!submit" class="mui-btn mui-btn-danger submit submitone">提交</button> --> + <!-- v-if="submit" --> + <button type="button" class="mui-btn mui-btn-danger submit" @click="paymentone()" + hover-class="hover-class-bg">提交</button> + </view> +</template> + +<script> + import logoservice from '@/service/logoservice.js'; + export default { + components: { + + }, + computed: { + + }, + data() { + return { + long: false, + list: { + bank_name: null, + account_name: null, + account_sn: null + }, + queryPage: { + m: 'Withdrawal/apply', + withdrawal_amount: null, + id: "", + }, + submit: true, + money: "", + + } + }, + methods: { + moneyChange(event) { + let money = this.moneyone(event.detail.value); + // this.money = money + this.setData({ + money: money + }); + this.queryPage.withdrawal_amount = money + if (money > this.list.base_amount) { + this.submit = false + } else { + this.submit = true + } + return money + }, + setData(obj) { + let that = this; + let keys = []; + let val, data; + Object.keys(obj).forEach(function(key) { + keys = key.split('.'); + val = obj[key]; + data = that.$data; + keys.forEach(function(key2, index) { + if (index + 1 == keys.length) { + that.$set(data, key2, val); + } else { + if (!data[key2]) { + that.$set(data, key2, {}); + } + } + data = data[key2]; + }) + }); + }, + // 验证输入金额 + moneyone(val) { + let num = val.toString(); //先转换成字符串类型 + if (num.indexOf('.') == 0) { //第一位就是 . + num = '1' + num + } else if (num.indexOf('0') == 0) { + num = '' + } + num = num.replace(/[^\d.]/g, ""); //清除“数字”和“.”以外的字符 + num = num.replace(/\.{2,}/g, "."); //只保留第一个. 清除多余的 + num = num.replace(".", "$#$").replace(/\./g, "").replace("$#$", "."); + num = num.replace(/^(\-)*(\d+)\.(\d\d).*$/, '$1$2.$3'); //只能输入两个小数 + if (num.indexOf(".") < 0 && num != "") { + num = parseFloat(num); + } + return num + }, + + bank() { + uni.navigateTo({ + url: '/pages/mine/bank', + }); + }, + numone() { + this.setData({ + money: this.list.base_amount + }); + this.queryPage.withdrawal_amount = this.list.base_amount + }, + paymentone() { + if (this.loading) return; + if (!this.queryPage.withdrawal_amount) { + uni.showToast({ + title: '提现金额不能为空!', + icon: 'none' + }); + return false; + } + if (!this.list.bank_name || !this.list.account_name || !this.list.account_sn) { + uni.showToast({ + title: '提现账户未设置!', + icon: 'none' + }); + return false; + } + uni.showLoading({ + title: '正在提交中...' + }) + logoservice.Withdrawalapply(this.queryPage).then(result => { + + uni.showModal({ + content: '提现申请已提交,等待人工审核', + showCancel: false, + success: function(res) { + uni.navigateTo({ + url: '../index/mine' + }); + } + }); + + uni.hideLoading(); + }).catch(err => { + uni.hideLoading(); + uni.showToast({ + title: err.data, + icon: 'none' + }); + }); + }, + moneyinfo() { + uni.showLoading({ + title: '正在加载数据...' + }) + logoservice.Moneyinfo({ + m: 'Money/info' + }).then(result => { + this.long = true + this.list = result + if (result.base_amount > 0 && result.base_amount != null) { + this.submit = true + } else { + this.submit = false + } + uni.hideLoading(); + }).catch(err => { + uni.hideLoading(); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + } + }, + onShow() { + uni.login({ + provider: 'weixin', + success: (res) => { + logoservice.login({ + m: 'Init/init', + code: res.code + }).then(result => { + uni.setStorageSync('openid', result.openid) + logoservice.setwixinInfo(result); + this.moneyinfo() + }).catch(err => { + + }) + }, + fail: (err) => { + console.error('授权登录失败:' + JSON.stringify(err)); + } + }); + }, + onLoad(options) { + if (options.money) { + this.money = options.money; + this.queryPage.withdrawal_amount = this.money + } + if (options.id) { + this.queryPage.id = options.id; + } + } + } +</script> + +<style lang="scss"> + page { + width: 100%; + height: 100%; + background: #FFFFFF; + } + + .item { + height: 90upx; + display: flex; + align-items: center; + border-bottom: 1upx solid #EEEEEE; + font-size: 30upx; + width: calc(100% - 100upx); + margin: auto; + + .text { + width: 150upx; + padding-left: 20upx; + } + + .value { + width: calc(100% - 180upx); + display: flex; + align-items: center; + + .prick { + width: calc(100% - 40upx); + } + + .fa-angle-right { + width: 40upx; + font-size: 50upx; + } + } + } + + .submit { + width: calc(100% - 100upx); + margin: 150upx auto 0; + height: 50px; + border-radius: 10upx; + background: #5CE6B6; + color: #FFFFFF; + } + + .submitone { + background: #B2B2B2 !important; + } +</style> \ No newline at end of file diff --git a/pages/mine/order-details.vue b/pages/mine/order-details.vue new file mode 100644 index 0000000..4587bd3 --- /dev/null +++ b/pages/mine/order-details.vue @@ -0,0 +1,400 @@ +<template> + <view class="full-width content-color full-height" style="position: relative;"> + <view class="full-width"> + <view class="full-width" v-if="long"> + <view style="text-align: center; font-weight: bold; padding: 100upx 0;"> + <view style="font-size:80upx;font-weight:bold;"> + <!--<text v-if="Number(LoupanList.real_amount) <= 0">免费</text> + <text v-else>¥{{LoupanList.real_amount || ''}}</text>--> + <text v-if="LoupanList.is_pay.value == 4" style="color: #F56464;">退款完成</text> + <text v-else> + <text v-if="LoupanList.status.value == 2" style="color: #5CE6B5;">{{LoupanList.status.text || ''}}</text> + <text v-else-if="LoupanList.status.value == 0" style="color: #F56464;">{{LoupanList.status.text || ''}}</text> + <text v-else-if="LoupanList.status.value == 3" style="color: #878787;">{{LoupanList.status.text || ''}}</text> + <text v-else style="color: #FF8B00;">{{LoupanList.status.text || ''}}</text> + </text> + </view> + <!--<view style="font-size:26upx;font-weight:400;">收入(¥)</view> --> + </view> + <view style="display: flex; justify-content: center;"> + <view class="eq_list"> + <view class="full-width eq_list_ul" style="margin-top: 30upx;"> + <text class="eq_list_ul_left">打印编号:</text> + <text class="eq_list_ul_right">{{LoupanList.order_queue.id || '无'}}</text> + </view> + <view class="full-width eq_list_ul"> + <text class="eq_list_ul_left">订单编号:</text> + <text class="eq_list_ul_right">{{LoupanList.id || ''}}</text> + </view> + <view class="full-width eq_list_ul"> + <text class="eq_list_ul_left">设备编号:</text> + <text class="eq_list_ul_right">{{LoupanList.machine_id || ''}}</text> + </view> + <view class="full-width eq_list_ul"> + <text class="eq_list_ul_left">产品属性:</text> + <text class="eq_list_ul_right"> + {{LoupanList.order_goods.goods_name || ''}} + <text v-if="LoupanList.used_applets != '4'">-{{LoupanList.order_goods.goods_specs || ''}} </text> + </text> + </view> + <view class="full-width eq_list_ul"> + <text class="eq_list_ul_left">订单金额:</text> + <text class="eq_list_ul_right">¥{{LoupanList.settle_amount || '0'}}</text> + </view> + <view class="full-width eq_list_ul"> + <text class="eq_list_ul_left">下单时间:</text> + <text class="eq_list_ul_right">{{LoupanList.create_time || ''}}</text> + </view> + <view class="full-width eq_list_ul"> + <text class="eq_list_ul_left">所属代理:</text> + <text class="eq_list_ul_right">{{LoupanList.partner.name || ''}}</text> + </view> + <view class="full-width eq_list_ul"> + <text class="eq_list_ul_left">所属店铺:</text> + <text class="eq_list_ul_right">{{LoupanList.shop.short_name || ''}}</text> + </view> + <view class="full-width eq_list_ul"> + <text class="eq_list_ul_left">店铺地址:</text> + <view class="eq_list_ul_right" style="width: 350upx;"> + <view v-html="LoupanList.shop.address"></view> + </view> + </view> + <view class="full-width eq_list_ul"> + <text class="eq_list_ul_left">订单作品:</text> + <view class="eq_list_ul_right"> + <image :src="LoupanList.works_image" mode="widthFix" style="width: 200upx;"></image> + </view> + </view> + </view> + </view> + <button v-if="LoupanList.is_pay.value == 1 && Number(LoupanList.real_amount) > 0 && partner_id == LoupanList.partner_id" + type="button" class="mui-btn mui-btn-danger submit" @click="togglePopup()" :class="be_child == 1 ? 'bg-grey' : ''">申请退款</button> + </view> + </view> + <uni-popup ref="showshare" :type="type" @change="change"> + <view class="uni-share" style="width:630upx; margin:auto; display: flex; flex-direction: column;"> + <view style="background: #F9F9F9;padding: 20upx;"> + <view style="border-bottom: 1upx solid #E9E7ED; height:100upx; + text-align: center;line-height: 100upx; font-size: 32upx; font-weight: 500; color: red;"> + 将原路退回用户支付金额 + </view> + <view style="text-align: left; font-size: 26upx; font-weight: 500; margin: 30upx auto;">退款原因(必填):</view> + + <textarea + maxlength="10000" + placeholder="请输入您的退款原因..." + v-model="refund_msg" + :show-confirm-bar="false" + :cursor-spacing="73" :adjust-position="false" + style="height:200upx; width: calc(100% - 20upx); background: #f4f4f4; padding: 10upx; margin: 30upx 0;"/> + + <view style="text-align: left; font-size: 26upx; font-weight: 500; margin: 30upx auto;">错误图片(非必填):</view> + <view style="display: flex;"> + <image v-if="refund_image" :src="refund_image + '?x-oss-process=image/resize,lfit,w_640'" + mode="aspectFit" + style="width: 150upx;height:150upx; margin-right: 10upx;"></image> + <view @click="chooseImage()" + style="margin:10upx 0; + width: 150upx;height:150upx; line-height: 150upx;"> + <view class="iconfont icon-21 cu-btn shadow cuIcon" + style="background: #FFFFFF; text-align: center; font-size: 30upx;"></view> + </view> + </view> + </view> + + <view style="display: flex;height: 90upx;line-height: 90upx;"> + <view class="uni-share-btn" style="background: #888888;" @click="cancel('share')">取消</view> + <view class="uni-share-btn" @tap="Submit" @touchstart="touchStart" @touchend="touchEnd">提交</view> + </view> + </view> + </uni-popup> + </view> +</template> + +<script> + import uniIcon from '@/components/uni-icon/uni-icon.vue'; + import logoservice from '@/service/logoservice.js'; + import uniPopup from '../index/common/uni-popup/uni-popup.vue' + var time = null + export default { + components: { + uniIcon, + uniPopup + }, + computed: {}, + data() { + return { + long:false, + LoupanList: { + finish_time:null + }, //数据 + queryPage: { + m:'Money/orderDetail', + id:null + }, + type: 'center', + refund_msg:'设备故障', + refund_image:'', + touchStartTime:null, + touchEndTime:null, + lastTapTime:null, + be_child:0, + partner_id:null, + }; + }, + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + //写在onHide()中,切换页面或者切换底部菜单栏时关闭定时器。 + clearInterval(time) + }, + onUnload() { + // 获取当前页面栈 + let pages = getCurrentPages() + // pages数组中的最后一个为当前页面,倒数第二个为上一个页面 + let prevPage = pages[pages.length - 2] + // 调用上一个页面的onShow函数,将参数传入进去 + // prevPage.onShow(this.queryPage.id) + prevPage.onShow(this.queryPage.id) + // 然后调用navigateBack返回页面 + // uni.navigateBack({ + // // 这个属性表示返回1个页面 + // detal: 1 + // }) + }, + methods: { + chooseImage: async function() { + var _this = this + uni.chooseImage({ + sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有 + sourceType: ['camera', 'album'], //从相册选择 + count: 1, + success: (res) => { + let tempFilePaths = res.tempFilePaths; + uni.showLoading({ + title: '图片正在上传...' + }) + wx.uploadFile({ + url: 'https://tprint.refinecolor.com/partnerapplets/index', + filePath: tempFilePaths[0], + method: 'POST', + name: 'file', + header: { + 'content-type': 'multipart/form-data' + }, + formData: { + m: 'Upload/upload' + }, //请求额外的form data + success: function(res) { + console.log(res.data); + console.log(JSON.parse(res.data).data.url); + uni.hideLoading(); + uni.showToast({ + title: '上传成功', + icon: 'none', + duration: 3000 + }) + _this.refund_image = JSON.parse(res.data).data.url + }, + fail: function(res) { + console.log(res); + uni.hideLoading(); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + } + }) + } + }) + }, + // 防止重复点击 + touchStart(e) { + this.touchStartTime = e.timeStamp; + }, + touchEnd(e) { + this.touchEndTime = e.timeStamp; + }, + // 退款原因 + Submit(e) { + var vm = this; + // 控制点击事件在350ms内触发,加这层判断是为了防止长按时会触发点击事件 + if (vm.touchEndTime - vm.touchStartTime < 350) { + // 当前点击的时间 + var currentTime = e.timeStamp; + var lastTapTime = vm.lastTapTime; + // 更新最后一次点击时间 + vm.lastTapTime = currentTime; + // 如果两次点击时间在300毫秒内,则认为是双击事件 + if (currentTime - lastTapTime > 300) { + console.log('防止重复点击') + this.$refs['showshare'].close() + logoservice.Withdrawal({m:'Withdrawal/refund',id:this.queryPage.id,refund_msg:this.refund_msg,refund_image:this.refund_image}).then(result => { + uni.showLoading({title: "退款中...",icon: "none"}); + var that = this + that.loadGoodsList(2); + time = setInterval(function(){ + that.loadGoodsList(2); + },3000) + }).catch(err => { + uni.showToast({ title: err.msg, icon: 'none' }); + }); + } + } + }, + togglePopup() { + if(this.$base.Userres.be_child == 1) return; + this.$nextTick(() => { + this.$refs['showshare'].open() + }) + }, + cancel(type) { + this.$refs['showshare'].close() + }, + change(e) { + console.log('是否打开:' + e.show) + }, + datatime(time){ + if(time != null){ + var date = new Date(time*1000) + var year = date.getFullYear(); + var month = date.getMonth() + 1; + var day = date.getDate(); + var hour = date.getHours(); + if(month < 10) { + month = '0' + month; + } + if(day < 10) { + day = '0' + day; + } + if(hour < 10) { + hour = '0' + hour; + } + var minute = date.getMinutes(); + if(minute < 10) { + minute = '0' + minute; + } + var second = date.getSeconds(); + if(second < 10) { + second = '0' + second; + } + var currentTime = year + "-" + month + "-" + day + " " + hour + ":" + minute + ":" + second; + return currentTime + }else{ + return 0 + } + + }, + // 加载数据 + loadGoodsList(e) { + if(e != 2){ + uni.showLoading({title: '正在加载中...'}) + } + logoservice.MoneystatementDetail(this.queryPage).then(result => { + this.long = true + this.LoupanList = result + if(e != 2){ + uni.hideLoading(); + } + if(this.LoupanList.is_pay.value == 4 && e == 2){ + uni.hideLoading(); + clearInterval(time) + }else{ + console.log('退款失败') + } + }).catch(err => { + if(e != 2){ + uni.hideLoading(); + } + if(this.LoupanList.is_pay.value == 4 && e == 2){ + uni.hideLoading(); + clearInterval(time) + }else{ + console.log('退款失败') + } + uni.showToast({ title: err.msg, icon: 'none' }); + }); + } + }, + // 下拉加载 + onPullDownRefresh() { + // this.loadGoodsList(); + }, + // 上拉加载 + onReachBottom() { + // this.loadGoodsList(); + }, + onLoad(options) { + console.log(options) + this.queryPage.id = options.id + uni.login({ + provider: 'weixin', + success: (res) => { + logoservice.login({ m:'Init/init',code:res.code}).then(result => { + this.partner_id =result.partner_id; + logoservice.setwixinInfo(result); + this.loadGoodsList(); + }).catch(err => { + uni.navigateTo({url: 'login',}); + }) + }, + fail: (err) => { + console.error('授权登录失败:' + JSON.stringify(err)); + } + }); + }, + onShow() { + this.be_child = this.$base.Userres.be_child + } + }; +</script> + +<style lang="scss"> + page { + width: 100%; + height: 100%; + background: #FFFFFF; + } + .submit{ + width: calc(100% - 100upx); margin:150upx auto 0; height: 50px; border-radius: 10upx; background: #5CE6B6; color: #FFFFFF; + position: fixed; + bottom: 10px; + left: 0; + right: 0; + } + /* 底部分享 */ + .uni-share { + display: flex; + flex-direction: column; + } + + .uni-share-btn { + width: 50%; + height: 90upx; + line-height: 90upx; + font-size: 26upx; + text-align: center; + background: #5CE6B6; + color: #FFFFFF; + } + .eq_list{ + margin:0 auto 20upx; + padding: 10upx 20upx; + background: #FFFFFF; + .eq_list_ul{ + display: flex; + // align-items: center; + line-height: 55upx; + font-size: 28upx; + .eq_list_ul_left{ + // width: 180upx; + color: #818181; + } + .eq_list_ul_right{ + // width: calc(100% - 180upx); + // text-align: right; + } + } + } +</style> diff --git a/pages/mine/order.vue b/pages/mine/order.vue new file mode 100644 index 0000000..70848be --- /dev/null +++ b/pages/mine/order.vue @@ -0,0 +1,745 @@ +<template> + <view class="full-width full-height content-color " style="position: relative;"> + <view class="full-width"> + <view style="position: fixed; width: 100%;"> + <view style="width:100%;text-align: center;padding: 30upx 0; background: #F1F1F1;" + @click="togglePopup()"> + <text>{{queryPage.goods_name == null ? '全部订单类型' : queryPage.goods_name}}{{queryPage.attr == null ? '' : '-' + queryPage.attr}}</text> + <span class="iconfont icon-xiala" + style="margin-left: 10upx; font-size: 20upx; color: #BCBEC1;"></span> + </view> + <view style="display: flex;background: #F6F6F6;"> + <!-- 年月日 --> + <view style="width: calc(100% / 2); text-align: left;padding: 30upx 0 30upx 20upx;" + @click="showPicker('selector')"> + <text v-if="queryPage.start_time == null && queryPage.end_time == null"> + <text v-if="queryPage.year">{{queryPage.year}}年</text> + <text v-if="queryPage.month">{{queryPage.month}}月</text> + <text v-if="queryPage.day != null">{{queryPage.day}}</text> + <text v-if="!queryPage.day && !queryPage.month && !queryPage.year">全部</text> + </text> + <text v-else>{{datetext}}</text> + <span class="iconfont icon-xiala" + style="margin-left: 10upx; font-size: 20upx; color: #BCBEC1;"></span> + </view> + <!--状态类型 --> + <view + style="width: calc(100% / 2); text-align: right;padding: 30upx 20upx 30upx 0; visibility: hidden;"> + <picker @change="bindPickerChange" :value="queryPage.status" :range="array"> + {{array[queryPage.status] || '全部'}} + <span class="iconfont icon-xiala" + style="margin-left: 10upx; font-size: 20upx; color: #BCBEC1;"></span> + </picker> + </view> + </view> + <view + style="display: flex; padding: 0 20upx 20upx; color: #BCBEC1; background: #F6F6F6; font-size: 24upx;"> + <view>订单总数:{{queryPage.total || '0'}}笔</view> + </view> + </view> + + <!-- 暂无相关信息 --> + <view class="align-center content-color" + style="position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); " + v-if="(LoupanList.length == 0 || LoupanList.length == null) && long"> + <span class="iconfont icon-wushuju" + style="font-size: 100upx; text-align: center; color: #B2B2B2;"></span> + <view style="color: #B2B2B2; text-align: center; line-height: 50upx;font-size: 24upx;">暂无相关信息</view> + </view> + + <!-- 动态数据 --> + <view scroll-y class="full-width" @touchend="touchEnd" v-if="long" + style=" overflow: auto; padding-top: 238upx; "> + <view v-for="(item, index) in LoupanList" :key="index" class="eq_list" @click="details(item)"> + <view class="eq_list_div"> + <view class="full-width eq_list_ul" style="font-size: 28upx;"> + <text class="eq_list_ul_left"> + <text> 商户单号: {{item.id}}</text> + + </text> + </view> + <view class="full-width eq_list_ul"> + <view style="width: 100%;font-size: 28upx;"> + <text>{{item.goods_name || ''}}</text> + <text v-if="item.used_applets != '4'">-{{item.goods_specs || ''}} </text> + </view> + </view> + <view style="width: 100%;font-size: 28upx;overflow: hidden;margin-top: -35upx; height: 50upx;"> + <text v-if="item.is_pay.value == 4" + style="text-align: right; float: right; font-size: 25upx; color: #F56464;">退款完成</text> + <text v-else> + <text v-if="item.status.value == 2" + style="text-align: right; float: right; font-size: 25upx; color: #5CE6B5;">{{item.status.text || ''}}</text> + <text v-else-if="item.status.value == 0" + style="text-align: right; float: right; font-size: 25upx; color: #FF8D1A;">{{item.status.text || ''}}</text> + <text v-else-if="item.status.value == 3" + style="text-align: right; float: right; font-size: 25upx; color: #F56464;">{{item.status.text || ''}}</text> + <text v-else + style="text-align: right; float: right; font-size: 25upx; color: #FF8D1A;">{{item.status.text || ''}}</text> + </text> + </view> + <view style="width: 100%;font-size: 28upx;overflow: hidden;margin-top: -95upx; height: 50upx;"> + <text + style="text-align: right; float: right; font-size: 25upx; "> {{item.create_time || ''}}</text> + </view> + </view> + </view> + + <view style="height:60upx;width: 100%;"></view> + + </view> + <!--动态数据完 --> + + </view> + + <!--返回顶部 --> + <view v-if="totopstatus" class="to-top content-color" @click="totop()"> + <view class="fa fa-angle-right to-top-icon"></view> + </view> + <mpvue-picker ref="mpvuePicker" :themeColor="'#53B2B0'" :pickerValueDefault="pickerValueDefault" + @onChange="onChange" @onCancel="onCancel" @onConfirm="onConfirm" :pickerValueArray="pickerValueArray"> + </mpvue-picker> + <uni-popup ref="showshare" :type="type" @change="change"> + <view class="uni-share" style="width: 100%; margin: auto;"> + <view style="background: #F9F9F9;width: 100%;border-bottom: 1upx solid #00000000;"> + <view style="width: 100%;border-bottom: 1upx solid #E9E7ED; height:100upx; + text-align: center;line-height: 100upx; font-size: 26upx; font-weight: 500;"> + 选择订单类型 + </view> + <scroll-view scroll-y style="margin: auto; height: 500upx; overflow: hidden; overflow-y: scroll;"> + <view style="width: calc(100% - 40upx); margin:20upx auto; overflow: hidden;"> + <view v-for="(item, index) in goodsItem" :key="index" @click="selectMonth(item)" + :class="goods_name == item.value ? 'green':''" + style="width: calc(33% - 20upx);margin:10upx; float: left; background: #ffffff;height: 60px; border-radius: 5upx; font-size: 26upx; text-align: center;line-height: 60px;"> + {{item.value == null ? '全部' : item.value}} + </view> + </view> + </scroll-view> + </view> + <view class="uni-share-btn" @click="cancel('share')">取消</view> + </view> + </uni-popup> + </view> + +</template> + +<script> + import uniIcon from '@/components/uni-icon/uni-icon.vue'; + import uniPopup from '../index/common/uni-popup/uni-popup.vue' + import Enums from '@/util/Enums'; + //自定义底部 + import foot from '../../components/foot.vue'; + import logoservice from '@/service/logoservice.js'; + import mpvuePicker from '../../components/mpvue-picker/mpvuePickernew.vue'; + export default { + components: { + uniPopup, + uniIcon, + foot, + mpvuePicker + }, + computed: {}, + data() { + return { + long: false, + LoupanList: [], //数据 + goodSize: null, + //返回顶部 + totopstatus: false, + //上拉状态 + dataLoadState: { + pullDownRefresh: false, + reachBottom: false + }, + queryPage: { + m: 'Money/orderList', + machine_id: null, + page: 1, + per_page: 12, + total: null, + //status: 2,//2付款状态 + year: null, //年 + month: null, //月 + day: null, //日 + attr: null, + //设备榜单增加参数 + start_time: null, + end_time: null, + is_pay: null, //退款状态4 + status: null, + proxy: 0, //订单默认类型 proxy,0我的订单,1代理订单 + }, + goods_name: null, + goodsItem: [], + order_amount: null, + total_mount: null, + //年 + pickerValueArray: [], + pickerValueDefault: [0], + array: ['待清算', '待结算', '已结算', '全部'], + type: 'bottom', + datetext: null, + loadBottomComplete:true,//加载成功 + }; + }, + + mounted() { + + }, + + methods: { + details(item) { + uni.navigateTo({ + url: '/pages/mine/order-details?id=' + item.id, + }); + }, + bindPickerChange(e) { + //console.log('picker发送选择改变,携带值为', e.target) + if (e.target.value == 3) { + this.queryPage.status = null + } else { + this.queryPage.status = e.target.value + } + //console.log() + this.LoupanList = [] + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + this.queryPage.page = 1; + this.queryPage.total = 0; + this.loadGoodsList(Enums.DATA_DIRECTION.UP); + }, + + getToday() { + let myDate = new Date(); + let myMonth = myDate.getMonth() + 1; + if (myMonth < 10) { + myMonth = '0' + myMonth; //补齐 + } + let mydate = myDate.getDate(); + if (myDate.getDate() < 10) { + mydate = '0' + myDate.getDate(); //补齐 + } + this.queryPage.day = myDate.getFullYear() + '-' + myMonth + '-' + mydate; + }, + + getMonth() { + let myDate = new Date(); + let myMonth = myDate.getMonth() + 1; + if (myMonth < 10) { + myMonth = '0' + myMonth; //补齐 + } + this.queryPage.month = myDate.getFullYear() + '-' + myMonth; + }, + showPicker(mode) { + this.$refs.mpvuePicker.show(); + }, + //确定 + onConfirm(e) { + this.queryPage.year = null + this.queryPage.month = null + this.queryPage.day = null + this.queryPage.start_time = null + this.queryPage.end_time = null + if (e.value.length == 1) { + this.queryPage.year = e.value[0] + } else if (e.value.length == 2) { + let myMonth = e.value[1] + if (myMonth < 10) { + myMonth = '0' + e.value[1] //补齐 + } + this.queryPage.month = e.value[0] + '-' + myMonth + } else if (e.value.length == 3) { + let myMonth = e.value[1] + if (myMonth < 10) { + myMonth = '0' + myMonth //补齐 + } + let mydate = e.value[2] + if (mydate < 10) { + mydate = '0' + e.value[2] //补齐 + } + this.queryPage.day = e.value[0] + '-' + myMonth + '-' + mydate + } + this.LoupanList = [] + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + this.queryPage.page = 1; + this.queryPage.total = 0; + this.loadGoodsList(Enums.DATA_DIRECTION.UP); + }, + onChange(e) { + + }, + onCancel(e) { + + }, + //加载数据 + loadGoodsList(direction) { + //console.log("加载") + //if (this.dataLoadState.pullDownRefresh || this.dataLoadState.reachBottom) return; + uni.showLoading({ + title: '正在加载中...' + }) + this.dataLoadState.pullDownRefresh = direction === Enums.DATA_DIRECTION.UP; + this.dataLoadState.reachBottom = direction === Enums.DATA_DIRECTION.DOWN; + if (this.dataLoadState.reachBottom) { + if (Math.ceil(this.queryPage.total / this.queryPage.per_page) < this.queryPage.page) { + this.loadBottomComplete = true; + return setTimeout(() => { + uni.showToast({ + title: '没有更多数据了!', + icon: 'none' + }); + }, 500); + } + } + logoservice.MoneystatementList(this.queryPage).then(result => { + + let queryList = result.data + // 下拉更新时,查询结果集 + // 触底更新时,当前列表+查询结果集 + let newList = this.LoupanList.concat(queryList) + this.LoupanList = newList + //console.log(this.LoupanList) + //分页对象处理 + this.queryPage.total = result.total; + this.queryPage.per_page = result.per_page; + this.order_amount = result.gross_profit_total; + this.total_mount = result.total_mount; + //停止当前页面下拉刷新 + if (this.dataLoadState.pullDownRefresh) uni.stopPullDownRefresh(); + //数据加载状态处理 false + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + + setTimeout(() => { + uni.hideLoading(); + //this.loadBottomComplete = true; + }, 500); + + //uni.hideLoading(); + this.long = true + //this.queryPage.page = this.queryPage.page + 1; + + //uni.showToast({ title: '加载成功', icon: 'none' }); + }).catch(err => { + this.loadBottomComplete = true; + // 停止当前页面下拉刷新 + if (this.dataLoadState.pullDownRefresh) uni.stopPullDownRefresh(); + // 数据加载状态处理 false + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + uni.hideLoading(); + uni.showToast({ + title: err.msg ? err.msg : err.data, + icon: 'none' + }); + }); + }, + //返回顶部 + totop() { + uni.pageScrollTo({ + scrollTop: 0, + duration: 200 + }); + this.totopstatus = false + }, + touchEnd(e) { + if (e.mp.changedTouches[0].pageY > 1000) { + this.totopstatus = true + } else { + this.totopstatus = false + } + }, + //做滚动加载使用 + // loadMore() { + // console.log("loadMore进来") + // if (Math.ceil(this.queryPage.total / this.queryPage.per_page) < this.queryPage.page) { + // return setTimeout(() => { + // uni.showToast({ + // title: '没有更多数据了!', + // icon: 'none' + // }); + // }, 500); + // } + // this.queryPage.page = this.queryPage.page + 1; + // this.loadGoodsList(Enums.DATA_DIRECTION.DOWN); + // }, + cancel(type) { + this.$refs['show' + type].close() + }, + change(e) { + //console.log('是否打开:' + e.show) + }, + togglePopup() { + this.$nextTick(() => { + this.$refs['show' + 'share'].open() + }) + }, + + //选择月份 + selectMonth(item) { + if (item.status == -20) { + this.goods_name = "" + this.queryPage.status = null; + } else { + this.goods_name = item.value ? item.value : null + this.queryPage.status = item.status; + } + this.$refs['show' + 'share'].close(); + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + this.queryPage.page = 1; + this.queryPage.total = 0; + this.LoupanList = [] + this.loadGoodsList(Enums.DATA_DIRECTION.UP); + }, + + //代理订单订单类型proxy,0我的订单,1代理订单 + //加载全部商品类型数据 + getGoodsAttrList() { + logoservice.MoneystatementList({ + m: 'Money/getOrderStatus', + machine_id: this.queryPage.machine_id, + sub: 1 + }).then(result => { + this.goodsItem = result; + this.goodsItem.unshift({ + status: "-20", + value: "全部" + }) + }).catch(res => { + uni.showToast({ + title: res.msg ? res.msg : '未查到商品类型选择', + icon: 'none' + }); + }); + }, + // 刷新状态 + mentDetail(id) { + logoservice.MoneystatementDetail({ + m: 'Money/orderDetail', + id: id + }).then(result => { + this.LoupanList.forEach(item => { + if (item.id == id) { + item.is_pay = result.is_pay + item.status = result.status + } + }) + }).catch(err => {}); + } + }, + //下拉加载 + onPullDownRefresh() { + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + this.queryPage.page = 1; + this.queryPage.total = 0; + this.LoupanList = [] + this.loadGoodsList(Enums.DATA_DIRECTION.UP); + this.getGoodsAttrList() + }, + //上拉加载 + onReachBottom() { + if (this.LoupanList.length < 12) { + return setTimeout(() => { + uni.showToast({ + title: '没有更多数据了!', + icon: 'none' + }); + }, 300); + } + this.queryPage.page = this.queryPage.page + 1; + // var page = this.queryPage.page + 1; //获取当前页数并+1 + // this.setData({ + // queryPage : page, //更新当前页数 + // }) + + this.loadGoodsList(Enums.DATA_DIRECTION.DOWN); + }, + onLoad(options) { + // 设置时间 + // 门店关联 + + + if (options.shop_id) { + this.queryPage.shop_id = options.shop_id + wx.setNavigationBarTitle({ + title: options.shop_name + }) + this.queryPage.day = null + this.queryPage.month = null + this.queryPage.year = null + } + // 设备关联 + if (options.machineid) { + this.queryPage.machine_id = options.machineid + wx.setNavigationBarTitle({ + title: options.machineid + }) + this.queryPage.day = null + this.queryPage.month = null + this.queryPage.year = null + // this.pickerValueArray = ['month'] + // //获取本月 + // let myDate = new Date(); + // let myMonth = myDate.getMonth() + 1; + // if (myMonth < 10) { + // myMonth = '0' + myMonth; //补齐 + // } + // this.queryPage.day = null + // this.queryPage.month = myDate.getFullYear() + '-' + myMonth + } + if (options.start_time) { + this.queryPage.start_time = options.start_time + } + if (options.end_time) { + this.queryPage.end_time = options.end_time + } + if (options.is_pay) { + this.queryPage.is_pay = options.is_pay + } + if (options.datetext) { + this.datetext = options.datetext + } + + if (options.day) { + this.queryPage.day = options.day + } + + if (options.month) { + this.queryPage.month = options.month + } + + if (options.proxy) { + this.queryPage.proxy = options.proxy + } + + if (options.goods_name) { + this.queryPage.goods_name = options.goods_name + } + + + + if (options.date != 'undefined' && options.date != null) { + if (options.date == 'yesterday') { + this.pickerValueArray = ['yesterday'] + // 获取昨天的日期 + let myDate = new Date(); + let myMonth = myDate.getMonth() + 1; + if (myMonth < 10) { + myMonth = '0' + myMonth; //补齐 + } + let mydate = myDate.getDate() - 1; + if (mydate < 10) { + mydate = '0' + mydate; //补齐 + } + this.queryPage.day = myDate.getFullYear() + '-' + myMonth + '-' + mydate; + } + if (options.date == 'month') { + this.pickerValueArray = ['month'] + // 获取本月 + let myDate = new Date(); + let myMonth = myDate.getMonth() + 1; + if (myMonth < 10) { + myMonth = '0' + myMonth; //补齐 + } + this.queryPage.day = null + this.queryPage.month = myDate.getFullYear() + '-' + myMonth + } + } + + //console.log("订单日期后"+this.queryPage.date); + if (this.queryPage.day ) { + + } else { + if ((options.machineid == '' || options.machineid == null) && this.queryPage.month == null) { + //console.log("进来"+ this.queryPage.month) + this.getMonth() + this.pickerValueArray = ['month'] + } + } + + if (options.goods_name != 'undefined' && options.goods_name != null && options.goods_name != '') { + wx.setNavigationBarTitle({ + title: "订单列表" + }) + this.goodSize = { + goods_name: options.goods_name, + goods_specs: options.goods_specs, + ///status: this.queryPage.status != null ? this.queryPage.status : null , + } + this.queryPage.day = null + this.queryPage.month = null + this.queryPage.year = null + // this.pickerValueArray = ['month'] + // 获取本月 + // let myDate = new Date(); + // let myMonth = myDate.getMonth() + 1; + // if (myMonth < 10) { + // myMonth = '0' + myMonth; //补齐 + // } + // this.queryPage.day = null + // this.queryPage.month = myDate.getFullYear() + '-' + myMonth + } + + + this.getGoodsAttrList(); + if (this.goodSize != null) { + //console.log("111"); + this.selectMonth(this.goodSize); + } else { + this.LoupanList = [] + this.queryPage.page = 1; + this.queryPage.total = 0; + //console.log("222"); + this.loadGoodsList(Enums.DATA_DIRECTION.UP); + } + + + // uni.login({ + // provider: 'weixin', + // success: (res) => { + // logoservice.login({ + // m: 'Init/init', + // code: res.code + // }).then(result => { + // logoservice.setwixinInfo(result); + // this.getGoodsAttrList(); + // if (this.goodSize != null) { + // //console.log("111"); + // this.selectMonth(this.goodSize); + // } else { + // this.LoupanList = [] + // this.queryPage.page = 1; + // this.queryPage.total = 0; + // //console.log("222"); + // this.loadGoodsList(Enums.DATA_DIRECTION.UP); + // } + // }).catch(err => { + // uni.navigateTo({ + // url: 'login', + // }); + // }) + // }, + // fail: (err) => { + // console.error('授权登录失败:' + JSON.stringify(err)); + // } + // }); + }, + onShow(id) { + //console.log(id) + // console.log('-------onShow') + if (id) { + this.mentDetail(id) + } + // this.dataLoadState.pullDownRefresh = false; + // this.dataLoadState.reachBottom = false; + // this.queryPage.page = 1; + // this.queryPage.total = 0; + // this.LoupanList = [] + // this.loadGoodsList(Enums.DATA_DIRECTION.UP); + // this.getGoodsAttrList() + } + }; +</script> + +<style lang="scss"> + page { + width: 100%; + height: 100%; + background: #FFFFFF; + } + + .butn { + font-size: 30upx; + font-weight: 400; + height: 100upx; + line-height: 100upx; + text-align: center; + width: 100%; + } + + /*底部分享 */ + .uni-share { + display: flex; + flex-direction: column; + } + + .uni-share-btn { + height: 90upx; + line-height: 90upx; + font-size: 26upx; + text-align: center; + background: #FFFFFF; + } + + .eq_list { + width: 100%; + padding: 0upx 20upx; + background: #FFFFFF; + height:130upx; + + .eq_list_div { + border-top: 1upx solid #F5F5F5; + padding: 30upx 0; + + .eq_list_ul { + display: flex; + align-items: center; + line-height: 40upx; + + .eq_list_ul_left { + width: 500upx; + } + + .eq_list_ul_right { + width: calc(100% - 300upx); + text-align: right; + font-weight: 400; + } + } + } + } + + //返回顶部 + .to-top { + position: fixed; + bottom: 150upx; + right: 30upx; + width: 80upx; + height: 80upx; + border-radius: 50%; + text-align: center; + line-height: 80upx; + // box-shadow: 5upx 5upx 5upx #ebeef5; + transform: rotate(-90deg); + background: #000; + opacity: 0.5; + z-index: 999; + } + + .to-top-icon { + color: #FFFFFF; + } + + .uni-share { + display: flex; + flex-direction: column; + } + + .uni-share-btn { + height: 90rpx; + line-height: 90rpx; + font-size: 14px; + text-align: center; + color: #666; + background: #FFFFFF; + border-top: 1px solid #EEEEEE; + } + + .green { + background-color: #4FB36B !important; + color: #FFFFFF; + } +</style> diff --git a/pages/store/equipment_list.vue b/pages/store/equipment_list.vue new file mode 100644 index 0000000..bd5deac --- /dev/null +++ b/pages/store/equipment_list.vue @@ -0,0 +1,360 @@ +<template> + <view class="full-width content-color full-height" style="position: relative;"> + <view class="full-width"> + <!-- 动态数据 --> + <view scroll-y @scrolltolower="loadMore()" class="full-width" @touchend="touchEnd" v-if="long"> + <view style="padding-bottom: 100upx;"> + <view v-for="(item, index) in LoupanList" :key="index" @click="store(item)" class="eq_list"> + <view class="full-width eq_list_top"> + <text class="eq_list_top_left">{{item.code}}-{{item.id}}</text> + <!-- 设备状态 0:离线 1:正常 2:生产中 3:故障 4:调试 5:升级中 --> + <text v-if="item.status.value == 0" class="eq_list_top_right_fault" style="background:#F56364;">离线</text> + <text v-if="item.status.value == 1" class="eq_list_top_right_fault" style="background:#5CE6B5;">正常</text> + <text v-if="item.status.value == 2" class="eq_list_top_right_fault" style="background:#5CE6B5;">生产中</text> + <text v-if="item.status.value == 3" class="eq_list_top_right_fault" style="background:#F2A03E;">故障</text> + <text v-if="item.status.value == 4" class="eq_list_top_right_fault" style="background:#F2A03E;">调试</text> + <text v-if="item.status.value == 5" class="eq_list_top_right_fault" style="background:#F2A03E;">升级中</text> + </view> + <view class="full-width eq_list_ul" style="line-height: 70upx;"> + <text class="eq_list_ul_left">店铺<strong></strong></text> + <text class="eq_list_ul_right">{{category(item)}}</text> + </view> + + <view class="full-width eq_list_ul" style="line-height: 70upx;"> + <text class="eq_list_ul_left">所属代理<strong></strong></text> + <text v-if="Userres_partner_id == 0" class="eq_list_ul_right">{{item.partner.name}}</text> + <text v-else class="eq_list_ul_right">{{partnername(item.partner_id,item.partner)}}</text> + </view> + + <view class="full-width eq_list_ul" style="line-height: 70upx;"> + <text class="eq_list_ul_left">设备图片<strong></strong></text> + <view class="eq_list_ul_right"> + <image @click.stop="previewImage(item.cover)" v-if="item.cover" :src="item.cover + '?x-oss-process=image/resize,lfit,w_300'" + mode="aspectFit" style="width:66upx; height:66upx; border-radius:10upx; display: block; float: right;"></image> + <text v-else>暂未上传</text> + </view> + </view> + <!-- <view v-for="(itemstock, indexstock) in item.stock" :key="indexstock"> + <view class="full-width eq_list_ul"> + <text class="eq_list_ul_left">{{itemstock.name}}</text> + <label class="eq_list_ul_right"> + 【<label v-for="(val, k) in itemstock.sub" :key="k"> + <text v-if="val.stock >= 10">{{val.goods_size}}({{val.stock}})<text v-if="k<itemstock.sub.length-1">,</text></text> + <text v-if="val.stock < 10 && val.stock != 0" style="color:#F2A03E;">{{val.goods_size}}({{val.stock}})<text v-if="k<itemstock.sub.length-1">,</text></text> + <text v-if="val.stock == 0" style="color:#E72C32;">{{val.goods_size}}({{val.stock}})<text v-if="k<itemstock.sub.length-1">,</text></text> + </label>】 + </label> + </view> + </view> --> + </view> + </view> + <!-- 暂无相关信息 --> + <view class="align-center content-color" style="position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%);" + v-if="LoupanList.length == 0 || LoupanList.length == null"> + <span class="iconfont icon-wushuju" style="font-size: 100upx; text-align: center; color: #B2B2B2;"></span> + <view style="color: #B2B2B2; text-align: center; line-height: 50upx;font-size: 24upx;">暂无相关设备信息</view> + </view> + </view> + <!-- 动态数据完 --> + </view> + <!-- 返回顶部 --> + <view v-if="totopstatus" class="to-top content-color" @click="totop()"> + <view class="fa fa-angle-right to-top-icon"></view> + </view> + <!-- 自定义底部 --> + <!-- <foot action="3"></foot> --> + </view> +</template> + +<script> + import uniIcon from '@/components/uni-icon/uni-icon.vue'; + import Enums from '@/util/Enums'; + import Env from '@/util/Env.js'; + // 自定义底部 + import foot from '../../components/foot.vue'; + import logoservice from '@/service/logoservice.js'; + export default { + components: { + uniIcon, + foot + }, + computed: {}, + data() { + return { + long: false, + LoupanList: [], //数据 + // 返回顶部 + totopstatus: false, + // 上拉状态 + dataLoadState: { + pullDownRefresh: false, + reachBottom: false + }, + queryPage: { + m: 'Machine/list', + page: 1, + per_page: 6, + stock:null, //0:查询缺货设备 + status:null, //good:好的设备,bad:坏的设备,其它所有设备 + count: 0 + }, + Userres_partner_id:null, + }; + }, + methods: { + partnername(partner_id,partner){ + var partner_name = '尚未铺设'; + if (partner) { + partner.forEach(item => { + if (item.id == partner_id) { + partner_name = item.name + } + }); + } + return partner_name + }, + category(item) { + var dataname = '尚未铺设'; + if (item.shop) { + item.shop.forEach(sub_item => { + if (item.shop_id == sub_item.id) { + dataname = sub_item.short_name + } + }); + } + return dataname + }, + // 加载数据 + loadGoodsList(direction) { + if (this.dataLoadState.pullDownRefresh || this.dataLoadState.reachBottom) return; + uni.showLoading({ + title: '正在加载中...' + }) + this.dataLoadState.pullDownRefresh = direction === Enums.DATA_DIRECTION.UP; + this.dataLoadState.reachBottom = direction === Enums.DATA_DIRECTION.DOWN; + if (this.dataLoadState.reachBottom) { + if (Math.ceil(this.queryPage.count / this.queryPage.per_page) < this.queryPage.page) { + return setTimeout(() => { + uni.showToast({ + title: '没有更多数据了!', + icon: 'none' + }); + }, 500); + } + } + logoservice.Machinelist(this.queryPage).then(result => { + // console.log(result.data) + this.long = true + let queryList = result.data + + + queryList.forEach(item => { + item.category.forEach(itemone => { + if (itemone.id == item.machine_category_id) { + item.machine_category_text = itemone.title + } + }) + }) + + // 下拉更新时,查询结果集 + // 触底更新时,当前列表+查询结果集 + let newList = this.LoupanList.concat(queryList) + this.LoupanList = newList + // console.log(this.LoupanList) + // 分页对象处理 + this.queryPage.count = result.count; + this.queryPage.per_page = result.per_page; + // 停止当前页面下拉刷新 + if (this.dataLoadState.pullDownRefresh) uni.stopPullDownRefresh(); + // 数据加载状态处理 false + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + uni.hideLoading(); + // uni.showToast({ title: '加载成功', icon: 'none' }); + }).catch(err => { + // 停止当前页面下拉刷新 + if (this.dataLoadState.pullDownRefresh) uni.stopPullDownRefresh(); + // 数据加载状态处理 false + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + uni.hideLoading(); + }); + }, + store(item) { + uni.navigateTo({ + url: '../mall/eq-details?id=' + item.id, + }); + }, + // 返回顶部 + totop() { + uni.pageScrollTo({ + scrollTop: 0, + duration: 300 + }); + this.totopstatus = false + }, + touchEnd(e) { + if (e.mp.changedTouches[0].pageY > 1200) { + this.totopstatus = true + } else { + this.totopstatus = false + } + }, + // 做滚动加载使用 + loadMore() { + if (Math.ceil(this.queryPage.count / this.queryPage.per_page) < this.queryPage.page) { + return setTimeout(() => { + uni.showToast({ + title: '没有更多数据了!', + icon: 'none' + }); + }, 500); + } + this.queryPage.page = this.queryPage.page + 1; + this.loadGoodsList(Enums.DATA_DIRECTION.DOWN); + }, + }, + // 下拉加载 + onPullDownRefresh() { + this.dataLoadState.pullDownRefresh = false; + this.dataLoadState.reachBottom = false; + this.queryPage.page = 1; + this.queryPage.count = 0; + this.LoupanList = [] + this.loadGoodsList(Enums.DATA_DIRECTION.UP); + }, + // 上拉加载 + onReachBottom() { + console.log('上拉加载') + if (this.LoupanList.length < 6) { + return setTimeout(() => { + uni.showToast({ + title: '没有更多数据了!', + icon: 'none' + }); + }, 500); + } + this.queryPage.page = this.queryPage.page + 1; + this.loadGoodsList(Enums.DATA_DIRECTION.DOWN); + }, + onLoad(options) { + console.log(options.status) + if(options.status == 'good'){ + this.queryPage.status = 'good' + wx.setNavigationBarTitle({title: '正常设备'}) + } + if(options.status == 'bad'){ + this.queryPage.status = 'bad' + wx.setNavigationBarTitle({title: '问题设备'}) + } + if(options.status == '0'){ + this.queryPage.stock = '0' + wx.setNavigationBarTitle({title: '缺货设备'}) + } + + uni.login({ + provider: 'weixin', + success: (res) => { + logoservice.login({ + m: 'Init/init', + code: res.code + }).then(result => { + this.$base.Userres = result //记录用户登录信息 + this.Userres_partner_id = this.$base.Userres.partner_id //总代理 + logoservice.setwixinInfo(result); + this.LoupanList = [] + this.queryPage.page = 1; + this.queryPage.count = 0; + this.loadGoodsList(Enums.DATA_DIRECTION.UP); + }).catch(err => { + uni.navigateTo({ + url: 'login', + }); + }) + }, + fail: (err) => { + console.error('授权登录失败:' + JSON.stringify(err)); + } + }); + }, + onShow() { + + } + }; +</script> + +<style lang="scss"> + page { + width: 100%; + height: 100%; + background: #FFFFFF; + } + + .eq_list { + width: calc(100% - 60upx); + margin: 30upx 30upx 0; + padding: 10upx 20upx; + border-radius: 10upx; + background: #FFFFFF; + box-shadow: 0px 0px 20px 0px rgba(51, 51, 51, 0.1); + .eq_list_top { + border-bottom: 1upx solid #EBEEF5; + overflow: hidden; + padding: 10upx 0; + + .eq_list_top_left { + float: left; + // width: 150upx; + padding: 6upx 0upx; + font-weight: bold; + font-size: 36upx; + } + + .eq_list_top_right_fault { + float: right; + background: #E72C31; + font-size: 24upx; + padding: 10upx 18upx; + color: #FFFFFF; + border-radius: 30upx; + } + + } + + .eq_list_ul { + display: flex; + align-items: center; + line-height: 45upx; + + .eq_list_ul_left { + width: 150upx; + } + + .eq_list_ul_right { + width: calc(100% - 150upx); + text-align: right; + } + } + } + + // 返回顶部 + .to-top { + position: fixed; + bottom: 150upx; + right: 30upx; + width: 80upx; + height: 80upx; + border-radius: 50%; + text-align: center; + line-height: 80upx; + // box-shadow: 5upx 5upx 5upx #ebeef5; + transform: rotate(-90deg); + background: #000; + opacity: 0.5; + z-index: 999; + } + + .to-top-icon { + color: #FFFFFF; + } +</style> diff --git a/pages/store/shopdetails.vue b/pages/store/shopdetails.vue new file mode 100644 index 0000000..b93a1b8 --- /dev/null +++ b/pages/store/shopdetails.vue @@ -0,0 +1,679 @@ +<template> + <view class="edit-address full-height full-width"> + + <view class="item-new-list" v-if="machine_id != '' &&machine_id !=null "> + <view class="item full-width"> + <label class="text content-color">设备编号</label> + <label class="value content-color"> + + <!-- <view style="text-align: right;" class="full-width" v-if="list.partner_id">{{agentReturn(list.partner_id)}}</view> --> + <view style="text-align: right; color: #888888;margin-top: -35upx;" class="full-width"> + {{machine_id}}</view> + <!-- <label class="fa fa-angle-right align-right sub-color"></label> --> + + <!-- <text style="text-align: right;" class="full-width" style="margin-left: 340upx; ">{{machine_id}} 1111111</text> --> + </label> + </view> + </view> + + + + <view class="form full-width"> + + <view class="item full-width" @click="showPicker('agent')" v-if="Userres_partner_id == 0"> + <label class="text content-color">所属代理</label> + <label class="value content-color"> + + + <view style="text-align: right;" class="full-width" v-if="list.partner_id"> + {{agentReturn(list.partner_id)}}</view> + <view style="text-align: right; color: #888888;" class="full-width" v-if="!list.partner_id">请选择所属代理 + </view> + <label class="fa fa-angle-right align-right sub-color"></label> + + </label> + </view> + + + + + <view class="item full-width" @click="showPicker('shop_category_id')"> + <label class="text content-color">店铺分类</label> + <label class="value content-color"> + <view style="text-align: right;" class="full-width" v-if="list.shop_category_id"> + {{category(list.shop_category_id)}}</view> + <view style="text-align: right; color: #888888;" class="full-width" v-if="!list.shop_category_id"> + 请选择店铺分类</view> + <label class="fa fa-angle-right align-right sub-color"></label> + </label> + </view> + + <view class="item full-width" @click="openmap" style="min-height: 90upx; height: auto;"> + <label class="text content-color">店铺地址</label> + <label class="value content-color"> + <view class="full-width" style="text-align: right;" v-if="list">{{jiequ(list.address) || ''}}</view> + <view class="full-width" style="text-align: right; color: #888888; margin-right: 10px;" + v-if="!list.address">请选择地址</view> + <label class="fa fa-angle-right align-right sub-color"></label> + </label> + </view> + + <view class="item full-width"> + <label class="text content-color">店铺名称</label> + <label class="value content-color"> + <input type="text" v-model="list.short_name" class="full-width" placeholder="请输入店铺名称" /> + <label class="fa fa-angle-right align-right sub-color"></label> + </label> + </view> + <!-- <view class="item full-width"> + <label class="text content-color">负责人</label> + <label class="value content-color"> + <input type="text" v-model="list.owner" class="full-width" placeholder="请输入负责人" /> + <label class="fa fa-angle-right align-right sub-color"></label> + </label> + </view> --> + + <!-- <view class="item full-width" @click="chooseImage()"> + <label class="text content-color">店铺图片</label> + <label class="value content-color"> + <input v-if="!list.image" type="text" disabled="disabled" class="full-width" placeholder="请上传店铺图片" /> + <input v-if="list.image" type="text" disabled="disabled" class="full-width" /> + <image v-if="list.image" :src="list.image + '?x-oss-process=image/resize,lfit,w_640'" mode="aspectFit" style="width:66upx; height:66upx; border-radius:10upx; display: block; float: right;"></image> + <label class="fa fa-angle-right align-right sub-color"></label> + </label> + </view> + <view class="item full-width"> + <label class="text content-color">联系电话</label> + <label class="value content-color"> + <input type="number" v-model="list.phone" class="full-width" placeholder="请输入联系电话" /> + <label class="fa fa-angle-right align-right sub-color"></label> + </label> + </view> --> + + <view class="item full-width"> + <label class="text content-color">营业时间(起)</label> + <label class="value content-color"> + <picker class="full-width" mode="time" :value="list.start_time" start="00:00" end="23:59" + @change="starttimeChange"> + <view style="text-align: right;" v-if="list.start_time">{{list.start_time}}</view> + <view style="text-align: right; color: #888888;" v-if="!list.start_time">请选择营业时间</view> + </picker> + <label class="fa fa-angle-right align-right sub-color"></label> + </label> + </view> + <view class="item full-width"> + <label class="text content-color">营业时间(末)</label> + <label class="value content-color"> + <picker class="full-width" mode="time" :value="list.end_time" start="00:00" end="23:59" + @change="endtimeChange"> + <view style="text-align: right;" v-if="list.end_time">{{list.end_time}}</view> + <view style="text-align: right; color: #888888;" v-if="!list.end_time">请选择营业时间</view> + </picker> + <label class="fa fa-angle-right align-right sub-color"></label> + </label> + </view> + + <!-- <view class="item full-width" @click="showPicker('per_consum')"> + <label class="text content-color">人均消费</label> + <label class="value content-color"> + <input type="text" disabled="disabled" v-model="list.per_consum" class="full-width" placeholder="请选择人均消费" /> + <label class="fa fa-angle-right align-right sub-color"></label> + </label> + </view> + --> + <view class="item full-width" @click="profit()" v-if="id"> + <label class="text content-color" style="width: 300upx;color: #5CE6B5;">查看门店关联收益</label> + <label class="value content-color" style="width: calc(100% - 300upx);"> + <input type="text" disabled="disabled" class="full-width" /> + <label class="fa fa-angle-right align-right sub-color"></label> + </label> + </view> + + <view class="item full-width" @click="toorder()" v-if="id"> + <label class="text content-color" style="width: 300upx;color: #5CE6B5;">查看门店关联订单</label> + <label class="value content-color" style="width: calc(100% - 300upx);"> + <input type="text" disabled="disabled" class="full-width" /> + <label class="fa fa-angle-right align-right sub-color"></label> + </label> + </view> + + </view> + + <mpvue-picker ref="mpvuePicker" :themeColor="'#53B2B0'" :mode="mode" :pickerValueDefault="pickerValueDefault" + @onChange="onChange" @onConfirm="onConfirm" @onCancel="onCancel" + :pickerValueArray="pickerValueArray"></mpvue-picker> + <view class="footer" style="bottom: 100upx;"> + <view class="footer_but" @click="onSave()">保存</view> + </view> + <view class="footer" style="display: flex; + flex-direction: row; + color: #333; + font-size: 32upx; + bottom: 20upx; + justify-content: center;"> + <checkbox checked="checked"> </checkbox> + 我已经阅读同意 <view style="color:rgba(92, 230, 182, 1);" @click="toUserAgreement()"> 用户协议 </view> + 和 + <view style="color:rgba(92, 230, 182, 1);" @click="toPrivacyPolicy()">隐私协议 </view> + </view> + </view> +</template> + +<script> + import mpvuePicker from '../../components/mpvue-picker/mpvuePicker.vue'; + import logoservice from '@/service/logoservice.js'; + export default { + components: { + mpvuePicker + }, + computed: { + + }, + data() { + return { + list: { + m: 'Shop/save' + }, + id: null, + loading: false, + //end + SortNumber: 1, + mode: 'selector', + pickerValueArray: [], + pickerValueDefault: [0], + start: 1, + item: null, + per_consum_list: [{ + label: '1-50元', + value: 0 + }, + { + label: '50-100元', + value: 1 + }, + { + label: '超过200', + value: 2 + } + ], + agentList: null, + Userres_partner_id: null, + machine: null, + machine_id: null, + } + }, + methods: { + + //用户协议 + toUserAgreement() { + uni.navigateTo({ + url: '../mine/UserAgreement' + }); + }, + + //隐私政策 + toPrivacyPolicy() { + uni.navigateTo({ + url: '../mine/PrivacyPolicy' + }); + }, + + //查看代理关联收益 + profit() { + uni.navigateTo({ + url: '../mall/eq-profit?shop_id=' + this.list.id + '&shop_name=' + this.list.short_name, + }); + }, + + //查看代理关联订单 + toorder() { + uni.navigateTo({ + url: '../mine/order?shop_id=' + this.list.id + '&shop_name=' + this.list.short_name, + }); + }, + + jiequ(e) { + if (e != undefined) { + return e.replace('<br/>', '') + } + }, + + setData(obj) { + let that = this; + let keys = []; + let val, data; + Object.keys(obj).forEach(function(key) { + keys = key.split('.'); + val = obj[key]; + data = that.$data; + keys.forEach(function(key2, index) { + if (index + 1 == keys.length) { + that.$set(data, key2, val); + } else { + if (!data[key2]) { + that.$set(data, key2, {}); + } + } + data = data[key2]; + }) + }); + }, + + category(time) { + var times = ''; + if (this.list.category) { + this.list.category.forEach(item => { + if (item.id == time) { + times = item.title + } + }); + } + return times + }, + agentReturn(id) { + let partner_name = ''; + if (this.agentList) { + this.agentList.forEach(item => { + if (item.id == id) { + partner_name = item.label + } + }); + } + return partner_name + }, + // 选择时间 + starttimeChange(e) { + this.list.start_time = e.target.value + }, + // 选择时间 + endtimeChange(e) { + this.list.end_time = e.target.value + }, + chooseImage: async function() { + var _this = this + uni.chooseImage({ + sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有 + sourceType: ['camera', 'album'], //从相册选择 + count: 1, + success: (res) => { + let tempFilePaths = res.tempFilePaths; + uni.showLoading({ + title: '图片正在上传...' + }) + // 'https://tprint.refinecolor.com/partnerapplets/index' + let urlData = this.$Env.getBaseURL() + "/partnerapplets/index"; + wx.uploadFile({ + url: urlData, + filePath: tempFilePaths[0], + method: 'POST', + name: 'file', + header: { + 'content-type': 'multipart/form-data' + }, + formData: { + m: 'Upload/upload' + }, //请求额外的form data + success: function(res) { + //console.log(res.data); + //console.log(JSON.parse(res.data).data.url); + uni.hideLoading(); + uni.showToast({ + title: '上传成功', + icon: 'none', + duration: 3000 + }) + _this.list.image = JSON.parse(res.data).data.url + }, + fail: function(res) { + console.log(res); + uni.hideLoading(); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + } + }) + } + }) + }, + + openmap() { + var seft = this + uni.getLocation({ + type: 'gcj02', + altitude: true, + success() { + //定位权限开启,打开地图 + uni.chooseLocation({ + success: function(res) { + console.log(res) + seft.list.address = res.address + '<br/>' + res.name + seft.list.short_name = res.name + seft.list.latitude = res.latitude + seft.list.longitude = res.longitude + } + }); + }, + fail(e) { + // 定位权限未开启,引导设置 + uni.showModal({ + title: '温馨提示', + content: '您已拒绝定位,请开启', + confirmText: '去设置', + success(res) { + if (res.confirm) { + //打开授权设置 + openSetting() + } + } + }) + } + }) + }, + onSave() { + if (this.loading) return; + // if (!this.list.shop_category_id) { + // uni.showToast({ title: '主题分类不能为空!', icon: 'none' }); + // return false; + // } + this.loading = true; + uni.showLoading({ + title: '正在保存中...' + }); + const data = { + m: 'Shop/save', + id: this.list.id, + shop_category_id: this.list.shop_category_id, + short_name: this.list.short_name, + image: this.list.image, + owner: this.list.owner, + phone: this.list.phone, + tel: this.list.phone, + address: this.list.address, + latitude: this.list.latitude, + longitude: this.list.longitude, + start_time: this.list.start_time, + end_time: this.list.end_time, + per_consum: this.list.per_consum, + cooperation_way: this.list.cooperation_way, + // machine_id:this.list.machine_id, + } + if (this.id || this.Userres_partner_id == 0) { + data.partner_id = this.list.partner_id //代理 + } else { + data.partner_id = this.Userres_partner_id //代理 + } + + if(this.machine_id != '' && this.machine_id != null){ + + data.partner_id = this.machine.partner_id + } + + + //console.log(data) + logoservice.shopsave(data).then(reuslt => { + this.loading = false; + uni.navigateBack(); + uni.hideLoading(); + }).catch(err => { + this.loading = false; + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }); + + }, + showPicker(item) { + console.log(item) + this.item = item + if (this.item == 'shop_category_id') { + this.pickerValueArray = this.list.category + this.pickerValueArray.filter(item => { + item.label = item.title + item.value = item.id + }); + } else if (this.item == 'machine_id') { + console.log(this.list.machine) + this.pickerValueArray = this.list.machine + this.pickerValueArray.filter(item => { + item.label = item.id + '(' + item.has + ')' + item.value = item.id + }); + } else if (this.item == 'per_consum') { + console.log(this.per_consum_list) + this.pickerValueArray = this.per_consum_list + } else if (this.item == 'agent') { + console.log(this.agentList) + this.pickerValueArray = this.agentList + } + this.$refs.mpvuePicker.show(); + }, + // 确定 + onConfirm(e) { + if (this.item == 'shop_category_id') { + this.list.shop_category_id = e.value[0] + } else if (this.item == 'machine_id') { + this.list.machine_id = e.value[0] + } else if (this.item == 'per_consum') { + this.list.per_consum = e.label + } else if (this.item == 'cooperation_way') { + this.list.cooperation_way = e.label + } else if (this.item == 'agent') { + this.list.partner_id = e.value[0] + } + }, + onChange(e) { + console.log(e); + }, + onCancel(e) { + console.log(e); + }, + + //设备列表详情 + listdetail() { + logoservice.Machinelistdetail({ + m: 'Machine/list', + machine_id: this.machine_id + }).then(result => { + this.long = true + uni.stopPullDownRefresh(); + uni.hideLoading(); + if (result[0] != undefined) { + this.machine = result[0] + } + }).catch(err => { + uni.hideLoading(); + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + }, + + }, + onLoad(options) { + //this.machine_id = options.machine_id + if (options.machine_id) { + this.machine_id = options.machine_id + this.listdetail(); + } + this.start = options.start + this.id = options.id + logoservice.shopdetail({ + m: 'Shop/detail', + id: this.id + }).then(result => { + console.log(result) + this.list = result + if (options.start == 2) { + // 修改页面标题 + wx.setNavigationBarTitle({ + title: this.list.short_name + }) + } + }).catch(err => { + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + + this.Userres_partner_id = this.$base.Userres.partner_id //总代理 + logoservice.receiveMoneyList({ + m: 'Init/getPartner' + }).then(result => { + this.agentList = result.list.filter(item => item.id != 0) + this.agentList.forEach(item => { + item.label = item.name + item.value = item.id + // if(item.id == result.p_id){ + // this.queryPage.partner_id = item.id + // this.queryPage.partner_name = item.name + // } + }) + }).catch(err => { + uni.showToast({ + title: err.msg, + icon: 'none' + }); + }) + /* let that = this; + //1、获取当前位置坐标 + uni.getLocation({ + type: 'gcj02', + altitude: true, + success: function(res) { + console.log(res); + var qqMapApi = 'https://apis.map.qq.com/ws/geocoder/v1/' + "?location=" + res.latitude + ',' + + res.longitude + "&key=" + '3ERBZ-WOD36-XRLSG-MMMG6-6L43F-NWB55' + "&get_poi=1"; + wx.request({ + url: qqMapApi, + data: {}, + method: 'GET', + success: (res) => { + console.log(res) + if (res.statusCode == 200 && res.data.status == 0) { + // 从返回值中提取需要的业务地理信息数据 + that.SortNumber++; + that.list.address = res.data.result.pois[0].address + res.data.result.pois[0].title; + that.list.longitude = res.data.result.location.lng; + that.list.short_name = res.data.result.pois[0].title; + that.list.SortNumber = that.SortNumber + console.log(that.list.address); + console.log(that.list.latitude); + console.log(that.list.longitude); + that.setData({ + list: that.list, + }); + } + } + }) */ + /* }, */ + /* fail(e) { + // 定位权限未开启,引导设置 + uni.showModal({ + title: '温馨提示', + content: '您已拒绝定位,请开启', + confirmText: '去设置', + success(res) { + if (res.confirm) { + //打开授权设置 + openSetting() + } + } + }) + } */ + /* }) */ + + }, + onShow() { + + } + + } +</script> + +<style lang="scss"> + page { + background: #F5F5F5; + } + + input { + text-align: right; + } + + .edit-address { + .form { + /* height: calc(100% - 128upx); */ + overflow: scroll; + width: calc(100% - 40upx); + border-radius: 20upx; + margin-left: 20upx; + box-shadow: 0 0 10upx 10upx #F5F5F5; + + + .item { + background: #FFFFFF; + height: 90upx; + display: flex; + align-items: center; + border-top: 1upx solid #F5F5F5; + font-size: 28upx; + padding: 0 27upx 0 32upx; + width: calc(100% - 60upx); + + .text { + width: 200upx; + } + + .value { + width: calc(100% - 200upx); + display: flex; + align-items: center; + + .prick { + width: calc(100% - 40upx); + } + + .fa-angle-right { + width: 40upx; + font-size: 50upx; + } + } + } + } + + .footer { + position: fixed; + bottom: 20upx; + width: 100%; + + .footer_but { + width: calc(100% - 60upx); + margin: 0upx auto 0; + color: #fff; + height: 88upx; + text-align: center; + line-height: 88upx; + background: rgba(92, 230, 182, 1); + border-radius: 10upx; + } + } + } + + + .item-new-list { + padding-top: 25upx; + padding-left: 30upx; + padding-right: 30upx; + padding-bottom: 25upx; + width: calc(100% - 100upx); + color: #000; + background: #fff; + margin: 30upx 20upx 20upx 20upx; + border-radius: 18upx; + box-shadow: 0 0 10upx 10upx #F5F5F5; + //margin-top: 40upx; + } +</style> \ No newline at end of file diff --git a/project.config.json b/project.config.json new file mode 100644 index 0000000..ac13b53 --- /dev/null +++ b/project.config.json @@ -0,0 +1,28 @@ +{ + "appid": "wx9cd3934f286f3d71", + "compileType": "miniprogram", + "libVersion": "2.30.3", + "packOptions": { + "ignore": [], + "include": [] + }, + "setting": { + "coverView": true, + "es6": true, + "postcss": true, + "minified": true, + "enhance": true, + "showShadowRootInWxmlPanel": true, + "packNpmRelationList": [], + "babelSetting": { + "ignore": [], + "disablePlugins": [], + "outputPath": "" + } + }, + "condition": {}, + "editorSetting": { + "tabIndent": "insertSpaces", + "tabSize": 4 + } +} \ No newline at end of file diff --git a/project.private.config.json b/project.private.config.json new file mode 100644 index 0000000..7d6cb61 --- /dev/null +++ b/project.private.config.json @@ -0,0 +1,7 @@ +{ + "description": "项目私有配置文件。此文件中的内容将覆盖 project.config.json 中的相同字段。项目的改动优先同步到此文件中。详见文档:https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html", + "projectname": "app_proxy", + "setting": { + "compileHotReLoad": true + } +} \ No newline at end of file diff --git a/service/BaseService.js b/service/BaseService.js new file mode 100644 index 0000000..a8ba9c4 --- /dev/null +++ b/service/BaseService.js @@ -0,0 +1,138 @@ +import $n from '../util/nothing' +import $store from '../store' +import Enums from '../util/Enums' +/** + * vuex Store 的 action 调用 + * @param {*} action 调用的action名 + * @param {*} params 参数 + */ +export function _dispatch (action, params) { + return $store.dispatch(action, params) +} + +/** + * vuex Store 的 getters 引用 + * @param {*} getters Store中引用的getters属性名 + * @param {*} defaultValue 默认值(结果为空时) + */ +export function _getters (getters, defaultValue = null) { + return $n._ifNull($store.getters[getters], defaultValue) +} + +/** + * 基于Promise调用API + * @param {*} + */ +export function _callAPI ({callFun = Function, callParams = [], callBack, resultType = Enums.DataType.JSON} = {}) { + return new Promise((resolve, reject) => { + callFun(...callParams).then(({ code, count, data, per_page, msg}) => { + if (code === 0) { + data = $n._caseValue( + resultType, + Enums.DataType.JSON, $n._ifNull(data, {}), + Enums.DataType.ARRAY, $n._ifNull(data, []), + Enums.DataType.DATE, $n._isNotNull(data) ? new Date(data) : null, + Enums.DataType.STRING, $n._ifNull(data, null), + Enums.DataType.NUMBER, Number($n._ifNull(data, 0)), + data + ) + if (callBack) callBack(data) + resolve(data) + } else throw {code:code,data:data,msg:msg} || '执行 [' + callFun.name + '] 发生未知错误.' + }).catch(err => reject(err)) + }) +} + +/** + * 基于Promise调用API + * @param {*} + */ +export function _callAPIone ({callFun = Function, callParams = [], callBack, resultType = Enums.DataType.JSON} = {}) { + return new Promise((resolve, reject) => { + callFun(...callParams).then(({ code, count, data, per_page, msg,total}) => { + if (code === 0) { + data = $n._caseValue( + resultType, + Enums.DataType.JSON, $n._ifNull(data, {}), + Enums.DataType.ARRAY, $n._ifNull(data, []), + Enums.DataType.DATE, $n._isNotNull(data) ? new Date(data) : null, + Enums.DataType.STRING, $n._ifNull(data, null), + Enums.DataType.NUMBER, Number($n._ifNull(data, 0)), + code, + data, + count, + per_page, + msg, + total + ) + if (callBack) callBack({code:code,count:count,data:data,per_page:per_page,msg:msg,total:total}) + resolve({code:code,count:count,data:data,per_page:per_page,msg:msg,total:total}) + } else throw {code:code,data:data,msg:msg} || '执行 [' + callFun.name + '] 发生未知错误.' + }).catch(err => reject(err)) + }) +} + +/** + * 查询 + * @param {*} + */ +export function _query ({api, params, callBack, resultType = Enums.DataType.JSON} = {}) { + return _callAPIone({callFun: api, callParams: [params], callBack, resultType}) +} + +/** + * 修改 + * @param {*} + */ +export function _update ({api, params, callBack, resultType = Enums.DataType.JSON} = {}) { + return _callAPI({callFun: api, callParams: [params], callBack, resultType}) +} + +/** + * 保存 + * @param {*} + */ +export function _save ({api, params, callBack, resultType = Enums.DataType.JSON} = {}) { + return _callAPI({callFun: api, callParams: [params], callBack, resultType}) +} + +/** + * 删除 + * @param {*} + */ +export function _delete ({api, params, callBack, resultType = Enums.DataType.JSON} = {}) { + return _callAPI({callFun: api, callParams: [params], callBack, resultType}) +} + +/** + * 调用动作 + * @param {*} + */ +export function _callAction ({api, params, callBack, resultType = Enums.DataType.JSON, action = null} = {}) { + console.warn('############# Action: ', action) + return _callAPI({callFun: api, callParams: [params], callBack, resultType}) +} + +/** + * 列表查询 + * @param {*} + */ +export function _queryList ({api, params, callBack, resultType = Enums.DataType.ARRAY} = {}) { + return _callAPI({callFun: api, callParams: [params], callBack, resultType}) +} + +/** + * 分页查询 + * @param {*} + */ +export function _queryPage ({api, params, page, callBack, resultType = Enums.DataType.JSON} = {}) { + return _callAPI({callFun: api, callParams: [params, page], callBack, resultType}) +} + +/** + * 流式分页查询 + * @param {*} + */ +export function _queryFlowPage ({api, params, page, callBack, resultType = Enums.DataType.JSON} = {}) { + return _callAPI({callFun: api, callParams: [params, page], callBack, resultType}) +} diff --git a/service/UserService.js b/service/UserService.js new file mode 100644 index 0000000..e4ebed6 --- /dev/null +++ b/service/UserService.js @@ -0,0 +1,48 @@ +import { + _login, + _queryUser, + _refreshToken +} from '../api/UserApi' +import { + _query, + _getters, + _dispatch +} from './BaseService' +import Cache from '@/cache' + +const service = { + cacheAppUser: (appUser) => Cache.setSync(Cache.$Keys.app.APP_USER, appUser), // 缓存app信息 + cacheWxInfo: (wxInfo) => Cache.setSync(Cache.$Keys.app.WX_INFO, wxInfo), // 缓存微信信息 + cacheUserInfo: (userInfo) => Cache.setSync(Cache.$Keys.app.USER_INFO, userInfo), // 缓存用户信息 + + getCacheAppUser: () => Cache.getSync(Cache.$Keys.app.APP_USER), // 获取缓存中的app信息 + getCacheWxInfo: () => Cache.getSync(Cache.$Keys.app.wxInfo), // 获取缓存中的微信信息 + getCacheUserInfo: () => Cache.getSync(Cache.$Keys.app.USER_INFO), // 获取缓存中的用户信息 + // 保存aap信息到store中 + setToken: (token = null) => _dispatch('setToken', token), // 设置新Token到store中 + setUserInfo: (user = {}) => _dispatch('setUserInfo', user), // 保存用户信息到store中 + setWxInfo: (wxInfo = {}) => _dispatch('setWxInfo', wxInfo), // 保存微信信息到store中 + // 获取store中的app信息 + getWxInfo: () => _getters('wxInfo', {}), // 获取store中的微信信息 + getUserInfo: () => _getters('userInfo', {}), // 获取store中的用户信息 + + /** + * login 登录 + * queryUser 查询用户信息 + * refreshToken 刷新用户Token + */ + login: (user = {}) => _query({api: _login, params: user, callBack: (data = {}) => { + // service.setAppUser(data); + // service.cacheAppUser(service.getAppUser()); + }}), + queryUser: (id = null) => _query({api: _queryUser, params: id, callBack: (data = {}) => { + service.setUserInfo(data); + service.cacheUserInfo(service.getUserInfo()); + }}), + refreshToken: (oldToken = null) => _query({api: _refreshToken, params: oldToken, callBack: (data = {}) => { + service.setToken(service.getAppUser().tokenHead + data); + service.cacheAppUser(service.getAppUser()); + }}) +} + +export default service diff --git a/service/logoservice.js b/service/logoservice.js new file mode 100644 index 0000000..8844990 --- /dev/null +++ b/service/logoservice.js @@ -0,0 +1,231 @@ +import { + _login, + _shoplist, + route_timeout +} from '../api/logoApi' +import { + _query, + _queryPage, + _queryList, + _getters, + _dispatch +} from './BaseService' +const service = { + setforcedLogin: (brandList = []) => _dispatch('setforcedLogin', brandList), // 保存数据到store中 + sethasLogin: (hasLogin = []) => _dispatch('sethasLogin', hasLogin), // 保存数据到store中 + setuserName: (userName = []) => _dispatch('setuserName', userName), // 保存数据到store中 + setwixinInfo: (wixinInfo = {}) => _dispatch('setwixinInfo', wixinInfo), // 保存微信信息到store中 + setAppUser: (appUser = {}) => _dispatch('setAppUser', { + openid: appUser.openid, + token: appUser.token, + tokenHead: appUser.tokenHead, + currentTime: new Date().getTime() + }), + getAppUser: () => _getters('appUser', {}), // 获取store中的app信息 + getforcedLogin: () => _getters('forcedLogin', []), // 获取store中的数据 + gethasLogin: () => _getters('hasLogin', []), // 获取store中的数据 + getuserName: () => _getters('userName', []), // 获取store中的数据 + getwixinInfo: () => _getters('wixinInfo', {}), // 获取store中的微信信息 + + //方法 + login(userName,state) { + service.setuserName(userName) + service.setforcedLogin('true') + }, + + logout(state) { + service.setuserName("") + service.setforcedLogin('false') + }, + + //初始化 + login: (goods = {}) => _queryList({api: _login, params: goods, callBack: (data = {}) => { + service.setAppUser(data); + console.log(service.getAppUser()) + }}), + + //绑定微信 + bindWx: (goods = {}) => _queryList({api: _login, params: goods, callBack: (data = {}) => { + + }}), + + //Shop/list 店铺列表 + shoplist: (goods = {}) => _queryList({api: _shoplist, params: goods, callBack: (data = {}) => { + + }}), + + //Shop/detail商铺详情 + shopdetail: (goods = {}) => _queryList({api: _shoplist, params: goods, callBack: (data = {}) => { + + }}), + + //Shop/save商铺保存 + shopsave: (goods = {}) => _queryList({api: _shoplist, params: goods, callBack: (data = {}) => { + + }}), + + // Shop/del商铺删除 + shopdel: (goods = {}) => _queryList({api: _shoplist, params: goods, callBack: (data = {}) => { + + }}), + + // Machine/list 设备列表 + Machinelist: (goods = {}) => _query({api: _shoplist, params: goods, callBack: (data = {}) => { + console.log(data) + }}), + + // Machine/list 设备列表顶部设备数据 + MachineToplist: (goods = {}) => _query({api: _shoplist, params: goods, callBack: (data = {}) => { + + }}), + + //Machine/detail //获取店铺列表 + MachineGetShop: (goods = {}) => _queryList({api: _shoplist, params: goods, callBack: (data = {}) => { + + }}), + + //Machine/detail //获取充值信息列表 + PayInfoList: (goods = {}) => _queryList({api: _shoplist, params: goods, callBack: (data = {}) => { + + }}), + + //Machine/detail 设备列表详情 + Machinelistdetail: (goods = {}) => _queryList({api: _shoplist, params: goods, callBack: (data = {}) => { + + }}), + + //Machine/status 设备挂起|启动 + Machinestatus: (goods = {}) => _queryList({api: _shoplist, params: goods, callBack: (data = {}) => { + + }}), + + //捕获屏幕截图 Machine/screen + Machinescreen: (goods = {}) => _queryList({api: _shoplist, params: goods, callBack: (data = {}) => { + + }}), + + //更新设备图片 Machine/saveCover + MachinesaveCover: (goods = {}) => _queryList({api: _shoplist, params: goods, callBack: (data = {}) => { + + }}), + + // 保存设备对应库存 Machine/saveStock + MachinesaveStock: (goods = {}) => _queryList({api: _shoplist, params: goods, callBack: (data = {}) => { + + }}), + + //设备关联店铺 Machine/bindShop + MachinebindShop: (goods = {}) => _queryList({api: _shoplist, params: goods, callBack: (data = {}) => { + + }}), + + //Machine/printRecord 设备打印信息 + MachineprintRecord: (goods = {}) => _query({api: _shoplist, params: goods, callBack: (data = {}) => { + + }}), + + //Money/statementList 清算列表 + MoneystatementList: (goods = {}) => _queryList({api: _shoplist, params: goods, callBack: (data = {}) => { + + }}), + + //Money/statementDetail 清算列表详情 + MoneystatementDetail: (goods = {}) => _queryList({api: route_timeout, params: goods, callBack: (data = {}) => { + + }}), + + //Withdrawal/refund 退款原因 + Withdrawal: (goods = {}) => _queryList({api: _shoplist, params: goods, callBack: (data = {}) => { + + }}), + + //Money/login 结算中心登陆 + Moneylogin: (goods = {}) => _queryList({api: _shoplist, params: goods, callBack: (data = {}) => { + + }}), + + //Money/info 结算账户 + Moneyinfo: (goods = {}) => _queryList({api: _shoplist, params: goods, callBack: (data = {}) => { + + }}), + + //Money/saveInfo 保存账户 + MoneysaveInfo: (goods = {}) => _queryList({api: _shoplist, params: goods, callBack: (data = {}) => { + + }}), + + //Money/billList 账单列表 + MoneybillList: (goods = {}) => _queryList({api: _shoplist, params: goods, callBack: (data = {}) => { + + }}), + + //Money/billDetail 账单详情 + MoneybillDetail: (goods = {}) => _queryList({api: _shoplist, params: goods, callBack: (data = {}) => { + + }}), + + //Money/confirmBill 账单确认 + MoneyconfirmBill: (goods = {}) => _queryList({api: _shoplist, params: goods, callBack: (data = {}) => { + + }}), + + //Money/billRemark 疑惑账单 + MoneybillRemark: (goods = {}) => _queryList({api: _shoplist, params: goods, callBack: (data = {}) => { + + }}), + // Withdrawal/apply 提现申请 + Withdrawalapply: (goods = {}) => _queryList({api: _shoplist, params: goods, callBack: (data = {}) => { + + }}), + + //Withdrawal/list 提现记录 + Withdrawallist: (goods = {}) => _queryList({api: _shoplist, params: goods, callBack: (data = {}) => { + + }}), + // Withdrawal/detail 提现记录详情 + Withdrawaldetail: (goods = {}) => _queryList({api: _shoplist, params: goods, callBack: (data = {}) => { + + }}), + // Money/partner 代理信息 + Moneypartner: (goods = {}) => _queryList({api: _shoplist, params: goods, callBack: (data = {}) => { + + }}), + // Report/index 首页数据 + Reportindex: (goods = {}) => _queryList({api: _shoplist, params: goods, callBack: (data = {}) => { + + }}), + + // Machine/againPrint 再次打印 + MachineagainPrint: (goods = {}) => _queryList({api: _shoplist, params: goods, callBack: (data = {}) => { + + }}), + + // Machine/getStock 获取商品库存 + MachineGetStock: (goods = {}) => _queryList({api: _shoplist, params: goods, callBack: (data = {}) => { + + }}), + + // Machine/getStock 获取代理设备库存 + MachineStockList: (goods = {}) => _queryList({api: _shoplist, params: goods, callBack: (data = {}) => { + + }}), + + //Machine/savePartnerStock//修改代理库存 + MachineSavePartnerStock: (goods = {}) => _queryList({api: _shoplist, params: goods, callBack: (data = {}) => { + + }}), + + //获取代理商库存商品列表 + MachineStockGoodsList: (goods = {}) => _queryList({api: _shoplist, params: goods, callBack: (data = {}) => { + + }}), + + // Money/receiveMoneyList + // 每日退款收益数量 + receiveMoneyList: (goods = {}) => _queryList({api: _shoplist, params: goods, callBack: (data = {}) => { + + }}), + +} + +export default service diff --git a/static/bg.png b/static/bg.png new file mode 100644 index 0000000..534a502 Binary files /dev/null and b/static/bg.png differ diff --git a/static/font-awesome/font-awesome.css b/static/font-awesome/font-awesome.css new file mode 100644 index 0000000..6e8477b --- /dev/null +++ b/static/font-awesome/font-awesome.css @@ -0,0 +1,2342 @@ +/* This stylesheet generated by Transfonter (https://transfonter.org) on March 30, 2018 3:15 AM */ + +@font-face { + font-family: 'FontAwesome'; + /* src: url('FontAwesome.eot'); */ + font-weight: normal; + font-style: normal; +} +@font-face { + font-family: 'FontAwesome'; + src: url(data:application/font-woff2;charset=utf-8;base64,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) format('woff2'), + url(data:application/font-woff;charset=utf-8;base64,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) format('woff'); + /* url('FontAwesome.ttf') format('truetype'), */ + /* url('FontAwesome.svg#FontAwesome') format('svg'); */ + font-weight: normal; + font-style: normal; +} + +.fa { + display: inline-block; + font: normal normal normal 14px/1 FontAwesome; + font-size: inherit; + text-rendering: auto; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +/* makes the font 33% larger relative to the icon container */ +.fa-lg { + font-size: 1.33333333em; + line-height: 0.75em; + vertical-align: -15%; +} +.fa-2x { + font-size: 2em; +} +.fa-3x { + font-size: 3em; +} +.fa-4x { + font-size: 4em; +} +.fa-5x { + font-size: 5em; +} +.fa-fw { + width: 1.28571429em; + text-align: center; +} +.fa-ul { + padding-left: 0; + margin-left: 2.14285714em; + list-style-type: none; +} +.fa-ul > li { + position: relative; +} +.fa-li { + position: absolute; + left: -2.14285714em; + width: 2.14285714em; + top: 0.14285714em; + text-align: center; +} +.fa-li.fa-lg { + left: -1.85714286em; +} +.fa-border { + padding: .2em .25em .15em; + border: solid 0.08em #eeeeee; + border-radius: .1em; +} +.fa-pull-left { + float: left; +} +.fa-pull-right { + float: right; +} +.fa.fa-pull-left { + margin-right: .3em; +} +.fa.fa-pull-right { + margin-left: .3em; +} +/* Deprecated as of 4.4.0 */ +.pull-right { + float: right; +} +.pull-left { + float: left; +} +.fa.pull-left { + margin-right: .3em; +} +.fa.pull-right { + margin-left: .3em; +} +.fa-spin { + -webkit-animation: fa-spin 2s infinite linear; + animation: fa-spin 2s infinite linear; +} +.fa-pulse { + -webkit-animation: fa-spin 1s infinite steps(8); + animation: fa-spin 1s infinite steps(8); +} +@-webkit-keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} +@keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} +.fa-rotate-90 { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)"; + -webkit-transform: rotate(90deg); + -ms-transform: rotate(90deg); + transform: rotate(90deg); +} +.fa-rotate-180 { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)"; + -webkit-transform: rotate(180deg); + -ms-transform: rotate(180deg); + transform: rotate(180deg); +} +.fa-rotate-270 { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)"; + -webkit-transform: rotate(270deg); + -ms-transform: rotate(270deg); + transform: rotate(270deg); +} +.fa-flip-horizontal { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)"; + -webkit-transform: scale(-1, 1); + -ms-transform: scale(-1, 1); + transform: scale(-1, 1); +} +.fa-flip-vertical { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"; + -webkit-transform: scale(1, -1); + -ms-transform: scale(1, -1); + transform: scale(1, -1); +} +:root .fa-rotate-90, +:root .fa-rotate-180, +:root .fa-rotate-270, +:root .fa-flip-horizontal, +:root .fa-flip-vertical { + filter: none; +} +.fa-stack { + position: relative; + display: inline-block; + width: 2em; + height: 2em; + line-height: 2em; + vertical-align: middle; +} +.fa-stack-1x, +.fa-stack-2x { + position: absolute; + left: 0; + width: 100%; + text-align: center; +} +.fa-stack-1x { + line-height: inherit; +} +.fa-stack-2x { + font-size: 2em; +} +.fa-inverse { + color: #ffffff; +} +/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen + readers do not read off random characters that represent icons */ +.fa-glass:before { + content: "\f000"; +} +.fa-music:before { + content: "\f001"; +} +.fa-search:before { + content: "\f002"; +} +.fa-envelope-o:before { + content: "\f003"; +} +.fa-heart:before { + content: "\f004"; +} +.fa-star:before { + content: "\f005"; +} +.fa-star-o:before { + content: "\f006"; +} +.fa-user:before { + content: "\f007"; +} +.fa-film:before { + content: "\f008"; +} +.fa-th-large:before { + content: "\f009"; +} +.fa-th:before { + content: "\f00a"; +} +.fa-th-list:before { + content: "\f00b"; +} +.fa-check:before { + content: "\f00c"; +} +.fa-remove:before, +.fa-close:before, +.fa-times:before { + content: "\f00d"; +} +.fa-search-plus:before { + content: "\f00e"; +} +.fa-search-minus:before { + content: "\f010"; +} +.fa-power-off:before { + content: "\f011"; +} +.fa-signal:before { + content: "\f012"; +} +.fa-gear:before, +.fa-cog:before { + content: "\f013"; +} +.fa-trash-o:before { + content: "\f014"; +} +.fa-home:before { + content: "\f015"; +} +.fa-file-o:before { + content: "\f016"; +} +.fa-clock-o:before { + content: "\f017"; +} +.fa-road:before { + content: "\f018"; +} +.fa-download:before { + content: "\f019"; +} +.fa-arrow-circle-o-down:before { + content: "\f01a"; +} +.fa-arrow-circle-o-up:before { + content: "\f01b"; +} +.fa-inbox:before { + content: "\f01c"; +} +.fa-play-circle-o:before { + content: "\f01d"; +} +.fa-rotate-right:before, +.fa-repeat:before { + content: "\f01e"; +} +.fa-refresh:before { + content: "\f021"; +} +.fa-list-alt:before { + content: "\f022"; +} +.fa-lock:before { + content: "\f023"; +} +.fa-flag:before { + content: "\f024"; +} +.fa-headphones:before { + content: "\f025"; +} +.fa-volume-off:before { + content: "\f026"; +} +.fa-volume-down:before { + content: "\f027"; +} +.fa-volume-up:before { + content: "\f028"; +} +.fa-qrcode:before { + content: "\f029"; +} +.fa-barcode:before { + content: "\f02a"; +} +.fa-tag:before { + content: "\f02b"; +} +.fa-tags:before { + content: "\f02c"; +} +.fa-book:before { + content: "\f02d"; +} +.fa-bookmark:before { + content: "\f02e"; +} +.fa-print:before { + content: "\f02f"; +} +.fa-camera:before { + content: "\f030"; +} +.fa-font:before { + content: "\f031"; +} +.fa-bold:before { + content: "\f032"; +} +.fa-italic:before { + content: "\f033"; +} +.fa-text-height:before { + content: "\f034"; +} +.fa-text-width:before { + content: "\f035"; +} +.fa-align-left:before { + content: "\f036"; +} +.fa-align-center:before { + content: "\f037"; +} +.fa-align-right:before { + content: "\f038"; +} +.fa-align-justify:before { + content: "\f039"; +} +.fa-list:before { + content: "\f03a"; +} +.fa-dedent:before, +.fa-outdent:before { + content: "\f03b"; +} +.fa-indent:before { + content: "\f03c"; +} +.fa-video-camera:before { + content: "\f03d"; +} +.fa-photo:before, +.fa-image:before, +.fa-picture-o:before { + content: "\f03e"; +} +.fa-pencil:before { + content: "\f040"; +} +.fa-map-marker:before { + content: "\f041"; +} +.fa-adjust:before { + content: "\f042"; +} +.fa-tint:before { + content: "\f043"; +} +.fa-edit:before, +.fa-pencil-square-o:before { + content: "\f044"; +} +.fa-share-square-o:before { + content: "\f045"; +} +.fa-check-square-o:before { + content: "\f046"; +} +.fa-arrows:before { + content: "\f047"; +} +.fa-step-backward:before { + content: "\f048"; +} +.fa-fast-backward:before { + content: "\f049"; +} +.fa-backward:before { + content: "\f04a"; +} +.fa-play:before { + content: "\f04b"; +} +.fa-pause:before { + content: "\f04c"; +} +.fa-stop:before { + content: "\f04d"; +} +.fa-forward:before { + content: "\f04e"; +} +.fa-fast-forward:before { + content: "\f050"; +} +.fa-step-forward:before { + content: "\f051"; +} +.fa-eject:before { + content: "\f052"; +} +.fa-chevron-left:before { + content: "\f053"; +} +.fa-chevron-right:before { + content: "\f054"; +} +.fa-plus-circle:before { + content: "\f055"; +} +.fa-minus-circle:before { + content: "\f056"; +} +.fa-times-circle:before { + content: "\f057"; +} +.fa-check-circle:before { + content: "\f058"; +} +.fa-question-circle:before { + content: "\f059"; +} +.fa-info-circle:before { + content: "\f05a"; +} +.fa-crosshairs:before { + content: "\f05b"; +} +.fa-times-circle-o:before { + content: "\f05c"; +} +.fa-check-circle-o:before { + content: "\f05d"; +} +.fa-ban:before { + content: "\f05e"; +} +.fa-arrow-left:before { + content: "\f060"; +} +.fa-arrow-right:before { + content: "\f061"; +} +.fa-arrow-up:before { + content: "\f062"; +} +.fa-arrow-down:before { + content: "\f063"; +} +.fa-mail-forward:before, +.fa-share:before { + content: "\f064"; +} +.fa-expand:before { + content: "\f065"; +} +.fa-compress:before { + content: "\f066"; +} +.fa-plus:before { + content: "\f067"; +} +.fa-minus:before { + content: "\f068"; +} +.fa-asterisk:before { + content: "\f069"; +} +.fa-exclamation-circle:before { + content: "\f06a"; +} +.fa-gift:before { + content: "\f06b"; +} +.fa-leaf:before { + content: "\f06c"; +} +.fa-fire:before { + content: "\f06d"; +} +.fa-eye:before { + content: "\f06e"; +} +.fa-eye-slash:before { + content: "\f070"; +} +.fa-warning:before, +.fa-exclamation-triangle:before { + content: "\f071"; +} +.fa-plane:before { + content: "\f072"; +} +.fa-calendar:before { + content: "\f073"; +} +.fa-random:before { + content: "\f074"; +} +.fa-comment:before { + content: "\f075"; +} +.fa-magnet:before { + content: "\f076"; +} +.fa-chevron-up:before { + content: "\f077"; +} +.fa-chevron-down:before { + content: "\f078"; +} +.fa-retweet:before { + content: "\f079"; +} +.fa-shopping-cart:before { + content: "\f07a"; +} +.fa-folder:before { + content: "\f07b"; +} +.fa-folder-open:before { + content: "\f07c"; +} +.fa-arrows-v:before { + content: "\f07d"; +} +.fa-arrows-h:before { + content: "\f07e"; +} +.fa-bar-chart-o:before, +.fa-bar-chart:before { + content: "\f080"; +} +.fa-twitter-square:before { + content: "\f081"; +} +.fa-facebook-square:before { + content: "\f082"; +} +.fa-camera-retro:before { + content: "\f083"; +} +.fa-key:before { + content: "\f084"; +} +.fa-gears:before, +.fa-cogs:before { + content: "\f085"; +} +.fa-comments:before { + content: "\f086"; +} +.fa-thumbs-o-up:before { + content: "\f087"; +} +.fa-thumbs-o-down:before { + content: "\f088"; +} +.fa-star-half:before { + content: "\f089"; +} +.fa-heart-o:before { + content: "\f08a"; +} +.fa-sign-out:before { + content: "\f08b"; +} +.fa-linkedin-square:before { + content: "\f08c"; +} +.fa-thumb-tack:before { + content: "\f08d"; +} +.fa-external-link:before { + content: "\f08e"; +} +.fa-sign-in:before { + content: "\f090"; +} +.fa-trophy:before { + content: "\f091"; +} +.fa-github-square:before { + content: "\f092"; +} +.fa-upload:before { + content: "\f093"; +} +.fa-lemon-o:before { + content: "\f094"; +} +.fa-phone:before { + content: "\f095"; +} +.fa-square-o:before { + content: "\f096"; +} +.fa-bookmark-o:before { + content: "\f097"; +} +.fa-phone-square:before { + content: "\f098"; +} +.fa-twitter:before { + content: "\f099"; +} +.fa-facebook-f:before, +.fa-facebook:before { + content: "\f09a"; +} +.fa-github:before { + content: "\f09b"; +} +.fa-unlock:before { + content: "\f09c"; +} +.fa-credit-card:before { + content: "\f09d"; +} +.fa-feed:before, +.fa-rss:before { + content: "\f09e"; +} +.fa-hdd-o:before { + content: "\f0a0"; +} +.fa-bullhorn:before { + content: "\f0a1"; +} +.fa-bell:before { + content: "\f0f3"; +} +.fa-certificate:before { + content: "\f0a3"; +} +.fa-hand-o-right:before { + content: "\f0a4"; +} +.fa-hand-o-left:before { + content: "\f0a5"; +} +.fa-hand-o-up:before { + content: "\f0a6"; +} +.fa-hand-o-down:before { + content: "\f0a7"; +} +.fa-arrow-circle-left:before { + content: "\f0a8"; +} +.fa-arrow-circle-right:before { + content: "\f0a9"; +} +.fa-arrow-circle-up:before { + content: "\f0aa"; +} +.fa-arrow-circle-down:before { + content: "\f0ab"; +} +.fa-globe:before { + content: "\f0ac"; +} +.fa-wrench:before { + content: "\f0ad"; +} +.fa-tasks:before { + content: "\f0ae"; +} +.fa-filter:before { + content: "\f0b0"; +} +.fa-briefcase:before { + content: "\f0b1"; +} +.fa-arrows-alt:before { + content: "\f0b2"; +} +.fa-group:before, +.fa-users:before { + content: "\f0c0"; +} +.fa-chain:before, +.fa-link:before { + content: "\f0c1"; +} +.fa-cloud:before { + content: "\f0c2"; +} +.fa-flask:before { + content: "\f0c3"; +} +.fa-cut:before, +.fa-scissors:before { + content: "\f0c4"; +} +.fa-copy:before, +.fa-files-o:before { + content: "\f0c5"; +} +.fa-paperclip:before { + content: "\f0c6"; +} +.fa-save:before, +.fa-floppy-o:before { + content: "\f0c7"; +} +.fa-square:before { + content: "\f0c8"; +} +.fa-navicon:before, +.fa-reorder:before, +.fa-bars:before { + content: "\f0c9"; +} +.fa-list-ul:before { + content: "\f0ca"; +} +.fa-list-ol:before { + content: "\f0cb"; +} +.fa-strikethrough:before { + content: "\f0cc"; +} +.fa-underline:before { + content: "\f0cd"; +} +.fa-table:before { + content: "\f0ce"; +} +.fa-magic:before { + content: "\f0d0"; +} +.fa-truck:before { + content: "\f0d1"; +} +.fa-pinterest:before { + content: "\f0d2"; +} +.fa-pinterest-square:before { + content: "\f0d3"; +} +.fa-google-plus-square:before { + content: "\f0d4"; +} +.fa-google-plus:before { + content: "\f0d5"; +} +.fa-money:before { + content: "\f0d6"; +} +.fa-caret-down:before { + content: "\f0d7"; +} +.fa-caret-up:before { + content: "\f0d8"; +} +.fa-caret-left:before { + content: "\f0d9"; +} +.fa-caret-right:before { + content: "\f0da"; +} +.fa-columns:before { + content: "\f0db"; +} +.fa-unsorted:before, +.fa-sort:before { + content: "\f0dc"; +} +.fa-sort-down:before, +.fa-sort-desc:before { + content: "\f0dd"; +} +.fa-sort-up:before, +.fa-sort-asc:before { + content: "\f0de"; +} +.fa-envelope:before { + content: "\f0e0"; +} +.fa-linkedin:before { + content: "\f0e1"; +} +.fa-rotate-left:before, +.fa-undo:before { + content: "\f0e2"; +} +.fa-legal:before, +.fa-gavel:before { + content: "\f0e3"; +} +.fa-dashboard:before, +.fa-tachometer:before { + content: "\f0e4"; +} +.fa-comment-o:before { + content: "\f0e5"; +} +.fa-comments-o:before { + content: "\f0e6"; +} +.fa-flash:before, +.fa-bolt:before { + content: "\f0e7"; +} +.fa-sitemap:before { + content: "\f0e8"; +} +.fa-umbrella:before { + content: "\f0e9"; +} +.fa-paste:before, +.fa-clipboard:before { + content: "\f0ea"; +} +.fa-lightbulb-o:before { + content: "\f0eb"; +} +.fa-exchange:before { + content: "\f0ec"; +} +.fa-cloud-download:before { + content: "\f0ed"; +} +.fa-cloud-upload:before { + content: "\f0ee"; +} +.fa-user-md:before { + content: "\f0f0"; +} +.fa-stethoscope:before { + content: "\f0f1"; +} +.fa-suitcase:before { + content: "\f0f2"; +} +.fa-bell-o:before { + content: "\f0a2"; +} +.fa-coffee:before { + content: "\f0f4"; +} +.fa-cutlery:before { + content: "\f0f5"; +} +.fa-file-text-o:before { + content: "\f0f6"; +} +.fa-building-o:before { + content: "\f0f7"; +} +.fa-hospital-o:before { + content: "\f0f8"; +} +.fa-ambulance:before { + content: "\f0f9"; +} +.fa-medkit:before { + content: "\f0fa"; +} +.fa-fighter-jet:before { + content: "\f0fb"; +} +.fa-beer:before { + content: "\f0fc"; +} +.fa-h-square:before { + content: "\f0fd"; +} +.fa-plus-square:before { + content: "\f0fe"; +} +.fa-angle-double-left:before { + content: "\f100"; +} +.fa-angle-double-right:before { + content: "\f101"; +} +.fa-angle-double-up:before { + content: "\f102"; +} +.fa-angle-double-down:before { + content: "\f103"; +} +.fa-angle-left:before { + content: "\f104"; +} +.fa-angle-right:before { + content: "\f105"; +} +.fa-angle-up:before { + content: "\f106"; +} +.fa-angle-down:before { + content: "\f107"; +} +.fa-desktop:before { + content: "\f108"; +} +.fa-laptop:before { + content: "\f109"; +} +.fa-tablet:before { + content: "\f10a"; +} +.fa-mobile-phone:before, +.fa-mobile:before { + content: "\f10b"; +} +.fa-circle-o:before { + content: "\f10c"; +} +.fa-quote-left:before { + content: "\f10d"; +} +.fa-quote-right:before { + content: "\f10e"; +} +.fa-spinner:before { + content: "\f110"; +} +.fa-circle:before { + content: "\f111"; +} +.fa-mail-reply:before, +.fa-reply:before { + content: "\f112"; +} +.fa-github-alt:before { + content: "\f113"; +} +.fa-folder-o:before { + content: "\f114"; +} +.fa-folder-open-o:before { + content: "\f115"; +} +.fa-smile-o:before { + content: "\f118"; +} +.fa-frown-o:before { + content: "\f119"; +} +.fa-meh-o:before { + content: "\f11a"; +} +.fa-gamepad:before { + content: "\f11b"; +} +.fa-keyboard-o:before { + content: "\f11c"; +} +.fa-flag-o:before { + content: "\f11d"; +} +.fa-flag-checkered:before { + content: "\f11e"; +} +.fa-terminal:before { + content: "\f120"; +} +.fa-code:before { + content: "\f121"; +} +.fa-mail-reply-all:before, +.fa-reply-all:before { + content: "\f122"; +} +.fa-star-half-empty:before, +.fa-star-half-full:before, +.fa-star-half-o:before { + content: "\f123"; +} +.fa-location-arrow:before { + content: "\f124"; +} +.fa-crop:before { + content: "\f125"; +} +.fa-code-fork:before { + content: "\f126"; +} +.fa-unlink:before, +.fa-chain-broken:before { + content: "\f127"; +} +.fa-question:before { + content: "\f128"; +} +.fa-info:before { + content: "\f129"; +} +.fa-exclamation:before { + content: "\f12a"; +} +.fa-superscript:before { + content: "\f12b"; +} +.fa-subscript:before { + content: "\f12c"; +} +.fa-eraser:before { + content: "\f12d"; +} +.fa-puzzle-piece:before { + content: "\f12e"; +} +.fa-microphone:before { + content: "\f130"; +} +.fa-microphone-slash:before { + content: "\f131"; +} +.fa-shield:before { + content: "\f132"; +} +.fa-calendar-o:before { + content: "\f133"; +} +.fa-fire-extinguisher:before { + content: "\f134"; +} +.fa-rocket:before { + content: "\f135"; +} +.fa-maxcdn:before { + content: "\f136"; +} +.fa-chevron-circle-left:before { + content: "\f137"; +} +.fa-chevron-circle-right:before { + content: "\f138"; +} +.fa-chevron-circle-up:before { + content: "\f139"; +} +.fa-chevron-circle-down:before { + content: "\f13a"; +} +.fa-html5:before { + content: "\f13b"; +} +.fa-css3:before { + content: "\f13c"; +} +.fa-anchor:before { + content: "\f13d"; +} +.fa-unlock-alt:before { + content: "\f13e"; +} +.fa-bullseye:before { + content: "\f140"; +} +.fa-ellipsis-h:before { + content: "\f141"; +} +.fa-ellipsis-v:before { + content: "\f142"; +} +.fa-rss-square:before { + content: "\f143"; +} +.fa-play-circle:before { + content: "\f144"; +} +.fa-ticket:before { + content: "\f145"; +} +.fa-minus-square:before { + content: "\f146"; +} +.fa-minus-square-o:before { + content: "\f147"; +} +.fa-level-up:before { + content: "\f148"; +} +.fa-level-down:before { + content: "\f149"; +} +.fa-check-square:before { + content: "\f14a"; +} +.fa-pencil-square:before { + content: "\f14b"; +} +.fa-external-link-square:before { + content: "\f14c"; +} +.fa-share-square:before { + content: "\f14d"; +} +.fa-compass:before { + content: "\f14e"; +} +.fa-toggle-down:before, +.fa-caret-square-o-down:before { + content: "\f150"; +} +.fa-toggle-up:before, +.fa-caret-square-o-up:before { + content: "\f151"; +} +.fa-toggle-right:before, +.fa-caret-square-o-right:before { + content: "\f152"; +} +.fa-euro:before, +.fa-eur:before { + content: "\f153"; +} +.fa-gbp:before { + content: "\f154"; +} +.fa-dollar:before, +.fa-usd:before { + content: "\f155"; +} +.fa-rupee:before, +.fa-inr:before { + content: "\f156"; +} +.fa-cny:before, +.fa-rmb:before, +.fa-yen:before, +.fa-jpy:before { + content: "\f157"; +} +.fa-ruble:before, +.fa-rouble:before, +.fa-rub:before { + content: "\f158"; +} +.fa-won:before, +.fa-krw:before { + content: "\f159"; +} +.fa-bitcoin:before, +.fa-btc:before { + content: "\f15a"; +} +.fa-file:before { + content: "\f15b"; +} +.fa-file-text:before { + content: "\f15c"; +} +.fa-sort-alpha-asc:before { + content: "\f15d"; +} +.fa-sort-alpha-desc:before { + content: "\f15e"; +} +.fa-sort-amount-asc:before { + content: "\f160"; +} +.fa-sort-amount-desc:before { + content: "\f161"; +} +.fa-sort-numeric-asc:before { + content: "\f162"; +} +.fa-sort-numeric-desc:before { + content: "\f163"; +} +.fa-thumbs-up:before { + content: "\f164"; +} +.fa-thumbs-down:before { + content: "\f165"; +} +.fa-youtube-square:before { + content: "\f166"; +} +.fa-youtube:before { + content: "\f167"; +} +.fa-xing:before { + content: "\f168"; +} +.fa-xing-square:before { + content: "\f169"; +} +.fa-youtube-play:before { + content: "\f16a"; +} +.fa-dropbox:before { + content: "\f16b"; +} +.fa-stack-overflow:before { + content: "\f16c"; +} +.fa-instagram:before { + content: "\f16d"; +} +.fa-flickr:before { + content: "\f16e"; +} +.fa-adn:before { + content: "\f170"; +} +.fa-bitbucket:before { + content: "\f171"; +} +.fa-bitbucket-square:before { + content: "\f172"; +} +.fa-tumblr:before { + content: "\f173"; +} +.fa-tumblr-square:before { + content: "\f174"; +} +.fa-long-arrow-down:before { + content: "\f175"; +} +.fa-long-arrow-up:before { + content: "\f176"; +} +.fa-long-arrow-left:before { + content: "\f177"; +} +.fa-long-arrow-right:before { + content: "\f178"; +} +.fa-apple:before { + content: "\f179"; +} +.fa-windows:before { + content: "\f17a"; +} +.fa-android:before { + content: "\f17b"; +} +.fa-linux:before { + content: "\f17c"; +} +.fa-dribbble:before { + content: "\f17d"; +} +.fa-skype:before { + content: "\f17e"; +} +.fa-foursquare:before { + content: "\f180"; +} +.fa-trello:before { + content: "\f181"; +} +.fa-female:before { + content: "\f182"; +} +.fa-male:before { + content: "\f183"; +} +.fa-gittip:before, +.fa-gratipay:before { + content: "\f184"; +} +.fa-sun-o:before { + content: "\f185"; +} +.fa-moon-o:before { + content: "\f186"; +} +.fa-archive:before { + content: "\f187"; +} +.fa-bug:before { + content: "\f188"; +} +.fa-vk:before { + content: "\f189"; +} +.fa-weibo:before { + content: "\f18a"; +} +.fa-renren:before { + content: "\f18b"; +} +.fa-pagelines:before { + content: "\f18c"; +} +.fa-stack-exchange:before { + content: "\f18d"; +} +.fa-arrow-circle-o-right:before { + content: "\f18e"; +} +.fa-arrow-circle-o-left:before { + content: "\f190"; +} +.fa-toggle-left:before, +.fa-caret-square-o-left:before { + content: "\f191"; +} +.fa-dot-circle-o:before { + content: "\f192"; +} +.fa-wheelchair:before { + content: "\f193"; +} +.fa-vimeo-square:before { + content: "\f194"; +} +.fa-turkish-lira:before, +.fa-try:before { + content: "\f195"; +} +.fa-plus-square-o:before { + content: "\f196"; +} +.fa-space-shuttle:before { + content: "\f197"; +} +.fa-slack:before { + content: "\f198"; +} +.fa-envelope-square:before { + content: "\f199"; +} +.fa-wordpress:before { + content: "\f19a"; +} +.fa-openid:before { + content: "\f19b"; +} +.fa-institution:before, +.fa-bank:before, +.fa-university:before { + content: "\f19c"; +} +.fa-mortar-board:before, +.fa-graduation-cap:before { + content: "\f19d"; +} +.fa-yahoo:before { + content: "\f19e"; +} +.fa-google:before { + content: "\f1a0"; +} +.fa-reddit:before { + content: "\f1a1"; +} +.fa-reddit-square:before { + content: "\f1a2"; +} +.fa-stumbleupon-circle:before { + content: "\f1a3"; +} +.fa-stumbleupon:before { + content: "\f1a4"; +} +.fa-delicious:before { + content: "\f1a5"; +} +.fa-digg:before { + content: "\f1a6"; +} +.fa-pied-piper-pp:before { + content: "\f1a7"; +} +.fa-pied-piper-alt:before { + content: "\f1a8"; +} +.fa-drupal:before { + content: "\f1a9"; +} +.fa-joomla:before { + content: "\f1aa"; +} +.fa-language:before { + content: "\f1ab"; +} +.fa-fax:before { + content: "\f1ac"; +} +.fa-building:before { + content: "\f1ad"; +} +.fa-child:before { + content: "\f1ae"; +} +.fa-paw:before { + content: "\f1b0"; +} +.fa-spoon:before { + content: "\f1b1"; +} +.fa-cube:before { + content: "\f1b2"; +} +.fa-cubes:before { + content: "\f1b3"; +} +.fa-behance:before { + content: "\f1b4"; +} +.fa-behance-square:before { + content: "\f1b5"; +} +.fa-steam:before { + content: "\f1b6"; +} +.fa-steam-square:before { + content: "\f1b7"; +} +.fa-recycle:before { + content: "\f1b8"; +} +.fa-automobile:before, +.fa-car:before { + content: "\f1b9"; +} +.fa-cab:before, +.fa-taxi:before { + content: "\f1ba"; +} +.fa-tree:before { + content: "\f1bb"; +} +.fa-spotify:before { + content: "\f1bc"; +} +.fa-deviantart:before { + content: "\f1bd"; +} +.fa-soundcloud:before { + content: "\f1be"; +} +.fa-database:before { + content: "\f1c0"; +} +.fa-file-pdf-o:before { + content: "\f1c1"; +} +.fa-file-word-o:before { + content: "\f1c2"; +} +.fa-file-excel-o:before { + content: "\f1c3"; +} +.fa-file-powerpoint-o:before { + content: "\f1c4"; +} +.fa-file-photo-o:before, +.fa-file-picture-o:before, +.fa-file-image-o:before { + content: "\f1c5"; +} +.fa-file-zip-o:before, +.fa-file-archive-o:before { + content: "\f1c6"; +} +.fa-file-sound-o:before, +.fa-file-audio-o:before { + content: "\f1c7"; +} +.fa-file-movie-o:before, +.fa-file-video-o:before { + content: "\f1c8"; +} +.fa-file-code-o:before { + content: "\f1c9"; +} +.fa-vine:before { + content: "\f1ca"; +} +.fa-codepen:before { + content: "\f1cb"; +} +.fa-jsfiddle:before { + content: "\f1cc"; +} +.fa-life-bouy:before, +.fa-life-buoy:before, +.fa-life-saver:before, +.fa-support:before, +.fa-life-ring:before { + content: "\f1cd"; +} +.fa-circle-o-notch:before { + content: "\f1ce"; +} +.fa-ra:before, +.fa-resistance:before, +.fa-rebel:before { + content: "\f1d0"; +} +.fa-ge:before, +.fa-empire:before { + content: "\f1d1"; +} +.fa-git-square:before { + content: "\f1d2"; +} +.fa-git:before { + content: "\f1d3"; +} +.fa-y-combinator-square:before, +.fa-yc-square:before, +.fa-hacker-news:before { + content: "\f1d4"; +} +.fa-tencent-weibo:before { + content: "\f1d5"; +} +.fa-qq:before { + content: "\f1d6"; +} +.fa-wechat:before, +.fa-weixin:before { + content: "\f1d7"; +} +.fa-send:before, +.fa-paper-plane:before { + content: "\f1d8"; +} +.fa-send-o:before, +.fa-paper-plane-o:before { + content: "\f1d9"; +} +.fa-history:before { + content: "\f1da"; +} +.fa-circle-thin:before { + content: "\f1db"; +} +.fa-header:before { + content: "\f1dc"; +} +.fa-paragraph:before { + content: "\f1dd"; +} +.fa-sliders:before { + content: "\f1de"; +} +.fa-share-alt:before { + content: "\f1e0"; +} +.fa-share-alt-square:before { + content: "\f1e1"; +} +.fa-bomb:before { + content: "\f1e2"; +} +.fa-soccer-ball-o:before, +.fa-futbol-o:before { + content: "\f1e3"; +} +.fa-tty:before { + content: "\f1e4"; +} +.fa-binoculars:before { + content: "\f1e5"; +} +.fa-plug:before { + content: "\f1e6"; +} +.fa-slideshare:before { + content: "\f1e7"; +} +.fa-twitch:before { + content: "\f1e8"; +} +.fa-yelp:before { + content: "\f1e9"; +} +.fa-newspaper-o:before { + content: "\f1ea"; +} +.fa-wifi:before { + content: "\f1eb"; +} +.fa-calculator:before { + content: "\f1ec"; +} +.fa-paypal:before { + content: "\f1ed"; +} +.fa-google-wallet:before { + content: "\f1ee"; +} +.fa-cc-visa:before { + content: "\f1f0"; +} +.fa-cc-mastercard:before { + content: "\f1f1"; +} +.fa-cc-discover:before { + content: "\f1f2"; +} +.fa-cc-amex:before { + content: "\f1f3"; +} +.fa-cc-paypal:before { + content: "\f1f4"; +} +.fa-cc-stripe:before { + content: "\f1f5"; +} +.fa-bell-slash:before { + content: "\f1f6"; +} +.fa-bell-slash-o:before { + content: "\f1f7"; +} +.fa-trash:before { + content: "\f1f8"; +} +.fa-copyright:before { + content: "\f1f9"; +} +.fa-at:before { + content: "\f1fa"; +} +.fa-eyedropper:before { + content: "\f1fb"; +} +.fa-paint-brush:before { + content: "\f1fc"; +} +.fa-birthday-cake:before { + content: "\f1fd"; +} +.fa-area-chart:before { + content: "\f1fe"; +} +.fa-pie-chart:before { + content: "\f200"; +} +.fa-line-chart:before { + content: "\f201"; +} +.fa-lastfm:before { + content: "\f202"; +} +.fa-lastfm-square:before { + content: "\f203"; +} +.fa-toggle-off:before { + content: "\f204"; +} +.fa-toggle-on:before { + content: "\f205"; +} +.fa-bicycle:before { + content: "\f206"; +} +.fa-bus:before { + content: "\f207"; +} +.fa-ioxhost:before { + content: "\f208"; +} +.fa-angellist:before { + content: "\f209"; +} +.fa-cc:before { + content: "\f20a"; +} +.fa-shekel:before, +.fa-sheqel:before, +.fa-ils:before { + content: "\f20b"; +} +.fa-meanpath:before { + content: "\f20c"; +} +.fa-buysellads:before { + content: "\f20d"; +} +.fa-connectdevelop:before { + content: "\f20e"; +} +.fa-dashcube:before { + content: "\f210"; +} +.fa-forumbee:before { + content: "\f211"; +} +.fa-leanpub:before { + content: "\f212"; +} +.fa-sellsy:before { + content: "\f213"; +} +.fa-shirtsinbulk:before { + content: "\f214"; +} +.fa-simplybuilt:before { + content: "\f215"; +} +.fa-skyatlas:before { + content: "\f216"; +} +.fa-cart-plus:before { + content: "\f217"; +} +.fa-cart-arrow-down:before { + content: "\f218"; +} +.fa-diamond:before { + content: "\f219"; +} +.fa-ship:before { + content: "\f21a"; +} +/* .fa-user-secret:before { + content: "\f21b"; +} */ +.fa-motorcycle:before { + content: "\f21c"; +} +.fa-street-view:before { + content: "\f21d"; +} +.fa-heartbeat:before { + content: "\f21e"; +} +.fa-venus:before { + content: "\f221"; +} +.fa-mars:before { + content: "\f222"; +} +.fa-mercury:before { + content: "\f223"; +} +.fa-intersex:before, +.fa-transgender:before { + content: "\f224"; +} +.fa-transgender-alt:before { + content: "\f225"; +} +.fa-venus-double:before { + content: "\f226"; +} +.fa-mars-double:before { + content: "\f227"; +} +.fa-venus-mars:before { + content: "\f228"; +} +.fa-mars-stroke:before { + content: "\f229"; +} +.fa-mars-stroke-v:before { + content: "\f22a"; +} +.fa-mars-stroke-h:before { + content: "\f22b"; +} +.fa-neuter:before { + content: "\f22c"; +} +.fa-genderless:before { + content: "\f22d"; +} +.fa-facebook-official:before { + content: "\f230"; +} +.fa-pinterest-p:before { + content: "\f231"; +} +.fa-whatsapp:before { + content: "\f232"; +} +.fa-server:before { + content: "\f233"; +} +.fa-user-plus:before { + content: "\f234"; +} +.fa-user-times:before { + content: "\f235"; +} +.fa-hotel:before, +.fa-bed:before { + content: "\f236"; +} +.fa-viacoin:before { + content: "\f237"; +} +.fa-train:before { + content: "\f238"; +} +.fa-subway:before { + content: "\f239"; +} +.fa-medium:before { + content: "\f23a"; +} +.fa-yc:before, +.fa-y-combinator:before { + content: "\f23b"; +} +.fa-optin-monster:before { + content: "\f23c"; +} +.fa-opencart:before { + content: "\f23d"; +} +.fa-expeditedssl:before { + content: "\f23e"; +} +.fa-battery-4:before, +.fa-battery:before, +.fa-battery-full:before { + content: "\f240"; +} +.fa-battery-3:before, +.fa-battery-three-quarters:before { + content: "\f241"; +} +.fa-battery-2:before, +.fa-battery-half:before { + content: "\f242"; +} +.fa-battery-1:before, +.fa-battery-quarter:before { + content: "\f243"; +} +.fa-battery-0:before, +.fa-battery-empty:before { + content: "\f244"; +} +.fa-mouse-pointer:before { + content: "\f245"; +} +.fa-i-cursor:before { + content: "\f246"; +} +.fa-object-group:before { + content: "\f247"; +} +.fa-object-ungroup:before { + content: "\f248"; +} +.fa-sticky-note:before { + content: "\f249"; +} +.fa-sticky-note-o:before { + content: "\f24a"; +} +.fa-cc-jcb:before { + content: "\f24b"; +} +.fa-cc-diners-club:before { + content: "\f24c"; +} +.fa-clone:before { + content: "\f24d"; +} +.fa-balance-scale:before { + content: "\f24e"; +} +.fa-hourglass-o:before { + content: "\f250"; +} +.fa-hourglass-1:before, +.fa-hourglass-start:before { + content: "\f251"; +} +.fa-hourglass-2:before, +.fa-hourglass-half:before { + content: "\f252"; +} +.fa-hourglass-3:before, +.fa-hourglass-end:before { + content: "\f253"; +} +.fa-hourglass:before { + content: "\f254"; +} +.fa-hand-grab-o:before, +.fa-hand-rock-o:before { + content: "\f255"; +} +.fa-hand-stop-o:before, +.fa-hand-paper-o:before { + content: "\f256"; +} +.fa-hand-scissors-o:before { + content: "\f257"; +} +.fa-hand-lizard-o:before { + content: "\f258"; +} +.fa-hand-spock-o:before { + content: "\f259"; +} +.fa-hand-pointer-o:before { + content: "\f25a"; +} +.fa-hand-peace-o:before { + content: "\f25b"; +} +.fa-trademark:before { + content: "\f25c"; +} +.fa-registered:before { + content: "\f25d"; +} +.fa-creative-commons:before { + content: "\f25e"; +} +.fa-gg:before { + content: "\f260"; +} +.fa-gg-circle:before { + content: "\f261"; +} +.fa-tripadvisor:before { + content: "\f262"; +} +.fa-odnoklassniki:before { + content: "\f263"; +} +.fa-odnoklassniki-square:before { + content: "\f264"; +} +.fa-get-pocket:before { + content: "\f265"; +} +.fa-wikipedia-w:before { + content: "\f266"; +} +.fa-safari:before { + content: "\f267"; +} +.fa-chrome:before { + content: "\f268"; +} +.fa-firefox:before { + content: "\f269"; +} +.fa-opera:before { + content: "\f26a"; +} +.fa-internet-explorer:before { + content: "\f26b"; +} +.fa-tv:before, +.fa-television:before { + content: "\f26c"; +} +.fa-contao:before { + content: "\f26d"; +} +.fa-500px:before { + content: "\f26e"; +} +.fa-amazon:before { + content: "\f270"; +} +.fa-calendar-plus-o:before { + content: "\f271"; +} +.fa-calendar-minus-o:before { + content: "\f272"; +} +.fa-calendar-times-o:before { + content: "\f273"; +} +.fa-calendar-check-o:before { + content: "\f274"; +} +.fa-industry:before { + content: "\f275"; +} +.fa-map-pin:before { + content: "\f276"; +} +.fa-map-signs:before { + content: "\f277"; +} +.fa-map-o:before { + content: "\f278"; +} +.fa-map:before { + content: "\f279"; +} +.fa-commenting:before { + content: "\f27a"; +} +.fa-commenting-o:before { + content: "\f27b"; +} +.fa-houzz:before { + content: "\f27c"; +} +.fa-vimeo:before { + content: "\f27d"; +} +.fa-black-tie:before { + content: "\f27e"; +} +.fa-fonticons:before { + content: "\f280"; +} +.fa-reddit-alien:before { + content: "\f281"; +} +.fa-edge:before { + content: "\f282"; +} +.fa-credit-card-alt:before { + content: "\f283"; +} +.fa-codiepie:before { + content: "\f284"; +} +.fa-modx:before { + content: "\f285"; +} +.fa-fort-awesome:before { + content: "\f286"; +} +.fa-usb:before { + content: "\f287"; +} +.fa-product-hunt:before { + content: "\f288"; +} +.fa-mixcloud:before { + content: "\f289"; +} +.fa-scribd:before { + content: "\f28a"; +} +.fa-pause-circle:before { + content: "\f28b"; +} +.fa-pause-circle-o:before { + content: "\f28c"; +} +.fa-stop-circle:before { + content: "\f28d"; +} +.fa-stop-circle-o:before { + content: "\f28e"; +} +.fa-shopping-bag:before { + content: "\f290"; +} +.fa-shopping-basket:before { + content: "\f291"; +} +.fa-hashtag:before { + content: "\f292"; +} +.fa-bluetooth:before { + content: "\f293"; +} +.fa-bluetooth-b:before { + content: "\f294"; +} +.fa-percent:before { + content: "\f295"; +} +.fa-gitlab:before { + content: "\f296"; +} +.fa-wpbeginner:before { + content: "\f297"; +} +.fa-wpforms:before { + content: "\f298"; +} +.fa-envira:before { + content: "\f299"; +} +.fa-universal-access:before { + content: "\f29a"; +} +.fa-wheelchair-alt:before { + content: "\f29b"; +} +.fa-question-circle-o:before { + content: "\f29c"; +} +.fa-blind:before { + content: "\f29d"; +} +.fa-audio-description:before { + content: "\f29e"; +} +.fa-volume-control-phone:before { + content: "\f2a0"; +} +.fa-braille:before { + content: "\f2a1"; +} +.fa-assistive-listening-systems:before { + content: "\f2a2"; +} +.fa-asl-interpreting:before, +.fa-american-sign-language-interpreting:before { + content: "\f2a3"; +} +.fa-deafness:before, +.fa-hard-of-hearing:before, +.fa-deaf:before { + content: "\f2a4"; +} +.fa-glide:before { + content: "\f2a5"; +} +.fa-glide-g:before { + content: "\f2a6"; +} +.fa-signing:before, +.fa-sign-language:before { + content: "\f2a7"; +} +.fa-low-vision:before { + content: "\f2a8"; +} +.fa-viadeo:before { + content: "\f2a9"; +} +.fa-viadeo-square:before { + content: "\f2aa"; +} +.fa-snapchat:before { + content: "\f2ab"; +} +.fa-snapchat-ghost:before { + content: "\f2ac"; +} +.fa-snapchat-square:before { + content: "\f2ad"; +} +.fa-pied-piper:before { + content: "\f2ae"; +} +.fa-first-order:before { + content: "\f2b0"; +} +.fa-yoast:before { + content: "\f2b1"; +} +.fa-themeisle:before { + content: "\f2b2"; +} +.fa-google-plus-circle:before, +.fa-google-plus-official:before { + content: "\f2b3"; +} +.fa-fa:before, +.fa-font-awesome:before { + content: "\f2b4"; +} +.fa-handshake-o:before { + content: "\f2b5"; +} +.fa-envelope-open:before { + content: "\f2b6"; +} +.fa-envelope-open-o:before { + content: "\f2b7"; +} +.fa-linode:before { + content: "\f2b8"; +} +.fa-address-book:before { + content: "\f2b9"; +} +.fa-address-book-o:before { + content: "\f2ba"; +} +.fa-vcard:before, +.fa-address-card:before { + content: "\f2bb"; +} +.fa-vcard-o:before, +.fa-address-card-o:before { + content: "\f2bc"; +} +.fa-user-circle:before { + content: "\f2bd"; +} +.fa-user-circle-o:before { + content: "\f2be"; +} +.fa-user-o:before { + content: "\f2c0"; +} +.fa-id-badge:before { + content: "\f2c1"; +} +.fa-drivers-license:before, +.fa-id-card:before { + content: "\f2c2"; +} +.fa-drivers-license-o:before, +.fa-id-card-o:before { + content: "\f2c3"; +} +.fa-quora:before { + content: "\f2c4"; +} +.fa-free-code-camp:before { + content: "\f2c5"; +} +.fa-telegram:before { + content: "\f2c6"; +} +.fa-thermometer-4:before, +.fa-thermometer:before, +.fa-thermometer-full:before { + content: "\f2c7"; +} +.fa-thermometer-3:before, +.fa-thermometer-three-quarters:before { + content: "\f2c8"; +} +.fa-thermometer-2:before, +.fa-thermometer-half:before { + content: "\f2c9"; +} +.fa-thermometer-1:before, +.fa-thermometer-quarter:before { + content: "\f2ca"; +} +.fa-thermometer-0:before, +.fa-thermometer-empty:before { + content: "\f2cb"; +} +.fa-shower:before { + content: "\f2cc"; +} +.fa-bathtub:before, +.fa-s15:before, +.fa-bath:before { + content: "\f2cd"; +} +.fa-podcast:before { + content: "\f2ce"; +} +.fa-window-maximize:before { + content: "\f2d0"; +} +.fa-window-minimize:before { + content: "\f2d1"; +} +.fa-window-restore:before { + content: "\f2d2"; +} +.fa-times-rectangle:before, +.fa-window-close:before { + content: "\f2d3"; +} +.fa-times-rectangle-o:before, +.fa-window-close-o:before { + content: "\f2d4"; +} +.fa-bandcamp:before { + content: "\f2d5"; +} +.fa-grav:before { + content: "\f2d6"; +} +.fa-etsy:before { + content: "\f2d7"; +} +.fa-imdb:before { + content: "\f2d8"; +} +.fa-ravelry:before { + content: "\f2d9"; +} +.fa-eercast:before { + content: "\f2da"; +} +.fa-microchip:before { + content: "\f2db"; +} +.fa-snowflake-o:before { + content: "\f2dc"; +} +.fa-superpowers:before { + content: "\f2dd"; +} +.fa-wpexplorer:before { + content: "\f2de"; +} +.fa-meetup:before { + content: "\f2e0"; +} +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; +} +.sr-only-focusable:active, +.sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + margin: 0; + overflow: visible; + clip: auto; +} diff --git a/static/house.png b/static/house.png new file mode 100644 index 0000000..84cc45e Binary files /dev/null and b/static/house.png differ diff --git a/static/icon_all_back.png b/static/icon_all_back.png new file mode 100644 index 0000000..2d8cc1f Binary files /dev/null and b/static/icon_all_back.png differ diff --git a/static/icon_closes.png b/static/icon_closes.png new file mode 100644 index 0000000..db875ab Binary files /dev/null and b/static/icon_closes.png differ diff --git a/static/icon_guaqi.png b/static/icon_guaqi.png new file mode 100644 index 0000000..a3314bf Binary files /dev/null and b/static/icon_guaqi.png differ diff --git a/static/icon_machine_clean.png b/static/icon_machine_clean.png new file mode 100644 index 0000000..65b3833 Binary files /dev/null and b/static/icon_machine_clean.png differ diff --git a/static/icon_machine_color.png b/static/icon_machine_color.png new file mode 100644 index 0000000..68a5d52 Binary files /dev/null and b/static/icon_machine_color.png differ diff --git a/static/icon_machine_ink.png b/static/icon_machine_ink.png new file mode 100644 index 0000000..e9373a6 Binary files /dev/null and b/static/icon_machine_ink.png differ diff --git a/static/icon_machine_ink_has.png b/static/icon_machine_ink_has.png new file mode 100644 index 0000000..2ce3c24 Binary files /dev/null and b/static/icon_machine_ink_has.png differ diff --git a/static/icon_machine_load.png b/static/icon_machine_load.png new file mode 100644 index 0000000..48585b6 Binary files /dev/null and b/static/icon_machine_load.png differ diff --git a/static/icon_machine_local.png b/static/icon_machine_local.png new file mode 100644 index 0000000..2ce850f Binary files /dev/null and b/static/icon_machine_local.png differ diff --git a/static/icon_machine_more.png b/static/icon_machine_more.png new file mode 100644 index 0000000..0023ded Binary files /dev/null and b/static/icon_machine_more.png differ diff --git a/static/icon_machine_right.png b/static/icon_machine_right.png new file mode 100644 index 0000000..1f70e28 Binary files /dev/null and b/static/icon_machine_right.png differ diff --git a/static/icon_machine_status_close.png b/static/icon_machine_status_close.png new file mode 100644 index 0000000..53c2fae Binary files /dev/null and b/static/icon_machine_status_close.png differ diff --git a/static/icon_mine_agent.png b/static/icon_mine_agent.png new file mode 100644 index 0000000..48cb61a Binary files /dev/null and b/static/icon_mine_agent.png differ diff --git a/static/icon_mine_income.png b/static/icon_mine_income.png new file mode 100644 index 0000000..4ef45b9 Binary files /dev/null and b/static/icon_mine_income.png differ diff --git a/static/icon_mine_inventory.png b/static/icon_mine_inventory.png new file mode 100644 index 0000000..9f1d834 Binary files /dev/null and b/static/icon_mine_inventory.png differ diff --git a/static/icon_mine_order.png b/static/icon_mine_order.png new file mode 100644 index 0000000..6f841c2 Binary files /dev/null and b/static/icon_mine_order.png differ diff --git a/static/icon_mine_printe.png b/static/icon_mine_printe.png new file mode 100644 index 0000000..8b43750 Binary files /dev/null and b/static/icon_mine_printe.png differ diff --git a/static/icon_mine_printe_list.png b/static/icon_mine_printe_list.png new file mode 100644 index 0000000..f16042a Binary files /dev/null and b/static/icon_mine_printe_list.png differ diff --git a/static/icon_mine_withdrawal.png b/static/icon_mine_withdrawal.png new file mode 100644 index 0000000..b59e1e5 Binary files /dev/null and b/static/icon_mine_withdrawal.png differ diff --git a/static/icon_print_card_recharge.png b/static/icon_print_card_recharge.png new file mode 100644 index 0000000..c85c46a Binary files /dev/null and b/static/icon_print_card_recharge.png differ diff --git a/static/icon_rights_interests_cancel.png b/static/icon_rights_interests_cancel.png new file mode 100644 index 0000000..da8a2d7 Binary files /dev/null and b/static/icon_rights_interests_cancel.png differ diff --git a/static/icon_rights_interests_complete.png b/static/icon_rights_interests_complete.png new file mode 100644 index 0000000..932e1ca Binary files /dev/null and b/static/icon_rights_interests_complete.png differ diff --git a/static/icon_select_date.png b/static/icon_select_date.png new file mode 100644 index 0000000..d588d05 Binary files /dev/null and b/static/icon_select_date.png differ diff --git a/static/iconfont/iconfont.css b/static/iconfont/iconfont.css new file mode 100644 index 0000000..9b0cc42 --- /dev/null +++ b/static/iconfont/iconfont.css @@ -0,0 +1,99 @@ +@font-face {font-family: "iconfont"; + src: url('iconfont.eot?t=1598863932815'); /* IE9 */ + src: url('iconfont.eot?t=1598863932815#iefix') format('embedded-opentype'), /* IE6-IE8 */ + url('data:application/x-font-woff2;charset=utf-8;base64,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') format('woff2'), + url('iconfont.woff?t=1598863932815') format('woff'), + url('iconfont.ttf?t=1598863932815') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */ + url('iconfont.svg?t=1598863932815#iconfont') format('svg'); /* iOS 4.1- */ +} + +.iconfont { + font-family: "iconfont" !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.icon-zhijiandan-:before { + content: "\e616"; +} + +.icon-21:before { + content: "\e620"; +} + +.icon-stores:before { + content: "\e6b2"; +} + +.icon-shouye:before { + content: "\e659"; +} + +.icon-shebei:before { + content: "\e74b"; +} + +.icon-duihao2:before { + content: "\e69e"; +} + +.icon-xiala:before { + content: "\e613"; +} + +.icon-jiantou:before { + content: "\e615"; +} + +.icon-tixianjilu:before { + content: "\e63d"; +} + +.icon-zongdailizhanghao:before { + content: "\e614"; +} + +.icon-zhangdan:before { + content: "\e611"; +} + +.icon-liebiao:before { + content: "\e612"; +} + +.icon-yinhangqia:before { + content: "\e85b"; +} + +.icon-rili1:before { + content: "\e785"; +} + +.icon-wushuju:before { + content: "\e643"; +} + +.icon-kucun:before { + content: "\e643"; +} + +@font-face { + font-family: 'iconfont'; /* Project id 2751108 */ + src: url('//at.alicdn.com/t/font_2751108_rzx1efig7w.woff2?t=1629193710484') format('woff2'), + url('//at.alicdn.com/t/font_2751108_rzx1efig7w.woff?t=1629193710484') format('woff'), + url('//at.alicdn.com/t/font_2751108_rzx1efig7w.ttf?t=1629193710484') format('truetype'); +} + +.iconfont { + font-family: "iconfont" !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.icon-dianweishezhi:before { + content: "\e630"; +} \ No newline at end of file diff --git a/static/iconfont/iconfont.eot b/static/iconfont/iconfont.eot new file mode 100644 index 0000000..4ddc99b Binary files /dev/null and b/static/iconfont/iconfont.eot differ diff --git a/static/iconfont/iconfont.js b/static/iconfont/iconfont.js new file mode 100644 index 0000000..d427e56 --- /dev/null +++ b/static/iconfont/iconfont.js @@ -0,0 +1,47 @@ +! function(i) { + var c, t = + '<svg><symbol id="icon-31daishouhuo" viewBox="0 0 1024 1024"><path d="M841.530179 137.779993 366.132818 137.779993c-49.562812 0-89.855494 40.144302-89.855494 89.499383l0 131.069151-172.015725 99.067296-6.299473 4.189416 0.713244 1.218758 0.029676 0.118704c-3.922333 4.694929-6.062066 10.54824-6.062066 16.58063l0 275.063683c0 16.075117 12.063757 29.1499 26.891464 29.1499 14.857383 0 26.921139-13.103436 26.921139-29.238928L146.455583 494.973208l168.746262-97.373725c11.707646-4.130064 19.552312-15.124466 19.552312-27.336602L334.754157 231.587496c0-19.552312 16.015765-35.479049 35.68678-35.479049l466.750423 0c19.671015 0 35.68678 15.926738 35.68678 35.479049l0 512.034792c0 16.104793 13.104459 29.179576 29.238928 29.179576 16.134469 0 29.238928-13.104459 29.238928-29.238928L931.355997 227.278353C931.355997 177.923272 891.063315 137.779993 841.530179 137.779993z" ></path><path d="M741.957369 656.351666c-55.595202 0-102.900601 39.49041-112.973004 94.104261l-204.284663-0.118704c-10.132778-54.555523-57.437154-93.985558-112.973004-93.985558-63.647599 0-115.439172 51.554166-115.439172 114.934682s51.791573 114.934682 115.439172 114.934682c51.67287 0 97.194646-34.558074 111.071701-84.209914l208.117968 0.089028c13.906731 49.592488 59.398832 84.120886 111.042026 84.120886 63.647599 0 115.409496-51.554166 115.409496-114.934682S805.604968 656.351666 741.957369 656.351666zM741.957369 825.514413c-30.070876 0-54.525847-24.336268-54.525847-54.228065 0-29.892821 24.454972-54.228065 54.525847-54.228065s54.525847 24.336268 54.525847 54.228065C796.483216 801.178145 772.028245 825.514413 741.957369 825.514413zM311.726697 825.514413c-30.070876 0-54.525847-24.336268-54.525847-54.228065 0-29.892821 24.454972-54.228065 54.525847-54.228065 30.0412 0 54.496172 24.336268 54.496172 54.228065C366.221846 801.178145 341.766874 825.514413 311.726697 825.514413z" ></path><path d="M224.930889 573.151755c0 15.540951 12.687974 28.199249 28.317952 28.199249l109.526509-0.029676c15.421224 0 27.575032-4.605901 36.162618-13.727653 13.638625-14.470573 12.539594-35.003212 12.509918-35.121915l0-85.814458c0-15.540951-12.687974-28.199249-28.317952-28.199249s-28.317952 12.658298-28.317952 28.199249l0.029676 78.2072-101.652168 0C237.589187 544.952506 224.930889 557.64048 224.930889 573.151755z" ></path></symbol><symbol id="icon-wodeqianbao" viewBox="0 0 1024 1024"><path d="M510.027066 1018.883469c-310.781162 0-449.376731-106.263186-449.376731-344.549244 0-188.549284 149.627832-393.97084 333.539492-457.902918l233.69346 0.329505c182.468798 63.797002 331.50516 269.12953 331.513346 457.573413C959.39561 912.61926 820.807205 1018.883469 510.027066 1018.883469zM403.554102 281.066397c-34.134425 13.268188-67.544349 32.459273-99.323123 57.051367-35.151591 27.239388-66.721611 59.758012-93.818759 96.66048-27.224038 37.081547-48.516993 76.631308-63.288418 117.526717-14.981203 41.434691-22.572088 82.479503-22.572088 122.029264 0 50.379411 7.067976 93.51893 21.008476 128.222313 13.223163 32.967856 32.766264 59.32413 59.728336 80.595596 28.959565 22.825868 67.709101 40.431851 115.179252 52.309366 51.785433 12.938684 115.559922 19.505239 189.559287 19.505239 73.991178 0 137.765667-6.566556 189.5511-19.505239 47.462988-11.876492 86.212524-29.468149 115.179252-52.309366 26.977421-21.300119 46.520523-47.657416 59.735499-80.595596 13.941524-34.733059 21.001313-77.872578 21.001313-128.222313 0-39.549761-7.599072-80.609922-22.579251-122.029264-14.771425-40.926108-36.06438-80.46052-63.281255-117.526717-27.088962-36.916794-58.658981-69.436442-93.818759-96.66048-31.794124-24.591071-65.187675-43.783179-99.255585-57.020668l-211.94411-0.418532L403.554102 281.066397zM500.326123 844.409762c-23.320125 0-42.294268-18.98233-42.294268-42.302455 0-2.692319 0.284479-5.445012 0.845251-8.196683l1.480724-7.389294-2.169409 0 0-39.041178-83.751473-0.045025c-18.039865 0-32.714076-14.59951-32.714076-32.549324 0-17.97949 14.629185-32.608675 32.601512-32.608675l5.653767 0 0.01535-0.104377L458.189444 682.172751 458.189444 631.209032l-81.395822 0-2.273786-0.059352c-18.107403 0-32.79594-14.613836-32.79594-32.578999s14.629185-32.594349 32.601512-32.594349l5.467525 0 0.01535-0.074701 70.198805 0 1.196245-4.6366c0.441045-1.749854 1.166569-3.261277 2.213411-4.622274l3.365654-4.247744-90.871637-90.856287c-8.331759-8.316409-4.823865-25.399483 7.816013-38.053688 7.66661-7.673773 17.404392-12.251022 26.050306-12.251022 4.966105 0 9.109472 1.541099 11.989055 4.427846l89.562828 89.585341 83.115999-88.6132c3.829212-4.158716 9.647731-6.446829 16.394389-6.446829 9.610892 0 19.707854 4.39817 27.007097 11.756765 13.9712 14.120602 19.310811 24.276916 7.52437 37.560454l-92.090395 94.132914-0.994654 4.771677-1.02433 5.564739 6.087649 1.765203 77.266781 0.164752 1.75804 0.090051c17.994839 0.135076 32.564673 14.748912 32.564673 32.594349 0 17.830087-14.531971 32.429597-32.391734 32.549324l-4.009314 0.074701-80.415494 0 0 50.962695 82.435501 0 1.772366 0.119727c18.032702 0.135076 32.608675 14.748912 32.608675 32.578999 0 17.845437-14.531971 32.444946-32.399921 32.564673l-84.416622 0.045025 0 40.702004-0.441045 1.779529 0.029676 3.290953c0.590448 3.261277 0.912789 6.028297 0.912789 8.855692C542.621415 825.427432 523.646248 844.409762 500.326123 844.409762zM397.069411 177.824011 323.130422 66.75845l0.276293-0.972141-0.171915-3.948939c-0.61296-2.857071-1.001817-4.577249-1.001817-6.238075 0-12.011568 5.92392-22.556739 15.099906-26.880207l2.737344-2.423189c8.840342-2.093684 97.752348-22.138206 170.023348-22.482037l2.109034 0c73.019037 0 154.436348 19.102057 167.839613 22.37766l0.650823 1.541099 2.131547 1.017166c9.102309 4.322445 14.988366 14.868639 14.988366 26.850531 0 1.675152-0.418532 3.440355-0.852414 5.29561l-0.441045 1.88493 0.957815 4.457522-74.395384 110.586654L397.069411 177.825035zM510.415922 67.716264c-26.14752 0.135076-57.596789 3.096525-93.504604 8.810666l-9.491165 1.5104 23.896246 35.885302 157.52571 0 24.232914-36.363186-9.468652-1.541099c-34.149774-5.504364-64.896032-8.302083-91.39557-8.302083L510.415922 67.716264z" ></path></symbol><symbol id="icon-wodeyouhuijuan" viewBox="0 0 1024 1024"><path d="M1009.770667 393.536C1018.282667 390.528 1024 382.464 1024 373.397333l0-131.242667c0-52.352-42.56-94.976-94.912-94.976L94.976 147.178667c-52.352 0-94.954667 42.624-94.954667 94.976l0 131.242667c0 9.045333 5.696 17.130667 14.250667 20.138667C64.426667 411.264 98.133333 458.858667 98.133333 512c0 53.12-33.706667 100.757333-83.882667 118.506667C5.696 633.450667 0 641.578667 0 650.624l0 131.242667c0 52.330667 42.602667 94.954667 94.954667 94.954667L929.066667 876.821333c52.330667 0 94.933333-42.624 94.933333-94.954667l0-131.242667c0-9.045333-5.674667-17.130667-14.229333-20.117333-50.218667-17.749333-83.946667-65.365333-83.946667-118.506667S959.552 411.285333 1009.770667 393.536zM883.114667 512c0 66.048 38.869333 125.717333 98.154667 152.981333l0 116.885333c0 28.778667-23.402667 52.202667-52.202667 52.202667L94.954667 834.069333c-28.8 0-52.224-23.424-52.224-52.202667l0-116.885333c59.264-27.264 98.133333-86.933333 98.133333-152.981333 0-66.048-38.869333-125.738667-98.133333-152.981333l0-116.864c0-28.8 23.402667-52.224 52.224-52.224L929.066667 189.930667c28.778667 0 52.202667 23.402667 52.202667 52.224l0 116.864C921.962667 386.282667 883.114667 445.952 883.114667 512z" ></path><path d="M683.690667 392.533333l-144.682667 0 86.293333-86.208c8.384-8.362667 8.384-21.888 0-30.229333-8.341333-8.341333-21.824-8.341333-30.208 0L512 359.104l-83.008-82.986667c-8.384-8.362667-21.866667-8.362667-30.208 0-8.362667 8.362667-8.362667 21.866667 0 30.208l86.229333 86.208-144.768 0c-11.776 0-21.354667 9.557333-21.354667 21.354667 0 11.797333 9.578667 21.376 21.354667 21.376l150.4 0 0 79.893333L364.8 515.157333c-11.818667 0-21.376 9.557333-21.376 21.376 0 11.818667 9.557333 21.333333 21.376 21.333333l125.845333 0 0 174.869333c0 11.84 9.557333 21.376 21.354667 21.376 11.84 0 21.376-9.578667 21.376-21.376L533.376 557.866667l125.76 0c11.861333 0 21.418667-9.536 21.418667-21.333333s-9.536-21.376-21.376-21.376l-125.781333 0 0-79.893333 150.357333 0c11.776 0 21.312-9.6 21.312-21.376C705.045333 402.112 695.509333 392.533333 683.690667 392.533333z" ></path></symbol><symbol id="icon-daifukuan01" viewBox="0 0 1024 1024"><path d="M391.809105 95.359858l217.4628 0c5.718235 0 10.354835-5.102205 10.354835-11.395538l0-8.546653c0-6.293333-4.6366-11.395538-10.354835-11.395538l-217.4628 0c-5.719258 0-10.355859 5.102205-10.355859 11.395538l0 8.546653C381.453247 90.257653 386.089847 95.359858 391.809105 95.359858z" ></path><path d="M305.64877 389.746632l389.782448 0c5.718235 0 10.354835-5.102205 10.354835-11.395538l0-8.546653c0-6.293333-4.6366-11.395538-10.354835-11.395538L305.64877 358.408903c-5.719258 0-10.355859 5.102205-10.355859 11.395538l0 8.546653C295.292911 384.644427 299.929512 389.746632 305.64877 389.746632z" ></path><path d="M860.412736 595.754542 860.412736 102.585423c0-20.977777-15.429411-37.986149-34.463929-37.986149L704.581622 64.599274c-10.743692 1.198292-15.273868 14.719236-15.273868 14.719236l-38.392402 69.362764c0 0-2.835581 4.306072-4.256954 5.184069-1.219781 0.7552-4.738931 0.949628-4.738931 0.949628L357.80771 154.814971c0 0-2.674922-0.339738-3.66139-0.949628-0.724501-0.448208-2.591011-2.174526-2.591011-2.174526l-40.058344-72.372308c0 0-4.530177-13.520945-15.272845-14.719236L175.201789 64.599274c-19.033495 0-34.463929 17.007349-34.463929 37.986149l0 754.434541c0 20.9788 15.430434 37.985126 34.463929 37.985126l382.28059 0c-0.002047-0.002047-0.004093-0.004093-0.00614-0.00614 38.684044 39.760562 92.759637 64.470337 152.61691 64.470337 117.593232 0 212.923414-95.329159 212.923414-212.922391C923.016563 687.630043 899.083477 634.304534 860.412736 595.754542zM854.310761 589.918627c-0.218988-0.200568-0.432859-0.406253-0.652869-0.607844C853.878926 589.511351 854.092797 589.717036 854.310761 589.918627zM850.96455 586.902944c-0.287549-0.254803-0.573051-0.512676-0.862647-0.766456C850.391499 586.390267 850.677001 586.648141 850.96455 586.902944zM175.201789 863.667362c-3.325745 0-6.031367-2.982938-6.031367-6.647397L169.170422 102.585423c0-3.665483 2.705622-6.647397 6.031367-6.647397l112.188128 0 39.893592 72.073502 2.424212 4.380774 3.566222 3.300162c3.911076 3.618411 6.048763 4.940522 6.952342 5.499248 1.477654 0.914836 5.973038 3.696182 14.328333 4.755304l1.620917 0.205685 1.63115 0 284.11278 0 0.711198 0 0.710175-0.039909c10.194176-0.562818 15.497972-3.846608 17.225313-4.916986 3.194762-1.974981 7.598049-5.362124 13.358239-14.106276l0.668219-1.017166 0.594541-1.072425 38.22458-69.062935 112.534006 0c3.324722 0 6.031367 2.981914 6.031367 6.647397l0 469.37111c-34.530444-24.153096-76.550467-38.33305-121.886001-38.33305-1.439792 0-2.874467 0.025583-4.307096 0.055259l0-7.184633c0-6.293333-4.6366-11.395538-10.354835-11.395538L305.64877 515.097548c-5.719258 0-10.355859 5.102205-10.355859 11.395538l0 8.546653c0 6.29538 4.6366 11.396561 10.355859 11.396561l331.537905 0c1.38658-0.505513 2.781346-0.995677 4.181229-1.472538-60.281945 20.546965-108.391662 67.375503-130.688481 126.8255L305.64877 671.789263c-5.719258 0-10.355859 5.102205-10.355859 11.395538l0 8.547677c0 6.294356 4.6366 11.395538 10.355859 11.395538l195.95802 0c0.282433-1.363044 0.578168-2.720971 0.887206-4.074805-3.479241 15.273868-5.323239 31.168883-5.323239 47.495734 0 43.278689 12.924357 83.533508 35.107589 117.138884-0.004093-0.00614-0.008186-0.01228-0.01228-0.01842L175.201789 863.669408zM847.305207 583.743998c-0.26606-0.224104-0.530073-0.450255-0.797156-0.673335C846.775134 583.293743 847.039147 583.520917 847.305207 583.743998zM843.547627 580.647473c-0.221034-0.178055-0.441045-0.357134-0.661056-0.533143C843.106582 580.290339 843.326593 580.469418 843.547627 580.647473zM839.734788 577.647139c-0.163729-0.12689-0.328481-0.252757-0.493234-0.379647C839.406307 577.394383 839.571059 577.520249 839.734788 577.647139zM835.868737 574.74402c-0.088004-0.064468-0.176009-0.128937-0.264013-0.192382C835.692728 574.615083 835.780733 574.678528 835.868737 574.74402zM701.857581 533.797445c-0.303922 0.011256-0.608867 0.021489-0.912789 0.033769C701.248713 533.818935 701.553659 533.808702 701.857581 533.797445zM697.232237 534.021549c-0.343831 0.021489-0.686638 0.042979-1.030469 0.064468C696.545598 534.064528 696.888406 534.040992 697.232237 534.021549zM692.459536 534.355147c-0.172939 0.01535-0.344854 0.031722-0.517793 0.046049C692.115706 534.38687 692.287621 534.369473 692.459536 534.355147zM680.063205 535.741727c-0.394996 0.055259-0.789992 0.106424-1.183965 0.164752C679.273213 535.849174 679.668209 535.796986 680.063205 535.741727zM675.686525 536.40483c-0.532119 0.086981-1.063215 0.173962-1.594311 0.265036C674.623309 536.578792 675.154405 536.491811 675.686525 536.40483zM671.063227 537.206078c-0.568958 0.105401-1.133823 0.215918-1.701758 0.325411C669.929404 537.421996 670.495292 537.310456 671.063227 537.206078zM666.400021 538.119891c-0.522909 0.10847-1.041726 0.228197-1.561565 0.339738C665.358295 538.347065 665.877111 538.228361 666.400021 538.119891zM659.509077 539.685549c-0.653893 0.158612-1.308809 0.313132-1.960655 0.478907C658.200268 539.997658 658.856207 539.844162 659.509077 539.685549zM655.051555 540.821419c-0.727571 0.193405-1.454118 0.387833-2.177596 0.589424C653.597437 541.209252 654.323984 541.015847 655.051555 540.821419zM650.470213 542.096459c-0.7552 0.220011-1.509377 0.445138-2.260483 0.673335C648.96186 542.541597 649.715013 542.316469 650.470213 542.096459zM645.903198 543.479969c-0.799202 0.251733-1.595334 0.5137-2.390443 0.775666C644.308887 543.993668 645.103995 543.731702 645.903198 543.479969zM509.358335 675.41586c-0.049119 0.1361-0.097214 0.273223-0.145309 0.409322C509.261121 675.689083 509.309216 675.55196 509.358335 675.41586zM505.630431 686.968987c-0.027629 0.093121-0.057305 0.187265-0.083911 0.280386C505.574149 687.156252 505.602801 687.062108 505.630431 686.968987zM504.702292 690.271196c-0.140193 0.51063-0.278339 1.02126-0.414439 1.532913C504.423953 691.292456 504.562099 690.781826 504.702292 690.271196zM503.572562 694.563966c-0.156566 0.627287-0.309038 1.257643-0.460488 1.886977C503.26557 695.821609 503.414973 695.191252 503.572562 694.563966zM554.005184 891.345748c0.010233 0.011256 0.021489 0.021489 0.030699 0.032746C554.025651 891.36826 554.014394 891.357004 554.005184 891.345748zM535.081183 867.826078c0.00921 0.01228 0.01842 0.024559 0.026606 0.037862C535.098579 867.850637 535.089369 867.838358 535.081183 867.826078zM538.005792 871.933629c0.00921 0.01228 0.01842 0.023536 0.025583 0.035816C538.024212 871.958188 538.015002 871.945909 538.005792 871.933629zM541.023522 875.967502c0.00921 0.013303 0.019443 0.024559 0.028653 0.037862C541.042965 875.992061 541.032732 875.980805 541.023522 875.967502zM544.13028 879.923604c0.01228 0.01535 0.024559 0.029676 0.036839 0.046049C544.155862 879.95328 544.142559 879.938953 544.13028 879.923604zM547.332205 883.808074c0.01228 0.01535 0.024559 0.028653 0.036839 0.044002C547.357787 883.836727 547.344484 883.823424 547.332205 883.808074zM550.624181 887.615796c0.01228 0.014326 0.023536 0.026606 0.035816 0.039909C550.647717 887.642402 550.63646 887.629099 550.624181 887.615796zM838.944795 875.398544c-34.417881 34.416857-80.179111 53.371558-128.851647 53.371558-48.673559 0-94.433766-18.954701-128.851647-53.371558-34.417881-34.417881-53.372581-80.179111-53.372581-128.851647 0-48.673559 18.954701-94.433766 53.372581-128.851647s80.178087-53.372581 128.851647-53.372581c48.672536 0 94.433766 18.954701 128.851647 53.372581s53.372581 80.179111 53.372581 128.851647S873.362676 840.97964 838.944795 875.398544z" ></path><path d="M801.834596 756.008386c8.477069 0 15.349593-6.872524 15.349593-15.349593s-6.872524-15.349593-15.349593-15.349593l-59.743686 0 65.669652-85.421508c5.167696-6.721075 3.906983-16.35755-2.813069-21.524223-6.721075-5.16872-16.358573-3.906983-21.524223 2.813069l-72.494081 94.297666-72.496128-94.297666c-5.166673-6.720052-14.802124-7.981788-21.524223-2.813069-6.720052 5.166673-7.980765 14.803147-2.813069 21.524223l65.671699 85.421508-59.744709 0c-8.477069 0-15.349593 6.872524-15.349593 15.349593s6.872524 15.349593 15.349593 15.349593l75.556836 0 0 33.440623-71.920006 0c-8.477069 0-15.349593 6.872524-15.349593 15.349593s6.872524 15.349593 15.349593 15.349593l71.920006 0 0 57.341986c0 8.477069 6.872524 15.349593 15.349593 15.349593s15.349593-6.872524 15.349593-15.349593l0-57.341986 71.918983 0c8.477069 0 15.349593-6.872524 15.349593-15.349593s-6.872524-15.349593-15.349593-15.349593l-71.918983 0 0-33.440623L801.834596 756.008386z" ></path></symbol><symbol id="icon-yiwancheng" viewBox="0 0 1024 1024"><path d="M889.679805 547.051307c0-41.48074-27.488051-76.604702-65.056692-87.821161L824.623114 320.252885c0-47.821145-38.557154-86.729294-85.951581-86.729294l-39.310308 0-87.373976-94.53405c-3.321652-3.619434-8.553817-4.706185-13.033851-2.76702L374.667192 233.523591l-85.661985 0c-47.393403 0-85.951581 38.908148-85.951581 86.729294l0 453.629591c0 47.806819 38.557154 86.706781 85.951581 86.706781l449.666326 0c47.393403 0 85.951581-38.899962 85.951581-86.706781L824.623114 634.881678C862.190731 623.665219 889.679805 588.53921 889.679805 547.051307zM600.618317 160.9149l67.11149 72.608691L433.252495 233.523591 600.618317 160.9149zM801.478997 773.881452c0 34.932604-28.181853 63.35698-62.808488 63.35698L289.005206 837.238432c-34.626635 0-62.808488-28.424376-62.808488-63.35698L226.196719 320.252885c0-34.94693 28.181853-63.379493 62.808488-63.379493l449.666326 0c34.626635 0 62.808488 28.433586 62.808488 63.379493l0 135.267776c-0.857531-0.024559-1.716084-0.038886-2.578732-0.038886L578.36243 455.481775c-6.390547 0-11.573593 5.230118-11.573593 11.675924l0 159.799496c0 6.445806 5.184069 11.675924 11.573593 11.675924l220.537835 0c0.862647 0 1.722224-0.01535 2.578732-0.038886L801.478997 773.881452zM798.900266 615.282295 589.936023 615.282295 589.936023 478.82953l208.964242 0c37.296441 0 67.636446 30.607088 67.636446 68.221778C866.536712 584.675206 836.196707 615.282295 798.900266 615.282295z" ></path></symbol><symbol id="icon-wodedingdan" viewBox="0 0 1024 1024"><path d="M383 341l260 0c16.6 0 30-13.4 30-30 0-16.6-13.4-30-30-30L383 281c-16.6 0-30 13.4-30 30C353 327.6 366.4 341 383 341z" ></path><path d="M383 465l260 0c16.6 0 30-13.4 30-30 0-16.6-13.4-30-30-30L383 405c-16.6 0-30 13.4-30 30C353 451.6 366.4 465 383 465z" ></path><path d="M383 598l260 0c16.6 0 30-13.4 30-30 0-16.6-13.4-30-30-30L383 538c-16.6 0-30 13.4-30 30C353 584.6 366.4 598 383 598z" ></path><path d="M807 690.7c0.4-2.9 0.4-5.9 0-8.9L807 203l-0.5 0c-4.5-39.9-38.3-71-79.5-71L316 132c-44.2 0-80 35.8-80 80l0 600c0 41.1 31.1 75 71 79.5l0 0.5 281 0 0-0.4c4-0.7 7.8-2.2 11.1-4.3 3.5-1.3 6.8-3.3 9.7-6l188.8-172.9c3.8-3.5 6.6-7.8 8.1-12.4l1.3 0L807 690.7zM296 812 296 212c0-11 9-20 20-20l411 0c11 0 20 9 20 20l0 437L633 649c-44.2 0-80 35.8-80 80l0 103L316 832C305 832 296 823 296 812zM708.1 709 613 796.1 613 729c0-11 9-20 20-20L708.1 709z" ></path></symbol><symbol id="icon-jifen" viewBox="0 0 1603 1024"><path d="M801.23724 0C518.930425 0 289.23724 229.693184 289.23724 512s229.693184 512 512 512c282.311824 0 512-229.693184 512-512S1083.549065 0 801.23724 0zM801.23724 960.000939c-247.04241 0-447.995931-200.963537-447.995931-448.000939 0-247.04241 200.95352-448.000939 447.995931-448.000939S1249.23818 264.95759 1249.23818 512C1249.23818 759.037402 1048.279651 960.000939 801.23724 960.000939z" ></path><path d="M801.23724 409.832892c-22.665682 0-43.835093-2.909902-63.543293-8.725949-19.689418-5.796014-35.216825-14.408021-46.594742-25.773417l0 34.499367c0 9.338231 4.933311 17.999071 14.782402 25.975007 9.841579 7.977188 23.235392 14.292827 40.150136 18.975716 16.914744 4.659099 35.315742 6.996787 55.205498 6.996787 19.879739 0 38.290753-2.337688 55.196733-6.996787 16.914744-4.659099 30.308557-10.998528 40.1589-18.975716 9.840327-7.975936 14.773637-16.638028 14.773637-25.975007l0-34.499367c-11.369152 11.364144-26.920349 19.953613-46.61102 25.773417C845.064821 406.925495 823.894158 409.832892 801.23724 409.832892z" ></path><path d="M911.366511 531.161028c-11.369152 11.365396-26.920349 19.956117-46.61102 25.772165-19.69067 5.8173-40.860082 8.728454-63.516999 8.728454-22.665682 0-43.835093-2.909902-63.543293-8.728454-19.689418-5.816048-35.216825-14.382979-46.594742-25.748375l0 34.49561c0 9.340735 4.933311 18.000323 14.782402 25.977511 9.841579 7.974684 23.235392 14.292827 40.150136 18.975716 16.914744 4.659099 35.315742 6.976753 55.205498 6.976753 19.879739 0 38.290753-2.341444 55.196733-7.000543 16.914744-4.680384 30.308557-10.998528 40.1589-18.973212 9.840327-7.97844 14.773637-16.635524 14.773637-25.975007L911.367763 531.161028z" ></path><path d="M705.86533 357.904165c9.840327 7.999726 23.235392 14.320374 40.150136 18.979472 16.931021 4.659099 35.332019 6.976753 55.221775 6.976753 19.879739 0 38.290753-2.342696 55.196733-7.000543 16.914744-4.659099 30.308557-10.998528 40.1589-18.975716 9.840327-7.97844 14.773637-16.634272 14.773637-25.975007l0-21.514994c0-9.339483-4.932058-17.996566-14.773637-25.973755-9.850344-7.975936-23.244156-14.296584-40.1589-18.975716-16.905979-4.659099-35.316994-7.000543-55.196733-7.000543-19.889756 0-38.290753 2.341444-55.221775 7.000543-16.914744 4.679132-30.309809 10.998528-40.150136 18.975716-9.849091 7.977188-14.774889 16.634272-14.774889 25.97125l0 21.540036C691.09044 341.269893 696.016238 349.928229 705.86533 357.904165z" ></path><path d="M864.771769 479.029459c-19.706948 5.8173-40.876359 8.729706-63.534528 8.729706-22.665682 0-43.835093-2.911154-63.542041-8.729706-19.691922-5.818552-35.218077-14.404265-46.595994-25.769661l0 34.499367c0 9.339483 4.933311 17.996566 14.782402 25.973755 9.841579 7.974684 23.235392 14.294079 40.150136 18.974464 16.931021 4.659099 35.332019 7.000543 55.221775 7.000543 19.879739 0 38.281989-2.341444 55.196733-7.000543 16.913492-4.659099 30.308557-10.99978 40.1589-18.974464 9.840327-7.977188 14.774889-16.635524 14.774889-25.973755l0-34.499367C900.013636 464.625194 884.462439 473.213411 864.771769 479.029459z" ></path><path d="M801.23724 642.725216c-22.665682 0-43.835093-2.909902-63.543293-8.725949-19.689418-5.796014-35.216825-14.408021-46.594742-25.773417l0 34.499367c0 9.338231 4.933311 17.999071 14.782402 25.975007 9.841579 7.977188 23.235392 14.292827 40.150136 18.975716 16.914744 4.659099 35.315742 6.996787 55.205498 6.996787 19.879739 0 38.290753-2.337688 55.196733-6.996787 16.914744-4.659099 30.308557-10.998528 40.1589-18.975716 9.840327-7.975936 14.773637-16.638028 14.773637-25.975007l0-34.499367c-11.369152 11.364144-26.920349 19.953613-46.61102 25.773417C845.064821 639.817818 823.894158 642.725216 801.23724 642.725216z" ></path><path d="M801.23724 720.651488c-22.665682 0-43.835093-2.911154-63.542041-8.729706-19.691922-5.818552-35.218077-14.404265-46.595994-25.769661l0 34.499367c0 9.339483 4.933311 17.996566 14.782402 25.973755 9.841579 7.974684 23.235392 14.294079 40.150136 18.974464 16.931021 4.659099 35.332019 7.000543 55.221775 7.000543 19.879739 0 38.281989-2.341444 55.196733-7.000543 16.913492-4.659099 30.308557-10.99978 40.1589-18.974464 9.840327-7.977188 14.774889-16.635524 14.774889-25.973755l0-34.499367c-11.370404 11.365396-26.921601 19.953613-46.612272 25.769661C845.064821 717.740334 823.894158 720.651488 801.23724 720.651488z" ></path><path d="M801.23724 798.552718c-22.665682 0-43.835093-2.909902-63.543293-8.728454-19.689418-5.816048-35.216825-14.382979-46.594742-25.748375l0 34.49561c0 9.340735 4.933311 18.000323 14.782402 25.977511 9.841579 7.974684 23.235392 14.292827 40.150136 18.975716 16.914744 4.659099 35.315742 6.976753 55.205498 6.976753 19.879739 0 38.290753-2.341444 55.196733-7.000543 16.914744-4.680384 30.308557-10.998528 40.1589-18.973212 9.840327-7.97844 14.773637-16.635524 14.773637-25.975007l0-34.499367c-11.369152 11.365396-26.920349 19.956117-46.61102 25.772165C845.064821 795.642816 823.894158 798.552718 801.23724 798.552718z" ></path><path d="M465.847252 496.296046c-8.431704 6.829004-12.648808 14.240239-12.648808 22.234956l0 18.441065c0 7.993466 4.217104 15.407205 12.648808 22.234956 8.425443 6.849038 19.89226 12.259402 34.374156 16.248622 14.494417 3.987968 30.248456 5.972561 47.277142 5.972561 17.019921 0 32.781473-2.005879 47.255856-5.992595 14.480644-3.98922 25.94746-9.415862 34.380416-16.244866 8.425443-6.831508 12.647556-14.241491 12.647556-22.238713l0-18.419779c0-7.99597-4.223365-15.407205-12.647556-22.236208-8.432956-6.829004-19.899773-12.239368-34.380416-16.244866-14.473131-3.987968-30.235935-5.992595-47.255856-5.992595-17.028686 0-32.781473 2.004627-47.277142 5.992595C485.739512 484.056678 474.272696 489.468294 465.847252 496.296046M453.205957 640.844548 453.205957 670.379301c0 7.99597 4.224617 15.407205 12.65632 22.237461 8.425443 6.827752 19.89226 12.238116 34.374156 16.244866 14.494417 3.98922 30.248456 5.993847 47.277142 5.993847 17.019921 0 32.77396-2.004627 47.255856-5.993847 14.480644-3.987968 25.94746-9.417114 34.380416-16.244866 8.425443-6.829004 12.648808-14.242743 12.648808-22.237461l0-29.536005c-9.73515 9.730141-23.047575 17.082527-39.905974 22.062165-16.87092 4.980891-34.995202 7.47384-54.392879 7.47384-19.403937 0-37.528219-2.49295-54.400391-7.47384C476.239759 657.925822 462.946115 650.574689 453.205957 640.844548M453.205957 707.556929l0 29.532249c0 7.997222 4.224617 15.410961 12.65632 22.239965 8.425443 6.827752 19.89226 12.236864 34.374156 16.244866 14.480644 3.987968 30.234682 5.972561 47.262116 5.972561 17.019921 0 32.781473-2.004627 47.255856-5.992595 14.480644-4.00675 25.94746-9.415862 34.380416-16.243614 8.425443-6.830256 12.647556-14.242743 12.647556-22.238713l0-29.536005c-9.733897 9.730141-23.046323 17.085031-39.904722 22.063417-16.857147 4.980891-34.981429 7.472588-54.379105 7.472588-19.403937 0-37.528219-2.491697-54.401643-7.472588C476.239759 724.621927 462.946115 717.287071 453.205957 707.556929M453.205957 574.129662l0 29.536005c0 7.994718 4.224617 15.409709 12.65632 22.238713 8.425443 6.829004 19.89226 12.236864 34.374156 16.244866 14.480644 3.987968 30.234682 5.990091 47.262116 5.990091 17.019921 0 32.781473-2.000871 47.255856-5.990091 14.480644-3.987968 25.94746-9.415862 34.380416-16.244866 8.425443-6.829004 12.647556-14.243995 12.647556-22.238713L641.782378 574.129662c-9.733897 9.730141-23.046323 17.082527-39.904722 22.064669-16.857147 4.980891-34.981429 7.470084-54.379105 7.470084-19.403937 0-37.528219-2.491697-54.401643-7.470084C476.239759 591.232222 462.946115 583.859803 453.205957 574.129662" ></path><path d="M973.325886 490.937018c-8.431704 6.829004-12.648808 14.241491-12.648808 22.234956l0 18.441065c0 7.993466 4.217104 15.407205 12.648808 22.234956 8.425443 6.849038 19.89226 12.259402 34.374156 16.248622 14.494417 3.987968 30.248456 5.972561 47.277142 5.972561 17.019921 0 32.781473-2.005879 47.255856-5.992595 14.480644-3.98922 25.94746-9.415862 34.380416-16.244866 8.425443-6.831508 12.647556-14.241491 12.647556-22.238713l0-18.419779c0-7.99597-4.222112-15.407205-12.647556-22.236208-8.432956-6.829004-19.899773-12.239368-34.380416-16.244866-14.474383-3.987968-30.235935-5.992595-47.255856-5.992595-17.028686 0-32.781473 2.004627-47.277142 5.992595C993.218146 478.69765 981.751329 484.108014 973.325886 490.937018M960.684591 635.484268l0 29.536005c0 7.99597 4.223365 15.407205 12.65632 22.237461 8.425443 6.8265 19.89226 12.238116 34.374156 16.244866 14.494417 3.98922 30.248456 5.993847 47.277142 5.993847 17.019921 0 32.77396-2.004627 47.255856-5.993847 14.480644-3.987968 25.94746-9.417114 34.380416-16.244866 8.425443-6.829004 12.648808-14.242743 12.648808-22.237461l0-29.536005c-9.73515 9.730141-23.047575 17.082527-39.905974 22.062165-16.87092 4.980891-34.995202 7.47384-54.392879 7.47384-19.403937 0-37.529471-2.49295-54.400391-7.47384C983.718393 652.565543 970.424749 645.214409 960.684591 635.484268M960.684591 702.197902l0 29.532249c0 7.997222 4.223365 15.410961 12.65632 22.239965 8.425443 6.827752 19.89226 12.236864 34.374156 16.244866 14.480644 3.987968 30.234682 5.972561 47.262116 5.972561 17.019921 0 32.781473-2.004627 47.255856-5.992595 14.480644-4.00675 25.94746-9.415862 34.380416-16.243614 8.425443-6.830256 12.647556-14.242743 12.647556-22.238713l0-29.536005c-9.733897 9.730141-23.046323 17.085031-39.904722 22.063417-16.857147 4.980891-34.981429 7.472588-54.379105 7.472588-19.403937 0-37.529471-2.491697-54.401643-7.472588C983.718393 719.261647 970.424749 711.926791 960.684591 702.197902M960.684591 568.769382l0 29.536005c0 7.994718 4.223365 15.409709 12.65632 22.238713 8.425443 6.829004 19.89226 12.236864 34.374156 16.244866 14.480644 3.987968 30.234682 5.990091 47.262116 5.990091 17.019921 0 32.781473-2.000871 47.255856-5.990091 14.480644-3.987968 25.94746-9.415862 34.380416-16.244866 8.425443-6.829004 12.647556-14.243995 12.647556-22.238713l0-29.536005c-9.733897 9.730141-23.046323 17.082527-39.904722 22.064669-16.857147 4.980891-34.981429 7.470084-54.379105 7.470084-19.403937 0-37.529471-2.491697-54.401643-7.470084C983.718393 585.871942 970.424749 578.499523 960.684591 568.769382" ></path></symbol><symbol id="icon-lingjuandizhi" viewBox="0 0 1024 1024"><path d="M943.088 340.144 526.592 27.64C516.24 19.88 504.112 16 492 16c-12.12 0-24.24 3.88-34.592 11.64L40.912 340.144C25.28 351.872 16 370.816 16 391l0 562.488C16 988.008 42.64 1016 75.496 1016c0 0 79.44 0 146.528 0 103.688 0 91.472-81.88 91.472-81.88L313.496 641c0-34.52 26.64-62.504 59.496-62.504l238 0c32.856 0 59.504 27.984 59.504 62.504l0 298.368c0 0-3.68 75.304 81.528 76.624 68.904 0 156.464 0 156.464 0 32.856 0 59.504-27.992 59.504-62.504L967.992 391C968 370.816 958.72 351.872 943.088 340.144z" ></path></symbol><symbol id="icon-weibiaoti2fuzhi05" viewBox="0 0 1024 1024"><path d="M633.6 217.6l108.8 0L512 64 281.6 217.6 384 217.6l0 275.2 249.6 0L633.6 217.6zM435.2 172.8 512 121.6l76.8 51.2L588.8 448 435.2 448 435.2 172.8z" ></path><path d="M627.2 761.6l76.8-102.4 179.2 0-64 249.6L204.8 908.8l-64-249.6 179.2 0 76.8 102.4L627.2 761.6zM838.4 281.6l-147.2 0c-12.8 0-25.6 12.8-25.6 25.6 0 12.8 12.8 25.6 25.6 25.6l108.8 0c12.8 0 19.2 6.4 25.6 19.2L876.8 576c6.4 12.8-6.4 32-25.6 32l-160 0c-6.4 0-12.8 6.4-19.2 12.8l-57.6 83.2c-6.4 6.4-12.8 12.8-19.2 12.8L435.2 716.8c-6.4 0-12.8-6.4-19.2-12.8L358.4 620.8C352 614.4 345.6 608 339.2 608L172.8 608C160 608 147.2 595.2 147.2 576l51.2-224c0-12.8 12.8-19.2 25.6-19.2l108.8 0c12.8 0 25.6-12.8 25.6-25.6 0-12.8-12.8-25.6-25.6-25.6L185.6 281.6c-12.8 0-19.2 6.4-25.6 19.2L89.6 627.2c0 6.4 0 6.4 0 12.8l76.8 300.8c0 12.8 12.8 19.2 25.6 19.2l652.8 0c12.8 0 19.2-6.4 25.6-19.2l76.8-300.8c0-6.4 0-6.4 0-12.8l-76.8-326.4C857.6 288 851.2 281.6 838.4 281.6z" ></path></symbol><symbol id="icon-shouhuodizhi" viewBox="0 0 1024 1024"><path d="M512.005117 0.346901c-282.287201 0-434.613492 213.591633-434.613492 396.730697 0 190.322673 196.84625 402.487817 429.855118 504.555447l4.758374 2.100848 4.758374-2.100848c232.997612-102.066607 429.844885-314.251194 429.844885-504.555447C946.607352 213.93751 794.292318 0.346901 512.005117 0.346901zM512.00307 526.686491c-108.035552 0-195.61419-87.579661-195.61419-195.61419S403.967518 135.458111 512.00307 135.458111c108.033505 0 195.61419 87.579661 195.61419 195.61419S620.037599 526.686491 512.00307 526.686491z" ></path><path d="M259.848143 984.530057a246.409 38.232 0 1 0 504.303714 0 246.409 38.232 0 1 0-504.303714 0Z" ></path></symbol><symbol id="icon-wodeshoucang" viewBox="0 0 1024 1024"><path d="M1019.733333 384c-8.533333-25.6-34.133333-46.933333-59.733333-51.2l-268.8-42.666667L580.266667 42.666667c-12.8-25.6-38.4-42.666667-68.266667-42.666667s-55.466667 17.066667-68.266667 42.666667L328.533333 290.133333l-264.533333 42.666667C34.133333 337.066667 12.8 354.133333 4.266667 384c-8.533333 25.6 0 55.466667 17.066666 76.8l196.266667 200.533333L170.666667 938.666667c-4.266667 29.866667 8.533333 55.466667 29.866666 72.533333 12.8 8.533333 29.866667 12.8 42.666667 12.8 12.8 0 25.6-4.266667 34.133333-8.533333l230.4-123.733334 230.4 123.733334c12.8 4.266667 25.6 8.533333 34.133334 8.533333 17.066667 0 29.866667-4.266667 42.666666-12.8 21.333333-17.066667 34.133333-46.933333 29.866667-72.533333l-46.933333-277.333334 196.266666-200.533333c29.866667-25.6 34.133333-51.2 25.6-76.8z" ></path></symbol><symbol id="icon-ziyuan" viewBox="0 0 1024 1024"><path d="M512 425.353846a226.855385 226.855385 0 1 0 205.193846 322.953846 36.233846 36.233846 0 1 0-65.378461-30.326154 154.781538 154.781538 0 0 1-294.99077-65.378461A154.781538 154.781538 0 0 1 512 497.427692a157.538462 157.538462 0 0 1 140.603077 90.19077 36.233846 36.233846 0 0 0 65.378461-30.326154A228.036923 228.036923 0 0 0 512 425.353846z" ></path><path d="M512 291.446154a351.704615 351.704615 0 1 0 351.310769 351.310769A351.704615 351.704615 0 0 0 512 291.446154z m279.236923 351.310769A279.236923 279.236923 0 1 1 512 363.52a279.630769 279.630769 0 0 1 279.236923 279.236923z" ></path><path d="M801.083077 29.538462H222.916923a62.227692 62.227692 0 0 0-62.227692 62.227692v142.178461a114.215385 114.215385 0 0 0 39.384615 78.769231L250.486154 354.461538a36.233846 36.233846 0 1 0 45.686154-54.744615l-50.412308-39.384615a48.049231 48.049231 0 0 1-12.996923-24.418462V101.612308h558.473846v132.332307a30.326154 30.326154 0 0 1-12.996923 24.418462l-50.412308 39.384615A36.233846 36.233846 0 0 0 773.513846 354.461538l50.806154-39.384615a101.612308 101.612308 0 0 0 39.384615-78.769231V91.766154A62.227692 62.227692 0 0 0 801.083077 29.538462z" ></path></symbol><symbol id="icon-gouwuche" viewBox="0 0 1024 1024"><path d="M289 881.2c-55.9 0-101.4-45.5-101.4-101.4 0-55.9 45.5-101.4 101.4-101.4s101.4 45.5 101.4 101.4c0 55.9-45.5 101.4-101.4 101.4z m0-161.6c-33.2 0-60.2 27-60.2 60.1 0 33.2 27 60.1 60.2 60.1s60.2-27 60.2-60.1c-0.1-33.1-27.1-60.1-60.2-60.1zM566.2 881.2c-55.9 0-101.4-45.5-101.4-101.4 0-55.9 45.5-101.4 101.4-101.4s101.4 45.5 101.4 101.4c0 55.9-45.5 101.4-101.4 101.4z m0-161.6c-33.2 0-60.2 27-60.2 60.1 0 33.2 27 60.1 60.2 60.1s60.2-27 60.2-60.1c-0.1-33.1-27.1-60.1-60.2-60.1zM648.4 640.8H198.3L86.9 250.6h567.2l45.7-107.7h163.5c40.7 0 73.8 33.4 73.8 74.5 0 41-33.1 74.3-73.8 74.3-5.1 0-47.7 0.1-70.2 0.2L648.4 640.8z m-419-41.3h391.4l144.7-348.9h13.7s77.1-0.2 84-0.2c17.9 0 32.6-14.8 32.6-33 0-18-14.9-33.2-32.6-33.2H727l-45.7 107.7H141.6l87.8 307.6z" ></path></symbol><symbol id="icon-yiguanbigongdanshu" viewBox="0 0 1025 1024"><path d="M576 64H256a64.19 64.19 0 0 0-64 64v768a64.19 64.19 0 0 0 64 64h512a64.19 64.19 0 0 0 64-64V320z m94.39 687.53l-45.25 45.25L512 683.65 398.86 796.78l-45.25-45.25 113.14-113.14-113.14-113.14L398.86 480 512 593.14 625.14 480l45.25 45.25-113.14 113.14zM576 320V128l192 192z" ></path></symbol><symbol id="icon-shouhoukefu" viewBox="0 0 1024 1024"><path d="M824.2 360.7C809 305.8 744.7 128 512.1 128c-230.8 0-297 177.8-310.2 232.7-43.5 17-104 62.4-104 151.3 0 87 60.5 136.2 102.2 155.1 5.7 34.1 22.7 109.7 96.5 155.1 53 34.1 117.3 41.6 160.8 43.5 9.5 18.9 28.4 30.3 49.2 30.3 32.2 0 56.8-24.6 56.8-56.8 0-30.3-24.6-56.8-56.8-56.8-22.7 0-41.6 13.2-51.1 34.1-37.8-1.9-90.8-9.5-134.3-35.9-70-43.5-73.8-128.6-73.8-132.4V383.4c3.8-22.7 45.4-204.3 264.8-204.3S773.3 362.6 777 383.4v266.7c0 7.6 3.8 15.1 9.5 20.8 3.8 3.8 9.5 5.7 15.1 5.7 1.9 0 5.7 0 7.6-1.9 41.6-13.2 119.2-62.4 119.2-160.8-0.2-90.8-62.6-136.2-104.2-153.2zM198 608.5c-22.7-17-51.1-45.4-51.1-96.5s28.4-79.5 51.1-92.7v189.2z m630 0V419.3c22.7 15.1 51.1 43.5 51.1 92.7s-28.4 79.5-51.1 96.5z" ></path></symbol><symbol id="icon-wodeyuyue" viewBox="0 0 1024 1024"><path d="M868.864 366.08h-808.96v61.44h808.96v-61.44zM261.632 281.088c-16.896 0-30.72-13.824-30.72-30.72V104.448c0-16.896 13.824-30.72 30.72-30.72s30.72 13.824 30.72 30.72v145.92c0 16.896-13.824 30.72-30.72 30.72zM161.792 542.72c0-16.896 13.824-30.72 30.72-30.72h145.92c16.896 0 30.72 13.824 30.72 30.72s-13.824 30.72-30.72 30.72H192.512c-16.896 0-30.72-13.824-30.72-30.72zM747.52 603.136c16.896 0 30.72 13.824 30.72 30.72V711.68c0 16.896-13.824 30.72-30.72 30.72s-30.72-13.824-30.72-30.72v-78.336c0-16.896 13.824-30.208 30.72-30.208z" ></path><path d="M858.624 715.264c0 16.896-13.824 30.72-30.72 30.72h-78.336c-16.896 0-30.72-13.824-30.72-30.72s13.824-30.72 30.72-30.72h78.336c16.896 0 30.72 13.824 30.72 30.72zM161.792 706.56c0-16.896 13.824-30.72 30.72-30.72h145.92c16.896 0 30.72 13.824 30.72 30.72s-13.824 30.72-30.72 30.72H192.512c-16.896 0-30.72-13.824-30.72-30.72zM666.112 281.088c-16.896 0-30.72-13.824-30.72-30.72V104.448c0-16.896 13.824-30.72 30.72-30.72s30.72 13.824 30.72 30.72v145.92c0 16.896-13.824 30.72-30.72 30.72z" ></path><path d="M458.752 873.472m-30.72 0a30.72 30.72 0 1 0 61.44 0 30.72 30.72 0 1 0-61.44 0Z" ></path><path d="M752.64 541.696c93.184 0 168.96 75.776 168.96 168.96s-75.776 168.96-168.96 168.96-168.96-75.776-168.96-168.96 75.776-168.96 168.96-168.96m0-61.44c-127.488 0-230.4 102.912-230.4 230.4s102.912 230.4 230.4 230.4 230.4-102.912 230.4-230.4-102.912-230.4-230.4-230.4z" ></path><path d="M460.8 842.752H175.104c-37.376 0-68.608-30.72-68.608-68.608V248.32c0-37.376 30.72-68.608 68.608-68.608h578.048c37.376 0 68.608 30.72 68.608 68.608v177.664h60.416V250.88c0-72.704-58.88-131.584-131.584-131.584H178.176C105.472 119.296 46.08 178.176 46.08 250.88v520.704c0 72.704 58.88 131.584 131.584 131.584H460.8v-60.416z" ></path></symbol><symbol id="icon-buqiajuan" viewBox="0 0 1024 1024"><path d="M941.511111 409.6l25.6-2.844444V224.711111c0-48.355556-36.977778-85.333333-85.333333-85.333333H142.222222c-48.355556 0-85.333333 36.977778-85.333333 85.333333v184.888889l19.911111 5.688889c39.822222 14.222222 65.422222 51.2 65.422222 93.866667 0 42.666667-25.6 79.644444-65.422222 93.866666l-19.911111 5.688889v184.888889c0 48.355556 36.977778 85.333333 85.333333 85.333333h739.555556c48.355556 0 85.333333-36.977778 85.333333-85.333333v-182.044444l-25.6-2.844445c-51.2-5.688889-88.177778-48.355556-88.177778-99.555555s36.977778-93.866667 88.177778-99.555556zM910.222222 659.911111v133.688889c0 17.066667-11.377778 28.444444-28.444444 28.444444H142.222222c-17.066667 0-28.444444-11.377778-28.444444-28.444444v-145.066667c51.2-25.6 85.333333-79.644444 85.333333-139.377777s-34.133333-113.777778-85.333333-139.377778V224.711111c0-17.066667 11.377778-28.444444 28.444444-28.444444h739.555556c17.066667 0 28.444444 11.377778 28.444444 28.444444v133.688889c-65.422222 19.911111-113.777778 79.644444-113.777778 150.755556s48.355556 130.844444 113.777778 150.755555z" ></path><path d="M696.888889 480.711111h-113.777778c-17.066667 0-28.444444 11.377778-28.444444 28.444445s11.377778 28.444444 28.444444 28.444444h113.777778c17.066667 0 28.444444-11.377778 28.444444-28.444444s-11.377778-28.444444-28.444444-28.444445zM440.888889 480.711111h-113.777778c-17.066667 0-28.444444 11.377778-28.444444 28.444445s11.377778 28.444444 28.444444 28.444444h113.777778c17.066667 0 28.444444-11.377778 28.444444-28.444444s-11.377778-28.444444-28.444444-28.444445z" ></path></symbol><symbol id="icon-kuaidi-" viewBox="0 0 1024 1024"><path d="M292.6799 823.7c-2.32 2.57-2.41 2.77-1.81 2.13s1.1-1.29 1.66-1.93zM750.5899 841.92l0.37-0.19c-1.62 0.59-2.51 0.94-2.91 1.11l1.35-0.46z" ></path><path d="M1024.0099 741.39c-0.54-12.16-9.79-22.19-22.3-22.29l-63.15-0.51-100.62-0.81-23.06-0.19c-12-0.1-22.39 10.29-22.3 22.3 0.05 6.16 0 12.31-0.37 18.46-0.3 5.54-1.3 11.11-1.46 16.63 0.21-7.2 0-0.29-0.31 1.73-0.4 2.42-0.84 4.83-1.34 7.24-0.91 4.45-2 8.88-3.31 13.24q-1.6 5.4-3.67 10.66c-0.08 0.17-0.17 0.35-0.26 0.57q-1.26 2.72-2.65 5.37c-1.49 2.8-3.1 5.54-4.85 8.18-0.66 1-1.36 2-2.06 2.95l-0.68 0.84a80.58 80.58 0 0 1-5.6 5.94c-0.88 0.84-1.79 1.65-2.71 2.46-1.9 0.61-4.53 3.29-6.18 4.28-2 1.2-4.05 2.29-6.15 3.29l1.67-0.61c-0.68 0.25-1.36 0.52-2 0.8-1.3 0.61-3.57 1.36-2.51 0.91-1.64 0.56-3.29 1.08-5 1.54-1.84 0.49-3.69 0.93-5.55 1.3-0.61 0.12-1.21 0.22-1.81 0.32a88.6 88.6 0 0 1-14.75 0.27l-1.71-0.17a108.17 108.17 0 0 1-13.52-3.09c-1.51-0.47-3-1-4.5-1.55l0.88 0.46c-0.4-0.21-0.81-0.39-1.22-0.58l-0.24-0.09a16.3 16.3 0 0 1-2.16-1 76.59 76.59 0 0 1-8.78-5.18 7.57 7.57 0 0 1-1.27-0.9l-0.17-0.15a10.81 10.81 0 0 0-1.4-1l0.79 0.45c-0.9-0.79-1.8-1.57-2.67-2.39-2.64-2.51-4.77-5.49-7.34-8l0.92 0.91a15.4 15.4 0 0 1-1.14-1.42q-1.25-1.83-2.4-3.71a95.38 95.38 0 0 1-5-9.23c-0.24-0.49-0.46-1-0.68-1.48-0.4-1-0.81-2.06-1.18-3.1q-1.77-4.92-3.13-10t-2.36-10.18c-0.3-1.52-0.57-3-0.82-4.57l-0.21-1.34c-0.57-5.14-1-10.28-1.17-15.46a128.6 128.6 0 0 1 0.3-16.07c1.14-12-11.14-22.3-22.3-22.3H338.7299c-12.8 0-21.28 10.26-22.3 22.3-0.27 3.27-0.58 6.53-0.95 9.78-0.11 1-0.24 2-0.37 3v0.27c-0.92 5.67-1.87 11.31-3.13 16.91a174.93 174.93 0 0 1-7.76 25.74l0.49-1c-0.27 0.57-0.52 1.16-0.77 1.74l-0.11 0.27c-0.07 0.14-0.13 0.29-0.19 0.43-0.79 1.72-1.6 3.43-2.46 5.12a115.18 115.18 0 0 1-5.47 9.6c-0.88 1.39-1.79 2.75-2.74 4.1l-0.25 0.33 0.66-0.73-0.81 0.93c-0.55 0.7-1.26 1.5-1.66 1.93-1.25 1.47-2.49 2.95-3.86 4.34q-2.79 2.83-5.83 5.39c-0.7 0.5-1.39 1-2.11 1.47-1.9 1.27-3.87 2.46-5.89 3.54-1.71 0.92-6.14 2.59-5.63 2.43a62.73 62.73 0 0 1-6.26 1.87c-1 0.24-2 0.44-3.06 0.63l2.13-0.18c-0.7 0.06-1.4 0.16-2.09 0.23h-0.42c-0.38 0.07-0.76 0.15-1.15 0.21-1.81 0.33-4.61 0.33 0.12-0.14-2.33 0.11-4.63 0-7 0-3.24 0-6.46 0.38-9.72 0.29-1.3 0-2.6-0.11-3.89-0.21l0.79 0.23a7.89 7.89 0 0 0-1.3-0.27l-0.69-0.06a7.54 7.54 0 0 1-1.47-0.28 68.25 68.25 0 0 1-9.32-2.53l-1-0.39c-1.39-0.71-2.81-1.37-4.18-2.14-1.57-0.88-3.35-1.81-5-2.87l-0.52-0.48c-0.64-0.58-1.33-1.1-2-1.67q-2-1.69-3.78-3.52c-2.13-2.11-4.09-4.36-6-6.66-1.14-1.63-2.29-3.26-3.37-4.93a130.08 130.08 0 0 1-9-16.63c0-0.1-0.1-0.22-0.15-0.34 0.12 0.31 0.24 0.63 0.37 1-0.58-1.58-1.26-3.12-1.86-4.69q-1.6-4.23-3-8.53a220.54 220.54 0 0 1-8-34c-0.1-0.62-0.19-1.23-0.28-1.84-0.14-1.22-0.29-2.43-0.41-3.65s-0.27-2.7-0.35-4.06c-0.72-12-9.63-22.3-22.3-22.3H44.6199v-278l40.29-35 74.64-64.91 9.64-8.39h147.24v105.77c0 11.66 10.26 22.84 22.3 22.3s22.3-9.8 22.3-22.3V318 177.57h602.13c8.46 0 16.94 0.15 25.4 0h1.08c11.66 0 22.84-10.25 22.3-22.29s-9.8-22.3-22.3-22.3H365.2099c-8.46 0-16.94-0.15-25.39 0h-1.09a22.62 22.62 0 0 0-22.3 22.3V294.2H163.6599a27.77 27.77 0 0 0-18.52 6.56c-1.25 1-2.45 2.12-3.67 3.19l-56.78 49.37-65.74 57.16c-4.07 3.55-8.62 6.9-12.39 10.78C-0.5401 428.57 0.0099 436.5 0.0099 445.34v302.08a22.62 22.62 0 0 0 22.3 22.3h111.19c6.27 40.17 23.47 81.13 56.43 104.87 19.17 13.81 42.6 16.79 65.57 15.75 21.59-1 41.26-9.71 57.65-23.61 28.06-23.81 40-61 45.33-97H616.0099a203 203 0 0 0 4.53 30.87c7.22 32.51 26.22 64.35 57.24 79a109.27 109.27 0 0 0 30.75 9.69c1.45 0.21 3.89 0.54 5.53 0.75s3 0.44 4.53 0.6a80.76 80.76 0 0 0 14.75 0.22c24-1.82 46.58-10.8 64.16-27.62 27-25.86 36.7-64.08 39-100.87l41.45 0.33 100.63 0.82 23 0.18c11.78 0.09 22.95-10.33 22.43-22.31z m-810.4 95.75a17.18 17.18 0 0 1-2.56-2.08c-0.11-0.06 1.64 1.34 2.56 2.08z m55 5.51l3.2-1.13z m494-7.85l-1.31 1.08c-2.17 1.78-0.15 0.01 1.26-1.08z" ></path><path d="M678.6399 824c1.5 1.68 3.12 3.1 0 0zM235.7299 845.7h0.51c-3.89-1.12-3.87-0.73-2.67-0.38h0.12c0.66 0.2 1.32 0.27 2.04 0.38zM258.2299 845.5l-1.41 0.14 1-0.07zM689.2399 834.67c0.18 0.13 0.37 0.24 0.54 0.37 0.94 0.51 1.14 0.26-2-1.59l0.61 0.54c0.25 0.24 0.55 0.48 0.85 0.68zM304.0999 803.37l0.08-0.21c-2 4.26-1.07 2.48-0.39 1 0-0.09 0.07-0.18 0.11-0.27s0.11-0.37 0.2-0.52zM701.0099 841.36l0.34 0.12c-2.63-1.33-3.11-1.5-2.74-1.26l0.84 0.43c0.46 0.25 0.98 0.48 1.56 0.71zM989.6399 422.27H686.7899c-11.67 0-22.84 10.26-22.3 22.3s9.8 22.3 22.3 22.3h302.85c11.66 0 22.84-10.26 22.3-22.3s-9.8-22.3-22.3-22.3z" ></path></symbol></svg>', + l = (c = document.getElementsByTagName("script"))[c.length - 1].getAttribute("data-injectcss"); + if (l && !i.__iconfont__svg__cssinject__) { + i.__iconfont__svg__cssinject__ = !0; + try { + document.write( + "<style>.svgfont {display: inline-block;width: 1em;height: 1em;fill: currentColor;vertical-align: -0.1em;font-size:16px;}</style>" + ) + } catch (c) { + console && console.log(c) + } + }! function(c) { + if (document.addEventListener) + if (~["complete", "loaded", "interactive"].indexOf(document.readyState)) setTimeout(c, 0); + else { + var l = function() { + document.removeEventListener("DOMContentLoaded", l, !1), c() + }; + document.addEventListener("DOMContentLoaded", l, !1) + } + else document.attachEvent && (t = c, a = i.document, h = !1, o = function() { + h || (h = !0, t()) + }, (e = function() { + try { + a.documentElement.doScroll("left") + } catch (c) { + return void setTimeout(e, 50) + } + o() + })(), a.onreadystatechange = function() { + "complete" == a.readyState && (a.onreadystatechange = null, o()) + }); + var t, a, h, o, e + }(function() { + var c, l; + (c = document.createElement("div")).innerHTML = t, t = null, (l = c.getElementsByTagName("svg")[0]) && (l.setAttribute( + "aria-hidden", "true"), l.style.position = "absolute", l.style.width = 0, l.style.height = 0, l.style.overflow = + "hidden", + function(c, l) { + l.firstChild ? function(c, l) { + l.parentNode.insertBefore(c, l) + }(c, l.firstChild) : l.appendChild(c) + }(l, document.body)) + }) +}(window); diff --git a/static/iconfont/iconfont.svg b/static/iconfont/iconfont.svg new file mode 100644 index 0000000..2f889f5 --- /dev/null +++ b/static/iconfont/iconfont.svg @@ -0,0 +1,80 @@ +<?xml version="1.0" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" > +<!-- +2013-9-30: Created. +--> +<svg> +<metadata> +Created by iconfont +</metadata> +<defs> + +<font id="iconfont" horiz-adv-x="1024" > + <font-face + font-family="iconfont" + font-weight="500" + font-stretch="normal" + units-per-em="1024" + ascent="896" + descent="-128" + /> + <missing-glyph /> + + <glyph glyph-name="31daishouhuo" unicode="" d="M841.530179 758.220007 366.132818 758.220007c-49.562812 0-89.855494-40.144302-89.855494-89.499383l0-131.069151-172.015725-99.067296-6.299473-4.189416 0.713244-1.218758 0.029676-0.118704c-3.922333-4.694929-6.062066-10.54824-6.062066-16.58063l0-275.063683c0-16.075117 12.063757-29.1499 26.891464-29.1499 14.857383 0 26.921139 13.103436 26.921139 29.238928L146.455583 401.026792l168.746262 97.373725c11.707646 4.130064 19.552312 15.124466 19.552312 27.336602L334.754157 664.412504c0 19.552312 16.015765 35.479049 35.68678 35.479049l466.750423 0c19.671015 0 35.68678-15.926738 35.68678-35.479049l0-512.034792c0-16.104793 13.104459-29.179576 29.238928-29.179576 16.134469 0 29.238928 13.104459 29.238928 29.238928L931.355997 668.721647C931.355997 718.076728 891.063315 758.220007 841.530179 758.220007zM741.957369 239.648334c-55.595202 0-102.900601-39.49041-112.973004-94.104261l-204.284663 0.118704c-10.132778 54.555523-57.437154 93.985558-112.973004 93.985558-63.647599 0-115.439172-51.554166-115.439172-114.934682s51.791573-114.934682 115.439172-114.934682c51.67287 0 97.194646 34.558074 111.071701 84.209914l208.117968-0.089028c13.906731-49.592488 59.398832-84.120886 111.042026-84.120886 63.647599 0 115.409496 51.554166 115.409496 114.934682S805.604968 239.648334 741.957369 239.648334zM741.957369 70.485587c-30.070876 0-54.525847 24.336268-54.525847 54.228065 0 29.892821 24.454972 54.228065 54.525847 54.228065s54.525847-24.336268 54.525847-54.228065C796.483216 94.821855 772.028245 70.485587 741.957369 70.485587zM311.726697 70.485587c-30.070876 0-54.525847 24.336268-54.525847 54.228065 0 29.892821 24.454972 54.228065 54.525847 54.228065 30.0412 0 54.496172-24.336268 54.496172-54.228065C366.221846 94.821855 341.766874 70.485587 311.726697 70.485587zM224.930889 322.848245c0-15.540951 12.687974-28.199249 28.317952-28.199249l109.526509 0.029676c15.421224 0 27.575032 4.605901 36.162618 13.727653 13.638625 14.470573 12.539594 35.003212 12.509918 35.121915l0 85.814458c0 15.540951-12.687974 28.199249-28.317952 28.199249s-28.317952-12.658298-28.317952-28.199249l0.029676-78.2072-101.652168 0C237.589187 351.047494 224.930889 338.35952 224.930889 322.848245z" horiz-adv-x="1024" /> + + + <glyph glyph-name="wodeqianbao" unicode="" d="M510.027066-206.883469c-310.781162 0-449.376731 106.263186-449.376731 344.549244 0 188.549284 149.627832 393.97084 333.539492 457.902918l233.69346-0.329505c182.468798-63.797002 331.50516-269.12953 331.513346-457.573413C959.39561-100.61926 820.807205-206.883469 510.027066-206.883469zM403.554102 530.933603c-34.134425-13.268188-67.544349-32.459273-99.323123-57.051367-35.151591-27.239388-66.721611-59.758012-93.818759-96.66048-27.224038-37.081547-48.516993-76.631308-63.288418-117.526717-14.981203-41.434691-22.572088-82.479503-22.572088-122.029264 0-50.379411 7.067976-93.51893 21.008476-128.222313 13.223163-32.967856 32.766264-59.32413 59.728336-80.595596 28.959565-22.825868 67.709101-40.431851 115.179252-52.309366 51.785433-12.938684 115.559922-19.505239 189.559287-19.505239 73.991178 0 137.765667 6.566556 189.5511 19.505239 47.462988 11.876492 86.212524 29.468149 115.179252 52.309366 26.977421 21.300119 46.520523 47.657416 59.735499 80.595596 13.941524 34.733059 21.001313 77.872578 21.001313 128.222313 0 39.549761-7.599072 80.609922-22.579251 122.029264-14.771425 40.926108-36.06438 80.46052-63.281255 117.526717-27.088962 36.916794-58.658981 69.436442-93.818759 96.66048-31.794124 24.591071-65.187675 43.783179-99.255585 57.020668l-211.94411 0.418532L403.554102 530.933603zM500.326123-32.409762c-23.320125 0-42.294268 18.98233-42.294268 42.302455 0 2.692319 0.284479 5.445012 0.845251 8.196683l1.480724 7.389294-2.169409 0 0 39.041178-83.751473 0.045025c-18.039865 0-32.714076 14.59951-32.714076 32.549324 0 17.97949 14.629185 32.608675 32.601512 32.608675l5.653767 0 0.01535 0.104377L458.189444 129.827249 458.189444 180.790968l-81.395822 0-2.273786 0.059352c-18.107403 0-32.79594 14.613836-32.79594 32.578999s14.629185 32.594349 32.601512 32.594349l5.467525 0 0.01535 0.074701 70.198805 0 1.196245 4.6366c0.441045 1.749854 1.166569 3.261277 2.213411 4.622274l3.365654 4.247744-90.871637 90.856287c-8.331759 8.316409-4.823865 25.399483 7.816013 38.053688 7.66661 7.673773 17.404392 12.251022 26.050306 12.251022 4.966105 0 9.109472-1.541099 11.989055-4.427846l89.562828-89.585341 83.115999 88.6132c3.829212 4.158716 9.647731 6.446829 16.394389 6.446829 9.610892 0 19.707854-4.39817 27.007097-11.756765 13.9712-14.120602 19.310811-24.276916 7.52437-37.560454l-92.090395-94.132914-0.994654-4.771677-1.02433-5.564739 6.087649-1.765203 77.266781-0.164752 1.75804-0.090051c17.994839-0.135076 32.564673-14.748912 32.564673-32.594349 0-17.830087-14.531971-32.429597-32.391734-32.549324l-4.009314-0.074701-80.415494 0 0-50.962695 82.435501 0 1.772366-0.119727c18.032702-0.135076 32.608675-14.748912 32.608675-32.578999 0-17.845437-14.531971-32.444946-32.399921-32.564673l-84.416622-0.045025 0-40.702004-0.441045-1.779529 0.029676-3.290953c0.590448-3.261277 0.912789-6.028297 0.912789-8.855692C542.621415-13.427432 523.646248-32.409762 500.326123-32.409762zM397.069411 634.175989 323.130422 745.24155l0.276293 0.972141-0.171915 3.948939c-0.61296 2.857071-1.001817 4.577249-1.001817 6.238075 0 12.011568 5.92392 22.556739 15.099906 26.880207l2.737344 2.423189c8.840342 2.093684 97.752348 22.138206 170.023348 22.482037l2.109034 0c73.019037 0 154.436348-19.102057 167.839613-22.37766l0.650823-1.541099 2.131547-1.017166c9.102309-4.322445 14.988366-14.868639 14.988366-26.850531 0-1.675152-0.418532-3.440355-0.852414-5.29561l-0.441045-1.88493 0.957815-4.457522-74.395384-110.586654L397.069411 634.174965zM510.415922 744.283736c-26.14752-0.135076-57.596789-3.096525-93.504604-8.810666l-9.491165-1.5104 23.896246-35.885302 157.52571 0 24.232914 36.363186-9.468652 1.541099c-34.149774 5.504364-64.896032 8.302083-91.39557 8.302083L510.415922 744.283736z" horiz-adv-x="1024" /> + + + <glyph glyph-name="wodeyouhuijuan" unicode="" d="M1009.770667 502.464C1018.282667 505.472 1024 513.536 1024 522.602667l0 131.242667c0 52.352-42.56 94.976-94.912 94.976L94.976 748.821333c-52.352 0-94.954667-42.624-94.954667-94.976l0-131.242667c0-9.045333 5.696-17.130667 14.250667-20.138667C64.426667 484.736 98.133333 437.141333 98.133333 384c0-53.12-33.706667-100.757333-83.882667-118.506667C5.696 262.549333 0 254.421333 0 245.376l0-131.242667c0-52.330667 42.602667-94.954667 94.954667-94.954667L929.066667 19.178667c52.330667 0 94.933333 42.624 94.933333 94.954667l0 131.242667c0 9.045333-5.674667 17.130667-14.229333 20.117333-50.218667 17.749333-83.946667 65.365333-83.946667 118.506667S959.552 484.714667 1009.770667 502.464zM883.114667 384c0-66.048 38.869333-125.717333 98.154667-152.981333l0-116.885333c0-28.778667-23.402667-52.202667-52.202667-52.202667L94.954667 61.930667c-28.8 0-52.224 23.424-52.224 52.202667l0 116.885333c59.264 27.264 98.133333 86.933333 98.133333 152.981333 0 66.048-38.869333 125.738667-98.133333 152.981333l0 116.864c0 28.8 23.402667 52.224 52.224 52.224L929.066667 706.069333c28.778667 0 52.202667-23.402667 52.202667-52.224l0-116.864C921.962667 509.717333 883.114667 450.048 883.114667 384zM683.690667 503.466667l-144.682667 0 86.293333 86.208c8.384 8.362667 8.384 21.888 0 30.229333-8.341333 8.341333-21.824 8.341333-30.208 0L512 536.896l-83.008 82.986667c-8.384 8.362667-21.866667 8.362667-30.208 0-8.362667-8.362667-8.362667-21.866667 0-30.208l86.229333-86.208-144.768 0c-11.776 0-21.354667-9.557333-21.354667-21.354667 0-11.797333 9.578667-21.376 21.354667-21.376l150.4 0 0-79.893333L364.8 380.842667c-11.818667 0-21.376-9.557333-21.376-21.376 0-11.818667 9.557333-21.333333 21.376-21.333333l125.845333 0 0-174.869333c0-11.84 9.557333-21.376 21.354667-21.376 11.84 0 21.376 9.578667 21.376 21.376L533.376 338.133333l125.76 0c11.861333 0 21.418667 9.536 21.418667 21.333333s-9.536 21.376-21.376 21.376l-125.781333 0 0 79.893333 150.357333 0c11.776 0 21.312 9.6 21.312 21.376C705.045333 493.888 695.509333 503.466667 683.690667 503.466667z" horiz-adv-x="1024" /> + + + <glyph glyph-name="daifukuan01" unicode="" d="M391.809105 800.640142l217.4628 0c5.718235 0 10.354835 5.102205 10.354835 11.395538l0 8.546653c0 6.293333-4.6366 11.395538-10.354835 11.395538l-217.4628 0c-5.719258 0-10.355859-5.102205-10.355859-11.395538l0-8.546653C381.453247 805.742347 386.089847 800.640142 391.809105 800.640142zM305.64877 506.253368l389.782448 0c5.718235 0 10.354835 5.102205 10.354835 11.395538l0 8.546653c0 6.293333-4.6366 11.395538-10.354835 11.395538L305.64877 537.591097c-5.719258 0-10.355859-5.102205-10.355859-11.395538l0-8.546653C295.292911 511.355573 299.929512 506.253368 305.64877 506.253368zM860.412736 300.245458 860.412736 793.414577c0 20.977777-15.429411 37.986149-34.463929 37.986149L704.581622 831.400726c-10.743692-1.198292-15.273868-14.719236-15.273868-14.719236l-38.392402-69.362764c0 0-2.835581-4.306072-4.256954-5.184069-1.219781-0.7552-4.738931-0.949628-4.738931-0.949628L357.80771 741.185029c0 0-2.674922 0.339738-3.66139 0.949628-0.724501 0.448208-2.591011 2.174526-2.591011 2.174526l-40.058344 72.372308c0 0-4.530177 13.520945-15.272845 14.719236L175.201789 831.400726c-19.033495 0-34.463929-17.007349-34.463929-37.986149l0-754.434541c0-20.9788 15.430434-37.985126 34.463929-37.985126l382.28059 0c-0.002047 0.002047-0.004093 0.004093-0.00614 0.00614 38.684044-39.760562 92.759637-64.470337 152.61691-64.470337 117.593232 0 212.923414 95.329159 212.923414 212.922391C923.016563 208.369957 899.083477 261.695466 860.412736 300.245458zM854.310761 306.081373c-0.218988 0.200568-0.432859 0.406253-0.652869 0.607844C853.878926 306.488649 854.092797 306.282964 854.310761 306.081373zM850.96455 309.097056c-0.287549 0.254803-0.573051 0.512676-0.862647 0.766456C850.391499 309.609733 850.677001 309.351859 850.96455 309.097056zM175.201789 32.332638c-3.325745 0-6.031367 2.982938-6.031367 6.647397L169.170422 793.414577c0 3.665483 2.705622 6.647397 6.031367 6.647397l112.188128 0 39.893592-72.073502 2.424212-4.380774 3.566222-3.300162c3.911076-3.618411 6.048763-4.940522 6.952342-5.499248 1.477654-0.914836 5.973038-3.696182 14.328333-4.755304l1.620917-0.205685 1.63115 0 284.11278 0 0.711198 0 0.710175 0.039909c10.194176 0.562818 15.497972 3.846608 17.225313 4.916986 3.194762 1.974981 7.598049 5.362124 13.358239 14.106276l0.668219 1.017166 0.594541 1.072425 38.22458 69.062935 112.534006 0c3.324722 0 6.031367-2.981914 6.031367-6.647397l0-469.37111c-34.530444 24.153096-76.550467 38.33305-121.886001 38.33305-1.439792 0-2.874467-0.025583-4.307096-0.055259l0 7.184633c0 6.293333-4.6366 11.395538-10.354835 11.395538L305.64877 380.902452c-5.719258 0-10.355859-5.102205-10.355859-11.395538l0-8.546653c0-6.29538 4.6366-11.396561 10.355859-11.396561l331.537905 0c1.38658 0.505513 2.781346 0.995677 4.181229 1.472538-60.281945-20.546965-108.391662-67.375503-130.688481-126.8255L305.64877 224.210737c-5.719258 0-10.355859-5.102205-10.355859-11.395538l0-8.547677c0-6.294356 4.6366-11.395538 10.355859-11.395538l195.95802 0c0.282433 1.363044 0.578168 2.720971 0.887206 4.074805-3.479241-15.273868-5.323239-31.168883-5.323239-47.495734 0-43.278689 12.924357-83.533508 35.107589-117.138884-0.004093 0.00614-0.008186 0.01228-0.01228 0.01842L175.201789 32.330592zM847.305207 312.256002c-0.26606 0.224104-0.530073 0.450255-0.797156 0.673335C846.775134 312.706257 847.039147 312.479083 847.305207 312.256002zM843.547627 315.352527c-0.221034 0.178055-0.441045 0.357134-0.661056 0.533143C843.106582 315.709661 843.326593 315.530582 843.547627 315.352527zM839.734788 318.352861c-0.163729 0.12689-0.328481 0.252757-0.493234 0.379647C839.406307 318.605617 839.571059 318.479751 839.734788 318.352861zM835.868737 321.25598c-0.088004 0.064468-0.176009 0.128937-0.264013 0.192382C835.692728 321.384917 835.780733 321.321472 835.868737 321.25598zM701.857581 362.202555c-0.303922-0.011256-0.608867-0.021489-0.912789-0.033769C701.248713 362.181065 701.553659 362.191298 701.857581 362.202555zM697.232237 361.978451c-0.343831-0.021489-0.686638-0.042979-1.030469-0.064468C696.545598 361.935472 696.888406 361.959008 697.232237 361.978451zM692.459536 361.644853c-0.172939-0.01535-0.344854-0.031722-0.517793-0.046049C692.115706 361.61313 692.287621 361.630527 692.459536 361.644853zM680.063205 360.258273c-0.394996-0.055259-0.789992-0.106424-1.183965-0.164752C679.273213 360.150826 679.668209 360.203014 680.063205 360.258273zM675.686525 359.59517c-0.532119-0.086981-1.063215-0.173962-1.594311-0.265036C674.623309 359.421208 675.154405 359.508189 675.686525 359.59517zM671.063227 358.793922c-0.568958-0.105401-1.133823-0.215918-1.701758-0.325411C669.929404 358.578004 670.495292 358.689544 671.063227 358.793922zM666.400021 357.880109c-0.522909-0.10847-1.041726-0.228197-1.561565-0.339738C665.358295 357.652935 665.877111 357.771639 666.400021 357.880109zM659.509077 356.314451c-0.653893-0.158612-1.308809-0.313132-1.960655-0.478907C658.200268 356.002342 658.856207 356.155838 659.509077 356.314451zM655.051555 355.178581c-0.727571-0.193405-1.454118-0.387833-2.177596-0.589424C653.597437 354.790748 654.323984 354.984153 655.051555 355.178581zM650.470213 353.903541c-0.7552-0.220011-1.509377-0.445138-2.260483-0.673335C648.96186 353.458403 649.715013 353.683531 650.470213 353.903541zM645.903198 352.520031c-0.799202-0.251733-1.595334-0.5137-2.390443-0.775666C644.308887 352.006332 645.103995 352.268298 645.903198 352.520031zM509.358335 220.58414c-0.049119-0.1361-0.097214-0.273223-0.145309-0.409322C509.261121 220.310917 509.309216 220.44804 509.358335 220.58414zM505.630431 209.031013c-0.027629-0.093121-0.057305-0.187265-0.083911-0.280386C505.574149 208.843748 505.602801 208.937892 505.630431 209.031013zM504.702292 205.728804c-0.140193-0.51063-0.278339-1.02126-0.414439-1.532913C504.423953 204.707544 504.562099 205.218174 504.702292 205.728804zM503.572562 201.436034c-0.156566-0.627287-0.309038-1.257643-0.460488-1.886977C503.26557 200.178391 503.414973 200.808748 503.572562 201.436034zM554.005184 4.654252c0.010233-0.011256 0.021489-0.021489 0.030699-0.032746C554.025651 4.63174 554.014394 4.642996 554.005184 4.654252zM535.081183 28.173922c0.00921-0.01228 0.01842-0.024559 0.026606-0.037862C535.098579 28.149363 535.089369 28.161642 535.081183 28.173922zM538.005792 24.066371c0.00921-0.01228 0.01842-0.023536 0.025583-0.035816C538.024212 24.041812 538.015002 24.054091 538.005792 24.066371zM541.023522 20.032498c0.00921-0.013303 0.019443-0.024559 0.028653-0.037862C541.042965 20.007939 541.032732 20.019195 541.023522 20.032498zM544.13028 16.076396c0.01228-0.01535 0.024559-0.029676 0.036839-0.046049C544.155862 16.04672 544.142559 16.061047 544.13028 16.076396zM547.332205 12.191926c0.01228-0.01535 0.024559-0.028653 0.036839-0.044002C547.357787 12.163273 547.344484 12.176576 547.332205 12.191926zM550.624181 8.384204c0.01228-0.014326 0.023536-0.026606 0.035816-0.039909C550.647717 8.357598 550.63646 8.370901 550.624181 8.384204zM838.944795 20.601456c-34.417881-34.416857-80.179111-53.371558-128.851647-53.371558-48.673559 0-94.433766 18.954701-128.851647 53.371558-34.417881 34.417881-53.372581 80.179111-53.372581 128.851647 0 48.673559 18.954701 94.433766 53.372581 128.851647s80.178087 53.372581 128.851647 53.372581c48.672536 0 94.433766-18.954701 128.851647-53.372581s53.372581-80.179111 53.372581-128.851647S873.362676 55.02036 838.944795 20.601456zM801.834596 139.991614c8.477069 0 15.349593 6.872524 15.349593 15.349593s-6.872524 15.349593-15.349593 15.349593l-59.743686 0 65.669652 85.421508c5.167696 6.721075 3.906983 16.35755-2.813069 21.524223-6.721075 5.16872-16.358573 3.906983-21.524223-2.813069l-72.494081-94.297666-72.496128 94.297666c-5.166673 6.720052-14.802124 7.981788-21.524223 2.813069-6.720052-5.166673-7.980765-14.803147-2.813069-21.524223l65.671699-85.421508-59.744709 0c-8.477069 0-15.349593-6.872524-15.349593-15.349593s6.872524-15.349593 15.349593-15.349593l75.556836 0 0-33.440623-71.920006 0c-8.477069 0-15.349593-6.872524-15.349593-15.349593s6.872524-15.349593 15.349593-15.349593l71.920006 0 0-57.341986c0-8.477069 6.872524-15.349593 15.349593-15.349593s15.349593 6.872524 15.349593 15.349593l0 57.341986 71.918983 0c8.477069 0 15.349593 6.872524 15.349593 15.349593s-6.872524 15.349593-15.349593 15.349593l-71.918983 0 0 33.440623L801.834596 139.991614z" horiz-adv-x="1024" /> + + + <glyph glyph-name="yiwancheng" unicode="" d="M889.679805 348.948693c0 41.48074-27.488051 76.604702-65.056692 87.821161L824.623114 575.747115c0 47.821145-38.557154 86.729294-85.951581 86.729294l-39.310308 0-87.373976 94.53405c-3.321652 3.619434-8.553817 4.706185-13.033851 2.76702L374.667192 662.476409l-85.661985 0c-47.393403 0-85.951581-38.908148-85.951581-86.729294l0-453.629591c0-47.806819 38.557154-86.706781 85.951581-86.706781l449.666326 0c47.393403 0 85.951581 38.899962 85.951581 86.706781L824.623114 261.118322C862.190731 272.334781 889.679805 307.46079 889.679805 348.948693zM600.618317 735.0851l67.11149-72.608691L433.252495 662.476409 600.618317 735.0851zM801.478997 122.118548c0-34.932604-28.181853-63.35698-62.808488-63.35698L289.005206 58.761568c-34.626635 0-62.808488 28.424376-62.808488 63.35698L226.196719 575.747115c0 34.94693 28.181853 63.379493 62.808488 63.379493l449.666326 0c34.626635 0 62.808488-28.433586 62.808488-63.379493l0-135.267776c-0.857531 0.024559-1.716084 0.038886-2.578732 0.038886L578.36243 440.518225c-6.390547 0-11.573593-5.230118-11.573593-11.675924l0-159.799496c0-6.445806 5.184069-11.675924 11.573593-11.675924l220.537835 0c0.862647 0 1.722224 0.01535 2.578732 0.038886L801.478997 122.118548zM798.900266 280.717705 589.936023 280.717705 589.936023 417.17047l208.964242 0c37.296441 0 67.636446-30.607088 67.636446-68.221778C866.536712 311.324794 836.196707 280.717705 798.900266 280.717705z" horiz-adv-x="1024" /> + + + <glyph glyph-name="wodedingdan" unicode="" d="M383 555l260 0c16.6 0 30 13.4 30 30 0 16.6-13.4 30-30 30L383 615c-16.6 0-30-13.4-30-30C353 568.4 366.4 555 383 555zM383 431l260 0c16.6 0 30 13.4 30 30 0 16.6-13.4 30-30 30L383 491c-16.6 0-30-13.4-30-30C353 444.4 366.4 431 383 431zM383 298l260 0c16.6 0 30 13.4 30 30 0 16.6-13.4 30-30 30L383 358c-16.6 0-30-13.4-30-30C353 311.4 366.4 298 383 298zM807 205.3c0.4 2.9 0.4 5.9 0 8.9L807 693l-0.5 0c-4.5 39.9-38.3 71-79.5 71L316 764c-44.2 0-80-35.8-80-80l0-600c0-41.1 31.1-75 71-79.5l0-0.5 281 0 0 0.4c4 0.7 7.8 2.2 11.1 4.3 3.5 1.3 6.8 3.3 9.7 6l188.8 172.9c3.8 3.5 6.6 7.8 8.1 12.4l1.3 0L807 205.3zM296 84 296 684c0 11 9 20 20 20l411 0c11 0 20-9 20-20l0-437L633 247c-44.2 0-80-35.8-80-80l0-103L316 64C305 64 296 73 296 84zM708.1 187 613 99.9 613 167c0 11 9 20 20 20L708.1 187z" horiz-adv-x="1024" /> + + + <glyph glyph-name="jifen" unicode="" d="M801.23724 896C518.930425 896 289.23724 666.306816 289.23724 384s229.693184-512 512-512c282.311824 0 512 229.693184 512 512S1083.549065 896 801.23724 896zM801.23724-64.000939c-247.04241 0-447.995931 200.963537-447.995931 448.000939 0 247.04241 200.95352 448.000939 447.995931 448.000939S1249.23818 631.04241 1249.23818 384C1249.23818 136.962598 1048.279651-64.000939 801.23724-64.000939zM801.23724 486.167108c-22.665682 0-43.835093 2.909902-63.543293 8.725949-19.689418 5.796014-35.216825 14.408021-46.594742 25.773417l0-34.499367c0-9.338231 4.933311-17.999071 14.782402-25.975007 9.841579-7.977188 23.235392-14.292827 40.150136-18.975716 16.914744-4.659099 35.315742-6.996787 55.205498-6.996787 19.879739 0 38.290753 2.337688 55.196733 6.996787 16.914744 4.659099 30.308557 10.998528 40.1589 18.975716 9.840327 7.975936 14.773637 16.638028 14.773637 25.975007l0 34.499367c-11.369152-11.364144-26.920349-19.953613-46.61102-25.773417C845.064821 489.074505 823.894158 486.167108 801.23724 486.167108zM911.366511 364.838972c-11.369152-11.365396-26.920349-19.956117-46.61102-25.772165-19.69067-5.8173-40.860082-8.728454-63.516999-8.728454-22.665682 0-43.835093 2.909902-63.543293 8.728454-19.689418 5.816048-35.216825 14.382979-46.594742 25.748375l0-34.49561c0-9.340735 4.933311-18.000323 14.782402-25.977511 9.841579-7.974684 23.235392-14.292827 40.150136-18.975716 16.914744-4.659099 35.315742-6.976753 55.205498-6.976753 19.879739 0 38.290753 2.341444 55.196733 7.000543 16.914744 4.680384 30.308557 10.998528 40.1589 18.973212 9.840327 7.97844 14.773637 16.635524 14.773637 25.975007L911.367763 364.838972zM705.86533 538.095835c9.840327-7.999726 23.235392-14.320374 40.150136-18.979472 16.931021-4.659099 35.332019-6.976753 55.221775-6.976753 19.879739 0 38.290753 2.342696 55.196733 7.000543 16.914744 4.659099 30.308557 10.998528 40.1589 18.975716 9.840327 7.97844 14.773637 16.634272 14.773637 25.975007l0 21.514994c0 9.339483-4.932058 17.996566-14.773637 25.973755-9.850344 7.975936-23.244156 14.296584-40.1589 18.975716-16.905979 4.659099-35.316994 7.000543-55.196733 7.000543-19.889756 0-38.290753-2.341444-55.221775-7.000543-16.914744-4.679132-30.309809-10.998528-40.150136-18.975716-9.849091-7.977188-14.774889-16.634272-14.774889-25.97125l0-21.540036C691.09044 554.730107 696.016238 546.071771 705.86533 538.095835zM864.771769 416.970541c-19.706948-5.8173-40.876359-8.729706-63.534528-8.729706-22.665682 0-43.835093 2.911154-63.542041 8.729706-19.691922 5.818552-35.218077 14.404265-46.595994 25.769661l0-34.499367c0-9.339483 4.933311-17.996566 14.782402-25.973755 9.841579-7.974684 23.235392-14.294079 40.150136-18.974464 16.931021-4.659099 35.332019-7.000543 55.221775-7.000543 19.879739 0 38.281989 2.341444 55.196733 7.000543 16.913492 4.659099 30.308557 10.99978 40.1589 18.974464 9.840327 7.977188 14.774889 16.635524 14.774889 25.973755l0 34.499367C900.013636 431.374806 884.462439 422.786589 864.771769 416.970541zM801.23724 253.274784c-22.665682 0-43.835093 2.909902-63.543293 8.725949-19.689418 5.796014-35.216825 14.408021-46.594742 25.773417l0-34.499367c0-9.338231 4.933311-17.999071 14.782402-25.975007 9.841579-7.977188 23.235392-14.292827 40.150136-18.975716 16.914744-4.659099 35.315742-6.996787 55.205498-6.996787 19.879739 0 38.290753 2.337688 55.196733 6.996787 16.914744 4.659099 30.308557 10.998528 40.1589 18.975716 9.840327 7.975936 14.773637 16.638028 14.773637 25.975007l0 34.499367c-11.369152-11.364144-26.920349-19.953613-46.61102-25.773417C845.064821 256.182182 823.894158 253.274784 801.23724 253.274784zM801.23724 175.348512c-22.665682 0-43.835093 2.911154-63.542041 8.729706-19.691922 5.818552-35.218077 14.404265-46.595994 25.769661l0-34.499367c0-9.339483 4.933311-17.996566 14.782402-25.973755 9.841579-7.974684 23.235392-14.294079 40.150136-18.974464 16.931021-4.659099 35.332019-7.000543 55.221775-7.000543 19.879739 0 38.281989 2.341444 55.196733 7.000543 16.913492 4.659099 30.308557 10.99978 40.1589 18.974464 9.840327 7.977188 14.774889 16.635524 14.774889 25.973755l0 34.499367c-11.370404-11.365396-26.921601-19.953613-46.612272-25.769661C845.064821 178.259666 823.894158 175.348512 801.23724 175.348512zM801.23724 97.447282c-22.665682 0-43.835093 2.909902-63.543293 8.728454-19.689418 5.816048-35.216825 14.382979-46.594742 25.748375l0-34.49561c0-9.340735 4.933311-18.000323 14.782402-25.977511 9.841579-7.974684 23.235392-14.292827 40.150136-18.975716 16.914744-4.659099 35.315742-6.976753 55.205498-6.976753 19.879739 0 38.290753 2.341444 55.196733 7.000543 16.914744 4.680384 30.308557 10.998528 40.1589 18.973212 9.840327 7.97844 14.773637 16.635524 14.773637 25.975007l0 34.499367c-11.369152-11.365396-26.920349-19.956117-46.61102-25.772165C845.064821 100.357184 823.894158 97.447282 801.23724 97.447282zM465.847252 399.703954c-8.431704-6.829004-12.648808-14.240239-12.648808-22.234956l0-18.441065c0-7.993466 4.217104-15.407205 12.648808-22.234956 8.425443-6.849038 19.89226-12.259402 34.374156-16.248622 14.494417-3.987968 30.248456-5.972561 47.277142-5.972561 17.019921 0 32.781473 2.005879 47.255856 5.992595 14.480644 3.98922 25.94746 9.415862 34.380416 16.244866 8.425443 6.831508 12.647556 14.241491 12.647556 22.238713l0 18.419779c0 7.99597-4.223365 15.407205-12.647556 22.236208-8.432956 6.829004-19.899773 12.239368-34.380416 16.244866-14.473131 3.987968-30.235935 5.992595-47.255856 5.992595-17.028686 0-32.781473-2.004627-47.277142-5.992595C485.739512 411.943322 474.272696 406.531706 465.847252 399.703954M453.205957 255.155452 453.205957 225.620699c0-7.99597 4.224617-15.407205 12.65632-22.237461 8.425443-6.827752 19.89226-12.238116 34.374156-16.244866 14.494417-3.98922 30.248456-5.993847 47.277142-5.993847 17.019921 0 32.77396 2.004627 47.255856 5.993847 14.480644 3.987968 25.94746 9.417114 34.380416 16.244866 8.425443 6.829004 12.648808 14.242743 12.648808 22.237461l0 29.536005c-9.73515-9.730141-23.047575-17.082527-39.905974-22.062165-16.87092-4.980891-34.995202-7.47384-54.392879-7.47384-19.403937 0-37.528219 2.49295-54.400391 7.47384C476.239759 238.074178 462.946115 245.425311 453.205957 255.155452M453.205957 188.443071l0-29.532249c0-7.997222 4.224617-15.410961 12.65632-22.239965 8.425443-6.827752 19.89226-12.236864 34.374156-16.244866 14.480644-3.987968 30.234682-5.972561 47.262116-5.972561 17.019921 0 32.781473 2.004627 47.255856 5.992595 14.480644 4.00675 25.94746 9.415862 34.380416 16.243614 8.425443 6.830256 12.647556 14.242743 12.647556 22.238713l0 29.536005c-9.733897-9.730141-23.046323-17.085031-39.904722-22.063417-16.857147-4.980891-34.981429-7.472588-54.379105-7.472588-19.403937 0-37.528219 2.491697-54.401643 7.472588C476.239759 171.378073 462.946115 178.712929 453.205957 188.443071M453.205957 321.870338l0-29.536005c0-7.994718 4.224617-15.409709 12.65632-22.238713 8.425443-6.829004 19.89226-12.236864 34.374156-16.244866 14.480644-3.987968 30.234682-5.990091 47.262116-5.990091 17.019921 0 32.781473 2.000871 47.255856 5.990091 14.480644 3.987968 25.94746 9.415862 34.380416 16.244866 8.425443 6.829004 12.647556 14.243995 12.647556 22.238713L641.782378 321.870338c-9.733897-9.730141-23.046323-17.082527-39.904722-22.064669-16.857147-4.980891-34.981429-7.470084-54.379105-7.470084-19.403937 0-37.528219 2.491697-54.401643 7.470084C476.239759 304.767778 462.946115 312.140197 453.205957 321.870338M973.325886 405.062982c-8.431704-6.829004-12.648808-14.241491-12.648808-22.234956l0-18.441065c0-7.993466 4.217104-15.407205 12.648808-22.234956 8.425443-6.849038 19.89226-12.259402 34.374156-16.248622 14.494417-3.987968 30.248456-5.972561 47.277142-5.972561 17.019921 0 32.781473 2.005879 47.255856 5.992595 14.480644 3.98922 25.94746 9.415862 34.380416 16.244866 8.425443 6.831508 12.647556 14.241491 12.647556 22.238713l0 18.419779c0 7.99597-4.222112 15.407205-12.647556 22.236208-8.432956 6.829004-19.899773 12.239368-34.380416 16.244866-14.474383 3.987968-30.235935 5.992595-47.255856 5.992595-17.028686 0-32.781473-2.004627-47.277142-5.992595C993.218146 417.30235 981.751329 411.891986 973.325886 405.062982M960.684591 260.515732l0-29.536005c0-7.99597 4.223365-15.407205 12.65632-22.237461 8.425443-6.8265 19.89226-12.238116 34.374156-16.244866 14.494417-3.98922 30.248456-5.993847 47.277142-5.993847 17.019921 0 32.77396 2.004627 47.255856 5.993847 14.480644 3.987968 25.94746 9.417114 34.380416 16.244866 8.425443 6.829004 12.648808 14.242743 12.648808 22.237461l0 29.536005c-9.73515-9.730141-23.047575-17.082527-39.905974-22.062165-16.87092-4.980891-34.995202-7.47384-54.392879-7.47384-19.403937 0-37.529471 2.49295-54.400391 7.47384C983.718393 243.434457 970.424749 250.785591 960.684591 260.515732M960.684591 193.802098l0-29.532249c0-7.997222 4.223365-15.410961 12.65632-22.239965 8.425443-6.827752 19.89226-12.236864 34.374156-16.244866 14.480644-3.987968 30.234682-5.972561 47.262116-5.972561 17.019921 0 32.781473 2.004627 47.255856 5.992595 14.480644 4.00675 25.94746 9.415862 34.380416 16.243614 8.425443 6.830256 12.647556 14.242743 12.647556 22.238713l0 29.536005c-9.733897-9.730141-23.046323-17.085031-39.904722-22.063417-16.857147-4.980891-34.981429-7.472588-54.379105-7.472588-19.403937 0-37.529471 2.491697-54.401643 7.472588C983.718393 176.738353 970.424749 184.073209 960.684591 193.802098M960.684591 327.230618l0-29.536005c0-7.994718 4.223365-15.409709 12.65632-22.238713 8.425443-6.829004 19.89226-12.236864 34.374156-16.244866 14.480644-3.987968 30.234682-5.990091 47.262116-5.990091 17.019921 0 32.781473 2.000871 47.255856 5.990091 14.480644 3.987968 25.94746 9.415862 34.380416 16.244866 8.425443 6.829004 12.647556 14.243995 12.647556 22.238713l0 29.536005c-9.733897-9.730141-23.046323-17.082527-39.904722-22.064669-16.857147-4.980891-34.981429-7.470084-54.379105-7.470084-19.403937 0-37.529471 2.491697-54.401643 7.470084C983.718393 310.128058 970.424749 317.500477 960.684591 327.230618" horiz-adv-x="1603" /> + + + <glyph glyph-name="lingjuandizhi" unicode="" d="M943.088 555.856 526.592 868.36C516.24 876.12 504.112 880 492 880c-12.12 0-24.24-3.88-34.592-11.64L40.912 555.856C25.28 544.128 16 525.184 16 505l0-562.488C16-92.008 42.64-120 75.496-120c0 0 79.44 0 146.528 0 103.688 0 91.472 81.88 91.472 81.88L313.496 255c0 34.52 26.64 62.504 59.496 62.504l238 0c32.856 0 59.504-27.984 59.504-62.504l0-298.368c0 0-3.68-75.304 81.528-76.624 68.904 0 156.464 0 156.464 0 32.856 0 59.504 27.992 59.504 62.504L967.992 505C968 525.184 958.72 544.128 943.088 555.856z" horiz-adv-x="1024" /> + + + <glyph glyph-name="weibiaoti2fuzhi05" unicode="" d="M633.6 678.4l108.8 0L512 832 281.6 678.4 384 678.4l0-275.2 249.6 0L633.6 678.4zM435.2 723.2 512 774.4l76.8-51.2L588.8 448 435.2 448 435.2 723.2zM627.2 134.4l76.8 102.4 179.2 0-64-249.6L204.8-12.8l-64 249.6 179.2 0 76.8-102.4L627.2 134.4zM838.4 614.4l-147.2 0c-12.8 0-25.6-12.8-25.6-25.6 0-12.8 12.8-25.6 25.6-25.6l108.8 0c12.8 0 19.2-6.4 25.6-19.2L876.8 320c6.4-12.8-6.4-32-25.6-32l-160 0c-6.4 0-12.8-6.4-19.2-12.8l-57.6-83.2c-6.4-6.4-12.8-12.8-19.2-12.8L435.2 179.2c-6.4 0-12.8 6.4-19.2 12.8L358.4 275.2C352 281.6 345.6 288 339.2 288L172.8 288C160 288 147.2 300.8 147.2 320l51.2 224c0 12.8 12.8 19.2 25.6 19.2l108.8 0c12.8 0 25.6 12.8 25.6 25.6 0 12.8-12.8 25.6-25.6 25.6L185.6 614.4c-12.8 0-19.2-6.4-25.6-19.2L89.6 268.8c0-6.4 0-6.4 0-12.8l76.8-300.8c0-12.8 12.8-19.2 25.6-19.2l652.8 0c12.8 0 19.2 6.4 25.6 19.2l76.8 300.8c0 6.4 0 6.4 0 12.8l-76.8 326.4C857.6 608 851.2 614.4 838.4 614.4z" horiz-adv-x="1024" /> + + + <glyph glyph-name="shouhuodizhi" unicode="" d="M512.005117 895.653099c-282.287201 0-434.613492-213.591633-434.613492-396.730697 0-190.322673 196.84625-402.487817 429.855118-504.555447l4.758374-2.100848 4.758374 2.100848c232.997612 102.066607 429.844885 314.251194 429.844885 504.555447C946.607352 682.06249 794.292318 895.653099 512.005117 895.653099zM512.00307 369.313509c-108.035552 0-195.61419 87.579661-195.61419 195.61419S403.967518 760.541889 512.00307 760.541889c108.033505 0 195.61419-87.579661 195.61419-195.61419S620.037599 369.313509 512.00307 369.313509zM259.848143-88.530057a246.409 38.232 0 1 0 504.303714 0 246.409 38.232 0 1 0-504.303714 0Z" horiz-adv-x="1024" /> + + + <glyph glyph-name="wodeshoucang" unicode="" d="M1019.733333 512c-8.533333 25.6-34.133333 46.933333-59.733333 51.2l-268.8 42.666667L580.266667 853.333333c-12.8 25.6-38.4 42.666667-68.266667 42.666667s-55.466667-17.066667-68.266667-42.666667L328.533333 605.866667l-264.533333-42.666667C34.133333 558.933333 12.8 541.866667 4.266667 512c-8.533333-25.6 0-55.466667 17.066666-76.8l196.266667-200.533333L170.666667-42.666667c-4.266667-29.866667 8.533333-55.466667 29.866666-72.533333 12.8-8.533333 29.866667-12.8 42.666667-12.8 12.8 0 25.6 4.266667 34.133333 8.533333l230.4 123.733334 230.4-123.733334c12.8-4.266667 25.6-8.533333 34.133334-8.533333 17.066667 0 29.866667 4.266667 42.666666 12.8 21.333333 17.066667 34.133333 46.933333 29.866667 72.533333l-46.933333 277.333334 196.266666 200.533333c29.866667 25.6 34.133333 51.2 25.6 76.8z" horiz-adv-x="1024" /> + + + <glyph glyph-name="ziyuan" unicode="" d="M512 470.646154a226.855385 226.855385 0 1 1 205.193846-322.953846 36.233846 36.233846 0 1 1-65.378461 30.326154 154.781538 154.781538 0 0 0-294.99077 65.378461A154.781538 154.781538 0 0 0 512 398.572308a157.538462 157.538462 0 0 0 140.603077-90.19077 36.233846 36.233846 0 0 1 65.378461 30.326154A228.036923 228.036923 0 0 1 512 470.646154zM512 604.553846a351.704615 351.704615 0 1 1 351.310769-351.310769A351.704615 351.704615 0 0 1 512 604.553846z m279.236923-351.310769A279.236923 279.236923 0 1 0 512 532.48a279.630769 279.630769 0 0 0 279.236923-279.236923zM801.083077 866.461538H222.916923a62.227692 62.227692 0 0 1-62.227692-62.227692v-142.178461a114.215385 114.215385 0 0 1 39.384615-78.769231L250.486154 541.538462a36.233846 36.233846 0 1 1 45.686154 54.744615l-50.412308 39.384615a48.049231 48.049231 0 0 0-12.996923 24.418462V794.387692h558.473846v-132.332307a30.326154 30.326154 0 0 0-12.996923-24.418462l-50.412308-39.384615A36.233846 36.233846 0 0 1 773.513846 541.538462l50.806154 39.384615a101.612308 101.612308 0 0 1 39.384615 78.769231V804.233846A62.227692 62.227692 0 0 1 801.083077 866.461538z" horiz-adv-x="1024" /> + + + <glyph glyph-name="gouwuche" unicode="" d="M289 14.8c-55.9 0-101.4 45.5-101.4 101.4 0 55.9 45.5 101.4 101.4 101.4s101.4-45.5 101.4-101.4c0-55.9-45.5-101.4-101.4-101.4z m0 161.6c-33.2 0-60.2-27-60.2-60.1 0-33.2 27-60.1 60.2-60.1s60.2 27 60.2 60.1c-0.1 33.1-27.1 60.1-60.2 60.1zM566.2 14.8c-55.9 0-101.4 45.5-101.4 101.4 0 55.9 45.5 101.4 101.4 101.4s101.4-45.5 101.4-101.4c0-55.9-45.5-101.4-101.4-101.4z m0 161.6c-33.2 0-60.2-27-60.2-60.1 0-33.2 27-60.1 60.2-60.1s60.2 27 60.2 60.1c-0.1 33.1-27.1 60.1-60.2 60.1zM648.4 255.2H198.3L86.9 645.4h567.2l45.7 107.7h163.5c40.7 0 73.8-33.4 73.8-74.5 0-41-33.1-74.3-73.8-74.3-5.1 0-47.7-0.1-70.2-0.2L648.4 255.2z m-419 41.3h391.4l144.7 348.9h13.7s77.1 0.2 84 0.2c17.9 0 32.6 14.8 32.6 33 0 18-14.9 33.2-32.6 33.2H727l-45.7-107.7H141.6l87.8-307.6z" horiz-adv-x="1024" /> + + + <glyph glyph-name="yiguanbigongdanshu" unicode="" d="M576 832H256a64.19 64.19 0 0 1-64-64v-768a64.19 64.19 0 0 1 64-64h512a64.19 64.19 0 0 1 64 64V576z m94.39-687.53l-45.25-45.25L512 212.35 398.86 99.22l-45.25 45.25 113.14 113.14-113.14 113.14L398.86 416 512 302.86 625.14 416l45.25-45.25-113.14-113.14zM576 576V768l192-192z" horiz-adv-x="1025" /> + + + <glyph glyph-name="shouhoukefu" unicode="" d="M824.2 535.3C809 590.2 744.7 768 512.1 768c-230.8 0-297-177.8-310.2-232.7-43.5-17-104-62.4-104-151.3 0-87 60.5-136.2 102.2-155.1 5.7-34.1 22.7-109.7 96.5-155.1 53-34.1 117.3-41.6 160.8-43.5 9.5-18.9 28.4-30.3 49.2-30.3 32.2 0 56.8 24.6 56.8 56.8 0 30.3-24.6 56.8-56.8 56.8-22.7 0-41.6-13.2-51.1-34.1-37.8 1.9-90.8 9.5-134.3 35.9-70 43.5-73.8 128.6-73.8 132.4V512.6c3.8 22.7 45.4 204.3 264.8 204.3S773.3 533.4 777 512.6v-266.7c0-7.6 3.8-15.1 9.5-20.8 3.8-3.8 9.5-5.7 15.1-5.7 1.9 0 5.7 0 7.6 1.9 41.6 13.2 119.2 62.4 119.2 160.8-0.2 90.8-62.6 136.2-104.2 153.2zM198 287.5c-22.7 17-51.1 45.4-51.1 96.5s28.4 79.5 51.1 92.7v-189.2z m630 0V476.7c22.7-15.1 51.1-43.5 51.1-92.7s-28.4-79.5-51.1-96.5z" horiz-adv-x="1024" /> + + + <glyph glyph-name="wodeyuyue" unicode="" d="M868.864 529.92h-808.96v-61.44h808.96v61.44zM261.632 614.912c-16.896 0-30.72 13.824-30.72 30.72V791.552c0 16.896 13.824 30.72 30.72 30.72s30.72-13.824 30.72-30.72v-145.92c0-16.896-13.824-30.72-30.72-30.72zM161.792 353.28c0 16.896 13.824 30.72 30.72 30.72h145.92c16.896 0 30.72-13.824 30.72-30.72s-13.824-30.72-30.72-30.72H192.512c-16.896 0-30.72 13.824-30.72 30.72zM747.52 292.864c16.896 0 30.72-13.824 30.72-30.72V184.32c0-16.896-13.824-30.72-30.72-30.72s-30.72 13.824-30.72 30.72v78.336c0 16.896 13.824 30.208 30.72 30.208zM858.624 180.736c0-16.896-13.824-30.72-30.72-30.72h-78.336c-16.896 0-30.72 13.824-30.72 30.72s13.824 30.72 30.72 30.72h78.336c16.896 0 30.72-13.824 30.72-30.72zM161.792 189.44c0 16.896 13.824 30.72 30.72 30.72h145.92c16.896 0 30.72-13.824 30.72-30.72s-13.824-30.72-30.72-30.72H192.512c-16.896 0-30.72 13.824-30.72 30.72zM666.112 614.912c-16.896 0-30.72 13.824-30.72 30.72V791.552c0 16.896 13.824 30.72 30.72 30.72s30.72-13.824 30.72-30.72v-145.92c0-16.896-13.824-30.72-30.72-30.72zM458.752 22.528m-30.72 0a30.72 30.72 0 1 1 61.44 0 30.72 30.72 0 1 1-61.44 0ZM752.64 354.304c93.184 0 168.96-75.776 168.96-168.96s-75.776-168.96-168.96-168.96-168.96 75.776-168.96 168.96 75.776 168.96 168.96 168.96m0 61.44c-127.488 0-230.4-102.912-230.4-230.4s102.912-230.4 230.4-230.4 230.4 102.912 230.4 230.4-102.912 230.4-230.4 230.4zM460.8 53.248H175.104c-37.376 0-68.608 30.72-68.608 68.608V647.68c0 37.376 30.72 68.608 68.608 68.608h578.048c37.376 0 68.608-30.72 68.608-68.608v-177.664h60.416V645.12c0 72.704-58.88 131.584-131.584 131.584H178.176C105.472 776.704 46.08 717.824 46.08 645.12v-520.704c0-72.704 58.88-131.584 131.584-131.584H460.8v60.416z" horiz-adv-x="1024" /> + + + <glyph glyph-name="buqiajuan" unicode="" d="M941.511111 486.4l25.6 2.844444V671.288889c0 48.355556-36.977778 85.333333-85.333333 85.333333H142.222222c-48.355556 0-85.333333-36.977778-85.333333-85.333333v-184.888889l19.911111-5.688889c39.822222-14.222222 65.422222-51.2 65.422222-93.866667 0-42.666667-25.6-79.644444-65.422222-93.866666l-19.911111-5.688889v-184.888889c0-48.355556 36.977778-85.333333 85.333333-85.333333h739.555556c48.355556 0 85.333333 36.977778 85.333333 85.333333v182.044444l-25.6 2.844445c-51.2 5.688889-88.177778 48.355556-88.177778 99.555555s36.977778 93.866667 88.177778 99.555556zM910.222222 236.088889v-133.688889c0-17.066667-11.377778-28.444444-28.444444-28.444444H142.222222c-17.066667 0-28.444444 11.377778-28.444444 28.444444v145.066667c51.2 25.6 85.333333 79.644444 85.333333 139.377777s-34.133333 113.777778-85.333333 139.377778V671.288889c0 17.066667 11.377778 28.444444 28.444444 28.444444h739.555556c17.066667 0 28.444444-11.377778 28.444444-28.444444v-133.688889c-65.422222-19.911111-113.777778-79.644444-113.777778-150.755556s48.355556-130.844444 113.777778-150.755555zM696.888889 415.288889h-113.777778c-17.066667 0-28.444444-11.377778-28.444444-28.444445s11.377778-28.444444 28.444444-28.444444h113.777778c17.066667 0 28.444444 11.377778 28.444444 28.444444s-11.377778 28.444444-28.444444 28.444445zM440.888889 415.288889h-113.777778c-17.066667 0-28.444444-11.377778-28.444444-28.444445s11.377778-28.444444 28.444444-28.444444h113.777778c17.066667 0 28.444444 11.377778 28.444444 28.444444s-11.377778 28.444444-28.444444 28.444445z" horiz-adv-x="1024" /> + + + <glyph glyph-name="kuaidi-" unicode="" d="M292.6799 72.3c-2.32-2.57-2.41-2.77-1.81-2.13s1.1 1.29 1.66 1.93zM750.5899 54.08l0.37 0.19c-1.62-0.59-2.51-0.94-2.91-1.11l1.35 0.46zM1024.0099 154.61c-0.54 12.16-9.79 22.19-22.3 22.29l-63.15 0.51-100.62 0.81-23.06 0.19c-12 0.1-22.39-10.29-22.3-22.3 0.05-6.16 0-12.31-0.37-18.46-0.3-5.54-1.3-11.11-1.46-16.63 0.21 7.2 0 0.29-0.31-1.73-0.4-2.42-0.84-4.83-1.34-7.24-0.91-4.45-2-8.88-3.31-13.24q-1.6-5.4-3.67-10.66c-0.08-0.17-0.17-0.35-0.26-0.57q-1.26-2.72-2.65-5.37c-1.49-2.8-3.1-5.54-4.85-8.18-0.66-1-1.36-2-2.06-2.95l-0.68-0.84a80.58 80.58 0 0 0-5.6-5.94c-0.88-0.84-1.79-1.65-2.71-2.46-1.9-0.61-4.53-3.29-6.18-4.28-2-1.2-4.05-2.29-6.15-3.29l1.67 0.61c-0.68-0.25-1.36-0.52-2-0.8-1.3-0.61-3.57-1.36-2.51-0.91-1.64-0.56-3.29-1.08-5-1.54-1.84-0.49-3.69-0.93-5.55-1.3-0.61-0.12-1.21-0.22-1.81-0.32a88.6 88.6 0 0 0-14.75-0.27l-1.71 0.17a108.17 108.17 0 0 0-13.52 3.09c-1.51 0.47-3 1-4.5 1.55l0.88-0.46c-0.4 0.21-0.81 0.39-1.22 0.58l-0.24 0.09a16.3 16.3 0 0 0-2.16 1 76.59 76.59 0 0 0-8.78 5.18 7.57 7.57 0 0 0-1.27 0.9l-0.17 0.15a10.81 10.81 0 0 1-1.4 1l0.79-0.45c-0.9 0.79-1.8 1.57-2.67 2.39-2.64 2.51-4.77 5.49-7.34 8l0.92-0.91a15.4 15.4 0 0 0-1.14 1.42q-1.25 1.83-2.4 3.71a95.38 95.38 0 0 0-5 9.23c-0.24 0.49-0.46 1-0.68 1.48-0.4 1-0.81 2.06-1.18 3.1q-1.77 4.92-3.13 10t-2.36 10.18c-0.3 1.52-0.57 3-0.82 4.57l-0.21 1.34c-0.57 5.14-1 10.28-1.17 15.46a128.6 128.6 0 0 0 0.3 16.07c1.14 12-11.14 22.3-22.3 22.3H338.7299c-12.8 0-21.28-10.26-22.3-22.3-0.27-3.27-0.58-6.53-0.95-9.78-0.11-1-0.24-2-0.37-3v-0.27c-0.92-5.67-1.87-11.31-3.13-16.91a174.93 174.93 0 0 0-7.76-25.74l0.49 1c-0.27-0.57-0.52-1.16-0.77-1.74l-0.11-0.27c-0.07-0.14-0.13-0.29-0.19-0.43-0.79-1.72-1.6-3.43-2.46-5.12a115.18 115.18 0 0 0-5.47-9.6c-0.88-1.39-1.79-2.75-2.74-4.1l-0.25-0.33 0.66 0.73-0.81-0.93c-0.55-0.7-1.26-1.5-1.66-1.93-1.25-1.47-2.49-2.95-3.86-4.34q-2.79-2.83-5.83-5.39c-0.7-0.5-1.39-1-2.11-1.47-1.9-1.27-3.87-2.46-5.89-3.54-1.71-0.92-6.14-2.59-5.63-2.43a62.73 62.73 0 0 0-6.26-1.87c-1-0.24-2-0.44-3.06-0.63l2.13 0.18c-0.7-0.06-1.4-0.16-2.09-0.23h-0.42c-0.38-0.07-0.76-0.15-1.15-0.21-1.81-0.33-4.61-0.33 0.12 0.14-2.33-0.11-4.63 0-7 0-3.24 0-6.46-0.38-9.72-0.29-1.3 0-2.6 0.11-3.89 0.21l0.79-0.23a7.89 7.89 0 0 1-1.3 0.27l-0.69 0.06a7.54 7.54 0 0 0-1.47 0.28 68.25 68.25 0 0 0-9.32 2.53l-1 0.39c-1.39 0.71-2.81 1.37-4.18 2.14-1.57 0.88-3.35 1.81-5 2.87l-0.52 0.48c-0.64 0.58-1.33 1.1-2 1.67q-2 1.69-3.78 3.52c-2.13 2.11-4.09 4.36-6 6.66-1.14 1.63-2.29 3.26-3.37 4.93a130.08 130.08 0 0 0-9 16.63c0 0.1-0.1 0.22-0.15 0.34 0.12-0.31 0.24-0.63 0.37-1-0.58 1.58-1.26 3.12-1.86 4.69q-1.6 4.23-3 8.53a220.54 220.54 0 0 0-8 34c-0.1 0.62-0.19 1.23-0.28 1.84-0.14 1.22-0.29 2.43-0.41 3.65s-0.27 2.7-0.35 4.06c-0.72 12-9.63 22.3-22.3 22.3H44.6199v278l40.29 35 74.64 64.91 9.64 8.39h147.24v-105.77c0-11.66 10.26-22.84 22.3-22.3s22.3 9.8 22.3 22.3V578 718.43h602.13c8.46 0 16.94-0.15 25.4 0h1.08c11.66 0 22.84 10.25 22.3 22.29s-9.8 22.3-22.3 22.3H365.2099c-8.46 0-16.94 0.15-25.39 0h-1.09a22.62 22.62 0 0 1-22.3-22.3V601.8H163.6599a27.77 27.77 0 0 1-18.52-6.56c-1.25-1-2.45-2.12-3.67-3.19l-56.78-49.37-65.74-57.16c-4.07-3.55-8.62-6.9-12.39-10.78C-0.5401 467.43 0.0099 459.5 0.0099 450.66v-302.08a22.62 22.62 0 0 1 22.3-22.3h111.19c6.27-40.17 23.47-81.13 56.43-104.87 19.17-13.81 42.6-16.79 65.57-15.75 21.59 1 41.26 9.71 57.65 23.61 28.06 23.81 40 61 45.33 97H616.0099a203 203 0 0 1 4.53-30.87c7.22-32.51 26.22-64.35 57.24-79a109.27 109.27 0 0 1 30.75-9.69c1.45-0.21 3.89-0.54 5.53-0.75s3-0.44 4.53-0.6a80.76 80.76 0 0 1 14.75-0.22c24 1.82 46.58 10.8 64.16 27.62 27 25.86 36.7 64.08 39 100.87l41.45-0.33 100.63-0.82 23-0.18c11.78-0.09 22.95 10.33 22.43 22.31z m-810.4-95.75a17.18 17.18 0 0 0-2.56 2.08c-0.11 0.06 1.64-1.34 2.56-2.08z m55-5.51l3.2 1.13z m494 7.85l-1.31-1.08c-2.17-1.78-0.15-0.01 1.26 1.08zM678.6399 72c1.5-1.68 3.12-3.1 0 0zM235.7299 50.3h0.51c-3.89 1.12-3.87 0.73-2.67 0.38h0.12c0.66-0.2 1.32-0.27 2.04-0.38zM258.2299 50.5l-1.41-0.14 1 0.07zM689.2399 61.33c0.18-0.13 0.37-0.24 0.54-0.37 0.94-0.51 1.14-0.26-2 1.59l0.61-0.54c0.25-0.24 0.55-0.48 0.85-0.68zM304.0999 92.63l0.08 0.21c-2-4.26-1.07-2.48-0.39-1 0 0.09 0.07 0.18 0.11 0.27s0.11 0.37 0.2 0.52zM701.0099 54.64l0.34-0.12c-2.63 1.33-3.11 1.5-2.74 1.26l0.84-0.43c0.46-0.25 0.98-0.48 1.56-0.71zM989.6399 473.73H686.7899c-11.67 0-22.84-10.26-22.3-22.3s9.8-22.3 22.3-22.3h302.85c11.66 0 22.84 10.26 22.3 22.3s-9.8 22.3-22.3 22.3z" horiz-adv-x="1024" /> + + + + + </font> +</defs></svg> diff --git a/static/iconfont/iconfont.ttf b/static/iconfont/iconfont.ttf new file mode 100644 index 0000000..6b0942c Binary files /dev/null and b/static/iconfont/iconfont.ttf differ diff --git a/static/iconfont/iconfont.woff b/static/iconfont/iconfont.woff new file mode 100644 index 0000000..298b9d3 Binary files /dev/null and b/static/iconfont/iconfont.woff differ diff --git a/static/iconfont/iconfont.woff2 b/static/iconfont/iconfont.woff2 new file mode 100644 index 0000000..8712068 Binary files /dev/null and b/static/iconfont/iconfont.woff2 differ diff --git a/static/logo.jpg b/static/logo.jpg new file mode 100644 index 0000000..34a2c0d Binary files /dev/null and b/static/logo.jpg differ diff --git a/store/index.js b/store/index.js new file mode 100644 index 0000000..fb88e3e --- /dev/null +++ b/store/index.js @@ -0,0 +1,16 @@ +import Vue from 'vue' +import Vuex from 'vuex' + +import appUser from './modules/appUser' +import logo from './modules/logo' + +Vue.use(Vuex) + +const store = new Vuex.Store({ + modules: { + appUser, + logo + } +}) + +export default store \ No newline at end of file diff --git a/store/modules/appUser.js b/store/modules/appUser.js new file mode 100644 index 0000000..415fbb9 --- /dev/null +++ b/store/modules/appUser.js @@ -0,0 +1,115 @@ +const user = { + state: { + appUser: { + token: null, // 登录会话token + tokenHead: null, // 登录会话token头 + openid: null, // 微信用户OPENID + userid: null, // 系统用户ID + userInfo: {}, // 用户信息 + currentTime: null, // 当前时间 + }, + wxInfo: {}, // 微信信息 + wxJssdkUser: { + code: null, // 微信用户code + openid: null, // 微信用户OPENID + appid: null, // 微信号APPID + ticket: null // ticket + }, + refleshStatus: false // 刷新状态 + }, + + getters: { + //appUser: state => state.appUser, + wxInfo: state => state.wxInfo, + userInfo: state => state.appUser.userInfo, + wxJssdkUser: state => state.appUser.userInfo, + refleshStatus: state => state.refleshStatus + }, + + mutations: { + SET_APP_USER: (state, appUser) => { + state.appUser.token = appUser.token + state.appUser.tokenHead = appUser.tokenHead + state.appUser.openid = appUser.openid + state.appUser.userid = appUser.userid + state.appUser.currentTime = appUser.currentTime + }, + SET_WX_INFO: (state, wxInfo) => { + state.wxInfo = wxInfo + }, + SET_USER_INFO: (state, userInfo) => { + state.appUser.userInfo = userInfo + }, + SET_TOKEN: (state, token) => { + state.appUser.token = token + }, + SET_WX_JSSDK_USER: (state, jssdkUser) => { + state.wxJssdkUser.code = jssdkUser.code + state.wxJssdkUser.openid = jssdkUser.openid + state.wxJssdkUser.appid = jssdkUser.appid + state.wxJssdkUser.ticket = jssdkUser.ticket + }, + SET_REFLESH_STATUS: (state, refleshStatus) => { + state.refleshStatus = refleshStatus + } + }, + + actions: { + setAppUser: ({ + commit + }, appUser) => { + commit('SET_APP_USER', appUser) + }, + resetAppUser: ({ + commit + }) => { + let appUser = { + token: null, // 登录会话token + tokenHead: null, // 登录会话token头 + openid: null, // 微信用户OPENID + userid: null, // 系统用户ID + userInfo: {}, // 用户信息 + currentTime: null, // 当前时间 + } + commit('SET_APP_USER', appUser) + }, + resetWxJssdkUser: ({ + commit + }) => { + let wxJssdkUser = { + code: null, // 微信用户code + openid: null, // 微信用户OPENID + appid: null, // 微信号APPID + ticket: null // ticket + } + commit('SET_WX_JSSDK_USER', wxJssdkUser) + }, + setWxInfo: ({ + commit + }, wxInfo) => { + commit('SET_WX_INFO', wxInfo) + }, + setUserInfo: ({ + commit + }, userInfo) => { + commit('SET_USER_INFO', userInfo) + }, + setToken: ({ + commit + }, token) => { + commit('SET_TOKEN', token) + }, + setWxJssdkUser: ({ + commit + }, jssdkUser) => { + commit('SET_WX_JSSDK_USER', jssdkUser) + }, + setRefleshStatus: ({ + commit + }, refleshStatus) => { + commit('SET_REFLESH_STATUS', refleshStatus) + } + } +} + +export default user diff --git a/store/modules/logo.js b/store/modules/logo.js new file mode 100644 index 0000000..9179d8d --- /dev/null +++ b/store/modules/logo.js @@ -0,0 +1,78 @@ +const appContext = { + state: { + /** + * 是否需要强制登录 + */ + appUser: { + token: null, // 登录会话token + tokenHead: null, // 登录会话token头 + openid: null, // 微信用户OPENID + userid: null, // 系统用户ID + userInfo: {}, // 用户信息 + currentTime: null, // 当前时间 + }, + forcedLogin: false, + hasLogin: false, + userName: "", //用户账号 + wixinInfo:{} + }, + getters: { + appUser: state => state.appUser, + forcedLogin: state => state.forcedLogin, + hasLogin: state => state.hasLogin, + userName: state => state.userName, + wixinInfo: state => state.wixinInfo, + }, + mutations: { + SET_APP_USER: (state, appUser) => { + state.appUser.token = appUser.token + state.appUser.tokenHead = appUser.tokenHead + state.appUser.openid = appUser.openid + state.appUser.userid = appUser.userid + state.appUser.currentTime = appUser.currentTime + }, + SET_CURRENT_DATA: (state, forcedLogin) => { + state.forcedLogin = forcedLogin + }, + SET_CURRENT_ENV: (state, hasLogin) => { + state.hasLogin = hasLogin + }, + SET_CURRENT_NAME: (state, userName) => { + state.userName = userName + }, + SET_CURRENT_INFO: (state, wixinInfo) => { + state.wixinInfo = wixinInfo + }, + + }, + actions: { + setAppUser: ({ + commit + }, appUser) => { + commit('SET_APP_USER', appUser) + }, + setforcedLogin: ({ + commit + }, forcedLogin) => { + commit('SET_CURRENT_DATA', forcedLogin) + }, + sethasLogin: ({ + commit + }, hasLogin) => { + commit('SET_CURRENT_ENV', hasLogin) + }, + setuserName: ({ + commit + }, userName) => { + commit('SET_CURRENT_NAME', userName) + }, + setwixinInfo: ({ + commit + }, wixinInfo) => { + commit('SET_CURRENT_INFO', wixinInfo) + }, + + } +} + +export default appContext diff --git a/uni.scss b/uni.scss new file mode 100644 index 0000000..9a6702a --- /dev/null +++ b/uni.scss @@ -0,0 +1,80 @@ +/** + * 这里是uni-app内置的常用样式变量 + * + * uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量 + * 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App + * + */ + +/** + * 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能 + * + * 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件 + */ + +/* 颜色变量 */ + +/* 行为相关颜色 */ +$uni-color-primary: #007aff; +$uni-color-success: #4cd964; +$uni-color-warning: #f0ad4e; +$uni-color-error: #dd524d; + +/* 文字基本颜色 */ +$uni-text-color:#333;//基本色 +$uni-text-color-inverse:#fff;//反色 +$uni-text-color-grey:#999;//辅助灰色,如加载更多的提示信息 +$uni-text-color-placeholder: #808080; +$uni-text-color-disable:#c0c0c0; + +/* 背景颜色 */ +$uni-bg-color:#ffffff; +$uni-bg-color-grey:#f8f8f8; +$uni-bg-color-hover:#f1f1f1;//点击状态颜色 +$uni-bg-color-mask:rgba(0, 0, 0, 0.4);//遮罩颜色 +$uni-bg-color-primary: #007aff; +$uni-bg-color-success: #4cd964; +$uni-bg-color-warning: #f0ad4e; +$uni-bg-color-error: #dd524d; + +/* 边框颜色 */ +$uni-border-color:#c8c7cc; + +/* 尺寸变量 */ + +/* 文字尺寸 */ +$uni-font-size-sm:24upx; +$uni-font-size-base:28upx; +$uni-font-size-lg:32upx; + +/* 图片尺寸 */ +$uni-img-size-sm:40upx; +$uni-img-size-base:52upx; +$uni-img-size-lg:80upx; + +/* Border Radius */ +$uni-border-radius-sm: 4upx; +$uni-border-radius-base: 6upx; +$uni-border-radius-lg: 12upx; +$uni-border-radius-circle: 50%; + +/* 水平间距 */ +$uni-spacing-row-sm: 10px; +$uni-spacing-row-base: 20upx; +$uni-spacing-row-lg: 30upx; + +/* 垂直间距 */ +$uni-spacing-col-sm: 8upx; +$uni-spacing-col-base: 16upx; +$uni-spacing-col-lg: 24upx; + +/* 透明度 */ +$uni-opacity-disabled: 0.3; // 组件禁用态的透明度 + +/* 文章场景相关 */ +$uni-color-title: #2C405A; // 文章标题颜色 +$uni-font-size-title:40upx; +$uni-color-subtitle: #555555; // 二级标题颜色 +$uni-font-size-subtitle:36upx; +$uni-color-paragraph: #3F536E; // 文章段落颜色 +$uni-font-size-paragraph:30upx; \ No newline at end of file diff --git a/util/AppContext.js b/util/AppContext.js new file mode 100644 index 0000000..ec37a39 --- /dev/null +++ b/util/AppContext.js @@ -0,0 +1,340 @@ +import Cache from '../cache' +import $Qs from 'qs' +import $Enums from './Enums' +import $nothing from './nothing.js' +import $store from '../store' +import { + mapGetters, + mapActions +} from 'vuex' + +const initEnv = { + initConfig: ({ + store + }) => {}, + initCacheData: ({ + store + }) => { + store.dispatch('setAppUser', Cache.getSync(Cache.$Keys.app.APP_USER)); + store.dispatch('setWxInfo', Cache.getSync(Cache.$Keys.app.WX_INFO)); + store.dispatch('setUserInfo', Cache.getSync(Cache.$Keys.app.USER_INFO)); + } +} + +const $AppContext = { + _initStatus: false, // 初始化状态 + $vm: null, // 当前页面VM对象 + $router: null, + $store: null, + $cache: Cache, + $Qs, + $Enums, + /** + * 导航对象(不可直接使用,使用getNavigate获取页面级导航对象) + */ + $Navigate: { + path: null, + params: null, + isTab: false, + isBack: false, + isCancel: false, + reLaunch: false, + from: null + }, + /** + * 获取当前页面导航对象 + */ + getNavigate: () => Object.assign(this.$AppContext.getCurrentPage().data.$Navigate || {}, { + /** + * 返回并且非取消(系统按键返回) + */ + isBackNoCancel: () => (this.$AppContext.getCurrentPage().data.$Navigate || {}).isBack && !(this.$AppContext.getCurrentPage() + .data.$Navigate || {}).isCancel + }), + /** + * 获取当前页面对象 + */ + getCurrentPage: () => getCurrentPages()._last(), + /** + * 获取前一个页面对象 + */ + getPreviousPage: () => getCurrentPages()[getCurrentPages().length - 2] || {}, + /** + * 获取当前页面参数 + */ + getParams: () => this.$AppContext.getNavigate().params || {}, + /** + * 设置导航栏颜色 + */ + setNavigationBarColor: ({ + frontColor, + backgroundColor + } = {}) => { + frontColor = $nothing._ifNull(frontColor, '#ffffff') + backgroundColor = $nothing._ifNull(backgroundColor, '#5cadff') + wx.setNavigationBarColor({ + frontColor, + backgroundColor + }) + Cache.setSync(Cache.$Keys.app.NAVIGATION_BAR_FRONT_COLOR, frontColor) + Cache.setSync(Cache.$Keys.app.NAVIGATION_BAR_BACKGROUND_COLOR, backgroundColor) + }, + showTabBarRedDot: (params = {}) => { + wx.showTabBarRedDot(params) + }, + hideTabBarRedDot: (params = {}) => { + wx.hideTabBarRedDot(params) + }, + setTabBarBadge: (params = {}) => { + wx.setTabBarBadge(params) + }, + removeTabBarBadge: (params = {}) => { + wx.removeTabBarBadge(params) + }, + /** + * 获取缓存的导航栏颜色 + */ + getCacheNavigationBarColor: () => { + let frontColor = Cache.getSync(Cache.$Keys.app.NAVIGATION_BAR_FRONT_COLOR) + let backgroundColor = Cache.getSync(Cache.$Keys.app.NAVIGATION_BAR_BACKGROUND_COLOR) + return { + frontColor, + backgroundColor + } + }, + /** + * main.js vue实例化的 created 中 使用 AppContext.use(vue) 初始化 $vm、$router、$store + * @param vm + */ + use: (vm) => { + vm.$AppContext.$router = vm.$router + vm.$AppContext.$store = vm.$store + vm.$AppContext.$store.mapGetters = mapGetters + vm.$AppContext.$store.mapActions = mapActions + }, + /** + * main.js vue实例化的 created 中调用 + * @param vm + */ + initialize: (vm) => { + if (!vm.$AppContext._initStatus) { + vm.$AppContext._initStatus = true + vm.$AppContext.use(vm) + initEnv.initConfig({ store: vm.$AppContext.$store }) + initEnv.initCacheData({ store: vm.$AppContext.$store }) + } + }, + checkLogin: () => { + if (!$store.getters.appUser.currentTime || $nothing._isNull($store.getters.appUser.token) + || ($store.getters.appUser.currentTime && new Date().getTime() - $store.getters.appUser.currentTime >= 86400000)) return false + else return true + }, + logout: (vm) => { + vm.$AppContext.$store.dispatch('resetAppUser') + vm.$AppContext.$store.dispatch('setWxInfo', {}) + vm.$AppContext.$store.dispatch('resetAppUser') + Cache.removeSync(Cache.$Keys.app.APP_USER) + Cache.removeSync(Cache.$Keys.app.WX_INFO) + Cache.removeSync(Cache.$Keys.app.USER_INFO) + }, + /** + * 导航跳转页面 + * @param {*} options + */ + navigateTo: ({ + path = null, + isTab = false, + reLaunch = false, + params = {}, + onComplete = (res) => {}, + onAbort = (res) => {}, + onSuccess = (res) => {}, + userCallBack = (res) => {} + } = {}) => { + this.$AppContext.$Navigate = { + path, + params, + isTab, + isBack: false, + isCancel: false, + reLaunch, + from: this.$AppContext.getCurrentPage().route, + userCallBack + } + console.log('### navigateTo: ' + this.$AppContext.$Navigate.from) + console.warn($nothing._copy(this.$AppContext.$Navigate)) + this.$AppContext.$router.push({ + path, + isTab, + reLaunch + }, onComplete, onAbort, onSuccess) + }, + /** + * 导航跳转Tab页 + * @param {*} options + */ + navigateToTab: ({ + path = null, + reLaunch = false, + params = {}, + onComplete = (res) => {}, + onAbort = (res) => {}, + onSuccess = (res) => {}, + userCallBack = (res) => {} + } = {}) => { + this.$AppContext.navigateTo({ + path, + isTab: true, + reLaunch, + params, + onComplete, + onAbort, + onSuccess, + userCallBack + }) + }, + /** + * 导航替换 + * @param {*} options + */ + replaceTo: ({ + path = null, + params = null, + onComplete = (res) => {}, + onAbort = (res) => {}, + onSuccess = (res) => {}, + userCallBack = (res) => {} + } = {}) => { + this.$AppContext.$Navigate = { + path, + params, + isTab: false, + isBack: true, + isReplace: true, + isCancel: false, + reLaunch: false, + // from: this.$AppContext.getCurrentPage().route, + from: this.$AppContext.getPreviousPage().route, + userCallBack + } + console.log('### replaceTo: ' + this.$AppContext.$Navigate.from) + console.warn($nothing._copy(this.$AppContext.$Navigate)) + this.$AppContext.$router.replace({ + path + }, onComplete, onAbort, onSuccess) + }, + /** + * 导航返回 + * @param {*} options + */ + navigateBack: ({ + params = null, + isTab = false + } = {}) => { + this.$AppContext.$Navigate = { + path: this.$AppContext.getPreviousPage().route, + params, + isTab, + isBack: true, + isCancel: false, + reLaunch: false, + from: getCurrentPages()[getCurrentPages().length - 3] ? getCurrentPages()[getCurrentPages().length - 3].route : null, + backFrom: this.$AppContext.getCurrentPage().route + } + console.log('### navigateBack: ' + this.$AppContext.$Navigate.backFrom) + console.warn($nothing._copy(this.$AppContext.$Navigate)) + this.$AppContext.$router.back() + }, + navigateGo: ({ + params = null, + isTab = false + } = {}) => { + this.$AppContext.$Navigate = { + path: this.$AppContext.getPreviousPage().route, + params, + isTab, + isBack: true, + isCancel: false, + reLaunch: false, + from: getCurrentPages()[getCurrentPages().length - 3] ? getCurrentPages()[getCurrentPages().length - 3].route : null, + backFrom: this.$AppContext.getCurrentPage().route + } + console.log('### navigateGo: ' + this.$AppContext.$Navigate.backFrom) + console.warn($nothing._copy(this.$AppContext.$Navigate)) + this.$AppContext.$router.back() + }, + /** + * 页面显示处理 + * @param vm + */ + pageOnShow: (vm) => { + this.$AppContext.$vm = vm + // 将导航对象设置到当前页对象 + this.$AppContext.getCurrentPage().setData({ + $Navigate: $nothing._copy(this.$AppContext.$Navigate) + }) + // 还原导航对象 + this.$AppContext.$Navigate = { + path: null, + params: null, + isTab: false, + isBack: false, + isCancel: false, + reLaunch: false, + from: null + } + // BACK后跳转处理 + if (this.$AppContext.getNavigate().isBack && this.$AppContext.getNavigate().backNavigate) { + let backNavigate = this.$AppContext.getNavigate().backNavigate + if (backNavigate.type === 'BACK') { + this.$AppContext.navigateBack(backNavigate.options) + } else if (backNavigate.type === 'REPLACE') { + this.$AppContext.replaceTo(backNavigate.options) + } else if (backNavigate.type === 'TAB') { + this.$AppContext.navigateToTab(backNavigate.options) + } else { + this.$AppContext.navigateTo(backNavigate.options) + } + } + }, + /** + * 页面卸载处理 + */ + pageOnUnload: ({ + backNavigate = null, + params = null + } = {}) => { + // 是否取消操作(系统按键返回) + if (!this.$AppContext.$Navigate.isBack) { + this.$AppContext.$Navigate = { + path: this.$AppContext.getPreviousPage().route, + params: null, + isTab: false, + isBack: true, + isCancel: true, + reLaunch: false, + from: getCurrentPages()[getCurrentPages().length - 3] ? getCurrentPages()[getCurrentPages().length - 3].route : null, + backFrom: this.$AppContext.getCurrentPage().route + } + console.log('### sysBack: ' + this.$AppContext.$Navigate.backFrom) + console.warn($nothing._copy(this.$AppContext.$Navigate)) + } + // 如传递参数,则进行合并 + if (params) { + if (this.$AppContext.$Navigate.params) { + Object.assign(this.$AppContext.$Navigate.params, params) + } else this.$AppContext.$Navigate.params = params + } + this.$AppContext.$Navigate.backNavigate = backNavigate + } +} + +if (typeof wx !== 'undefined' && !wx.miniProgram) { + // 小程序环境 + wx.$AppContext = $AppContext +} else { + window.$AppContext = $AppContext + Object.assign(window, $AppContext) +} + +export default $AppContext diff --git a/util/Enums.js b/util/Enums.js new file mode 100644 index 0000000..9d130c7 --- /dev/null +++ b/util/Enums.js @@ -0,0 +1,80 @@ +/** + * 数据方向 + */ +const DATA_DIRECTION = { + UP: 'UP', + DOWN: 'DOWN' +} + +/** + * 数据排序 + */ +const DATA_ORDER_BY = { + ASC: 'ASC', + DESC: 'DESC' +} + +/** + * 字符串样式 + */ +const StringStyle = { + UPPER: 'UPPER', // 大写 + LOWER: 'LOWER' // 小写 +} + +/** + * 数据类型 + */ +const DataType = { + JSON: 'Json', + ARRAY: 'Array', + DATE: 'Date', + STRING: 'String', + NUMBER: 'Number', + file:'file' +} + +/** + * HTTP请求Header类型 + */ +const ContentType = { + FORM: 'application/x-www-form-urlencoded', + FORM_UTF8: 'application/x-www-form-urlencoded;charset=utf-8', + JSON: 'application/json', + JSON_UTF8: 'application/json;charset=utf-8', + MULTIPART_FORM: 'mutipart/form-data' +} + +/** + * 订单状态 + * 0->待付款;1->待发货;2->已发货;3->已完成;4->已关闭;5->无效订单 + */ +const OrderStatus = { + UNPAY: 0, + UNDELIVER: 1, + DELIVER: 2, + FINISH: 3, + CLOSED: 4, + INVALID: 5 +} + +export default { + DATA_DIRECTION, + DATA_ORDER_BY, + StringStyle, + DataType, + ContentType, + // 公共枚举值 + TRUE: true, + FALSE: false, + STR_TRUE: '1', + STR_FALSE: '0', + N_TRUE: 1, + N_FALSE: 0, + YES: 1, + NO: 0, + STR_YES: '1', + STR_NO: '0', + ZERO: 0, + OrderStatus +} diff --git a/util/Env.js b/util/Env.js new file mode 100644 index 0000000..d861dce --- /dev/null +++ b/util/Env.js @@ -0,0 +1,26 @@ +// 获取当前帐号信息 +const accountInfo = wx.getAccountInfoSync(); +//console.log(accountInfo) +if(!accountInfo.miniProgram.envVersion){ + console.error("获取运行环境失败!"); +} +const baseApi = { + //开发版 + //develop: "http://192.168.1.231", + //develop: "https://tprint.refinecolor.com", + develop: "https://tprint.colorpark.cn", + //体验版 + trial: "https://tprint.refinecolor.com", + //trial: "https://tprint.colorpark.cn", + //正式版 + release: "https://tprint.colorpark.cn", +}; +const baseURL = baseApi[accountInfo.miniProgram.envVersion] + +const Env = { + getDevBaseURL: () => baseURL, + getBaseURL: () => baseURL, + getmalltext: () => "色彩公园代理中心", //小程序名字 + getAppID: () => "wx9cd3934f286f3d71", +} +export default Env diff --git a/util/base.js b/util/base.js new file mode 100644 index 0000000..031b967 --- /dev/null +++ b/util/base.js @@ -0,0 +1,12 @@ +export default { + Userres:null,//记录用户登录信息 + terminal:3,//终端,1:平板, 2:手机,3:抖音 + be_child:0,//子代理 + partner_id:-1, //默认-1 + isLogin:false,//是否登录 + + +} +// this.$base.Userres +// if(this.$base.Userres.be_child == 1) return; +// :class="be_child == 1 ? 'bg-grey' : ''" diff --git a/util/nothing.js b/util/nothing.js new file mode 100644 index 0000000..2784cfa --- /dev/null +++ b/util/nothing.js @@ -0,0 +1,700 @@ +/** + * nothing.js + * version: v1.0.1 + * author: dengs + * mail: cbtak@hotmail.com + * github: https://github.com/cbtak/nothing + * create date: 2017-6-18 + * + * 说明:平时积累常用的一些系统对象扩展、功能函数集 + * 在程序入口直接引入即可: + * import './utils/nothing' + * + * 浏览器环境:window.nothing 或 window.$n + * 小程序环境:wx.nothing 或 wx.$n + * import方式:import nothing from './utils/nothing' + * + * 更新日志: + * modify date: 【2018-10-13】更新代码风格(去除“;”号、“"”改为“'”、去除未使用的变量等...),以兼容ESlint校验 + * modify date: 【2018-10-15】调整部分语法,以兼容小程序 + */ +const $nt = { + /** + * 对象拷贝 + * 示例: + * let a = {name:'this is a'} + * let b = _copy() + */ + _copy: function (source) { + let result = source instanceof Array ? [] : {} + // 日期类型直接返回 + if (source instanceof Date) { + return source + } + for (let key in source) { + result[key] = source[key] && typeof source[key] === 'object' ? $nt._copy(source[key]) : source[key] + } + return result + }, + /** + * 验证是否空值 + * 示例: + * let checkMsg = $nt._isNull(var) ? 'var is null' : 'var not null' + * @param {*} val + */ + _isNull: function (val) { + return val === null || val === '' || val === undefined + }, + /** + * 验证是否非空值 + * 示例: + * let checkMsg = _isNotNull(var) ? 'var not null' : 'var is null' + * @param {*} val + */ + _isNotNull: function (val) { + return val !== null && val !== '' && val !== undefined + }, + /** + * 空值处理(类oracle nvl2) + * 如果val为空,则返回val1,不为空时,则验证val2是否为空,val2不为空时返回val2,否则返回val + * 示例: + * let val = _ifNull(val, 'val1', 'val2') + * @param {*} val + * @param {*} val1 + * @param {*} val2 + */ + _ifNull: function (val, val1, val2) { + return $nt._isNull(val) ? val1 : ($nt._isNull(val2) ? val : val2) + }, + /** + * 数值舍入处理(可指定小数位数和舍入模式) + * @param {*} num 要格式化的数值 + * @param {*} precision 小数保留位数 + * @param {*} mode 舍入模式:0:Math.round 1:Math.ceil -1:Math.floor + */ + _toFixed: function (num, precision, mode) { + num = Number(num) + precision = Number(precision || 0) + mode = [0, 1, -1]._contains(mode) ? mode : 0 + // 舍入处理 + num = $nt._caseValue(mode, + 0, (precision ? Math.round(num * Math.pow(10, precision)) * (1 / Math.pow(10, precision)) : Math.round(num)), + 1, (precision ? Math.ceil(num * Math.pow(10, precision)) * (1 / Math.pow(10, precision)) : Math.ceil(num)), + -1, (precision ? Math.floor(num * Math.pow(10, precision)) * (1 / Math.pow(10, precision)) : Math.floor(num)) + ) + return Number(num.toFixed(precision)) + }, + /** + * 数值格式化 + * @param {*} num 要格式化的数值 + * @param {*} params 参数对象 + * 参数对象说明: + * num 要格式化的数值 + * params.mode 舍入模式:0:Math.round 1:Math.ceil -1:Math.floor + * params.thousands 是否显示千分位 + * params.precision 保留小数位数 + * 示例: + * _numberFormat(12806.123) 返回:12806 + * _numberFormat(12806.123, {mode: 0, thousands: true, precision: 2}) 返回:12,806.12 + * _numberFormat(12806.123, {mode: 1, precision: 2}) 返回:12806.13 + * _numberFormat(12806.126, {mode: -1, thousands: false, precision: 2}) 返回:12806.12 + */ + _numberFormat: function (num, params) { + if ($nt._isNull(num)) return num + num = Number(num) + params = params || {} + // 舍入模式:0:Math.round 1:Math.ceil -1:Math.floor + let mode = [0, 1, -1]._contains(params.mode) ? params.mode : 0 + // 是否显示千分位 + let thousands = $nt._isNull(params.thousands) ? false : params.thousands + // 显示小数位数 + let precision = $nt._isNull(params.precision) ? 0 : params.precision + // 舍入处理 + num = $nt._caseValue(mode, + 0, (precision ? Math.round(num * Math.pow(10, precision)) * (1 / Math.pow(10, precision)) : Math.round(num)), + 1, (precision ? Math.ceil(num * Math.pow(10, precision)) * (1 / Math.pow(10, precision)) : Math.ceil(num)), + -1, (precision ? Math.floor(num * Math.pow(10, precision)) * (1 / Math.pow(10, precision)) : Math.floor(num)) + ) + // 按小数点分割为数组 + let tempArr = num.toString().split('.') + // 小数点后的数值处理 + tempArr[1] = tempArr[1] || '' + if (precision) { + // 截去多余位数 + tempArr[1] = tempArr[1].substr(0, precision) + // 小数位数处理(不够位数补0) + tempArr[1] = '.' + tempArr[1] + new Array(precision - tempArr[1].length + 1).join('0') + } + // 根据是否显示千分位格式化返回 + // return (thousands ? Number(tempArr[0]).toLocaleString() : tempArr[0]) + (precision ? tempArr[1] : '') + return (thousands ? Number(tempArr[0]).replace(/(\d)(?=(?:\d{3})+$)/g, '$1,') : tempArr[0]) + (precision ? tempArr[1] : '') + }, + /** + * 获取地址栏参数 + * 示例: + * let userid = _getParam('userid') + * @param {*} key + */ + _getParam: function (key) { + let reg = new RegExp('(^|&)' + key + '=([^&]*)(&|$)', 'i') + let r = window.location.search.substr(1).match(reg) + return r ? unescape(r[2]) : null + }, + /** + * 匹配函数,类似 oracle 中的 decode + * 说明:取第一个参数与后续偶数位置的参数进行比较,如匹配则返回当前比较的偶数位置下一个参数作为结果 + * 如未找到匹配项目,并且参数个数大于3而且为偶数,则取最后一个参数作为默认值返回 + * 注:参数为动态参数,参数个数最少为3,否则无意义 + * 偶数位置被比较的参数可以为数组 + * 比较使用 === 及 indexOf() 严格匹配值 + * 示例: + * 1. _caseValue('A', 'A', value1, 'B', value2) // 返回 value1 + * 2. _caseValue('A', 'B', value1, 'A', value2) // 返回 value2 + * 3. _caseValue('A', 'B', value1, 'C', value2, defaultValue) // 返回 defaultValue + * 4. _caseValue('A', 'B', value1, ['A','C'], value2, defaultValue) // 返回 value2 + * + * @param {*} args 动态参数 + */ + _caseValue: function (...args) { + if (!args || args.length < 3) { + return null + } + let caseKey = args[0] + for (let i = 1; i < args.length; i++) { + if ((i % 2) && i !== args.length - 1 && (args[i] === caseKey || (Array.isArray(args[i]) && args[i].indexOf(caseKey) !== -1))) { + return args[i + 1] === undefined ? null : args[i + 1] + } + } + return args.length > 3 && !(args.length % 2) ? args[args.length - 1] : null + }, + /** + * 构建树型数据 + * @param {*} params + */ + _buildTree: function (params) { + if (!params.treeArray) { + params.treeArray = [] + } + if (params.element === null) { + params.elementArray.forEach(function (item, index, array) { + if (item[params.parentKey] === params.rootParentValue) { + params.treeArray[params.treeArray.length] = item + } else { + $nt._buildTree({ + element: item, + elementArray: params.elementArray, + treeArray: params.treeArray, + elementKey: params.elementKey, + parentKey: params.parentKey, + childKey: params.childKey, + rootParentValue: params.rootParentValue + }) + } + }) + } else { + params.elementArray.forEach(function (item, index, array) { + if (params.element[params.parentKey] === item[params.elementKey]) { + item[params.childKey] = item[params.childKey] || [] + item[params.childKey][item[params.childKey].length] = params.element + // params.element.parentElement = item + } + }) + } + }, + /** + * 验证手机号码 + * @param {*} mobile + */ + _validateMobile: function (mobile) { + return /^[1][3,4,5,7,8][0-9]{9}$/.test(mobile) + }, + /** + * 数值型验证 + * @param {*} val + */ + _validateNumber: function (val) { + return /^\d+(\.\d+)?$/.test(val) + }, + /** + * 系统对象功能扩展 + */ + _extend: function () { + /** + * 字符串清除左右空格扩展 + * 示例: + * let str = ' this is string ' + * let trimStr = str._trim() + */ + String.prototype._trim = function () { + return this.replace(/(^\s*)|(\s*$)/g, '') + } + /** + * 字符串替换所有 + * 示例: + * let str = ' this is string ' + * let replaceStr = str.replaceAll('i','') + */ + String.prototype.replaceAll = function (s1, s2) { + return this.replace(new RegExp(s1, 'gm'), s2) + } + /** + * 字符串包含检查 + * @param {*} str + */ + String.prototype._contains = function (str) { + return this.indexOf(str) !== -1 + } + /** + * 字符串转byte数组 + */ + String.prototype._toByte = function () { + let bytes = [] + let len + let c + len = this.length + for (let i = 0; i < len; i++) { + c = this.charCodeAt(i) + if (c >= 0x010000 && c <= 0x10FFFF) { + bytes.push(((c >> 18) & 0x07) | 0xF0) + bytes.push(((c >> 12) & 0x3F) | 0x80) + bytes.push(((c >> 6) & 0x3F) | 0x80) + bytes.push((c & 0x3F) | 0x80) + } else if (c >= 0x000800 && c <= 0x00FFFF) { + bytes.push(((c >> 12) & 0x0F) | 0xE0) + bytes.push(((c >> 6) & 0x3F) | 0x80) + bytes.push((c & 0x3F) | 0x80) + } else if (c >= 0x000080 && c <= 0x0007FF) { + bytes.push(((c >> 6) & 0x1F) | 0xC0) + bytes.push((c & 0x3F) | 0x80) + } else { + bytes.push(c & 0xFF) + } + } + return bytes + } + /** + * byte数组转换字符串 + * @param {*} bytes + */ + String._fromByte = function (bytes) { + if (!Array.isArray(bytes)) return null + let str = '' + let _arr = bytes + for (let i = 0; i < _arr.length; i++) { + let one = _arr[i].toString(2) + let v = one.match(/^1+?(?=0)/) + if (v && one.length === 8) { + let bytesLength = v[0].length + let store = _arr[i].toString(2).slice(7 - bytesLength) + for (let st = 1; st < bytesLength; st++) { + store += _arr[st + i].toString(2).slice(2) + } + str += String.fromCharCode(parseInt(store, 2)) + i += bytesLength - 1 + } else { + str += String.fromCharCode(_arr[i]) + } + } + return str + } + /** + * Number对象扩展数值格式化 + * @param {*} params 参数对象 + * + * 参数对象说明: + * params.mode 舍入模式:0:Math.round 1:Math.ceil -1:Math.floor + * params.thousands 是否显示千分位 + * params.precision 保留小数位数 + * 示例: + * Number(12806.123)._format() 返回:12806 + * Number(12806.123)._format({mode: 0, thousands: true, precision: 2}) 返回:12,806.12 + * Number(12806.123)._format({mode: 1, precision: 2}) 返回:12806.13 + * Number(12806.126)._format({mode: -1, thousands: false, precision: 2}) 返回:12806.12 + */ + Number.prototype._format = function (params) { + return $nt._numberFormat(this, params) + } + /** + * 数值舍入处理(可指定小数位数和舍入模式) + * @param {*} precision 小数保留位数 + * @param {*} mode 舍入模式:0:Math.round 1:Math.ceil -1:Math.floor + */ + Number.prototype._toFixed = function (precision, mode) { + return $nt._toFixed(this, precision, mode) + } + /** + * 日期格式化 + * @param {*} fmt 日期格式 + */ + Date.prototype._format = function (fmt) { + if (fmt) { + fmt = fmt.replace('H', 'h').replace('H', 'h') + } + let o = { + 'M+': this.getMonth() + 1, // 月份 + 'd+': this.getDate(), // 日 + 'h+': this.getHours(), // 小时 + 'm+': this.getMinutes(), // 分 + 's+': this.getSeconds(), // 秒 + 'q+': Math.floor((this.getMonth() + 3) / 3), // 季度 + 'S': this.getMilliseconds() // 毫秒 + } + if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + '').substr(4 - RegExp.$1.length)) + for (let k in o) { + if (new RegExp('(' + k + ')').test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length))) + } + return fmt + } + /** + * 日期计算 + * @param {*} interval + * @param {*} number + */ + Date.prototype._add = function (interval, number) { + // let cloneDate = JSON.parse(JSON.stringify({date : this})) + // let d = new Date(cloneDate.date) + let d = new Date(this) + let k = { + 'y': 'FullYear', + 'q': 'Month', + 'm': 'Month', + 'w': 'Date', + 'd': 'Date', + 'h': 'Hours', + 'n': 'Minutes', + 's': 'Seconds', + 'ms': 'MilliSeconds' + } + let n = { + 'q': 3, + 'w': 7 + } + interval = (interval || '').toLowerCase() + d['set' + k[interval]](d['get' + k[interval]]() + ((n[interval] || 1) * number)) + return d + } + /** + * 日期差异 + * @param {*} interval + * @param {*} objDate2 + */ + Date.prototype._diff = function (interval, diffDate) { + let d = this + let i = {} + let t = d.getTime() + let t2 = diffDate.getTime() + i['y'] = diffDate.getFullYear() - d.getFullYear() + i['q'] = i['y'] * 4 + Math.floor(diffDate.getMonth() / 4) - Math.floor(d.getMonth() / 4) + i['m'] = i['y'] * 12 + diffDate.getMonth() - d.getMonth() + i['ms'] = diffDate.getTime() - d.getTime() + i['w'] = Math.floor((t2 + 345600000) / (604800000)) - Math.floor((t + 345600000) / (604800000)) + i['d'] = Math.floor(t2 / 86400000) - Math.floor(t / 86400000) + i['h'] = Math.floor(t2 / 3600000) - Math.floor(t / 3600000) + i['n'] = Math.floor(t2 / 60000) - Math.floor(t / 60000) + i['s'] = Math.floor(t2 / 1000) - Math.floor(t / 1000) + return i[interval] + } + /** + * 数组为空校验 + * @param {*} array + */ + Array._isEmpty = function (array) { + return !array || !array.length + } + /** + * 数组不为空校验 + * @param {*} array + */ + Array._isNotEmpty = function (array) { + return array && array.length + } + /** + * 数组对象扩展-为空校验 + */ + Array.prototype._isEmpty = function () { + return Array._isEmpty(this) + } + /** + * 数组对象扩展-不为空校验 + */ + Array.prototype._isNotEmpty = function () { + return Array._isNotEmpty(this) + } + /** + * 数组是否包含元素 + * @param {*} array + * @param {*} element + */ + Array._contains = function (array, element) { + return !array && array.indexOf(element) !== -1 + } + /** + * 数组对象扩展-是否包含元素 + * @param {*} element + */ + Array.prototype._contains = function (element) { + return this.indexOf(element) !== -1 + } + /** + * 数组对象扩展-添加元素(可指定位置) + * @param {*} item 元素 + * @param {*} index 添加位置(可选,为空时添加到数组末尾) + */ + Array.prototype._add = function (item, index) { + if ($nt._isNotNull(index)) { + this.splice(index, 0, item) + } else { + this.push(item) + } + } + /** + * 数组对象扩展-批量添加元素(可指定位置) + * @param {*} items 元素数组 + * @param {*} index 添加位置(可选,为空时添加到数组末尾) + */ + Array.prototype._addAll = function (items, index) { + this.splice($nt._ifNull(index, this.length), 0, ...items) + } + /** + * 数组对象扩展-添加元素到数据第一个位置 + * @param {*} item 元素 + */ + Array.prototype._addFirst = function (item) { + this._add(item, 0) + } + /** + * 数组对象扩展-获取数组第一个元素 + */ + Array.prototype._first = function () { + return this[0] + } + /** + * 数组对象扩展-获取数组最后一个元素 + */ + Array.prototype._last = function () { + return this[this.length - 1] + } + /** + * 数组对象扩展-汇总数组元素(数值型有效) + * @param {*} beginIndex 开始位置 + * @param {*} endIndex 结束位置 + */ + Array.prototype._sum = function (beginIndex, endIndex) { + let total = 0 + beginIndex = $nt._isNull(beginIndex) ? 0 : beginIndex + endIndex = $nt._isNull(endIndex) ? this.length : endIndex + for (let i = 0; i < this.length; i++) { + if (i >= beginIndex && i < endIndex) { + total += Number(this[i] || 0) + } + } + return total + } + /** + * 数组对象扩展-汇总数组元素对象指定属性(数值型有效) + * @param {*} attribute 属性 + * @param {*} beginIndex 开始位置 + * @param {*} endIndex 结束位置 + */ + Array.prototype._sumAttr = Array.prototype._sumObjectAttr = function (attribute, beginIndex, endIndex) { + let total = 0 + beginIndex = $nt._isNull(beginIndex) ? 0 : beginIndex + endIndex = $nt._isNull(endIndex) ? this.length : endIndex + for (let i = 0; i < this.length; i++) { + if (i >= beginIndex && i < endIndex) { + total += Number(this[i][attribute] || 0) + } + } + return total + } + /** + * 数组对象扩展-移除元素 + * @param {*} element + */ + // Array.prototype._remove = function (element) { + // this.splice(this.findIndex(item => item === element), 1) + // return this + // } + Object.defineProperty(Array.prototype, '_remove', { + value: function (element) { + return this.splice(this.findIndex(item => item === element), 1) + } + }) + /** + * 数组对象扩展-批量获取属性值 + * 示例: + * let jsonArray = [{a:1,b:1},{a:2,b:2},{a:3,b:3},{a:4,b:4},{a:5,b:5}] + * let valueArray = jsonArray._getObjectAttr('a') 或 _getObjectAttr('a') + * let valueArray = jsonArray._getObjectAttr('a', 1, 3) 或 _getObjectAttr('a', 1, 3) + * @param {*} attribute + * @param {*} beginIndex + * @param {*} endIndex + */ + Array.prototype._getAttr = Array.prototype._getObjectAttr = Array.prototype._getObjectAttribute = function (attribute, beginIndex, endIndex) { + let valArray = [] + beginIndex = $nt._isNull(beginIndex) ? 0 : beginIndex + endIndex = $nt._isNull(endIndex) ? this.length : endIndex + for (let i = 0; i < this.length; i++) { + if (i >= beginIndex && i < endIndex) { + let val = (typeof this[i][attribute] === 'object' && !(this[i][attribute] instanceof Date) ? $nt._copy(this[i][attribute]) : this[i][attribute]) || null + valArray.push(val) + } + } + return valArray + } + /** + * 数组对象扩展-批量设置属性值 + * 示例: + * let jsonArray = [{a:1,b:1},{a:2,b:2},{a:3,b:3},{a:4,b:4},{a:5,b:5}] + * jsonArray._setObjectAttr('c', '10') 或 _setObjectAttribute('c', '10') + * jsonArray._setObjectAttr('c', '10', 1, 3) 或 _setObjectAttribute('c', '10', 1, 3) + * @param {*} attribute 属性 + * @param {*} beginIndex 开始位置 + * @param {*} endIndex 结束位置 + */ + Array.prototype._setObjectAttr = Array.prototype._setObjectAttribute = function (attribute, value, beginIndex, endIndex) { + beginIndex = $nt._isNull(beginIndex) ? 0 : beginIndex + endIndex = $nt._isNull(endIndex) ? this.length : endIndex + for (let i = 0; i < this.length; i++) { + if (i >= beginIndex && i < endIndex && typeof this[i] === 'object' && !(this[i] instanceof Date)) { + this[i][attribute] = value + } + } + return this + } + /** + * 数组对象扩展-批量设置对象本身属性到指定属性 + * @param {*} sourceAttribute 源属性 + * @param {*} targetAttribute 目标属性 + * @param {*} beginIndex 开始位置 + * @param {*} endIndex 结束位置 + */ + Array.prototype._setObjectAttrToAttr = Array.prototype._setObjectAttributeToAttribute = function (sourceAttribute, targetAttribute, beginIndex, endIndex) { + beginIndex = $nt._isNull(beginIndex) ? 0 : beginIndex + endIndex = $nt._isNull(endIndex) ? this.length : endIndex + for (let i = 0; i < this.length; i++) { + if (i >= beginIndex && i < endIndex && typeof this[i] === 'object' && !(this[i] instanceof Date)) { + this[i][targetAttribute] = this[i][sourceAttribute] + } + } + return this + } + /** + * JSON.__proto__._serializeArray 目前与VUE.JS不兼容,使用 JSON._serializeArray 代替 + */ + JSON._serializeArray = function (json) { + let _arr = [] + let _toArray = function (json, jsonArray, prefix) { + for (let key in json) { + if (typeof json[key] === 'function') { + continue + } + let newKey = (prefix ? prefix + '.' : '') + key + if (typeof json[key] === 'object' && !(json[key] instanceof Array)) { + _toArray(json[key], jsonArray, newKey) + } else { + jsonArray[jsonArray.length] = { + name: newKey, + value: json[key] + } + } + } + } + _toArray(json, _arr) + return _arr + } + /** + * JSON.__proto__._propertyLength 目前与VUE.JS不兼容,使用 JSON._propertyLength 代替 + */ + JSON._propertyLength = function (json) { + let length = 0 + let keys = [] + for (let key in json) { + length++ + keys.push(key) + } + return length + } + /** + * 清空JSON对象 + * @param {*} json + */ + JSON._clear = function (json) { + for (let key in json) { + delete json[key] + } + } + /** + * 移除JSON对象指定属性 + * @param {*} json + * @param {*} key + */ + JSON._removeKey = function (json, key) { + delete json[key] + } + /** + * 传入JSON数据对象,构建新JSON对象(attrs指定动态属性集) + * @param {*} json + * @param {*} attrs + */ + JSON._new = function (json, ...attrs) { + let newJSON = {} + if (json && attrs && attrs.length) { + let tempJSON = $nt._copy(json) + for (let i = 0; i < attrs.length; i++) { + if (attrs[i]._contains('.')) { + let childAttrs = attrs[i].split('.') + let childJSON = newJSON[childAttrs[0]] = newJSON[childAttrs[0]] || {} + let tempChildJSON = tempJSON[childAttrs[0]] || {} + for (let ii = 1; ii < childAttrs.length; ii++) { + if (ii === childAttrs.length - 1) { + childJSON[childAttrs[ii]] = $nt._isNotNull(tempChildJSON) ? tempChildJSON[childAttrs[ii]] : null + } else { + childJSON = childJSON[childAttrs[ii]] = childJSON[childAttrs[ii]] || {} + tempChildJSON = $nt._isNotNull(tempChildJSON) ? tempChildJSON[childAttrs[ii]] : null + } + } + } else { + newJSON[attrs[i]] = tempJSON[attrs[i]] + } + } + } + return newJSON + } + /** + * Storage 对象扩展 + */ + if (window && window.Storage) { + /** + * 扩展 Storage 增加setJSON方法 + * @param {*} key + * @param {*} value + */ + window.Storage.prototype.setJSON = function (key, value) { + this.setItem(key, $nt._isNotNull(value) ? JSON.stringify(value) : value) + } + /** + * 扩展 Storage 增加getJSON方法 + * @param {Object} key + */ + window.Storage.prototype.getJSON = function (key) { + let value = this.getItem(key) + return $nt._isNotNull(value) ? JSON.parse(value) : null + } + } + } +} +/** + * 执行系统对象功能扩展 + */ +$nt._extend() + +if (typeof wx !== 'undefined' && !wx.miniProgram) { + // 小程序环境 + wx.nothing = wx.$n = $nt +} else { + window.nothing = window.$n = $nt + Object.assign(window, $nt) +} + +export default $nt diff --git a/util/request.js b/util/request.js new file mode 100644 index 0000000..d276b06 --- /dev/null +++ b/util/request.js @@ -0,0 +1,62 @@ +const Fly = require("flyio/dist/npm/wx") +import Env from './Env' +import $n from './nothing' +import store from '../store' +const request = new Fly +/** + * 请求拦截 + */ +request.interceptors.request.use((config, promise) => { + //超时设置 + if (config._timeout) config.timeout = 60000; + //从环境变量中取 BASE_URL + if (process.env.NODE_ENV === 'development') config.baseURL = Env.getDevBaseURL() + else config.baseURL = Env.getBaseURL() + // JSON格式化,未指定时,默认true + // + + config.parseJson = $n._isNotNull(config.parseJson) ? config.parseJson : true + // 如指定_token == true,则在headers中跟上相关token信息 + // config.headers["mallTenant"] = Env.getMallTenant() + //uni.setStorageSync + + + if (config._token) config.headers['token'] = uni.getStorageSync('token'); //uni.get('token', result.token) //store.getters.appUser.token; + //console.warn('####### API Request: ', config) + return config +}) + +/** + * 响应拦截 + */ +request.interceptors.response.use( + (response, promise) => { + let data = response.data || {status: false, errorMsg: '服务器未响应结果'} + //console.warn('####### API Response: ', data) + if (data.code == 401 || data.code == 403) { + uni.showModal({ + title: '', + content: '登录超时,请重新登录!', + showCancel: false, + success: (res) => { + uni.navigateTo({ url: '/pages/login/login' }) + } + }) + } else return promise.resolve(data) + }, + (error, promise) => { + //let errorMsg = $n._caseValue(error.code, 0, '网络连接异常', 1, '网络连接超时', 401, '请求服务未授权', error.message) + //console.error('####### API Response error: ', error) + if (error.status == 401) { + uni.showModal({ + title: '', + content: '登录超时,请重新登录!', + showCancel: false, + success: (res) => { + uni.navigateTo({ url: '/pages/login/login' }) + } + }) + } else return promise.reject(message) + } +) +export default request \ No newline at end of file diff --git a/util/updata.js b/util/updata.js new file mode 100644 index 0000000..6c6c5b5 --- /dev/null +++ b/util/updata.js @@ -0,0 +1,69 @@ +App({ + onLaunch: function(options) { + this.autoUpdate() + }, + autoUpdate: function() { + var self = this + // 获取小程序更新机制兼容 + if (wx.canIUse('getUpdateManager')) { + const updateManager = wx.getUpdateManager() + //1. 检查小程序是否有新版本发布 + updateManager.onCheckForUpdate(function(res) { + // 请求完新版本信息的回调 + if (res.hasUpdate) { + //检测到新版本,需要更新,给出提示 + wx.showModal({ + title: '更新提示', + content: '检测到新版本,是否下载新版本并重启小程序?', + success: function(res) { + if (res.confirm) { + //2. 用户确定下载更新小程序,小程序下载及更新静默进行 + self.downLoadAndUpdate(updateManager) + } else if (res.cancel) { + //用户点击取消按钮的处理,如果需要强制更新,则给出二次弹窗,如果不需要,则这里的代码都可以删掉了 + wx.showModal({ + title: '温馨提示~', + content: '本次版本更新涉及到新的功能添加,旧版本无法正常访问的哦~', + showCancel:false,//隐藏取消按钮 + confirmText:"确定更新",//只保留确定更新按钮 + success: function(res) { + if (res.confirm) { + //下载新版本,并重新应用 + self.downLoadAndUpdate(updateManager) + } + } + }) + } + } + }) + } + }) + } else { + // 如果希望用户在最新版本的客户端上体验您的小程序,可以这样子提示 + wx.showModal({ + title: '提示', + content: '当前微信版本过低,无法使用该功能,请升级到最新微信版本后重试。' + }) + } + }, + /** + * 下载小程序新版本并重启应用 + */ + downLoadAndUpdate: function (updateManager){ + var self=this + wx.showLoading(); + //静默下载更新小程序新版本 + updateManager.onUpdateReady(function () { + wx.hideLoading() + //新的版本已经下载好,调用 applyUpdate 应用新版本并重启 + updateManager.applyUpdate() + }) + updateManager.onUpdateFailed(function () { + // 新的版本下载失败 + wx.showModal({ + title: '已经有新版本了哟~', + content: '新版本已经上线啦~,请您删除当前小程序,重新搜索打开哟~', + }) + }) + } +}) \ No newline at end of file