Commit bff0d91a by 严立

首页,畅玩,营地完成

parent 9a71aea9
Showing with 2684 additions and 197 deletions
App({
onLaunch: function () {
// console.log('wx.env', wx.env)
},
onShow: function (options) {
......
{
"pages": [
"pages/home/home",
"pages/index/index",
"pages/play/play",
"pages/home-strategy/home-strategy",
"pages/index/index",
"pages/campsite/campsite",
"pages/mine/mine"
],
"usingComponents": {
"navigation": "../component/navigation/navigation",
"swiper-point": "../component/swiper-point/swiper-point",
"l-button": "../miniprogram_npm/lin-ui/button/index",
"l-card": "../miniprogram_npm/lin-ui/card/index",
"l-capsule-bar": "../miniprogram_npm/lin-ui/capsule-bar/index",
"l-icon": "../miniprogram_npm/lin-ui/icon/index",
"l-list": "../miniprogram_npm/lin-ui/list/index",
"l-button": "../miniprogram_npm/lin-ui/button/index",
"l-price": "../miniprogram_npm/lin-ui/price/index",
"l-tabs": "../miniprogram_npm/lin-ui/tabs/index",
"l-tabpanel": "../miniprogram_npm/lin-ui/tabpanel/index",
"l-water-flow": "../miniprogram_npm/lin-ui/water-flow/index"
},
"window": {
"navigationStyle": "custom",
"backgroundTextStyle": "light",
"navigationBarBackgroundColor": "#fff",
"navigationBarTitleText": "Weixin",
"navigationBarTextStyle": "black"
"backgroundTextStyle": "light"
},
"tabBar": {
"color": "#a0a7b2",
......
// pages/navBar/navBar.js
Component({
/**
* 组件的属性列表
*/
properties: {
background: {
type: String,
value: 'rgba(255, 255, 255, 0)'
},
color: {
type: String,
value: 'rgba(0, 0, 0, 1)'
},
titleText: {
type: String,
value: ''
},
titleImg: {
type: String,
value: ''
},
backIcon: {
type: String,
value: ''
},
homeIcon: {
type: String,
value: ''
},
fontSize: {
type: Number,
value: 16
},
iconHeight: {
type: Number,
value: 19
},
iconWidth: {
type:Number,
value: 58
}
},
observers: {
'background': function () {
this.setStyle()
},
},
lifetimes: {
attached: function(){
var that = this;
that.setNavSize();
that.setStyle();
},
},
data: {
},
methods: {
// 通过获取系统信息计算导航栏高度
setNavSize: function() {
var that = this
, sysinfo = wx.getSystemInfoSync()
, statusHeight = sysinfo.statusBarHeight
, isiOS = sysinfo.system.indexOf('iOS') > -1
, navHeight;
if (!isiOS) {
navHeight = 48;
} else {
navHeight = 44;
}
that.setData({
status: statusHeight,
navHeight: navHeight
})
},
setStyle: function() {
console.log('setStyle')
var that = this, containerStyle, textStyle, iconStyle;
containerStyle = [
'background:' + that.data.background
].join(';');
textStyle = [
'color:' + that.data.color,
'font-size:' + that.data.fontSize + 'px'
].join(';');
iconStyle = [
'width: ' + that.data.iconWidth + 'px',
'height: ' + that.data.iconHeight + 'px'
].join(';');
that.setData({
containerStyle: containerStyle,
textStyle: textStyle,
iconStyle: iconStyle
})
},
// 返回事件
back: function(){
wx.navigateBack({
delta: 1
})
this.triggerEvent('back', {back: 1})
},
home: function() {
this.triggerEvent('home', {});
}
}
})
{
"component": true,
"usingComponents": {}
}
\ No newline at end of file
<view class='nav' style='height: {{status + navHeight}}px'>
<view class='status' style='height: {{status}}px;{{containerStyle}}'></view>
<view class='navbar' style='height:{{navHeight}}px;{{containerStyle}}'>
<view class='back-icon' wx:if="{{backIcon}}" bindtap='back'>
<image src='{{backIcon}}'></image>
</view>
<view class='home-icon' wx:if="{{homeIcon}}" bindtap='home'>
<image src='{{homeIcon}}'></image>
</view>
<view class='nav-icon' wx:if="{{titleImg}}">
<image src='{{titleImg}}' style='{{iconStyle}}'></image>
</view>
<view class='nav-title' wx:if="{{titleText && !titleImg}}">
<text style='{{textStyle}}'>{{titleText}}</text>
</view>
</view>
</view>
\ No newline at end of file
.nav {
z-index: 2000;
/* position: fixed;
top: 0;
left: 0;
border: 1rpx red solid; */
}
.navbar{
position: relative
}
.back-icon, .home-icon{
width: 28px;
height: 100%;
position: absolute;
transform: translateY(-50%);
top: 50%;
display: flex;
}
.back-icon{
left: 16px;
}
.home-icon{
left: 44px
}
.back-icon image{
width: 28px;
height: 28px;
margin: auto;
}
.home-icon image{
width: 20px;
height: 20px;
margin: auto;
}
.nav-title, .nav-icon{
position: absolute;
transform: translate(-50%, -50%);
left: 50%;
top: 50%;
font-size: 0;
font-weight: bold;
}
\ No newline at end of file
Component({
/**
* 组件的属性列表
*/
properties: {
bannerActiveIndex: {
type: Number,
value: 0
}
},
data: {
lineStyle: [
'./image/style-00-00.png',
'./image/style-00-01.png',
'./image/style-00-02.png',
],
},
methods: {
}
})
{
"component": true,
"usingComponents": {}
}
\ No newline at end of file
<!--component/swiper-point/swiper-point.wxml-->
<view class="swiper-point">
<view class="swiper-point-group">
<block wx:for="{{lineStyle}}" wx:for-index="index" wx:for-item="item" wx:key="index">
<image src="{{item}}" mode="widthFix" class="{{index === bannerActiveIndex ? '' : 'inactive-line'}}"></image>
</block>
</view>
</view>
\ No newline at end of file
.swiper-point {
z-index: 1100;
position: absolute;
top: 0;
left: 0;
display: flex;
flex-direction: row;
justify-content: center;
width: 100%;
}
.swiper-point-group {
display: flex;
flex-direction: row;
align-items: center;
width: 200rpx;
height: 50rpx;
}
.inactive-line {
opacity: .5;
}
\ No newline at end of file
image/more.png

456 Bytes

......@@ -12,7 +12,6 @@ Page({
},
onLoad: function (options) {
console.log(this.data.detailImage)
this.downloadDetail(this.data.detailIndex)
},
......
let logicData = {
pageScrollLock: false,
pageScrollTimer: 0,
}
Page({
/**
* 页面的初始数据
*/
data: {
navigationBackground: 'rgba(0, 0, 0, 0)',
banner: [
'../../image/banner-0.png',
'../../image/banner-1.png',
'../../image/banner-2.png'
],
bannerIndex: 0,
detailImage: [],
detailImageUrl: [
'https://image-1256588539.cos.ap-shanghai.myqcloud.com/miniapp/home-strategy.png',
],
detailIndex: 0,
relation: [
{
'cover': '/image/strategy-0.png',
'title': '元养水韵SPA馆',
'time': '营业时间 12:00-14:00',
'price': '¥10-¥5000/人',
'describe': '',
}, {
'cover': '/image/strategy-1.png',
'title': '原味舒食生态餐厅原味舒',
'time': '营业时间 10:00-17:00',
'price': '¥20-¥50/人',
'describe': '',
},
]
},
onLoad: function (options) {
this.downloadDetail(this.data.detailIndex)
},
onSwiperChange: function (funcEvent) {
this.setData({
bannerIndex: funcEvent.detail.current
})
},
downloadDetail: function (funcIndex) {
wx.downloadFile({
url: this.data.detailImageUrl[funcIndex],
success: (response) => {
let funcDetailImage = this.data.detailImage
funcDetailImage.push(response.tempFilePath)
this.setData({
detailImage: funcDetailImage,
detailIndex: this.data.detailIndex + 1
})
if (this.data.detailImageUrl[this.data.detailIndex]) {
this.downloadDetail(this.data.detailIndex)
}
},
fail: (response) => {
console.log(response)
}
})
},
onPageScroll: function(funcEvent) {
// 优化滚动事件触发频率
if (logicData.pageScrollLock) return
logicData.pageScrollLock = true
if (funcEvent.scrollTop > 40 && this.data.navigationBackground !== 'rgba(255, 255, 255, 1)') {
this.setData({
navigationBackground: 'rgba(255, 255, 255, 1)'
})
}
if (funcEvent.scrollTop <= 40) {
this.setData({
navigationBackground: 'rgba(0, 0, 0, 0)'
})
}
// 恢复滚动事件
logicData.pageScrollTimer = setTimeout(function () {
logicData.pageScrollLock = false
clearTimeout(logicData.pageScrollTimer)
}, 40)
},
})
\ No newline at end of file
{
"usingComponents": {}
}
\ No newline at end of file
<navigation class="navigation" titleText="攻略详情" background="{{navigationBackground}}" backIcon="/image/back.png"></navigation>
<view class="container">
<view id="banner" class="banner">
<swiper
class="banner-swiper"
autoplay
circular
interval="2000"
duration="500"
indicator-color="rgba(0, 0, 0, 0)"
indicator-active-color="rgba(0, 0, 0, 0)"
bindchange="onSwiperChange"
>
<block wx:for="{{banner}}" wx:for-index="index" wx:for-item="item" wx:key="index">
<swiper-item class="banner-swiper-item">
<image class="banner-swiper-image" src="{{item}}"></image>
</swiper-item>
</block>
</swiper>
<view class="banner-swiper-point">
<swiper-point bannerActiveIndex="{{bannerIndex}}"></swiper-point>
</view>
</view>
<view class="detail">
<image mode="widthFix" src="/image/home-strategy.png"></image>
<view class="relation">
<view class="relation-title">
<text>文中提及</text>
</view>
<block wx:for="{{relation}}" wx:for-index="index" wx:for-item="item" wx:key="index">
<view class="relation-item row con-b">
<image mode="widthFix" src="{{item.cover}}"></image>
<view class="relation-item-info col">
<text>{{item.title}}</text>
<text>{{item.time}}</text>
<text>{{item.price}}</text>
</view>
<view class="relation-item-more row align-c">
<image src="/image/more.png"></image>
</view>
</view>
</block>
</view>
</view>
</view>
.navigation {
z-index: 1900;
position: fixed;
top: 0;
left: 0;
width: 750rpx;
}
.banner {
position: relative;
width: 750rpx;
height: 870rpx;
background: #ffffff;
}
.banner-swiper,
.banner-swiper-item,
.banner-swiper-image {
position: absolute;
top: 0 !important;
left: 0 !important;
width: 750rpx;
height: 870rpx;
}
.banner-swiper-point {
position: relative;
top: 760rpx;
left: 0;
}
.detail {
width: 750rpx;
}
.detail > image {
min-width: 100%;
}
/* 攻略相关 */
.relation-title {
margin: 0 40rpx 90rpx 40rpx;
}
.relation-title text {
width: 120rpx;
height: 42rpx;
margin-top: 40rpx;
font-size: 30rpx;
font-weight: bold;
color:rgba(21,25,31,1);
}
.relation-item {
position: relative;
width: 670rpx;
height: 238rpx;
margin: 0 40rpx 104rpx 40rpx;
background:rgba(245, 246, 248, 1);
border-radius: 4rpx;
}
.relation-item > image {
position: absolute;
top: -24rpx;
left: 24rpx;
width: 176rpx;
height: 214rpx;
}
.relation-item {
padding: 32rpx 32rpx 48rpx 230rpx;
}
.relation-item-info text:nth-child(1) {
font-size: 30rpx;
font-weight: bold;
color:rgba(21, 25, 31, 1);
}
.relation-item-info text:nth-child(2) {
margin-top: 38rpx;
font-size: 26rpx;
color: #656E7B;
}
.relation-item-info text:nth-child(3) {
margin-top: 20rpx;
font-size: 26rpx;
color: #656E7B;
}
.relation-item-more {
height: 100%;
}
.relation-item-more image {
width: 32rpx;
height: 32rpx;
}
\ No newline at end of file
<!-- demo.wxml -->
<view class="component-strategy-item">
<image src="{{data.image}}" mode="aspectFit"></image>
<image src="{{data.image}}" mode="widthFix"></image>
<text class="component-strategy-item-title">{{data.title}}</text>
<text class="component-strategy-item-content">{{data.date}}</text>
</view>
\ No newline at end of file
......@@ -9,9 +9,6 @@
.component-strategy-item image {
width: 100%;
margin: -20rpx 0;
line-height: 1;
font-size: 0;
}
.component-strategy-item-title {
......
import iLinuiUtil from "../../miniprogram_npm/lin-ui/utils/device-util"
let logicData = {
pageScrollLock: false,
pageScrollTimer: 0,
}
Page({
data: {
navigationStyle: 'position: absolute; top: -navigationHeightrpx; left: 0;',
navigationAnimationShow: 0,
navigationHeight: 120,
banner: [
'../../image/banner-0.png',
'../../image/banner-1.png',
'../../image/banner-2.png'
],
bannerIndex: 0,
bannerHeight: 300,
strategyList: [{
image: '/pages/home/image/strategy-00.png',
title: '碧海银湖40万方海岛精灵乐园,秘境度假中心。',
......@@ -30,26 +46,65 @@ Page({
title: '懂生活的你,必定喜欢懂品质的碧海银湖。',
date: '2020-07-10'
}],
indicatorDots: true,
vertical: false,
autoplay: true,
interval: 2000,
duration: 500
isNavigationLogoWhite: true,
},
onLoad: function (options) {
wx.lin.renderWaterFlow(this.data.strategyList, false, () => {
console.log('渲染成功')
})
// 游客攻略瀑布列表
wx.lin.renderWaterFlow(this.data.strategyList, false, () => {})
// wx.hideTabBar()
// wx.showTabBar()
},
onShow: function () {
const query = wx.createSelectorQuery()
query.select('#banner').boundingClientRect()
query.selectViewport().scrollOffset()
query.exec((res) => {
this.setData({
bannerHeight: res[0].height * 0.9
})
})
},
onHide: function () {
onStrategyDetail: function (funcItem) {
console.log(funcItem)
wx.navigateTo({
url: '/pages/home-strategy/home-strategy'
})
},
onPageScroll: function(funcEvent) {
// 优化滚动事件触发频率
if (logicData.pageScrollLock) return
logicData.pageScrollLock = true
if (funcEvent.scrollTop >= this.data.bannerHeight) {
if (this.data.isNavigationLogoWhite) {
this.setData({
isNavigationLogoWhite: false
})
}
let funcOpacity = (funcEvent.scrollTop - this.data.bannerHeight) / 10
this.setData({
navigationAnimationShow: funcOpacity
})
}
if (funcEvent.scrollTop < this.data.bannerHeight && !this.data.isNavigationLogoWhite) {
this.setData({
isNavigationLogoWhite: true
})
}
// 恢复滚动事件
logicData.pageScrollTimer = setTimeout(function () {
logicData.pageScrollLock = false
clearTimeout(logicData.pageScrollTimer)
}, 40)
},
onUnload: function () {
onSwiperChange: function (funcEvent) {
this.setData({
bannerIndex: funcEvent.detail.current
})
},
})
\ No newline at end of file
<!--home.wxml-->
<navigation class="navigation" background="{{'rgba(255, 255, 255, 1)'}}"></navigation>
<view class="container">
<view class="banner">
<swiper class="banner-swiper" indicator-dots="{{indicatorDots}}" autoplay="{{autoplay}}" interval="{{interval}}" duration="{{duration}}">
<image class="navigation-bar-image" src="/image/logo-w.png" hidden="{{!isNavigationLogoWhite}}"></image>
<image class="navigation-bar-image" src="/image/logo-b.png" hidden="{{isNavigationLogoWhite}}"></image>
<view id="banner" class="banner">
<swiper autoplay circular class="banner-swiper" style="{{navigationStyle}}" indicator-dots="{{true}}" interval="2000" duration="500" bindchange="onSwiperChange">
<block wx:for="{{banner}}" wx:for-index="index" wx:for-item="item" wx:key="index">
<swiper-item>
<image class="banner-content" src="{{item}}"></image>
<swiper-item class="banner-swiper-item">
<image class="banner-swiper-image" src="{{item}}"></image>
</swiper-item>
</block>
</swiper>
<view class="notice">
<l-list title="温泉公寓现已接受预定" image="/pages/home/image/inform.png"></l-list>
<view class="banner-swiper-point">
<swiper-point bannerActiveIndex="{{bannerIndex}}"></swiper-point>
</view>
<view class="banner-wave">
<image src="/image/ornament-0.png" mode="widthFix"></image>
</view>
<view class="banner-notice">
<l-list l-class="banner-notice-item" title="温泉公寓现已接受预定" image="/pages/home/image/inform.png"></l-list>
</view>
</view>
<view class="module">
<view class="detail">
<!-- 预约公告 -->
<view class="night row con-b">
<view>
......@@ -30,7 +44,7 @@
</view>
<!-- 智慧导览 -->
<view class="guide module-item">
<view class="guide detail-item">
<image src="./image/title-guide.png"></image>
<view class="guide-content">
<image class="background-image" src="./image/guide.png" mode="aspectFit"></image>
......@@ -42,7 +56,7 @@
</view>
<!-- 预约看房 -->
<view class="appointment module-item">
<view class="appointment detail-item">
<image src="./image/title-appointment.png"></image>
<view class="appointment-content">
<image class="background-image" src="./image/appointment.png" mode="aspectFit"></image>
......@@ -55,7 +69,7 @@
</view>
<!-- 游客攻略 -->
<view class="strategy module-item">
<view class="strategy detail-item">
<image src="./image/title-strategy.png"></image>
<view class="strategy-content">
<image class="background-image" src="./image/strategy.png" mode="aspectFit"></image>
......@@ -65,7 +79,7 @@
</view>
</view>
<view>
<l-water-flow column-gap="14rpx" generic:l-water-flow-item="strategy-item"></l-water-flow>
<l-water-flow column-gap="14rpx" generic:l-water-flow-item="strategy-item" bind:linitemtap="onStrategyDetail"></l-water-flow>
</view>
</view>
</view>
.navigation {
z-index: 5;
position: fixed;
top: 0;
left: 0;
width: 750rpx;
}
.navigation-bar-image {
z-index: 1100;
position: fixed;
top: 0;
left: 0;
width: 200rpx;
height: 60rpx;
margin: 60rpx 0 0 50rpx;
}
.banner {
z-index: 9;
position: relative;
width: 100%;
width: 750rpx;
height: 870rpx;
background: #ffffff;
}
.banner-swiper,
.banner-content {
.banner-swiper-item,
.banner-swiper-image {
position: absolute;
top: 0 !important;
left: 0 !important;
width: 750rpx;
height: 870rpx;
}
.banner-swiper-point {
position: relative;
top: 620rpx;
left: 0;
}
.banner-wave {
z-index: 1100;
position: relative;
top: 712rpx;
left: 0;
width: 100%;
height: 100%;
height: 160rpx;
}
.module {
padding: 0 40rpx;
.banner-wave image {
width: 100%;
height: 150rpx;
}
.notice {
position: absolute;
.banner-notice {
z-index: 1100;
position: relative;
top: 620rpx;
left: 40rpx;
bottom: 38rpx;
width: 670rpx;
height: 92rpx;
padding: 4rpx 32rpx;
......@@ -26,11 +68,30 @@
border-radius: 4rpx;
}
.banner-notice-item {
border: none !important;
}
.detail {
margin-top: 40rpx;
padding: 0 40rpx;
background: linear-gradient(#ffffff, #F2F2F2);
}
.detail-item {
margin-top: 58rpx;
}
.detail-item > image {
width: 184rpx;
height: 46rpx;
}
.night {
width: 670rpx;
height: 150rpx;
padding: 28rpx 32rpx;
background: rgba(255, 255, 255, 1);
background: #ffffff;
box-shadow: 0 16rpx 48rpx 0 rgba(0, 0, 0, .07);
border-radius: 4rpx;
}
......@@ -66,23 +127,14 @@
margin: 0 8rpx 4rpx 0;
}
.module-item {
margin-top: 58rpx;
}
.module-item > image {
width: 184rpx;
height: 46rpx;
}
/* 智慧导览 */
.guide-content {
z-index: 3;
position: relative;
width: 670rpx;
height: 240rpx;
margin-top: 32rpx;
border-radius: 4rpx;
background: linear-gradient(90deg,rgba(94, 178, 206, 1) 0%, rgba(185, 222, 234, .57) 100%);
}
.guide-content .operation {
......@@ -98,6 +150,7 @@
}
.guide-content .operation button {
z-index: -1;
width: 220rpx;
height: 68rpx;
margin-top: 36rpx;
......@@ -109,6 +162,7 @@
/* 预约看房 */
.appointment-content {
z-index: 3;
position: relative;
width: 670rpx;
height: 402rpx;
......@@ -137,6 +191,7 @@
}
.appointment-content .operation button {
z-index: -1;
width: 220rpx;
height: 68rpx;
margin-top: 26rpx;
......@@ -148,6 +203,7 @@
/* 游客攻略 */
.strategy-content {
z-index: 3;
position: relative;
width: 670rpx;
height: 320rpx;
......

72.6 KB | W: | H:

53.6 KB | W: | H:

pages/home/image/strategy-00.png
pages/home/image/strategy-00.png
pages/home/image/strategy-00.png
pages/home/image/strategy-00.png
  • 2-up
  • Swipe
  • Onion skin

79.1 KB | W: | H:

80.7 KB | W: | H:

pages/home/image/strategy-04.png
pages/home/image/strategy-04.png
pages/home/image/strategy-04.png
pages/home/image/strategy-04.png
  • 2-up
  • Swipe
  • Onion skin

60.9 KB | W: | H:

78 KB | W: | H:

pages/home/image/strategy-05.png
pages/home/image/strategy-05.png
pages/home/image/strategy-05.png
pages/home/image/strategy-05.png
  • 2-up
  • Swipe
  • Onion skin
import iLinuiUtil from "../../miniprogram_npm/lin-ui/utils/device-util"
Page({
data: {
banner: [
'../../image/banner-0.png',
'../../image/banner-1.png',
'../../image/banner-2.png'
],
indicatorDots: true,
vertical: false,
autoplay: true,
interval: 2000,
duration: 500
capsuleBarHeight: iLinuiUtil.getNavigationBarHeight(),
},
onLoad: function (options) {
......
{
"navigationStyle": "custom",
"usingComponents": {}
}
\ No newline at end of file
<!--index.wxml-->
<view class="container">
<view class="banner">
<swiper class="banner-swiper" indicator-dots="{{indicatorDots}}" autoplay="{{autoplay}}" interval="{{interval}}" duration="{{duration}}">
<block wx:for="{{banner}}" wx:for-index="index" wx:for-item="item" wx:key="index">
<swiper-item>
<image class="banner-content" src="{{item}}"></image>
</swiper-item>
</block>
</swiper>
<view class="notice">
<l-list desc="温泉公寓现已接受预定" image="/pages/index/image/inform.png"></l-list>
</view>
</view>
</view>
<navigation></navigation>
\ No newline at end of file
.banner {
position: relative;
width: 100%;
height: 870rpx;
}
.container{
width:100%;
}
.banner-swiper,
.banner-content {
width: 100%;
height: 100%;
}
.navigation-bar-image{
width:100%;
position:fixed;
top:0;
left:0;
}
\ No newline at end of file
.notice {
position: absolute;
left: 40rpx;
bottom: 38rpx;
width: 670rpx;
height: 92rpx;
padding: 4rpx 32rpx;
background:rgba(255, 255, 255, 1);
box-shadow: 0 16rpx 48rpx 0 rgba(0, 0, 0, .05);
border-radius: 4rpx;
}
\ No newline at end of file
// pages/mine/mine.js
import iRequest from '../../utils/request/corvus.js'
Page({
/**
......@@ -14,53 +15,34 @@ Page({
onLoad: function (options) {
},
getUserInfo: function (funcEvent) {
console.log(funcEvent)
// 用户拒绝授权
if (funcEvent.detail.errMsg === 'getUserInfo:fail auth deny') {
return
}
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function () {
},
/**
* 生命周期函数--监听页面显示
*/
onShow: function () {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide: function () {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload: function () {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function () {
},
// 用户授权获取用户信息
if (funcEvent.detail.errMsg === 'getUserInfo:ok') {
wx.login({
success: function (result) {
let param = {
'code': result.code,
}
iRequest.request({ url: 'v1/login/getSmallSession', params: param, method: 'get' })
.then(function (response) {
console.log(response)
})
.catch(function (response) {
console.log(response)
})
},
fail: function (response) {
console.log(response)
}
})
}
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function () {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage: function () {
}
})
\ No newline at end of file
<!--pages/mine/mine.wxml-->
<text>pages/mine/mine.wxml</text>
<!-- <l-button bind:getuserinfo="getUserInfo" open-type="getUserInfo"></l-button> -->
<text>mine</text>
\ No newline at end of file
// pages/amusement/amusement.js
import deviceUtil from "../../miniprogram_npm/lin-ui/utils/device-util.js"
let logicData = {
pageScrollLock: false,
pageScrollTimer: 0,
}
Page({
/**
* 页面的初始数据
*/
data: {
navigationBackground: 'rgba(0, 0, 0, 0)',
banner: [
'../../image/banner-0.png',
'../../image/banner-1.png',
'../../image/banner-2.png'
],
interval: 2000,
duration: 1000,
circular: true,
currentIndex: 0,
capsuleBarHeight: deviceUtil.getNavigationBarHeight(),
tab: [
{
'text': '文艺',
'defaultImage': '/pages/play/image/literatue.png',
'activeImage': '/pages/play/image/literatue-s.png',
}, {
'text': '健康',
'defaultImage': '/pages/play/image/healthy.png',
'activeImage': '/pages/play/image/healthy-s.png',
}, {
'text': '休闲',
'defaultImage': '/pages/play/image/food.png',
'activeImage': '/pages/play/image/food-s.png',
}, {
'text': '美食',
'defaultImage': '/pages/play/image/relaxation.png',
'activeImage': '/pages/play/image/relaxation-s.png',
}, {
'text': '住宿',
'defaultImage': '/pages/play/image/hotel.png',
'activeImage': '/pages/play/image/hotel-s.png',
}
],
tabIndex: 0,
detailImage: [],
detailImageUrl: [
'https://image-1256588539.cos.ap-shanghai.myqcloud.com/miniapp/play-healthy.png',
],
detailIndex: 0,
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
this.downloadDetail(this.data.detailIndex)
},
/**
......@@ -35,32 +84,64 @@ Page({
onHide: function () {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload: function () {
},
handleChange: function (e) {
this.setData({
currentIndex: e.detail.current
})
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function () {
downloadDetail: function (funcIndex) {
wx.downloadFile({
url: this.data.detailImageUrl[funcIndex],
success: (response) => {
let funcDetailImage = this.data.detailImage
funcDetailImage.push(response.tempFilePath)
this.setData({
detailImage: funcDetailImage,
detailIndex: this.data.detailIndex + 1
})
if (this.data.detailImageUrl[this.data.detailIndex]) {
this.downloadDetail(this.data.detailIndex)
}
},
fail: (response) => {
console.log(response)
}
})
},
onTabSelection: function (funcEvent) {
this.setData({
tabIndex: funcEvent.currentTarget.dataset.index
})
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function () {
onPageScroll: function(funcEvent) {
// 优化滚动事件触发频率
if (logicData.pageScrollLock) return
logicData.pageScrollLock = true
},
/**
* 用户点击右上角分享
*/
onShareAppMessage: function () {
if (funcEvent.scrollTop > 40 && this.data.navigationBackground !== 'rgba(255, 255, 255, 1)') {
this.setData({
navigationBackground: 'rgba(255, 255, 255, 1)'
})
}
if (funcEvent.scrollTop <= 40) {
this.setData({
navigationBackground: 'rgba(0, 0, 0, 0)'
})
}
// 恢复滚动事件
logicData.pageScrollTimer = setTimeout(function () {
logicData.pageScrollLock = false
clearTimeout(logicData.pageScrollTimer)
}, 40)
},
})
\ No newline at end of file
<!--pages/amusement/amusement.wxml-->
<text>pages/amusement/amusement.wxml</text>
<navigation class="navigation" background="{{navigationBackground}}"></navigation>
<view class="container">
<!-- CapsuleBar 背景图片 -->
<image class="navigation-bar-image" src="./image/title.png"></image>
<!-- 以下部分放置页面内容 -->
<view class="banner">
<swiper autoplay circular interval="{{interval}}" next-margin="64rpx" bindchange="handleChange">
<block wx:for="{{banner}}" wx:for-index="index" wx:for-item="item" wx:key="index">
<swiper-item>
<image src="{{item}}" class="{{currentIndex !== index ? 'banner-content': 'banner-content-active'}}"/>
</swiper-item>
</block>
</swiper>
</view>
<!-- 更多活动 -->
<view class="activity row con-e align-c">
<text>查看全部活动</text>
<image src="/image/more.png"></image>
</view>
<view class="ornament-wave">
<image src="/image/ornament-1.png"></image>
</view>
<!-- 板块标签 -->
<view class="tab row con-b align-c">
<block wx:for="{{tab}}" wx:for-index="index" wx:for-item="item" wx:key="index">
<view class="tab-item col con-c" data-index="{{index}}" bindtap="onTabSelection">
<view class="row con-c align-c {{tabIndex === index ? 'tab-item-active' : 'tab-item-inactive'}}">
<image src="{{tabIndex === index ? item.activeImage : item.defaultImage}}"></image>
</view>
<view class="row con-c align-c {{tabIndex === index ? 'tab-item-text-active' : 'tab-item-text-inactive'}}">
<text>{{item.text}}</text>
</view>
</view>
</block>
</view>
<view class="detail">
<block wx:for="{{detailImageUrl}}" wx:for-index="index" wx:for-item="item" wx:key="index">
<image mode="widthFix" src="{{item}}"></image>
</block>
<view class="detail-info col">
<view class="detail-info-title">
<text>元养水韵SPA馆</text>
</view>
<view class="detail-info-describe">
<text>舒缓压力,缓解紧张情绪,沉静心灵,带走负面情绪。在沉静的空气中,身心灵三者合一</text>
</view>
<view class="detail-info-tip col">
<view class="row align-c">
<text class="tip-title">时间</text>
<text class="tip-describe">10:00~18:00</text>
</view>
<view class="row align-c">
<text class="tip-title">票价</text>
<text class="tip-describe">¥20~¥50/人</text>
</view>
</view>
<view class="detail-operation">
<l-button width="534" height="96" size="large">立即预定</l-button>
</view>
</view>
</view>
</view>
\ No newline at end of file
/* pages/amusement/amusement.wxss */
\ No newline at end of file
page {
background: #f5f6f8;
}
.navigation {
z-index: 1900;
}
.navigation-bar-image {
z-index: 1900;
position: fixed;
top: 60rpx;
left: 50rpx;
width: 130rpx;
height: 96rpx;
}
.banner,
swiper {
position: relative;
width: 100%;
min-height: 480rpx;
margin-top: 100rpx;
}
swiper-item {
position: relative;
left: 56rpx;
width: 638rpx !important;
height: 480rpx !important;
}
.banner-content {
width: 638rpx;
height: 408rpx;
margin-top: 36rpx;
padding: 0 24rpx;
border-radius:4px;
}
.banner-content-active {
width: 638rpx;
height: 480rpx;
border-radius:4px;
transition: all 0.2s ease-in 0s;
}
/* 更多活动 */
.activity {
width: 100%;
height: 34rpx;
margin-top: 32rpx;
padding: 0 56rpx;
font-size: 26rpx;
font-weight: bolder;
color: #1E2025;
}
.activity image {
width: 32rpx;
height: 32rpx;
}
/* 装饰波浪 */
.ornament-wave {
width: 750rpx;
height: 60rpx;
margin-top: 20rpx;
}
.ornament-wave image {
width: 750rpx;
height: 60rpx;
}
/* 标签选择 */
.tab {
width: 100%;
padding: 40rpx 40rpx 0 40rpx;
background: #ffffff;
}
.tab .tab-item-active {
width: 100rpx;
height: 100rpx;
margin-bottom: 16rpx;
border-radius: 50%;
background: #E3EEFF;
}
.tab .tab-item-inactive {
width: 100rpx;
height: 100rpx;
margin-bottom: 16rpx;
border-radius: 50%;
background: #f5f6f8;
}
.tab .tab-item-text-active {
color: #15191F;
}
.tab .tab-item-text-inactive {
color: #959DA9;
}
.tab-item text {
font-size: 24rpx;
text-align: center;
}
.tab-item image {
width: 52rpx;
height: 52rpx;
}
/* 标签详情 */
.detail {
width: 750rpx;
padding-bottom: 90rpx;
background: #ebeff7;
}
.detail image {
width: 100%;
height: 100%;
margin-bottom: -10rpx;
}
.detail-info {
width: 654rpx;
height: 562rpx;
margin: 0 48rpx;
padding: 0 60rpx 60rpx 60rpx;
border-radius: 0 0 4rpx 4rpx;
background: #ffffff;
}
.detail-info-title {
font-size: 38rpx;
font-weight: bolder;
}
.detail-info-describe {
margin-top: 40rpx;
font-size: 26rpx;
}
.detail-info-tip {
margin-top: 80rpx;
font-size: 26rpx;
}
.detail-info-tip > view {
margin-top: 16rpx;
}
.tip-title {
margin-right: 48rpx;
font-size: 26rpx;
color: #959DA9;
}
.tip-describe {
font-size: 26rpx;
color: #15191F;
}
.detail-operation {
margin-top: 64rpx;
}
\ No newline at end of file
......@@ -8,6 +8,7 @@
"es6": true,
"enhance": true,
"postcss": true,
"preloadBackgroundData": false,
"minified": true,
"newFeature": true,
"coverView": true,
......@@ -15,14 +16,19 @@
"autoAudits": false,
"showShadowRootInWxmlPanel": true,
"scopeDataCheck": false,
"uglifyFileName": false,
"checkInvalidKey": true,
"checkSiteMap": true,
"uploadWithSourceMap": true,
"compileHotReLoad": false,
"babelSetting": {
"ignore": [],
"disablePlugins": [],
"outputPath": ""
}
},
"useIsolateContext": true,
"useCompilerModule": false,
"userConfirmedUseCompilerModuleSwitch": false
},
"compileType": "miniprogram",
"libVersion": "2.10.0",
......
let Output = [
{
name: '北京市', cityList: [
{ name: '北京市', areaList: ['东城区', '西城区', '朝阳区', '丰台区', '石景山区', '海淀区', '门头沟区', '房山区', '通州区', '顺义区', '昌平区', '大兴区', '怀柔区', '平谷区', '密云区', '延庆区'] }
]
},
{
name: '天津市', cityList: [
{ name: '天津市', areaList: ['和平区', '河东区', '河西区', '南开区', '河北区', '红桥区', '东丽区', '西青区', '津南区', '北辰区', '武清区', '宝坻区', '滨海新区', '宁河区', '静海区', '蓟州区'] }
]
},
{
name: '河北省', cityList: [
{ name: '石家庄市', areaList: ['长安区', '桥西区', '新华区', '井陉矿区', '裕华区', '藁城区', '鹿泉区', '栾城区', '井陉县', '正定县', '行唐县', '灵寿县', '高邑县', '深泽县', '赞皇县', '无极县', '平山县', '元氏县', '赵县', '辛集市', '晋州市', '新乐市'] },
{ name: '唐山市', areaList: ['路南区', '路北区', '古冶区', '开平区', '丰南区', '丰润区', '曹妃甸区', '滦县', '滦南县', '乐亭县', '迁西县', '玉田县', '遵化市', '迁安市'] },
{ name: '秦皇岛市', areaList: ['海港区', '山海关区', '北戴河区', '抚宁区', '青龙满族自治县', '昌黎县', '卢龙县'] },
{ name: '邯郸市', areaList: ['邯山区', '丛台区', '复兴区', '峰峰矿区', '肥乡区', '永年区', '临漳县', '成安县', '大名县', '涉县', '磁县', '邱县', '鸡泽县', '广平县', '馆陶县', '魏县', '曲周县', '武安市'] },
{ name: '邢台市', areaList: ['桥东区', '桥西区', '邢台县', '临城县', '内丘县', '柏乡县', '隆尧县', '任县', '南和县', '宁晋县', '巨鹿县', '新河县', '广宗县', '平乡县', '威县', '清河县', '临西县', '南宫市', '沙河市'] },
{ name: '保定市', areaList: ['竞秀区', '莲池区', '满城区', '清苑区', '徐水区', '涞水县', '阜平县', '定兴县', '唐县', '高阳县', '容城县', '涞源县', '望都县', '安新县', '易县', '曲阳县', '蠡县', '顺平县', '博野县', '雄县', '涿州市', '定州市', '安国市', '高碑店市'] },
{ name: '张家口市', areaList: ['桥东区', '桥西区', '宣化区', '下花园区', '万全区', '崇礼区', '张北县', '康保县', '沽源县', '尚义县', '蔚县', '阳原县', '怀安县', '怀来县', '涿鹿县', '赤城县'] },
{ name: '承德市', areaList: ['双桥区', '双滦区', '鹰手营子矿区', '承德县', '兴隆县', '滦平县', '隆化县', '丰宁满族自治县', '宽城满族自治县', '围场满族蒙古族自治县', '平泉市'] },
{ name: '沧州市', areaList: ['新华区', '运河区', '沧县', '青县', '东光县', '海兴县', '盐山县', '肃宁县', '南皮县', '吴桥县', '献县', '孟村回族自治县', '泊头市', '任丘市', '黄骅市', '河间市'] },
{ name: '廊坊市', areaList: ['安次区', '广阳区', '固安县', '永清县', '香河县', '大城县', '文安县', '大厂回族自治县', '霸州市', '三河市'] },
{ name: '衡水市', areaList: ['桃城区', '冀州区', '枣强县', '武邑县', '武强县', '饶阳县', '安平县', '故城县', '景县', '阜城县', '深州市'] }
]
},
{
name: '山西省', cityList: [
{ name: '太原市', areaList: ['小店区', '迎泽区', '杏花岭区', '尖草坪区', '万柏林区', '晋源区', '清徐县', '阳曲县', '娄烦县', '古交市'] },
{ name: '大同市', areaList: ['城区', '矿区', '南郊区', '新荣区', '阳高县', '天镇县', '广灵县', '灵丘县', '浑源县', '左云县', '大同县'] },
{ name: '阳泉市', areaList: ['城区', '矿区', '郊区', '平定县', '盂县'] },
{ name: '长治市', areaList: ['城区', '郊区', '长治县', '襄垣县', '屯留县', '平顺县', '黎城县', '壶关县', '长子县', '武乡县', '沁县', '沁源县', '潞城市'] },
{ name: '晋城市', areaList: ['城区', '沁水县', '阳城县', '陵川县', '泽州县', '高平市'] },
{ name: '朔州市', areaList: ['朔城区', '平鲁区', '山阴县', '应县', '右玉县', '怀仁县'] },
{ name: '晋中市', areaList: ['榆次区', '榆社县', '左权县', '和顺县', '昔阳县', '寿阳县', '太谷县', '祁县', '平遥县', '灵石县', '介休市'] },
{ name: '运城市', areaList: ['盐湖区', '临猗县', '万荣县', '闻喜县', '稷山县', '新绛县', '绛县', '垣曲县', '夏县', '平陆县', '芮城县', '永济市', '河津市'] },
{ name: '忻州市', areaList: ['忻府区', '定襄县', '五台县', '代县', '繁峙县', '宁武县', '静乐县', '神池县', '五寨县', '岢岚县', '河曲县', '保德县', '偏关县', '原平市'] },
{ name: '临汾市', areaList: ['尧都区', '曲沃县', '翼城县', '襄汾县', '洪洞县', '古县', '安泽县', '浮山县', '吉县', '乡宁县', '大宁县', '隰县', '永和县', '蒲县', '汾西县', '侯马市', '霍州市'] },
{ name: '吕梁市', areaList: ['离石区', '文水县', '交城县', '兴县', '临县', '柳林县', '石楼县', '岚县', '方山县', '中阳县', '交口县', '孝义市', '汾阳市'] }
]
},
{
name: '内蒙古自治区', cityList: [
{ name: '呼和浩特市', areaList: ['新城区', '回民区', '玉泉区', '赛罕区', '土默特左旗', '托克托县', '和林格尔县', '清水河县', '武川县'] },
{ name: '包头市', areaList: ['东河区', '昆都仑区', '青山区', '石拐区', '白云鄂博矿区', '九原区', '土默特右旗', '固阳县', '达尔罕茂明安联合旗'] },
{ name: '乌海市', areaList: ['海勃湾区', '海南区', '乌达区'] },
{ name: '赤峰市', areaList: ['红山区', '元宝山区', '松山区', '阿鲁科尔沁旗', '巴林左旗', '巴林右旗', '林西县', '克什克腾旗', '翁牛特旗', '喀喇沁旗', '宁城县', '敖汉旗'] },
{ name: '通辽市', areaList: ['科尔沁区', '科尔沁左翼中旗', '科尔沁左翼后旗', '开鲁县', '库伦旗', '奈曼旗', '扎鲁特旗', '霍林郭勒市'] },
{ name: '鄂尔多斯市', areaList: ['东胜区', '康巴什区', '达拉特旗', '准格尔旗', '鄂托克前旗', '鄂托克旗', '杭锦旗', '乌审旗', '伊金霍洛旗'] },
{ name: '呼伦贝尔市', areaList: ['海拉尔区', '扎赉诺尔区', '阿荣旗', '莫力达瓦达斡尔族自治旗', '鄂伦春自治旗', '鄂温克族自治旗', '陈巴尔虎旗', '新巴尔虎左旗', '新巴尔虎右旗', '满洲里市', '牙克石市', '扎兰屯市', '额尔古纳市', '根河市'] },
{ name: '巴彦淖尔市', areaList: ['临河区', '五原县', '磴口县', '乌拉特前旗', '乌拉特中旗', '乌拉特后旗', '杭锦后旗'] },
{ name: '乌兰察布市', areaList: ['集宁区', '卓资县', '化德县', '商都县', '兴和县', '凉城县', '察哈尔右翼前旗', '察哈尔右翼中旗', '察哈尔右翼后旗', '四子王旗', '丰镇市'] },
{ name: '兴安盟', areaList: ['乌兰浩特市', '阿尔山市', '科尔沁右翼前旗', '科尔沁右翼中旗', '扎赉特旗', '突泉县'] },
{ name: '锡林郭勒盟', areaList: ['二连浩特市', '锡林浩特市', '阿巴嘎旗', '苏尼特左旗', '苏尼特右旗', '东乌珠穆沁旗', '西乌珠穆沁旗', '太仆寺旗', '镶黄旗', '正镶白旗', '正蓝旗', '多伦县'] },
{ name: '阿拉善盟', areaList: ['阿拉善左旗', '阿拉善右旗', '额济纳旗'] }
]
},
{
name: '辽宁省', cityList: [
{ name: '沈阳市', areaList: ['和平区', '沈河区', '大东区', '皇姑区', '铁西区', '苏家屯区', '浑南区', '沈北新区', '于洪区', '辽中区', '康平县', '法库县', '新民市'] },
{ name: '大连市', areaList: ['中山区', '西岗区', '沙河口区', '甘井子区', '旅顺口区', '金州区', '普兰店区', '长海县', '瓦房店市', '庄河市'] },
{ name: '鞍山市', areaList: ['铁东区', '铁西区', '立山区', '千山区', '台安县', '岫岩满族自治县', '海城市'] },
{ name: '抚顺市', areaList: ['新抚区', '东洲区', '望花区', '顺城区', '抚顺县', '新宾满族自治县', '清原满族自治县'] },
{ name: '本溪市', areaList: ['平山区', '溪湖区', '明山区', '南芬区', '本溪满族自治县', '桓仁满族自治县'] },
{ name: '丹东市', areaList: ['元宝区', '振兴区', '振安区', '宽甸满族自治县', '东港市', '凤城市'] },
{ name: '锦州市', areaList: ['古塔区', '凌河区', '太和区', '黑山县', '义县', '凌海市', '北镇市'] },
{ name: '营口市', areaList: ['站前区', '西市区', '鲅鱼圈区', '老边区', '盖州市', '大石桥市'] },
{ name: '阜新市', areaList: ['海州区', '新邱区', '太平区', '清河门区', '细河区', '阜新蒙古族自治县', '彰武县'] },
{ name: '辽阳市', areaList: ['白塔区', '文圣区', '宏伟区', '弓长岭区', '太子河区', '辽阳县', '灯塔市'] },
{ name: '盘锦市', areaList: ['双台子区', '兴隆台区', '大洼区', '盘山县'] },
{ name: '铁岭市', areaList: ['银州区', '清河区', '铁岭县', '西丰县', '昌图县', '调兵山市', '开原市'] },
{ name: '朝阳市', areaList: ['双塔区', '龙城区', '朝阳县', '建平县', '喀喇沁左翼蒙古族自治县', '北票市', '凌源市'] },
{ name: '葫芦岛市', areaList: ['连山区', '龙港区', '南票区', '绥中县', '建昌县', '兴城市'] }
]
},
{
name: '吉林省', cityList: [
{ name: '长春市', areaList: ['南关区', '宽城区', '朝阳区', '二道区', '绿园区', '双阳区', '九台区', '农安县', '榆树市', '德惠市'] },
{ name: '吉林市', areaList: ['昌邑区', '龙潭区', '船营区', '丰满区', '永吉县', '蛟河市', '桦甸市', '舒兰市', '磐石市'] },
{ name: '四平市', areaList: ['铁西区', '铁东区', '梨树县', '伊通满族自治县', '公主岭市', '双辽市'] },
{ name: '辽源市', areaList: ['龙山区', '西安区', '东丰县', '东辽县'] },
{ name: '通化市', areaList: ['东昌区', '二道江区', '通化县', '辉南县', '柳河县', '梅河口市', '集安市'] },
{ name: '白山市', areaList: ['浑江区', '江源区', '抚松县', '靖宇县', '长白朝鲜族自治县', '临江市'] },
{ name: '松原市', areaList: ['宁江区', '前郭尔罗斯蒙古族自治县', '长岭县', '乾安县', '扶余县'] },
{ name: '白城市', areaList: ['洮北区', '镇赉县', '通榆县', '洮南市', '大安市'] },
{ name: '延边朝鲜族自治州', areaList: ['延吉市', '图们市', '敦化市', '珲春市', '龙井市', '和龙市', '汪清县', '安图县'] }
]
},
{
name: '黑龙江省', cityList: [
{ name: '哈尔滨市', areaList: ['道里区', '南岗区', '道外区', '平房区', '松北区', '香坊区', '呼兰区', '阿城区', '双城区', '依兰县', '方正县', '宾县', '巴彦县', '木兰县', '通河县', '延寿县', '尚志市', '五常市'] },
{ name: '齐齐哈尔市', areaList: ['龙沙区', '建华区', '铁锋区', '昂昂溪区', '富拉尔基区', '碾子山区', '梅里斯达斡尔族区', '龙江县', '依安县', '泰来县', '甘南县', '富裕县', '克山县', '克东县', '拜泉县', '讷河市'] },
{ name: '鸡西市', areaList: ['鸡冠区', '恒山区', '滴道区', '梨树区', '城子河区', '麻山区', '鸡东县', '虎林市', '密山市'] },
{ name: '鹤岗市', areaList: ['向阳区', '工农区', '南山区', '兴安区', '东山区', '兴山区', '萝北县', '绥滨县'] },
{ name: '双鸭山市', areaList: ['尖山区', '岭东区', '四方台区', '宝山区', '集贤县', '友谊县', '宝清县', '饶河县'] },
{ name: '大庆市', areaList: ['萨尔图区', '龙凤区', '让胡路区', '红岗区', '大同区', '肇州县', '肇源县', '林甸县', '杜尔伯特蒙古族自治县'] },
{ name: '伊春市', areaList: ['伊春区', '南岔区', '友好区', '西林区', '翠峦区', '新青区', '美溪区', '金山屯区', '五营区', '乌马河区', '汤旺河区', '带岭区', '乌伊岭区', '红星区', '上甘岭区', '嘉荫县', '铁力市'] },
{ name: '佳木斯市', areaList: ['向阳区', '前进区', '东风区', '郊区', '桦南县', '桦川县', '汤原县', '同江市', '富锦市', '抚远市'] },
{ name: '七台河市', areaList: ['新兴区', '桃山区', '茄子河区', '勃利县'] },
{ name: '牡丹江市', areaList: ['东安区', '阳明区', '爱民区', '西安区', '林口县', '绥芬河市', '海林市', '宁安市', '穆棱市', '东宁市'] },
{ name: '黑河市', areaList: ['爱辉区', '嫩江县', '逊克县', '孙吴县', '北安市', '五大连池市'] },
{ name: '绥化市', areaList: ['北林区', '望奎县', '兰西县', '青冈县', '庆安县', '明水县', '绥棱县', '安达市', '肇东市', '海伦市'] },
{ name: '大兴安岭地区', areaList: ['加格达奇区', '松林区', '新林区', '呼中区', '呼玛县', '塔河县', '漠河县'] }
]
},
{
name: '上海市', cityList: [
{ name: '市辖区', areaList: ['黄浦区', '徐汇区', '长宁区', '静安区', '普陀区', '虹口区', '杨浦区', '闵行区', '宝山区', '嘉定区', '浦东新区', '金山区', '松江区', '青浦区', '奉贤区', '崇明区'] }
]
},
{
name: '江苏省', cityList: [
{ name: '南京市', areaList: ['玄武区', '秦淮区', '建邺区', '鼓楼区', '浦口区', '栖霞区', '雨花台区', '江宁区', '六合区', '溧水县', '高淳县'] },
{ name: '无锡市', areaList: ['锡山区', '惠山区', '滨湖区', '梁溪区', '新吴区', '江阴市', '宜兴市'] },
{ name: '徐州市', areaList: ['鼓楼区', '云龙区', '贾汪区', '泉山区', '铜山县', '丰县', '沛县', '睢宁县', '新沂市', '邳州市'] },
{ name: '常州市', areaList: ['天宁区', '钟楼区', '新北区', '武进区', '金坛市', '溧阳市'] },
{ name: '苏州市', areaList: ['虎丘区', '吴中区', '相城区', '姑苏区', '吴江市', '常熟市', '张家港市', '昆山市', '太仓市'] },
{ name: '南通市', areaList: ['崇川区', '港闸区', '通州区', '海安县', '如东县', '启东市', '如皋市', '海门市'] },
{ name: '连云港市', areaList: ['连云区', '海州区', '赣榆县', '东海县', '灌云县', '灌南县'] },
{ name: '淮安市', areaList: ['淮安区', '淮阴区', '清江浦区', '洪泽区', '涟水县', '金湖县', '盱眙县'] },
{ name: '盐城市', areaList: ['亭湖区', '盐都区', '大丰区', '响水县', '滨海县', '阜宁县', '射阳县', '建湖县', '东台市'] },
{ name: '扬州市', areaList: ['广陵区', '邗江区', '江都市', '宝应县', '仪征市', '高邮市'] },
{ name: '镇江市', areaList: ['京口区', '润州区', '丹徒区', '丹阳市', '扬中市', '句容市'] },
{ name: '泰州市', areaList: ['海陵区', '高港区', '姜堰市', '兴化市', '靖江市', '泰兴市'] },
{ name: '宿迁市', areaList: ['宿城区', '宿豫区', '沭阳县', '泗阳县', '泗洪县'] }
]
},
{
name: '浙江省', cityList: [
{ name: '杭州市', areaList: ['上城区', '下城区', '江干区', '拱墅区', '西湖区', '滨江区', '萧山区', '余杭区', '富阳区', '临安区', '桐庐县', '淳安县', '建德市'] },
{ name: '宁波市', areaList: ['海曙区', '江北区', '北仑区', '镇海区', '鄞州区', '奉化区', '象山县', '宁海县', '余姚市', '慈溪市'] },
{ name: '温州市', areaList: ['鹿城区', '龙湾区', '瓯海区', '洞头县', '永嘉县', '平阳县', '苍南县', '文成县', '泰顺县', '瑞安市', '乐清市'] },
{ name: '嘉兴市', areaList: ['南湖区', '秀洲区', '嘉善县', '海盐县', '海宁市', '平湖市', '桐乡市'] },
{ name: '湖州市', areaList: ['吴兴区', '南浔区', '德清县', '长兴县', '安吉县'] },
{ name: '绍兴市', areaList: ['越城区', '柯桥区', '上虞区', '新昌县', '诸暨市', '嵊州市'] },
{ name: '金华市', areaList: ['婺城区', '金东区', '武义县', '浦江县', '磐安县', '兰溪市', '义乌市', '东阳市', '永康市'] },
{ name: '衢州市', areaList: ['柯城区', '衢江区', '常山县', '开化县', '龙游县', '江山市'] },
{ name: '舟山市', areaList: ['定海区', '普陀区', '岱山县', '嵊泗县'] },
{ name: '台州市', areaList: ['椒江区', '黄岩区', '路桥区', '三门县', '天台县', '仙居县', '温岭市', '临海市', '玉环市'] },
{ name: '丽水市', areaList: ['莲都区', '青田县', '缙云县', '遂昌县', '松阳县', '云和县', '庆元县', '景宁畲族自治县', '龙泉市'] }
]
},
{
name: '安徽省', cityList: [
{ name: '合肥市', areaList: ['瑶海区', '庐阳区', '蜀山区', '包河区', '长丰县', '肥东县', '肥西县', '庐江县', '巢湖市'] },
{ name: '芜湖市', areaList: ['镜湖区', '戈江区', '鸠江区', '三山区', '芜湖县', '繁昌县', '南陵县', '无为县'] },
{ name: '蚌埠市', areaList: ['龙子湖区', '蚌山区', '禹会区', '淮上区', '怀远县', '五河县', '固镇县'] },
{ name: '淮南市', areaList: ['大通区', '田家庵区', '谢家集区', '八公山区', '潘集区', '凤台县', '寿县'] },
{ name: '马鞍山市', areaList: ['花山区', '雨山区', '博望区', '当涂县', '含山县', '和县'] },
{ name: '淮北市', areaList: ['杜集区', '相山区', '烈山区', '濉溪县'] },
{ name: '铜陵市', areaList: ['铜官区', '义安区', '郊区', '枞阳县'] },
{ name: '安庆市', areaList: ['迎江区', '大观区', '宜秀区', '怀宁县', '潜山县', '太湖县', '宿松县', '望江县', '岳西县', '桐城市'] },
{ name: '黄山市', areaList: ['屯溪区', '黄山区', '徽州区', '歙县', '休宁县', '黟县', '祁门县'] },
{ name: '滁州市', areaList: ['琅琊区', '南谯区', '来安县', '全椒县', '定远县', '凤阳县', '天长市', '明光市'] },
{ name: '阜阳市', areaList: ['颍州区', '颍东区', '颍泉区', '临泉县', '太和县', '阜南县', '颍上县', '界首市'] },
{ name: '宿州市', areaList: ['埇桥区', '砀山县', '萧县', '灵璧县', '泗县'] },
{ name: '巢湖市', areaList: ['居巢区', '庐江县', '无为县', '含山县', '和 县'] },
{ name: '六安市', areaList: ['金安区', '裕安区', '叶集县', '霍邱县', '舒城县', '金寨县', '霍山县'] },
{ name: '亳州市', areaList: ['谯城区', '涡阳县', '蒙城县', '利辛县'] },
{ name: '池州市', areaList: ['贵池区', '东至县', '石台县', '青阳县'] },
{ name: '宣城市', areaList: ['宣州区', '郎溪县', '广德县', '泾县', '绩溪县', '旌德县', '宁国市'] }
]
},
{
name: '福建省', cityList: [
{ name: '福州市', areaList: ['鼓楼区', '台江区', '仓山区', '马尾区', '晋安区', '长乐区', '闽侯县', '连江县', '罗源县', '闽清县', '永泰县', '平潭县', '福清市'] },
{ name: '厦门市', areaList: ['思明区', '海沧区', '湖里区', '集美区', '同安区', '翔安区'] },
{ name: '莆田市', areaList: ['城厢区', '涵江区', '荔城区', '秀屿区', '仙游县'] },
{ name: '三明市', areaList: ['梅列区', '三元区', '明溪县', '清流县', '宁化县', '大田县', '尤溪县', '沙县', '将乐县', '泰宁县', '建宁县', '永安市'] },
{ name: '泉州市', areaList: ['鲤城区', '丰泽区', '洛江区', '泉港区', '惠安县', '安溪县', '永春县', '德化县', '金门县', '石狮市', '晋江市', '南安市'] },
{ name: '漳州市', areaList: ['芗城区', '龙文区', '云霄县', '漳浦县', '诏安县', '长泰县', '东山县', '南靖县', '平和县', '华安县', '龙海市'] },
{ name: '南平市', areaList: ['延平区', '建阳区', '顺昌县', '浦城县', '光泽县', '松溪县', '政和县', '邵武市', '武夷山市', '建瓯市',] },
{ name: '龙岩市', areaList: ['新罗区', '永定区', '长汀县', '上杭县', '武平县', '连城县', '漳平市'] },
{ name: '宁德市', areaList: ['蕉城区', '霞浦县', '古田县', '屏南县', '寿宁县', '周宁县', '柘荣县', '福安市', '福鼎市'] }
]
},
{
name: '江西省', cityList: [
{ name: '南昌市', areaList: ['东湖区', '西湖区', '青云谱区', '湾里区', '青山湖区', '新建县', '南昌县', '安义县', '进贤县'] },
{ name: '景德镇市', areaList: ['昌江区', '珠山区', '浮梁县', '乐平市'] },
{ name: '萍乡市', areaList: ['安源区', '湘东区', '莲花县', '上栗县', '芦溪县'] },
{ name: '九江市', areaList: ['濂溪区', '浔阳区', '柴桑区', '武宁县', '修水县', '永修县', '德安县', '都昌县', '湖口县', '彭泽县', '瑞昌市', '共青城市', '庐山市'] },
{ name: '新余市', areaList: ['渝水区', '分宜县'] },
{ name: '鹰潭市', areaList: ['月湖区', '余江区', '贵溪市'] },
{ name: '赣州市', areaList: ['章贡区', '南康区', '赣县区', '信丰县', '大余县', '上犹县', '崇义县', '安远县', '龙南县', '定南县', '全南县', '宁都县', '于都县', '兴国县', '会昌县', '寻乌县', '石城县', '瑞金市'] },
{ name: '吉安市', areaList: ['吉州区', '青原区', '吉安县', '吉水县', '峡江县', '新干县', '永丰县', '泰和县', '遂川县', '万安县', '安福县', '永新县', '井冈山市'] },
{ name: '宜春市', areaList: ['袁州区', '奉新县', '万载县', '上高县', '宜丰县', '靖安县', '铜鼓县', '丰城市', '樟树市', '高安市'] },
{ name: '抚州市', areaList: ['临川区', '东乡区', '南城县', '黎川县', '南丰县', '崇仁县', '乐安县', '宜黄县', '金溪县', '资溪县', '广昌县'] },
{ name: '上饶市', areaList: ['信州区', '广丰区', '上饶县', '玉山县', '铅山县', '横峰县', '弋阳县', '余干县', '鄱阳县', '万年县', '婺源县', '德兴市'] }
]
},
{
name: '山东省', cityList: [
{ name: '济南市', areaList: ['历下区', '市中区', '槐荫区', '天桥区', '历城区', '长清区', '章丘区', '平阴县', '济阳县', '商河县'] },
{ name: '青岛市', areaList: ['市南区', '市北区', '黄岛区', '崂山区', '李沧区', '城阳区', '即墨区', '胶州市', '平度市', '莱西市'] },
{ name: '淄博市', areaList: ['淄川区', '张店区', '博山区', '临淄区', '周村区', '桓台县', '高青县', '沂源县'] },
{ name: '枣庄市', areaList: ['市中区', '薛城区', '峄城区', '台儿庄区', '山亭区', '滕州市'] },
{ name: '东营市', areaList: ['东营区', '河口区', '垦利区', '利津县', '广饶县'] },
{ name: '烟台市', areaList: ['芝罘区', '福山区', '牟平区', '莱山区', '长岛县', '龙口市', '莱阳市', '莱州市', '蓬莱市', '招远市', '栖霞市', '海阳市'] },
{ name: '潍坊市', areaList: ['潍城区', '寒亭区', '坊子区', '奎文区', '临朐县', '昌乐县', '青州市', '诸城市', '寿光市', '安丘市', '高密市', '昌邑市'] },
{ name: '济宁市', areaList: ['任城区', '兖州区', '微山县', '鱼台县', '金乡县', '嘉祥县', '汶上县', '泗水县', '梁山县', '曲阜市', '邹城市'] },
{ name: '泰安市', areaList: ['泰山区', '岱岳区', '宁阳县', '东平县', '新泰市', '肥城市'] },
{ name: '威海市', areaList: ['环翠区', '文登市', '荣成市', '乳山市'] },
{ name: '日照市', areaList: ['东港区', '岚山区', '五莲县', '莒县'] },
{ name: '莱芜市', areaList: ['莱城区', '钢城区'] },
{ name: '临沂市', areaList: ['兰山区', '罗庄区', '河东区', '沂南县', '郯城县', '沂水县', '兰陵县', '费县', '平邑县', '莒南县', '蒙阴县', '临沭县'] },
{ name: '德州市', areaList: ['德城区', '陵城区', '宁津县', '庆云县', '临邑县', '齐河县', '平原县', '夏津县', '武城县', '乐陵市', '禹城市'] },
{ name: '聊城市', areaList: ['东昌府区', '阳谷县', '莘县', '茌平县', '东阿县', '冠县', '高唐县', '临清市'] },
{ name: '滨州市', areaList: ['滨城区', '沾化区', '惠民县', '阳信县', '无棣县', '博兴县', '邹平县'] },
{ name: '荷泽市', areaList: ['牡丹区', '定陶区', '曹县', '单县', '成武县', '巨野县', '郓城县', '鄄城县', '东明县'] }
]
},
{
name: '河南省', cityList: [
{ name: '郑州市', areaList: ['中原区', '二七区', '管城回族区', '金水区', '上街区', '惠济区', '中牟县', '巩义市', '荥阳市', '新密市', '新郑市', '登封市'] },
{ name: '开封市', areaList: ['龙亭区', '顺河回族区', '鼓楼区', '禹王台区', '祥符区', '杞县', '通许县', '尉氏县', '兰考县'] },
{ name: '洛阳市', areaList: ['老城区', '西工区', '瀍河回族区', '涧西区', '吉利区', '洛龙区', '孟津县', '新安县', '栾川县', '嵩县', '汝阳县', '宜阳县', '洛宁县', '伊川县', '偃师市'] },
{ name: '平顶山市', areaList: ['新华区', '卫东区', '石龙区', '湛河区', '宝丰县', '叶县', '鲁山县', '郏县', '舞钢市', '汝州市'] },
{ name: '安阳市', areaList: ['文峰区', '北关区', '殷都区', '龙安区', '安阳县', '汤阴县', '滑县', '内黄县', '林州市'] },
{ name: '鹤壁市', areaList: ['鹤山区', '山城区', '淇滨区', '浚县', '淇县'] },
{ name: '新乡市', areaList: ['红旗区', '卫滨区', '凤泉区', '牧野区', '新乡县', '获嘉县', '原阳县', '延津县', '封丘县', '长垣县', '卫辉市', '辉县市'] },
{ name: '焦作市', areaList: ['解放区', '中站区', '马村区', '山阳区', '修武县', '博爱县', '武陟县', '温县', '沁阳市', '孟州市'] },
{ name: '濮阳市', areaList: ['华龙区', '清丰县', '南乐县', '范县', '台前县', '濮阳县'] },
{ name: '许昌市', areaList: ['魏都区', '建安区', '鄢陵县', '襄城县', '禹州市', '长葛市'] },
{ name: '漯河市', areaList: ['源汇区', '郾城区', '召陵区', '舞阳县', '临颍县'] },
{ name: '三门峡市', areaList: ['湖滨区', '陕州区', '渑池县', '卢氏县', '义马市', '灵宝市'] },
{ name: '南阳市', areaList: ['宛城区', '卧龙区', '南召县', '方城县', '西峡县', '镇平县', '内乡县', '淅川县', '社旗县', '唐河县', '新野县', '桐柏县', '邓州市'] },
{ name: '商丘市', areaList: ['梁园区', '睢阳区', '民权县', '睢县', '宁陵县', '柘城县', '虞城县', '夏邑县', '永城市'] },
{ name: '信阳市', areaList: ['浉河区', '平桥区', '罗山县', '光山县', '新县', '商城县', '固始县', '潢川县', '淮滨县', '息县'] },
{ name: '周口市', areaList: ['川汇区', '扶沟县', '西华县', '商水县', '沈丘县', '郸城县', '淮阳县', '太康县', '鹿邑县', '项城市'] },
{ name: '驻马店市', areaList: ['驿城区', '西平县', '上蔡县', '平舆县', '正阳县', '确山县', '泌阳县', '汝南县', '遂平县', '新蔡县'] },
{ name: '省直辖县级行政区划', areaList: ['济源市'] }
]
},
{
name: '湖北省', cityList: [
{ name: '武汉市', areaList: ['江岸区', '江汉区', '硚口区', '汉阳区', '武昌区', '青山区', '洪山区', '东西湖区', '汉南区', '蔡甸区', '江夏区', '黄陂区', '新洲区'] },
{ name: '黄石市', areaList: ['黄石港区', '西塞山区', '下陆区', '铁山区', '阳新县', '大冶市'] },
{ name: '十堰市', areaList: ['茅箭区', '张湾区', '郧阳区', '郧西县', '竹山县', '竹溪县', '房县', '丹江口市'] },
{ name: '宜昌市', areaList: ['西陵区', '伍家岗区', '点军区', '猇亭区', '夷陵区', '远安县', '兴山县', '秭归县', '长阳土家族自治县', '五峰土家族自治县', '宜都市', '当阳市', '枝江市'] },
{ name: '襄阳市', areaList: ['襄城区', '樊城区', '襄州区', '南漳县', '谷城县', '保康县', '老河口市', '枣阳市', '宜城市'] },
{ name: '鄂州市', areaList: ['梁子湖区', '华容区', '鄂城区'] },
{ name: '荆门市', areaList: ['东宝区', '掇刀区', '京山县', '沙洋县', '钟祥市'] },
{ name: '孝感市', areaList: ['孝南区', '孝昌县', '大悟县', '云梦县', '应城市', '安陆市', '汉川市'] },
{ name: '荆州市', areaList: ['沙市区', '荆州区', '公安县', '监利县', '江陵县', '石首市', '洪湖市', '松滋市'] },
{ name: '黄冈市', areaList: ['黄州区', '团风县', '红安县', '罗田县', '英山县', '浠水县', '蕲春县', '黄梅县', '麻城市', '武穴市'] },
{ name: '咸宁市', areaList: ['咸安区', '嘉鱼县', '通城县', '崇阳县', '通山县', '赤壁市'] },
{ name: '随州市', areaList: ['曾都区', '随县', '广水市'] },
{ name: '恩施土家族苗族自治州', areaList: ['恩施市', '利川市', '建始县', '巴东县', '宣恩县', '咸丰县', '来凤县', '鹤峰县'] },
{ name: '省直辖县级行政区划', areaList: ['仙桃市', '潜江市', '天门市', '神农架林区'] },
]
},
{
name: '湖南省', cityList: [
{ name: '长沙市', areaList: ['芙蓉区', '天心区', '岳麓区', '开福区', '雨花区', '望城区', '长沙县', '浏阳市', '宁乡市'] },
{ name: '株洲市', areaList: ['荷塘区', '芦淞区', '石峰区', '天元区', '株洲县', '攸县', '茶陵县', '炎陵县', '醴陵市'] },
{ name: '湘潭市', areaList: ['雨湖区', '岳塘区', '湘潭县', '湘乡市', '韶山市'] },
{ name: '衡阳市', areaList: ['珠晖区', '雁峰区', '石鼓区', '蒸湘区', '南岳区', '衡阳县', '衡南县', '衡山县', '衡东县', '祁东县', '耒阳市', '常宁市'] },
{ name: '邵阳市', areaList: ['双清区', '大祥区', '北塔区', '邵东县', '新邵县', '邵阳县', '隆回县', '洞口县', '绥宁县', '新宁县', '城步苗族自治县', '武冈市'] },
{ name: '岳阳市', areaList: ['岳阳楼区', '云溪区', '君山区', '岳阳县', '华容县', '湘阴县', '平江县', '汨罗市', '临湘市'] },
{ name: '常德市', areaList: ['武陵区', '鼎城区', '安乡县', '汉寿县', '澧县', '临澧县', '桃源县', '石门县', '津市市'] },
{ name: '张家界市', areaList: ['永定区', '武陵源区', '慈利县', '桑植县'] },
{ name: '益阳市', areaList: ['资阳区', '赫山区', '南县', '桃江县', '安化县', '沅江市'] },
{ name: '郴州市', areaList: ['北湖区', '苏仙区', '桂阳县', '宜章县', '永兴县', '嘉禾县', '临武县', '汝城县', '桂东县', '安仁县', '资兴市'] },
{ name: '永州市', areaList: ['零陵区', '冷水滩区', '祁阳县', '东安县', '双牌县', '道县', '江永县', '宁远县', '蓝山县', '新田县', '江华瑶族自治县'] },
{ name: '怀化市', areaList: ['鹤城区', '中方县', '沅陵县', '辰溪县', '溆浦县', '会同县', '麻阳苗族自治县', '新晃侗族自治县', '芷江侗族自治县', '靖州苗族侗族自治县', '通道侗族自治县', '洪江市'] },
{ name: '娄底市', areaList: ['娄星区', '双峰县', '新化县', '冷水江市', '涟源市'] },
{ name: '湘西土家族苗族自治州', areaList: ['吉首市', '泸溪县', '凤凰县', '花垣县', '保靖县', '古丈县', '永顺县', '龙山县'] }
]
},
{
name: '广东省', cityList: [
{ name: '广州市', areaList: ['荔湾区', '越秀区', '海珠区', '天河区', '白云区', '黄埔区', '番禺区', '花都区', '南沙区', '从化区', '增城区'] },
{ name: '韶关市', areaList: ['武江区', '浈江区', '曲江区', '始兴县', '仁化县', '翁源县', '乳源瑶族自治县', '新丰县', '乐昌市', '南雄市'] },
{ name: '深圳市', areaList: ['罗湖区', '福田区', '南山区', '宝安区', '龙岗区', '盐田区', '龙华区', '坪山区'] },
{ name: '珠海市', areaList: ['香洲区', '斗门区', '金湾区'] },
{ name: '汕头市', areaList: ['龙湖区', '金平区', '濠江区', '潮阳区', '潮南区', '澄海区', '南澳县'] },
{ name: '佛山市', areaList: ['禅城区', '南海区', '顺德区', '三水区', '高明区'] },
{ name: '江门市', areaList: ['蓬江区', '江海区', '新会区', '台山市', '开平市', '鹤山市', '恩平市'] },
{ name: '湛江市', areaList: ['赤坎区', '霞山区', '坡头区', '麻章区', '遂溪县', '徐闻县', '廉江市', '雷州市', '吴川市'] },
{ name: '茂名市', areaList: ['茂南区', '电白区', '高州市', '化州市', '信宜市'] },
{ name: '肇庆市', areaList: ['端州区', '鼎湖区', '高要区', '广宁县', '怀集县', '封开县', '德庆县', '四会市'] },
{ name: '惠州市', areaList: ['惠城区', '惠阳区', '博罗县', '惠东县', '龙门县'] },
{ name: '梅州市', areaList: ['梅江区', '梅县区', '大埔县', '丰顺县', '五华县', '平远县', '蕉岭县', '兴宁市'] },
{ name: '汕尾市', areaList: ['城区', '海丰县', '陆河县', '陆丰市'] },
{ name: '河源市', areaList: ['源城区', '紫金县', '龙川县', '连平县', '和平县', '东源县'] },
{ name: '阳江市', areaList: ['江城区', '阳西县', '阳东区', '阳春市'] },
{ name: '清远市', areaList: ['清城区', '清新区', '佛冈县', '阳山县', '连山壮族瑶族自治县', '连南瑶族自治县', '英德市', '连州市'] },
{ name: '东莞市', areaList: ['东城街道', '南城街道', '万江街道', '莞城街道', '石碣镇', '石龙镇', '茶山镇', '石排镇', '企石镇', '横沥镇', '桥头镇', '谢岗镇', '东坑镇', '常平镇', '寮步镇', '樟木头镇', '大朗镇', '黄江镇', '清溪镇', '塘厦镇', '凤岗镇', '大岭山镇', '长安镇', '虎门镇', '厚街镇', '沙田镇', '道滘镇', '洪梅镇', '麻涌镇', '望牛墩镇', '中堂镇', '高埗镇', '松山湖管委会', '虎门港管委会', '东莞生态园'] },
{ name: '中山市', areaList: ['石岐区街道', '东区街道', '火炬开发区', '西区街道', '南区街道', '五桂山街道', '小榄镇', '黄圃镇', '民众镇', '东凤镇', '东升镇', '古镇镇', '沙溪镇', '坦洲镇', '港口镇', '三角镇', '横栏镇', '南头镇', '阜沙镇', '南朗镇', '三乡镇', '板芙镇', '大涌镇', '神湾镇'] },
{ name: '潮州市', areaList: ['湘桥区', '潮安县', '饶平县'] },
{ name: '揭阳市', areaList: ['榕城区', '揭东县', '揭西县', '惠来县', '普宁市'] },
{ name: '云浮市', areaList: ['云城区', '云安区', '新兴县', '郁南县', '罗定市'] }
]
},
{
name: '广西壮族自治区', cityList: [
{ name: '南宁市', areaList: ['兴宁区', '青秀区', '江南区', '西乡塘区', '良庆区', '邕宁区', '武鸣区', '隆安县', '马山县', '上林县', '宾阳县', '横县'] },
{ name: '柳州市', areaList: ['城中区', '鱼峰区', '柳南区', '柳北区', '柳江县', '柳城县', '鹿寨县', '融安县', '融水苗族自治县', '三江侗族自治县'] },
{ name: '桂林市', areaList: ['秀峰区', '叠彩区', '象山区', '七星区', '雁山区', '临桂区', '阳朔县', '灵川县', '全州县', '兴安县', '永福县', '灌阳县', '龙胜各族自治县', '资源县', '平乐县', '荔蒲县', '恭城瑶族自治县'] },
{ name: '梧州市', areaList: ['万秀区', '长洲区', '龙圩区', '苍梧县', '藤县', '蒙山县', '岑溪市'] },
{ name: '北海市', areaList: ['海城区', '银海区', '铁山港区', '合浦县'] },
{ name: '防城港市', areaList: ['港口区', '防城区', '上思县', '东兴市'] },
{ name: '钦州市', areaList: ['钦南区', '钦北区', '灵山县', '浦北县'] },
{ name: '贵港市', areaList: ['港北区', '港南区', '覃塘区', '平南县', '桂平市'] },
{ name: '玉林市', areaList: ['玉州区', '福绵区', '容县', '陆川县', '博白县', '兴业县', '北流市'] },
{ name: '百色市', areaList: ['右江区', '田阳县', '田东县', '平果县', '德保县', '那坡县', '凌云县', '乐业县', '田林县', '西林县', '隆林各族自治县', '靖西市'] },
{ name: '贺州市', areaList: ['八步区', '平桂区', '昭平县', '钟山县', '富川瑶族自治县'] },
{ name: '河池市', areaList: ['金城江区', '宜州区', '南丹县', '天峨县', '凤山县', '东兰县', '罗城仫佬族自治县', '环江毛南族自治县', '巴马瑶族自治县', '都安瑶族自治县', '大化瑶族自治县'] },
{ name: '来宾市', areaList: ['兴宾区', '忻城县', '象州县', '武宣县', '金秀瑶族自治县', '合山市'] },
{ name: '崇左市', areaList: ['江洲区', '扶绥县', '宁明县', '龙州县', '大新县', '天等县', '凭祥市'] }
]
},
{
name: '海南省', cityList: [
{ name: '海口市', areaList: ['秀英区', '龙华区', '琼山区', '美兰区'] },
{ name: '三亚市', areaList: ['海棠区', '吉阳区', '天涯区', '崖州区'] },
{ name: '三沙市', areaList: ['西沙群岛', '南沙群岛', '中沙群岛的岛礁其它海域'] },
{ name: '儋州市', areaList: ['那大镇', '和庆镇', '南丰镇', '大城镇', '雅星镇', '兰洋镇', '光村镇', '木棠镇', '海头镇', '峨蔓镇', '三都镇', '王五镇', '白马井镇', '中和镇', '排浦镇', '东成镇', '新州镇', '国营西培农场', '国营西联农场', '国营蓝洋农场', '国营八一农场', '洋浦经济开发区', '华南热作学院', '红岭农场'] },
{ name: '省直辖县级行政区划', areaList: ['五指山市', '琼海市', '文昌市', '万宁市', '东方市', '定安县', '屯昌县', '澄迈县', '临高县', '白沙黎族自治县', '昌江黎族自治县', '乐东黎族自治县', '陵水黎族自治县', '保亭黎族苗族自治县', '琼中黎族苗族自治县'] }
]
},
{
name: '重庆市', cityList: [
{ name: '重庆市', areaList: ['万州区', '涪陵区', '渝中区', '大渡口区', '江北区', '沙坪坝区', '九龙坡区', '南岸区', '北碚区', '綦江区', '大足区', '渝北区', '巴南区', '黔江区', '长寿区', '江津区', '合川区', '永川区', '南川区', '璧山区', '铜梁区', '潼南区', '荣昌区', '开州区', '梁平区', '武隆区'] },
{ name: '县', areaList: ['城口县', '丰都县', '垫江县', '忠县', '云阳县', '奉节县', '巫山县', '巫溪县', '石柱土家族自治县', '秀山土家族苗族自治县', '酉阳土家族苗族自治县', '彭水苗族土家族自治县'] }
]
},
{
name: '四川省', cityList: [
{ name: '成都市', areaList: ['锦江区', '青羊区', '金牛区', '武侯区', '成华区', '龙泉驿区', '青白江区', '新都区', '温江区', '双流区', '郫都区', '金堂县', '大邑县', '蒲江县', '新津县', '都江堰市', '彭州市', '邛崃市', '崇州市', '简阳市'] },
{ name: '自贡市', areaList: ['自流井区', '贡井区', '大安区', '沿滩区', '荣县', '富顺县'] },
{ name: '攀枝花市', areaList: ['东区', '西区', '仁和区', '米易县', '盐边县'] },
{ name: '泸州市', areaList: ['江阳区', '纳溪区', '龙马潭区', '泸县', '合江县', '叙永县', '古蔺县'] },
{ name: '德阳市', areaList: ['旌阳区', '罗江区', '中江县', '广汉市', '什邡市', '绵竹市'] },
{ name: '绵阳市', areaList: ['涪城区', '游仙区', '安州区', '三台县', '盐亭县', '梓潼县', '北川羌族自治县', '平武县', '江油市'] },
{ name: '广元市', areaList: ['利州区', '昭化区', '朝天区', '旺苍县', '青川县', '剑阁县', '苍溪县'] },
{ name: '遂宁市', areaList: ['船山区', '安居区', '蓬溪县', '射洪县', '大英县'] },
{ name: '内江市', areaList: ['市中区', '东兴区', '威远县', '资中县', '隆昌市'] },
{ name: '乐山市', areaList: ['市中区', '沙湾区', '五通桥区', '金口河区', '犍为县', '井研县', '夹江县', '沐川县', '峨边彝族自治县', '马边彝族自治县', '峨眉山市'] },
{ name: '南充市', areaList: ['顺庆区', '高坪区', '嘉陵区', '南部县', '营山县', '蓬安县', '仪陇县', '西充县', '阆中市'] },
{ name: '眉山市', areaList: ['东坡区', '彭山区', '仁寿县', '洪雅县', '丹棱县', '青神县'] },
{ name: '宜宾市', areaList: ['翠屏区', '南溪区', '宜宾县', '江安县', '长宁县', '高县', '珙县', '筠连县', '兴文县', '屏山县'] },
{ name: '广安市', areaList: ['广安区', '前锋区', '岳池县', '武胜县', '邻水县', '华蓥市'] },
{ name: '达州市', areaList: ['通川区', '达川县', '宣汉县', '开江县', '大竹县', '渠县', '万源市'] },
{ name: '雅安市', areaList: ['雨城区', '名山县', '荥经县', '汉源县', '石棉县', '天全县', '芦山县', '宝兴县'] },
{ name: '巴中市', areaList: ['巴州区', '恩阳区', '通江县', '南江县', '平昌县'] },
{ name: '资阳市', areaList: ['雁江区', '安岳县', '乐至县'] },
{ name: '阿坝藏族羌族自治州', areaList: ['马尔康市', '汶川县', '理县', '茂县', '松潘县', '九寨沟县', '金川县', '小金县', '黑水县', '壤塘县', '阿坝县', '若尔盖县', '红原县'] },
{ name: '甘孜藏族自治州', areaList: ['康定市', '泸定县', '丹巴县', '九龙县', '雅江县', '道孚县', '炉霍县', '甘孜县', '新龙县', '德格县', '白玉县', '石渠县', '色达县', '理塘县', '巴塘县', '乡城县', '稻城县', '得荣县'] },
{ name: '凉山彝族自治州', areaList: ['西昌市', '木里藏族自治县', '盐源县', '德昌县', '会理县', '会东县', '宁南县', '普格县', '布拖县', '金阳县', '昭觉县', '喜德县', '冕宁县', '越西县', '甘洛县', '美姑县', '雷波县'] }
]
},
{
name: '贵州省', cityList: [
{ name: '贵阳市', areaList: ['南明区', '云岩区', '花溪区', '乌当区', '白云区', '观山湖区', '开阳县', '息烽县', '修文县', '清镇市'] },
{ name: '六盘水市', areaList: ['钟山区', '六枝特区', '水城县', '盘州市'] },
{ name: '遵义市', areaList: ['红花岗区', '汇川区', '播州区', '桐梓县', '绥阳县', '正安县', '道真仡佬族苗族自治县', '务川仡佬族苗族自治县', '凤冈县', '湄潭县', '余庆县', '习水县', '赤水市', '仁怀市'] },
{ name: '安顺市', areaList: ['西秀区', '平坝县', '普定县', '镇宁布依族苗族自治县', '关岭布依族苗族自治县', '紫云苗族布依族自治县'] },
{ name: '毕节市', areaList: ['七星关区', '大方县', '黔西县', '金沙县', '织金县', '纳雍县', '威宁彝族回族苗族自治县', '赫章县'] },
{ name: '铜仁市', areaList: ['碧江区', '万山区', '江口县', '玉屏侗族自治县', '石阡县', '思南县', '印江土家族苗族自治县', '德江县', '沿河土家族自治县', '松桃苗族自治县'] },
{ name: '黔西南布依族苗族自治州', areaList: ['兴义市', '兴仁县', '普安县', '晴隆县', '贞丰县', '望谟县', '册亨县', '安龙县'] },
{ name: '黔东南苗族侗族自治州', areaList: ['凯里市', '黄平县', '施秉县', '三穗县', '镇远县', '岑巩县', '天柱县', '锦屏县', '剑河县', '台江县', '黎平县', '榕江县', '从江县', '雷山县', '麻江县', '丹寨县'] },
{ name: '黔南布依族苗族自治州', areaList: ['都匀市', '福泉市', '荔波县', '贵定县', '瓮安县', '独山县', '平塘县', '罗甸县', '长顺县', '龙里县', '惠水县', '三都水族自治县'] }
]
},
{
name: '云南省', cityList: [
{ name: '昆明市', areaList: ['五华区', '盘龙区', '官渡区', '西山区', '东川区', '呈贡县', '晋宁县', '富民县', '宜良县', '石林彝族自治县', '嵩明县', '禄劝彝族苗族自治县', '寻甸回族彝族自治县', '安宁市'] },
{ name: '曲靖市', areaList: ['麒麟区', '沾益区', '马龙县', '陆良县', '师宗县', '罗平县', '富源县', '会泽县', '宣威市'] },
{ name: '玉溪市', areaList: ['红塔区', '江川区', '澄江县', '通海县', '华宁县', '易门县', '峨山彝族自治县', '新平彝族傣族自治县', '元江哈尼族彝族傣族自治县'] },
{ name: '保山市', areaList: ['隆阳区', '施甸县', '龙陵县', '昌宁县', '腾冲市'] },
{ name: '昭通市', areaList: ['昭阳区', '鲁甸县', '巧家县', '盐津县', '大关县', '永善县', '绥江县', '镇雄县', '彝良县', '威信县', '水富县'] },
{ name: '丽江市', areaList: ['古城区', '玉龙纳西族自治县', '永胜县', '华坪县', '宁蒗彝族自治县'] },
{ name: '普洱市', areaList: ['思茅区', '宁洱哈尼族彝族自治县', '墨江哈尼族自治县', '景东彝族自治县', '景谷傣族彝族自治县', '镇沅彝族哈尼族拉祜族自治县', '江城哈尼族彝族自治县', '孟连傣族拉祜族佤族自治县', '澜沧拉祜族自治县', '西盟佤族自治县'] },
{ name: '临沧市', areaList: ['临翔区', '凤庆县', '云县', '永德县', '镇康县', '双江拉祜族佤族布朗族傣族自治县', '耿马傣族佤族自治县', '沧源佤族自治县'] },
{ name: '楚雄彝族自治州', areaList: ['楚雄市', '双柏县', '牟定县', '南华县', '姚安县', '大姚县', '永仁县', '元谋县', '武定县', '禄丰县'] },
{ name: '红河哈尼族彝族自治州', areaList: ['个旧市', '开远市', '蒙自县', '弥勒市', '屏边苗族自治县', '建水县', '石屏县', '泸西县', '元阳县', '红河县', '金平苗族瑶族傣族自治县', '绿春县', '河口瑶族自治县'] },
{ name: '文山壮族苗族自治州', areaList: ['文山县', '砚山县', '西畴县', '麻栗坡县', '马关县', '丘北县', '广南县', '富宁县'] },
{ name: '西双版纳傣族自治州', areaList: ['景洪市', '勐海县', '勐腊县'] },
{ name: '大理白族自治州', areaList: ['大理市', '漾濞彝族自治县', '祥云县', '宾川县', '弥渡县', '南涧彝族自治县', '巍山彝族回族自治县', '永平县', '云龙县', '洱源县', '剑川县', '鹤庆县'] },
{ name: '德宏傣族景颇族自治州', areaList: ['瑞丽市', '芒市', '梁河县', '盈江县', '陇川县'] },
{ name: '怒江傈僳族自治州', areaList: ['泸水县', '福贡县', '贡山独龙族怒族自治县', '兰坪白族普米族自治县'] },
{ name: '迪庆藏族自治州', areaList: ['香格里拉县', '德钦县', '维西傈僳族自治县'] }
]
},
{
name: '西藏自治区', cityList: [
{ name: '拉萨市', areaList: ['城关区', '堆龙德庆区', '达孜区', '林周县', '当雄县', '尼木县', '曲水县', '墨竹工卡县'] },
{ name: '日喀则市', areaList: ['桑珠孜区', '南木林县', '江孜县', '定日县', '萨迦县', '拉孜县', '昂仁县', '谢通门县', '白朗县', '仁布县', '康马县', '定结县', '仲巴县', '亚东县', '吉隆县', '聂拉木县', '萨嘎县', '岗巴县'] },
{ name: '昌都市', areaList: ['卡诺区', '江达县', '贡觉县', '类乌齐县', '丁青县', '察雅县', '八宿县', '左贡县', '芒康县', '洛隆县', '边坝县'] },
{ name: '林芝市', areaList: ['巴宜区', '工布江达县', '米林县', '墨脱县', '波密县', '察隅县', '朗县'] },
{ name: '山南市', areaList: ['乃东县', '扎囊县', '贡嘎县', '桑日县', '琼结县', '曲松县', '措美县', '洛扎县', '加查县', '隆子县', '错那县', '浪卡子县'] },
{ name: '那曲地区', areaList: ['那曲县', '嘉黎县', '比如县', '聂荣县', '安多县', '申扎县', '索县', '班戈县', '巴青县', '尼玛县', '双湖县'] },
{ name: '阿里地区', areaList: ['普兰县', '札达县', '噶尔县', '日土县', '革吉县', '改则县', '措勤县'] }
]
},
{
name: '陕西省', cityList: [
{ name: '西安市', areaList: ['新城区', '碑林区', '莲湖区', '灞桥区', '未央区', '雁塔区', '阎良区', '临潼区', '长安区', '高陵区', '鄠邑区', '蓝田县', '周至县'] },
{ name: '铜川市', areaList: ['王益区', '印台区', '耀州区', '宜君县'] },
{ name: '宝鸡市', areaList: ['渭滨区', '金台区', '陈仓区', '凤翔县', '岐山县', '扶风县', '眉县', '陇县', '千阳县', '麟游县', '凤县', '太白县'] },
{ name: '咸阳市', areaList: ['秦都区', '杨陵区', '渭城区', '三原县', '泾阳县', '乾县', '礼泉县', '永寿县', '彬州市', '长武县', '旬邑县', '淳化县', '武功县', '兴平市'] },
{ name: '渭南市', areaList: ['临渭区', '华州区', '潼关县', '大荔县', '合阳县', '澄城县', '蒲城县', '白水县', '富平县', '韩城市', '华阴市'] },
{ name: '延安市', areaList: ['宝塔区', '安塞区', '延长县', '延川县', '子长县', '志丹县', '吴旗县', '甘泉县', '富县', '洛川县', '宜川县', '黄龙县', '黄陵县'] },
{ name: '汉中市', areaList: ['汉台区', '南郑县', '城固县', '洋县', '西乡县', '勉县', '宁强县', '略阳县', '镇巴县', '留坝县', '佛坪县'] },
{ name: '榆林市', areaList: ['榆阳区', '横山区', '府谷县', '靖边县', '定边县', '绥德县', '米脂县', '佳县', '吴堡县', '清涧县', '子洲县', '神木县'] },
{ name: '安康市', areaList: ['汉滨区', '汉阴县', '石泉县', '宁陕县', '紫阳县', '岚皋县', '平利县', '镇坪县', '旬阳县', '白河县'] },
{ name: '商洛市', areaList: ['商州区', '洛南县', '丹凤县', '商南县', '山阳县', '镇安县', '柞水县'] }
]
},
{
name: '甘肃省', cityList: [
{ name: '兰州市', areaList: ['城关区', '七里河区', '西固区', '安宁区', '红古区', '永登县', '皋兰县', '榆中县'] },
{ name: '嘉峪关市', areaList: ['雄关区', '镜铁区', '长城区', '新城镇', '峪泉镇', '文殊镇'] },
{ name: '金昌市', areaList: ['金川区', '永昌县'] },
{ name: '白银市', areaList: ['白银区', '平川区', '靖远县', '会宁县', '景泰县'] },
{ name: '天水市', areaList: ['秦州区', '麦积区', '清水县', '秦安县', '甘谷县', '武山县', '张家川回族自治县'] },
{ name: '武威市', areaList: ['凉州区', '民勤县', '古浪县', '天祝藏族自治县'] },
{ name: '张掖市', areaList: ['甘州区', '肃南裕固族自治县', '民乐县', '临泽县', '高台县', '山丹县'] },
{ name: '平凉市', areaList: ['崆峒区', '泾川县', '灵台县', '崇信县', '华亭县', '庄浪县', '静宁县'] },
{ name: '酒泉市', areaList: ['肃州区', '金塔县', '瓜州县', '肃北蒙古族自治县', '阿克塞哈萨克族自治县', '玉门市', '敦煌市'] },
{ name: '庆阳市', areaList: ['西峰区', '庆城县', '环县', '华池县', '合水县', '正宁县', '宁县', '镇原县'] },
{ name: '定西市', areaList: ['安定区', '通渭县', '陇西县', '渭源县', '临洮县', '漳县', '岷县'] },
{ name: '陇南市', areaList: ['武都区', '成县', '文县', '宕昌县', '康县', '西和县', '礼县', '徽县', '两当县'] },
{ name: '临夏回族自治州', areaList: ['临夏市', '临夏县', '康乐县', '永靖县', '广河县', '和政县', '东乡族自治县', '积石山保安族东乡族撒拉族自治县'] },
{ name: '甘南藏族自治州', areaList: ['合作市', '临潭县', '卓尼县', '舟曲县', '迭部县', '玛曲县', '碌曲县', '夏河县'] }
]
},
{
name: '青海省', cityList: [
{ name: '西宁市', areaList: ['城东区', '城中区', '城西区', '城北区', '大通回族土族自治县', '湟中县', '湟源县'] },
{ name: '海东市', areaList: ['乐都区', '平安区', '民和回族土族自治县', '互助土族自治县', '化隆回族自治县', '循化撒拉族自治县'] },
{ name: '海北藏族自治州', areaList: ['门源回族自治县', '祁连县', '海晏县', '刚察县'] },
{ name: '黄南藏族自治州', areaList: ['同仁县', '尖扎县', '泽库县', '河南蒙古族自治县'] },
{ name: '海南藏族自治州', areaList: ['共和县', '同德县', '贵德县', '兴海县', '贵南县'] },
{ name: '果洛藏族自治州', areaList: ['玛沁县', '班玛县', '甘德县', '达日县', '久治县', '玛多县'] },
{ name: '玉树藏族自治州', areaList: ['玉树县', '杂多县', '称多县', '治多县', '囊谦县', '曲麻莱县'] },
{ name: '海西蒙古族藏族自治州', areaList: ['格尔木市', '德令哈市', '乌兰县', '都兰县', '天峻县', '冷湖行政委员会', '大柴旦行政委员会', '茫崖行政委员会'] }
]
},
{
name: '宁夏回族自治区', cityList: [
{ name: '银川市', areaList: ['兴庆区', '西夏区', '金凤区', '永宁县', '贺兰县', '灵武市'] },
{ name: '石嘴山市', areaList: ['大武口区', '惠农区', '平罗县'] },
{ name: '吴忠市', areaList: ['利通区', '红寺堡区', '盐池县', '同心县', '青铜峡市'] },
{ name: '固原市', areaList: ['原州区', '西吉县', '隆德县', '泾源县', '彭阳县'] },
{ name: '中卫市', areaList: ['沙坡头区', '中宁县', '海原县'] }
]
},
{
name: '新疆维吾尔自治区', cityList: [
{ name: '乌鲁木齐市', areaList: ['天山区', '沙依巴克区', '新市区', '水磨沟区', '头屯河区', '达坂城区', '米东区', '乌鲁木齐县'] },
{ name: '克拉玛依市', areaList: ['独山子区', '克拉玛依区', '白碱滩区', '乌尔禾区'] },
{ name: '吐鲁番市', areaList: ['高昌区', '鄯善县', '托克逊县'] },
{ name: '哈密市', areaList: ['伊州区', '巴里坤哈萨克自治县', '伊吾县'] },
{ name: '昌吉回族自治州', areaList: ['昌吉市', '阜康市', '呼图壁县', '玛纳斯县', '奇台县', '吉木萨尔县', '木垒哈萨克自治县'] },
{ name: '博尔塔拉蒙古自治州', areaList: ['博乐市', '阿拉山口市', '精河县', '温泉县'] },
{ name: '巴音郭楞蒙古自治州', areaList: ['库尔勒市', '轮台县', '尉犁县', '若羌县', '且末县', '焉耆回族自治县', '和静县', '和硕县', '博湖县'] },
{ name: '阿克苏地区', areaList: ['阿克苏市', '温宿县', '库车县', '沙雅县', '新和县', '拜城县', '乌什县', '阿瓦提县', '柯坪县'] },
{ name: '克孜勒苏柯尔克孜自治州', areaList: ['阿图什市', '阿克陶县', '阿合奇县', '乌恰县'] },
{ name: '喀什地区', areaList: ['喀什市', '疏附县', '疏勒县', '英吉沙县', '泽普县', '莎车县', '叶城县', '麦盖提县', '岳普湖县', '伽师县', '巴楚县', '塔什库尔干塔吉克自治县'] },
{ name: '和田地区', areaList: ['和田市', '和田县', '墨玉县', '皮山县', '洛浦县', '策勒县', '于田县', '民丰县'] },
{ name: '伊犁哈萨克自治州', areaList: ['伊宁市', '奎屯市', '霍尔果斯市', '伊宁县', '察布查尔锡伯自治县', '霍城县', '巩留县', '新源县', '昭苏县', '特克斯县', '尼勒克县'] },
{ name: '塔城地区', areaList: ['塔城市', '乌苏市', '额敏县', '沙湾县', '托里县', '裕民县', '和布克赛尔蒙古自治县'] },
{ name: '阿勒泰地区', areaList: ['阿勒泰市', '布尔津县', '富蕴县', '福海县', '哈巴河县', '青河县', '吉木乃县'] },
{ name: '自治区直辖县级行政区划', areaList: ['石河子市', '阿拉尔市', '图木舒克市', '五家渠市', '北屯市', '铁门关市', '双河市', '可克达拉布', '昆玉市'] }
]
},
{
name: '台湾省', cityList: [
{ name: '台北市', areaList: ['中正区', '大同区', '中山区', '松山市', '大安区', '万华区', '信义区', '士林区', '北投区', '内湖区', '南港区', '文山区'] },
{ name: '高雄市', areaList: ['新兴区', '前金区', '苓雅区', '盐埕区', '鼓山区', '旗津区', '前镇区', '三民区, ', '左营区', '楠梓区', '小港区', '仁武区', '大社区', '冈山区', '路竹区', '阿莲区', '田寮区', '燕集区', '桥头区', '梓官区', '弥陀区', '永安区', '湖内区', '凤山区', '大寮区', '林园区', '乌松区', '大树区', '旗山区', '美浓区', '六龟区', '内门区', '杉林区', '甲仙区', '桃源区', '那玛夏区', '茂林区', '茄楚区'] },
{ name: '台南市', areaList: ['中西区', '东区', '南区', '北区', '安平区', '安南区', '永康区', '归仁区', '新化区', '左镇区', '玉井区', '楠西区', '南化区', '仁德区', '关庙区', '龙崎区', '官田区', '麻豆区', '佳里区', '西港区', '七股区', '将军区', '学甲区', '北门区', '新营区', '后壁区', '白河区', '东山区', '六甲区', '下营区', '柳营区', '盐水区', '善化区', '大内区', '山上区', '新市区', '安定区'] },
{ name: '台中市', areaList: ['中区', '东区', '南区', '西区', '北区', '北屯区', '西屯区', '南屯区', '太平区', '大里区', '雾峰区', '乌日区', '丰原区', '后里区', '石冈区', '东势区', '和平区', '新社区', '酒子区;, 大雅区', '神冈区', '大肚区', '沙鹿区', '龙井区', '梧栖区', '清水区', '大甲区', '外埔区', '大安区'] },
{ name: '南投县', areaList: ['南投市', '中寮乡', '草屯镇', '国姓乡', '埔里镇', '仁爱乡', '名间乡', '集集镇', '水里乡', '鱼池乡', '信义乡', '竹山镇', '鹿谷乡'] },
{ name: '基隆市', areaList: ['仁爱区', '信义区', '中正区', '中山区', '安乐区', '暖暖区', '七堵区'] },
{ name: '新竹市', areaList: ['东区', '北区', '香山区'] },
{ name: '嘉义市', areaList: ['东区', '西区'] },
{ name: '新北市', areaList: ['万里区', '金山区', '板桥区', '汐止区', '深坑区', '石碇区', '瑞芳区', '平溪区', '双溪区', '贡寮区', '新店区', '坪林区', '乌来区', '永和区', '中和区', '土城区', '三峡区', '树林区', '莺歌区', '三重区', '新庄区', '泰山区', '林口区', '芦洲区', '五股区', '八里区', '淡水区', '三芝区', '石门区'] },
{ name: '宜兰县', areaList: ['宜兰市', '头城镇', '礁溪乡', '壮围乡', '员山乡', '罗东镇', '三星乡', '大同乡', '五结乡', '冬山乡', '苏澳镇', '南澳乡'] },
{ name: '新竹县', areaList: ['竹北市', '湖口乡', '新丰乡', '新埔镇', '关西镇', '芎林乡', '宝山乡', '竹东镇', '五峰乡', '横山乡', '尖石乡', '北埔乡', '峨眉乡'] },
{ name: '桃源市', areaList: ['中坜区', '平镇区', '龙潭区', '杨梅区', '新屋区', '观音区', '桃园区', '龟山区', '八德区', '大溪区', '复兴区', '大园区', '芦竹区'] },
{ name: '苗栗县', areaList: ['竹南镇', '头份市', '三湾乡', '南庄乡', '狮潭乡', '后龙镇', '通霄镇', '苑里镇', '苗栗市', '造桥乡', '头屋乡', '公馆乡', '大湖乡', '泰安乡', '铜锣乡', '三义乡', '西湖乡', '卓兰镇'] },
{ name: '彰化县', areaList: ['彰化市', '芬园乡', '花坛乡', '秀水乡', '鹿港镇', '福兴乡', '线西乡', '和美镇', '伸港乡', '员林市', '社头乡', '永靖乡', '埔心乡', '溪湖镇', '大村乡', '埔盐乡', '田中镇', '北斗镇', '田尾乡', '埤头乡', '溪州乡', '竹塘乡', '二林镇', '大城乡', '芳苑乡', '二水乡'] },
{ name: '嘉义县', areaList: ['番路乡', '梅山乡', '竹崎乡', '阿里山乡', '中埔乡', '大埔乡', '水上乡', '鹿草乡', '太保市', '朴子市', '东石乡', '六脚乡', '新港乡', '民雄乡', '大林镇', '溪口乡', '义竹乡', '布袋镇'] },
{ name: '云林县', areaList: ['斗南镇', '大埤乡', '虎尾镇', '土库镇', '褒忠乡', '东势乡', '台西乡', '仑背乡', '麦寮乡', '斗六市', '林内乡', '古坑乡', '莉桐乡', '西螺镇', '二仑乡', '北港镇', '水林乡', '口湖乡', '四湖乡', '元长乡'] },
{ name: '屏东县', areaList: ['屏东市', '三地门乡', '雾台乡', '玛家乡', '九如乡', '里港乡', '高树乡', '盐埔乡', '长治乡', '麟洛乡', '竹田乡', '内埔乡', '万丹乡', '潮州镇', '泰武乡', '来义乡', '万峦乡', '玻顶乡', '新埤乡', '南州乡', '林边乡', '东港镇', '琉球乡', '佳冬乡', '新园乡', '枋寮乡', '枋山乡', '春日乡', '狮子乡', '车城乡', '牡丹乡', '恒春镇', '满州乡'] },
{ name: '台东县', areaList: ['台东市', '绿岛乡', '兰屿乡', '延平乡', '卑南乡', '鹿野乡', '关山镇', '海端乡', '池上乡', '东河乡', '成功镇', '长滨乡', '金峰乡', '大武乡', '达仁乡', '太麻里乡'] },
{ name: '花莲县', areaList: ['花莲市', '新城乡', '秀林乡', '吉安乡', '寿丰乡', '凤林镇', '光复乡', '丰滨乡', '瑞穗乡', '万荣乡', '玉里镇', '卓溪乡', '富里乡'] },
{ name: '澎湖县', areaList: ['马公市', '西屿乡', '望安乡', '七美乡', '白沙乡', '湖西乡'] },
]
},
{
name: '香港特别行政区', cityList: [
{ name: '香港特别行政区', areaList: ['中西区', '东区', '九龙城区', '观塘区', '南区', '深水地区', '湾仔区', '黄大仙区', '油尖旺区', '离岛区', '葵青区', '北区', '西贡区', '沙田区', '屯门区', '大埔区', '荃湾区', '元朗区'] },
]
},
{
name: '澳门特别行政区', cityList: [
{ name: '澳门特别行政区', areaList: ['澳门半岛', '凼仔', '路凼城', '路环'] }
]
}
]
export default Output
\ No newline at end of file
/**
* [js-md5]{@link https://github.com/emn178/js-md5}
*
* @namespace md5
* @version 0.7.3
* @author Chen, Yi-Cyuan [emn178@gmail.com]
* @copyright Chen, Yi-Cyuan 2014-2017
* @license MIT
*/
(function () {
'use strict';
var ERROR = 'input is invalid type';
var WINDOW = typeof window === 'object';
var root = WINDOW ? window : {};
if (root.JS_MD5_NO_WINDOW) {
WINDOW = false;
}
var WEB_WORKER = !WINDOW && typeof self === 'object';
var NODE_JS = !root.JS_MD5_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;
if (NODE_JS) {
root = global;
} else if (WEB_WORKER) {
root = self;
}
var COMMON_JS = !root.JS_MD5_NO_COMMON_JS && typeof module === 'object' && module.exports;
var AMD = typeof define === 'function' && define.amd;
var ARRAY_BUFFER = !root.JS_MD5_NO_ARRAY_BUFFER && typeof ArrayBuffer !== 'undefined';
var HEX_CHARS = '0123456789abcdef'.split('');
var EXTRA = [128, 32768, 8388608, -2147483648];
var SHIFT = [0, 8, 16, 24];
var OUTPUT_TYPES = ['hex', 'array', 'digest', 'buffer', 'arrayBuffer', 'base64'];
var BASE64_ENCODE_CHAR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');
var blocks = [], buffer8;
if (ARRAY_BUFFER) {
var buffer = new ArrayBuffer(68);
buffer8 = new Uint8Array(buffer);
blocks = new Uint32Array(buffer);
}
if (root.JS_MD5_NO_NODE_JS || !Array.isArray) {
Array.isArray = function (obj) {
return Object.prototype.toString.call(obj) === '[object Array]';
};
}
if (ARRAY_BUFFER && (root.JS_MD5_NO_ARRAY_BUFFER_IS_VIEW || !ArrayBuffer.isView)) {
ArrayBuffer.isView = function (obj) {
return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer;
};
}
/**
* @method hex
* @memberof md5
* @description Output hash as hex string
* @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
* @returns {String} Hex string
* @example
* md5.hex('The quick brown fox jumps over the lazy dog');
* // equal to
* md5('The quick brown fox jumps over the lazy dog');
*/
/**
* @method digest
* @memberof md5
* @description Output hash as bytes array
* @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
* @returns {Array} Bytes array
* @example
* md5.digest('The quick brown fox jumps over the lazy dog');
*/
/**
* @method array
* @memberof md5
* @description Output hash as bytes array
* @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
* @returns {Array} Bytes array
* @example
* md5.array('The quick brown fox jumps over the lazy dog');
*/
/**
* @method arrayBuffer
* @memberof md5
* @description Output hash as ArrayBuffer
* @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
* @returns {ArrayBuffer} ArrayBuffer
* @example
* md5.arrayBuffer('The quick brown fox jumps over the lazy dog');
*/
/**
* @method buffer
* @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.
* @memberof md5
* @description Output hash as ArrayBuffer
* @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
* @returns {ArrayBuffer} ArrayBuffer
* @example
* md5.buffer('The quick brown fox jumps over the lazy dog');
*/
/**
* @method base64
* @memberof md5
* @description Output hash as base64 string
* @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
* @returns {String} base64 string
* @example
* md5.base64('The quick brown fox jumps over the lazy dog');
*/
var createOutputMethod = function (outputType) {
return function (message) {
return new Md5(true).update(message)[outputType]();
};
};
/**
* @method create
* @memberof md5
* @description Create Md5 object
* @returns {Md5} Md5 object.
* @example
* var hash = md5.create();
*/
/**
* @method update
* @memberof md5
* @description Create and update Md5 object
* @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
* @returns {Md5} Md5 object.
* @example
* var hash = md5.update('The quick brown fox jumps over the lazy dog');
* // equal to
* var hash = md5.create();
* hash.update('The quick brown fox jumps over the lazy dog');
*/
var createMethod = function () {
var method = createOutputMethod('hex');
if (NODE_JS) {
method = nodeWrap(method);
}
method.create = function () {
return new Md5();
};
method.update = function (message) {
return method.create().update(message);
};
for (var i = 0; i < OUTPUT_TYPES.length; ++i) {
var type = OUTPUT_TYPES[i];
method[type] = createOutputMethod(type);
}
return method;
};
var nodeWrap = function (method) {
var crypto = eval("require('crypto')");
var Buffer = eval("require('buffer').Buffer");
var nodeMethod = function (message) {
if (typeof message === 'string') {
return crypto.createHash('md5').update(message, 'utf8').digest('hex');
} else {
if (message === null || message === undefined) {
throw ERROR;
} else if (message.constructor === ArrayBuffer) {
message = new Uint8Array(message);
}
}
if (Array.isArray(message) || ArrayBuffer.isView(message) ||
message.constructor === Buffer) {
return crypto.createHash('md5').update(new Buffer(message)).digest('hex');
} else {
return method(message);
}
};
return nodeMethod;
};
/**
* Md5 class
* @class Md5
* @description This is internal class.
* @see {@link md5.create}
*/
function Md5(sharedMemory) {
if (sharedMemory) {
blocks[0] = blocks[16] = blocks[1] = blocks[2] = blocks[3] =
blocks[4] = blocks[5] = blocks[6] = blocks[7] =
blocks[8] = blocks[9] = blocks[10] = blocks[11] =
blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;
this.blocks = blocks;
this.buffer8 = buffer8;
} else {
if (ARRAY_BUFFER) {
var buffer = new ArrayBuffer(68);
this.buffer8 = new Uint8Array(buffer);
this.blocks = new Uint32Array(buffer);
} else {
this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
}
}
this.h0 = this.h1 = this.h2 = this.h3 = this.start = this.bytes = this.hBytes = 0;
this.finalized = this.hashed = false;
this.first = true;
}
/**
* @method update
* @memberof Md5
* @instance
* @description Update hash
* @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
* @returns {Md5} Md5 object.
* @see {@link md5.update}
*/
Md5.prototype.update = function (message) {
if (this.finalized) {
return;
}
var notString, type = typeof message;
if (type !== 'string') {
if (type === 'object') {
if (message === null) {
throw ERROR;
} else if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {
message = new Uint8Array(message);
} else if (!Array.isArray(message)) {
if (!ARRAY_BUFFER || !ArrayBuffer.isView(message)) {
throw ERROR;
}
}
} else {
throw ERROR;
}
notString = true;
}
var code, index = 0, i, length = message.length, blocks = this.blocks;
var buffer8 = this.buffer8;
while (index < length) {
if (this.hashed) {
this.hashed = false;
blocks[0] = blocks[16];
blocks[16] = blocks[1] = blocks[2] = blocks[3] =
blocks[4] = blocks[5] = blocks[6] = blocks[7] =
blocks[8] = blocks[9] = blocks[10] = blocks[11] =
blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;
}
if (notString) {
if (ARRAY_BUFFER) {
for (i = this.start; index < length && i < 64; ++index) {
buffer8[i++] = message[index];
}
} else {
for (i = this.start; index < length && i < 64; ++index) {
blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];
}
}
} else {
if (ARRAY_BUFFER) {
for (i = this.start; index < length && i < 64; ++index) {
code = message.charCodeAt(index);
if (code < 0x80) {
buffer8[i++] = code;
} else if (code < 0x800) {
buffer8[i++] = 0xc0 | (code >> 6);
buffer8[i++] = 0x80 | (code & 0x3f);
} else if (code < 0xd800 || code >= 0xe000) {
buffer8[i++] = 0xe0 | (code >> 12);
buffer8[i++] = 0x80 | ((code >> 6) & 0x3f);
buffer8[i++] = 0x80 | (code & 0x3f);
} else {
code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));
buffer8[i++] = 0xf0 | (code >> 18);
buffer8[i++] = 0x80 | ((code >> 12) & 0x3f);
buffer8[i++] = 0x80 | ((code >> 6) & 0x3f);
buffer8[i++] = 0x80 | (code & 0x3f);
}
}
} else {
for (i = this.start; index < length && i < 64; ++index) {
code = message.charCodeAt(index);
if (code < 0x80) {
blocks[i >> 2] |= code << SHIFT[i++ & 3];
} else if (code < 0x800) {
blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];
blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];
} else if (code < 0xd800 || code >= 0xe000) {
blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];
blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];
blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];
} else {
code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));
blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];
blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];
blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];
blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];
}
}
}
}
this.lastByteIndex = i;
this.bytes += i - this.start;
if (i >= 64) {
this.start = i - 64;
this.hash();
this.hashed = true;
} else {
this.start = i;
}
}
if (this.bytes > 4294967295) {
this.hBytes += this.bytes / 4294967296 << 0;
this.bytes = this.bytes % 4294967296;
}
return this;
};
Md5.prototype.finalize = function () {
if (this.finalized) {
return;
}
this.finalized = true;
var blocks = this.blocks, i = this.lastByteIndex;
blocks[i >> 2] |= EXTRA[i & 3];
if (i >= 56) {
if (!this.hashed) {
this.hash();
}
blocks[0] = blocks[16];
blocks[16] = blocks[1] = blocks[2] = blocks[3] =
blocks[4] = blocks[5] = blocks[6] = blocks[7] =
blocks[8] = blocks[9] = blocks[10] = blocks[11] =
blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;
}
blocks[14] = this.bytes << 3;
blocks[15] = this.hBytes << 3 | this.bytes >>> 29;
this.hash();
};
Md5.prototype.hash = function () {
var a, b, c, d, bc, da, blocks = this.blocks;
if (this.first) {
a = blocks[0] - 680876937;
a = (a << 7 | a >>> 25) - 271733879 << 0;
d = (-1732584194 ^ a & 2004318071) + blocks[1] - 117830708;
d = (d << 12 | d >>> 20) + a << 0;
c = (-271733879 ^ (d & (a ^ -271733879))) + blocks[2] - 1126478375;
c = (c << 17 | c >>> 15) + d << 0;
b = (a ^ (c & (d ^ a))) + blocks[3] - 1316259209;
b = (b << 22 | b >>> 10) + c << 0;
} else {
a = this.h0;
b = this.h1;
c = this.h2;
d = this.h3;
a += (d ^ (b & (c ^ d))) + blocks[0] - 680876936;
a = (a << 7 | a >>> 25) + b << 0;
d += (c ^ (a & (b ^ c))) + blocks[1] - 389564586;
d = (d << 12 | d >>> 20) + a << 0;
c += (b ^ (d & (a ^ b))) + blocks[2] + 606105819;
c = (c << 17 | c >>> 15) + d << 0;
b += (a ^ (c & (d ^ a))) + blocks[3] - 1044525330;
b = (b << 22 | b >>> 10) + c << 0;
}
a += (d ^ (b & (c ^ d))) + blocks[4] - 176418897;
a = (a << 7 | a >>> 25) + b << 0;
d += (c ^ (a & (b ^ c))) + blocks[5] + 1200080426;
d = (d << 12 | d >>> 20) + a << 0;
c += (b ^ (d & (a ^ b))) + blocks[6] - 1473231341;
c = (c << 17 | c >>> 15) + d << 0;
b += (a ^ (c & (d ^ a))) + blocks[7] - 45705983;
b = (b << 22 | b >>> 10) + c << 0;
a += (d ^ (b & (c ^ d))) + blocks[8] + 1770035416;
a = (a << 7 | a >>> 25) + b << 0;
d += (c ^ (a & (b ^ c))) + blocks[9] - 1958414417;
d = (d << 12 | d >>> 20) + a << 0;
c += (b ^ (d & (a ^ b))) + blocks[10] - 42063;
c = (c << 17 | c >>> 15) + d << 0;
b += (a ^ (c & (d ^ a))) + blocks[11] - 1990404162;
b = (b << 22 | b >>> 10) + c << 0;
a += (d ^ (b & (c ^ d))) + blocks[12] + 1804603682;
a = (a << 7 | a >>> 25) + b << 0;
d += (c ^ (a & (b ^ c))) + blocks[13] - 40341101;
d = (d << 12 | d >>> 20) + a << 0;
c += (b ^ (d & (a ^ b))) + blocks[14] - 1502002290;
c = (c << 17 | c >>> 15) + d << 0;
b += (a ^ (c & (d ^ a))) + blocks[15] + 1236535329;
b = (b << 22 | b >>> 10) + c << 0;
a += (c ^ (d & (b ^ c))) + blocks[1] - 165796510;
a = (a << 5 | a >>> 27) + b << 0;
d += (b ^ (c & (a ^ b))) + blocks[6] - 1069501632;
d = (d << 9 | d >>> 23) + a << 0;
c += (a ^ (b & (d ^ a))) + blocks[11] + 643717713;
c = (c << 14 | c >>> 18) + d << 0;
b += (d ^ (a & (c ^ d))) + blocks[0] - 373897302;
b = (b << 20 | b >>> 12) + c << 0;
a += (c ^ (d & (b ^ c))) + blocks[5] - 701558691;
a = (a << 5 | a >>> 27) + b << 0;
d += (b ^ (c & (a ^ b))) + blocks[10] + 38016083;
d = (d << 9 | d >>> 23) + a << 0;
c += (a ^ (b & (d ^ a))) + blocks[15] - 660478335;
c = (c << 14 | c >>> 18) + d << 0;
b += (d ^ (a & (c ^ d))) + blocks[4] - 405537848;
b = (b << 20 | b >>> 12) + c << 0;
a += (c ^ (d & (b ^ c))) + blocks[9] + 568446438;
a = (a << 5 | a >>> 27) + b << 0;
d += (b ^ (c & (a ^ b))) + blocks[14] - 1019803690;
d = (d << 9 | d >>> 23) + a << 0;
c += (a ^ (b & (d ^ a))) + blocks[3] - 187363961;
c = (c << 14 | c >>> 18) + d << 0;
b += (d ^ (a & (c ^ d))) + blocks[8] + 1163531501;
b = (b << 20 | b >>> 12) + c << 0;
a += (c ^ (d & (b ^ c))) + blocks[13] - 1444681467;
a = (a << 5 | a >>> 27) + b << 0;
d += (b ^ (c & (a ^ b))) + blocks[2] - 51403784;
d = (d << 9 | d >>> 23) + a << 0;
c += (a ^ (b & (d ^ a))) + blocks[7] + 1735328473;
c = (c << 14 | c >>> 18) + d << 0;
b += (d ^ (a & (c ^ d))) + blocks[12] - 1926607734;
b = (b << 20 | b >>> 12) + c << 0;
bc = b ^ c;
a += (bc ^ d) + blocks[5] - 378558;
a = (a << 4 | a >>> 28) + b << 0;
d += (bc ^ a) + blocks[8] - 2022574463;
d = (d << 11 | d >>> 21) + a << 0;
da = d ^ a;
c += (da ^ b) + blocks[11] + 1839030562;
c = (c << 16 | c >>> 16) + d << 0;
b += (da ^ c) + blocks[14] - 35309556;
b = (b << 23 | b >>> 9) + c << 0;
bc = b ^ c;
a += (bc ^ d) + blocks[1] - 1530992060;
a = (a << 4 | a >>> 28) + b << 0;
d += (bc ^ a) + blocks[4] + 1272893353;
d = (d << 11 | d >>> 21) + a << 0;
da = d ^ a;
c += (da ^ b) + blocks[7] - 155497632;
c = (c << 16 | c >>> 16) + d << 0;
b += (da ^ c) + blocks[10] - 1094730640;
b = (b << 23 | b >>> 9) + c << 0;
bc = b ^ c;
a += (bc ^ d) + blocks[13] + 681279174;
a = (a << 4 | a >>> 28) + b << 0;
d += (bc ^ a) + blocks[0] - 358537222;
d = (d << 11 | d >>> 21) + a << 0;
da = d ^ a;
c += (da ^ b) + blocks[3] - 722521979;
c = (c << 16 | c >>> 16) + d << 0;
b += (da ^ c) + blocks[6] + 76029189;
b = (b << 23 | b >>> 9) + c << 0;
bc = b ^ c;
a += (bc ^ d) + blocks[9] - 640364487;
a = (a << 4 | a >>> 28) + b << 0;
d += (bc ^ a) + blocks[12] - 421815835;
d = (d << 11 | d >>> 21) + a << 0;
da = d ^ a;
c += (da ^ b) + blocks[15] + 530742520;
c = (c << 16 | c >>> 16) + d << 0;
b += (da ^ c) + blocks[2] - 995338651;
b = (b << 23 | b >>> 9) + c << 0;
a += (c ^ (b | ~d)) + blocks[0] - 198630844;
a = (a << 6 | a >>> 26) + b << 0;
d += (b ^ (a | ~c)) + blocks[7] + 1126891415;
d = (d << 10 | d >>> 22) + a << 0;
c += (a ^ (d | ~b)) + blocks[14] - 1416354905;
c = (c << 15 | c >>> 17) + d << 0;
b += (d ^ (c | ~a)) + blocks[5] - 57434055;
b = (b << 21 | b >>> 11) + c << 0;
a += (c ^ (b | ~d)) + blocks[12] + 1700485571;
a = (a << 6 | a >>> 26) + b << 0;
d += (b ^ (a | ~c)) + blocks[3] - 1894986606;
d = (d << 10 | d >>> 22) + a << 0;
c += (a ^ (d | ~b)) + blocks[10] - 1051523;
c = (c << 15 | c >>> 17) + d << 0;
b += (d ^ (c | ~a)) + blocks[1] - 2054922799;
b = (b << 21 | b >>> 11) + c << 0;
a += (c ^ (b | ~d)) + blocks[8] + 1873313359;
a = (a << 6 | a >>> 26) + b << 0;
d += (b ^ (a | ~c)) + blocks[15] - 30611744;
d = (d << 10 | d >>> 22) + a << 0;
c += (a ^ (d | ~b)) + blocks[6] - 1560198380;
c = (c << 15 | c >>> 17) + d << 0;
b += (d ^ (c | ~a)) + blocks[13] + 1309151649;
b = (b << 21 | b >>> 11) + c << 0;
a += (c ^ (b | ~d)) + blocks[4] - 145523070;
a = (a << 6 | a >>> 26) + b << 0;
d += (b ^ (a | ~c)) + blocks[11] - 1120210379;
d = (d << 10 | d >>> 22) + a << 0;
c += (a ^ (d | ~b)) + blocks[2] + 718787259;
c = (c << 15 | c >>> 17) + d << 0;
b += (d ^ (c | ~a)) + blocks[9] - 343485551;
b = (b << 21 | b >>> 11) + c << 0;
if (this.first) {
this.h0 = a + 1732584193 << 0;
this.h1 = b - 271733879 << 0;
this.h2 = c - 1732584194 << 0;
this.h3 = d + 271733878 << 0;
this.first = false;
} else {
this.h0 = this.h0 + a << 0;
this.h1 = this.h1 + b << 0;
this.h2 = this.h2 + c << 0;
this.h3 = this.h3 + d << 0;
}
};
/**
* @method hex
* @memberof Md5
* @instance
* @description Output hash as hex string
* @returns {String} Hex string
* @see {@link md5.hex}
* @example
* hash.hex();
*/
Md5.prototype.hex = function () {
this.finalize();
var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;
return HEX_CHARS[(h0 >> 4) & 0x0F] + HEX_CHARS[h0 & 0x0F] +
HEX_CHARS[(h0 >> 12) & 0x0F] + HEX_CHARS[(h0 >> 8) & 0x0F] +
HEX_CHARS[(h0 >> 20) & 0x0F] + HEX_CHARS[(h0 >> 16) & 0x0F] +
HEX_CHARS[(h0 >> 28) & 0x0F] + HEX_CHARS[(h0 >> 24) & 0x0F] +
HEX_CHARS[(h1 >> 4) & 0x0F] + HEX_CHARS[h1 & 0x0F] +
HEX_CHARS[(h1 >> 12) & 0x0F] + HEX_CHARS[(h1 >> 8) & 0x0F] +
HEX_CHARS[(h1 >> 20) & 0x0F] + HEX_CHARS[(h1 >> 16) & 0x0F] +
HEX_CHARS[(h1 >> 28) & 0x0F] + HEX_CHARS[(h1 >> 24) & 0x0F] +
HEX_CHARS[(h2 >> 4) & 0x0F] + HEX_CHARS[h2 & 0x0F] +
HEX_CHARS[(h2 >> 12) & 0x0F] + HEX_CHARS[(h2 >> 8) & 0x0F] +
HEX_CHARS[(h2 >> 20) & 0x0F] + HEX_CHARS[(h2 >> 16) & 0x0F] +
HEX_CHARS[(h2 >> 28) & 0x0F] + HEX_CHARS[(h2 >> 24) & 0x0F] +
HEX_CHARS[(h3 >> 4) & 0x0F] + HEX_CHARS[h3 & 0x0F] +
HEX_CHARS[(h3 >> 12) & 0x0F] + HEX_CHARS[(h3 >> 8) & 0x0F] +
HEX_CHARS[(h3 >> 20) & 0x0F] + HEX_CHARS[(h3 >> 16) & 0x0F] +
HEX_CHARS[(h3 >> 28) & 0x0F] + HEX_CHARS[(h3 >> 24) & 0x0F];
};
/**
* @method toString
* @memberof Md5
* @instance
* @description Output hash as hex string
* @returns {String} Hex string
* @see {@link md5.hex}
* @example
* hash.toString();
*/
Md5.prototype.toString = Md5.prototype.hex;
/**
* @method digest
* @memberof Md5
* @instance
* @description Output hash as bytes array
* @returns {Array} Bytes array
* @see {@link md5.digest}
* @example
* hash.digest();
*/
Md5.prototype.digest = function () {
this.finalize();
var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;
return [
h0 & 0xFF, (h0 >> 8) & 0xFF, (h0 >> 16) & 0xFF, (h0 >> 24) & 0xFF,
h1 & 0xFF, (h1 >> 8) & 0xFF, (h1 >> 16) & 0xFF, (h1 >> 24) & 0xFF,
h2 & 0xFF, (h2 >> 8) & 0xFF, (h2 >> 16) & 0xFF, (h2 >> 24) & 0xFF,
h3 & 0xFF, (h3 >> 8) & 0xFF, (h3 >> 16) & 0xFF, (h3 >> 24) & 0xFF
];
};
/**
* @method array
* @memberof Md5
* @instance
* @description Output hash as bytes array
* @returns {Array} Bytes array
* @see {@link md5.array}
* @example
* hash.array();
*/
Md5.prototype.array = Md5.prototype.digest;
/**
* @method arrayBuffer
* @memberof Md5
* @instance
* @description Output hash as ArrayBuffer
* @returns {ArrayBuffer} ArrayBuffer
* @see {@link md5.arrayBuffer}
* @example
* hash.arrayBuffer();
*/
Md5.prototype.arrayBuffer = function () {
this.finalize();
var buffer = new ArrayBuffer(16);
var blocks = new Uint32Array(buffer);
blocks[0] = this.h0;
blocks[1] = this.h1;
blocks[2] = this.h2;
blocks[3] = this.h3;
return buffer;
};
/**
* @method buffer
* @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.
* @memberof Md5
* @instance
* @description Output hash as ArrayBuffer
* @returns {ArrayBuffer} ArrayBuffer
* @see {@link md5.buffer}
* @example
* hash.buffer();
*/
Md5.prototype.buffer = Md5.prototype.arrayBuffer;
/**
* @method base64
* @memberof Md5
* @instance
* @description Output hash as base64 string
* @returns {String} base64 string
* @see {@link md5.base64}
* @example
* hash.base64();
*/
Md5.prototype.base64 = function () {
var v1, v2, v3, base64Str = '', bytes = this.array();
for (var i = 0; i < 15;) {
v1 = bytes[i++];
v2 = bytes[i++];
v3 = bytes[i++];
base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +
BASE64_ENCODE_CHAR[(v1 << 4 | v2 >>> 4) & 63] +
BASE64_ENCODE_CHAR[(v2 << 2 | v3 >>> 6) & 63] +
BASE64_ENCODE_CHAR[v3 & 63];
}
v1 = bytes[i];
base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +
BASE64_ENCODE_CHAR[(v1 << 4) & 63] +
'==';
return base64Str;
};
var exports = createMethod();
if (COMMON_JS) {
module.exports = exports;
} else {
/**
* @method md5
* @description Md5 hash function, export to global in browsers.
* @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
* @returns {String} md5 hashes
* @example
* md5(''); // d41d8cd98f00b204e9800998ecf8427e
* md5('The quick brown fox jumps over the lazy dog'); // 9e107d9d372bb6826bd81d3542a419d6
* md5('The quick brown fox jumps over the lazy dog.'); // e4d909c290d0fb1ca068ffaddf22cbd0
*
* // It also supports UTF-8 encoding
* md5('中文'); // a7bac2239fcdcb3a067903d8077c4a07
*
* // It also supports byte `Array`, `Uint8Array`, `ArrayBuffer`
* md5([]); // d41d8cd98f00b204e9800998ecf8427e
* md5(new Uint8Array([])); // d41d8cd98f00b204e9800998ecf8427e
*/
root.md5 = exports;
if (AMD) {
define(function () {
return exports;
});
}
}
})()
\ No newline at end of file
const output = {
// 测试环境
baseUrl: 'https://sm-web.meiqicloud.com/api/',
// 正式环境
// baseUrl: 'https://xsslc.cndrealty.com/',
}
export default output
\ No newline at end of file
import iOption from '../option.js'
import iInterceptors from './interceptors.js'
/**
* Corvus
* @constructor
* @param {object} option - { base: '', method: 'post', header: {}, timeout: 10000, dataType: '', responseType: ''}
* @return
*/
function Corvus (option) {
let This = this
// 默认配置参数
This.option = {
base: iOption.baseUrl,
method: 'post',
header: { 'content-type': 'application/json' },
timeout: 5000,
dataType: 'json',
responseType: 'text'
}
if (Object.prototype.toString.call(option) === '[object Object]') {
This.option = Object.assign(This.option, option)
}
// 对实例参数做正确性校验
// 请求方式存在,且为post或者get之一,则设置。
if (This.option.method !== 'post' && This.option.method !== 'get') {
console.log('[corvus] "method" is invalid!')
return
}
// 请求头部存在,且不为空对象,则设置。
if (Object.prototype.toString.call(This.option.header) !== '[object Object]') {
console.log('[Corvus] "header" is invalid!')
return
}
// 基础路径存在,则设置。
if (!This.option.base || Object.prototype.toString.call(This.option.base) !== '[object String]') {
console.log('[corvus] "baseURL" is invalid!')
return
}
}
Corvus.prototype.request = function (option) {
let This = this
option = Object.assign(JSON.parse(JSON.stringify(This.option)), option)
option = iInterceptors.request(option)
let funcPromise = new Promise(function (funcResolve, funcReject) {
wx.request({
url: option.base + option.url,
header: option.header,
method: option.method,
data: option.params,
success: function (funcResult) {
if (iInterceptors.response(option, funcResult)) {
funcResolve(funcResult)
}
},
fail: function (funcResult) {
iInterceptors.response(option, funcResult)
funcReject('[axios] "request end!')
},
})
})
return funcPromise
}
export default new Corvus()
\ No newline at end of file
/**
* xmlHttpResqust 表头设置函数
* @function
* @param {object} funXmlHttpRequest
* @param {string} funType - 发送数据类型标识
* @returns
*/
let output = function (funType) {
switch (funType) {
case 'form':
return { 'Content-Type': 'application/x-www-form-urlencoded;' }
case 'formData':
return { 'Content-Type': 'multipart/form-data;' }
case 'json':
return { 'Content-Type': 'application/json;' }
default:
return { 'Content-Type': 'text/plain;' }
}
}
export default output
\ No newline at end of file
import iMd5 from '../md5.js'
let Output = {
/**
* 请求拦截器。对请求进行配置修改或者拦截。
* 此处为全局拦截器,所有实例对象均会触发。实例的自定义拦截逻辑需要在interceptors.request函数中定义。
* @function
* @param {object} option - 请求的url以及params
* @returns {object || boolean}
*/
request: function (option) {
let App = getApp()
// 网络断开场景
// if (!App.globalData.networkStatus) {
// console.log('offline')
// }
// if (option.url !== 'api/app/weixin/v1/pay/findStatus' && option.url !== 'vx/appletapi/v1/gongZheng/getState') {
// wx.showLoading({ title: '正在获取数据', mask: true })
// }
// let funcToken = App.globalData.encryptedData.token
// let funcSecret = '4b16f0e4b729a04d756e2af1bf2132693d22fad6746330c00f1e3408bb4cdb3547ce13ee48591a47ecd4ce8f6f02602e599bf3586095b67a8ba6382885e89628'
// let funcMd5 = iMd5(funcToken + JSON.stringify(option.params) + funcSecret)
// option.header = Object.assign(option.header, { 'sign': funcMd5 })
// option.header = Object.assign(option.header, { 'T_XSSL_Token': App.globalData.encryptedData.token })
return option
},
/**
* 响应拦截器。对响应数据做统一处理。
* 此处为全局拦截器,所有实例对象均会触发。实例的自定义拦截逻辑需要在interceptors.response函数中定义。
* @function
* @param {object} funResult - 响应回来的数据
* @returns {object || undefined}
*/
response: function (funcOption, funcResult) {
console.log('api: ', funcOption.url)
console.log('params: ', funcOption.params)
console.log('status: ', funcResult.statusCode)
console.log('data: ', funcResult.data ? funcResult.data : funcResult)
console.log('■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■')
return
console.log('funcResult', funcResult)
let App = getApp()
if (funcResult.errMsg === 'request:fail ') {
wx.hideLoading()
App.imState.mutations({
stateWinTip: true,
stateTipContent: '哎呀,好像没网了,请检查网络。'
})
return false
}
if (funcOption.url !== 'api/app/weixin/v1/pay/findStatus' && funcOption.url !== 'api/app/weixin/v1/pay/findStatus') {
wx.hideLoading()
}
if (funcResult.statusCode === 504) {
App.imState.mutations({
stateWinTip: true,
stateTipContent: '服务器错误'
})
return false
}
if (funcResult.data.code === 101) {
App.imState.mutations({
stateWinTip: true,
stateTipContent: '登录失效,请重新登录'
})
let funcTimer = setTimeout(function () {
clearTimeout(funcTimer)
wx.redirectTo({
url: '../sign-in/sign-in'
})
}, 2000)
return false
}
return true
},
}
export default Output
\ No newline at end of file
const output = {
image: '../../image/',
local: wx.env.USER_DATA_PATH + '/',
}
export default output
\ No newline at end of file
let Output = {
/**
* 姓名校验
* @function
* @param {string} value
* @returns {string}
*/
'name': function (value) {
let funMessage = ''
if (value !== '') {
let funRegExp = new RegExp('^[\u4e00-\u9fa5a-zA-Z ]+$', 'g')
let funcRegExp = funRegExp.test(value)
if (!funcRegExp) {
funMessage = '姓名仅支持字母、汉字'
}
} else {
funMessage = '姓名不能为空'
}
return funMessage
},
/**
* 电子邮箱
* @function
* @param {string} value
* @returns {string}
*/
'email': function (value) {
console.log(value)
let funMessage = ''
if (value !== '') {
let funRegExp = new RegExp('^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$', 'g')
let funcRegExp = funRegExp.test(value)
if (!funcRegExp) {
funMessage = '请输入正确的邮箱'
}
} else {
funMessage = '邮箱不能为空'
}
return funMessage
},
/**
* 手机号码
* @function
* @param {string} value
* @returns {string}
*/
'phone': function (value) {
let funMessage = ''
if (value !== '') {
let funRegExp = new RegExp('^(13[0-9]|14[5|7]|15[0|1|2|3|4|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9]|19[0-9])[0-9]{8}$', 'g')
let funcRegExp = funRegExp.test(value)
if (!funcRegExp) {
funMessage = '请输入正确的手机号码'
}
} else {
funMessage = '手机号码不能为空'
}
return funMessage
},
'region': function (value) {
let funMessage = ''
if (value.length === 0) {
funMessage = '请选择所在地区'
}
return funMessage
},
/**
* 身份证
* @function
* @param {string} value
* @returns {string}
*/
'identity': function (value) {
let funMessage = ''
if (value !== '') {
let funRegExp = new RegExp('^[1-9][0-9]{5}(18|19|20)[0-9]{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)[0-9]{3}[0-9Xx]$', 'g')
let funcRegExp = funRegExp.test(value)
if (!funcRegExp) {
funMessage = '请输入正确的身份证号码'
}
} else {
funMessage = '身份证号码不能为空'
}
return funMessage
},
/**
* 地址
* @function
* @param {string} value
* @returns {string}
*/
'address': function (value) {
let funMessage = ''
if (value === '') {
funMessage = '请填写地址'
}
return funMessage
},
/**
* 顾问
* @function
* @param {string} value
* @returns {string}
*/
'adviser': function (value) {
let funMessage = ''
// let funcScene = wx.getStorageSync('scene')
// if (funcScene.type !== 2 && value.name === '未知') {
// funMessage = '请选择顾问'
// }
return funMessage
},
}
export default Output
\ No newline at end of file
let Output = function (funcValue) {
let funRegExp = new RegExp('.*?script[^>]*?.*?(<\/.*?script.*?>)*', 'g')
let funcRegExp = funRegExp.test(funcValue)
if (funcRegExp) {
return true
}
return false
}
export default Output
\ No newline at end of file
import iRuleKey from './rule-key.js'
import iRuleXss from './rule-xss.js'
let Output = {
/**
* 单条数据验证
* @function
* @param {string} type - 字段类型
* @param {string} value - 字段数值
* @returns {string}
*/
item: function (type, value) {
if (iRuleKey[type] !== undefined) {
if (!iRuleXss(value)) {
return iRuleKey[type](value)
} else {
console.log('[rule] type "' + type + '" is xss!')
return '数值不符合格式'
}
} else {
console.log('[rule] type "' + type + '" is undefined!')
return ''
}
},
/**
* 列表数据验证
* @function
* @param {object | array} data - 数据对象或者对象数组
* @returns {string}
*/
list: function (data) {
let funcMessage = ''
if (Object.prototype.toString.call(data) === '[object Object]') {
let keys = Object.keys(data)
for (let i = 0, len = keys.length; i < len; i++) {
funcMessage = Output.item(keys[i], data[keys[i]])
if (funcMessage !== '') {
return funcMessage
}
}
}
if (Object.prototype.toString.call(data) === '[object Array]') {
for (let i = 0, len = data.length; i < len; i++) {
let keys = Object.keys(data[i])
for (let j = 0, lenKeys = keys.length; j < lenKeys; j++) {
funcMessage = Output.item(keys[j], data[i][keys[j]])
if (funcMessage !== '') {
return funcMessage
}
}
}
}
return ''
}
}
export default Output
\ No newline at end of file
/**
* unionId:
* scene: // 场景信息
* value: { scene: 0, value: '' }
* scene: 0 - 正常进入,1 - 无房源公众号进入,2 - 有房源扫码进入
* customerInfo:用户信息
* value:
*
*/
\ No newline at end of file
const formatTime = date => {
const year = date.getFullYear()
const month = date.getMonth() + 1
const day = date.getDate()
const hour = date.getHours()
const minute = date.getMinutes()
const second = date.getSeconds()
return [year, month, day].map(formatNumber).join('/') + ' ' + [hour, minute, second].map(formatNumber).join(':')
}
const formatNumber = n => {
n = n.toString()
return n[1] ? n : '0' + n
}
module.exports = {
formatTime: formatTime
}
/* SAMCSS-layout */
page {
min-height: 100%;
background: #f2f2f2;
.navigation {
position: fixed;
top: 0;
left: 0;
width: 750rpx;
}
.container {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment